public Player(GameClient client, Universe universe, Toon bnetToon) { this.Client = client; this.Universe = universe; this.Hero = new Hero(client, universe, bnetToon); }
public static void DeleteToon(Toon toon) { if (!Toons.ContainsKey(toon.PersistentID)) { Logger.Error("Attempting to delete toon that does not exist: {0}", toon.PersistentID); return; } if (toon.DeleteFromDB()) Toons.Remove(toon.PersistentID); }
public override void CreateToon(Google.ProtocolBuffers.IRpcController controller, CreateToonRequest request, Action<CreateToonResponse> done) { Logger.Trace("CreateToon()"); var heroCreateParams = D3.OnlineService.HeroCreateParams.ParseFrom(request.AttributeList[0].Value.MessageValue); var builder = CreateToonResponse.CreateBuilder(); var toon = new Toon(request.Name, heroCreateParams.GbidClass, heroCreateParams.IsFemale ? ToonFlags.Female : ToonFlags.Male, 60, Client.Account); if (ToonManager.SaveToon(toon)) builder.SetToon(toon.BnetEntityID); done(builder.Build()); }
public static bool SaveToon(Toon toon) { if(Toons.ContainsKey(toon.PersistentID)) { Logger.Error("Duplicate persistent toon id: {0}", toon.PersistentID); return false; } Toons.Add(toon.PersistentID, toon); toon.SaveToDB(); return true; }
//Method only used when creating a Toon for the first time, ambiguous method name - Tharuler public static bool SaveToon(Toon toon) { if (Toons.ContainsKey(toon.PersistentID)) //this should never happen again thanks to hashcode, but lets leave it in for now - Tharuler { Logger.Error("Duplicate persistent toon id: {0}", toon.PersistentID); return false; } Toons.Add(toon.PersistentID, toon); toon.SaveToDB(); //possible concurrency problem? 2 toon created with same name at same time could introduce a race condition for the same hashcode(chance of 1 in (1000-amount of toons with that name)) Logger.Trace("Character {0} with HashCode #{1} added to database", toon.Name, toon.HashCodeString); return true; }
public Hero(GameClient client, Universe universe, Toon toon) { this.InGameClient = client; this.Universe = universe; this.Properties = toon; this.CurrentWorldSNO = 0x115EE; this.Inventory = new Inventory(this); this.SkillSet = new Skills.SkillSet(this.Properties.Class); RevealedWorlds = new List<World>(); RevealedScenes = new List<Scene>(); RevealedActors = new List<Actor>(); // actor values this.DynamicId = universe.NextObjectId; this.SnoId = this.ClassSNO; this.Field2 = 0x00000009; this.Field3 = 0x00000000; this.Scale = ModelScale; this.RotationAmount = 0.05940768f; this.RotationAxis = new Vector3D(0f, 0f, 0.9982339f); //initial world and position this.WorldId = 0x772E0000; this.Position.X = 3143.75f; this.Position.Y = 2828.75f; this.Position.Z = 59.075588f; //den of evil: this.Position.X = 2526.250000f; this.Position.Y = 2098.750000f; this.Position.Z = -5.381495f; //inn: this.Position.X = 2996.250000f; this.Position.Y = 2793.750000f; this.Position.Z = 24.045330f; // adrias hut: this.Position.X = 1768.750000f; this.Position.Y = 2921.250000f; this.Position.Z = 20.333143f; // cemetry of forsaken: this.Position.X = 2041.250000f; this.Position.Y = 1778.750000f; this.Position.Z = 0.426203f; //defiled crypt level 2: this.WorldId = 2000289804; this.Position.X = 158.750000f; this.Position.Y = 76.250000f; this.Position.Z = 0.100000f; this.GBHandle = new GBHandle() { Field0 = 0x00000007, Field1 = this.Properties.ClassID, }; this.Field7 = -1; this.Field8 = -1; this.Field9 = 0x00000000; this.Field10 = 0x0; }
public Player(World world, GameClient client, Toon bnetToon) : base(world, world.NewPlayerID) { this.InGameClient = client; this.PlayerIndex = Interlocked.Increment(ref this.InGameClient.Game.PlayerIndexCounter); // make it atomic. this.Properties = bnetToon; this.Inventory = new Inventory(this); this.SkillSet = new SkillSet(this.Properties.Class); this.RevealedObjects = new Dictionary<uint, IRevealable>(); this.GroundItems = new Dictionary<uint, Item>(); this.OpenConversations = new List<OpenConversation>(); this._killstreakTickTime = 400; this._killstreakPlayer = 0; this._killstreakEnvironment = 0; this._lastMonsterKillTick = 0; this._lastMonsterAttackTick = 0; this._lastMonsterAttackKills = 0; this._lastEnvironmentDestroyTick = 0; this._lastEnvironmentDestroyMonsterKills = 0; this._lastEnvironmentDestroyMonsterKillTick = 0; // actor values this.ActorSNO = this.ClassSNO; this.Field2 = 0x00000009; this.Field3 = 0x00000000; this.Scale = ModelScale; this.RotationAmount = 0.05940768f; this.RotationAxis = new Vector3D(0f, 0f, 0.9982339f); this.CollFlags = 0x00000000; this.Position.X = 3143.75f; this.Position.Y = 2828.75f; this.Position.Z = 59.075588f; // den of evil: this.Position.X = 2526.250000f; this.Position.Y = 2098.750000f; this.Position.Z = -5.381495f; // inn: this.Position.X = 2996.250000f; this.Position.Y = 2793.750000f; this.Position.Z = 24.045330f; // adrias hut: this.Position.X = 1768.750000f; this.Position.Y = 2921.250000f; this.Position.Z = 20.333143f; // cemetery of the forsaken: this.Position.X = 2041.250000f; this.Position.Y = 1778.750000f; this.Position.Z = 0.426203f; // defiled crypt level 2: this.WorldId = 2000289804; this.Position.X = 158.750000f; this.Position.Y = 76.250000f; this.Position.Z = 0.100000f; this.GBHandle.Type = (int)GBHandleType.Player; this.GBHandle.GBID = this.Properties.ClassID; this.Field7 = -1; this.Field8 = -1; this.Field9 = 0x00000000; this.Field10 = 0x0; #region Attributes //Skills this.Attributes[GameAttribute.SkillKit] = this.SkillKit; this.Attributes[GameAttribute.Skill_Total, 0x7545] = 1; //Axe Operate Gizmo this.Attributes[GameAttribute.Skill, 0x7545] = 1; this.Attributes[GameAttribute.Skill_Total, 0x76B7] = 1; //Punch! this.Attributes[GameAttribute.Skill, 0x76B7] = 1; this.Attributes[GameAttribute.Skill_Total, 0x216FA] = 1; //Monk's Blinding Flash this.Attributes[GameAttribute.Skill, 0x216FA] = 1; this.Attributes[GameAttribute.Skill_Total, 0x176C4] = 1; //Monk's Fist of Thunder this.Attributes[GameAttribute.Skill, 0x176C4] = 1; this.Attributes[GameAttribute.Skill_Total, 0x6DF] = 1; //Use Item this.Attributes[GameAttribute.Skill, 0x6DF] = 1; this.Attributes[GameAttribute.Skill_Total, 0x7780] = 1; //Basic Attack this.Attributes[GameAttribute.Skill, 0x7780] = 1; this.Attributes[GameAttribute.Skill_Total, 0x0000CE11] = 1; //Monk Spirit Trait this.Attributes[GameAttribute.Skill, 0x0000CE11] = 1; this.Attributes[GameAttribute.Skill_Total, 0x0002EC66] = 0; //stone of recall this.Attributes[GameAttribute.Skill_Total, 0xFFFFF] = 1; this.Attributes[GameAttribute.Skill, 0xFFFFF] = 1; //Buffs this.Attributes[GameAttribute.Buff_Active, 0x33C40] = true; this.Attributes[GameAttribute.Buff_Icon_End_Tick0, 0x00033C40] = 0x000003FB; this.Attributes[GameAttribute.Buff_Icon_Start_Tick0, 0x00033C40] = 0x00000077; this.Attributes[GameAttribute.Buff_Icon_Count0, 0x00033C40] = 1; this.Attributes[GameAttribute.Buff_Active, 0xCE11] = true; this.Attributes[GameAttribute.Buff_Icon_Count0, 0x0000CE11] = 1; this.Attributes[GameAttribute.Buff_Visual_Effect, 0xFFFFF] = true; //Resistance this.Attributes[GameAttribute.Resistance, 0xDE] = 0.5f; this.Attributes[GameAttribute.Resistance, 0x226] = 0.5f; this.Attributes[GameAttribute.Resistance_Total, 0] = 10f; /// im pretty sure key = 0 doesnt do anything since the lookup is (attributeId | (key << 12)), maybe this is some base resistance? /cm /// likely the physical school of damage, it probably doesn't actually do anything in this case (or maybe just not for the player's hero) /// but exists for the sake of parity with weapon damage schools this.Attributes[GameAttribute.Resistance_Total, 1] = 10f; //Fire this.Attributes[GameAttribute.Resistance_Total, 2] = 10f; //Lightning this.Attributes[GameAttribute.Resistance_Total, 3] = 10f; //Cold this.Attributes[GameAttribute.Resistance_Total, 4] = 10f; //Poison this.Attributes[GameAttribute.Resistance_Total, 5] = 10f; //Arcane this.Attributes[GameAttribute.Resistance_Total, 6] = 10f; //Holy this.Attributes[GameAttribute.Resistance_Total, 0xDE] = 0.5f; this.Attributes[GameAttribute.Resistance_Total, 0x226] = 0.5f; //Damage this.Attributes[GameAttribute.Damage_Delta_Total, 0] = 1f; this.Attributes[GameAttribute.Damage_Delta_Total, 1] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Delta_Total, 2] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Delta_Total, 3] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Delta_Total, 4] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Delta_Total, 5] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Delta_Total, 6] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Min_Total, 0] = 2f; this.Attributes[GameAttribute.Damage_Min_Total, 1] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Min_Total, 2] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Min_Total, 3] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Min_Total, 4] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Min_Total, 5] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Min_Total, 6] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Min_Total, 0xFFFFF] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Min_Subtotal, 0] = 2f; this.Attributes[GameAttribute.Damage_Min_Subtotal, 1] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Min_Subtotal, 2] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Min_Subtotal, 3] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Min_Subtotal, 4] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Min_Subtotal, 5] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Min_Subtotal, 6] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Min_Subtotal, 0xFFFFF] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Weapon_Min_Total_CurrentHand, 0] = 2f; this.Attributes[GameAttribute.Damage_Weapon_Min_Total_CurrentHand, 1] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Weapon_Min_Total_CurrentHand, 2] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Weapon_Min_Total_CurrentHand, 3] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Weapon_Min_Total_CurrentHand, 4] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Weapon_Min_Total_CurrentHand, 5] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Weapon_Min_Total_CurrentHand, 6] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Weapon_Min, 0] = 2f; this.Attributes[GameAttribute.Damage_Weapon_Min_Total, 0] = 2f; this.Attributes[GameAttribute.Damage_Weapon_Min_Total_All] = 2f; this.Attributes[GameAttribute.Damage_Weapon_Min_Total_MainHand, 0] = 2f; this.Attributes[GameAttribute.Damage_Weapon_Min_Total_CurrentHand, 0xFFFFF] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Weapon_Delta, 0] = 1f; this.Attributes[GameAttribute.Damage_Weapon_Delta_SubTotal, 0] = 1f; this.Attributes[GameAttribute.Damage_Weapon_Delta_Total_CurrentHand, 0] = 1f; this.Attributes[GameAttribute.Damage_Weapon_Delta_Total_CurrentHand, 1] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Weapon_Delta_Total_CurrentHand, 2] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Weapon_Delta_Total_CurrentHand, 3] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Weapon_Delta_Total_CurrentHand, 4] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Weapon_Delta_Total_CurrentHand, 5] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Weapon_Delta_Total_CurrentHand, 6] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Weapon_Delta_Total, 0] = 1f; this.Attributes[GameAttribute.Damage_Weapon_Delta_Total_All] = 1f; this.Attributes[GameAttribute.Damage_Weapon_Delta_Total_MainHand, 0] = 1f; this.Attributes[GameAttribute.Damage_Weapon_Max, 0] = 3f; this.Attributes[GameAttribute.Damage_Weapon_Max_Total, 0] = 3f; //Bonus stats this.Attributes[GameAttribute.Get_Hit_Recovery] = 6f; this.Attributes[GameAttribute.Get_Hit_Recovery_Per_Level] = 1f; this.Attributes[GameAttribute.Get_Hit_Recovery_Base] = 5f; this.Attributes[GameAttribute.Get_Hit_Max] = 60f; this.Attributes[GameAttribute.Get_Hit_Max_Per_Level] = 10f; this.Attributes[GameAttribute.Get_Hit_Max_Base] = 50f; this.Attributes[GameAttribute.Hit_Chance] = 1f; this.Attributes[GameAttribute.Dodge_Rating_Total] = 3.051758E-05f; this.Attributes[GameAttribute.Attacks_Per_Second_Item_CurrentHand] = 1.199219f; this.Attributes[GameAttribute.Attacks_Per_Second_Item_Total_MainHand] = 1.199219f; this.Attributes[GameAttribute.Attacks_Per_Second_Total] = 1.199219f; this.Attributes[GameAttribute.Attacks_Per_Second] = 1f; this.Attributes[GameAttribute.Attacks_Per_Second_Item_MainHand] = 1.199219f; this.Attributes[GameAttribute.Attacks_Per_Second_Item_Total] = 1.199219f; this.Attributes[GameAttribute.Attacks_Per_Second_Item_Subtotal] = 3.051758E-05f; this.Attributes[GameAttribute.Attacks_Per_Second_Item] = 3.051758E-05f; this.Attributes[GameAttribute.Crit_Percent_Cap] = 0x3F400000; this.Attributes[GameAttribute.Casting_Speed_Total] = 1f; this.Attributes[GameAttribute.Casting_Speed] = 1f; this.Attributes[GameAttribute.Hitpoints_Max_Total] = 76f; this.Attributes[GameAttribute.Hitpoints_Max] = 40f; this.Attributes[GameAttribute.Hitpoints_Total_From_Level] = 3.051758E-05f; this.Attributes[GameAttribute.Hitpoints_Total_From_Vitality] = 36f; this.Attributes[GameAttribute.Hitpoints_Factor_Vitality] = 4f; this.Attributes[GameAttribute.Hitpoints_Factor_Level] = 4f; this.Attributes[GameAttribute.Hitpoints_Cur] = 76f; //Basic stats this.Attributes[GameAttribute.Level_Cap] = 13; this.Attributes[GameAttribute.Level] = this.Properties.Level; this.Attributes[GameAttribute.Experience_Next] = LevelBorders[this.Properties.Level]; this.Attributes[GameAttribute.Experience_Granted] = 1000; this.Attributes[GameAttribute.Armor_Total] = 0; this.Attributes[GameAttribute.Attack] = this.Properties.InitialAttack; this.Attributes[GameAttribute.Precision] = this.Properties.InitialPrecision; this.Attributes[GameAttribute.Defense] = this.Properties.InitialDefense; this.Attributes[GameAttribute.Vitality] = this.Properties.InitialVitality; //Resource this.Attributes[GameAttribute.Resource_Cur, this.ResourceID] = 200f; this.Attributes[GameAttribute.Resource_Max, this.ResourceID] = 200f; this.Attributes[GameAttribute.Resource_Max_Total, this.ResourceID] = 200f; this.Attributes[GameAttribute.Resource_Effective_Max, this.ResourceID] = 200f; this.Attributes[GameAttribute.Resource_Regen_Total, this.ResourceID] = 3.051758E-05f; this.Attributes[GameAttribute.Resource_Type_Primary] = this.ResourceID; //Secondary Resource for the Demon Hunter if (this.Properties.Class == ToonClass.DemonHunter) { int Discipline = this.ResourceID + 1; //0x00000006 this.Attributes[GameAttribute.Resource_Cur, Discipline] = 30f; this.Attributes[GameAttribute.Resource_Max, Discipline] = 30f; this.Attributes[GameAttribute.Resource_Max_Total, Discipline] = 30f; this.Attributes[GameAttribute.Resource_Effective_Max, Discipline] = 30f; this.Attributes[GameAttribute.Resource_Regen_Total, Discipline] = 3.051758E-05f; this.Attributes[GameAttribute.Resource_Type_Secondary] = Discipline; } //Movement this.Attributes[GameAttribute.Movement_Scalar_Total] = 1f; this.Attributes[GameAttribute.Movement_Scalar_Capped_Total] = 1f; this.Attributes[GameAttribute.Movement_Scalar_Subtotal] = 1f; this.Attributes[GameAttribute.Movement_Scalar] = 1f; this.Attributes[GameAttribute.Walking_Rate_Total] = 0.2797852f; this.Attributes[GameAttribute.Walking_Rate] = 0.2797852f; this.Attributes[GameAttribute.Running_Rate_Total] = 0.3598633f; this.Attributes[GameAttribute.Running_Rate] = 0.3598633f; this.Attributes[GameAttribute.Sprinting_Rate_Total] = 3.051758E-05f; this.Attributes[GameAttribute.Strafing_Rate_Total] = 3.051758E-05f; //Miscellaneous //this.Attributes[GameAttribute.Disabled] = true; //this.Attributes[GameAttribute.Loading] = true; //this.Attributes[GameAttribute.Invulnerable] = true; this.Attributes[GameAttribute.Hidden] = false; this.Attributes[GameAttribute.Immobolize] = true; this.Attributes[GameAttribute.Untargetable] = true; this.Attributes[GameAttribute.CantStartDisplayedPowers] = true; this.Attributes[GameAttribute.IsTrialActor] = true; this.Attributes[GameAttribute.Trait, 0x0000CE11] = 1; this.Attributes[GameAttribute.TeamID] = 2; this.Attributes[GameAttribute.Shared_Stash_Slots] = 14; this.Attributes[GameAttribute.Backpack_Slots] = 60; this.Attributes[GameAttribute.General_Cooldown] = 0; #endregion // Attributes }
public Player(World world, GameClient client, Toon bnetToon) : base(world, world.NewPlayerID) { this.InGameClient = client; this.PlayerIndex = Interlocked.Increment(ref this.InGameClient.Game.PlayerIndexCounter); // make it atomic. this.Properties = bnetToon; this.Inventory = new Inventory(this); this.SkillSet = new SkillSet(this.Properties.Class); this.RevealedObjects = new Dictionary<uint, IRevealable>(); this.GroundItems = new Dictionary<uint, Item>(); // actor values this.ActorSNO = this.ClassSNO; this.Field2 = 0x00000009; this.Field3 = 0x00000000; this.Scale = ModelScale; this.RotationAmount = 0.05940768f; this.RotationAxis = new Vector3D(0f, 0f, 0.9982339f); this.CollFlags = 0x00000000; this.Position.X = 3143.75f; this.Position.Y = 2828.75f; this.Position.Z = 59.075588f; // den of evil: this.Position.X = 2526.250000f; this.Position.Y = 2098.750000f; this.Position.Z = -5.381495f; // inn: this.Position.X = 2996.250000f; this.Position.Y = 2793.750000f; this.Position.Z = 24.045330f; // adrias hut: this.Position.X = 1768.750000f; this.Position.Y = 2921.250000f; this.Position.Z = 20.333143f; // cemetery of the forsaken: this.Position.X = 2041.250000f; this.Position.Y = 1778.750000f; this.Position.Z = 0.426203f; // defiled crypt level 2: this.WorldId = 2000289804; this.Position.X = 158.750000f; this.Position.Y = 76.250000f; this.Position.Z = 0.100000f; this.GBHandle.Type = (int)GBHandleType.Player; this.GBHandle.GBID = this.Properties.ClassID; this.Field7 = -1; this.Field8 = -1; this.Field9 = 0x00000000; this.Field10 = 0x0; #region Attributes this.Attributes[GameAttribute.SkillKit] = this.SkillKit; this.Attributes[GameAttribute.Buff_Active, 0x33C40] = true; this.Attributes[GameAttribute.Skill, 0x7545] = 1; this.Attributes[GameAttribute.Skill_Total, 0x7545] = 1; this.Attributes[GameAttribute.Resistance_Total, 0x226] = 0.5f; this.Attributes[GameAttribute.Resistance, 0x226] = 0.5f; this.Attributes[GameAttribute.Immobolize] = true; this.Attributes[GameAttribute.Untargetable] = true; this.Attributes[GameAttribute.Skill_Total, 0x76B7] = 1; this.Attributes[GameAttribute.Skill, 0x76B7] = 1; this.Attributes[GameAttribute.Skill, 0x6DF] = 1; this.Attributes[GameAttribute.Buff_Active, 0xCE11] = true; this.Attributes[GameAttribute.CantStartDisplayedPowers] = true; this.Attributes[GameAttribute.Skill_Total, 0x216FA] = 1; this.Attributes[GameAttribute.Skill, 0x176C4] = 1; this.Attributes[GameAttribute.Skill, 0x216FA] = 1; this.Attributes[GameAttribute.Skill_Total, 0x176C4] = 1; this.Attributes[GameAttribute.Skill_Total, 0x6DF] = 1; this.Attributes[GameAttribute.Resistance, 0xDE] = 0.5f; this.Attributes[GameAttribute.Resistance_Total, 0xDE] = 0.5f; this.Attributes[GameAttribute.Get_Hit_Recovery] = 6f; this.Attributes[GameAttribute.Get_Hit_Recovery_Per_Level] = 1f; this.Attributes[GameAttribute.Get_Hit_Recovery_Base] = 5f; this.Attributes[GameAttribute.Skill, 0x7780] = 1; this.Attributes[GameAttribute.Get_Hit_Max] = 60f; this.Attributes[GameAttribute.Skill_Total, 0x7780] = 1; this.Attributes[GameAttribute.Get_Hit_Max_Per_Level] = 10f; this.Attributes[GameAttribute.Get_Hit_Max_Base] = 50f; this.Attributes[GameAttribute.Resistance_Total, 0] = 3.051758E-05f; // im pretty sure key = 0 doesnt do anything since the lookup is (attributeId | (key << 12)), maybe this is some base resistance? /cm this.Attributes[GameAttribute.Resistance_Total, 1] = 3.051758E-05f; this.Attributes[GameAttribute.Resistance_Total, 2] = 3.051758E-05f; this.Attributes[GameAttribute.Resistance_Total, 3] = 3.051758E-05f; this.Attributes[GameAttribute.Resistance_Total, 4] = 3.051758E-05f; this.Attributes[GameAttribute.Resistance_Total, 5] = 3.051758E-05f; this.Attributes[GameAttribute.Resistance_Total, 6] = 3.051758E-05f; this.Attributes[GameAttribute.Dodge_Rating_Total] = 3.051758E-05f; this.Attributes[GameAttribute.IsTrialActor] = true; this.Attributes[GameAttribute.Buff_Visual_Effect, 0xFFFFF] = true; this.Attributes[GameAttribute.Crit_Percent_Cap] = 0x3F400000; this.Attributes[GameAttribute.Resource_Cur, this.ResourceID] = 200f; this.Attributes[GameAttribute.Resource_Max, this.ResourceID] = 200f; this.Attributes[GameAttribute.Resource_Max_Total, this.ResourceID] = 200f; this.Attributes[GameAttribute.Damage_Weapon_Min_Total_All] = 2f; this.Attributes[GameAttribute.Damage_Weapon_Delta_Total_All] = 1f; this.Attributes[GameAttribute.Resource_Regen_Total, this.ResourceID] = 3.051758E-05f; this.Attributes[GameAttribute.Resource_Effective_Max, this.ResourceID] = 200f; this.Attributes[GameAttribute.Damage_Min_Subtotal, 0xFFFFF] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Min_Total, 0xFFFFF] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Weapon_Min_Total_CurrentHand, 0xFFFFF] = 3.051758E-05f; this.Attributes[GameAttribute.Attacks_Per_Second_Item_CurrentHand] = 1.199219f; this.Attributes[GameAttribute.Attacks_Per_Second_Item_Total_MainHand] = 1.199219f; this.Attributes[GameAttribute.Attacks_Per_Second_Total] = 1.199219f; this.Attributes[GameAttribute.Attacks_Per_Second] = 1f; this.Attributes[GameAttribute.Attacks_Per_Second_Item_MainHand] = 1.199219f; this.Attributes[GameAttribute.Attacks_Per_Second_Item_Total] = 1.199219f; this.Attributes[GameAttribute.Buff_Icon_End_Tick0, 0x00033C40] = 0x000003FB; this.Attributes[GameAttribute.Attacks_Per_Second_Item_Subtotal] = 3.051758E-05f; this.Attributes[GameAttribute.Attacks_Per_Second_Item] = 3.051758E-05f; this.Attributes[GameAttribute.Buff_Icon_Start_Tick0, 0x00033C40] = 0x00000077; this.Attributes[GameAttribute.Hit_Chance] = 1f; this.Attributes[GameAttribute.Casting_Speed_Total] = 1f; this.Attributes[GameAttribute.Casting_Speed] = 1f; this.Attributes[GameAttribute.Movement_Scalar_Total] = 1f; this.Attributes[GameAttribute.Skill_Total, 0x0002EC66] = 0; this.Attributes[GameAttribute.Movement_Scalar_Capped_Total] = 1f; this.Attributes[GameAttribute.Movement_Scalar_Subtotal] = 1f; this.Attributes[GameAttribute.Strafing_Rate_Total] = 3.051758E-05f; this.Attributes[GameAttribute.Sprinting_Rate_Total] = 3.051758E-05f; this.Attributes[GameAttribute.Running_Rate_Total] = 0.3598633f; this.Attributes[GameAttribute.Damage_Weapon_Min_Total_MainHand, 0] = 2f; this.Attributes[GameAttribute.Walking_Rate_Total] = 0.2797852f; this.Attributes[GameAttribute.Damage_Weapon_Delta_Total_MainHand, 0] = 1f; this.Attributes[GameAttribute.Damage_Delta_Total, 1] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Delta_Total, 2] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Delta_Total, 3] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Delta_Total, 4] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Delta_Total, 5] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Delta_Total, 6] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Delta_Total, 0] = 1f; this.Attributes[GameAttribute.Running_Rate] = 0.3598633f; this.Attributes[GameAttribute.Damage_Weapon_Min_Total_CurrentHand, 1] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Weapon_Min_Total_CurrentHand, 2] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Weapon_Min_Total_CurrentHand, 3] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Weapon_Min_Total_CurrentHand, 4] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Weapon_Min_Total_CurrentHand, 5] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Weapon_Min_Total_CurrentHand, 6] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Weapon_Min_Total_CurrentHand, 0] = 2f; this.Attributes[GameAttribute.Walking_Rate] = 0.2797852f; this.Attributes[GameAttribute.Damage_Min_Total, 1] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Min_Total, 2] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Min_Total, 3] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Min_Total, 4] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Min_Total, 5] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Min_Total, 6] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Weapon_Delta_Total_CurrentHand, 1] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Weapon_Delta_Total_CurrentHand, 2] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Weapon_Delta_Total_CurrentHand, 3] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Weapon_Delta_Total_CurrentHand, 4] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Weapon_Delta_Total_CurrentHand, 5] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Weapon_Delta_Total_CurrentHand, 6] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Min_Total, 0] = 2f; this.Attributes[GameAttribute.Damage_Weapon_Delta_Total_CurrentHand, 0] = 1f; this.Attributes[GameAttribute.Movement_Scalar] = 1f; this.Attributes[GameAttribute.Damage_Min_Subtotal, 1] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Min_Subtotal, 2] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Min_Subtotal, 3] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Min_Subtotal, 4] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Min_Subtotal, 5] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Min_Subtotal, 6] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Min_Subtotal, 0] = 2f; this.Attributes[GameAttribute.Damage_Weapon_Delta, 0] = 1f; this.Attributes[GameAttribute.Damage_Weapon_Delta_SubTotal, 0] = 1f; this.Attributes[GameAttribute.Damage_Weapon_Max, 0] = 3f; this.Attributes[GameAttribute.Damage_Weapon_Max_Total, 0] = 3f; this.Attributes[GameAttribute.Damage_Weapon_Delta_Total, 0] = 1f; this.Attributes[GameAttribute.Trait, 0x0000CE11] = 1; this.Attributes[GameAttribute.Damage_Weapon_Min, 0] = 2f; this.Attributes[GameAttribute.Damage_Weapon_Min_Total, 0] = 2f; this.Attributes[GameAttribute.Skill, 0x0000CE11] = 1; this.Attributes[GameAttribute.Skill_Total, 0x0000CE11] = 1; this.Attributes[GameAttribute.Resource_Type_Primary] = this.ResourceID; this.Attributes[GameAttribute.Hitpoints_Max_Total] = 76f; this.Attributes[GameAttribute.Hitpoints_Max] = 40f; this.Attributes[GameAttribute.Hitpoints_Total_From_Level] = 3.051758E-05f; this.Attributes[GameAttribute.Hitpoints_Total_From_Vitality] = 36f; this.Attributes[GameAttribute.Hitpoints_Factor_Vitality] = 4f; this.Attributes[GameAttribute.Hitpoints_Factor_Level] = 4f; this.Attributes[GameAttribute.Hitpoints_Cur] = 76f; this.Attributes[GameAttribute.Disabled] = true; this.Attributes[GameAttribute.Loading] = true; this.Attributes[GameAttribute.Invulnerable] = true; this.Attributes[GameAttribute.TeamID] = 2; this.Attributes[GameAttribute.Skill_Total, 0xFFFFF] = 1; this.Attributes[GameAttribute.Skill, 0xFFFFF] = 1; this.Attributes[GameAttribute.Buff_Icon_Count0, 0x0000CE11] = 1; this.Attributes[GameAttribute.Hidden] = true; this.Attributes[GameAttribute.Level_Cap] = 13; this.Attributes[GameAttribute.Level] = this.Properties.Level; this.Attributes[GameAttribute.Experience_Next] = 1200; this.Attributes[GameAttribute.Experience_Granted] = 1000; this.Attributes[GameAttribute.Armor_Total] = 0; this.Attributes[GameAttribute.Defense] = 10.0f; this.Attributes[GameAttribute.Buff_Icon_Count0, 0x00033C40] = 1; this.Attributes[GameAttribute.Vitality] = 9.0f; this.Attributes[GameAttribute.Precision] = 11.0f; this.Attributes[GameAttribute.Attack] = 10.0f; this.Attributes[GameAttribute.Shared_Stash_Slots] = 14; this.Attributes[GameAttribute.Backpack_Slots] = 60; this.Attributes[GameAttribute.General_Cooldown] = 0; #endregion // Attributes }
private static void LoadToons() { var query = "SELECT * from toons"; var cmd = new SQLiteCommand(query, DBManager.Connection); var reader = cmd.ExecuteReader(); if (!reader.HasRows) return; while (reader.Read()) { var databaseId = (ulong)reader.GetInt64(0); var toon = new Toon(databaseId, reader.GetString(1), reader.GetInt32(6), reader.GetByte(2), reader.GetByte(3), reader.GetByte(4), reader.GetInt64(5)); Toons.Add(databaseId, toon); } }
public bool HasToon(Toon toon) // checks if given toon is already channels member { return this.Members.Any(pair => pair.Value.Identity.ToonId.Low == toon.BnetEntityID.Low); }