Files
HeroesStone_PRC8/_module/nss/jdwskimmer.nss
Jaysyn904 1eefc84201 Initial Commit
Initial Commit.
2025-09-14 15:40:46 -04:00

258 lines
13 KiB
Plaintext

/**
* Put this script in the module wide OnAcquireItem
*
* The script gives pc's a chance to spot objects that are moved
* around. So if someone is removing items from a chest, a pc
* gets a spot check to see if they see the item. Large items
* like armor are seen by everyone. Rogues (or anyone else with
* pick pocket) automatically "palm" items and makes it harder
* to spot.
*
* The pc also gets an identity check (though at a penalty) to
* see if they can tell what specific type of object it is.
*
* There is also a penalty if the pc is currently engaged in combat
*
* Most of the configurable options are near the top of the script
*
* Copyright 2002 Jim Woodgate (woody@realtime.net) All Rights Reserved
*/
/* Configurable Options */
int PARTY_ONLY = FALSE; // Only check the party, if false check entire area
int DONT_CHECK_FROM_PC = FALSE; // Set to true if you don't want pc exchanges to trigger
int BASE_DC = 15; // The base dc for a small item
int COMBAT_PENALTY = -10; // This is the spot penalty if a pc is in combat
int IDENTITY_PENALTY = -5; // This penalty is to see if the pc can identify the item
int DEBUG = TRUE; // Set to true to get some semi-interesting information
// in the log file
/* Declare the fuctions */
void doChecks(object oTo, int dc, object oItem, object oMember);
string getItemDescription(object oItem, object oMember);
int isMagical(object oItem);
void loadDescriptionStrings();
/* And the main */
void main() {
object oFrom = GetModuleItemAcquiredFrom();
object oTo = GetModuleItemAcquiredBy();
object oItem = GetModuleItemAcquired();
if (GetIsObjectValid(oFrom) && GetIsPC(oTo)
&& GetBaseItemType(oItem) != BASE_ITEM_INVALID) {
if (GetIsPC(oFrom) && DONT_CHECK_FROM_PC) {
return;
}
object oArea = GetArea(oTo);
int pickPocket = GetSkillRank(SKILL_PICK_POCKET ,oTo);
int weight = GetWeight(oItem);
int dc = BASE_DC;
if (weight > 50) {
dc = -5;
}
else if (weight > 1) {
dc -= (weight / 4);
}
dc += pickPocket;
if (DEBUG) {
PrintString("DC is "+IntToString(dc));
}
if (PARTY_ONLY) {
object oMember = GetFirstFactionMember(oTo, TRUE);
while (GetIsObjectValid(oMember)) {
if (oArea == GetArea(oMember)
&& GetObjectSeen(oTo, oMember)
&& !(oTo == oMember)) {
doChecks(oTo, dc, oItem, oMember);
}
oMember = GetNextFactionMember(oTo, TRUE);
}
}
else {
object oMember = GetFirstPC();
while (GetIsObjectValid(oMember)) {
if (oArea == GetArea(oMember)
&& GetObjectSeen(oTo, oMember)
&& !(oTo == oMember)) {
doChecks(oTo, dc, oItem, oMember);
}
oMember = GetNextPC();
}
}
}
}
/**
* Do the actualy check
*/
void doChecks(object oTo, int dc, object oItem, object oMember) {
int roll = d20();
int spotCheck = GetSkillRank(SKILL_SPOT, oMember);
if (GetIsInCombat(oMember)) {
spotCheck += COMBAT_PENALTY;
}
if (DEBUG) {
PrintString("Roll "+IntToString(roll)+" spot "
+IntToString(spotCheck)+" checking against a dc of "+IntToString(dc));
}
if (roll + spotCheck >= dc) {
SendMessageToPC(oMember, "You see "+GetName(oTo)+" getting "
+getItemDescription(oItem, oMember));
}
}
/**
* Function to get a description of an item, uses oMember's lore
* skill
*/
string getItemDescription(object oItem, object oMember) {
int lore = GetSkillRank(SKILL_LORE, oMember) + IDENTITY_PENALTY;
if (lore < 0) {
lore = 0;
}
int maxValue = StringToInt(Get2DAString("SkillVsItemCost", "DeviceCostMax", lore));
int itemValue = GetGoldPieceValue(oItem);
if (!GetIdentified(oItem)) {
SetIdentified(oItem, TRUE);
itemValue = GetGoldPieceValue(oItem);
SetIdentified(oItem, FALSE);
}
if (GetItemStackSize(oItem) > 1) {
itemValue /= GetItemStackSize(oItem);
}
if (DEBUG) {
PrintString("lore "+IntToString(lore)+" max value "
+IntToString(maxValue)+" itemvalue "
+IntToString(itemValue)+" "+GetName(oItem));
}
if (maxValue > itemValue) {
return GetName(oItem);
}
string magicalString = "";
if (isMagical(oItem)) {
magicalString = " (magical) ";
}
if (!GetLocalInt(OBJECT_SELF, "MODULE_BASE_ITEM_DESC_LOADED")) {
loadDescriptionStrings();
}
string baseItemName = GetLocalString(OBJECT_SELF, "MODULE_BASE_ITEM_DESC_"
+IntToString(GetBaseItemType(oItem)));
if (baseItemName == "") {
return "Unknown Item"+magicalString;
}
return baseItemName+magicalString;
}
/**
* Bunch of sets, only do this once!
*/
void loadDescriptionStrings() {
SetLocalInt(OBJECT_SELF, "MODULE_BASE_ITEM_DESC_LOADED", TRUE);
SetLocalString(OBJECT_SELF, "MODULE_BASE_ITEM_DESC_"+IntToString(BASE_ITEM_AMULET), "an amulet");
SetLocalString(OBJECT_SELF, "MODULE_BASE_ITEM_DESC_"+IntToString(BASE_ITEM_ARMOR), "some armor");
SetLocalString(OBJECT_SELF, "MODULE_BASE_ITEM_DESC_"+IntToString(BASE_ITEM_ARROW), "some arrows");
SetLocalString(OBJECT_SELF, "MODULE_BASE_ITEM_DESC_"+IntToString(BASE_ITEM_BASTARDSWORD), "a bastard sword");
SetLocalString(OBJECT_SELF, "MODULE_BASE_ITEM_DESC_"+IntToString(BASE_ITEM_BATTLEAXE), "a battle axe");
SetLocalString(OBJECT_SELF, "MODULE_BASE_ITEM_DESC_"+IntToString(BASE_ITEM_BELT), "a belt");
SetLocalString(OBJECT_SELF, "MODULE_BASE_ITEM_DESC_"+IntToString(BASE_ITEM_BOLT), "some bolts");
SetLocalString(OBJECT_SELF, "MODULE_BASE_ITEM_DESC_"+IntToString(BASE_ITEM_BOOK), "a book");
SetLocalString(OBJECT_SELF, "MODULE_BASE_ITEM_DESC_"+IntToString(BASE_ITEM_BOOTS), "some boots");
SetLocalString(OBJECT_SELF, "MODULE_BASE_ITEM_DESC_"+IntToString(BASE_ITEM_BRACER), "some bracers");
SetLocalString(OBJECT_SELF, "MODULE_BASE_ITEM_DESC_"+IntToString(BASE_ITEM_BULLET), "some bullets");
SetLocalString(OBJECT_SELF, "MODULE_BASE_ITEM_DESC_"+IntToString(BASE_ITEM_CBLUDGWEAPON), "some weapon");
SetLocalString(OBJECT_SELF, "MODULE_BASE_ITEM_DESC_"+IntToString(BASE_ITEM_CLOAK), "a cloak");
SetLocalString(OBJECT_SELF, "MODULE_BASE_ITEM_DESC_"+IntToString(BASE_ITEM_CLUB), "a club");
SetLocalString(OBJECT_SELF, "MODULE_BASE_ITEM_DESC_"+IntToString(BASE_ITEM_CPIERCWEAPON), "some pointy weapon");
SetLocalString(OBJECT_SELF, "MODULE_BASE_ITEM_DESC_"+IntToString(BASE_ITEM_CREATUREITEM), "some piece of a creature");
SetLocalString(OBJECT_SELF, "MODULE_BASE_ITEM_DESC_"+IntToString(BASE_ITEM_CSLASHWEAPON), "some sharp weapon");
SetLocalString(OBJECT_SELF, "MODULE_BASE_ITEM_DESC_"+IntToString(BASE_ITEM_CSLSHPRCWEAP), "some weapon");
SetLocalString(OBJECT_SELF, "MODULE_BASE_ITEM_DESC_"+IntToString(BASE_ITEM_DAGGER), "a dagger");
SetLocalString(OBJECT_SELF, "MODULE_BASE_ITEM_DESC_"+IntToString(BASE_ITEM_DART), "some darts");
SetLocalString(OBJECT_SELF, "MODULE_BASE_ITEM_DESC_"+IntToString(BASE_ITEM_DIREMACE), "a dire mace");
SetLocalString(OBJECT_SELF, "MODULE_BASE_ITEM_DESC_"+IntToString(BASE_ITEM_DOUBLEAXE), "a double axe");
SetLocalString(OBJECT_SELF, "MODULE_BASE_ITEM_DESC_"+IntToString(BASE_ITEM_GEM), "some gems");
SetLocalString(OBJECT_SELF, "MODULE_BASE_ITEM_DESC_"+IntToString(BASE_ITEM_GLOVES), "some gloves");
SetLocalString(OBJECT_SELF, "MODULE_BASE_ITEM_DESC_"+IntToString(BASE_ITEM_GOLD), "some gold");
SetLocalString(OBJECT_SELF, "MODULE_BASE_ITEM_DESC_"+IntToString(BASE_ITEM_GREATAXE), "a great axe");
SetLocalString(OBJECT_SELF, "MODULE_BASE_ITEM_DESC_"+IntToString(BASE_ITEM_GREATSWORD), "a great sword");
SetLocalString(OBJECT_SELF, "MODULE_BASE_ITEM_DESC_"+IntToString(BASE_ITEM_GRENADE), "some grenades");
SetLocalString(OBJECT_SELF, "MODULE_BASE_ITEM_DESC_"+IntToString(BASE_ITEM_HALBERD), "a halberd");
SetLocalString(OBJECT_SELF, "MODULE_BASE_ITEM_DESC_"+IntToString(BASE_ITEM_HANDAXE), "a hand axe");
SetLocalString(OBJECT_SELF, "MODULE_BASE_ITEM_DESC_"+IntToString(BASE_ITEM_HEALERSKIT), "a healer's kit");
SetLocalString(OBJECT_SELF, "MODULE_BASE_ITEM_DESC_"+IntToString(BASE_ITEM_HEAVYCROSSBOW), "a large crossbow");
SetLocalString(OBJECT_SELF, "MODULE_BASE_ITEM_DESC_"+IntToString(BASE_ITEM_HEAVYFLAIL), "a large flail");
SetLocalString(OBJECT_SELF, "MODULE_BASE_ITEM_DESC_"+IntToString(BASE_ITEM_HELMET), "a helmet");
SetLocalString(OBJECT_SELF, "MODULE_BASE_ITEM_DESC_"+IntToString(BASE_ITEM_KAMA), "a kama");
SetLocalString(OBJECT_SELF, "MODULE_BASE_ITEM_DESC_"+IntToString(BASE_ITEM_KATANA), "a katana");
SetLocalString(OBJECT_SELF, "MODULE_BASE_ITEM_DESC_"+IntToString(BASE_ITEM_KEY), "a key");
SetLocalString(OBJECT_SELF, "MODULE_BASE_ITEM_DESC_"+IntToString(BASE_ITEM_KUKRI), "a kukri");
SetLocalString(OBJECT_SELF, "MODULE_BASE_ITEM_DESC_"+IntToString(BASE_ITEM_LARGEBOX), "a large box");
SetLocalString(OBJECT_SELF, "MODULE_BASE_ITEM_DESC_"+IntToString(BASE_ITEM_LARGESHIELD), "a large shield");
SetLocalString(OBJECT_SELF, "MODULE_BASE_ITEM_DESC_"+IntToString(BASE_ITEM_LIGHTCROSSBOW), "a small crossbow");
SetLocalString(OBJECT_SELF, "MODULE_BASE_ITEM_DESC_"+IntToString(BASE_ITEM_LIGHTFLAIL), "a small flail");
SetLocalString(OBJECT_SELF, "MODULE_BASE_ITEM_DESC_"+IntToString(BASE_ITEM_LIGHTHAMMER), "a small hammer");
SetLocalString(OBJECT_SELF, "MODULE_BASE_ITEM_DESC_"+IntToString(BASE_ITEM_LIGHTMACE), "a small mace");
SetLocalString(OBJECT_SELF, "MODULE_BASE_ITEM_DESC_"+IntToString(BASE_ITEM_LONGBOW), "a longbow");
SetLocalString(OBJECT_SELF, "MODULE_BASE_ITEM_DESC_"+IntToString(BASE_ITEM_LONGSWORD), "a longword");
SetLocalString(OBJECT_SELF, "MODULE_BASE_ITEM_DESC_"+IntToString(BASE_ITEM_MAGICROD), "a rod");
SetLocalString(OBJECT_SELF, "MODULE_BASE_ITEM_DESC_"+IntToString(BASE_ITEM_MAGICSTAFF), "a staff");
SetLocalString(OBJECT_SELF, "MODULE_BASE_ITEM_DESC_"+IntToString(BASE_ITEM_MAGICWAND), "a wand");
SetLocalString(OBJECT_SELF, "MODULE_BASE_ITEM_DESC_"+IntToString(BASE_ITEM_MISCLARGE), "some large item");
SetLocalString(OBJECT_SELF, "MODULE_BASE_ITEM_DESC_"+IntToString(BASE_ITEM_MISCMEDIUM), "some medium item");
SetLocalString(OBJECT_SELF, "MODULE_BASE_ITEM_DESC_"+IntToString(BASE_ITEM_MISCSMALL), "some small item");
SetLocalString(OBJECT_SELF, "MODULE_BASE_ITEM_DESC_"+IntToString(BASE_ITEM_MISCTALL), "some tall item");
SetLocalString(OBJECT_SELF, "MODULE_BASE_ITEM_DESC_"+IntToString(BASE_ITEM_MISCTHIN), "some thin item");
SetLocalString(OBJECT_SELF, "MODULE_BASE_ITEM_DESC_"+IntToString(BASE_ITEM_MISCWIDE), "some wide item");
SetLocalString(OBJECT_SELF, "MODULE_BASE_ITEM_DESC_"+IntToString(BASE_ITEM_MORNINGSTAR), "a morningstar");
SetLocalString(OBJECT_SELF, "MODULE_BASE_ITEM_DESC_"+IntToString(BASE_ITEM_POTIONS), "a potion");
SetLocalString(OBJECT_SELF, "MODULE_BASE_ITEM_DESC_"+IntToString(BASE_ITEM_QUARTERSTAFF), "a quarterstaff");
SetLocalString(OBJECT_SELF, "MODULE_BASE_ITEM_DESC_"+IntToString(BASE_ITEM_RAPIER), "a rapier");
SetLocalString(OBJECT_SELF, "MODULE_BASE_ITEM_DESC_"+IntToString(BASE_ITEM_RING), "a ring");
SetLocalString(OBJECT_SELF, "MODULE_BASE_ITEM_DESC_"+IntToString(BASE_ITEM_SCIMITAR), "a scimitar");
SetLocalString(OBJECT_SELF, "MODULE_BASE_ITEM_DESC_"+IntToString(BASE_ITEM_SCROLL), "a scroll");
SetLocalString(OBJECT_SELF, "MODULE_BASE_ITEM_DESC_"+IntToString(BASE_ITEM_SCYTHE), "a scythe");
SetLocalString(OBJECT_SELF, "MODULE_BASE_ITEM_DESC_"+IntToString(BASE_ITEM_SHORTBOW), "a shortbow");
SetLocalString(OBJECT_SELF, "MODULE_BASE_ITEM_DESC_"+IntToString(BASE_ITEM_SHORTSPEAR), "a short spear");
SetLocalString(OBJECT_SELF, "MODULE_BASE_ITEM_DESC_"+IntToString(BASE_ITEM_SHORTSWORD), "a shortsword");
SetLocalString(OBJECT_SELF, "MODULE_BASE_ITEM_DESC_"+IntToString(BASE_ITEM_SHURIKEN), "some shuriken");
SetLocalString(OBJECT_SELF, "MODULE_BASE_ITEM_DESC_"+IntToString(BASE_ITEM_SICKLE), "a sickle");
SetLocalString(OBJECT_SELF, "MODULE_BASE_ITEM_DESC_"+IntToString(BASE_ITEM_SLING), "a sling");
SetLocalString(OBJECT_SELF, "MODULE_BASE_ITEM_DESC_"+IntToString(BASE_ITEM_SMALLSHIELD), "a small shield");
SetLocalString(OBJECT_SELF, "MODULE_BASE_ITEM_DESC_"+IntToString(BASE_ITEM_SPELLSCROLL), "a scroll");
SetLocalString(OBJECT_SELF, "MODULE_BASE_ITEM_DESC_"+IntToString(BASE_ITEM_THIEVESTOOLS), "thieves tools");
SetLocalString(OBJECT_SELF, "MODULE_BASE_ITEM_DESC_"+IntToString(BASE_ITEM_THROWINGAXE), "some throwing axes");
SetLocalString(OBJECT_SELF, "MODULE_BASE_ITEM_DESC_"+IntToString(BASE_ITEM_TORCH), "a torch");
SetLocalString(OBJECT_SELF, "MODULE_BASE_ITEM_DESC_"+IntToString(BASE_ITEM_TOWERSHIELD), "a tower shield");
SetLocalString(OBJECT_SELF, "MODULE_BASE_ITEM_DESC_"+IntToString(BASE_ITEM_TRAPKIT), "a trap kit");
SetLocalString(OBJECT_SELF, "MODULE_BASE_ITEM_DESC_"+IntToString(BASE_ITEM_TWOBLADEDSWORD), "a two bladed sword");
SetLocalString(OBJECT_SELF, "MODULE_BASE_ITEM_DESC_"+IntToString(BASE_ITEM_WARHAMMER), "a warhammer");
}
/**
* Check if there is anything "special" about this item
*/
int isMagical(object oItem) {
int i;
for (i=0; i<70; i++) {
if (GetItemHasItemProperty(oItem, i)) {
return TRUE;
}
}
return FALSE;
}