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;
}