#include "stx_inc_craft" int StartingConditional() { object oPC = GetPCSpeaker(); if (!GetHasSkill(SKILL_CRAFT_WEAPON, oPC)) return TRUE; object oWeapon = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC); if (!GetIsObjectValid(oWeapon) || GetPlotFlag(oWeapon) || IPGetIsIntelligentWeapon(oWeapon) || !(IPGetIsMeleeWeapon(oWeapon) || IPGetIsRangedWeapon(oWeapon))) { oWeapon = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC); if (!GetIsObjectValid(oWeapon) || GetPlotFlag(oWeapon) || !(GetBaseItemType(oWeapon)==BASE_ITEM_SMALLSHIELD || GetBaseItemType(oWeapon)==BASE_ITEM_LARGESHIELD || GetBaseItemType(oWeapon)==BASE_ITEM_TOWERSHIELD )) return TRUE; } if (GetIsDM(oPC)) return FALSE; object oNPC = GetLocalObject(oPC, "STX_CR_NPC"); if (GetIsObjectValid(oNPC)) { if (GetTag(oNPC) != STX_CR_SMITH_NPC) return TRUE; } else if (STX_CR_REQUIRE_PLACEABLE) { int iType = GetBaseItemType(oWeapon); string sRequiredPlaceable; switch (iType) { case BASE_ITEM_SMALLSHIELD: case BASE_ITEM_LARGESHIELD: case BASE_ITEM_TOWERSHIELD: case BASE_ITEM_BASTARDSWORD: case BASE_ITEM_BATTLEAXE: case BASE_ITEM_DAGGER: case BASE_ITEM_DIREMACE: case BASE_ITEM_DOUBLEAXE: case BASE_ITEM_DWARVENWARAXE: case BASE_ITEM_GREATAXE: case BASE_ITEM_GREATSWORD: case BASE_ITEM_HALBERD: case BASE_ITEM_HEAVYFLAIL: case BASE_ITEM_KAMA: case BASE_ITEM_KATANA: case BASE_ITEM_KUKRI: case BASE_ITEM_LIGHTFLAIL: case BASE_ITEM_LIGHTHAMMER: case BASE_ITEM_LIGHTMACE: case BASE_ITEM_LONGSWORD: case BASE_ITEM_MORNINGSTAR: case BASE_ITEM_RAPIER: case BASE_ITEM_SCIMITAR: case BASE_ITEM_SCYTHE: case BASE_ITEM_SHORTSPEAR: case BASE_ITEM_SHORTSWORD: case BASE_ITEM_SICKLE: case BASE_ITEM_THROWINGAXE: case BASE_ITEM_TWOBLADEDSWORD: case BASE_ITEM_WARHAMMER: sRequiredPlaceable = STX_CR_METAL_PLACEABLE; break; case BASE_ITEM_CLUB: case BASE_ITEM_HEAVYCROSSBOW: case BASE_ITEM_LIGHTCROSSBOW: case BASE_ITEM_LONGBOW: case BASE_ITEM_MAGICSTAFF: case BASE_ITEM_QUARTERSTAFF: case BASE_ITEM_SHORTBOW: case BASE_ITEM_SLING: case BASE_ITEM_WHIP: sRequiredPlaceable = STX_CR_WOOD_PLACEABLE; break; } object oRequiredPlaceable = GetNearestObjectByTag(sRequiredPlaceable, oPC); if (GetArea(oPC) != GetArea(oRequiredPlaceable) || GetDistanceBetween(oPC, oRequiredPlaceable) > STX_CR_REQUIRED_DISTANCE) return TRUE; } return FALSE; }