public override bool SellItem(WorldClient Client, InventoryItemModel Item, ushort Quantity) { if (this.myEnd) { return(false); } if (Quantity > Item.Quantity) { Quantity = (ushort)Item.Quantity; } uint Refund = (uint)Math.Floor((double)ItemTemplateTable.GetTemplate(Item.TemplateID).Price / 10) * Quantity; Client.Character.InventoryCache.AddKamas(Refund); if (Quantity == Item.Quantity) { //DatabaseEntities.TryDeleteItem(Item); InventoryItemTable.removeItem(Item.ID); Client.Send(new ObjectRemoveMessage(Item.ID)); } else { Client.Character.InventoryCache.UpdateObjectquantity(Item, Item.Quantity - Quantity); } Client.Send(new AccountStatsMessage(Client.Character)); return(true); }
public override bool BuyItem(WorldClient Client, uint TemplateId, ushort Quantity) { if (this.myEnd || Quantity <= 0) // ne devrait jamais arriver { return(false); } if (!this.Npc.HasItemTemplate((int)TemplateId)) { return(false); } var Price = ShopNpcTable.Kolizeum.FirstOrDefault(x => x.Value.Where(y => y == (int)TemplateId).Count() > 0).Key *Quantity; var CachedP = Client.Character.InventoryCache.getCache().Values.Where(x => x.TemplateID == Settings.AppSettings.GetIntElement("Kolizeum.WinItem")).Count(); if (Price > CachedP) { Client.Send(new ChatGameMessage("Il vous manque " + (Price - CachedP) + " Kolizetons", "3882AC")); return(false); } Client.Character.InventoryCache.removeByTemplateID(Settings.AppSettings.GetIntElement("Kolizeum.WinItem"), Price); if (InventoryItemTable.TryCreateItem((int)TemplateId, Client.Character, Quantity, useMax: true) == null) { return(false); } AccountTable.SubstractPoints(Client.Account.ID, Price); Client.Send(new ChatGameMessage("Il vous rêste désormais " + (CachedP - Price) + " Points", "3882AC")); return(true); }
public CharacterInventory(Player character) { this.Player = character; if (!String.IsNullOrEmpty(character.Stuff)) { if (character.Stuff[character.Stuff.Length - 1] == '|') { character.Stuff = character.Stuff.Substring(0, character.Stuff.Length - 1); } InventoryItemTable.Load(character.Stuff.Replace("|", ",")); } foreach (String item in Regex.Split(character.Stuff, "\\|")) { if (String.IsNullOrEmpty(item)) { continue; } int guid = int.Parse(item); InventoryItemModel obj = InventoryItemTable.getItem(guid); if (obj != null) { Add(obj); } } }
public void Save() { this.Friends = ""; foreach (KeyValuePair <int, String> Key in this.FriendsList) { this.Friends += Key.Key + "|" + Key.Value + ";"; } this.Ennemys = ""; foreach (KeyValuePair <int, String> Key in this.EnnemyList) { this.Ennemys += Key.Key + "|" + Key.Value + ";"; } this.Bank = ""; foreach (KeyValuePair <long, InventoryItemModel> KeyPair in this.bankItems) { this.Bank += KeyPair.Key + ";"; InventoryItemTable.Update(KeyPair.Value); } this.Stables = ""; foreach (KeyValuePair <int, Mount> KeyPair in this.Mounts) { this.Stables += KeyPair.Key + ";"; } AccountDataTable.Update(this); }
private static void ProcessObjectEatLivingItemRequest(WorldClient Client, string Packet) { if (Client.GetFight() != null && (int)Client.GetFight().FightState > 2) { Client.Send(new BasicNoOperationMessage()); return; } var Data = Packet.Split('|'); long ItemGuid = 0; long IdEatObject = 0; if (!long.TryParse(Data[0].Substring(2), out ItemGuid)) { Client.Send(new BasicNoOperationMessage()); return; } if (!long.TryParse(Data[2], out IdEatObject)) { Client.Send(new BasicNoOperationMessage()); return; } var Item = Client.Character.InventoryCache.GetItem(ItemGuid); var ItemAlim = Client.Character.InventoryCache.GetItem(IdEatObject); if (Item == null || ItemAlim == null) { Client.Send(new BasicNoOperationMessage()); return; } if (Item.SpeakingItem == null) { Client.Send(new BasicNoOperationMessage()); return; } if ((ItemAlim.Quantity > 1) && (Item.Quantity - 1 > 0)) { int newQ = ItemAlim.Quantity - 1; InventoryItemTable.TryCreateItem(ItemAlim.TemplateID, Client.Character, Stats: ItemAlim.GetStats().ToItemStats(), quantity: newQ); Client.Character.InventoryCache.UpdateObjectquantity(ItemAlim, 1); } long xp = long.Parse(ItemAlim.Template.Level.ToString()); Item.SpeakingItem.EXP += xp; Client.Character.InventoryCache.RemoveItem(ItemAlim); InventoryItemTable.removeItem(ItemAlim.ID); Client.Send(new ObjectRemoveMessage(ItemAlim.ID)); Client.Send(new ObjectRefreshMessage(Item)); Client.Character.myMap.SendToMap(new ObjectActualiseMessage(Client.Character)); if (Client.GetFight() != null) { Client.GetFight().SendToFight(new ObjectActualiseMessage(Client.Character)); } Client.Send(new AccountStatsMessage(Client.Character)); }
public override bool BuyItem(WorldClient Client, uint TemplateId, ushort Quantity) { if (this.myEnd) // ne devrait jamais arriver { return(false); } if (!this.Npc.HasItemTemplate((int)TemplateId)) { return(false); } var Price = this.Npc.GetItemTemplate((int)TemplateId).Price; if (Price > Client.Character.Kamas) { return(false); } if (InventoryItemTable.TryCreateItem((int)TemplateId, Client.Character, Quantity) == null) { return(false); } Client.Character.InventoryCache.SubstractKamas(Price); Client.Send(new AccountStatsMessage(Client.Character)); return(true); }
public static void removeFromBank(Player character, int guid, int qua) { InventoryItemModel BankObj = InventoryItemTable.getItem(guid); if (BankObj == null) { character.Send(new BasicNoOperationMessage()); return; } if (!character.Client.Account.Data.bankItems.ContainsKey(guid)) { Logger.Error("Le joueur " + character.Name + " a tenter de retirer un Item en banque qu'il n'avait pas."); } InventoryItemModel PersoObj = character.InventoryCache.ItemsCache.Values.FirstOrDefault(x => x.TemplateID == BankObj.TemplateID && x.GetStats().ToItemStats() == BankObj.GetStats().ToItemStats() && x.ID != BankObj.ID && x.Position == -1); /* getSimilarBankItem(Character, BankObj);*/ int newQua = BankObj.Quantity - qua; if (PersoObj == null) { if (newQua <= 0) { character.Client.Account.Data.bankItems.Remove(guid); character.InventoryCache.Add(BankObj, false); String str = "O-" + guid; character.Send(new BankUpdateMessage(str)); } else { PersoObj = getCloneItem(BankObj, qua); InventoryItemTable.addItem(PersoObj, true); character.InventoryCache.Add(PersoObj, false); String str = "O+" + BankObj.ID + "|" + BankObj.Quantity + "|" + BankObj.TemplateID + "|" + BankObj.GetStats().ToItemStats(); character.Send(new BankUpdateMessage(str)); } } else { if (newQua <= 0) { character.Client.Account.Data.bankItems.Remove(BankObj.ID); InventoryItemTable.removeItem(BankObj.ID); PersoObj.Quantity += BankObj.Quantity; character.Send(new ObjectQuantityMessage(PersoObj.ID, PersoObj.Quantity)); String str = "O-" + guid; character.Send(new BankUpdateMessage(str)); } else { BankObj.Quantity = newQua; PersoObj.Quantity += qua; character.Send(new ObjectQuantityMessage(PersoObj.ID, PersoObj.Quantity)); String str = "O+" + BankObj.ID + "|" + BankObj.Quantity + "|" + BankObj.TemplateID + "|" + BankObj.GetStats().ToItemStats(); character.Send(new BankUpdateMessage(str)); } } //SEND POD MESSAGE ? character.GetClient().Account.Data.Save(); }
private static void ProcessObjectUseRequest(WorldClient Client, string Packet) { int guid = -1; int targetGuid = -1; int targetCell = -1; Player Target = null; try { String[] infos = Regex.Split(Packet.Substring(2), "\\|"); guid = int.Parse(infos[0]); if (infos.Length == 3) { targetCell = int.Parse(infos[2]); } try //try { targetGuid = int.Parse(infos[1]); } catch (Exception e) { targetGuid = -1; }; } catch (Exception e) { Logger.Error(e); return; } if (CharacterTable.GetCharacter(targetGuid) != null) { Target = CharacterTable.GetCharacter(targetGuid); } if (!Client.Character.InventoryCache.hasItemGuid(guid)) { return; } InventoryItemModel obj = InventoryItemTable.getItem(guid); ItemTemplateModel T = obj.Template; if (!T.Criterions.Equals("") && !ConditionParser.validConditions(Client.Character, T.Criterions)) { Client.Send(new ImMessage("119|43")); return; } if (T.ItemType == ItemTypeEnum.ITEM_TYPE_PAIN || T.ItemType == ItemTypeEnum.ITEM_TYPE_VIANDE_COMESTIBLE) { Client.Character.myMap.SendToMap(new MapEmoticoneMessage(Client.Character.ActorId, 17)); } else if (T.ItemType == ItemTypeEnum.ITEM_TYPE_BIERE) { Client.Character.myMap.SendToMap(new MapEmoticoneMessage(Client.Character.ActorId, 18)); } T.applyAction(Client.Character, Target, guid, (short)targetCell); }
public void Intialize() { if (Intialized) { return; } if (this.LivingItem != 0) { InventoryItemTable.Load(this.LivingItem); } Intialized = true; }
public static void Initialize() { nextPlayerGuid = CharacterTable.getNextGuid(); nextPlayerGuid++; nextItemGuid = InventoryItemTable.getNextGuid(); nextItemGuid++; nextGuildId = GuildTable.getNextGuid(); nextGuildId++; nextMountId = MountTable.getNextGuid(); nextMountId++; nextSpeakingId = SpeakingTable.getNextGuid(); nextSpeakingId++; SpellTable.Load(); ExpFloorTable.Load(); MonsterTable.Load(); ItemTemplateTable.Load(); ItemTemplateTable.LoadItemActions(); ItemSetTable.Load(); DropTable.Load(); TitleTable.Load(); IObjectTemplateTable.Load(); AreaTable.Load(); AreaSubTable.Load(); MapTable.Load(); MapTable.LoadActions(); CellActionTable.Load(); MobGroupFixTable.Load(); BreedTable.Load(); NpcTemplateTable.Load(); NpcTemplateTable.LoadPlaces(); NpcQuestionTable.Load(); NpcReplyTable.Load(); ShopNpcTable.Initialize(); GuildTable.Load(); CharactersGuildTable.Load(); TaxCollectorTable.Load(); PrismeTable.Load(); BidHouseTable.Load(); BidHouseTable.LoadItems(); MountParkTable.Load(); StaticMountTable.Load(); MountTable.Load();//TODO Dynamic load of Character mount ZaapTable.Load(); ZaapiTable.Load(); var Timer = new System.Timers.Timer(1000 * 60 * 25); Timer.Elapsed += delegate(object sender, ElapsedEventArgs e) { Save(); }; Timer.Start(); }
public override void Execute(WorldClient client, CommandParameters parameters) { if (parameters.Lenght > 0) { int itemID = 0; try { itemID = parameters.GetIntParameter(0); } catch (FormatException e) { client.Send(new ConsoleMessage("Parametres invalide !", ConsoleColorEnum.RED)); return; } var itemTemplate = ItemTemplateTable.GetTemplate(itemID); var quantity = 1; var style = false; if (itemTemplate != null) { if (parameters.Lenght > 1) { try { quantity = parameters.GetIntParameter(1); } catch (FormatException e) { client.Send(new ConsoleMessage("Parametres invalide !", ConsoleColorEnum.RED)); return; } } if (parameters.Lenght > 2) { var styleStr = parameters.GetParameter(2).ToLower(); if (styleStr == "max") { style = true; } } var item = InventoryItemTable.TryCreateItem(itemID, client.Character, 1, -1, null, style); client.Send(new ConsoleMessage("L'objet <b>'" + itemTemplate.Name + "'</b> a correctement ete generer !", ConsoleColorEnum.GREEN)); } else { client.Send(new ConsoleMessage("Impossible de trouver l'objet n°" + itemID, ConsoleColorEnum.RED)); } } else { client.Send(new ConsoleMessage("Parametres invalide !", ConsoleColorEnum.RED)); } }
public void Initialize() { Item = InventoryItemTable.Load(ItemID); if (Item == null) { BidHouseTable.Delete(ItemID); return; } BH.addObject(this); BH = null; }
private static void ProcessObjectUnEquipLivingItem(WorldClient Client, string Packet) { if (Client.GetFight() != null && (int)Client.GetFight().FightState > 2) { Client.Send(new BasicNoOperationMessage()); return; } var Data = Packet.Split('|'); long ItemGuid = 0; if (!long.TryParse(Data[0].Substring(2), out ItemGuid)) { Client.Send(new BasicNoOperationMessage()); return; } var Item = Client.Character.InventoryCache.GetItem(ItemGuid); var OldId = Item.SpeakingID; if (Item == null || Item.SpeakingItem == null) { Client.Send(new BasicNoOperationMessage()); return; } if (Item.SpeakingItem.Associated == 1) { long ObjeOriginialID = Item.SpeakingItem.LivingItem; var objv = InventoryItemTable.getItem(ObjeOriginialID); if (objv == null) { Client.Send(new BasicNoOperationMessage()); return; } objv.SpeakingID = OldId; Item.SpeakingItem.LinkedItem = ObjeOriginialID; Item.SpeakingItem.Associated = 0; Item.SpeakingID = 0; Client.Character.InventoryCache.Add(objv);; Client.Send(new ObjectRefreshMessage(Item)); Client.Character.myMap.SendToMap(new ObjectActualiseMessage(Client.Character)); if (Client.GetFight() != null) { Client.GetFight().SendToFight(new ObjectActualiseMessage(Client.Character)); } } }
public Boolean BuyObject(int LineID, int Count, long Price, Player Character) { Boolean possible = true; try { if (Character.Kamas < Price) { return(false); } var Line = getLine(LineID); var ObjectToBuy = Line.Have(Count, Price); Character.InventoryCache.SubstractKamas(Price); if (ObjectToBuy.Owner != -1) { var OwnerClient = Network.WorldServer.Clients.Find(x => x.Account != null && x.Account.ID == ObjectToBuy.Owner); if (OwnerClient != null) { OwnerClient.Account.Data.BankKamas += ObjectToBuy.Price; OwnerClient.Send(new TextInformationMessage(TextInformationTypeEnum.INFO, 65, new String[] { Price.ToString(), ObjectToBuy.Item.TemplateID.ToString(), 1 + "" })); } else { AccountDataTable.UpdateKamas(ObjectToBuy.Price, ObjectToBuy.Owner); //TODO Cache vous IM MSG } } Character.Send(new AccountStatsMessage(Character)); var OldItem = ObjectToBuy.Item; Character.InventoryCache.Add(OldItem); OldItem.Template.newSold(ObjectToBuy.getQuantity(true), Price); DestroyObject(ObjectToBuy); BidHouseTable.Delete(ObjectToBuy.Item.ID); if (ObjectToBuy.Owner == -1) { InventoryItemTable.Add(OldItem); } ObjectToBuy = null; } catch (Exception e) { possible = false; } return(possible); }
public static void ProcessObjectDestroyMessage(WorldClient Client, string Packet) { String[] infos = Regex.Split(Packet.Substring(2), "\\|"); try { int guid = int.Parse(infos[0]); int qua = 1; try { qua = int.Parse(infos[1]); } catch (Exception e) { return; } InventoryItemModel obj = InventoryItemTable.getItem(guid); if (!Client.Character.InventoryCache.hasItemGuid(guid) || qua <= 0 || obj == null) { Client.Send(new BasicNoOperationMessage()); return; } int newQua = obj.Quantity - qua; if (newQua <= 0) { Client.Character.InventoryCache.remove(guid); InventoryItemTable.removeItem(guid); Client.Send(new ObjectRemoveMessage(guid)); } else { obj.Quantity = newQua; Client.Send(new ObjectQuantityMessage(guid, newQua)); } Client.Send(new AccountStatsMessage(Client.GetCharacter())); Client.Send(new InventoryWeightMessage(0, 2000)); } catch (Exception e) { Client.Send(new BasicNoOperationMessage()); } }
public void Intialize() { if (myIntialized) { return; } foreach (String str in ItemList.Split(';')) { try { if (String.IsNullOrEmpty(str)) { continue; } long idd; if (!long.TryParse(str, out idd)) { continue; } InventoryItemModel obj = InventoryItemTable.getItem(idd); if (obj != null) { Items.Add(obj.ID, obj); } else { obj = InventoryItemTable.Load(idd); if (obj != null) { Items.Add(obj.ID, obj); } } } catch (Exception e) { continue; } } myIntialized = true; }
public static void GiveItem(ActionModel action, Player perso, Player target, int itemID, int cellID) { try { int tID = int.Parse(action.args.Split(',')[0]); int count = int.Parse(action.args.Split(',')[1]); Boolean send = true; if (action.args.Split(',').Length > 2) { send = action.args.Split(',')[2].Equals("1"); } if (count > 0) { var item = InventoryItemTable.TryCreateItem(itemID, perso, count, -1, null); } else { perso.InventoryCache.removeByTemplateID(tID, -count); } if (perso.IsOnline())//on envoie le Packet qui indique l'ajout//retrait d'un item { //POD if (send) { if (count >= 0) { perso.Send(new TextInformationMessage(TextInformationTypeEnum.INFO, 21, +count + "~" + tID)); } else if (count < 0) { perso.Send(new TextInformationMessage(TextInformationTypeEnum.INFO, 22, + -count + "~" + tID)); } } } } catch (Exception e) { Logger.Error(e); } }
public bool TryMergeItem(int TemplateId, string Stats, ItemSlotEnum Slot, int Quantity = 1, InventoryItemModel RemoveItem = null) { if (Slot < ItemSlotEnum.SLOT_AMULETTE || Slot > ItemSlotEnum.SLOT_BOUCLIER) { var ItemsCopy = this.ItemsCache.ToArray(); foreach (var Item in ItemsCopy) { if (Item.Value.GetStats().ToItemStats() == Stats && Item.Value.TemplateID == TemplateId && Item.Value.Slot == Slot) { if (RemoveItem != null) { InventoryItemTable.removeItem(RemoveItem.ID); Player.Send(new ObjectRemoveMessage(RemoveItem.ID)); } this.UpdateObjectquantity(Item.Value, Item.Value.Quantity + Quantity); return(true); } } } return(false); }
public override void OverridableEndFight(FightTeam Winners, FightTeam Loosers) { var WinnersFighter = Winners.GetFighters().OfType <CharacterFighter>().ToList(); var LoosersFighter = Loosers.GetFighters().OfType <CharacterFighter>().ToList(); var WinnersTotalCote = WinnersFighter.Sum(x => x.Character.Cote); var LoosersTotalCote = LoosersFighter.Sum(x => x.Character.Cote); int WinCote = 0, LooseCote = 0; if (LoosersTotalCote - WinnersTotalCote < 0) { WinCote = 25; } else if (WinnersTotalCote - LoosersTotalCote < 0) { WinCote = 75; } else { WinCote = 50; } if (LoosersTotalCote - WinnersTotalCote < 0) { LooseCote = 25; } else if (WinnersTotalCote - LoosersTotalCote < 0) { LooseCote = 75; } else { LooseCote = 50; } var PossibleItemLoot = new List <ItemLoot>(); var ItemDroped = new Dictionary <int, int>() { { Settings.AppSettings.GetIntElement("Kolizeum.WinItem"), 3 }, }; foreach (var Fighter in LoosersFighter) { int CoteLoosed = LooseCote; if (!Fighter.Left) { if (Fighter.Character.Cote - LooseCote < 0) { CoteLoosed = Fighter.Character.Cote; } Fighter.Character.Cote -= CoteLoosed; } this.myResult.AddResult(Fighter, false, WinExp: -CoteLoosed); } foreach (var Fighter in WinnersFighter) { if (!Fighter.Left) { Fighter.Character.Cote += WinCote; this.myResult.AddResult(Fighter, true, WinExp: WinCote, WinItems: ItemDroped); InventoryItemTable.TryCreateItem(ItemDroped.First().Key, Fighter.Character, ItemDroped.First().Value); } else { this.myResult.AddResult(Fighter, true); } } base.EndFight(); }
public void Initialize() { if (myInitialized) { return; } try { BHI = new Dictionary <int, List <BidHouseItem> >(); if (!BidHouseTable.BHITEMS.ContainsKey(this.Guid)) { BidHouseTable.BHITEMS.Add(Guid, new Dictionary <int, List <BidHouseItem> >()); } BHI = BidHouseTable.BHITEMS[Guid]; foreach (String s in Friends.Split(';')) { if (String.IsNullOrEmpty(s)) { continue; } FriendsList.Add(Convert.ToInt32(s.Split('|')[0]), s.Split('|')[1]); } foreach (String s in Ennemys.Split(';')) { if (String.IsNullOrEmpty(s)) { continue; } EnnemyList.Add(Convert.ToInt32(s.Split('|')[0]), s.Split('|')[1]); } foreach (String s in Bank.Split(';')) { if (String.IsNullOrEmpty(s)) { continue; } long id; if (!long.TryParse(s, out id)) { continue; } InventoryItemModel obj = InventoryItemTable.getItem(id); if (obj != null) { bankItems.Add(id, obj); } else { obj = InventoryItemTable.Load(id); if (obj != null) { bankItems.Add(id, obj); } } } foreach (String s in Stables.Split(';')) { if (String.IsNullOrEmpty(s)) { continue; } int id; if (!int.TryParse(s, out id)) { continue; } Mount DD = MountTable.getMount(id); if (DD != null) { Mounts.Add(id, DD); } } } catch (Exception e) { Logger.Error(e); } myInitialized = true; }
public static void addInBank(Player character, int guid, int qua) { InventoryItemModel item = InventoryItemTable.getItem(guid); if (item == null) { character.Send(new BasicNoOperationMessage()); return; } if (!character.InventoryCache.hasItemGuid(guid)) { Logger.Error("Le joueur " + character.Name + " a tenter d'ajouter un Item en banque qu'il n'avait pas."); } if (item.Slot != ItemSlotEnum.SLOT_INVENTAIRE) { character.Send(new BasicNoOperationMessage()); return; } InventoryItemModel bankItem = getSimilarBankItem(character, item); int newQua = item.Quantity - qua; if (bankItem == null) { if (newQua <= 0) { character.InventoryCache.RemoveItem(item); character.Client.Account.Data.bankItems.Add(item.ID, item); String str = "O+" + item.ID + "|" + item.Quantity + "|" + item.TemplateID + "|" + item.GetStats().ToItemStats(); character.Send(new BankUpdateMessage(str)); character.Send(new ObjectRemoveMessage(guid)); } else { item.Quantity = newQua; bankItem = getCloneItem(item, qua); InventoryItemTable.addItem(bankItem, true); character.Client.Account.Data.bankItems.Add(bankItem.ID, bankItem); String str = "O+" + bankItem.ID + "|" + bankItem.Quantity + "|" + bankItem.TemplateID + "|" + bankItem.GetStats().ToItemStats(); character.Send(new BankUpdateMessage(str)); character.Send(new ObjectQuantityMessage(item.ID, item.Quantity)); } } else { if (newQua <= 0) { character.InventoryCache.RemoveItem(item); InventoryItemTable.removeItem(item.ID); bankItem.Quantity += item.Quantity; String str = "O+" + bankItem.ID + "|" + bankItem.Quantity + "|" + bankItem.TemplateID + "|" + bankItem.GetStats().ToItemStats(); character.Send(new BankUpdateMessage(str)); character.Send(new ObjectRemoveMessage(guid)); } else { item.Quantity = newQua; bankItem.Quantity += qua; String str = "O+" + bankItem.ID + "|" + bankItem.Quantity + "|" + bankItem.TemplateID + "|" + bankItem.GetStats().ToItemStats(); character.Send(new BankUpdateMessage(str)); character.Send(new ObjectQuantityMessage(item.ID, item.Quantity)); } } //SEND POD MESSAGE ? character.GetClient().Account.Data.Save(); }
public override bool MoveItem(Network.WorldClient Client, Database.Models.InventoryItemModel Item, ushort Quantity, bool Add = false) { if (Add) { if (Quantity > Item.Quantity) { Quantity = (ushort)Item.Quantity; } InventoryItemModel ObjectEqualize = getSimilarItem(Item); int newQua = Item.Quantity - Quantity; String str; if (ObjectEqualize == null) { if (newQua <= 0) { Client.Character.InventoryCache.RemoveItem(Item); Mount.Items.Add(Item); str = "O+" + Item.ID + "|" + Item.Quantity + "|" + Item.TemplateID + "|" + Item.GetStats().ToItemStats(); Client.Send(new ObjectRemoveMessage(Item.ID)); } else { Client.Character.InventoryCache.UpdateObjectquantity(Item, newQua); ObjectEqualize = InventoryItemTable.TryCreateItem(Item.TemplateID, Mount, Quantity, Stats: Item.Effects); str = "O+" + ObjectEqualize.ID + "|" + ObjectEqualize.Quantity + "|" + ObjectEqualize.TemplateID + "|" + ObjectEqualize.GetStats().ToItemStats(); } } else if (newQua <= 0) { Client.Character.InventoryCache.RemoveItem(Item); ObjectEqualize.Quantity += Item.Quantity; InventoryItemTable.removeItem(Item.ID); str = "O+" + ObjectEqualize.ID + "|" + ObjectEqualize.Quantity + "|" + ObjectEqualize.TemplateID + "|" + ObjectEqualize.GetStats().ToItemStats(); Client.Send(new ObjectRemoveMessage(Item.ID)); InventoryItemTable.Update(ObjectEqualize); } else { Client.Character.InventoryCache.UpdateObjectquantity(Item, newQua); ObjectEqualize.Quantity += Quantity; str = "O+" + ObjectEqualize.ID + "|" + ObjectEqualize.Quantity + "|" + ObjectEqualize.TemplateID + "|" + ObjectEqualize.GetStats().ToItemStats(); InventoryItemTable.Update(ObjectEqualize); } Client.Send(new BankUpdateMessage(str)); Client.Send(new InventoryWeightMessage(0, 2000)); // TODO PODS Client.Send(new MountActualPodMessage(Mount)); MountTable.Update(Mount); } else { if (!Mount.Items.Contains(Item)) { return(false); } InventoryItemModel ObjectEqualize = Client.Character.InventoryCache.getSimilarInventoryItem(Item); int newQua = Item.Quantity - Quantity; String str; if (ObjectEqualize == null) { if (newQua <= 0) { Mount.Items.Remove(Item); if (Client.Character.InventoryCache.TryMergeItem(Item.TemplateID, Item.GetStats().ToItemStats(), Item.Slot, Item.Quantity)) { InventoryItemTable.removeItem(Item.ID); } else { Client.Character.InventoryCache.Add(Item); } str = "O-" + Item.ID; } else { ObjectEqualize = InventoryItemTable.TryCreateItem(Item.TemplateID, Client.Character, Quantity, Stats: Item.Effects); Item.Quantity = newQua; str = "O+" + Item.ID + "|" + Item.Quantity + "|" + Item.TemplateID + "|" + Item.GetStats().ToItemStats(); } } else if (newQua <= 0) { Mount.Items.Remove(Item); ObjectEqualize.Quantity += Item.Quantity; Client.Send(new ObjectQuantityMessage(ObjectEqualize.ID, ObjectEqualize.Quantity)); InventoryItemTable.removeItem(Item.ID); str = "O-" + Item.ID; InventoryItemTable.Update(ObjectEqualize); } else { Item.Quantity = newQua; ObjectEqualize.Quantity += Quantity; Client.Send(new ObjectQuantityMessage(ObjectEqualize.ID, ObjectEqualize.Quantity)); str = "O+" + Item.ID + "|" + Item.Quantity + "|" + Item.TemplateID + "|" + Item.GetStats().ToItemStats(); InventoryItemTable.Update(ObjectEqualize); } Client.Send(new BankUpdateMessage(str)); Client.Send(new InventoryWeightMessage(0, 2000)); // TODO PODS Client.Send(new MountActualPodMessage(Mount)); MountTable.Update(Mount); } return(true); }
private static void ProcessExchangeMountParkRequest(WorldClient Client, string Packet) { MountPark MP = Client.Character.inMountPark; if (MP != null) { char c = Packet[2]; Packet = Packet.Substring(3); int guid = -1; try { guid = int.Parse(Packet); } catch (Exception e) { }; switch (c) { case 'C': //Parcho => Etable (Stocker) if (guid == -1 || !Client.Character.InventoryCache.hasItemGuid(guid)) { return; } InventoryItemModel obj = Client.Character.InventoryCache.GetItem(guid); //on prend la DD demandée int DDid = -1; Mount DD = null; if (obj.GetStats().HasEffect(EffectEnum.MountOwner)) { DDid = obj.GetStats().GetEffect(EffectEnum.MountOwner).Items; DD = MountTable.getMount(DDid); } //FIXME mettre return au if pour ne pas créer des nouvelles dindes if (DD == null) { int color = StaticMountTable.getMountColorByParchoTemplate(obj.TemplateID); if (color < 1) { return; } DD = new Mount(color); } DD.Intialize(); //On enleve l'Item du Monde et du Perso Client.Character.InventoryCache.remove(guid); InventoryItemTable.removeItem(guid); //on ajoute la dinde a l'étable Client.Account.Data.Mounts.Add(DD.ID, DD); Client.Account.Data.Save(); //On envoie les Packet Client.Send(new ObjectRemoveMessage(obj.ID)); Client.Send(new ExchangeEndMessage('+', DD.parse())); break; case 'c': //Etable => Parcho(Echanger) Mount DD1 = MountTable.getMount(guid); //S'il n'a pas la dinde if (!Client.Account.Data.Mounts.ContainsKey(DD1.ID) || DD1 == null) { return; } //on retire la dinde de l'étable Client.Account.Data.Mounts.Remove(DD1.ID); GenericStats Stat = new GenericStats(); Stat.AddItem(EffectEnum.MountOwner, DD1.ID); Stat.AddSpecialEffect(EffectEnum.MountOwnerName, Client.Character.Name); Stat.AddSpecialEffect(EffectEnum.MountName, DD1.Name); var item = InventoryItemTable.TryCreateItem(StaticMountTable.getMountScroll(DD1.get_color()).ID, Client.Character, 1, -1, Stat.ToItemStats()); Client.Send(new ExchangeEndMessage('-', DD1.ID + "")); Stat = null; break; case 'g': //Equiper Mount DD3 = MountTable.getMount(guid); //S'il n'a pas la dinde if (DD3 == null || !Client.Account.Data.Mounts.ContainsKey(DD3.ID) || Client.Character.Mount != null) { return; } DD3.Intialize(); Client.Account.Data.Mounts.Remove(DD3.ID); Client.Account.Data.Save(); Client.Character.Mount = DD3; //Packets Client.Send(new CharacterRideEventMessage("+", DD3)); Client.Send(new ExchangeEndMessage('-', DD3.ID + "")); Client.Send(new CharacterMountXpGive(Client.Character.MountXPGive)); break; case 'p': //Equipé => Stocker //Si c'est la dinde équipé if (Client.Character.Mount != null ? Client.Character.Mount.ID == guid : false) { //Si le perso est sur la monture on le fait descendre if (Client.Character.isOnMount()) { Client.Character.toogleOnMount(); } //Si ca n'a pas réussie, on s'arrete là (Items dans le sac ?) if (Client.Character.isOnMount()) { return; } Mount DD2 = Client.Character.Mount; DD2.Intialize(); Client.Account.Data.Mounts.Add(DD2.ID, DD2); Client.Account.Data.Save(); Client.Character.Mount = null; //Packets Client.Send(new ExchangeEndMessage('+', DD2.parse())); Client.Send(new CharacterRideEventMessage("-", null)); Client.Send(new CharacterMountXpGive(Client.Character.MountXPGive)); } else //Sinon... { } break; } } else { Client.Send(new BasicNoOperationMessage()); return; } }
public override bool MoveItem(WorldClient Client, Database.Models.InventoryItemModel Item, ushort Quantity, bool Add = false) { if (Add) { long Taxe = (long)(Price * (Market.SellTaxe / 100)); if (myClient.Account.Data.canTaxBidHouseItem(Market.HdvID) >= Market.countItem) { myClient.Send(new TextInformationMessage(Libs.Enumerations.TextInformationTypeEnum.INFO, 58)); return(false); } if (myClient.Character.Kamas < Taxe) { myClient.Send(new TextInformationMessage(Libs.Enumerations.TextInformationTypeEnum.ERREUR, 76)); return(false); } myClient.Character.InventoryCache.SubstractKamas(Taxe); int cantReal = (int)(Math.Pow(10, Quantity) / 10); int nuevaCant = Item.Quantity - cantReal; if (nuevaCant <= 0) { myClient.Character.InventoryCache.RemoveItem(Item); myClient.Character.Send(new ObjectRemoveMessage(Item.ID)); } else { Item.Quantity -= cantReal; myClient.Send(new ObjectQuantityMessage(Item.ID, Item.Quantity)); Item = InventoryItemTable.TryCreateItem(Item.TemplateID, quantity: cantReal, Stats: Item.GetStats().ToItemStats()); } var MarketItem = new BidHouseItem() { Price = Price, Quantity = Quantity, Owner = myClient.Account.ID, Item = Item, }; Market.addObject(MarketItem); BidHouseTable.Add(MarketItem); myClient.Send(new ExchangeMoveDistantObject('+', "", MarketItem.SerializeAsDisplayEquipmentOnMarket())); Client.Send(new AccountStatsMessage(myClient.Character)); } else { var MarketID = Market.HdvID; BidHouseItem BHI = null; try { foreach (var BH in myClient.Account.Data.BHI[MarketID]) { if (BH.LineID == ItemID) { BHI = BH; break; } } } catch (Exception e) { return(false); } if (BHI == null) { return(false); } myClient.Account.Data.BHI[MarketID].Remove(BHI); var Object = BHI.Item; myClient.Character.InventoryCache.Add(Object); Market.DestroyObject(BHI); BidHouseTable.Delete(BHI.ItemID); myClient.Send(new ExchangeMoveDistantObject('-', "", ItemID + "")); } return(true); }
public override void Execute(WorldClient Client, CommandParameters parameters) { if (Settings.AppSettings.GetBoolElement("NpcShop.FmCac")) { if ((Program.currentTimeMillis() - Client.lastCheckPoint) < 3000) { return; } var Object = Client.Character.InventoryCache.GetItemInSlot(ItemSlotEnum.SLOT_ARME); if (Object == null) { Client.Send(new ChatGameMessage("Vous ne portez pas d'arme", "682B2B")); return; } if (Client.GetFight() != null) { Client.Send(new ChatGameMessage("Impossible en combat", "682B2B")); return; } String answer; try { answer = parameters.GetParameter(0); } catch (Exception e) { Client.Send(new ChatGameMessage("Action impossible : vous n'avez pas spécifié l'élément (air, feu, terre, eau) qui remplacera les dégats/vols de vies neutres", "682B2B")); return; } if (!answer.Equals("air") && !answer.Equals("terre") && !answer.Equals("feu") && !answer.Equals("eau")) { Client.Send(new ChatGameMessage("Action impossible : l'élément " + answer + " n'existe pas ! (dispo : air, feu, terre, eau)", "682B2B")); return; } if (!Object.GetStats().GetWeaponEffects().ContainsKey(EffectEnum.VolNeutre) && !Object.GetStats().GetWeaponEffects().ContainsKey(EffectEnum.DamageNeutre)) { Client.Send(new ChatGameMessage("Action impossible : votre arme n'a pas de dégats neutre", "682B2B")); return; } try { var b = Object.GetStats().GetWeaponEffects().ToArray(); foreach (var i in b) { if (i.Key == EffectEnum.DamageNeutre) { if (answer.Equals("air")) { i.Value.EffectType = EffectEnum.DamageAir; } if (answer.Equals("feu")) { i.Value.EffectType = EffectEnum.DamageFeu; } if (answer.Equals("terre")) { i.Value.EffectType = EffectEnum.DamageTerre; } if (answer.Equals("eau")) { i.Value.EffectType = EffectEnum.DamageEau; } Object.GetStats().RemoveWeaponEffects(i.Key); Object.GetStats().AdWeaponEffects(i.Value.EffectType, i.Value); } if (i.Key == EffectEnum.VolNeutre) { if (answer.Equals("air")) { i.Value.EffectType = EffectEnum.VolAir; } if (answer.Equals("feu")) { i.Value.EffectType = EffectEnum.VolFeu; } if (answer.Equals("terre")) { i.Value.EffectType = EffectEnum.VolTerre; } if (answer.Equals("eau")) { i.Value.EffectType = EffectEnum.VolEau; } Object.GetStats().RemoveWeaponEffects(i.Key); Object.GetStats().AdWeaponEffects(i.Value.EffectType, i.Value); } } Client.Send(new ObjectRemoveMessage(Object.ID)); Client.Send(new ObjectAddInventoryMessage(Object)); Client.Send(new FmMoveMessage("KO+" + Object.ID + "|1|" + Object.TemplateID + "|" + Object.GetStats().ToItemStats().Replace(";", "#"))); Client.Send(new FmCMessage("K;" + Object.TemplateID)); InventoryItemTable.Update(Object); Client.Send(new ChatGameMessage("Votre " + Object.Template.Name + " a été FM avec succès en" + answer + " !", "FF0000")); Client.Send(new AccountStatsMessage(Client.Character)); Client.lastCheckPoint = Program.currentTimeMillis(); } catch (Exception e) { Logger.Error(e); return; } } else { Client.Send(new ChatGameMessage("Fromagerie d'Armes desactivée", "046380")); } }
public override void Execute(WorldClient Client, CommandParameters parameters) { if (Settings.AppSettings.GetBoolElement("NpcShop.Fm")) { if ((Program.currentTimeMillis() - Client.lastCheckPoint) < 3000) { return; } if (parameters.Lenght < 2) { Client.Send(new ChatGameMessage("Syntaxe invalide : .fm coiffe/cape pa/po/pm", "682B2B")); return; } ItemSlotEnum Slot = ItemSlotEnum.SLOT_ITEMBAR_13; if (parameters.GetParameter(0) == "coiffe") { Slot = ItemSlotEnum.SLOT_COIFFE; } else if (parameters.GetParameter(0) == "cape") { Slot = ItemSlotEnum.SLOT_CAPE; } else { Client.Send(new ChatGameMessage("Liste disponnible : coiffe/cape", "682B2B")); return; } var Effect = EffectEnum.AddPods; switch (parameters.GetParameter(1)) { case "pa": Effect = EffectEnum.AddPA; break; case "pm": Effect = EffectEnum.AddPM; break; case "po": Effect = EffectEnum.AddPO; break; default: Client.Send(new ChatGameMessage("Liste disponnible : pa/pm/po", "682B2B")); return; } var Points = AccountTable.getPoints(Client.Account); if (Settings.AppSettings.GetIntElement("NpcShop.FmCost") > Points) { Client.Send(new ChatGameMessage("Il vous manque " + (Settings.AppSettings.GetIntElement("NpcShop.FmCost") - Points) + " points pour utiliser ce privilege", "682B2B")); return; } var Object = Client.Character.InventoryCache.GetItemInSlot(Slot); if (Object == null) { Client.Send(new ChatGameMessage("Vous ne portez pas de " + parameters.GetParameter(0), "682B2B")); return; } if (Client.GetFight() != null) { Client.Send(new ChatGameMessage("Impossible en combat", "682B2B")); return; } if (Object.GetStats().GetEffectFM(Effect).Total != 0) { Client.Send(new ChatGameMessage("Votre " + parameters.GetParameter(0) + " donne déjà un " + parameters.GetParameter(1), "682B2B")); return; } if (Effect != EffectEnum.AddPO) { if (Object.GetStats().GetEffectFM(EffectEnum.AddPM).Total != 0 || Object.GetStats().GetEffectFM(EffectEnum.AddPA).Total != 0) { Client.Send(new ChatGameMessage("Votre " + parameters.GetParameter(0) + " donne déjà un pa ou un pm", "682B2B")); return; } } AccountTable.SubstractPoints(Client.Account.ID, Settings.AppSettings.GetIntElement("NpcShop.FmCost")); Client.Character.GetStats().UnMerge(Object.GetStats()); Object.GetStats().AddItem(Effect, 1); Client.Character.GetStats().Merge(Object.GetStats()); Client.Send(new ObjectRemoveMessage(Object.ID)); Client.Send(new ObjectAddInventoryMessage(Object)); Client.Send(new FmMoveMessage("KO+" + Object.ID + "|1|" + Object.TemplateID + "|" + Object.GetStats().ToItemStats().Replace(";", "#"))); Client.Send(new FmCMessage("K;" + Object.TemplateID)); InventoryItemTable.Update(Object); Client.Send(new ChatGameMessage("Votre " + Object.Template.Name + " donne désormais +1" + parameters.GetParameter(1).ToUpper() + " en plus de ses jets habituels !", "FF0000")); Client.Send(new AccountStatsMessage(Client.Character)); Client.lastCheckPoint = Program.currentTimeMillis(); return; } else { Client.Send(new ChatGameMessage("Fromagerie desactivée", "046380")); } }
internal static void EatOrDrinkItem(ActionModel actionModel, Player perso, Player target, int itemID, int cellID) { InventoryItemModel objPain = InventoryItemTable.getItem(itemID); if (objPain == null) { return; } if (objPain.GetStats().ContainsEffect(EffectEnum.AddVie)) { if (target != null) { if ((target.Life >= target.MaxLife) || (objPain.GetStats().GetEffect(EffectEnum.AddVie).Items <= 0)) { } else { target.Life += objPain.GetStats().GetEffect(EffectEnum.AddVie).Items; if (target.Life > target.MaxLife) { target.Life = target.MaxLife; } target.Send(new AccountStatsMessage(target)); } } else { if ((perso.Life >= perso.MaxLife) || (objPain.GetStats().GetEffect(EffectEnum.AddVie).Items <= 0)) { } else { perso.Life += objPain.GetStats().GetEffect(EffectEnum.AddVie).Items; if (perso.Life > perso.MaxLife) { perso.Life = perso.MaxLife; } perso.Send(new AccountStatsMessage(perso)); perso.Send(new TextInformationMessage(TextInformationTypeEnum.INFO, 1, objPain.GetStats().GetEffect(EffectEnum.AddVie).Items.ToString())); } } } if (objPain.GetStats().ContainsEffect(EffectEnum.AddEnergy)) { int val = objPain.GetStats().GetEffect(EffectEnum.AddEnergy).Items; if (target != null) { if (/*target.isDead()) || */ (target.Energy >= 10000) || (val <= 0)) { } else { target.Energy += val; if (target.Energy > 10000) { target.Energy = 10000; } target.Send(new AccountStatsMessage(target)); } } else { if ((perso.Energy >= 10000) || (val <= 0)) { } else { perso.Energy += val; if (perso.Energy > 10000) { target.Energy = 10000; } perso.Send(new AccountStatsMessage(perso)); } } } if (target == null) { perso.setEmoteActive(0); perso.myMap.SendToMap(new MapEatOrDrinkMessage(perso.ActorId)); } else { if (target.isSitted()) { return; } target.myMap.SendToMap(new MapEatOrDrinkMessage(target.ActorId)); if (target.Orientation != 2) { return; } target.Orientation = 3; } }
public override bool MoveItem(Network.WorldClient Client, Database.Models.InventoryItemModel Item, ushort Quantity, bool Add = false) { if (!Add) { if (!Npc.Items.ContainsKey(Item.ID)) { return(false); } InventoryItemModel ObjectEqualize = Client.Character.InventoryCache.getSimilarInventoryItem(Item); int newQua = Item.Quantity - Quantity; String str; if (ObjectEqualize == null) { if (newQua <= 0) { Npc.Items.Remove(Item.ID); if (Client.Character.InventoryCache.TryMergeItem(Item.TemplateID, Item.GetStats().ToItemStats(), Item.Slot, Item.Quantity)) { InventoryItemTable.removeItem(Item.ID); } else { Client.Character.InventoryCache.Add(Item); } str = "O-" + Item.ID; } else { ObjectEqualize = InventoryItemTable.TryCreateItem(Item.TemplateID, Client.Character, Quantity, Stats: Item.Effects); Item.Quantity = newQua; str = "O+" + Item.ID + "|" + Item.Quantity + "|" + Item.TemplateID + "|" + Item.GetStats().ToItemStats(); } } else if (newQua <= 0) { Npc.Items.Remove(Item.ID); ObjectEqualize.Quantity += Item.Quantity; Client.Send(new ObjectQuantityMessage(ObjectEqualize.ID, ObjectEqualize.Quantity)); InventoryItemTable.removeItem(Item.ID); str = "O-" + Item.ID; InventoryItemTable.Update(ObjectEqualize); } else { Item.Quantity = newQua; ObjectEqualize.Quantity += Quantity; Client.Send(new ObjectQuantityMessage(ObjectEqualize.ID, ObjectEqualize.Quantity)); str = "O+" + Item.ID + "|" + Item.Quantity + "|" + Item.TemplateID + "|" + Item.GetStats().ToItemStats(); InventoryItemTable.Update(ObjectEqualize); } Client.Send(new BankUpdateMessage(str)); Client.Send(new InventoryWeightMessage(0, 2000)); // TODO PODS TaxCollectorTable.Update(Npc); Npc.LogItems.Add(Item.ID, Item); } Client.GetCharacter().AddExperience(Npc.XP); Npc.LogXP += Npc.XP; Npc.XP = 0; TaxCollectorTable.Update(Npc); return(true); }
public override void OverridableEndFight(FightTeam Winners, FightTeam Loosers) { /*foreach (var Chal in Challanges) * { * if (Chal.State && !Chal.Signaled) * Chal.Ok(); * }*/ var WinChallenges = Challanges.Where(c => c.State).ToList(); var ChallengeXpBonus = 1; var ChallengeDropBonus = 1; if (WinChallenges.Count > 0) { ChallengeXpBonus = (int)Math.Round(Convert.ToDouble((100 + WinChallenges.Sum(c => c.BasicXpBonus + c.TeamXpBonus)) / 100)); ChallengeDropBonus = (int)Math.Round(Convert.ToDouble((100 + WinChallenges.Sum(c => c.BasicDropBonus + c.TeamDropBonus)) / 100)); } var WinnersCount = Winners.GetFighters().Count; var LoosersCount = Loosers.GetFighters().Count; var WinnersLevel = Winners.GetFighters().Sum(x => x.Level); var LoosersLevel = Loosers.GetFighters().Sum(x => x.Level); var WinnersProspection = Winners.GetFighters().Sum(x => x.Stats.GetTotal(EffectEnum.AddProspection)); var MonsterWon = Winners.Leader.ActorType == GameActorTypeEnum.TYPE_MONSTER; var PossibleItemLoot = new List <ItemLoot>(); long PossibleKamasLoot = 0; var PossibleDrops = new Dictionary <Drop, int>(); var MinKamas = 0; var MaxKamas = 0; long BaseXp = 0; // Les monstres perdent ? if (!MonsterWon) { PossibleItemLoot.AddRange(this.MonsterGroup.ItemLoot); PossibleKamasLoot = this.MonsterGroup.KamasLoot; } foreach (var Fighter in Loosers.GetFighters()) { switch (Fighter.ActorType) { case GameActorTypeEnum.TYPE_MONSTER: var Monster = Fighter as MonsterFighter; // Ajout des drops et kamas MinKamas += Monster.Grade.Monster.MinKamas; MaxKamas += Monster.Grade.Monster.MaxKamas; BaseXp += Monster.Grade.BaseXP; // On augmente le Taux si possible foreach (var Drop in Monster.Grade.Monster.DropsCache) { if (Drop.ItemTemplateCache != null) { if (!PossibleDrops.ContainsKey(Drop)) { if (Drop.Seuil <= WinnersProspection) { var Taux = (int)((WinnersProspection * Drop.Taux * Settings.AppSettings.GetIntElement("Rate.Drop") * ChallengeDropBonus / 100)); PossibleDrops.Add(Drop, Taux); } else { PossibleDrops.Add(Drop, (int)Drop.Taux); } } } } break; } this.myResult.AddResult(Fighter, false); } var WinnersOrderedByProspect = Winners.GetFighters().OrderByDescending(x => x.Stats.GetTotal(EffectEnum.AddProspection)); var AlreadyDropItems = new Dictionary <int, int>(); var ItemLootPerFighter = PossibleItemLoot.Count / WinnersCount; var KamasLootPerFighter = PossibleKamasLoot / WinnersCount; var Modulo = PossibleItemLoot.Count % (this.Map.GetActors().Where(x => x.ActorType == GameActorTypeEnum.TYPE_TAX_COLLECTOR).Count() > 0 ? WinnersCount + 1 : WinnersCount); foreach (var Drop in PossibleDrops) { if (!AlreadyDropItems.ContainsKey(Drop.Key.ItemTemplateCache.ID)) { AlreadyDropItems.Add(Drop.Key.ItemTemplateCache.ID, 0); } } foreach (var Fighter in WinnersOrderedByProspect) { long WinXp = 0; long WinKamas = 0; var Drops = new Dictionary <int, int>(); if (!Fighter.Left) { switch (Fighter.ActorType) { case GameActorTypeEnum.TYPE_CHARACTER: var Character = Fighter as CharacterFighter; WinXp = Algo.CalculatePVMXp(Character, Winners.GetFighters(), Loosers.GetFighters(), LoosersLevel, WinnersLevel, BaseXp); WinXp *= ChallengeXpBonus; WinKamas = Algo.CalculatePVMKamas(MaxKamas, MinKamas); WinKamas += KamasLootPerFighter; WinKamas *= ChallengeDropBonus; try { Character.Character.BeginCachedBuffer(); Character.Character.InventoryCache.AddKamas(WinKamas); Character.Character.AddExperience(WinXp); foreach (var Drop in PossibleDrops) { var Taux = Drop.Value * 100; var Jet = Algo.Random(0, 100 * 100); if (Jet < Taux) { if (AlreadyDropItems[Drop.Key.TemplateId] < Drop.Key.Max) { if (Drops.ContainsKey(Drop.Key.TemplateId)) { Drops[Drop.Key.TemplateId]++; } else { Drops.Add(Drop.Key.TemplateId, 1); } } } } foreach (var Drop in Drops) { InventoryItemTable.TryCreateItem(Drop.Key, Character.Character, Drop.Value); } for (int i = 0; i < ItemLootPerFighter; i++) { if (Drops.ContainsKey(PossibleItemLoot[i].TemplateId)) { Drops[PossibleItemLoot[i].TemplateId]++; } else { Drops.Add(PossibleItemLoot[i].TemplateId, PossibleItemLoot[i].Quantity); } InventoryItemTable.TryCreateItem(PossibleItemLoot[i].TemplateId, Character.Character, PossibleItemLoot[i].Quantity, Stats: PossibleItemLoot[i].ItemStats.ToItemStats()); } if (ItemLootPerFighter > 0) { PossibleItemLoot.RemoveRange(0, ItemLootPerFighter); } if (Modulo > 0) { if (Drops.ContainsKey(PossibleItemLoot[0].TemplateId)) { Drops[PossibleItemLoot[0].TemplateId]++; } else { Drops.Add(PossibleItemLoot[0].TemplateId, PossibleItemLoot[0].Quantity); } InventoryItemTable.TryCreateItem(PossibleItemLoot[0].TemplateId, Character.Character, PossibleItemLoot[0].Quantity, Stats: PossibleItemLoot[0].ItemStats.ToItemStats()); PossibleItemLoot.RemoveAt(0); Modulo--; } // Fin de la mise en cache Character.Character.EndCachedBuffer(); } catch (Exception exc) { Logger.Error("MonsterFight::EndFight() " + exc.ToString()); } // Ajout du resultat this.myResult.AddResult(Fighter, true, WinKamas, WinXp, WinItems: Drops); break; case GameActorTypeEnum.TYPE_MONSTER: var Monster = Fighter as MonsterFighter; WinKamas += KamasLootPerFighter; for (int i = 0; i < ItemLootPerFighter; i++) { if (Drops.ContainsKey(PossibleItemLoot[i].TemplateId)) { Drops[PossibleItemLoot[i].TemplateId]++; } else { Drops.Add(PossibleItemLoot[i].TemplateId, PossibleItemLoot[i].Quantity); } } if (ItemLootPerFighter > 0) { PossibleItemLoot.RemoveRange(0, ItemLootPerFighter); } if (Modulo > 0) { if (Drops.ContainsKey(PossibleItemLoot[0].TemplateId)) { Drops[PossibleItemLoot[0].TemplateId]++; } else { Drops.Add(PossibleItemLoot[0].TemplateId, PossibleItemLoot[0].Quantity); } PossibleItemLoot.RemoveAt(0); Modulo--; } this.myResult.AddResult(Fighter, true, WinKamas, WinXp, WinItems: Drops); break; } } } if (!MonsterWon && this.Map.GetActors().Where(x => x.ActorType == GameActorTypeEnum.TYPE_TAX_COLLECTOR).Count() > 0) { var TCollector = this.Map.GetActors().Where(x => x.ActorType == GameActorTypeEnum.TYPE_TAX_COLLECTOR).First() as TaxCollector; long winxp = (int)Math.Floor((double)Algo.CalculateXpWinPerco(TCollector, Winners.GetFighters(), Loosers.GetFighters(), BaseXp) / 100); long winkamas = (int)Math.Floor((double)Algo.CalculatePVMKamas(MinKamas, MaxKamas) / 100); TCollector.XP += winxp; TCollector.Kamas += winkamas; var Drops = new Dictionary <int, int>(); foreach (var Drop in PossibleDrops) { var Taux = Drop.Value * 100; var Jet = Algo.Random(0, 100 * 100); if (Jet < Taux) { if (AlreadyDropItems[Drop.Key.TemplateId] < Drop.Key.Max) { if (Drops.ContainsKey(Drop.Key.TemplateId)) { Drops[Drop.Key.TemplateId]++; } else { Drops.Add(Drop.Key.TemplateId, 1); } } } } foreach (var Drop in Drops) { InventoryItemTable.TryCreateItem(Drop.Key, TCollector, Drop.Value); } for (int i = 0; i < ItemLootPerFighter; i++) { if (Drops.ContainsKey(PossibleItemLoot[i].TemplateId)) { Drops[PossibleItemLoot[i].TemplateId]++; } else { Drops.Add(PossibleItemLoot[i].TemplateId, PossibleItemLoot[i].Quantity); } InventoryItemTable.TryCreateItem(PossibleItemLoot[i].TemplateId, TCollector, PossibleItemLoot[i].Quantity, Stats: PossibleItemLoot[i].ItemStats.ToItemStats()); } if (ItemLootPerFighter > 0) { PossibleItemLoot.RemoveRange(0, ItemLootPerFighter); } if (Modulo > 0) { if (Drops.ContainsKey(PossibleItemLoot[0].TemplateId)) { Drops[PossibleItemLoot[0].TemplateId]++; } else { Drops.Add(PossibleItemLoot[0].TemplateId, PossibleItemLoot[0].Quantity); } InventoryItemTable.TryCreateItem(PossibleItemLoot[0].TemplateId, TCollector, PossibleItemLoot[0].Quantity, Stats: PossibleItemLoot[0].ItemStats.ToItemStats()); PossibleItemLoot.RemoveAt(0); Modulo--; } this.myResult.TCollectorResult = new Tera.WorldServer.World.Fights.GameFightEndResult.TaxCollectorResult() { TaxCollector = TCollector, WinExp = winxp, WinKamas = winkamas, WinItems = Drops }; TaxCollectorTable.Update(TCollector); } if (!MonsterWon) { this.Map.SpawnMonsterGroup(1); } else if (!MonsterGroup.IsFix) { this.Map.SpawnActor(this.MonsterGroup); } base.EndFight(); }
public override bool Finish() { if (this.myEnd) { return(false); } Logger.Debug("PlayerExchange(" + this.myClient1.Account.Username + " - " + this.myClient2.Account.Username + ")::Finish()" + "\n -- P1(Items=" + string.Join(",", this.myItemsToTrade[this.myClient1].Select(x => x.Key)) + " Kamas=" + this.myKamasToTrade[this.myClient1] + ")" + "\n -- P2(Items=" + string.Join(",", this.myItemsToTrade[this.myClient2].Select(x => x.Key)) + " Kamas=" + this.myKamasToTrade[this.myClient2] + ")"); foreach (var ItemData in this.myItemsToTrade[this.myClient1]) { var Item = this.myClient1.Character.InventoryCache.GetItem(ItemData.Key); Item.Quantity -= ItemData.Value; if (Item.Quantity == 0) { InventoryItemTable.removeItem(Item.ID); this.myClient1.Character.InventoryCache.RemoveItem(Item); this.myClient1.Send(new ObjectRemoveMessage(Item.ID)); } else if (Item.Quantity < 0) { Logger.Debug("PlayerExchange::Finish() item quantity < 0 : " + myClient1.Character.Name); InventoryItemTable.removeItem(Item.ID); this.myClient1.Character.InventoryCache.RemoveItem(Item); } else { this.myClient1.Character.InventoryCache.UpdateObjectquantity(Item, Item.Quantity); } InventoryItemTable.TryCreateItem(Item.TemplateID, this.myClient2.Character, ItemData.Value, Stats: Item.Effects); } foreach (var ItemData in this.myItemsToTrade[this.myClient2]) { var Item = this.myClient2.Character.InventoryCache.GetItem(ItemData.Key); Item.Quantity -= ItemData.Value; if (Item.Quantity == 0) { InventoryItemTable.removeItem(Item.ID); this.myClient2.Character.InventoryCache.RemoveItem(Item); this.myClient2.Send(new ObjectRemoveMessage(Item.ID)); } else if (Item.Quantity < 0) { Logger.Debug("PlayerExchange::Finish() item quantity < 0 : " + myClient2.Character.Name); InventoryItemTable.removeItem(Item.ID); this.myClient2.Character.InventoryCache.RemoveItem(Item); } else { this.myClient2.Character.InventoryCache.UpdateObjectquantity(Item, Item.Quantity); } InventoryItemTable.TryCreateItem(Item.TemplateID, this.myClient1.Character, ItemData.Value, Stats: Item.Effects); } this.myClient1.Character.InventoryCache.SubstractKamas(this.myKamasToTrade[this.myClient1]); this.myClient2.Character.InventoryCache.SubstractKamas(this.myKamasToTrade[this.myClient2]); this.myClient1.Character.InventoryCache.AddKamas(this.myKamasToTrade[this.myClient2]); this.myClient2.Character.InventoryCache.AddKamas(this.myKamasToTrade[this.myClient1]); this.myClient1.Send(new AccountStatsMessage(myClient1.Character)); this.myClient2.Send(new AccountStatsMessage(myClient2.Character)); return(true); }