ACR_CreatureBehavior.CreatureObject.OnSpawn C# (CSharp) Method

OnSpawn() public method

Called when the creature is spawned, immediately after the class' constructors are run. Responsible for establishing party membership.
public OnSpawn ( ) : void
return void
        public void OnSpawn()
        {
            IsAIControlled = true;
            foreach(uint NearbyCreatureId in Script.GetObjectsInShape(CLRScriptBase.SHAPE_SPHERE, 25.0f, Script.GetLocation(this.ObjectId), true, CLRScriptBase.OBJECT_TYPE_CREATURE, Script.Vector(0.0f,0.0f,0.0f)))
            {
                // It's possible that we're friendly with folk who aren't in our faction-- like if 
                // we've been set as defenders and these guys are commoners.
                if (Script.GetReputation(this.ObjectId, NearbyCreatureId) > 75 ||
                    Script.GetFactionEqual(this.ObjectId, NearbyCreatureId) == CLRScriptBase.TRUE)
                {
                    CreatureObject NearbyCreature = Server.ObjectManager.GetCreatureObject(NearbyCreatureId, true);
                    if (NearbyCreature != null && NearbyCreature.Party != null)
                    NearbyCreature.Party.AddPartyMember(this);
                    break;
                }
            }
            if (this.Party == null)
            {
                new AIParty(Server.PartyManager).AddPartyMember(this);
            }

            // Set effects inherent to subtype.
            if (Script.GetLocalInt(this.ObjectId, "X2_L_IS_INCORPOREAL") != 0) SetIncorporealEffects();

            // Set effects inherent to type.
            if (Script.GetRacialType(this.ObjectId) == CLRScriptBase.RACIAL_TYPE_ABERRATION) SetAbberationEffects();
            else if (Script.GetRacialType(this.ObjectId) == CLRScriptBase.RACIAL_TYPE_ANIMAL) SetAnimalEffects();
            else if (Script.GetRacialType(this.ObjectId) == CLRScriptBase.RACIAL_TYPE_CONSTRUCT) SetConstructEffects();
            else if (Script.GetRacialType(this.ObjectId) == CLRScriptBase.RACIAL_TYPE_DRAGON) SetDragonEffects();
            else if (Script.GetRacialType(this.ObjectId) == CLRScriptBase.RACIAL_TYPE_ELEMENTAL) SetElementalEffects();
            else if (Script.GetRacialType(this.ObjectId) == CLRScriptBase.RACIAL_TYPE_FEY) SetFeyEffects();
            else if (Script.GetRacialType(this.ObjectId) == CLRScriptBase.RACIAL_TYPE_GIANT) SetGiantEffects();
            else if (Script.GetRacialType(this.ObjectId) == CLRScriptBase.RACIAL_TYPE_HUMANOID_MONSTROUS) SetMonstrousHumanoidEffects();
            else if (Script.GetRacialType(this.ObjectId) == CLRScriptBase.RACIAL_TYPE_MAGICAL_BEAST) SetMagicalBeastEffects();
            else if (Script.GetRacialType(this.ObjectId) == CLRScriptBase.RACIAL_TYPE_OOZE) SetOozeEffects();
            else if (Script.GetRacialType(this.ObjectId) == CLRScriptBase.RACIAL_TYPE_UNDEAD) SetUndeadEffects();
            else if (Script.GetRacialType(this.ObjectId) == CLRScriptBase.RACIAL_TYPE_VERMIN) SetVerminEffects();

            int extraAttacks = Script.GetLocalInt(ObjectId, "ACR_CREATURE_EXTRA_ATTACKS");
            if(extraAttacks != 0)
                SetExtraAttacks(extraAttacks);
        }

Usage Example

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