protected override void OnTraderReadyStatusChanged(Trader trader, bool status) { base.OnTraderReadyStatusChanged(trader, status); InventoryHandler.SendExchangeIsReadyMessage(FirstTrader.Character.Client, trader, status); if (trader is PlayerTrader && status) { SecondTrader.ToggleReady(true); } }
private void OnItemMoved(Trader trader, TradeItem item, bool modified, int difference) { if (!modified && item.Stack > 0) { InventoryHandler.SendExchangeObjectAddedMessage(Crafter.Character.Client, Crafter != trader, item); InventoryHandler.SendExchangeObjectAddedMessage(Receiver.Character.Client, Receiver != trader, item); } else if (item.Stack <= 0) { InventoryHandler.SendExchangeObjectRemovedMessage(Crafter.Character.Client, Crafter != trader, item.Guid); InventoryHandler.SendExchangeObjectRemovedMessage(Receiver.Character.Client, Receiver != trader, item.Guid); } else { InventoryHandler.SendExchangeObjectModifiedMessage(Crafter.Character.Client, Crafter != trader, item); InventoryHandler.SendExchangeObjectModifiedMessage(Receiver.Character.Client, Receiver != trader, item); } FirstTrader.ToggleReady(false); SecondTrader.ToggleReady(false); }
protected override void OnTraderItemMoved(Trader trader, TradeItem item, bool modified, int difference) { base.OnTraderItemMoved(trader, item, modified, difference); FirstTrader.ToggleReady(false); SecondTrader.ToggleReady(false); if (item.Stack == 0) { InventoryHandler.SendExchangeObjectRemovedMessage(FirstTrader.Character.Client, trader != FirstTrader, item.Guid); InventoryHandler.SendExchangeObjectRemovedMessage(SecondTrader.Character.Client, trader != SecondTrader, item.Guid); } else if (modified) { InventoryHandler.SendExchangeObjectModifiedMessage(FirstTrader.Character.Client, trader != FirstTrader, item); InventoryHandler.SendExchangeObjectModifiedMessage(SecondTrader.Character.Client, trader != SecondTrader, item); } else { InventoryHandler.SendExchangeObjectAddedMessage(FirstTrader.Character.Client, trader != FirstTrader, item); InventoryHandler.SendExchangeObjectAddedMessage(SecondTrader.Character.Client, trader != SecondTrader, item); } }
protected virtual void OnTraderKamasChanged(Trader trader, uint amount) { FirstTrader.ToggleReady(false); SecondTrader.ToggleReady(false); }
protected virtual void OnTraderItemMoved(Trader trader, TradeItem item, bool modified, int difference) { FirstTrader.ToggleReady(false); SecondTrader.ToggleReady(false); }
public void AdjustLoots() { SecondTrader.Clear(); if (FirstTrader.Items.Count != 2) { return; } var eniripsaPowder = FirstTrader.Items.FirstOrDefault(x => x.Template.Id == (int)ItemIdEnum.POUDRE_DENIRIPSA_2239)?.Stack ?? 0; var resurectionPowder = FirstTrader.Items.FirstOrDefault(x => x.Template.Id == (int)ItemIdEnum.POUDRE_DE_RESURRECTION_8012)?.Stack ?? 0; if ((eniripsaPowder == 0 && resurectionPowder == 0) || (eniripsaPowder != 0 && resurectionPowder != 0)) { return; } var ghost = FirstTrader.Items.OfType <PlayerTradeItem>().FirstOrDefault(x => x.Template.Type.ItemType == ItemTypeEnum.FANTÔME_DE_FAMILIER || x.Template.Type.ItemType == ItemTypeEnum.FANTÔME_DE_MONTILIER); var pet = FirstTrader.Items.OfType <PlayerTradeItem>().FirstOrDefault(x => x.Template.Type.ItemType == ItemTypeEnum.FAMILIER || x.Template.Type.ItemType == ItemTypeEnum.MONTILIER); if (ghost != null) { var petTemplate = PetManager.Instance.Pets.Values.FirstOrDefault(x => x.GhostItemId == ghost.Template.Id); if (petTemplate == null) { logger.Error($"Ghost {ghost.Template.Id} has no matching pet"); return; } var itemTemplate = ItemManager.Instance.TryGetTemplate(petTemplate.Id); if (itemTemplate == null) { logger.Error($"Pet {petTemplate.Id} is no valid item !"); return; } var effects = ghost.Effects.Clone(); var hpEffect = effects.OfType <EffectInteger>().FirstOrDefault(x => x.EffectId == EffectsEnum.Effect_LifePoints); if (hpEffect == null) { effects.Add(hpEffect = new EffectInteger(EffectsEnum.Effect_LifePoints, 0)); } var maxHp = itemTemplate.Effects.OfType <EffectDice>().FirstOrDefault(x => x.EffectId == EffectsEnum.Effect_LifePoints)?.Value ?? 0; if (eniripsaPowder > 0) { if (petTemplate.PossibleEffects.Count > 0) { effects.RemoveAll(x => x != hpEffect && x.EffectId != EffectsEnum.Effect_MealCount); } hpEffect.Value = (short)Math.Min(maxHp, eniripsaPowder); } else { hpEffect.Value = maxHp; } SecondTrader.AddItem(itemTemplate, 1, effects); } else if (pet != null && eniripsaPowder > 0) { var petItem = pet.PlayerItem as PetItem; if (petItem == null) { return; } var effects = pet.Effects.Clone(); var hpEffect = effects.OfType <EffectInteger>().FirstOrDefault(x => x.EffectId == EffectsEnum.Effect_LifePoints); if (hpEffect == null) { return; } hpEffect.Value += (short)eniripsaPowder; if (hpEffect.Value > petItem.MaxLifePoints) { hpEffect.Value = (short)petItem.MaxLifePoints; } SecondTrader.AddItem(petItem.Template, 1, effects); } }
public void AdjustLoots() { SecondTrader.Clear(); Kamas = 0; if (FirstTrader.Items.Count != 1 || FirstTrader.Items.Any(x => x.Stack != 1)) { return; } if (FirstTrader.Items.OfType <PlayerTradeItem>().FirstOrDefault(x => x.PlayerItem is PetItem)?.PlayerItem is PetItem pet) { Kamas = (int)((DateTime.Now - pet.LastMealDate)?.TotalHours ?? 0); if (FirstTrader.Character.Inventory.Kamas < Kamas) { //Le montant de la transaction s'élève à %1 kamas. Malheureusement vous n'avez actuellement pas cette somme sur vous. FirstTrader.Character.SendInformationMessage(TextInformationTypeEnum.TEXT_INFORMATION_ERROR, 128, Kamas); return; } var certificateTemplate = ItemManager.Instance.TryGetTemplate(pet.PetTemplate.CertificateItemId.Value); if (certificateTemplate == null) { return; } var effects = pet.Effects.Clone(); var lastMealEffect = effects.OfType <EffectDate>().FirstOrDefault(x => x.EffectId == EffectsEnum.Effect_LastMealDate); if (lastMealEffect == null) { effects.Add(new EffectDate(EffectsEnum.Effect_LastMealDate, DateTime.Now)); } else { lastMealEffect.SetDate(DateTime.Now); } SecondTrader.AddItem(certificateTemplate, 1, effects); InventoryHandler.SendExchangeKamaModifiedMessage(FirstTrader.Character.Client, false, Kamas); } else { var certificate = FirstTrader.Items.OfType <PlayerTradeItem>().FirstOrDefault(x => x.Template.Type.ItemType == ItemTypeEnum.CERTIFICAT_DE_FAMILIER || x.Template.Type.ItemType == ItemTypeEnum.CERTIFICAT_DE_MONTILIER); if (certificate == null) { return; } var lastMealEffect = certificate.Effects.OfType <EffectDate>().FirstOrDefault(x => x.EffectId == EffectsEnum.Effect_LastMealDate)?.GetDate() ?? DateTime.Now; Kamas = (int)(DateTime.Now - lastMealEffect).TotalHours; if (FirstTrader.Character.Inventory.Kamas < Kamas) { //Le montant de la transaction s'élève à %1 kamas. Malheureusement vous n'avez actuellement pas cette somme sur vous. FirstTrader.Character.SendInformationMessage(TextInformationTypeEnum.TEXT_INFORMATION_ERROR, 128, Kamas); return; } var petTemplate = PetManager.Instance.Pets.Values.FirstOrDefault(x => x.CertificateItemId == certificate.Template.Id); if (petTemplate == null) { logger.Error($"Certificate {certificate.Template.Id} has no matching pet"); return; } var itemTemplate = ItemManager.Instance.TryGetTemplate(petTemplate.Id); if (itemTemplate == null) { logger.Error($"Pet {petTemplate.Id} is no valid item !"); return; } SecondTrader.AddItem(itemTemplate, 1, certificate.Effects); InventoryHandler.SendExchangeKamaModifiedMessage(FirstTrader.Character.Client, false, Kamas); } }