public Int32 ScriptMain([In] object[] ScriptParameters, [In] Int32 DefaultReturnCode) { Int32 ReturnCode = 0; switch ((EVENT_TYPE)ScriptParameters[0]) { case EVENT_TYPE.CREATURE_ON_SPAWN: { CreatureObject Creature = new CreatureObject(OBJECT_SELF, Server.ObjectManager); Creature.OnSpawn(); } break; case EVENT_TYPE.CREATURE_ON_SPELL_CAST_AT: { CreatureObject Creature = Server.ObjectManager.GetCreatureObject(OBJECT_SELF); if (Creature != null) Creature.OnSpellCastAt(GetLastSpellCaster(), GetLastSpell()); } break; case EVENT_TYPE.CREATURE_ON_PHYSICALLY_ATTACKED: { CreatureObject Creature = Server.ObjectManager.GetCreatureObject(OBJECT_SELF); if (Creature != null) Creature.OnAttacked(GetLastAttacker(OBJECT_SELF)); } break; case EVENT_TYPE.CREATURE_ON_DAMAGED: { CreatureObject Creature = Server.ObjectManager.GetCreatureObject(OBJECT_SELF); if (Creature != null) Creature.OnDamaged(GetLastDamager(OBJECT_SELF), GetTotalDamageDealt()); } break; case EVENT_TYPE.CREATURE_ON_DEATH: { CreatureObject Creature = Server.ObjectManager.GetCreatureObject(OBJECT_SELF); if (Creature != null) Creature.OnDeath(GetLastKiller()); } break; case EVENT_TYPE.CREATURE_ON_BLOCKED: { CreatureObject Creature = Server.ObjectManager.GetCreatureObject(OBJECT_SELF); if (Creature != null) Creature.OnBlocked(GetBlockingDoor()); } break; case EVENT_TYPE.CREATURE_END_COMBAT_ROUND: { CreatureObject Creature = Server.ObjectManager.GetCreatureObject(OBJECT_SELF); if (Creature != null) Creature.OnEndCombatRound(); } break; case EVENT_TYPE.CREATURE_ON_CONVERSATION: { CreatureObject Creature = Server.ObjectManager.GetCreatureObject(OBJECT_SELF); if (Creature != null) Creature.OnConversation(); } break; case EVENT_TYPE.CREATURE_ON_INVENTORY_DISTURBED: { CreatureObject Creature = Server.ObjectManager.GetCreatureObject(OBJECT_SELF); if (Creature != null) Creature.OnInventoryDisturbed(); } break; case EVENT_TYPE.CREATURE_ON_HEARTBEAT: { CreatureObject Creature = Server.ObjectManager.GetCreatureObject(OBJECT_SELF); if (Creature != null) Creature.OnHeartbeat(); } break; case EVENT_TYPE.CREATURE_ON_RESTED: { CreatureObject Creature = Server.ObjectManager.GetCreatureObject(OBJECT_SELF); if (Creature != null) Creature.OnRested(); } break; case EVENT_TYPE.CREATURE_ON_PERCEPTION: { CreatureObject Creature = Server.ObjectManager.GetCreatureObject(OBJECT_SELF); if (Creature != null) { Creature.OnPerception(GetLastPerceived(), GetLastPerceptionHeard() != CLRScriptBase.FALSE ? true : false, GetLastPerceptionInaudible() != CLRScriptBase.FALSE ? true : false, GetLastPerceptionSeen() != CLRScriptBase.FALSE ? true : false, GetLastPerceptionVanished() != CLRScriptBase.FALSE ? true : false); } } break; case EVENT_TYPE.CREATURE_ON_USER_DEFINED: { CreatureObject Creature = Server.ObjectManager.GetCreatureObject(OBJECT_SELF); if (Creature != null) Creature.OnUserDefined(GetUserDefinedEventNumber()); } break; case EVENT_TYPE.MODULE_ON_STARTED: { // // Initialize the server subsystem. // Server.Initialize(); foreach (AreaObject Area in Server.ObjectManager.GetAreas()) { foreach (uint ObjectInAreaId in Area.GetObjectIdsInArea()) { if (GetObjectType(ObjectInAreaId) == CLRScriptBase.OBJECT_TYPE_TRIGGER) { if (GetTransitionTarget(ObjectInAreaId) != OBJECT_INVALID) { AreaObject.AreaTransition Transition = new AreaObject.AreaTransition(); Transition.ObjectId = ObjectInAreaId; Transition.TargetArea = Server.ObjectManager.GetAreaObject(GetArea(GetTransitionTarget(ObjectInAreaId))); Area.AreaTransitions.Add(Transition); } } } } } break; case EVENT_TYPE.AREA_ON_INSTANCE_CREATE: { if (Server.ObjectManager == null) break; ModuleObject Module = Server.ObjectManager.Module; if (Module == null) break; Module.AddInstancedArea(OBJECT_SELF); } break; } if (Server.ObjectManager != null) Server.ObjectManager.ProcessPendingDeletions(); return ReturnCode; }