diff --git a/_module/ncs/lokikeycheck.ncs b/_module/ncs/lokikeycheck.ncs index 00e6b52c..45537027 100644 Binary files a/_module/ncs/lokikeycheck.ncs and b/_module/ncs/lokikeycheck.ncs differ diff --git a/_module/ncs/prc_pwonspawn.ncs b/_module/ncs/prc_pwonspawn.ncs index 7568ab2f..518ba71a 100644 Binary files a/_module/ncs/prc_pwonspawn.ncs and b/_module/ncs/prc_pwonspawn.ncs differ diff --git a/_module/nss/prc_pwonspawn.nss b/_module/nss/prc_pwonspawn.nss index bcd39556..42a5959b 100644 --- a/_module/nss/prc_pwonspawn.nss +++ b/_module/nss/prc_pwonspawn.nss @@ -6,7 +6,125 @@ */ //::////////////////////////////////////////////////// +#include "NW_I0_GENERIC" +#include "nw_i0_plot" +#include "rd_level" +#include "inc_sqlite_time" + +void ReallyEquipItemInSlot(object oNPC, object oItem, int nSlot); + void main() { - ExecuteScript("prc_npc_spawn", OBJECT_SELF); -} +//:: Initialize Major Variables + effect eVFX; + + int nTotalPCs; + int nTotalPCLevel; + int nAveragePCLevel; + + string sCurrentDate = SQLite_GetSystemDate(); + string sMonthDay = GetSubString(sCurrentDate, 0, 5); + + object oArea = GetArea(OBJECT_SELF); + object oSkelly; + object oPC = GetFirstObjectInArea(oArea); + + ExecuteScript("prc_npc_spawn", OBJECT_SELF); + +//: Don't spawn skeletons from skeletons + if (GetResRef(OBJECT_SELF) == "nw_skeleton") + return; + +//:: Get average PC level for area +//:: Cycle through PCs in Area + + while (oPC != OBJECT_INVALID) + { + if (GetIsPC(oPC) == TRUE) + { + nTotalPCs++; + nTotalPCLevel = nTotalPCLevel + GetHitDice(oPC); + } + + oPC = GetNextObjectInArea(oArea); + } + + if (nTotalPCs > 0) + { + nAveragePCLevel = nTotalPCLevel / nTotalPCs; + } + + else + { + nAveragePCLevel = 3; + } + +//:: Only active during Halloween week. + if ((sMonthDay == "10/24") || + (sMonthDay == "10/25") || + (sMonthDay == "10/26") || + (sMonthDay == "10/27") || + (sMonthDay == "10/28") || + (sMonthDay == "10/29") || + (sMonthDay == "10/30") || + (sMonthDay == "10/31") || + (sMonthDay == "11/01")) + { + //:: 50% chance to spawn + if ( Random(100) < 50 ) + { + //:: Spawn Skeleton. + eVFX = EffectVisualEffect(VFX_IMP_EVIL_HELP); + oSkelly = CreateObject(OBJECT_TYPE_CREATURE, "nw_skeleton", GetLocation(OBJECT_SELF)); + LevelMob(oSkelly, nAveragePCLevel); + + //:: Assign Weapon + int nResult = d6(1); + int nStackSize = 1; // Create 1 items; + string sItem; + + if (nResult == 1) + { + sItem = "nw_wplhb001"; //:: Halberd + } + else if(nResult == 2) + { + sItem = "nw_wplsc001"; //:: Scythe + } + else if(nResult == 3) + { + sItem = "nw_wplss001"; //:: Spear + } + else if(nResult ==4) + { + sItem = "nw_wblfh001"; //:: Heavy Flail + } + else if(nResult == 5) + { + sItem = "nw_wswgs001"; //:: Greatsword + } + else + + sItem = "nw_waxgr001"; //:: Greataxe + + object oWeapon = CreateItemOnObject(sItem, oSkelly, nStackSize); + ReallyEquipItemInSlot(oSkelly, oWeapon, INVENTORY_SLOT_RIGHTHAND); + + //:: Apply VFX & Attack + AssignCommand(oSkelly, DetermineCombatRound(OBJECT_SELF)); + DelayCommand(0.3, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVFX, oSkelly)); + } + + } + +} + +void ReallyEquipItemInSlot(object oNPC, object oItem, int nSlot) +{ + if (GetItemInSlot(nSlot) != oItem) + { + ClearAllActions(); + ActionEquipItem(oItem, nSlot); + DelayCommand(1.0, ReallyEquipItemInSlot(oNPC, oItem, nSlot)); + } +} \ No newline at end of file