public Int32 ScriptMain([In] object[] ScriptParameters, [In] Int32 DefaultReturnCode) { int Value = (int)ScriptParameters[0]; // ScriptParameterTypes[0] is typeof(int) TrapEvent currentEvent = (TrapEvent)ScriptParameters[0]; switch (currentEvent) { case TrapEvent.CreateGeneric: { NWLocation loc = Location((uint)ScriptParameters[4], Vector((float)ScriptParameters[1], (float)ScriptParameters[2], (float)ScriptParameters[3]), 0.0f); string resRef = (string)ScriptParameters[20]; if (resRef == "") { TriggerArea triggerArea = (TriggerArea)ScriptParameters[5]; int effectArea = (int)ScriptParameters[6]; float effectSize = (float)ScriptParameters[7]; int damageType = (int)ScriptParameters[8]; int diceNumber = (int)ScriptParameters[9]; int diceType = (int)ScriptParameters[10]; int saveDC = (int)ScriptParameters[11]; int attackBonus = (int)ScriptParameters[12]; int numberOfShots = (int)ScriptParameters[13]; uint trapOrigin = (uint)ScriptParameters[14]; int targetAlignment = (int)ScriptParameters[15]; int targetRace = (int)ScriptParameters[16]; int minimumToTrigger = (int)ScriptParameters[17]; int detectDC = (int)ScriptParameters[18]; int disarmDC = (int)ScriptParameters[19]; CreateTraps.GenericDamage(this, loc, triggerArea, effectArea, effectSize, damageType, diceNumber, diceType, saveDC, attackBonus, numberOfShots, trapOrigin, targetAlignment, targetRace, minimumToTrigger, detectDC, disarmDC, ""); break; } else { ALFA.Shared.TrapResource trapToSpawn = ALFA.Shared.Modules.InfoStore.ModuleTraps[(string)ScriptParameters[20]]; if (trapToSpawn.SpellTrap) { CreateTraps.Spell(this, loc, (TriggerArea)trapToSpawn.TriggerArea, trapToSpawn.SpellId, trapToSpawn.NumberOfShots, trapToSpawn.TrapOrigin, trapToSpawn.TargetAlignment, trapToSpawn.TargetRace, trapToSpawn.MinimumToTrigger, trapToSpawn.DetectDC, trapToSpawn.DisarmDC, trapToSpawn.Description); } else { CreateTraps.GenericDamage(this, loc, (TriggerArea)trapToSpawn.TriggerArea, trapToSpawn.EffectArea, trapToSpawn.EffectSize, trapToSpawn.DamageType, trapToSpawn.DiceNumber, trapToSpawn.DiceType, trapToSpawn.SaveDC, trapToSpawn.AttackBonus, trapToSpawn.NumberOfShots, trapToSpawn.TrapOrigin, trapToSpawn.TargetAlignment, trapToSpawn.TargetRace, trapToSpawn.MinimumToTrigger, trapToSpawn.DetectDC, trapToSpawn.DisarmDC, trapToSpawn.Description); } } break; } case TrapEvent.CreateSpell: { NWLocation loc = Location((uint)ScriptParameters[4], Vector((float)ScriptParameters[1], (float)ScriptParameters[2], (float)ScriptParameters[3]), 0.0f); TriggerArea triggerArea = (TriggerArea)ScriptParameters[5]; int spellId = (int)ScriptParameters[8]; int numberOfShots = (int)ScriptParameters[13]; uint trapOrigin = (uint)ScriptParameters[14]; int targetAlignment = (int)ScriptParameters[15]; int targetRace = (int)ScriptParameters[16]; int minimumToTrigger = (int)ScriptParameters[17]; int detectDC = (int)ScriptParameters[18]; int disarmDC = (int)ScriptParameters[19]; CreateTraps.Spell(this, loc, triggerArea, spellId, numberOfShots, trapOrigin, targetAlignment, targetRace, minimumToTrigger, detectDC, disarmDC, ""); break; } case TrapEvent.DetectEnter: { string trapTag = GetTag(OBJECT_SELF); if (ALFA.Shared.Modules.InfoStore.SpawnedTrapDetect.Keys.Contains(trapTag)) { TrapDetect.Enter(this, ALFA.Shared.Modules.InfoStore.SpawnedTrapDetect[trapTag]); } else { uint enteringObject = GetEnteringObject(); SendMessageToPC(enteringObject, String.Format("Error: This appears to be a trap detection trigger, but I can not find any trap named {0}", trapTag)); } break; } case TrapEvent.DetectExit: { string trapTag = GetTag(OBJECT_SELF); uint enteringObject = GetEnteringObject(); if (ALFA.Shared.Modules.InfoStore.SpawnedTrapDetect.Keys.Contains(trapTag)) { TrapDetect.Exit(this, ALFA.Shared.Modules.InfoStore.SpawnedTrapDetect[trapTag]); } break; } case TrapEvent.TriggerEnter: { string trapTag = GetTag(OBJECT_SELF); if (ALFA.Shared.Modules.InfoStore.SpawnedTrapTriggers.Keys.Contains(trapTag)) { TrapTrigger.Enter(this, ALFA.Shared.Modules.InfoStore.SpawnedTrapTriggers[trapTag]); } else { uint enteringObject = GetEnteringObject(); SendMessageToPC(enteringObject, String.Format("Error: This appears to be a trap firing trigger, but I can not find any trap named {0}", trapTag)); } break; } case TrapEvent.TriggerExit: { string trapTag = GetTag(OBJECT_SELF); uint enteringObject = GetEnteringObject(); if (ALFA.Shared.Modules.InfoStore.SpawnedTrapTriggers.Keys.Contains(trapTag)) { TrapTrigger.Exit(this, ALFA.Shared.Modules.InfoStore.SpawnedTrapTriggers[trapTag]); } break; } case TrapEvent.TrapDisarm: { string trapTag = GetTag(OBJECT_SELF); trapTag = trapTag.Substring(0, trapTag.Length - 1); uint disabler = GetLastUsedBy(); if (ALFA.Shared.Modules.InfoStore.SpawnedTrapTriggers.Keys.Contains(trapTag)) { TrapDisable.Disable(this, ALFA.Shared.Modules.InfoStore.SpawnedTrapTriggers[trapTag], disabler); } break; } case TrapEvent.TrapDespawn: { string trapTag = GetTag(OBJECT_SELF); if (ALFA.Shared.Modules.InfoStore.SpawnedTrapTriggers.Keys.Contains(trapTag)) { TrapDisable.RemoveTrap(this, ALFA.Shared.Modules.InfoStore.SpawnedTrapTriggers[trapTag]); } if (ALFA.Shared.Modules.InfoStore.SpawnedTrapDetect.Keys.Contains(trapTag)) { TrapDisable.RemoveTrap(this, ALFA.Shared.Modules.InfoStore.SpawnedTrapDetect[trapTag]); } break; } } return(0); }