// Applies an XP bonus to a support skill if the proper weapon and armor are chosen. static void ApplyJobBonusSkillXP(uint player, int highestRank, int baseXP, Dictionary <SkillType, PlayerSkill> playerSkills) { // Get item in right hand or gloves, if empty. var weapon = GetItemInSlot(InventorySlot.RightHand, player); if (!GetIsObjectValid(weapon)) { weapon = GetItemInSlot(InventorySlot.Arms, player); } var armor = GetItemInSlot(InventorySlot.Chest, player); if (!GetIsObjectValid(armor)) { return; } var armorType = ArmorType.Invalid; for (var ip = GetFirstItemProperty(armor); GetIsItemPropertyValid(ip); ip = GetNextItemProperty(armor)) { if (GetItemPropertyType(ip) != ItemPropertyType.ArmorType) { continue; } armorType = (ArmorType)GetItemPropertySubType(ip); break; } var baseItem = GetBaseItemType(weapon); var key = new Tuple <BaseItem, ArmorType>(baseItem, armorType); if (!_weaponAndArmorSkillMapping.ContainsKey(key)) { return; } var skill = _weaponAndArmorSkillMapping[key]; var xp = CalculateAdjustedXP(highestRank, baseXP, skill, 2, 1, playerSkills); Skill.GiveSkillXP(player, skill, xp); }
public static void DebugGiveXP() { var player = GetLastUsedBy(); Skill.GiveSkillXP(player, SkillType.Longsword, 5000); }