public Character() { _class = CharacterEnums.CharacterClass.Explorer; _race = CharacterEnums.CharacterRace.Human; _gender = CharacterEnums.Genders.Female; _skinColor = CharacterEnums.SkinColors.Fair; _skinType = CharacterEnums.SkinType.Flesh; _hairColor = CharacterEnums.HairColors.Black; _eyeColor = CharacterEnums.EyeColors.Brown; _build = CharacterEnums.BodyBuild.Medium; _koCount = new Tuple<int, DateTime>(0, DateTime.Now); _actionState = CharacterActionState.None; _stanceState = CharacterStanceState.Standing; _primaryLanguage = CharacterEnums.Languages.Common; KnownLanguages = new HashSet<Languages>(); KnownLanguages.Add(_primaryLanguage); FirstName = ""; LastName = ""; Description = ""; Age = 17; //Do we want an age? And are we going to advance it every in game year? We'll need a birthdate for this. Weight = 180; //pounds or kilos? Height = 70; //inches or centimeters? Location = "A1"; InCombat = false; LastCombatTime = DateTime.MinValue.ToUniversalTime(); IsNPC = false; Leveled = false; MainHand = "WIELD_RIGHT"; NextLevelExperience = 300; Level = 1; Experience = 0; PointsToSpend = 0; Inventory = new Inventory(); Equipment = new Equipment(); Bonuses = new StatBonuses(); Inventory.playerID = this.ID; Equipment.playerID = this.ID; Attributes = new Dictionary<string, Attribute>(); Attributes.Add("Hitpoints", new Attribute(150, "Hitpoints", 150, 0.1, 1)); Attributes.Add("Dexterity", new Attribute(10, "Dexterity", 5, 0, 1)); Attributes.Add("Strength", new Attribute(10, "Strength", 5, 0, 1)); Attributes.Add("Intelligence", new Attribute(10, "Intelligence", 5, 0, 1)); Attributes.Add("Endurance", new Attribute(10, "Endurance", 5, 0, 1)); Attributes.Add("Charisma", new Attribute(10, "Charisma", 5, 0, 1)); SubAttributes = new Dictionary<string, double>(); SubAttributes.Add("Agility", 1); SubAttributes.Add("Toughness", 1); SubAttributes.Add("Cunning", 1); SubAttributes.Add("Wisdom", 1); SubAttributes.Add("Leadership", 1); }
public CharacterSheet(string constructorName, CharacterRace constructorRace, CharacterClass constructorClass, Alignment constructorAlignment) { charName = constructorName; charRace = constructorRace; charClass = constructorClass; charAlign = constructorAlignment; hitDie = charClass.hitDie; darkVision = charRace.hasDarkVision; charLevel = 1; }
private void ValidateCharacter(string name, CharacterFaction characterFaction, CharacterRace characterRace, CharacterClass characterClass) { if(String.IsNullOrEmpty(name)) { throw new Exception("Character must have a name"); } #region Faction Validation if(characterFaction == CharacterFaction.Horde) { if(characterRace != CharacterRace.Orc && characterRace != CharacterRace.Tauren && characterRace != CharacterRace.BloodElf) { throw new Exception("Only Orcs, Taurens, and Blood Elfs can fight for the Horde"); } } else { if (characterRace != CharacterRace.Human && characterRace != CharacterRace.Gnome && characterRace != CharacterRace.Worgen) { throw new Exception("Only Humans, Gnomes, and Worgen can fight for the Alliance"); } } #endregion #region Race Validation if(characterClass == CharacterClass.Druid) { if(characterRace != CharacterRace.Tauren && characterRace != CharacterRace.Worgen) { throw new Exception("This race cannot be a Druid"); } } if(characterRace == CharacterRace.BloodElf && characterClass == CharacterClass.Warrior) { throw new Exception("Blood Elfs cannot be Warriors"); } #endregion }
public Character(string name, CharacterFaction characterFaction, CharacterRace characterRace, CharacterClass characterClass) { ValidateCharacter(name, characterFaction, characterRace, characterClass); this.Id = Guid.NewGuid(); this.Name = name; this.Faction = characterFaction; this.Race = characterRace; this.Class = characterClass; this.Active = true; if(characterClass == CharacterClass.DeathKnight) { this.Level = 55; } else { this.Level = 1; } }
private static void LoadRacesFromNodes(XmlNodeList nodes, string rootImagePath) { if (nodes == null) { return; } foreach (XmlNode node in nodes) { CharacterRace characterRace = new CharacterRace(node.AttributeAsInt("ID"), node.AttributeAsString("Name"), node.SelectSingleNode("./Description")?.InnerText ?? "", $".{rootImagePath}{node.AttributeAsString("ImageName")}", node.SelectSingleNode("./Pro")?.InnerText ?? "", node.SelectSingleNode("./Con")?.InnerText ?? ""); _characterRaces.Add(characterRace); } }
public Player(string name, int life, int maxLife, int hitChance, int block, int speed, CharacterRace race, Weapon equippedWeapon) : base(name, life, maxLife, hitChance, block, speed) { Race = race; EquippedWeapon = equippedWeapon; switch (race) { case CharacterRace.Hellion: //TODO: make these races like it would be easy, intermediate, hard MaxLife += 25; Life += 25; Block += 4; HitChance += 5; Speed += 5; break; case CharacterRace.Nephalim: MaxLife += 45; Life += 45; Block += 6; HitChance += 10; Speed += 7; break; case CharacterRace.Sentinel: MaxLife += 35; Life += 35; Block += 5; HitChance += 6; Speed += 6; break; case CharacterRace.DoomGuy: MaxLife += 45; Life += 45; Block += 6; HitChance += 20; Speed += 20; break; } }//end ctor
private IEnumerable <int> GetHitPointRange(CharacterClass characterClass, CharacterRace characterRace, int characterLevel) { IEnumerable <int> range; if (characterClass == CharacterClass.Fighter && characterRace == CharacterRace.Human) { range = Enumerable.Range(1 * characterLevel, 7 * characterLevel + 1); } if (characterClass == CharacterClass.Fighter && characterRace == CharacterRace.Elf) { range = Enumerable.Range(1 * characterLevel, 5 * characterLevel + 1); } if (characterClass == CharacterClass.Fighter && characterRace == CharacterRace.Dwarf) { range = Enumerable.Range(1 * characterLevel, 7 * characterLevel + 1); } if (characterClass == CharacterClass.Fighter && characterRace == CharacterRace.Halfling) { range = Enumerable.Range(1 * characterLevel, 5 * characterLevel + 1); } if (characterClass == CharacterClass.Cleric) { range = Enumerable.Range(1 * characterLevel, 5 * characterLevel + 1); } if (characterClass == CharacterClass.Thief) { range = Enumerable.Range(1 * characterLevel, 3 * characterLevel + 1); } if (characterClass == CharacterClass.MagicUser) { range = Enumerable.Range(1 * characterLevel, 3 * characterLevel + 1); } else { range = Enumerable.Range(1 * characterLevel, 5 * characterLevel + 1); } return(range); }
public void chooseRace(int raceIndex) { switch (raceIndex) { case 0: raceAbility.text = "Adaption"; charRace = CharacterRace.Human; selectedRaceIndex = 0; break; case 1: raceAbility.text = "Light as Air"; charRace = CharacterRace.Elf; selectedRaceIndex = 1; break; case 2: raceAbility.text = "Earthern Expert"; charRace = CharacterRace.Dwarf; selectedRaceIndex = 2; break; case 3: raceAbility.text = "Shadow's Agent"; charRace = CharacterRace.DarkElf; selectedRaceIndex = 3; break; case 4: raceAbility.text = "Beastial Instinct"; charRace = CharacterRace.Beastman; selectedRaceIndex = 4; break; } }
public Item[] GetRelevantItems(CalculationsBase model, CharacterRace race) { if (cachedRelevantItems == null || model != lastModel || race != lastRace) { lock (syncLock) { // test again because of race conditions, but we still want to avoid the lock if we can because that'll be the majority case if (cachedRelevantItems == null || model != lastModel || race != lastRace) { List <Item> itemList = new List <Item>(AllItems).FindAll(new Predicate <Item>( delegate(Item item) { return(model.IsItemRelevant(item) && ItemFilter.IsItemRelevant(model, item) && item.FitsFaction(race)); })); cachedRelevantItems = itemList.ToArray(); lastModel = model; lastRace = race; } } } return(cachedRelevantItems); }
public void loadCharacter(string firstName, string lastName, CharacterSex mCSex, CharacterRace mCRace, int age, CharacterBackground mCBackground, int height, int weight, CharacterClass mCClass, int mCSturdy, int mCPerception, int mCTechnique, int mCWellVersed, Color characterColor, Color headColor, Color primaryColor, Color secondaryColor, CharacterHairStyle hairStyle) { int heightRemainder = height % 12; height -= heightRemainder; personalInfo = new PersonalInformation(new CharacterName(firstName, lastName), mCSex, mCRace, mCBackground, new CharacterAge(age), new CharacterHeight(height, heightRemainder), new CharacterWeight(weight), hairStyle); characterProgress = new CharacterProgress(mCClass); abilityScores = new AbilityScores(mCSturdy, mCPerception, mCTechnique, mCWellVersed); combatScores = new CombatScores(abilityScores, personalInfo, characterProgress); skillScores = new SkillScores(combatScores, characterProgress); CharacterColors characterColors = new CharacterColors(characterColor, headColor, primaryColor, secondaryColor); characterSheet = new CharacterSheet(abilityScores, personalInfo, characterProgress, combatScores, skillScores, characterColors, this, characterLoadout); }
public Character loadData(string textFile2, Unit u) { Character ch = new Character(); // ch.characterLoadout = characterLoadout; ch.setCharacterLoadout(characterLoadout); ch.unit = u; if (textFile2 != null && textFile2 != "") { textFile = textFile2; } if (textFile != null && textFile != "") { ch.loadCharacterFromTextFile(textFile); } else { CharacterRace mCRace = CharacterRace.getRace(mCRaceName); CharacterClass mCClass = CharacterClass.getClass(mCClassName); CharacterHairStyle hairSt; if (hairPrefab != null) { hairSt = new CharacterHairStyle(hairPrefab); } else { hairSt = new CharacterHairStyle((hairStyle >= 0 && hairStyle < PersonalInformation.hairTypes.Length ? hairStyle : 0)); } ch.loadCharacter(firstName, lastName, mCSex, mCRace, age, mCBackground, height, weight, mCClass, mCSturdy, mCPerception, mCTechnique, mCWellVersed, characterColor, headColor, primaryColor, secondaryColor, hairSt); int level = ch.characterSheet.characterProgress.setLevel(mClevel); int experience = ch.characterSheet.characterProgress.setExperience(mCexperience); } return(ch); }
private Character SaveData() { var character = new Character(); character.Name = _txtName.Text; character.Description = _txtDescription.Text; CharacterRace characterRace = (CharacterRace)_cbRace.SelectedItem; character.Race = characterRace; CharacterProfession characterProfession = (CharacterProfession)_cbProfession.SelectedItem; character.Profession = characterProfession; character.Strength = _numStr.Value; character.Intelligence = _numInt.Value; character.Agility = _numAgi.Value; character.Dexterity = _numDex.Value; character.Endurance = _numEnd.Value; character.Male = _rbMale.Checked; character.Female = _rbFemale.Checked; return(character); }
public static CharacterFaction getFactionFromRace(CharacterRace race) { if ((race == CharacterRace.Human) || (race == CharacterRace.Dwarf) || (race == CharacterRace.Elf)) { return(CharacterFaction.TheAccord); } else if (race == CharacterRace.IgnezorOrc) { return(CharacterFaction.IgnezorOrc); } else if (race == CharacterRace.TerrazorOrc) { return(CharacterFaction.TerrazorOrc); } else if (race == CharacterRace.BelzorOrc) { return(CharacterFaction.BelzorOrc); } else { //figure out how to throw error here return(CharacterFaction.Error); } }
private CharacterAbilities GenerateCharacterAbilities(CharacterClass characterClass, CharacterRace characterRace) { CharacterAbilities characterAbilities = CharacterAbilities.None; if (characterRace == CharacterRace.Dwarf) { characterAbilities |= CharacterAbilities.Darkvision; characterAbilities |= CharacterAbilities.DetectConstruction; } if (characterRace == CharacterRace.Elf) { characterAbilities |= CharacterAbilities.Darkvision; characterAbilities |= CharacterAbilities.GhoulImmune; characterAbilities |= CharacterAbilities.DetectSecretDoors; characterAbilities |= CharacterAbilities.ReduceSurprise; } if (characterRace == CharacterRace.Halfling) { characterAbilities |= CharacterAbilities.HalflingACBonus; characterAbilities |= CharacterAbilities.HalflingAttackBonus; characterAbilities |= CharacterAbilities.HalflingHiding; characterAbilities |= CharacterAbilities.HalflingInitiative; } if (characterRace == CharacterRace.Human) { characterAbilities |= CharacterAbilities.HumanXPBonus; } if (characterClass == CharacterClass.Thief) { characterAbilities |= CharacterAbilities.ThiefSkills; } if (characterClass == CharacterClass.Cleric) { characterAbilities |= CharacterAbilities.TurnUndead; } return(characterAbilities); }
protected void AssertStatCorrect(Func<Stats,float> property, float expected, CharacterRace race) { _character.Race = race; AssertStatCorrect(property, expected); }
/// <summary>This overload is used from optimizer and is optimized for performance, do not modify</summary> public Character(Character baseCharacter, object[] items, int count) { IsLoading = true; _name = baseCharacter._name; _realm = baseCharacter._realm; _region = baseCharacter._region; _race = baseCharacter._race; _currentModel = baseCharacter._currentModel; _calculationOptions = baseCharacter._calculationOptions; _primaryProfession = baseCharacter._primaryProfession; _secondaryProfession = baseCharacter._secondaryProfession; _class = baseCharacter._class; AssignAllTalentsFromCharacter(baseCharacter, false); CalculationToOptimize = baseCharacter.CalculationToOptimize; OptimizationRequirements = baseCharacter.OptimizationRequirements; _bossOptions = baseCharacter._bossOptions; _faction = baseCharacter._faction; _item = new ItemInstance[SlotCount]; Array.Copy(items, _item, count); IsLoading = false; ActiveBuffs = new List<Buff>(baseCharacter.ActiveBuffs); RecalculateSetBonuses(); }
public Character(string name, string realm, CharacterRegion region, CharacterRace race, BossOptions boss, ItemInstance head, ItemInstance neck, ItemInstance shoulders, ItemInstance back, ItemInstance chest, ItemInstance shirt, ItemInstance tabard, ItemInstance wrist, ItemInstance hands, ItemInstance waist, ItemInstance legs, ItemInstance feet, ItemInstance finger1, ItemInstance finger2, ItemInstance trinket1, ItemInstance trinket2, ItemInstance mainHand, ItemInstance offHand, ItemInstance ranged, ItemInstance projectile, ItemInstance projectileBag) { Initialize(); //_trackEquippedItemChanges = trackEquippedItemChanges; IsLoading = true; _name = name; _realm = realm; _region = region; _race = race; Head = head; Neck = neck; Shoulders = shoulders; Back = back; Chest = chest; Shirt = shirt; Tabard = tabard; Wrist = wrist; Hands = hands; Waist = waist; Legs = legs; Feet = feet; Finger1 = finger1; Finger2 = finger2; Trinket1 = trinket1; Trinket2 = trinket2; MainHand = mainHand; OffHand = offHand; Ranged = ranged; Projectile = projectile; ProjectileBag = projectileBag; _activeBuffs = new List<Buff>(); SetFaction(); IsLoading = false; RecalculateSetBonuses(); BossOptions = boss.Clone(); }
public static Stats GetBaseStats(int level, CharacterClass characterClass, CharacterRace characterRace, DruidForm characterForm) { // Health, Mana and some other things are same for every race. lock (syncLock) { #region Cache if (level == _lastLevel && characterClass == _lastClass && characterRace == _lastRace && characterForm == _lastForm) { return(_lastStats.Clone()); } _lastLevel = level; _lastClass = characterClass; _lastRace = characterRace; _lastForm = characterForm; #endregion Stats S = new Stats(); #region Base Stats #region All Classes S.Miss = 0.05f; S.Block = 0.0f; S.Parry = 0.0f; #endregion switch (characterClass) { #region Death Knight case CharacterClass.DeathKnight: // Blood Elf, Draenei, Dwarf, Gnome, Human, Night Elf, Orc, Tauren, Troll, Undead S.Mana = 0; S.Health = 8121; S.Armor = 0; S.AttackPower = 220; S.PhysicalCrit = 0.0319f; S.Dodge = 0.0362500f; S.Parry = 0.05f; S.SpellPower = 0; S.SpellCrit = 0.0f; switch (characterRace) { case CharacterRace.BloodElf: S.Strength = 172; S.Agility = 114; S.Stamina = 158; S.Intellect = 39; S.Spirit = 58; break; case CharacterRace.Draenei: S.Strength = 176; S.Agility = 109; S.Stamina = 162; S.Intellect = 36; S.Spirit = 61; break; case CharacterRace.Dwarf: S.Strength = 177; S.Agility = 108; S.Stamina = 163; S.Intellect = 34; S.Spirit = 58; break; case CharacterRace.Gnome: S.Strength = 170; S.Agility = 115; S.Stamina = 159; S.Intellect = 37; // 39/1.05 = 37.14 ~37 S.Spirit = 59; break; case CharacterRace.Human: S.Strength = 175; S.Agility = 112; S.Stamina = 160; S.Intellect = 35; S.Spirit = 58; // 60/1.03 = 58.25 ~58. break; case CharacterRace.NightElf: S.Strength = 172; S.Agility = 117; S.Stamina = 159; S.Intellect = 35; S.Spirit = 59; break; case CharacterRace.Orc: S.Strength = 178; S.Agility = 109; S.Stamina = 162; S.Intellect = 32; S.Spirit = 62; break; case CharacterRace.Tauren: S.Strength = 180; S.Agility = 107; S.Stamina = 162; S.Intellect = 30; S.Spirit = 61; break; case CharacterRace.Troll: S.Strength = 176; S.Agility = 114; S.Stamina = 165; S.Intellect = 31; S.Spirit = 60; break; case CharacterRace.Undead: S.Strength = 174; S.Agility = 110; S.Stamina = 161; S.Intellect = 33; S.Spirit = 64; break; default: break; } break; #endregion #region Druid case CharacterClass.Druid: // NightElf, Tauren S.Mana = 3496; S.Health = 7417; S.Armor = 0; S.SpellPower = 0; S.SpellCrit = 0.0185f; switch (characterForm) { case DruidForm.Moonkin: case DruidForm.Caster: S.AttackPower = -10; S.PhysicalCrit = 0.0743f; S.Dodge = 0.0556970f; //?? break; case DruidForm.Bear: S.AttackPower = 220; S.PhysicalCrit = 0.05f; S.Dodge = 0.0556970f; S.BonusStaminaMultiplier = 0.25f; break; case DruidForm.Cat: S.AttackPower = 140; S.PhysicalCrit = 0.07476f; S.Dodge = 0.0556970f; break; default: break; } if (characterRace == CharacterRace.NightElf) { S.Strength = 85; S.Agility = 86; S.Stamina = 97; S.Intellect = 143; S.Spirit = 159; } else if (characterRace == CharacterRace.Tauren) { S.Strength = 94; S.Agility = 77; S.Stamina = 100; S.Intellect = 140; S.Spirit = 185; } break; #endregion #region Hunter case CharacterClass.Hunter: // Blood Elf, Draenei, Dwarf, Night Elf, Orc, Tauren, Troll S.Mana = 5046; S.Armor = 0; S.AttackPower = 140; S.RangedAttackPower = 150; S.PhysicalCrit = -0.0153f; S.Dodge = -0.0412730f; S.Parry = 0.05f; S.SpellPower = 0; S.SpellCrit = 0.0360f; switch (characterRace) { case CharacterRace.BloodElf: S.Strength = 71; S.Agility = 183; S.Stamina = 126; S.Intellect = 94; S.Spirit = 96; S.Health = 7324; break; case CharacterRace.Draenei: S.Strength = 75; S.Agility = 178; S.Stamina = 129; S.Intellect = 91; S.Spirit = 99; S.Health = 7400; break; case CharacterRace.Dwarf: S.Strength = 76; S.Agility = 177; S.Stamina = 131; S.Intellect = 89; S.Spirit = 96; S.Health = 7412; break; case CharacterRace.NightElf: S.Strength = 71; S.Agility = 184; S.Stamina = 127; S.Intellect = 90; S.Spirit = 97; S.Health = 7324; break; case CharacterRace.Orc: S.Strength = 77; S.Agility = 178; S.Stamina = 130; S.Intellect = 87; S.Spirit = 100; S.Health = 7324; break; case CharacterRace.Tauren: S.Strength = 79; S.Agility = 176; S.Stamina = 130; S.Intellect = 85; S.Spirit = 99; S.Health = 7400; break; case CharacterRace.Troll: S.Strength = 75; S.Agility = 183; S.Stamina = 129; S.Intellect = 86; S.Spirit = 98; S.Health = 7324; break; default: break; } break; #endregion #region Mage case CharacterClass.Mage: // Blood Elf, Draenei, Gnome, Human, Troll, Undead S.Mana = 3268; S.Health = 6963; S.Armor = 0; S.AttackPower = -10; S.PhysicalCrit = 0.03f; S.Dodge = 0.0361870f; S.SpellPower = 0; S.SpellCrit = 0.0091f; switch (characterRace) { case CharacterRace.BloodElf: S.Strength = 33; S.Agility = 45; S.Stamina = 57; S.Intellect = 185; S.Spirit = 173; break; case CharacterRace.Draenei: S.Strength = 37; S.Agility = 40; S.Stamina = 58; S.Intellect = 182; S.Spirit = 176; break; case CharacterRace.Gnome: S.Strength = 31; S.Agility = 46; S.Stamina = 58; S.Intellect = 184; // 193/1.05 = 183.8 ~184. S.Spirit = 174; break; case CharacterRace.Human: S.Strength = 36; S.Agility = 43; S.Stamina = 59; S.Intellect = 181; S.Spirit = 174; // 179/1.03 = 173.8 ~174 break; case CharacterRace.Troll: S.Strength = 37; S.Agility = 45; S.Stamina = 60; S.Intellect = 177; S.Spirit = 175; break; case CharacterRace.Undead: S.Strength = 35; S.Agility = 41; S.Stamina = 60; S.Intellect = 179; S.Spirit = 179; break; default: break; } break; #endregion #region Paladin case CharacterClass.Paladin: // Blood Elf, Draenei, Dwarf, Human S.Mana = 4394; S.Health = 6934; S.Armor = 0; S.AttackPower = 240; S.PhysicalCrit = 0.0327f; S.SpellPower = 0; S.SpellCrit = 0.03336f; S.Dodge = 0.0349430f; S.Parry = 0.05f; S.Block = 0.05f; S.Defense = 400.0f; switch (characterRace) { case CharacterRace.BloodElf: S.Strength = 148; S.Agility = 92; S.Stamina = 143; S.Intellect = 101; S.Spirit = 103; break; case CharacterRace.Draenei: S.Strength = 152; S.Agility = 87; S.Stamina = 143; S.Intellect = 98; S.Spirit = 107; break; case CharacterRace.Dwarf: S.Strength = 153; S.Agility = 86; S.Stamina = 146; S.Intellect = 97; S.Spirit = 104; break; case CharacterRace.Human: S.Strength = 151; S.Agility = 90; S.Stamina = 143; S.Intellect = 98; S.Spirit = 108; break; default: break; } break; #endregion #region Priest case CharacterClass.Priest: // Blood Elf, Draenei, Dwarf, Human, Night Elf, Troll, Undead S.Mana = 3863; S.Health = 6960; S.Armor = 0; S.AttackPower = -10; S.PhysicalCrit = 0.027f; S.Dodge = 0.0337780f; S.SpellPower = 0; S.SpellCrit = 0.0124f; switch (characterRace) { case CharacterRace.BloodElf: S.Strength = 40; S.Agility = 53; S.Stamina = 65; S.Intellect = 178; S.Spirit = 180; break; case CharacterRace.Draenei: S.Strength = 44; S.Agility = 48; S.Stamina = 66; S.Intellect = 175; S.Spirit = 183; break; case CharacterRace.Dwarf: S.Strength = 45; S.Agility = 47; S.Stamina = 70; S.Intellect = 176; S.Spirit = 180; break; case CharacterRace.Human: S.Strength = 43; S.Agility = 51; S.Stamina = 67; S.Intellect = 174; S.Spirit = 181; // 186/1.03 = 180.5->181 break; case CharacterRace.NightElf: S.Strength = 40; S.Agility = 56; S.Stamina = 66; S.Intellect = 174; S.Spirit = 181; break; case CharacterRace.Troll: S.Strength = 44; S.Agility = 53; S.Stamina = 68; S.Intellect = 170; S.Spirit = 182; break; case CharacterRace.Undead: S.Strength = 42; S.Agility = 49; S.Stamina = 68; S.Intellect = 172; S.Spirit = 186; break; default: break; } break; #endregion #region Rogue case CharacterClass.Rogue: // Blood Elf, Dwarf, Gnome, Human, Night Elf, Orc, Troll, Undead S.Mana = 0; S.Health = 7604; S.Armor = 0; S.AttackPower = 140; S.PhysicalCrit = -0.00295f; S.Dodge = 0.0205570f; S.Parry = 0.05f; S.SpellPower = 0; S.SpellCrit = 0f; switch (characterRace) { case CharacterRace.BloodElf: S.Strength = 110; S.Agility = 191; S.Stamina = 103; S.Intellect = 47; S.Spirit = 66; break; case CharacterRace.Dwarf: S.Strength = 115; S.Agility = 185; S.Stamina = 108; S.Intellect = 42; S.Spirit = 66; break; case CharacterRace.Gnome: S.Strength = 108; S.Agility = 192; S.Stamina = 104; S.Intellect = 46; // 48/1.05 = 45.71 ~46 S.Spirit = 67; break; case CharacterRace.Human: S.Strength = 113; S.Agility = 189; S.Stamina = 105; S.Intellect = 43; S.Spirit = 67; // 69/1.03 = 66.99 ~67 break; case CharacterRace.NightElf: S.Strength = 110; S.Agility = 194; S.Stamina = 104; S.Intellect = 43; S.Spirit = 67; break; case CharacterRace.Orc: S.Strength = 116; S.Agility = 186; S.Stamina = 107; S.Intellect = 40; S.Spirit = 70; break; case CharacterRace.Troll: S.Strength = 114; S.Agility = 191; S.Stamina = 108; S.Intellect = 39; S.Spirit = 68; break; case CharacterRace.Undead: S.Strength = 112; S.Agility = 187; S.Stamina = 105; S.Intellect = 41; S.Spirit = 72; break; default: break; } break; #endregion #region Shaman case CharacterClass.Shaman: // Draenei, Orc, Tauren, Troll S.Mana = 4396; S.Health = 6960; S.Armor = 0; S.AttackPower = 140; S.PhysicalCrit = 0.0292f; S.Dodge = 0.0206800f; S.Block = 0.05f; S.SpellPower = 0; S.SpellCrit = 0.022f; switch (characterRace) { case CharacterRace.Draenei: S.Strength = 121; S.Agility = 71; S.Stamina = 136; S.Intellect = 128; S.Spirit = 145; break; case CharacterRace.Orc: S.Strength = 123; S.Agility = 71; S.Stamina = 137; S.Intellect = 125; S.Spirit = 145; break; case CharacterRace.Tauren: S.Strength = 125; S.Agility = 70; S.Stamina = 137; S.Intellect = 124; S.Spirit = 145; break; case CharacterRace.Troll: S.Strength = 121; S.Agility = 76; S.Stamina = 137; S.Intellect = 124; S.Spirit = 144; break; default: break; } break; #endregion #region Warlock case CharacterClass.Warlock: // Blood Elf, Gnome, Human, Orc, Undead S.Mana = 3856; S.Health = 7164; S.Armor = 0; S.AttackPower = -10; S.PhysicalCrit = 0.028f; S.Dodge = 0.0238110f; S.SpellPower = 0; S.SpellCrit = 0.01701f; switch (characterRace) { case CharacterRace.BloodElf: S.Strength = 56; S.Agility = 69; S.Stamina = 87; S.Intellect = 163; S.Spirit = 165; break; case CharacterRace.Gnome: S.Strength = 54; S.Agility = 70; S.Stamina = 88; S.Intellect = 162; // 170/1.05 = 161.9 ~162 S.Spirit = 166; break; case CharacterRace.Human: S.Strength = 59; S.Agility = 67; S.Stamina = 89; S.Intellect = 159; S.Spirit = 165; // 170/1.03 = 165.05 ~165 break; case CharacterRace.Orc: S.Strength = 62; S.Agility = 64; S.Stamina = 91; S.Intellect = 156; S.Spirit = 169; break; case CharacterRace.Undead: S.Strength = 58; S.Agility = 65; S.Stamina = 90; S.Intellect = 157; S.Spirit = 171; break; default: break; } break; #endregion #region Warrior case CharacterClass.Warrior: // Draenei, Dwarf, Gnome, Human, Night Elf, Orc, Tauren, Troll, Undead S.Mana = 0f; S.Health = 8121f; S.Armor = 0f; S.AttackPower = 220f; S.PhysicalCrit = 0.03192f; // This + the base agi makes 4.88% S.Dodge = 0.03664f; S.Parry = 0.05f; S.Block = 0.05f; S.SpellPower = 0f; S.SpellCrit = 0.0f; S.Defense = 400.0f; switch (characterRace) { case CharacterRace.Draenei: S.Strength = 182; S.Agility = 110; S.Stamina = 166; S.Intellect = 37; S.Spirit = 61; break; case CharacterRace.Dwarf: S.Strength = 176; S.Agility = 109; S.Stamina = 162; S.Intellect = 35; S.Spirit = 58; break; case CharacterRace.Gnome: S.Strength = 169; S.Agility = 116; S.Stamina = 158; S.Intellect = 38; // 40/1.05 = 38.095 ~38. S.Spirit = 59; break; case CharacterRace.Human: S.Strength = 174f; S.Agility = 113f; S.Stamina = 159f; S.Intellect = 36f; S.Spirit = 58f; // 60/1.03 = 58.25 ~58 break; case CharacterRace.NightElf: S.Strength = 171; S.Agility = 118; S.Stamina = 158; S.Intellect = 36; S.Spirit = 59; break; case CharacterRace.Orc: S.Strength = 177; S.Agility = 110; S.Stamina = 161; S.Intellect = 33; S.Spirit = 62; break; case CharacterRace.Tauren: S.Strength = 179; S.Agility = 109; S.Stamina = 161; S.Intellect = 31; S.Spirit = 61; break; case CharacterRace.Troll: S.Strength = 185; S.Agility = 115; S.Stamina = 162; S.Intellect = 32; S.Spirit = 60; break; case CharacterRace.Undead: S.Strength = 183; S.Agility = 111; S.Stamina = 169; S.Intellect = 34; S.Spirit = 64; break; default: break; } break; #endregion #region No Class default: break; #endregion } #endregion #region Racials if (characterRace == CharacterRace.Gnome) { S.BonusIntellectMultiplier = 0.05f; } else if (characterRace == CharacterRace.Human) { S.BonusSpiritMultiplier = 0.03f; } else if (characterRace == CharacterRace.NightElf) { S.Miss += 0.02f; } else if (characterRace == CharacterRace.Tauren) { S.Health = S.Health * 1.05f; } else if (characterRace == CharacterRace.Troll) { if (characterClass == CharacterClass.DeathKnight || characterClass == CharacterClass.Warrior || characterClass == CharacterClass.Rogue) { S.AddSpecialEffect(new SpecialEffect(Trigger.Use, new Stats() { PhysicalHaste = 0.2f }, 10f, 180f)); } else { S.AddSpecialEffect(new SpecialEffect(Trigger.Use, new Stats() { SpellHaste = 0.2f, PhysicalHaste = 0.2f }, 10f, 180f)); } } else if (characterRace == CharacterRace.Orc) { if (characterClass == CharacterClass.Shaman) { S.AddSpecialEffect(new SpecialEffect(Trigger.Use, new Stats() { AttackPower = 2 + (level * 4), SpellPower = 3 + (level * 2) }, 15f, 120f)); } else if (characterClass == CharacterClass.Warlock) { S.AddSpecialEffect(new SpecialEffect(Trigger.Use, new Stats() { SpellPower = 3 + (level * 2) }, 15f, 120f)); } else { S.AddSpecialEffect(new SpecialEffect(Trigger.Use, new Stats() { AttackPower = 2 + (level * 4) }, 15f, 120f)); } } #endregion _lastStats = S.Clone(); return(S); } }
// Public constructor for a Non-player character public NonPlayerCharacter(string aDescription, CharacterRace aRace, CharacterClass aClass) : base (aDescription, aRace, aClass) { }
public static Item[] GetRelevantItems(CalculationsBase model, CharacterRace race) { return(_instance.GetRelevantItems(model, race)); }
private void ValidateCharacter(string name, CharacterFaction characterFaction, CharacterRace characterRace, CharacterClass characterClass) { if (String.IsNullOrEmpty(name)) { throw new Exception("Character must have a name"); } #region Faction Validation if (characterFaction == CharacterFaction.Horde) { if (characterRace != CharacterRace.Orc && characterRace != CharacterRace.Tauren && characterRace != CharacterRace.BloodElf) { throw new Exception("Only Orcs, Taurens, and Blood Elfs can fight for the Horde"); } } else { if (characterRace != CharacterRace.Human && characterRace != CharacterRace.Gnome && characterRace != CharacterRace.Worgen) { throw new Exception("Only Humans, Gnomes, and Worgen can fight for the Alliance"); } } #endregion #region Race Validation if (characterClass == CharacterClass.Druid) { if (characterRace != CharacterRace.Tauren && characterRace != CharacterRace.Worgen) { throw new Exception("This race cannot be a Druid"); } } if (characterRace == CharacterRace.BloodElf && characterClass == CharacterClass.Warrior) { throw new Exception("Blood Elfs cannot be Warriors"); } #endregion }
public Player(string name, CharacterGender GenderSelect, CharacterRace race, CharacterProfession profession) : base() { Name = name; Gender = GenderSelect; Race = race; }
public void RaceChange() { charRace = (CharacterRace)raceChange.value; }
public void Load(string id) { MongoUtils.MongoData.ConnectToDatabase(); MongoDatabase characterDB = MongoUtils.MongoData.GetDatabase("Characters"); MongoCollection characterCollection = characterDB.GetCollection <BsonDocument>("NPCCharacters"); IMongoQuery query = Query.EQ("_id", ObjectId.Parse(id)); BsonDocument found = characterCollection.FindOneAs <BsonDocument>(query); ID = found["_id"].AsObjectId.ToString(); FirstName = found["FirstName"].AsString.CamelCaseWord(); LastName = found["LastName"].AsString.CamelCaseWord(); _class = (CharacterClass)Enum.Parse(typeof(CharacterClass), found["Class"].AsString.CamelCaseWord()); _race = (CharacterRace)Enum.Parse(typeof(CharacterRace), found["Race"].AsString.CamelCaseWord()); _gender = (Genders)Enum.Parse(typeof(Genders), found["Gender"].AsString.CamelCaseWord()); _skinType = (SkinType)Enum.Parse(typeof(SkinType), found["SkinType"].AsString.CamelCaseWord()); _skinColor = (SkinColors)Enum.Parse(typeof(SkinColors), found["SkinColor"].AsString.CamelCaseWord()); _skinType = (SkinType)Enum.Parse(typeof(SkinType), found["SkinType"].AsString.CamelCaseWord()); _hairColor = (HairColors)Enum.Parse(typeof(HairColors), found["HairColor"].AsString.CamelCaseWord()); _eyeColor = (EyeColors)Enum.Parse(typeof(EyeColors), found["EyeColor"].AsString.CamelCaseWord()); _stanceState = (CharacterStanceState)Enum.Parse(typeof(CharacterStanceState), found["StanceState"].AsString.CamelCaseWord()); _actionState = (CharacterActionState)Enum.Parse(typeof(CharacterActionState), found["ActionState"].AsString.CamelCaseWord()); Description = found["Description"].AsString; Location = found["Location"].AsString; Height = found["Height"].AsDouble; Weight = found["Weight"].AsDouble; IsNPC = found["IsNPC"].AsBoolean; MobTypeID = found["MobTypeID"].AsInt32; NextAiAction = found["NextAiAction"].ToUniversalTime(); InCombat = found["InCombat"].AsBoolean; LastCombatTime = found["LastCombatTime"].ToUniversalTime(); CurrentTarget = found["CurrentTarget"].AsString != "" ? found["CurrentTarget"].AsString : null; LastTarget = found["LastTarget"].AsString != "" ? found["LastTarget"].AsString : null; Fsm.state = Fsm.GetStateFromName(found["AiState"].AsString); Fsm.previousState = Fsm.GetStateFromName(found["previousAiState"].AsString); Fsm.globalState = Fsm.GetStateFromName(found["AiGlobalState"].AsString); Experience = found["Experience"].AsInt64; Level = found["Level"].AsInt32; Title = found.Contains("Title") ? found["Title"].AsString : ""; KillerID = found.Contains("KillerID") ? found["KillerID"].AsString : ""; //if you just use var instead of casting it like this you will be in a world of pain and suffering when dealing with subdocuments. BsonArray playerAttributes = found["Attributes"].AsBsonArray; BsonArray xpTracker = found["XpTracker"].AsBsonArray; BsonDocument triggers = found["Triggers"].AsBsonDocument; BsonArray bonusesList = null; if (found.Contains("Bonuses")) { bonusesList = found["Bonuses"].AsBsonArray; } if (playerAttributes != null) { foreach (BsonDocument attrib in playerAttributes) { if (!this.Attributes.ContainsKey(attrib["Name"].ToString())) { Attribute tempAttrib = new Attribute(); tempAttrib.Name = attrib["Name"].ToString(); tempAttrib.Value = attrib["Value"].AsDouble; tempAttrib.Max = attrib["Max"].AsDouble; tempAttrib.RegenRate = attrib["RegenRate"].AsDouble; this.Attributes.Add(tempAttrib.Name, tempAttrib); } else { this.Attributes[attrib["Name"].ToString()].Max = attrib["Max"].AsDouble; this.Attributes[attrib["Name"].ToString()].Value = attrib["Value"].AsDouble; this.Attributes[attrib["Name"].ToString()].RegenRate = attrib["RegenRate"].AsDouble; } } } if (xpTracker != null && xpTracker.Count > 0) { foreach (BsonDocument track in xpTracker) { //we just newed this up so it should always have to be refilled damageTracker.Add(track["ID"].AsString, track["Value"].AsDouble); } } ITrigger trigger = new GeneralTrigger(triggers, "NPC"); Triggers.Add(trigger); if (bonusesList != null && bonusesList.Count > 0) { Bonuses.LoadFromBson(bonusesList); } }
public NPC(CharacterRace race, CharacterClass characterClass, Genders gender, Languages language, SkinColors skinColor, SkinType skinType, HairColors hairColor, EyeColors eyeColor, BodyBuild build) { Messages = new Queue <string>(); Fsm = AI.FSM.GetInstance(); Fsm.state = Fsm.GetStateFromName("Wander"); _class = characterClass; _race = race; _gender = gender; _skinColor = skinColor; _skinType = skinType; _hairColor = hairColor; _eyeColor = eyeColor; _build = build; _koCount = new Tuple <int, DateTime>(0, DateTime.Now); _actionState = CharacterActionState.None; _stanceState = CharacterStanceState.Standing; _primaryLanguage = language; KnownLanguages = new HashSet <Languages>(); KnownLanguages.Add(_primaryLanguage); Inventory = new Inventory(); damageTracker = new Dictionary <string, double>(); Triggers = new List <ITrigger>(); Bonuses = new StatBonuses(); FirstName = ""; LastName = ""; Description = ""; Age = 17; //Do we want an age? And are we going to advance it every in game year? Players could be 400+ years old rather quick. Weight = 180.0d; //pounds or kilos? Height = 70.0d; //inches or centimeters? Location = "A0"; InCombat = false; LastCombatTime = DateTime.MinValue.ToUniversalTime(); IsNPC = true; Leveled = false; MainHand = "WIELD_RIGHT"; NextLevelExperience = 300; Level = 1; Experience = 0; PointsToSpend = 0; IsMob = false; Inventory = new Inventory(); Equipment = new Equipment(); Inventory.playerID = this.ID; Equipment.playerID = this.ID; Attributes = new Dictionary <string, Attribute>(); Attributes.Add("Hitpoints", new Attribute(200.0d, "Hitpoints", 200.0d, 0.2d, 1)); Attributes.Add("Dexterity", new Attribute(10.0d, "Dexterity", 10.0d, 0.0d, 1)); Attributes.Add("Strength", new Attribute(10.0d, "Strength", 10.0d, 0.0d, 1)); Attributes.Add("Intelligence", new Attribute(10.0d, "Intelligence", 10.0d, 0.0d, 1)); Attributes.Add("Endurance", new Attribute(10.0d, "Endurance", 10.0d, 0.0d, 1)); Attributes.Add("Charisma", new Attribute(10.0d, "Charisma", 10.0d, 0.0d, 1)); SubAttributes = new Dictionary <string, double>(); SubAttributes.Add("Agility", 10.0d); SubAttributes.Add("Toughness", 10.0d); SubAttributes.Add("Cunning", 10.0d); SubAttributes.Add("Wisdom", 10.0d); SubAttributes.Add("Leadership", 10.0d); }
public async void Load(ObjectId id) { var characterCollection = MongoUtils.MongoData.GetCollection<NPC>("Characters", "NPCCharacters"); var found = await MongoUtils.MongoData.RetrieveObjectAsync<NPC>(characterCollection, n => n.Id == id); Id = found.Id; FirstName = found.FirstName.CamelCaseWord(); LastName = found.LastName.CamelCaseWord(); _class = found.Class; _race = found.Race; _gender = found.Gender; _skinType = found.SkinType; _skinColor = found.SkinColor; _hairColor = found.HairColor; _eyeColor = found.EyeColor; _stanceState = found.StanceState; _actionState = found.ActionState; Description = found.Description; Location = found.Location; Height = found.Height; Weight = found.Weight; IsNPC = found.IsNPC; MobTypeID = found.MobTypeID; NextAiAction = found.NextAiAction.ToUniversalTime(); InCombat = found.InCombat; LastCombatTime = found.LastCombatTime.ToUniversalTime(); CurrentTarget = found.CurrentTarget; LastTarget = found.LastTarget; Fsm.state = Fsm.GetStateFromName(found.AiState); Fsm.previousState = Fsm.GetStateFromName(found.PreviousAiState); Fsm.globalState = Fsm.GetStateFromName(found.AiGlobalState); Experience = found.Experience; Level = found.Level; Title = found.Title; KillerID = found.KillerID; Attributes = found.Attributes; XpTracker = found.XpTracker; Triggers = found.Triggers; Quests = found.Quests; Bonuses = found.Bonuses; StatBonus.Bonuses = Bonuses; //if (playerAttributes != null) { // foreach (BsonDocument attrib in playerAttributes) { // if (!this.Attributes.ContainsKey(attrib["Name"].ToString())) { // Attribute tempAttrib = new Attribute(); // tempAttrib.Name = attrib["Name"].ToString(); // tempAttrib.Value = attrib["Value"].AsDouble; // tempAttrib.Max = attrib["Max"].AsDouble; // tempAttrib.RegenRate = attrib["RegenRate"].AsDouble; // this.Attributes.Add(tempAttrib.Name, tempAttrib); // } // else { // this.Attributes[attrib["Name"].ToString()].Max = attrib["Max"].AsDouble; // this.Attributes[attrib["Name"].ToString()].Value = attrib["Value"].AsDouble; // this.Attributes[attrib["Name"].ToString()].RegenRate = attrib["RegenRate"].AsDouble; // } // } //} //if (xpTracker != null && xpTracker.Count > 0) { // foreach (BsonDocument track in xpTracker) { // //we just newed this up so it should always have to be refilled // damageTracker.Add(track["ID"].AsString, track["Value"].AsDouble); // } //} //foreach (BsonDocument triggerdoc in triggers) { // ITrigger trigger = new GeneralTrigger(triggerdoc, TriggerType.NPC); // Triggers.Add(trigger); //} //if (questIds != null) { // foreach (BsonDocument questDoc in questIds) { // Dictionary<string, int> playerSteps = new Dictionary<string, int>(); // if (questDoc.Contains("PlayerIDs")) { // foreach (var playerStep in questDoc["PlayerIDs"].AsBsonArray) { // playerSteps.Add(playerStep["PlayerID"].AsString, playerStep["Step"].AsInt32); // } // } // var quest = new Quests.Quest(questDoc["QuestID"].AsString, playerSteps); // if (questDoc.Contains("AutoPlayers")) { // foreach (var autoID in questDoc["AutoPlayers"].AsBsonArray) { // quest.AutoProcessPlayer.Enqueue(autoID.AsString); // } // } // Quests.Add(quest); // } //} //if (bonusesList != null && bonusesList.Count > 0) { // Bonuses.LoadFromBson(bonusesList); //} Inventory.playerID = Id; Equipment.playerID = Id; }
public void Load(string id) { MongoUtils.MongoData.ConnectToDatabase(); MongoDatabase characterDB = MongoUtils.MongoData.GetDatabase("Characters"); MongoCollection characterCollection = characterDB.GetCollection<BsonDocument>("NPCCharacters"); IMongoQuery query = Query.EQ("_id", ObjectId.Parse(id)); BsonDocument found = characterCollection.FindOneAs<BsonDocument>(query); ID = found["_id"].AsObjectId.ToString(); FirstName = found["FirstName"].AsString.CamelCaseWord(); LastName = found["LastName"].AsString.CamelCaseWord(); _class = (CharacterClass)Enum.Parse(typeof(CharacterClass), found["Class"].AsString.CamelCaseWord()); _race = (CharacterRace)Enum.Parse(typeof(CharacterRace), found["Race"].AsString.CamelCaseWord()); _gender = (Genders)Enum.Parse(typeof(Genders), found["Gender"].AsString.CamelCaseWord()); _skinType = (SkinType)Enum.Parse(typeof(SkinType), found["SkinType"].AsString.CamelCaseWord()); _skinColor = (SkinColors)Enum.Parse(typeof(SkinColors), found["SkinColor"].AsString.CamelCaseWord()); _skinType = (SkinType)Enum.Parse(typeof(SkinType), found["SkinType"].AsString.CamelCaseWord()); _hairColor = (HairColors)Enum.Parse(typeof(HairColors), found["HairColor"].AsString.CamelCaseWord()); _eyeColor = (EyeColors)Enum.Parse(typeof(EyeColors), found["EyeColor"].AsString.CamelCaseWord()); _stanceState = (CharacterStanceState)Enum.Parse(typeof(CharacterStanceState), found["StanceState"].AsString.CamelCaseWord()); _actionState = (CharacterActionState)Enum.Parse(typeof(CharacterActionState), found["ActionState"].AsString.CamelCaseWord()); Description = found["Description"].AsString; Location = found["Location"].AsString; Height = found["Height"].AsDouble; Weight = found["Weight"].AsDouble; IsNPC = found["IsNPC"].AsBoolean; MobTypeID = found["MobTypeID"].AsInt32; NextAiAction = found["NextAiAction"].ToUniversalTime(); InCombat = found["InCombat"].AsBoolean; LastCombatTime = found["LastCombatTime"].ToUniversalTime(); CurrentTarget = found["CurrentTarget"].AsString != "" ? found["CurrentTarget"].AsString : null; LastTarget = found["LastTarget"].AsString != "" ? found["LastTarget"].AsString : null; Fsm.state = Fsm.GetStateFromName(found["AiState"].AsString); Fsm.previousState = Fsm.GetStateFromName(found["previousAiState"].AsString); Fsm.globalState = Fsm.GetStateFromName(found["AiGlobalState"].AsString); Experience = found["Experience"].AsInt64; Level = found["Level"].AsInt32; Title = found.Contains("Title") ? found["Title"].AsString : ""; KillerID = found.Contains("KillerID") ? found["KillerID"].AsString : ""; //if you just use var instead of casting it like this you will be in a world of pain and suffering when dealing with subdocuments. BsonArray playerAttributes = found["Attributes"].AsBsonArray; BsonArray xpTracker = found["XpTracker"].AsBsonArray; BsonDocument triggers = found["Triggers"].AsBsonDocument; BsonArray bonusesList = null; if (found.Contains("Bonuses")) { bonusesList = found["Bonuses"].AsBsonArray; } if (playerAttributes != null) { foreach (BsonDocument attrib in playerAttributes) { if (!this.Attributes.ContainsKey(attrib["Name"].ToString())) { Attribute tempAttrib = new Attribute(); tempAttrib.Name = attrib["Name"].ToString(); tempAttrib.Value = attrib["Value"].AsDouble; tempAttrib.Max = attrib["Max"].AsDouble; tempAttrib.RegenRate = attrib["RegenRate"].AsDouble; this.Attributes.Add(tempAttrib.Name, tempAttrib); } else { this.Attributes[attrib["Name"].ToString()].Max = attrib["Max"].AsDouble; this.Attributes[attrib["Name"].ToString()].Value = attrib["Value"].AsDouble; this.Attributes[attrib["Name"].ToString()].RegenRate = attrib["RegenRate"].AsDouble; } } } if (xpTracker != null && xpTracker.Count > 0) { foreach (BsonDocument track in xpTracker) { //we just newed this up so it should always have to be refilled damageTracker.Add(track["ID"].AsString, track["Value"].AsDouble); } } ITrigger trigger = new GeneralTrigger(triggers, "NPC"); Triggers.Add(trigger); if (bonusesList != null && bonusesList.Count > 0) { Bonuses.LoadFromBson(bonusesList); } }
public Partner(string pseudo, CharacterRace race, int size, int weight, int hp, Defence defences, int initiative, PlayerCharacter master) : base(pseudo, race, size, weight, hp, defences, initiative) { _master = master; }
public Character(Position position, char symbol, ConsoleColor colour, int health, int mana, int range, int attackDamage, CharacterRace race) : base(position, symbol, colour) { this.Health = health; this.Mana = mana; this.Range = range; this.AttackDamage = attackDamage; this.Race = race; this.inventory = new List <Item>(); }
public NPC(CharacterRace race, CharacterClass characterClass, Genders gender, Languages language, SkinColors skinColor, SkinType skinType, HairColors hairColor, EyeColors eyeColor, BodyBuild build) { Messages = new Queue<string>(); Fsm = AI.FSM.GetInstance(); Fsm.state = Fsm.GetStateFromName("Wander"); _class = characterClass; _race = race; _gender = gender; _skinColor = skinColor; _skinType = skinType; _hairColor = hairColor; _eyeColor = eyeColor; _build = build; _koCount = new Tuple<int, DateTime>(0, DateTime.Now); _actionState = CharacterActionState.None; _stanceState = CharacterStanceState.Standing; _primaryLanguage = language; KnownLanguages = new HashSet<Languages>(); KnownLanguages.Add(_primaryLanguage); Inventory = new Inventory(); damageTracker = new Dictionary<string, double>(); Triggers = new List<ITrigger>(); Bonuses = new StatBonuses(); FirstName = ""; LastName = ""; Description = ""; Age = 17; //Do we want an age? And are we going to advance it every in game year? Players could be 400+ years old rather quick. Weight = 180.0d; //pounds or kilos? Height = 70.0d; //inches or centimeters? Location = "A0"; InCombat = false; LastCombatTime = DateTime.MinValue.ToUniversalTime(); IsNPC = true; Leveled = false; MainHand = "WIELD_RIGHT"; NextLevelExperience = 300; Level = 1; Experience = 0; PointsToSpend = 0; IsMob = false; Inventory = new Inventory(); Equipment = new Equipment(); Inventory.playerID = this.ID; Equipment.playerID = this.ID; Attributes = new Dictionary<string, Attribute>(); Attributes.Add("Hitpoints", new Attribute(200.0d, "Hitpoints", 200.0d, 0.2d, 1)); Attributes.Add("Dexterity", new Attribute(10.0d, "Dexterity", 10.0d, 0.0d, 1)); Attributes.Add("Strength", new Attribute(10.0d, "Strength", 10.0d, 0.0d, 1)); Attributes.Add("Intelligence", new Attribute(10.0d, "Intelligence", 10.0d, 0.0d, 1)); Attributes.Add("Endurance", new Attribute(10.0d, "Endurance", 10.0d, 0.0d, 1)); Attributes.Add("Charisma", new Attribute(10.0d, "Charisma", 10.0d, 0.0d, 1)); SubAttributes = new Dictionary<string, double>(); SubAttributes.Add("Agility", 10.0d); SubAttributes.Add("Toughness", 10.0d); SubAttributes.Add("Cunning", 10.0d); SubAttributes.Add("Wisdom", 10.0d); SubAttributes.Add("Leadership", 10.0d); }
void RandomizeByVariable(CharacterObjectGroups cog, CharacterGender gender, Elements elements, CharacterRace race, FacialHair facialHair, SkinColor skinColor, HeadCovering headCovering) { // if facial elements are enabled switch (elements) { case Elements.Yes: //select head with all elements if (cog.headAllElements.Count != 0) { ActivateItem(cog.headAllElements[Random.Range(0, cog.headAllElements.Count)]); } //select eyebrows if (cog.eyebrow.Count != 0) { ActivateItem(cog.eyebrow[Random.Range(0, cog.eyebrow.Count)]); } //select facial hair (conditional) if (cog.facialHair.Count != 0 && facialHair == FacialHair.Yes && gender == CharacterGender.Male && headCovering != HeadCovering.HeadCoverings_No_FacialHair) { ActivateItem(cog.facialHair[Random.Range(0, cog.facialHair.Count)]); } // select hair attachment switch (headCovering) { case HeadCovering.HeadCoverings_Base_Hair: // set hair attachment to index 1 if (_allGenderObjectGroups.all_Hair.Count != 0) { ActivateItem(_allGenderObjectGroups.all_Hair[1]); } if (_allGenderObjectGroups.headCoverings_Base_Hair.Count != 0) { ActivateItem(_allGenderObjectGroups.headCoverings_Base_Hair[Random.Range(0, _allGenderObjectGroups.headCoverings_Base_Hair.Count)]); } break; case HeadCovering.HeadCoverings_No_FacialHair: // no facial hair attachment if (_allGenderObjectGroups.all_Hair.Count != 0) { ActivateItem(_allGenderObjectGroups.all_Hair[Random.Range(0, _allGenderObjectGroups.all_Hair.Count)]); } if (_allGenderObjectGroups.headCoverings_No_FacialHair.Count != 0) { ActivateItem(_allGenderObjectGroups.headCoverings_No_FacialHair[Random.Range(0, _allGenderObjectGroups.headCoverings_No_FacialHair.Count)]); } break; case HeadCovering.HeadCoverings_No_Hair: // select hair attachment if (_allGenderObjectGroups.headCoverings_No_Hair.Count != 0) { ActivateItem(_allGenderObjectGroups.all_Hair[Random.Range(0, _allGenderObjectGroups.all_Hair.Count)]); } // if not human if (race != CharacterRace.Human) { // select elf ear attachment if (_allGenderObjectGroups.elf_Ear.Count != 0) { ActivateItem(_allGenderObjectGroups.elf_Ear[Random.Range(0, _allGenderObjectGroups.elf_Ear.Count)]); } } break; } break; case Elements.No: //select head with no elements if (cog.headNoElements.Count != 0) { ActivateItem(cog.headNoElements[Random.Range(0, cog.headNoElements.Count)]); } break; } // select torso starting at index 1 if (cog.torso.Count != 0) { ActivateItem(cog.torso[Random.Range(1, cog.torso.Count)]); } // determine chance for upper arms to be different and activate if (cog.arm_Upper_Right.Count != 0) { RandomizeLeftRight(cog.arm_Upper_Right, cog.arm_Upper_Left, 15); } // determine chance for lower arms to be different and activate if (cog.arm_Lower_Right.Count != 0) { RandomizeLeftRight(cog.arm_Lower_Right, cog.arm_Lower_Left, 15); } // determine chance for hands to be different and activate if (cog.hand_Right.Count != 0) { RandomizeLeftRight(cog.hand_Right, cog.hand_Left, 15); } // select hips starting at index 1 if (cog.hips.Count != 0) { ActivateItem(cog.hips[Random.Range(1, cog.hips.Count)]); } // determine chance for legs to be different and activate if (cog.leg_Right.Count != 0) { RandomizeLeftRight(cog.leg_Right, cog.leg_Left, 15); } // select chest attachment if (_allGenderObjectGroups.chest_Attachment.Count != 0) { ActivateItem(_allGenderObjectGroups.chest_Attachment[Random.Range(0, _allGenderObjectGroups.chest_Attachment.Count)]); } // select back attachment if (_allGenderObjectGroups.back_Attachment.Count != 0) { ActivateItem(_allGenderObjectGroups.back_Attachment[Random.Range(0, _allGenderObjectGroups.back_Attachment.Count)]); } // determine chance for shoulder attachments to be different and activate if (_allGenderObjectGroups.shoulder_Attachment_Right.Count != 0) { RandomizeLeftRight(_allGenderObjectGroups.shoulder_Attachment_Right, _allGenderObjectGroups.shoulder_Attachment_Left, 10); } // determine chance for elbow attachments to be different and activate if (_allGenderObjectGroups.elbow_Attachment_Right.Count != 0) { RandomizeLeftRight(_allGenderObjectGroups.elbow_Attachment_Right, _allGenderObjectGroups.elbow_Attachment_Left, 10); } // select hip attachment if (_allGenderObjectGroups.hips_Attachment.Count != 0) { ActivateItem(_allGenderObjectGroups.hips_Attachment[Random.Range(0, _allGenderObjectGroups.hips_Attachment.Count)]); } // determine chance for knee attachments to be different and activate if (_allGenderObjectGroups.knee_Attachement_Right.Count != 0) { RandomizeLeftRight(_allGenderObjectGroups.knee_Attachement_Right, _allGenderObjectGroups.knee_Attachement_Left, 10); } // start randomization of the random characters colors RandomizeColors(skinColor); }
public Character(CharacterClass characterClass, CharacterRace characterRace, string name) { this.Class = characterClass; this.Race = characterRace; this.Name = name; this.Health = BASE_HEALTH; this.Mana = BASE_MANA; this.Attack = BASE_ATTACK; this.Defence = BASE_DEFENCE; this.MagicAttack = BASE_MAGIC_ATTACK; this.MagicDefence = BASE_MAGIC_DEFENCE; this.Exp = 0; this.Level = 1; this.Gold = 0; this.Items = new List <Item>(); this.Spells = new List <Spell>(); ////Items added//// Items.Add(new MaxMana.Tools.Consumable.HealthPotion()); Items.Add(new Weapons.Excalibur()); // Class Bonuses switch (characterClass) { case CharacterClass.Mage: { this.Health += 2; this.Mana += 8; this.Attack += 2; this.Defence += 2; this.MagicAttack += 4; this.MagicDefence += 4; break; } case CharacterClass.Rogue: { this.Health += 4; this.Mana += 4; this.Attack += 2; this.Defence += 2; this.MagicAttack += 2; this.MagicDefence += 2; break; } case CharacterClass.Warrior: { this.Health += 8; this.Mana += 2; this.Attack += 4; this.Defence += 4; this.MagicAttack += 2; this.MagicDefence += 3; break; } } // Race Bonuses switch (characterRace) { case CharacterRace.Dwarf: { this.Health += 4; this.Defence += 4; this.MagicDefence += 4; this.Spells.Add(new Abilities.Headbutt()); //double attack break; } case CharacterRace.Elf: { this.Mana += 4; this.MagicAttack += 4; this.MagicDefence += 4; this.Spells.Add(new Abilities.Snipe()); //add critical chance break; } case CharacterRace.Human: { this.Health += 2; this.Mana += 2; this.Attack += 2; this.Defence += 2; this.MagicAttack += 2; this.MagicDefence += 2; this.Spells.Add(new Abilities.CoinToss()); // break; } } this.MaxHealth = this.Health; this.MaxMana = this.Mana; }
public Character(string name, string realm, CharacterRegion region, CharacterRace race, BossOptions boss, string head, string neck, string shoulders, string back, string chest, string shirt, string tabard, string wrist, string hands, string waist, string legs, string feet, string finger1, string finger2, string trinket1, string trinket2, string mainHand, string offHand, string ranged, string projectile, string projectileBag) { Initialize(); IsLoading = true; _name = name; _realm = realm; _region = region; _race = race; _head = head; _neck = neck; _shoulders = shoulders; _back = back; _chest = chest; _shirt = shirt; _tabard = tabard; _wrist = wrist; _hands = hands; _waist = waist; _legs = legs; _feet = feet; _finger1 = finger1; _finger2 = finger2; _trinket1 = trinket1; _trinket2 = trinket2; _mainHand = mainHand; _offHand = offHand; _ranged = ranged; _projectile = projectile; _projectileBag = projectileBag; WaistBlacksmithingSocketEnabled = true; _activeBuffs = new List<Buff>(); SetFaction(); IsLoading = false; RecalculateSetBonuses(); BossOptions = boss.Clone(); }
/// <summary> /// Deep copy constructor /// </summary> /// <param name="copy"></param> public Character(Character copy) { //copy constructor _class = copy._class; _race = copy._race; _gender = copy._gender; _skinColor = copy._skinColor; _skinType = copy._skinType; _hairColor = copy._hairColor; _eyeColor = copy._eyeColor; _build = copy._build; _koCount = new Tuple<int, DateTime>(0, DateTime.Now); _actionState = CharacterActionState.None; _stanceState = CharacterStanceState.Standing; _primaryLanguage = copy._primaryLanguage; KnownLanguages = new HashSet<Languages>(); foreach (CharacterEnums.Languages lang in copy.KnownLanguages) { KnownLanguages.Add(lang); } FirstName = copy.FirstName; LastName = copy.LastName; Description = copy.Description; Age = copy.Age; //Do we want an age? And are we going to advance it every in game year? Players could be 400+ years old rather quick. Weight = copy.Weight; //pounds or kilos? Height = copy.Height; //inches or centimeters? Location = "A1"; InCombat = false; LastCombatTime = DateTime.MinValue.ToUniversalTime(); IsNPC = false; Leveled = false; NextLevelExperience = 300; Level = 1; Experience = 0; PointsToSpend = 0; MainHand = "WIELD_RIGHT"; Attributes = new Dictionary<string, Attribute>(); foreach (KeyValuePair<string, Attribute> attrib in copy.Attributes){ Attributes.Add(attrib.Key, attrib.Value); } SubAttributes = new Dictionary<string, double>(); foreach (KeyValuePair<string, double> subAttrib in copy.SubAttributes) { SubAttributes.Add(subAttrib.Key, subAttrib.Value); } Inventory = new Inventory(); this.Save(); }
// The following are special contructors used by optimizer, they assume the cached items/enchant are always used, and the underlying gemmedid/enchantid are never used public Character(string name, string realm, CharacterRegion region, CharacterRace race, BossOptions boss, ItemInstance head, ItemInstance neck, ItemInstance shoulders, ItemInstance back, ItemInstance chest, ItemInstance shirt, ItemInstance tabard, ItemInstance wrist, ItemInstance hands, ItemInstance waist, ItemInstance legs, ItemInstance feet, ItemInstance finger1, ItemInstance finger2, ItemInstance trinket1, ItemInstance trinket2, ItemInstance mainHand, ItemInstance offHand, ItemInstance ranged, ItemInstance projectile, ItemInstance projectileBag, List<Buff> activeBuffs, string model) { Initialize(); IsLoading = true; _name = name; _realm = realm; _region = region; _race = race; _item[(int)CharacterSlot.Head] = head; _item[(int)CharacterSlot.Neck] = neck; _item[(int)CharacterSlot.Shoulders] = shoulders; _item[(int)CharacterSlot.Back] = back; _item[(int)CharacterSlot.Chest] = chest; _item[(int)CharacterSlot.Shirt] = shirt; _item[(int)CharacterSlot.Tabard] = tabard; _item[(int)CharacterSlot.Wrist] = wrist; _item[(int)CharacterSlot.Hands] = hands; _item[(int)CharacterSlot.Waist] = waist; _item[(int)CharacterSlot.Legs] = legs; _item[(int)CharacterSlot.Feet] = feet; _item[(int)CharacterSlot.Finger1] = finger1; _item[(int)CharacterSlot.Finger2] = finger2; _item[(int)CharacterSlot.Trinket1] = trinket1; _item[(int)CharacterSlot.Trinket2] = trinket2; _item[(int)CharacterSlot.MainHand] = mainHand; _item[(int)CharacterSlot.OffHand] = offHand; _item[(int)CharacterSlot.Ranged] = ranged; _item[(int)CharacterSlot.Projectile] = projectile; _item[(int)CharacterSlot.ProjectileBag] = projectileBag; IsLoading = false; ActiveBuffs = new List<Buff>(activeBuffs); SetFaction(); CurrentModel = model; RecalculateSetBonuses(); BossOptions = boss.Clone(); }
public Item[] GetUnfilteredRelevantItems(CalculationsBase model, CharacterRace race) { List<Item> itemList = new List<Item>(AllItems).FindAll(new Predicate<Item>( delegate(Item item) { return model.IsItemRelevant(item) && item.FitsFaction(race); })); return itemList.ToArray(); }
public Character(string name, string realm, CharacterRegion region, CharacterRace race, BossOptions boss, ItemInstance[] items, List<Buff> activeBuffs, string model) { Initialize(); IsLoading = true; _name = name; _realm = realm; _region = region; _race = race; Array.Copy(items, _item, items.Length); IsLoading = false; ActiveBuffs = new List<Buff>(activeBuffs); SetFaction(); CurrentModel = model; RecalculateSetBonuses(); BossOptions = boss.Clone(); }
public static Item[] GetUnfilteredRelevantItems(CalculationsBase model, CharacterRace race) { return _instance.GetUnfilteredRelevantItems(model, race); }
// Fields for all Monsters // TBD // Public constructor for Monsters public MonsterCharacter(string aName, string aDescription, CharacterRace aRace, CharacterClass aClass) : base(aName, aDescription, aRace, aClass) { // TBD }
public Character(string aName, string aDescription, CharacterRace aRace, CharacterClass aClass, int hp = 2) : base (aName, aDescription) { // Change default HP to be a factor of race and class rather than directly specified // at the very least, it should be a final, optional parameter that can override the default _maxHitPoints = _currentHitPoints = hp; CharacterRace characterRace = aRace; CharacterClass characterClass = aClass; }
public static Stats GetBaseStats(int level, CharacterClass characterClass, CharacterRace characterRace) { return(GetBaseStats(level, characterClass, characterRace, DruidForm.Caster)); }
public static Stats GetBaseStats(int level, CharacterClass characterClass, CharacterRace characterRace) { return GetBaseStats(level, characterClass, characterRace, DruidForm.Caster); }
public void showRacePanel(CharacterRace cr) { toggleAllExcept(getRaceTextField(cr)); }
public Hero(string Name, uint MaxHP = 0, uint Age = 0, CharacterGender Gender = CharacterGender.Male, CharacterRace Race = CharacterRace.People) : base(Name, MaxHP, Age) { this.Gender = Gender; this.Race = Race; }
public static Stats GetBaseStats(int level, CharacterClass characterClass, CharacterRace characterRace, DruidForm characterForm) { // Health, Mana and some other things are same for every race. lock (syncLock) { #region Cache if (level == _lastLevel && characterClass == _lastClass && characterRace == _lastRace && characterForm == _lastForm) return _lastStats.Clone(); _lastLevel = level; _lastClass = characterClass; _lastRace = characterRace; _lastForm = characterForm; #endregion Stats S = new Stats(); #region Race, not class benefit // Most Level 85 Race and Class Stats come from: // http://code.google.com/p/simulationcraft/source/browse/branches/cataclysm/engine/sc_rating.cpp?r=6207 // When they were still at 80 as of Jan 01st, 2011 // From SimCraft Stats race = new Stats(); switch (characterRace) { // Alliance case CharacterRace.Human: race.Strength = 20; race.Agility = 20; race.Stamina = 20; race.Intellect = 20; race.Spirit = 20; break; case CharacterRace.Dwarf: race.Strength = 25; race.Agility = 16; race.Stamina = 21; race.Intellect = 19; race.Spirit = 19; break; case CharacterRace.NightElf: race.Strength = 16; race.Agility = 24; race.Stamina = 20; race.Intellect = 20; race.Spirit = 20; break; case CharacterRace.Gnome: race.Strength = 15; race.Agility = 22; race.Stamina = 20; race.Intellect = 24; race.Spirit = 20; break; case CharacterRace.Draenei: race.Strength = 21; race.Agility = 17; race.Stamina = 20; race.Intellect = 20; race.Spirit = 22; break; case CharacterRace.Worgen: race.Strength = 23; race.Agility = 22; race.Stamina = 20; race.Intellect = 16; race.Spirit = 19; break; // Horde case CharacterRace.Orc: race.Strength = 23; race.Agility = 17; race.Stamina = 21; race.Intellect = 17; race.Spirit = 22; break; case CharacterRace.Undead: race.Strength = 19; race.Agility = 18; race.Stamina = 20; race.Intellect = 18; race.Spirit = 25; break; case CharacterRace.Tauren: race.Strength = 25; race.Agility = 16; race.Stamina = 21; race.Intellect = 16; race.Spirit = 22; break; case CharacterRace.Troll: race.Strength = 21; race.Agility = 22; race.Stamina = 20; race.Intellect = 16; race.Spirit = 21; break; case CharacterRace.BloodElf: race.Strength = 17; race.Agility = 22; race.Stamina = 20; race.Intellect = 23; race.Spirit = 18; break; case CharacterRace.Goblin: race.Strength = 17; race.Agility = 22; race.Stamina = 20; race.Intellect = 23; race.Spirit = 20; break; default: { break; } }; // From Chardev (85) //Class Str Agi Sta Int Spi //Druid 76 69 86 136 153 //Shaman 111 60 128 119 136 //Death Knight 171 101 154 16 44 //Hunter 60 178 119 77 88 //Mage 17 26 43 187 175 //Paladin 144 77 136 86 97 //Priest 26 34 51 188 183 //Rogue 102 186 94 26 53 //Warlock 43 51 76 161 166 //Warrior 169 103 153 17 44 #endregion #region Base Stats #region All Classes S.Miss = 0.05f; S.Block = 0.00f; S.Parry = 0.00f; #endregion switch (characterClass) { #region Death Knight case CharacterClass.DeathKnight: Stats dk = new Stats() { Strength = 171, Agility = 101, Stamina = 274, Intellect = 16, Spirit = 44, Health = 43025f, Dodge = 0.05f, Parry = 0.05f, Block = 0.00f, PhysicalCrit = 0.0049f, AttackPower = 595f, }; S.Accumulate(race); S.Accumulate(dk); break; #endregion #region Druid case CharacterClass.Druid: Stats druid = new Stats() { Strength = 76, Agility = 69, Stamina = 86, Intellect = 136, Spirit = 153, Health = 39533f, Mana = 18635f, Dodge = 0.03758f, Parry = 0.05f, Block = 0.05f, PhysicalCrit = 0.03192f, AttackPower = 613f, SpellCrit = 0.0185f, Mp5 = 931f, }; S.Accumulate(race); S.Accumulate(druid); switch (characterForm) { case DruidForm.Moonkin: case DruidForm.Caster: S.AttackPower = -10; S.PhysicalCrit = 0.0743f; S.Dodge = 0.0556970f; //?? break; case DruidForm.Bear: S.AttackPower = 255; S.PhysicalCrit = 0.074755f; S.Dodge = 0.0556970f; S.BonusStaminaMultiplier = 0.2f; break; case DruidForm.Cat: S.AttackPower = 235; S.PhysicalCrit = 0.074755f; S.Dodge = 0.0556970f; break; default: break; } break; #endregion #region Hunter case CharacterClass.Hunter: Stats hun = new Stats() { // Stats updated 8/19/2011 4.2 w/ Troll Hunter: Tsevon @ US-Dragonmaw w/ no spec. Strength = 60, Agility = 178, Stamina = 119, Intellect = 77, Spirit = 88, Health = 39037, Dodge = 0.03758f, Parry = 0.05f, // This assumes ALL AP from full AP += AGI * 2 // So naked Hunter has 31 AP un accounted for. // Naked troll, no gear, no spec, LW & Skinning. PhysicalCrit = 0, AttackPower = 31f, RangedAttackPower = 31f, }; S.Accumulate(race); S.Accumulate(hun); break; #endregion #region Mage case CharacterClass.Mage: Stats mag = new Stats() { Strength = 17, Agility = 26, Stamina = 43, Intellect = 187, Spirit = 175, Health = 36853f, Mana = 17138f, Dodge = 0.03758f, Parry = 0.05f, }; S.Accumulate(race); S.Accumulate(mag); break; #endregion #region Paladin case CharacterClass.Paladin: Stats pal = new Stats() { Strength = 144, Agility = 77, Stamina = 136, Intellect = 86, Spirit = 97, Health = 43285f, Mana = 23422, Dodge = 0.05f, Parry = 0.05f, Block = 0.05f, PhysicalCrit = 0.00652f, AttackPower = 235f, SpellCrit = 0.033355f, }; S.Accumulate(race); S.Accumulate(pal); break; #endregion #region Priest case CharacterClass.Priest: // added adjustments to the base race here because the math using the previous stats // just don't work for the in game calculations on priest tests. // also unsure how these changes would effect other modules if moved up. // adding or subracting from the priest stats don't work and throws all other class // calculations off. switch (characterRace) { case CharacterRace.Human: race.Spirit = 19; break; case CharacterRace.Gnome: race.Intellect = 23; break; case CharacterRace.Goblin: race.Spirit = 18; break; } Stats pri = new Stats() { Strength = 26, Agility = 34, Stamina = 51, Intellect = 169, Spirit = 178, Health = 43285f, Mana = 20590f, Dodge = 0.0337780f, Parry = 0.05f, PhysicalCrit = 0.027f, SpellCrit = 0.012375f, }; pri.Mp5 = pri.Mana * 0.05f; // Always 5% of base mana in regen. S.Accumulate(race); S.Accumulate(pri); break; #endregion #region Rogue case CharacterClass.Rogue: Stats rog = new Stats() { Strength = 102, Agility = 186, Stamina = 94, Intellect = 26, Spirit = 53, Health = 40529f, Dodge = 0.03758f, Parry = 0.05f, PhysicalCrit = 0.03192f, AttackPower = 613f, }; S.Accumulate(race); S.Accumulate(rog); break; #endregion #region Shaman case CharacterClass.Shaman: Stats sha = new Stats() { Strength = 111, Agility = 60, Stamina = 128, Intellect = 119, Spirit = 136, Health = 37037f, Mana = 23430f, Dodge = 0.0193f, Parry = 0.05f, Block = 0.05f, PhysicalCrit = 0.02910375f, AttackPower = 140f, SpellCrit = 0.022057f, SpellPower = -10, }; S.Accumulate(race); S.Accumulate(sha); break; #endregion #region Warlock case CharacterClass.Warlock: Stats warlock = new Stats() { Strength = 43, Agility = 51, Stamina = 76, Intellect = 153, Spirit = 161, Health = 38184f, Mana = 20553f, Dodge = 0.0238110f, Parry = 0.05f, Block = 0.05f, PhysicalCrit = 0.026219999417663f, SpellCrit = 0.017000000923872f, }; S.Accumulate(race); S.Accumulate(warlock); break; #endregion #region Warrior case CharacterClass.Warrior: Stats war = new Stats() { Strength = 169, Agility = 103, Stamina = 153, Intellect = 17, Spirit = 44, Health = 43285f, Dodge = 0.05f, Parry = 0.05f, Block = 0.05f, PhysicalCrit = 0.03192f, AttackPower = 613f, }; S.Accumulate(race); S.Accumulate(war); break; #endregion #region No Class default: break; #endregion } #endregion #region Racials // Resistance do not stack with other buffs. Until then I'll commenting them out if (characterRace == CharacterRace.Gnome) //CATA: changed from 5% int to 5% mana { // S.ArcaneResistance += 85f; S.BonusManaMultiplier = 0.05f; //S.BonusIntellectMultiplier = 0.05f; } else if (characterRace == CharacterRace.Human) { S.BonusSpiritMultiplier = 0.03f; // Patch 4.0.6+ changed from a 3 minute cooldown to 2 minute cooldown S.AddSpecialEffect(new SpecialEffect(Trigger.Use, new Stats() { PVPTrinket = 1 }, 0f, 120f)); } else if (characterRace == CharacterRace.NightElf) { // S.NatureResistance += 85f; S.Miss += 0.02f; } else if (characterRace == CharacterRace.Dwarf) { // S.FrostResistance += 85f; // Armor +10% for 8 Sec. S.AddSpecialEffect(new SpecialEffect(Trigger.Use, new Stats() { BaseArmorMultiplier = .1f }, 8, 120)); // TODO: Add debuff removal. Doesn't work on all bosses so not sure if we want to. } else if (characterRace == CharacterRace.Draenei) { // S.ArcaneResistance += 85f; S.SpellHit += 0.01f; S.PhysicalHit += 0.01f; // Patch 4.0.6+ changed from a scaling Health restore to a flat 20% of max health S.AddSpecialEffect(new SpecialEffect(Trigger.Use, new Stats() { HealthRestoreFromMaxHealth = 0.2f / 15f }, 15f, 180f)); } else if (characterRace == CharacterRace.Worgen) { // S.NatureResistance = 64f; // S.ShadowResistance = 64f; // Patch 4.0.6+ Darkflight changed from a 3 minute CD to a 2 minute CD S.AddSpecialEffect(new SpecialEffect(Trigger.Use, new Stats() { MovementSpeed = 0.40f }, 10f, 120f)); S.PhysicalCrit += 0.01f; S.SpellCrit += 0.01f; } else if (characterRace == CharacterRace.Tauren) { // S.NatureResistance = 85f; S.Health = (float)Math.Floor(S.Health * 1.05f); } else if (characterRace == CharacterRace.Troll) { S.SnareRootDurReduc = .15f; if (characterClass == CharacterClass.DeathKnight || characterClass == CharacterClass.Warrior || characterClass == CharacterClass.Rogue) S.AddSpecialEffect(new SpecialEffect(Trigger.Use, new Stats() { PhysicalHaste = 0.2f }, 10f, 180f)); else S.AddSpecialEffect(new SpecialEffect(Trigger.Use, new Stats() { SpellHaste = 0.2f, PhysicalHaste = 0.2f }, 10f, 180f)); } else if (characterRace == CharacterRace.Undead) { S.AddSpecialEffect(new SpecialEffect(Trigger.Use, new Stats() { FearDurReduc = 1f }, .1f, 120f)); } else if (characterRace == CharacterRace.Orc) { S.StunDurReduc = 0.15f; if (characterClass == CharacterClass.Shaman) S.AddSpecialEffect(new SpecialEffect(Trigger.Use, new Stats() { AttackPower = 65 + (level * 13), SpellPower = 75 + (level * 6) }, 15f, 120f)); else if (characterClass == CharacterClass.Warlock || characterClass == CharacterClass.Mage) S.AddSpecialEffect(new SpecialEffect(Trigger.Use, new Stats() { SpellPower = 75 + (level * 6) }, 15f, 120f)); else S.AddSpecialEffect(new SpecialEffect(Trigger.Use, new Stats() { AttackPower = 65 + (level * 13) }, 15f, 120f)); } else if (characterRace == CharacterRace.BloodElf) { // S.ArcaneResistance += 85f; if (characterClass == CharacterClass.DeathKnight || characterClass == CharacterClass.Rogue || characterClass == CharacterClass.Hunter) S.AddSpecialEffect(new SpecialEffect(Trigger.Use, new Stats() { ManaorEquivRestore = .15f }, 0f, 120f)); else if (characterClass == CharacterClass.Warrior) S.AddSpecialEffect(new SpecialEffect(Trigger.Use, new Stats() { BonusRageGen = 15f }, 0f, 120f)); else S.AddSpecialEffect(new SpecialEffect(Trigger.Use, new Stats() { ManaorEquivRestore = .06f }, 0f, 120f)); } else if (characterRace == CharacterRace.Goblin) { S.PhysicalHaste += 0.01f; S.SpellHaste += 0.01f; // TODO: The damage of the rocket belt proc is dependent on the character's current AP and SP S.AddSpecialEffect(new SpecialEffect(Trigger.Use, new Stats() { FireDamage = 1f + (level * 2) }, 0f, 120f)); } else if (characterRace == CharacterRace.PandarenAlliance || characterRace == CharacterRace.PandarenHorde) { } #endregion _lastStats = S.Clone(); return S; } }
public Magician(string Name, uint MaxHP = 0, uint Age = 0, uint MaxMP = 0, CharacterGender Gender = CharacterGender.Male, CharacterRace Race = CharacterRace.People) : base(Name, MaxHP, Age, Gender, Race) { this.mp = MaxMP; }
private void LeftRight() { GameObject parent; if (Constants.LastEndActionClickedName.Contains("Selector")) { parent = GameObject.Find(Constants.LastEndActionClickedName); } else { parent = GameObject.Find(Constants.LastEndActionClickedName).transform.parent.gameObject; } var bodyPart = parent.name.Substring(Helper.CharacterAfterString(parent.name, "Selector")); var spriteRenderer = parent.transform.Find("Sprite").GetComponent <SpriteRenderer>(); // GENDER // if (bodyPart.Contains("Gender")) { if (!Constants.LastEndActionClickedName.Contains("Selector")) { _gender = _gender == CharacterGender.Male ? CharacterGender.Female : CharacterGender.Male; } spriteRenderer.sprite = Helper.GetSpriteFromSpriteSheet("Sprites/IconsGender_" + _gender.GetHashCode()); if (!Constants.LastEndActionClickedName.Contains("Selector")) { UpdateButtons(); } return; } // RACE // if (bodyPart.Contains("Race")) { var raceId = _race.GetHashCode(); if (Constants.LastEndActionClickedName.Contains("Right")) { ++raceId; } else if (Constants.LastEndActionClickedName.Contains("Left")) { --raceId; } if (raceId < 0) { raceId = Helper.EnumCount <CharacterRace>() - 1; } else if (raceId >= Helper.EnumCount <CharacterRace>()) { raceId = 0; } _race = (CharacterRace)raceId; _raceTextMesh.text = _race.ToString(); if (!Constants.LastEndActionClickedName.Contains("Selector")) { UpdateButtons(); } return; } int id = 0; if (spriteRenderer.sprite != null) { id = int.Parse(spriteRenderer.sprite.name.Substring(Helper.CharacterAfterString(spriteRenderer.sprite.name, "_"))); } if (Constants.LastEndActionClickedName.Contains("Right")) { ++id; } else if (Constants.LastEndActionClickedName.Contains("Left")) { --id; } var customGender = ""; if (bodyPart.Contains("Skin")) { if (id < 0) { id = RacesData.NbSkinTemplates - 1; } else if (id >= RacesData.NbSkinTemplates) { id = 0; } } else if (bodyPart.Contains("Hair")) { if (id < 0) { id = RacesData.NbHairTemplates - 1; } else if (id >= RacesData.NbHairTemplates) { id = 0; } customGender += _gender; } else { if (id < 0) { id = RacesData.NbBodyTemplates - 1; } else if (id >= RacesData.NbBodyTemplates) { id = 0; } } var idMesh = GameObject.Find("Id" + bodyPart); if (idMesh != null) { idMesh.GetComponent <TMPro.TextMeshPro>().text = (id + 1).ToString(); } var customPart = ""; if (bodyPart.Contains("Arm") || bodyPart.Contains("Hand")) { customPart = "Front"; } var tmpRace = "Human"; var path = "Sprites/" + tmpRace + "/" + tmpRace + customGender + customPart + bodyPart + "_" + id; spriteRenderer.sprite = Helper.GetSpriteFromSpriteSheet(path); // SKIN COLOR // if (bodyPart.Contains("Skin")) { for (int i = 0; i < _skinContainer.transform.childCount; ++i) { var child = _skinContainer.transform.GetChild(i); if (child.name.Contains("Naked")) { var childSpriteRenderer = child.GetComponent <SpriteRenderer>(); var skinPath = "Sprites/" + tmpRace + "/" + childSpriteRenderer.sprite.name.Substring(0, childSpriteRenderer.sprite.name.Length - 1) + id; childSpriteRenderer.sprite = Helper.GetSpriteFromSpriteSheet(skinPath); } } return; } // BODY PART // if (customPart == "") { _skinContainer.transform.Find(bodyPart).GetComponent <SpriteRenderer>().sprite = Helper.GetSpriteFromSpriteSheet(path); } else { _skinContainer.transform.Find(customPart + bodyPart).GetComponent <SpriteRenderer>().sprite = Helper.GetSpriteFromSpriteSheet(path); customPart = "Back"; _skinContainer.transform.Find(customPart + bodyPart).GetComponent <SpriteRenderer>().sprite = Helper.GetSpriteFromSpriteSheet("Sprites/" + tmpRace + "/" + tmpRace + customGender + customPart + bodyPart + "_" + id); } }
public void loadCharacterFromTextFile(string fileName) { // TextAsset text = Resources.Load<TextAsset>("Saves/" + fileName); // string data = text.text; string data = Saves.getCharactersString(fileName); string[] components = data.Split(new char[] { ';' }); int curr = 0; string firstName = components[curr++]; string lastName = components[curr++]; int sex = int.Parse(components[curr++]); CharacterSex sexC = (sex == 0 ? CharacterSex.Male : (sex == 1 ? CharacterSex.Female : CharacterSex.Other)); int race = int.Parse(components[curr++]); CharacterRace raceC = CharacterRace.getRace(race == 0 ? RaceName.Berrind : (race == 1 ? RaceName.Ashpian : RaceName.Rorrul)); int background = int.Parse(components[curr++]); CharacterBackground backgroundC = (background == 0 ? (race == 0 ? CharacterBackground.FallenNoble : (race == 1 ? CharacterBackground.Commoner : CharacterBackground.Servant)) : (race == 0 ? CharacterBackground.WhiteGem : (race == 1 ? CharacterBackground.Immigrant : CharacterBackground.Unknown))); int age = int.Parse(components[curr++]); int height = int.Parse(components[curr++]); int weight = int.Parse(components[curr++]); int class1 = int.Parse(components[curr++]); ClassName className = (class1 == 0 ? ClassName.ExSoldier : (class1 == 1 ? ClassName.Engineer : (class1 == 2 ? ClassName.Investigator : (class1 == 3 ? ClassName.Researcher : ClassName.Orator)))); int sturdy = int.Parse(components[curr++]); int perception = int.Parse(components[curr++]); int technique = int.Parse(components[curr++]); int wellVersed = int.Parse(components[curr++]); int athletics = int.Parse(components[curr++]); int melee = int.Parse(components[curr++]); int ranged = int.Parse(components[curr++]); int stealth = int.Parse(components[curr++]); int mechanical = int.Parse(components[curr++]); int medicinal = int.Parse(components[curr++]); int historical = int.Parse(components[curr++]); int political = int.Parse(components[curr++]); Color characterColor = new Color(int.Parse(components[curr++]) / 255.0f, int.Parse(components[curr++]) / 255.0f, int.Parse(components[curr++]) / 255.0f); Debug.Log(characterColor.r + " " + characterColor.g + " " + characterColor.b); Color headColor = new Color(int.Parse(components[curr++]) / 255.0f, int.Parse(components[curr++]) / 255.0f, int.Parse(components[curr++]) / 255.0f); Color primaryColor = new Color(int.Parse(components[curr++]) / 255.0f, int.Parse(components[curr++]) / 255.0f, int.Parse(components[curr++]) / 255.0f); Color secondaryColor = new Color(int.Parse(components[curr++]) / 255.0f, int.Parse(components[curr++]) / 255.0f, int.Parse(components[curr++]) / 255.0f); int hairStyle = 0; int level = 1; int experience = 0; if (curr < components.Length - 1) { hairStyle = int.Parse(components[curr++]); } if (curr < components.Length - 1) { level = int.Parse(components[curr++]); } if (curr < components.Length - 1) { experience = int.Parse(components[curr++]); } int money = 0; int health = 100000; int composure = 100000; int numFeatures = 0; int numItems = 0; int focus = 0; if (curr < components.Length - 1) { money = int.Parse(components[curr++]); } if (curr < components.Length - 1) { health = int.Parse(components[curr++]); } if (curr < components.Length - 1) { composure = int.Parse(components[curr++]); } if (curr < components.Length - 1) { numFeatures = int.Parse(components[curr++]); } int[] features = new int[numFeatures]; for (int n = 0; n < numFeatures; n++) { if (curr < components.Length - 1) { features[n] = int.Parse(components[curr++]); } } if (curr < components.Length - 1) { focus = int.Parse(components[curr++]); } if (curr < components.Length - 1) { numItems = int.Parse(components[curr++]); } personalInfo = new PersonalInformation(new CharacterName(firstName, lastName), sexC, raceC, backgroundC, new CharacterAge(age), new CharacterHeight(height), new CharacterWeight(weight), new CharacterHairStyle(hairStyle)); characterProgress = new CharacterProgress(CharacterClass.getClass(className)); abilityScores = new AbilityScores(sturdy, perception, technique, wellVersed); combatScores = new CombatScores(abilityScores, personalInfo, characterProgress); skillScores = new SkillScores(combatScores, characterProgress); CharacterColors characterColors = new CharacterColors(characterColor, headColor, primaryColor, secondaryColor); characterSheet = new CharacterSheet(abilityScores, personalInfo, characterProgress, combatScores, skillScores, characterColors, this, characterLoadout); skillScores.incrementScore(Skill.Athletics, athletics); skillScores.incrementScore(Skill.Melee, melee); skillScores.incrementScore(Skill.Ranged, ranged); skillScores.incrementScore(Skill.Stealth, stealth); skillScores.incrementScore(Skill.Mechanical, mechanical); skillScores.incrementScore(Skill.Medicinal, medicinal); skillScores.incrementScore(Skill.Historical, historical); skillScores.incrementScore(Skill.Political, political); characterProgress.setLevel(level); characterProgress.setExperience(experience); characterSheet.inventory.purse.receiveMoney(money); combatScores.setHealth(health); combatScores.setComposure(composure); characterProgress.getCharacterClass().chosenFeatures = features; characterProgress.setWeaponFocus(focus); Inventory inv = characterSheet.inventory; for (int n = 0; n < numItems; n++) { int slot = int.Parse(components[curr++]); ItemCode code = (ItemCode)int.Parse(components[curr++]); string itemData = components[curr++]; Item i = Item.deserializeItem(code, itemData); if (slot < 100) { if (inv.inventory[slot].item != null) { if (inv.itemCanStackWith(inv.inventory[slot].item, i)) { inv.inventory[slot].item.addToStack(i); } } else if (inv.canInsertItemInSlot(i, Inventory.getSlotForIndex(slot))) { inv.insertItemInSlot(i, Inventory.getSlotForIndex(slot)); } } else { characterSheet.characterLoadout.setItemInSlot(getArmorSlot(slot), i); } //Inventory stuff } //Right Weapon = 100; //Left Weapon = 110; //Head = 120; //Shoulder = 130; //Chest = 140; //Legs = 150; //Boots = 160; //Gloves = 170; if (curr < components.Length - 1) { characterProgress.setFavoredRace(int.Parse(components[curr++])); } }
private void CacheRelevantItems(CalculationsBase model, Character character, bool ignoreFilters = false) { List<Item> itemList = new List<Item>(AllItems).FindAll(new Predicate<Item>( delegate(Item item) { return model.IsItemRelevant(item) // Model Relevance && item.FitsFaction(character.Race) // Faction Relevance && (ignoreFilters || ItemFilter.IsItemRelevant(model, item)) // Filters Relevance && character.ItemMatchesiLvlCheck(item) // iLvl check from UI Filter (non-tree) && character.ItemMatchesBindCheck(item) // Bind check from UI Filter (non-tree) && character.ItemMatchesProfCheck(item) // Prof check from UI Filter (non-tree) && character.ItemMatchesDropCheck(item); // Drop check from UI Filter (non-tree) })); cachedRelevantItems = itemList.ToArray(); List<Optimizer.SuffixItem> suffixItemList = new List<Optimizer.SuffixItem>(); foreach (var item in cachedRelevantItems) { if (item.AllowedRandomSuffixes == null || item.AllowedRandomSuffixes.Count == 0) { suffixItemList.Add(new Optimizer.SuffixItem() { Item = item, RandomSuffixId = 0 }); } else { foreach (var suffix in item.AllowedRandomSuffixes) { suffixItemList.Add(new Optimizer.SuffixItem() { Item = item, RandomSuffixId = suffix }); } } } cachedRelevantSuffixItems = suffixItemList.ToArray(); lastModel = model; lastRace = character.Race; }
public void Load(string id) { MongoUtils.MongoData.ConnectToDatabase(); MongoDatabase characterDB = MongoUtils.MongoData.GetDatabase("Characters"); MongoCollection characterCollection = characterDB.GetCollection<BsonDocument>("PlayerCharacter"); IMongoQuery query = Query.EQ("_id", ObjectId.Parse(id)); BsonDocument found = characterCollection.FindOneAs<BsonDocument>(query); ID = found["_id"].AsObjectId.ToString(); FirstName = found["FirstName"].AsString.CamelCaseWord(); LastName = found["LastName"].AsString.CamelCaseWord(); _class = (CharacterClass)Enum.Parse(typeof(CharacterClass), found["Class"].AsString.CamelCaseWord()); _race = (CharacterRace)Enum.Parse(typeof(CharacterRace), found["Race"].AsString.CamelCaseWord()); _gender = (Genders)Enum.Parse(typeof(Genders), found["Gender"].AsString.CamelCaseWord()); _skinType = (SkinType)Enum.Parse(typeof(SkinType), found["SkinType"].AsString.CamelCaseWord()); _skinColor = (SkinColors)Enum.Parse(typeof(SkinColors), found["SkinColor"].AsString.CamelCaseWord()); _skinType = (SkinType)Enum.Parse(typeof(SkinType), found["SkinType"].AsString.CamelCaseWord()); _hairColor = (HairColors)Enum.Parse(typeof(HairColors), found["HairColor"].AsString.CamelCaseWord()); _eyeColor = (EyeColors)Enum.Parse(typeof(EyeColors), found["EyeColor"].AsString.CamelCaseWord()); Height = found["Height"].AsDouble; Weight = found["Weight"].AsDouble; _stanceState = (CharacterStanceState)Enum.Parse(typeof(CharacterStanceState), found["StanceState"].AsString.CamelCaseWord()); _actionState = (CharacterActionState)Enum.Parse(typeof(CharacterActionState), found["ActionState"].AsString.CamelCaseWord()); Description = found["Description"].AsString; Location = found["Location"].AsString; Password = found["Password"].AsString; IsNPC = found["IsNPC"].AsBoolean; Experience = found["Experience"].AsInt64; NextLevelExperience = found["NextLevelExperience"].AsInt64; Level = found["Level"].AsInt32; Leveled = found["Leveled"].AsBoolean; PointsToSpend = found["PointsToSpend"].AsInt32; MainHand = found["MainHand"].AsString != "" ? found["MainHand"].AsString : null; Title = found.Contains("Title") ? found["Title"].AsString : ""; KillerID = found.Contains("KillerID") ? found["KillerID"].AsString : ""; BsonArray playerAttributes = found["Attributes"].AsBsonArray; BsonArray inventoryList = found["Inventory"].AsBsonArray; BsonArray equipmentList = found["Equipment"].AsBsonArray; BsonArray bonusesList = found["Bonuses"].AsBsonArray; if (playerAttributes != null) { foreach (BsonDocument attrib in playerAttributes) { if (!this.Attributes.ContainsKey(attrib["Name"].ToString())) { Attribute tempAttrib = new Attribute(); tempAttrib.Name = attrib["Name"].ToString(); tempAttrib.Value = attrib["Value"].AsDouble; tempAttrib.Max = attrib["Max"].AsDouble ; tempAttrib.RegenRate = attrib["RegenRate"].AsDouble; tempAttrib.Rank = attrib["Rank"].AsInt32; this.Attributes.Add(tempAttrib.Name, tempAttrib); } else { this.Attributes[attrib["Name"].ToString()].Max = attrib["Max"].AsDouble; this.Attributes[attrib["Name"].ToString()].Value = attrib["Value"].AsDouble; this.Attributes[attrib["Name"].ToString()].RegenRate = attrib["RegenRate"].AsDouble; this.Attributes[attrib["Name"].ToString()].Rank = attrib["Rank"].AsInt32; } } } if (inventoryList.Count > 0) { foreach (BsonDocument item in inventoryList) { Items.Iitem fullItem = Items.Items.GetByID(item["_id"].AsObjectId.ToString()); if (!Inventory.inventory.Contains(fullItem)) { Inventory.AddItemToInventory(fullItem); } } } if (equipmentList.Count > 0) { foreach (BsonDocument item in equipmentList) { Items.Iitem fullItem = Items.Items.GetByID(item["_id"].AsObjectId.ToString()); if (!Equipment.equipped.ContainsKey(fullItem.WornOn)) { Equipment.EquipItem(fullItem, this.Inventory); } } } if (bonusesList.Count > 0) { Bonuses.LoadFromBson(bonusesList); } }
public void loadFromInfo() { CharacterRace race = (CharacterRace)(m_characterInfo["RaceId"] as long?); CharacterClass charClass = (CharacterClass)(m_characterInfo["ClassId"] as long?); // it might be possible to get this from the Locale field, but I'd need data from the other regions CharacterRegion charRegion = CharacterRegion.US; m_character = new Character(m_sName, m_sRealm, charRegion, race, new BossOptions(), getGearStringBySlot(m_characterInfo, "Head", false), getGearStringBySlot(m_characterInfo, "Neck", false), getGearStringBySlot(m_characterInfo, "Shoulder", false), getGearStringBySlot(m_characterInfo, "Back", false), getGearStringBySlot(m_characterInfo, "Chest", false), getGearStringBySlot(m_characterInfo, "Shirt", false), getGearStringBySlot(m_characterInfo, "Tabard", false), getGearStringBySlot(m_characterInfo, "Wrist", false), getGearStringBySlot(m_characterInfo, "Hands", false), getGearStringBySlot(m_characterInfo, "Waist", false), getGearStringBySlot(m_characterInfo, "Legs", false), getGearStringBySlot(m_characterInfo, "Feet", false), getGearStringBySlot(m_characterInfo, "Finger0", false), getGearStringBySlot(m_characterInfo, "Finger1", false), getGearStringBySlot(m_characterInfo, "Trinket0", false), getGearStringBySlot(m_characterInfo, "Trinket1", false), getGearStringBySlot(m_characterInfo, "MainHand", false), getGearStringBySlot(m_characterInfo, "SecondaryHand", false), getGearStringBySlot(m_characterInfo, "Ranged", false), getGearStringBySlot(m_characterInfo, "Ammo", false), null // Not sure what projectile bag is called /*null, //TODO: Find ExtraWristSocket * null, //TODO: Find ExtraHandsSocket * null, //TODO: Find ExtraWaistSocket * getEnchantBySlot(characterInfo, "Head"), * getEnchantBySlot(characterInfo, "Shoulder"), * getEnchantBySlot(characterInfo, "Back"), * getEnchantBySlot(characterInfo, "Chest"), * getEnchantBySlot(characterInfo, "Wrist"), * getEnchantBySlot(characterInfo, "Hands"), * getEnchantBySlot(characterInfo, "Legs"), * getEnchantBySlot(characterInfo, "Feet"), * getEnchantBySlot(characterInfo, "Finger0"), * getEnchantBySlot(characterInfo, "Finger1"), * getEnchantBySlot(characterInfo, "MainHand"), * getEnchantBySlot(characterInfo, "SecondaryHand"), * getEnchantBySlot(characterInfo, "Ranged")*/ ); // set the character class Character.Class = charClass; // only try and load the talents if they actually have them if (m_iLevel >= 10) { // create an empty talent tree switch (charClass) { case CharacterClass.Warrior: m_character.WarriorTalents = new WarriorTalents(); break; case CharacterClass.Paladin: m_character.PaladinTalents = new PaladinTalents(); break; case CharacterClass.Hunter: m_character.HunterTalents = new HunterTalents(); break; case CharacterClass.Rogue: m_character.RogueTalents = new RogueTalents(); break; case CharacterClass.Priest: m_character.PriestTalents = new PriestTalents(); break; case CharacterClass.Shaman: m_character.ShamanTalents = new ShamanTalents(); break; case CharacterClass.Mage: m_character.MageTalents = new MageTalents(); break; case CharacterClass.Warlock: m_character.WarlockTalents = new WarlockTalents(); break; case CharacterClass.Druid: m_character.DruidTalents = new DruidTalents(); break; case CharacterClass.DeathKnight: m_character.DeathKnightTalents = new DeathKnightTalents(); break; default: break; } // load up the talents setTalentsFromTree(m_characterInfo); } // Populate available items // Note that some of these items cannot be enchanted // But they should correctly return ".0" for their enchants. List <string> asOptimizableItems = new List <string>(); addEquippedItemForOptimization(asOptimizableItems, m_characterInfo, "Head"); addEquippedItemForOptimization(asOptimizableItems, m_characterInfo, "Neck"); addEquippedItemForOptimization(asOptimizableItems, m_characterInfo, "Shoulder"); addEquippedItemForOptimization(asOptimizableItems, m_characterInfo, "Back"); addEquippedItemForOptimization(asOptimizableItems, m_characterInfo, "Chest"); addEquippedItemForOptimization(asOptimizableItems, m_characterInfo, "Shirt"); addEquippedItemForOptimization(asOptimizableItems, m_characterInfo, "Tabard"); addEquippedItemForOptimization(asOptimizableItems, m_characterInfo, "Wrist"); addEquippedItemForOptimization(asOptimizableItems, m_characterInfo, "Hands"); addEquippedItemForOptimization(asOptimizableItems, m_characterInfo, "Waist"); addEquippedItemForOptimization(asOptimizableItems, m_characterInfo, "Legs"); addEquippedItemForOptimization(asOptimizableItems, m_characterInfo, "Feet"); addEquippedItemForOptimization(asOptimizableItems, m_characterInfo, "Finger0"); addEquippedItemForOptimization(asOptimizableItems, m_characterInfo, "Finger1"); addEquippedItemForOptimization(asOptimizableItems, m_characterInfo, "Trinket0"); addEquippedItemForOptimization(asOptimizableItems, m_characterInfo, "Trinket1"); addEquippedItemForOptimization(asOptimizableItems, m_characterInfo, "MainHand"); addEquippedItemForOptimization(asOptimizableItems, m_characterInfo, "SecondaryHand"); addEquippedItemForOptimization(asOptimizableItems, m_characterInfo, "Ranged"); addEquippedItemForOptimization(asOptimizableItems, m_characterInfo, "Ammo"); addPossessionsForOptimization(asOptimizableItems, m_characterInfo); m_character.AvailableItems = asOptimizableItems; }
public Character(CharacterRace race, CharacterClass characterClass, Genders gender, Languages language, SkinColors skinColor, SkinType skinType, HairColors hairColor, EyeColors eyeColor, BodyBuild build) { Class = characterClass; Race = race; Gender = gender; SkinColor = skinColor; SkinType = skinType; HairColor = hairColor; EyeColor = eyeColor; Build = build; _koCount = new Tuple<int, DateTime>(0, DateTime.Now); _actionState = CharacterActionState.None; _stanceState = CharacterStanceState.Standing; _primaryLanguage = language; KnownLanguages = new HashSet<Languages>(); KnownLanguages.Add(_primaryLanguage); FirstName = ""; LastName = ""; Description = ""; Age = 17; //Do we want an age? And are we going to advance it every in game year? Weight = 180.0d; //pounds or kilos? Height = 70.0d; //inches or centimeters? Location = "A1000"; InCombat = false; LastCombatTime = DateTime.MinValue.ToUniversalTime(); IsNPC = false; Leveled = false; MainHand = "WIELD_RIGHT"; NextLevelExperience = 300; Level = 1; Experience = 0; PointsToSpend = 0; Inventory = new Inventory(); Equipment = new Equipment(); Bonuses = new Dictionary<BonusTypes, Bonus>(); StatBonus = new StatBonuses(); StatBonus.Bonuses = Bonuses; Inventory.playerID = Id; Equipment.playerID = Id; Attributes = new List<Attribute>(); Attributes.Add(new Attribute(150, "Hitpoints", 150, 0.1, 1)); Attributes.Add(new Attribute(10, "Dexterity", 5, 0, 1)); Attributes.Add(new Attribute(10, "Strength", 5, 0, 1)); Attributes.Add(new Attribute(10, "Intelligence", 5, 0, 1)); Attributes.Add( new Attribute(10, "Endurance", 5, 0, 1)); Attributes.Add(new Attribute(10, "Charisma", 5, 0, 1)); SubAttributes = new Dictionary<string, double>(); SubAttributes.Add("Agility", 1); SubAttributes.Add("Toughness", 1); SubAttributes.Add("Cunning", 1); SubAttributes.Add("Wisdom", 1); SubAttributes.Add("Leadership", 1); }
protected void AssertStatCorrect(Func <Stats, float> property, float expected, CharacterRace race) { _character.Race = race; AssertStatCorrect(property, expected); }
/// <inheritdoc /> public CharacterScreenData([NotNull] ObjectGuid characterGuid, [NotNull] string characterName, CharacterRace race, CharacterClass @class, CharacterGender gender, [NotNull] byte[] unknownBytesOne, byte characterLevel, [NotNull] TempLocationStructure location, uint guildId, uint characterFlags) { CharacterGuid = characterGuid ?? throw new ArgumentNullException(nameof(characterGuid)); CharacterName = characterName ?? throw new ArgumentNullException(nameof(characterName)); Race = race; Class = @class; Gender = gender; UnknownBytesOne = unknownBytesOne ?? throw new ArgumentNullException(nameof(unknownBytesOne)); CharacterLevel = characterLevel; Location = location ?? throw new ArgumentNullException(nameof(location)); GuildId = guildId; CharacterFlags = characterFlags; }