Exemplo n.º 1
0
Arquivo: Event.cs Projeto: crybx/mud
        private static void RunEnchantments(IMobileObject performer, EventType eventType, EventParamerters paramerter)
        {
            if (eventType == EventType.DamageReceivedBeforeDefense ||
                eventType == EventType.DamageReceivedAfterDefense)
            {
                foreach (IEnchantment enchantment in paramerter.Defender.Enchantments)
                {
                    RunEnchantment(enchantment, eventType, paramerter);
                }
            }
            else if (eventType == EventType.DamageDealtBeforeDefense ||
                     eventType == EventType.DamageDealtAfterDefense)
            {
                if (performer != null)
                {
                    foreach (IEnchantment enchantment in performer.Enchantments)
                    {
                        RunEnchantment(enchantment, eventType, paramerter);
                    }
                }
            }
            else
            {
                IRoom performerRoom = performer.Room;
                if (performerRoom.Enchantments.Count > 0)
                {
                    foreach (IEnchantment enchantment in performerRoom.Enchantments)
                    {
                        RunEnchantment(enchantment, eventType, paramerter);
                    }
                }

                if (performerRoom.Traps.Count > 0)
                {
                    foreach (ITrap trap in performerRoom.Traps)
                    {
                        if (trap.Trigger == Trap.Target.TrapTrigger.All ||
                            (performer is NonPlayerCharacter && trap.Trigger == Trap.Target.TrapTrigger.NPC) ||
                            (performer is PlayerCharacter && trap.Trigger == Trap.Target.TrapTrigger.PC))
                        {
                            foreach (IEnchantment enchantment in trap.Enchantments)
                            {
                                RunEnchantment(enchantment, eventType, paramerter);
                            }
                        }
                    }
                }

                if (performerRoom.PlayerCharacters.Count > 0)
                {
                    foreach (IPlayerCharacter pc in performerRoom.PlayerCharacters)
                    {
                        if (pc.Enchantments.Count > 0)
                        {
                            if (pc == performer)
                            {
                                //verify the performer is still alive before they can trigger their enchantment
                                if (performer.Room == performerRoom)
                                {
                                    foreach (IEnchantment enchantment in performer.Enchantments)
                                    {
                                        RunEnchantment(enchantment, eventType, paramerter);
                                    }
                                }
                            }
                            else
                            {
                                foreach (IEnchantment enchantment in pc.Enchantments)
                                {
                                    RunEnchantment(enchantment, eventType, paramerter);
                                }
                            }
                        }
                    }
                }

                if (performerRoom.NonPlayerCharacters.Count > 0)
                {
                    foreach (INonPlayerCharacter npc in performerRoom.NonPlayerCharacters)
                    {
                        if (npc.Enchantments.Count > 0)
                        {
                            foreach (IEnchantment enchantment in npc.Enchantments)
                            {
                                RunEnchantment(enchantment, eventType, paramerter);
                            }
                        }
                    }
                }

                if (performerRoom.Items.Count > 0)
                {
                    foreach (IItem item in performerRoom.Items)
                    {
                        if (item.Enchantments.Count > 0)
                        {
                            foreach (IEnchantment enchantment in item.Enchantments)
                            {
                                RunEnchantment(enchantment, eventType, paramerter);
                            }
                        }
                    }
                }
            }
        }
Exemplo n.º 2
0
Arquivo: Event.cs Projeto: crybx/mud
        private static void RunEnchantment(IEnchantment enchantment, EventType eventType, EventParamerters paramerter)
        {
            switch (eventType)
            {
            case EventType.AttemptToFollow:
                enchantment.AttemptToFollow(paramerter.Direction, paramerter.Performer, paramerter.FollowedTarget);
                break;

            case EventType.Cast:
                enchantment.Cast(paramerter.Performer, paramerter.SpellName);
                break;

            case EventType.DamageDealtAfterDefense:
                enchantment.DamageDealtAfterDefense(paramerter.Attacker, paramerter.Defender, paramerter.DamageAmount);
                break;

            case EventType.DamageDealtBeforeDefense:
                enchantment.DamageDealtBeforeDefense(paramerter.Attacker, paramerter.Defender, paramerter.DamageAmount);
                break;

            case EventType.DamageReceivedAfterDefense:
                enchantment.DamageReceivedAfterDefense(paramerter.Attacker, paramerter.Defender, paramerter.DamageAmount);
                break;

            case EventType.DamageReceivedBeforeDefense:
                enchantment.DamageReceivedBeforeDefense(paramerter.Attacker, paramerter.Defender, paramerter.DamageAmount);
                break;

            case EventType.Drop:
                enchantment.Drop(paramerter.Performer, paramerter.Item);
                break;

            case EventType.EnterRoom:
                enchantment.EnterRoom(paramerter.Performer);
                break;

            case EventType.Equip:
                enchantment.Equip(paramerter.Performer, paramerter.Item);
                break;

            case EventType.Get:
                enchantment.Get(paramerter.Performer, paramerter.Item);
                break;

            case EventType.HeartbeatBigTick:
                enchantment.HeartbeatBigTick(paramerter.Performer);
                break;

            case EventType.LeaveRoom:
                enchantment.LeaveRoom(paramerter.Performer, paramerter.Direction);
                break;

            case EventType.OnDeath:
                enchantment.OnDeath(paramerter.Performer);
                break;

            case EventType.Perform:
                enchantment.Perform(paramerter.Performer, paramerter.SkillName);
                break;

            case EventType.ProcessedCommand:
                enchantment.ProcessedCommand(paramerter.Performer, paramerter.Command);
                break;

            case EventType.ProcessedCommunication:
                enchantment.ProcessedCommunication(paramerter.Performer, paramerter.Communication);
                break;

            case EventType.Relax:
                enchantment.Relax(paramerter.Performer);
                break;

            case EventType.ReturnedMessage:
                enchantment.ReturnedMessage(paramerter.Performer, paramerter.Message);
                break;

            case EventType.Sit:
                enchantment.Sit(paramerter.Performer);
                break;

            case EventType.Sleep:
                enchantment.Sleep(paramerter.Performer);
                break;

            case EventType.Stand:
                enchantment.Stand(paramerter.Performer);
                break;

            case EventType.Unequip:
                enchantment.Unequip(paramerter.Performer, paramerter.Item);
                break;
            }
        }
Exemplo n.º 3
0
        private static void RunEnchantments(IMobileObject performer, EventType eventType, EventParamerters paramerter)
        {
            if (eventType == EventType.DamageBeforeDefense)
            {
                if (performer != null)
                {
                    foreach (IEnchantment enchantment in performer.Enchantments)
                    {
                        RunEnchantment(enchantment, eventType, paramerter);
                    }

                    foreach (IEnchantment enchantment in paramerter.Defender.Enchantments)
                    {
                        RunEnchantment(enchantment, eventType, paramerter);
                    }
                }
            }

            else if (eventType == EventType.DamageAfterDefense)
            {
                if (performer != null)
                {
                    foreach (IEnchantment enchantment in paramerter.Defender.Enchantments)
                    {
                        RunEnchantment(enchantment, eventType, paramerter);
                    }

                    foreach (IEnchantment enchantment in performer.Enchantments)
                    {
                        RunEnchantment(enchantment, eventType, paramerter);
                    }
                }
            }
            else
            {
                IRoom performerRoom = performer.Room;

                if (performerRoom != null) //this is null if the player logs out
                {
                    if (performerRoom.Enchantments.Count > 0)
                    {
                        foreach (IEnchantment enchantment in performerRoom.Enchantments)
                        {
                            RunEnchantment(enchantment, eventType, paramerter);
                        }
                    }

                    if (performerRoom.Traps.Count > 0)
                    {
                        foreach (ITrap trap in performerRoom.Traps)
                        {
                            if (trap.Trigger == Trap.Target.TrapTrigger.All ||
                                (performer is NonPlayerCharacter && trap.Trigger == Trap.Target.TrapTrigger.NPC) ||
                                (performer is PlayerCharacter && trap.Trigger == Trap.Target.TrapTrigger.PC))
                            {
                                foreach (IEnchantment enchantment in trap.Enchantments)
                                {
                                    RunEnchantment(enchantment, eventType, paramerter);
                                }
                            }
                        }
                    }

                    if (performerRoom.PlayerCharacters.Count > 0)
                    {
                        foreach (IPlayerCharacter pc in performerRoom.PlayerCharacters)
                        {
                            if (pc.Enchantments.Count > 0)
                            {
                                if (pc == performer)
                                {
                                    //verify the performer is still alive before they can trigger their enchantment
                                    if (performer.Room == performerRoom)
                                    {
                                        foreach (IEnchantment enchantment in performer.Enchantments)
                                        {
                                            RunEnchantment(enchantment, eventType, paramerter);
                                        }
                                    }
                                }
                                else
                                {
                                    //for only fire off when its the enchanted player turn, otherwise it will fire once for each player in the room
                                    //keeping else statement  around in case we want to explain why we don't do this in case we want to try this again later
                                }
                            }
                        }
                    }

                    if (performerRoom.NonPlayerCharacters.Count > 0)
                    {
                        foreach (INonPlayerCharacter npc in performerRoom.NonPlayerCharacters)
                        {
                            if (npc.Enchantments.Count > 0)
                            {
                                foreach (IEnchantment enchantment in npc.Enchantments)
                                {
                                    RunEnchantment(enchantment, eventType, paramerter);
                                }
                            }
                        }
                    }

                    //store if the item being affected is in the room and its enchantments already triggered
                    bool itemTriggered = false;
                    if (performerRoom.Items.Count > 0)
                    {
                        foreach (IItem item in performerRoom.Items)
                        {
                            if (paramerter.Item == item)
                            {
                                itemTriggered = true;
                            }

                            if (item.Enchantments.Count > 0)
                            {
                                foreach (IEnchantment enchantment in item.Enchantments)
                                {
                                    RunEnchantment(enchantment, eventType, paramerter);
                                }
                            }
                        }
                    }

                    //if it hasn't, such as being in a container, then fire its enchantments
                    if (paramerter.Item != null &&
                        !itemTriggered)
                    {
                        if (paramerter.Item.Enchantments.Count > 0)
                        {
                            foreach (IEnchantment enchantment in paramerter.Item.Enchantments)
                            {
                                RunEnchantment(enchantment, eventType, paramerter);
                            }
                        }
                    }
                }
            }
        }