/////////////////////////////////////////////////////////////////////////////// // lgs_chest_check // written by: eyesolated // written at: April 27, 2018 // // Notes: Check the chest for reinitialization /////////// // Includes // // Needs #include "mod_cfg" #include "lgs_cfg" #include "lgs_inc" /////////////////////// // Function Declaration // void main() { // Someone called this script, we're in Check Mode SetLocalInt(OBJECT_SELF, CS_LGS_CHEST_CHECK_ISCHECKING, TRUE); // Get Check Count int nCheck = GetLocalInt(OBJECT_SELF, CS_LGS_CHEST_CHECK_COUNT); // If Check Count * Interval >= Reset Time, do the reset if ((nCheck == 0 || (nCheck * CS_LGS_CHEST_CHECK_INTERVAL) >= CS_LGS_CHEST_RESET_IDLE) && !GetIsObjectValid(GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC, OBJECT_SELF))) { // Clear our inventory lgs_ClearInventory(OBJECT_SELF); // Set Plot flag SetPlotFlag(OBJECT_SELF, TRUE); // Reconfigure int nLockChance = GetLocalInt(OBJECT_SELF, CS_LGS_CHEST_VAR_LOCKCHANCE); int nLockDC = GetLocalInt(OBJECT_SELF, CS_LGS_CHEST_VAR_LOCKDC); int nTrapChance = GetLocalInt(OBJECT_SELF, CS_LGS_CHEST_VAR_TRAPCHANCE); int nTrapStrength = GetLocalInt(OBJECT_SELF, CS_LGS_CHEST_VAR_TRAPSTRENGTH); int nTrapDetectDC = GetLocalInt(OBJECT_SELF, CS_LGS_CHEST_VAR_TRAPDETECTDC); int nTrapDisarmDC = GetLocalInt(OBJECT_SELF, CS_LGS_CHEST_VAR_TRAPDISARMDC); // Standards if (nLockChance == 0) nLockChance = CI_LGS_CHEST_DEFAULT_LOCKCHANCE; if (nLockDC == 0) nLockDC = CI_LGS_CHEST_DEFAULT_LOCKDC; if (nTrapChance == 0) nTrapChance = CI_LGS_CHEST_DEFAULT_TRAPCHANCE; if (nTrapStrength == 0) nTrapStrength = CI_LGS_CHEST_DEFAULT_TRAPSTRENGTH; if (nTrapDetectDC == 0) nTrapDetectDC = CI_LGS_CHEST_DEFAULT_TRAPDETECTDC; if (nTrapDisarmDC == 0) nTrapDisarmDC = CI_LGS_CHEST_DEFAULT_TRAPDISARMDC; // Relock if (nLockChance >= d100(1)) { SetLocked(OBJECT_SELF, TRUE); SetLockUnlockDC(OBJECT_SELF, nLockDC); // Remove Plot Flag if the chest is locked to make it bashable if (CI_LGS_CHESTS_ALLOW_BASH) SetPlotFlag(OBJECT_SELF, FALSE); } // Trap if (!GetIsTrapped(OBJECT_SELF) && nTrapChance >= d100(1)) { int nSelectedTrap; switch (nTrapStrength) { case 1: // Minor nSelectedTrap = Random(11); switch (nSelectedTrap) { case 0: CreateTrapOnObject(TRAP_BASE_TYPE_MINOR_ACID, OBJECT_SELF); break; case 1: CreateTrapOnObject(TRAP_BASE_TYPE_MINOR_ACID_SPLASH, OBJECT_SELF); break; case 2: CreateTrapOnObject(TRAP_BASE_TYPE_MINOR_ELECTRICAL, OBJECT_SELF); break; case 3: CreateTrapOnObject(TRAP_BASE_TYPE_MINOR_FIRE, OBJECT_SELF); break; case 4: CreateTrapOnObject(TRAP_BASE_TYPE_MINOR_FROST, OBJECT_SELF); break; case 5: CreateTrapOnObject(TRAP_BASE_TYPE_MINOR_GAS, OBJECT_SELF); break; case 6: CreateTrapOnObject(TRAP_BASE_TYPE_MINOR_HOLY, OBJECT_SELF); break; case 7: CreateTrapOnObject(TRAP_BASE_TYPE_MINOR_NEGATIVE, OBJECT_SELF); break; case 8: CreateTrapOnObject(TRAP_BASE_TYPE_MINOR_SONIC, OBJECT_SELF); break; case 9: CreateTrapOnObject(TRAP_BASE_TYPE_MINOR_SPIKE, OBJECT_SELF); break; case 10: CreateTrapOnObject(TRAP_BASE_TYPE_MINOR_TANGLE, OBJECT_SELF); break; } break; case 2: // Average nSelectedTrap = Random(11); switch (nSelectedTrap) { case 0: CreateTrapOnObject(TRAP_BASE_TYPE_AVERAGE_ACID, OBJECT_SELF); break; case 1: CreateTrapOnObject(TRAP_BASE_TYPE_AVERAGE_ACID_SPLASH, OBJECT_SELF); break; case 2: CreateTrapOnObject(TRAP_BASE_TYPE_AVERAGE_ELECTRICAL, OBJECT_SELF); break; case 3: CreateTrapOnObject(TRAP_BASE_TYPE_AVERAGE_FIRE, OBJECT_SELF); break; case 4: CreateTrapOnObject(TRAP_BASE_TYPE_AVERAGE_FROST, OBJECT_SELF); break; case 5: CreateTrapOnObject(TRAP_BASE_TYPE_AVERAGE_GAS, OBJECT_SELF); break; case 6: CreateTrapOnObject(TRAP_BASE_TYPE_AVERAGE_HOLY, OBJECT_SELF); break; case 7: CreateTrapOnObject(TRAP_BASE_TYPE_AVERAGE_NEGATIVE, OBJECT_SELF); break; case 8: CreateTrapOnObject(TRAP_BASE_TYPE_AVERAGE_SONIC, OBJECT_SELF); break; case 9: CreateTrapOnObject(TRAP_BASE_TYPE_AVERAGE_SPIKE, OBJECT_SELF); break; case 10: CreateTrapOnObject(TRAP_BASE_TYPE_AVERAGE_TANGLE, OBJECT_SELF); break; } break; case 3: // Strong nSelectedTrap = Random(11); switch (nSelectedTrap) { case 0: CreateTrapOnObject(TRAP_BASE_TYPE_STRONG_ACID, OBJECT_SELF); break; case 1: CreateTrapOnObject(TRAP_BASE_TYPE_STRONG_ACID_SPLASH, OBJECT_SELF); break; case 2: CreateTrapOnObject(TRAP_BASE_TYPE_STRONG_ELECTRICAL, OBJECT_SELF); break; case 3: CreateTrapOnObject(TRAP_BASE_TYPE_STRONG_FIRE, OBJECT_SELF); break; case 4: CreateTrapOnObject(TRAP_BASE_TYPE_STRONG_FROST, OBJECT_SELF); break; case 5: CreateTrapOnObject(TRAP_BASE_TYPE_STRONG_GAS, OBJECT_SELF); break; case 6: CreateTrapOnObject(TRAP_BASE_TYPE_STRONG_HOLY, OBJECT_SELF); break; case 7: CreateTrapOnObject(TRAP_BASE_TYPE_STRONG_NEGATIVE, OBJECT_SELF); break; case 8: CreateTrapOnObject(TRAP_BASE_TYPE_STRONG_SONIC, OBJECT_SELF); break; case 9: CreateTrapOnObject(TRAP_BASE_TYPE_STRONG_SPIKE, OBJECT_SELF); break; case 10: CreateTrapOnObject(TRAP_BASE_TYPE_STRONG_TANGLE, OBJECT_SELF); break; } break; case 4: // Deadly nSelectedTrap = Random(11); switch (nSelectedTrap) { case 0: CreateTrapOnObject(TRAP_BASE_TYPE_DEADLY_ACID, OBJECT_SELF); break; case 1: CreateTrapOnObject(TRAP_BASE_TYPE_DEADLY_ACID_SPLASH, OBJECT_SELF); break; case 2: CreateTrapOnObject(TRAP_BASE_TYPE_DEADLY_ELECTRICAL, OBJECT_SELF); break; case 3: CreateTrapOnObject(TRAP_BASE_TYPE_DEADLY_FIRE, OBJECT_SELF); break; case 4: CreateTrapOnObject(TRAP_BASE_TYPE_DEADLY_FROST, OBJECT_SELF); break; case 5: CreateTrapOnObject(TRAP_BASE_TYPE_DEADLY_GAS, OBJECT_SELF); break; case 6: CreateTrapOnObject(TRAP_BASE_TYPE_DEADLY_HOLY, OBJECT_SELF); break; case 7: CreateTrapOnObject(TRAP_BASE_TYPE_DEADLY_NEGATIVE, OBJECT_SELF); break; case 8: CreateTrapOnObject(TRAP_BASE_TYPE_DEADLY_SONIC, OBJECT_SELF); break; case 9: CreateTrapOnObject(TRAP_BASE_TYPE_DEADLY_SPIKE, OBJECT_SELF); break; case 10: CreateTrapOnObject(TRAP_BASE_TYPE_DEADLY_TANGLE, OBJECT_SELF); break; } break; case 5: // Epic nSelectedTrap = Random(4); switch (nSelectedTrap) { case 0: CreateTrapOnObject(TRAP_BASE_TYPE_EPIC_ELECTRICAL, OBJECT_SELF); break; case 1: CreateTrapOnObject(TRAP_BASE_TYPE_EPIC_FIRE, OBJECT_SELF); break; case 2: CreateTrapOnObject(TRAP_BASE_TYPE_EPIC_FROST, OBJECT_SELF); break; case 3: CreateTrapOnObject(TRAP_BASE_TYPE_EPIC_SONIC, OBJECT_SELF); break; } break; } SetTrapDetectDC(OBJECT_SELF, nTrapDetectDC); SetTrapDisarmDC(OBJECT_SELF, nTrapDisarmDC); } // We are now reset, no need for further checks until the Execution of this // script is triggered from the outside SetLocalInt(OBJECT_SELF, CS_LGS_CHEST_CHECK_COUNT, 1); DeleteLocalInt(OBJECT_SELF, CS_LGS_CHEST_CHECK_ISCHECKING); return; } // Increase Check Count SetLocalInt(OBJECT_SELF, CS_LGS_CHEST_CHECK_COUNT, nCheck + 1); // Next check DelayCommand(CS_LGS_CHEST_CHECK_INTERVAL, ExecuteScript("lgs_chest_check", OBJECT_SELF)); }