public Toon(DBToon dbToon) : base(dbToon.Id) { this.D3EntityID = D3.OnlineService.EntityId.CreateBuilder().SetIdHigh((ulong)EntityIdHelper.HighIdType.ToonId).SetIdLow(this.PersistentID).Build(); this.DBToon = dbToon; this.ExperienceNext = Player.LevelBorders[this.Level]; var visualItems = new[] { D3.Hero.VisualItem.CreateBuilder().SetEffectLevel(0).Build(), // Head D3.Hero.VisualItem.CreateBuilder().SetEffectLevel(0).Build(), // Chest D3.Hero.VisualItem.CreateBuilder().SetEffectLevel(0).Build(), // Feet D3.Hero.VisualItem.CreateBuilder().SetEffectLevel(0).Build(), // Hands D3.Hero.VisualItem.CreateBuilder().SetEffectLevel(0).Build(), // Weapon (1) D3.Hero.VisualItem.CreateBuilder().SetEffectLevel(0).Build(), // Weapon (2) D3.Hero.VisualItem.CreateBuilder().SetEffectLevel(0).Build(), // Shoulders D3.Hero.VisualItem.CreateBuilder().SetEffectLevel(0).Build(), // Legs }; // Load Visual Equipment var visualToSlotMapping = new Dictionary<int, int> { { 1, 0 }, { 2, 1 }, { 7, 2 }, { 5, 3 }, { 4, 4 }, { 3, 5 }, { 8, 6 }, { 9, 7 } }; //add visual equipment from DB, only the visualizable equipment, not everything var visibleEquipment = DBSessions.AccountSession.Query<DBInventory>().Where(inv => inv.ItemId != -1 && inv.DBToon.Id == dbToon.Id && inv.EquipmentSlot != -1).ToList(); foreach (var inv in visibleEquipment) { var slot = inv.EquipmentSlot; if (!visualToSlotMapping.ContainsKey(slot)) continue; // decode vislual slot from equipment slot slot = visualToSlotMapping[slot]; var gbid = inv.ItemId; visualItems[slot] = D3.Hero.VisualItem.CreateBuilder() .SetGbid(gbid) .SetEffectLevel(0) .Build(); } this.HeroVisualEquipmentField.Value = D3.Hero.VisualEquipment.CreateBuilder().AddRangeVisualItem(visualItems).Build(); }
private void SaveItemToDB(DBGameAccount dbGameAccount, DBToon dbToon, EquipmentSlotId slotId, Item item) { if (item == null) return; if (item.DBInventory == null) item.DBInventory = new DBInventory(); item.DBInventory.DBGameAccount = dbGameAccount; item.DBInventory.DBToon = dbToon; item.DBInventory.LocationX = item.InventoryLocation.X; item.DBInventory.LocationY = item.InventoryLocation.Y; item.DBInventory.EquipmentSlot = (int)slotId; ItemGenerator.SaveToDB(item); item.DBInventory.DBItemInstance = item.DBItemInstance; DBSessions.AccountSession.SaveOrUpdate(item.DBInventory); }
public static Toon CreateNewToon(string name, int classId, ToonFlags flags, byte level, GameAccount gameAccount) { var dbGameAccount = DBSessions.AccountSession.Get<DBGameAccount>(gameAccount.PersistentID); var newDBToon = new DBToon { Class = @Toon.GetClassByID(classId), Name = name, /*HashCode = GetUnusedHashCodeForToonName(name),*/ Flags = flags, Level = level, DBGameAccount = DBSessions.AccountSession.Get<DBGameAccount>(gameAccount.PersistentID) }; dbGameAccount.DBToons.Add(newDBToon); DBSessions.AccountSession.SaveOrUpdate(dbGameAccount); DBSessions.AccountSession.Flush(); return GetToonByLowID(newDBToon.Id); }
public Toon(DBToon dbToon) : base(dbToon.Id) { this.D3EntityID = D3.OnlineService.EntityId.CreateBuilder().SetIdHigh((ulong)EntityIdHelper.HighIdType.ToonId).SetIdLow(this.PersistentID).Build(); this.DBToon = dbToon; this.HeroTable = HeroData.Heros.Find(item => item.Name == this.Class.ToString()); this.ExperienceNext = Player.LevelBorders[this.Level]; // FIXME: somehow d3.hero.visualitem builder doesn't want to build - need to fixed. /raist. //var visualItems = new[] //{ // D3.Hero.VisualItem.CreateBuilder().SetEffectLevel(0).Build(), // Head // D3.Hero.VisualItem.CreateBuilder().SetEffectLevel(0).Build(), // Chest // D3.Hero.VisualItem.CreateBuilder().SetEffectLevel(0).Build(), // Feet // D3.Hero.VisualItem.CreateBuilder().SetEffectLevel(0).Build(), // Hands // D3.Hero.VisualItem.CreateBuilder().SetEffectLevel(0).Build(), // Weapon (1) // D3.Hero.VisualItem.CreateBuilder().SetEffectLevel(0).Build(), // Weapon (2) // D3.Hero.VisualItem.CreateBuilder().SetEffectLevel(0).Build(), // Shoulders // D3.Hero.VisualItem.CreateBuilder().SetEffectLevel(0).Build(), // Legs //}; //// Load Visual Equipment //var visualToSlotMapping = new Dictionary<int, int> { { 1, 0 }, { 2, 1 }, { 7, 2 }, { 5, 3 }, { 4, 4 }, { 3, 5 }, { 8, 6 }, { 9, 7 } }; ////add visual equipment from DB, only the visualizable equipment, not everything //var visibleEquipment = DBSessions.AccountSession.Query<DBInventory>().Where(inv => inv.DBItemInstance != null && inv.DBToon.Id == dbToon.Id && inv.EquipmentSlot != -1).ToList(); //foreach (var inv in visibleEquipment) //{ // var slot = inv.EquipmentSlot; // if (!visualToSlotMapping.ContainsKey(slot)) // continue; // // decode vislual slot from equipment slot // slot = visualToSlotMapping[slot]; // var gbid = inv.DBItemInstance.GbId; // visualItems[slot] = D3.Hero.VisualItem.CreateBuilder() // .SetGbid(gbid) // .SetEffectLevel(0) // .Build(); //} //this.HeroVisualEquipmentField.Value = D3.Hero.VisualEquipment.CreateBuilder().AddRangeVisualItem(visualItems).Build(); }
public static Toon GetToonByDBToon(DBToon dbToon) { if (!LoadedToons.Any(dbt => dbt.DBToon.Id == dbToon.Id)) LoadedToons.Add(new Toon(dbToon)); return LoadedToons.Single(dbt => dbt.DBToon.Id == dbToon.Id); }