//:://///////////////////////////////////////////// //:: Name: Bedlamson's Dynamic Merchant System //:: Conversation 'Actions Taken' //:: FileName: bdm_cnv_steal //:: Copyright (c) 2003 Stephen Spann //:://///////////////////////////////////////////// //:: Created By: Bedlamson //:: Created On: 1/23/2003 //:://///////////////////////////////////////////// #include "prc_inc_racial" #include "bdm_include" int GetFavoredEnemy(); void main() { // Get variables. object oPC = GetPCSpeaker(); object oShopkeeper = OBJECT_SELF; int nSpotBonus; string sParams = GetLocalString(oShopkeeper, "PARAMS"); object oStore = GetLocalObject(oShopkeeper, "STORE"); // Get parameters. int nCircumstancePos = FindSubString(sParams, "SC"); int nReactionHostile = GetValue(OBJECT_SELF, "RH", sParams); int nTimeLimit = GetValue(OBJECT_SELF, "SL", sParams); //int nTimeDelay = GetValue(OBJECT_SELF, "TM", sParams); int nStealAll = GetValue(OBJECT_SELF, "SA", sParams); // Apply bonuses to the shopkeeper's Spot skill. if (MyPRCGetRacialType(oShopkeeper) == RACIAL_TYPE_ELF) nSpotBonus = nSpotBonus + 2; if (MyPRCGetRacialType(oShopkeeper) == RACIAL_TYPE_HALFELF) nSpotBonus = nSpotBonus + 1; if (GetFavoredEnemy() == MyPRCGetRacialType(oPC)) nSpotBonus = nSpotBonus + 1; if (GetHasFeat(FEAT_ALERTNESS)) nSpotBonus = nSpotBonus + 2; int nPCSkill = GetSkillRank(SKILL_PICK_POCKET, oPC) + GetAbilityModifier(ABILITY_DEXTERITY, oPC); if (nCircumstancePos != -1) { string sCircumstance = GetSubString(sParams, nCircumstancePos + 2, 2); if (GetStringLeft(sCircumstance, 1) == "P") { nPCSkill = nPCSkill + StringToInt(GetStringRight(sCircumstance, 1)); } if (GetStringLeft(sCircumstance, 1) == "N") { nPCSkill = nPCSkill - StringToInt(GetStringRight(sCircumstance, 1)); } } int nShopSkill = GetSkillRank(SKILL_SPOT, oShopkeeper) + GetAbilityModifier(ABILITY_WISDOM, oShopkeeper) + nSpotBonus; int nPCRoll = d20(); int nShopRoll = d20(); int nPCTotal = nPCSkill + nPCRoll; int nShopTotal = nShopRoll + nShopSkill; string sMessage = "(" + IntToString(nPCSkill) + " + " + IntToString(nPCRoll) + " = " + IntToString(nPCTotal) + " vs. " + IntToString(nShopSkill) + " + " + IntToString(nShopRoll) + " = " + IntToString(nShopTotal) + ")"; if (nPCTotal == nShopTotal) { nPCRoll = GetAbilityModifier(ABILITY_DEXTERITY, oPC); nShopRoll = GetAbilityModifier(ABILITY_WISDOM, oShopkeeper); sMessage = "Pick Pocket : *tie* : " + sMessage + " : (" + IntToString(nPCRoll) + " vs. " + IntToString(nShopRoll) + ")"; } if (nPCTotal == nShopTotal) { sMessage = sMessage + " : *tie* : "; switch(d2()) { case 1: nPCTotal = 1; nShopTotal = 0; sMessage = sMessage + "PC wins."; break; case 2: nPCTotal = 0; nShopTotal = 1; sMessage = sMessage + "Shopkeeper wins."; break; } } if (nShopTotal > nPCTotal) { SendMessageToPC(oPC, "Pick Pocket : *failure* : " + sMessage); SendMessageToPC(oPC, "The merchant has spotted you!"); if (nReactionHostile) { AdjustReputation(oPC, OBJECT_SELF, -100); ActionAttack(oPC); } return; } if (nShopTotal < nPCTotal) { SendMessageToPC(oPC, "Pick Pocket : *success* : " + sMessage); } object oStealStore = CreateObject(OBJECT_TYPE_STORE, "stealstore", GetLocation(oPC)); if (nTimeLimit) DelayCommand(IntToFloat(nTimeLimit), DestroyObject(oStealStore)); object oStoreInv = GetFirstItemInInventory(oStore); if (nDebug) SendMessageToPC(GetFirstPC(), "Steal All: " + IntToString(nStealAll)); while (oStoreInv != OBJECT_INVALID) { //if (nTimeDelay && GetItemTime(oStoreInv) > nTimeDelay) // { // DestroyObject(oStoreInv); // } int nType = GetBaseItemType(oStoreInv); if (!nStealAll) { if (nType == BASE_ITEM_AMULET || nType == BASE_ITEM_ARROW || nType == BASE_ITEM_BELT || nType == BASE_ITEM_BOLT || nType == BASE_ITEM_BOOK || nType == BASE_ITEM_BOOTS || nType == BASE_ITEM_BRACER || nType == BASE_ITEM_BULLET || nType == BASE_ITEM_DAGGER || nType == BASE_ITEM_DART || nType == BASE_ITEM_GEM || nType == BASE_ITEM_GLOVES || nType == BASE_ITEM_HANDAXE || nType == BASE_ITEM_HEALERSKIT || nType == BASE_ITEM_KEY || nType == BASE_ITEM_LIGHTHAMMER || nType == BASE_ITEM_MAGICWAND || nType == BASE_ITEM_MISCSMALL || nType == BASE_ITEM_MISCTHIN || nType == BASE_ITEM_MISCWIDE || nType == BASE_ITEM_POTIONS || nType == BASE_ITEM_RING || nType == BASE_ITEM_SCROLL || nType == BASE_ITEM_SHORTSWORD || nType == BASE_ITEM_SHURIKEN || nType == BASE_ITEM_SLING || nType == BASE_ITEM_SPELLSCROLL || nType == BASE_ITEM_THIEVESTOOLS || nType == BASE_ITEM_THROWINGAXE) { object oNewItem = CreateItemOnObject(GetResRef(oStoreInv), oStealStore, GetNumStackedItems(oStoreInv)); SetLocalInt(oNewItem, "STOLEN", TRUE); SetLocalObject(oNewItem, "STEALSTORE", oStealStore); if (nDebug) SendMessageToPC(GetFirstPC(), "steal small"); } } else { object oNewItem = CreateItemOnObject(GetResRef(oStoreInv), oStealStore, GetNumStackedItems(oStoreInv)); SetLocalInt(oNewItem, "STOLEN", TRUE); SetLocalObject(oNewItem, "STEALSTORE", oStealStore); if (nDebug) SendMessageToPC(GetFirstPC(), "steal all"); } oStoreInv = GetNextItemInInventory(oStore); } GiveGoldToCreature(oPC, 1); if (nDebug && oStealStore == OBJECT_INVALID) SendMessageToPC(oPC, "No store to open."); OpenStore(oStealStore, oPC, -1, -1); } int GetFavoredEnemy() { int nFavoredEnemy; if (GetHasFeat(FEAT_FAVORED_ENEMY_DWARF)) return RACIAL_TYPE_DWARF; if (GetHasFeat(FEAT_FAVORED_ENEMY_ELF)) return RACIAL_TYPE_ELF; if (GetHasFeat(FEAT_FAVORED_ENEMY_GNOME)) return RACIAL_TYPE_GNOME; if (GetHasFeat(FEAT_FAVORED_ENEMY_HALFELF)) return RACIAL_TYPE_HALFELF; if (GetHasFeat(FEAT_FAVORED_ENEMY_HALFLING)) return RACIAL_TYPE_HALFLING; if (GetHasFeat(FEAT_FAVORED_ENEMY_HALFORC)) return RACIAL_TYPE_HALFORC; if (GetHasFeat(FEAT_FAVORED_ENEMY_HUMAN)) return RACIAL_TYPE_HUMAN; return FALSE; }