コード例 #1
0
        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);
            }
        }
コード例 #2
0
        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);
        }
コード例 #3
0
ファイル: PlayerTrade.cs プロジェクト: Mixi59/Stump
        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);
            }
        }
コード例 #4
0
 protected virtual void OnTraderKamasChanged(Trader trader, uint amount)
 {
     FirstTrader.ToggleReady(false);
     SecondTrader.ToggleReady(false);
 }
コード例 #5
0
 protected virtual void OnTraderItemMoved(Trader trader, TradeItem item, bool modified, int difference)
 {
     FirstTrader.ToggleReady(false);
     SecondTrader.ToggleReady(false);
 }
コード例 #6
0
ファイル: NpcPet.cs プロジェクト: Mixi59/Stump
        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);
            }
        }
コード例 #7
0
ファイル: NpcPet.cs プロジェクト: Mixi59/Stump
        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);
            }
        }