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 void Initialize() { Item = InventoryItemTable.Load(ItemID); if (Item == null) { BidHouseTable.Delete(ItemID); return; } BH.addObject(this); BH = null; }
public void addBidHouseItemToLine(BidHouseItem BHI) { foreach (var line in Lines.Values) { if (line.addBidHouseObjectAtLine(BHI)) { return; } } int lineID = BidHouseTable.NextLineID(); Lines.Add(lineID, new Line(lineID, BHI)); }
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 void addObject(BidHouseItem item) { if (item.Item == null) { return; } item.MapID = MapID; int objectType = item.Item.Template.Type; int templateID = item.Item.TemplateID; if (!Categories.ContainsKey(objectType)) { Logger.Error("Bidhoute " + HdvID + " !Contains Cat " + objectType); return; } Categories[objectType].addModel(item); Path.Add(item.LineID, new Couple <int, int>(objectType, templateID)); BidHouseTable.addBidHouseItem(item.Owner, HdvID, item); }
/// <summary> /// Sauvegarde les changements effectués. /// </summary> public static bool Save() { try { lock (mySyncSave) { long StartTime = Environment.TickCount; Logger.Info("World saving ..."); // Execution des requetes lock (mySaveQueue) while (mySaveQueue.Count != 0) { mySaveQueue.Dequeue()(); } lock (GuildTable.Cache) foreach (var Guild in GuildTable.Cache.Values) { Guild.SaveChanges(); GuildTable.Update(Guild); } lock (CharacterTable.myCharacterById) foreach (var Character in CharacterTable.myCharacterById.Values.Where(x => x.myInitialized)) { CharacterTable.Update(Character); } lock (SpeakingTable.Cache) foreach (var Speaking in SpeakingTable.Cache.Values) { SpeakingTable.Add(Speaking); } lock (AreaTable.Cache) foreach (var area in AreaTable.Cache.Values) { AreaTable.Update(area); } lock (AreaSubTable.Cache) foreach (var subarea in AreaSubTable.Cache.Values) { AreaSubTable.Save(subarea); } lock (BidHouseTable.Cache) { var BHI = new List <BidHouseItem>(); foreach (var BH in BidHouseTable.Cache.Values) { BHI.AddRange(BH.getAllEntry()); } BidHouseTable.Update(BHI); } Logger.Info("World saved in " + (Environment.TickCount - StartTime) + "ms"); return(true); } } catch (Exception ex) { Logger.Error("DatabaseEntities::Save() " + ex.ToString()); return(false); } }
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); }