Пример #1
0
        public static void HandleMimicryObjectFreeAndAssociateRequest(MimicryObjectFeedAndAssociateRequestMessage message, WorldClient client)
        {
            var mimicryUsable = client.Character.Inventory.GetFirstItem(14485, 1);

            if (mimicryUsable == null)
            {
                return;
            }

            CharacterItemRecord hostItem = client.Character.Inventory.GetItem(message.hostUID);
            CharacterItemRecord foodItem = client.Character.Inventory.GetItem(message.foodUID);

            if (hostItem == null || foodItem == null)
            {
                return;
            }
            if (hostItem.Template.TypeEnum == ItemTypeEnum.FAMILIER || foodItem.Template.TypeEnum == ItemTypeEnum.FAMILIER)
            {
                client.Character.ReplyError("Les Familiers ne peuvent pas êtres Mimibiotiers");
                return;
            }
            if (hostItem.IsAssociated || foodItem.IsAssociated)
            {
                client.Character.ReplyError("Les objets associés ne peuvent pas être mimibioté.");
                return;
            }
            if (hostItem.GId == foodItem.GId)
            {
                client.Character.ReplyError("Les Objets que vous voulez Mimibioter sont les mêmes");
                return;
            }

            if (hostItem.Template.Level < foodItem.Template.Level)
            {
                client.Character.ReplyError("Impossible d'associer ces objets car le niveau de l'item d'appearence est inferieur au niveau de l'item de base.");
                return;
            }

            CharacterItemRecord mimicry = hostItem.ToMimicry(foodItem.GId, foodItem.AppearanceId);

            if (message.preview)
            {
                client.Send(new MimicryObjectPreviewMessage(mimicry.GetObjectItem()));
            }
            else
            {
                client.Character.Inventory.RemoveItem(message.hostUID, 1);
                client.Character.Inventory.RemoveItem(message.foodUID, 1);
                client.Character.Inventory.RemoveItem(message.symbioteUID, 1);
                client.Character.Inventory.RemoveItem(mimicryUsable, 1);
                client.Character.Inventory.AddItem(mimicry);
                mimicry.UpdateElement();
                client.Send(new MimicryObjectAssociatedMessage(mimicry.UId));
            }
        }
Пример #2
0
        public static void HandleFeedAndAssociate(MimicryObjectFeedAndAssociateRequestMessage message, WorldClient client)
        {
            CharacterItemRecord hostItem = client.Character.Inventory.GetItem(message.hostUID);
            CharacterItemRecord foodItem = client.Character.Inventory.GetItem(message.foodUID);

            if (hostItem.GetTemplate().Type == ItemTypeEnum.PET || foodItem.GetTemplate().Type == ItemTypeEnum.PET)
            {
                client.Character.Reply("Impossible de mimibioter les familiers.");
                return;
            }
            if (hostItem.ContainEffect(EffectsEnum.Eff_Mimicry) || foodItem.ContainEffect(EffectsEnum.Eff_Mimicry))
            {
                client.Character.Reply("Impossible d'associer ces objets car l'un d'eux possède déja un mimibiote.");
                return;
            }
            if (hostItem.GID == foodItem.GID)
            {
                client.Character.Reply("Impossible d'associer ces objets car ce sont les mêmes...");
                return;
            }
            if (hostItem.GetTemplate().Type != foodItem.GetTemplate().Type)
            {
                client.Character.Reply("Impossible d'associer ces objets car ils ne sont pas du même types");
                return;
            }
            if (hostItem.GetTemplate().Level < foodItem.GetTemplate().Level)
            {
                client.Character.Reply("Impossible d'associer ces objets car le niveau de l'item d'appearence est inferieur au niveau de l'item de base.");
                return;
            }
            CharacterItemRecord mimicry = hostItem.ToMimicry(foodItem.GID);

            if (message.preview)
            {
                client.Send(new MimicryObjectPreviewMessage(mimicry.GetObjectItem()));
            }
            else
            {
                client.Character.Inventory.RemoveItem(message.hostUID, 1);
                client.Character.Inventory.RemoveItem(message.foodUID, 1);
                client.Character.Inventory.RemoveItem(message.symbioteUID, 1);
                client.Character.Inventory.Add(mimicry);
                client.Send(new MimicryObjectAssociatedMessage(mimicry.UID));
            }
        }
Пример #3
0
        public static void HandleMimicryObjectFeedAndAssociateRequestMessage(WorldClient client, MimicryObjectFeedAndAssociateRequestMessage message)
        {
            if (client.Character.IsInFight())
            {
                return;
            }

            var character = client.Character;

            var host       = character.Inventory.TryGetItem(message.hostUID);
            var food       = character.Inventory.TryGetItem(message.foodUID);
            var mimisymbic = character.Inventory.TryGetItem(ItemIdEnum.MIMIBIOTE_14485);

            if (host == null || food == null)
            {
                SendMimicryObjectErrorMessage(client, host == null ? MimicryErrorEnum.NO_VALID_HOST : MimicryErrorEnum.NO_VALID_FOOD);
                return;
            }

            if (mimisymbic == null)
            {
                SendMimicryObjectErrorMessage(client, MimicryErrorEnum.NO_VALID_MIMICRY);
                return;
            }

            if (host.Effects.Any(x => x.EffectId == EffectsEnum.Effect_LivingObjectId || x.EffectId == EffectsEnum.Effect_Appearance || x.EffectId == EffectsEnum.Effect_Apparence_Wrapper) ||
                !host.Template.Type.Mimickable)
            {
                SendMimicryObjectErrorMessage(client, MimicryErrorEnum.NO_VALID_HOST);
                return;
            }

            if (food.Effects.Any(x => x.EffectId == EffectsEnum.Effect_LivingObjectId || x.EffectId == EffectsEnum.Effect_Appearance || x.EffectId == EffectsEnum.Effect_Apparence_Wrapper) ||
                !food.Template.Type.Mimickable)
            {
                SendMimicryObjectErrorMessage(client, MimicryErrorEnum.NO_VALID_FOOD);
                return;
            }

            if (food.Template.Id == host.Template.Id)
            {
                SendMimicryObjectErrorMessage(client, MimicryErrorEnum.SAME_SKIN);
                return;
            }

            if (food.Template.Level > host.Template.Level)
            {
                SendMimicryObjectErrorMessage(client, MimicryErrorEnum.FOOD_LEVEL);
                return;
            }

            if (food.Template.TypeId != host.Template.TypeId)
            {
                SendMimicryObjectErrorMessage(client, MimicryErrorEnum.FOOD_TYPE);
                return;
            }

            var modifiedItem = ItemManager.Instance.CreatePlayerItem(character, host);

            modifiedItem.Effects.Add(new EffectInteger(EffectsEnum.Effect_Appearance, (short)food.Template.Id));
            modifiedItem.Stack = 1;

            if (message.preview)
            {
                SendMimicryObjectPreviewMessage(client, modifiedItem);
            }
            else
            {
                character.Inventory.UnStackItem(food, 1);
                character.Inventory.UnStackItem(mimisymbic, 1);
                character.Inventory.UnStackItem(host, 1);
                character.Inventory.AddItem(modifiedItem);

                SendMimicryObjectAssociatedMessage(client, modifiedItem);
            }
        }