#include "en5_misc" void CreateTrapKit(object oTarget, int iItemLevel); void DetectTrap(object oPC,int iDC,int iLevel); void main() { int iMinLevel; int iMaxLevel; int iLevel; int iDC; object oPC; object oArea; int iRogue = GetLevelByClass(CLASS_TYPE_ROGUE, oPC) + GetLevelByClass(CLASS_TYPE_SCOUT, oPC) + GetLevelByClass(CLASS_TYPE_BEGUILER, oPC) + GetLevelByClass(CLASS_TYPE_NINJA, oPC) + GetLevelByClass(CLASS_TYPE_FACTOTUM, oPC) + GetLevelByClass(CLASS_TYPE_PSYCHIC_ROGUE, oPC); if (GetLocalInt(OBJECT_SELF,"Disabled") == 1) return; if (Random(12)>0 && iRogue == 0) { SetLocalInt(OBJECT_SELF,"Disabled",1); return; } if (Random(8)>0 && iRogue > 0) { SetLocalInt(OBJECT_SELF,"Disabled",1); return; } oPC = GetEnteringObject(); if (GetLocalInt(GetArea(OBJECT_SELF),"SpecialArea") == 1) { oArea=GetArea(GetObjectByTag(GetLocalString(GetArea(OBJECT_SELF),"Zone") + "_Enter")); iMinLevel = GetLocalInt(oArea,"MinLevel"); iMaxLevel = GetLocalInt(oArea,"MaxLevel"); } else { iMinLevel = GetLocalInt(GetArea(OBJECT_SELF),"MinLevel"); iMaxLevel = GetLocalInt(GetArea(OBJECT_SELF),"MaxLevel"); } iLevel = Random(iMaxLevel-iMinLevel+1)+iMinLevel; //GetError("Trap Level = " + IntToString(iLevel)); if (iLevel<1) iLevel = GetHitDice(oPC); iDC=GetLocalInt(OBJECT_SELF,"iDC"); if (iDC == 0) { iDC = iLevel + 8 + Random(10); SetLocalInt(OBJECT_SELF,"iDC",iDC); } if (GetLocalInt(OBJECT_SELF,"Detected")==0) { DetectTrap(oPC,iDC,iLevel); } else { if (GetLocalInt(OBJECT_SELF,GetName(oPC))==0) DetectTrap(oPC,iDC,iLevel); } } void DetectTrap(object oPC,int iDC,int iLevel) { int iDetect; int iDisable; int iAquire; int iItemLevel; int iEffect; int iDamageType; int iRandom; int iDice; int iDamage; object oGlow; location lLoc; effect eVisu; effect eDamg; iDetect=FALSE; iDisable=FALSE; iAquire=FALSE; iItemLevel=GetItemLevel(iLevel); if (GetHasSkill(SKILL_SEARCH,oPC)) if (GetIsSkillSuccessful(oPC,SKILL_SEARCH,iDC)) { iDetect=TRUE; SetLocalInt(OBJECT_SELF,GetName(oPC),1); } if (iDetect==TRUE && GetHasSkill(SKILL_DISABLE_TRAP,oPC)) if (GetIsSkillSuccessful(oPC,SKILL_DISABLE_TRAP,iDC)) iDisable=TRUE; if (iDisable==TRUE && GetHasSkill(SKILL_DISABLE_TRAP,oPC) && GetLevelByClass(CLASS_TYPE_ROGUE,oPC)>0) if (GetIsSkillSuccessful(oPC,SKILL_DISABLE_TRAP,iDC+10)) iAquire=TRUE; if (iDetect == FALSE) { iDice = iLevel/2; if (iDice<1) iDice=1; iDamage = d4(iDice); iRandom = Random(9)+1; switch (iRandom) { case 1: iEffect=VFX_FNF_GAS_EXPLOSION_ACID; iDamageType=DAMAGE_TYPE_ACID; break; case 2: iEffect=VFX_FNF_GAS_EXPLOSION_EVIL; iDamageType=DAMAGE_TYPE_NEGATIVE; break; case 3: iEffect=VFX_FNF_SWINGING_BLADE; iDamageType=DAMAGE_TYPE_SLASHING; break; case 4: if (iDamage<30) { iEffect=VFX_IMP_SPIKE_TRAP; iDamageType=DAMAGE_TYPE_PIERCING; } else { iEffect=VFX_FNF_MYSTICAL_EXPLOSION; iDamageType=DAMAGE_TYPE_MAGICAL; } break; case 5: if (iDamage<30) iEffect=VFX_COM_HIT_ELECTRICAL; else iEffect=VFX_FNF_ELECTRIC_EXPLOSION; iDamageType=DAMAGE_TYPE_ELECTRICAL; break; case 6: if (iDamage<30) iEffect=VFX_COM_HIT_DIVINE; else iEffect=VFX_FNF_STRIKE_HOLY; iDamageType=DAMAGE_TYPE_DIVINE; break; case 7: iEffect=VFX_IMP_SPIKE_TRAP; iDamageType=DAMAGE_TYPE_PIERCING; break; case 8: iEffect=VFX_COM_HIT_FROST; iDamageType=DAMAGE_TYPE_COLD; break; case 9: iEffect=VFX_COM_HIT_SONIC; iDamageType=DAMAGE_TYPE_SONIC; break; } eVisu = EffectVisualEffect(iEffect, FALSE); eDamg = EffectDamage(iDamage,iDamageType); ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVisu, GetLocation(oPC)); ApplyEffectToObject(DURATION_TYPE_INSTANT, eDamg, oPC); SendMessageToPC(oPC, "A trap hits you for " + IntToString(iDamage) + " points of damage."); SetLocalInt(OBJECT_SELF,"Disabled",1); } if (iDetect == TRUE && iDisable == FALSE) { lLoc=GetLocation(GetNearestObjectByTag("en5_trap")); oGlow=CreateObject(OBJECT_TYPE_PLACEABLE,"en5_trapglow",lLoc); ApplyEffectToObject(2, EffectVisualEffect(VFX_DUR_GLOW_RED),oGlow); ApplyEffectToObject(2, EffectVisualEffect(VFX_DUR_LIGHT_RED_15), oGlow); SetLocalInt(OBJECT_SELF,"Detected",1); SendMessageToPC(oPC, "You have detected a trap but are unable to disable it."); } if (iDetect == TRUE && iDisable == TRUE && iAquire==FALSE) { SendMessageToPC(oPC, "You have detected and disabled a trap."); SetLocalInt(OBJECT_SELF,"Disabled",1); GiveXPToCreature(oPC,iDC*10); } if (iDetect == TRUE && iDisable == TRUE && iAquire==TRUE) { CreateTrapKit(oPC,iItemLevel); SendMessageToPC(oPC, "You have detected and disabled a trap, and you have aquired the device."); SetLocalInt(OBJECT_SELF,"Disabled",1); GiveXPToCreature(oPC,iDC*20); } } void CreateTrapKit(object oTarget, int iItemLevel) { string sKit = ""; if (iItemLevel==1) // 200 { int nRandom = d3(); switch (nRandom) { case 1: sKit = "nw_it_trap001"; break; case 2: sKit = "nw_it_trap029"; break; case 3: sKit = "nw_it_trap033"; break; } } else if (iItemLevel==2) // 800 { int nRandom = d12(); switch (nRandom) { case 1: sKit = "nw_it_trap001"; break; case 2: sKit = "nw_it_trap029"; break; case 3: sKit = "nw_it_trap033"; break; case 4: sKit = "nw_it_trap002"; break; case 5: sKit = "nw_it_trap030"; break; case 6: sKit = "nw_it_trap037"; break; case 7: sKit = "nw_it_trap034"; break; case 8: sKit = "nw_it_trap005"; break; case 9: sKit = "nw_it_trap038"; break; case 10: sKit = "nw_it_trap041"; break; case 11: sKit = "nw_it_trap003"; break; case 12: sKit = "nw_it_trap031"; break; } } else if (iItemLevel==3) // 200 - 2500 { int nRandom = Random(17) + 1; switch (nRandom) { case 1: sKit = "nw_it_trap002"; break; case 2: sKit = "nw_it_trap030"; break; case 3: sKit = "nw_it_trap037"; break; case 4: sKit = "nw_it_trap034"; break; case 5: sKit = "nw_it_trap005"; break; case 6: sKit = "nw_it_trap038"; break; case 7: sKit = "nw_it_trap041"; break; case 8: sKit = "nw_it_trap003"; break; case 9: sKit = "nw_it_trap031"; break; case 10: sKit = "nw_it_trap035"; break; case 11: sKit = "nw_it_trap006"; break; case 12: sKit = "nw_it_trap042"; break; case 13: sKit = "nw_it_trap004"; break; case 14: sKit = "nw_it_trap032"; break; case 15: sKit = "nw_it_trap039"; break; case 16: sKit = "nw_it_trap009"; break; case 17: sKit = "nw_it_trap036"; break; } } else if (iItemLevel==4) // 800 - 10000 { int nRandom = Random(19) + 1; switch (nRandom) { case 1: sKit = "nw_it_trap035"; break; case 2: sKit = "nw_it_trap006"; break; case 3: sKit = "nw_it_trap042"; break; case 4: sKit = "nw_it_trap004"; break; case 5: sKit = "nw_it_trap032"; break; case 6: sKit = "nw_it_trap039"; break; case 7: sKit = "nw_it_trap009"; break; case 8: sKit = "nw_it_trap036"; break; case 9: sKit = "nw_it_trap013"; break; case 10: sKit = "nw_it_trap040"; break; case 11: sKit = "nw_it_trap007"; break; case 12: sKit = "nw_it_trap043"; break; case 13: sKit = "nw_it_trap010"; break; case 14: sKit = "nw_it_trap017"; break; case 15: sKit = "nw_it_trap021"; break; case 16: sKit = "nw_it_trap014"; break; case 17: sKit = "nw_it_trap025"; break; case 18: sKit = "nw_it_trap008"; break; case 19: sKit = "nw_it_trap044"; break; } } else if (iItemLevel==5) // 2000 -16500 { int nRandom = Random(18) + 1; switch (nRandom) { case 1: sKit = "nw_it_trap039"; break; case 2: sKit = "nw_it_trap009"; break; case 3: sKit = "nw_it_trap036"; break; case 4: sKit = "nw_it_trap013"; break; case 5: sKit = "nw_it_trap040"; break; case 6: sKit = "nw_it_trap007"; break; case 7: sKit = "nw_it_trap043"; break; case 8: sKit = "nw_it_trap010"; break; case 9: sKit = "nw_it_trap017"; break; case 10: sKit = "nw_it_trap021"; break; case 11: sKit = "nw_it_trap014"; break; case 12: sKit = "nw_it_trap025"; break; case 13: sKit = "nw_it_trap008"; break; case 14: sKit = "nw_it_trap044"; break; case 15: sKit = "nw_it_trap018"; break; case 16: sKit = "nw_it_trap011"; break; case 17: sKit = "nw_it_trap022"; break; case 18: sKit = "nw_it_trap026"; break; } } else if (iItemLevel==6) // 2000 - ? { int nRandom = Random(27) + 1; switch (nRandom) { case 1: sKit = "nw_it_trap039"; break; case 2: sKit = "nw_it_trap009"; break; case 3: sKit = "nw_it_trap036"; break; case 4: sKit = "nw_it_trap013"; break; case 5: sKit = "nw_it_trap040"; break; case 6: sKit = "nw_it_trap007"; break; case 7: sKit = "nw_it_trap043"; break; case 8: sKit = "nw_it_trap010"; break; case 9: sKit = "nw_it_trap017"; break; case 10: sKit = "nw_it_trap021"; break; case 11: sKit = "nw_it_trap014"; break; case 12: sKit = "nw_it_trap025"; break; case 13: sKit = "nw_it_trap008"; break; case 14: sKit = "nw_it_trap044"; break; case 15: sKit = "nw_it_trap018"; break; case 16: sKit = "nw_it_trap011"; break; case 17: sKit = "nw_it_trap022"; break; case 18: sKit = "nw_it_trap026"; break; case 19: sKit = "nw_it_trap015"; break; case 20: sKit = "nw_it_trap012"; break; case 21: sKit = "nw_it_trap019"; break; case 22: sKit = "nw_it_trap023"; break; case 23: sKit = "nw_it_trap016"; break; case 24: sKit = "nw_it_trap027"; break; case 25: sKit = "nw_it_trap020"; break; case 26: sKit = "nw_it_trap024"; break; case 27: sKit = "nw_it_trap028"; break; } } //dbSpeak("Create Trapkit"); CreateItemOnObject(sKit, oTarget, 1); }