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