// This file needs more than just 'std' updates uint16 Mob::MaxSkill_weapon(uint16 skillid, uint16 class_, uint16 level) const { if (skillid > HIGHEST_SKILL) { return 0; } uint16 r_value = 0; switch (skillid) { case _1H_BLUNT: case _2H_BLUNT: case PIERCING: case HAND_TO_HAND: case _1H_SLASHING: case _2H_SLASHING: { switch (class_) { // Pure melee classes case WARRIOR: case WARRIORGM: { r_value = 5 + (level * 5); if ( level < 51 && r_value > 200) { r_value = 200; } if ( level > 50 && r_value > 250 ) { r_value = 250; } switch (skillid) { case PIERCING: { if ( r_value > 240 ) { r_value = 240; } break; } case HAND_TO_HAND: { if ( r_value > 100 ) { r_value = 100; } break; } default: break; } break; } case MONK: case MONKGM: { r_value = 5 + (level * 5); if ( level < 51 && r_value > 240) if ( r_value > 240 ) { r_value = 240; } switch (skillid) { case HAND_TO_HAND: { if ( r_value > 225 && level < 51 ) { r_value = 225; } break; } case PIERCING: case _1H_SLASHING: case _2H_SLASHING: { r_value = 0; break; } default: break; } break; } case ROGUE: case ROGUEGM: { r_value = 5 + (level * 5); if ( level > 50 && r_value > 250 ) { r_value = 250; } if ( level < 51 ) { if ( r_value > 200 && skillid != PIERCING ) { r_value = 200; } if ( r_value > 210 && skillid == PIERCING ) { r_value = 210; } } if (skillid == HAND_TO_HAND && r_value > 100) { r_value = 100; } break; } case BERSERKER: case BERSERKERGM: { r_value = 5 + (level * 5); if ( level < 51 && r_value > 240) { r_value = 240; } switch (skillid) { case HAND_TO_HAND: { if ( r_value > 198) { r_value = 198; } break; } case PIERCING: { if ( r_value > 240) { r_value = 240; } break; } case _2H_BLUNT: case _2H_SLASHING: { if ( r_value > 252 ) { r_value = 252; } break; } default: r_value = 0; break; } break; } // Priest classes case CLERIC: case CLERICGM: { r_value = 4 + (level * 4); if ( r_value > 175 ) { r_value = 175; } switch (skillid) { case HAND_TO_HAND: { if ( r_value > 75 ) { r_value = 75; } break; } case PIERCING: case _1H_SLASHING: case _2H_SLASHING: { r_value = 0; break; } default: break; } break; } case DRUID: case DRUIDGM: { r_value = 4 + (level * 4); if ( r_value > 175 ) { r_value = 175; } switch (skillid) { case HAND_TO_HAND: { if ( r_value > 75 ) { r_value = 75; } } case PIERCING: case _2H_SLASHING: { r_value = 0; break; } default: break; } break; } case SHAMAN: case SHAMANGM: { r_value = 4 + (level * 4); if ( r_value > 200 ) { r_value = 200; } switch (skillid) { case HAND_TO_HAND: { if ( r_value > 75 ) { r_value = 75; } } case _1H_SLASHING: case _2H_SLASHING: { r_value = 0; break; } default: break; } break; } // Hybrids case RANGER: case RANGERGM: { r_value = 5 + (level * 5); if ( level > 50 ) { if ( r_value > 250 ) { r_value = 250; } switch (skillid) { case PIERCING: { if ( r_value > 240 ) { r_value = 240; } break; } default: break; } } else if ( level < 51 ) { if ( r_value > 200 ) { r_value = 200; } } switch (skillid) { case HAND_TO_HAND: { if ( r_value > 100 ) { r_value = 100; } break; } default: break; } break; } case PALADIN: case PALADINGM: case SHADOWKNIGHT: case SHADOWKNIGHTGM: { r_value = 5 + (level * 5); if ( level > 50 && r_value > 225 ) { r_value = 225; } if ( level < 51 && r_value > 200 ) { r_value = 200; } switch (skillid) { case HAND_TO_HAND: { if ( r_value > 100 ) { r_value = 100; } break; } default: break; } break; } case BARD: case BARDGM: { r_value = 5 + (level * 5); if ( level > 51 && r_value > 225 ) { r_value = 225; } if ( level < 51 && r_value > 200 ) { r_value = 200; } switch (skillid) { case HAND_TO_HAND: { if ( r_value > 100 ) { r_value = 100; } break; } case _2H_BLUNT: case _2H_SLASHING: { r_value = 0; } default: break; } break; } case BEASTLORD: case BEASTLORDGM: { r_value = 4 + (level * 4); if ( level > 51 ) { if ( r_value > 225 ) { r_value = 225; } } if ( level < 51 && r_value > 200 ) { r_value = 200; } switch (skillid) { case HAND_TO_HAND: { r_value = 5 + (level * 5); // Beastlords use different max skill formula only for h2h 200/250 if ( level < 51 ) { r_value = 200; } break; } case _1H_SLASHING: case _2H_SLASHING: { r_value = 0; break; } default: break; } if ( r_value > 250 ) { r_value = 250; } break; } // Pure casters case NECROMANCER: case NECROMANCERGM: case WIZARD: case WIZARDGM: case MAGICIAN: case MAGICIANGM: case ENCHANTER: case ENCHANTERGM: { r_value = 3 + (level * 3); if ( r_value > 110 ) { r_value = 110; } switch (skillid) { case HAND_TO_HAND: { if ( r_value > 75 ) { r_value = 75; } } case _1H_SLASHING: case _2H_SLASHING: { r_value = 0; break; } default: break; } break; } default: #if EQDEBUG std::cout << "MaxSkill_Weapon() Unknown class: " << class_ << std::endl; #endif break; } break;// Switch Class } default: #if EQDEBUG std::cout << "Unknown weapon skill: " << skillid << std::endl; #endif break; }// Switch skill if (r_value > 252) { r_value = 252; } return r_value; } uint16 Mob::MaxSkill_offensive(uint16 skillid, uint16 class_, uint16 level) const { uint16 r_value = 0; switch (skillid) { case OFFENSE: { switch (class_) { // Melee case WARRIOR: case WARRIORGM: case BERSERKER: case BERSERKERGM: case ROGUE: case ROGUEGM: { // 210 252 5*level+5 r_value = ((level * 5) + 5); if ( level < 51 ) { if (r_value > 210) { r_value = 210; } } if (r_value > 252) { r_value = 252; } break; } case MONK: case MONKGM: { // 230 252 5*level+5 r_value = ((level * 5) + 5); if ( level < 51 ) { if (r_value > 230) { r_value = 230; } } if (r_value > 252) { r_value = 252; } break; } // Priest case DRUID: case DRUIDGM: case SHAMAN: case SHAMANGM: case CLERIC: case CLERICGM: { // 200 200 4*level+4 r_value = ((level * 4) + 4); if (r_value > 200) { r_value = 200; } break; } // Hybrid case BEASTLORD: case BEASTLORDGM: { // 200 252 5*level+5 r_value = ((level * 5) + 5); if ( level < 51 ) { if (r_value > 200) { r_value = 200; } } if (r_value > 252) { r_value = 252; } break; } case PALADIN: case PALADINGM: case SHADOWKNIGHT: case SHADOWKNIGHTGM: case BARD: case BARDGM: { // 200 225 5*level+5 r_value = ((level * 5) + 5); if ( level < 51 ) { if (r_value > 200) { r_value = 200; } } if (r_value > 225) { r_value = 225; } break; } case RANGER: case RANGERGM: { // 210 252 5*level+5 r_value = ((level * 5) + 5); if ( level < 51 ) { if (r_value > 210) { r_value = 210; } } if (r_value > 252) { r_value = 252; } break; } // Pure case NECROMANCER: case NECROMANCERGM: case WIZARD: case WIZARDGM: case MAGICIAN: case MAGICIANGM: case ENCHANTER: case ENCHANTERGM: { // 140 140 level*4 r_value = (level * 4); if (r_value > 140) { r_value = 140; } break; } default: break; } break; } case THROWING: { switch (class_) { // Melee case BERSERKER: case BERSERKERGM: case ROGUE: case ROGUEGM: { // 220 250 r_value = ((level * 5) + 5); if ( level < 51 ) { if (r_value > 220) { r_value = 220; } } if (r_value > 250) { r_value = 250; } break; } case WARRIOR: case WARRIORGM: case MONK: case MONKGM: { // 113 200 r_value = ((level * 5) + 5); if ( level < 51 ) { if (r_value > 113) { r_value = 113; } } if (r_value > 200) { r_value = 200; } break; } // Hybrid case BEASTLORD: case BEASTLORDGM: case BARD: case BARDGM: case RANGER: case RANGERGM: { // 113 r_value = ((level * 5) + 5); if ( r_value > 113 ) { r_value = 113; } break; } // Pure case NECROMANCER: case NECROMANCERGM: case WIZARD: case WIZARDGM: case MAGICIAN: case MAGICIANGM: case ENCHANTER: case ENCHANTERGM: { // 75 r_value = ((level * 3) + 3); if ( r_value > 75 ) { r_value = 75; } break; } // No skill classes case DRUID: case DRUIDGM: case SHAMAN: case SHAMANGM: case CLERIC: case CLERICGM: case PALADIN: case PALADINGM: case SHADOWKNIGHT: case SHADOWKNIGHTGM: default: r_value = 0; break; } break; } ///////////////////////////////////////////////// case ARCHERY: { switch (class_) { // Melee case ROGUE: case ROGUEGM: case WARRIOR: case WARRIORGM: { // 200 240 r_value = ((level * 5) + 5); if ( level < 51 && r_value > 200) { r_value = 200; } if (r_value > 240) { r_value = 240; } break; } // Hybrid case PALADIN: case PALADINGM: case SHADOWKNIGHT: case SHADOWKNIGHTGM: { // 75 75 r_value = ((level * 5) + 5); if ( r_value > 75 ) { r_value = 75; } break; } case RANGER: case RANGERGM: { // 240 240 r_value = ((level * 5) + 5); if ( r_value > 240 ) { r_value = 240; } break; } // Pure // No skill classes // Melee case MONK: case MONKGM: // Priest case DRUID: case DRUIDGM: case SHAMAN: case SHAMANGM: case CLERIC: case CLERICGM: // Pure case NECROMANCER: case NECROMANCERGM: case WIZARD: case WIZARDGM: case MAGICIAN: case MAGICIANGM: case ENCHANTER: case ENCHANTERGM: // Hybrid case BEASTLORD: case BEASTLORDGM: case BARD: case BARDGM: default: r_value = 0; break; } break; } ///////////////////////////////////////////////// case DOUBLE_ATTACK: { switch (class_) { // Melee case ROGUE: case ROGUEGM: { // 16 200 240 r_value = ((level * 5) + 5); if ( level < 16 ) { r_value = 0; } if ( level < 51 ) { if (r_value > 200) { r_value = 200; } } if (r_value > 240) { r_value = 240; } break; } case BERSERKER: case BERSERKERGM: case WARRIOR: case WARRIORGM: { // 15 205 245 r_value = ((level * 5) + 5); if ( level < 15 ) { r_value = 0; } if ( level < 51 ) { if (r_value > 200) { r_value = 200; } } if (r_value > 245) { r_value = 245; } break; } case MONK: case MONKGM: { // 15 210 250 r_value = ((level * 5) + 5); if ( level < 15 ) { r_value = 0; } if ( level < 51 ) { if (r_value > 210) { r_value = 210; } } if (r_value > 250) { r_value = 250; } break; } // Hybrid case PALADIN: case PALADINGM: case SHADOWKNIGHT: case SHADOWKNIGHTGM: { // 20 200 235 r_value = ((level * 5) + 5); if ( level < 20 ) { r_value = 0; } if ( level < 51 ) { if (r_value > 200) { r_value = 200; } } if (r_value > 235) { r_value = 235; } break; } case RANGER: case RANGERGM: { // 20 200 245 r_value = ((level * 5) + 5); if ( level < 20 ) { r_value = 0; } if ( level < 51 ) { if (r_value > 200) { r_value = 200; } } if (r_value > 245) { r_value = 245; } break; } // Pure // No skill classes // Melee // Priest case DRUID: case DRUIDGM: case SHAMAN: case SHAMANGM: case CLERIC: case CLERICGM: // Pure case NECROMANCER: case NECROMANCERGM: case WIZARD: case WIZARDGM: case MAGICIAN: case MAGICIANGM: case ENCHANTER: case ENCHANTERGM: // Hybrid case BEASTLORD: case BEASTLORDGM: case BARD: case BARDGM: default: r_value = 0; break; } break; } ///////////////////////////////////////////////// case DUAL_WIELD: { switch (class_) { // Melee case MONK: case MONKGM: { // 1 252 252 r_value = level * 7; // This can't be right can it? break ; } case WARRIOR: case WARRIORGM: case ROGUE: case ROGUEGM: { // 15 210 245 r_value = ((level * 5) + 5); if ( level < 13 ) { r_value = 0; } if ( level < 51 ) { if (r_value > 210) { r_value = 210; } } if (r_value > 245) { r_value = 245; } break; } // Hybrid case BEASTLORD: case BEASTLORDGM: // 17 210 245 case RANGER: case RANGERGM: { // 17 210 245 r_value = ((level * 5) + 5); if ( level < 17 ) { r_value = 0; } if ( level < 51 ) { if (r_value > 210) { r_value = 210; } } if (r_value > 245) { r_value = 245; } break; } case BARD: case BARDGM: { // 17 210 210 r_value = ((level * 5) + 5); if ( level < 17 ) { r_value = 0; } if (r_value > 210) { r_value = 210; } break; } // No skill classes // Melee // Priest case DRUID: case DRUIDGM: case SHAMAN: case SHAMANGM: case CLERIC: case CLERICGM: // Pure case NECROMANCER: case NECROMANCERGM: case WIZARD: case WIZARDGM: case MAGICIAN: case MAGICIANGM: case ENCHANTER: case ENCHANTERGM: // Hybrid case PALADIN: case PALADINGM: case SHADOWKNIGHT: case SHADOWKNIGHTGM: default: { r_value = 0; break; } }// end Class switch break; } // end case DUAL_WIELD: //////////////////////////////////////////////////////// case KICK: { switch (class_) { // Melee case BERSERKER: case BERSERKERGM: case WARRIOR: case WARRIORGM: { // 1 149 210 r_value = ((level * 5) + 5); if ( level < 51 ) { if (r_value > 149) { r_value = 149; } } if (r_value > 210) { r_value = 210; } break; } case MONK: case MONKGM: { // 1 200 250 r_value = ((level * 5) + 5); if ( level < 51 ) { if (r_value > 200) { r_value = 200; } } if (r_value > 250) { r_value = 250; } break; } // Hybrid case RANGER: case RANGERGM: { // 5 149 205 r_value = ((level * 5) + 5); if ( level < 5 ) { r_value = 0; } if ( level < 51 ) { if (r_value > 149) { r_value = 149; } } if (r_value > 205) { r_value = 205; } break; } case BEASTLORD: case BEASTLORDGM: { // 5 180 230 r_value = ((level * 5) + 5); if ( level < 5 ) { r_value = 0; } if ( level < 51 ) { if (r_value > 180) { r_value = 180; } } if (r_value > 230) { r_value = 230; } break; } // Pure // No skill classes case ROGUE: case ROGUEGM: // Melee // Priest case DRUID: case DRUIDGM: case SHAMAN: case SHAMANGM: case CLERIC: case CLERICGM: // Pure case NECROMANCER: case NECROMANCERGM: case WIZARD: case WIZARDGM: case MAGICIAN: case MAGICIANGM: case ENCHANTER: case ENCHANTERGM: // Hybrid case PALADIN: case PALADINGM: case SHADOWKNIGHT: case SHADOWKNIGHTGM: case BARD: case BARDGM: default: r_value = 0; break; } break; } //////////////////////////////////////////////////////// case BASH: { r_value = ((level * 5) + 5); switch (class_) { // Melee case WARRIOR: case WARRIORGM: { // 6 220 240 if (level < 6) { r_value = 0; } if (level < 51 && r_value > 220) { r_value = 220; } if (r_value > 240) { r_value = 240; } break; } // Priest case CLERIC: case CLERICGM: { // 25 180 200 if (level < 25) { r_value = 0; } if (level < 51 && r_value > 180) { r_value = 180; } if (r_value > 200) { r_value = 200; } break; } // Hybrid case PALADIN: case PALADINGM: case SHADOWKNIGHT: case SHADOWKNIGHTGM: { // 6 175 200 if (level < 6) { r_value = 0; } if (level < 51 && r_value > 175) { r_value = 175; } if (r_value > 200) { r_value = 200; } break; } // Pure // No skill classes // Melee case MONK: case MONKGM: case ROGUE: case ROGUEGM: // Priest case DRUID: case DRUIDGM: case SHAMAN: case SHAMANGM: // Pure case NECROMANCER: case NECROMANCERGM: case WIZARD: case WIZARDGM: case MAGICIAN: case MAGICIANGM: case ENCHANTER: case ENCHANTERGM: // Hybrid case BEASTLORD: case BEASTLORDGM: case RANGER: case RANGERGM: case BARD: case BARDGM: { // switch (race) { // case BARBARIAN: // case TROLL: //case OGRE:{ // r_value = 50; //break; //} //default: break; //} r_value = 0; break; } } break; } //////////////////////////////////////////////////////// default: #if EQDEBUG >= 1 std::cout << "Unknown Offensive skill: " << skillid << std::endl; #endif break; }// Switch skill if (r_value > 252) { r_value = 252; } return r_value; } uint16 Mob::MaxSkill_defensive(uint16 skillid, uint16 class_, uint16 level) const { uint16 r_value = 0; switch (skillid) { case DEFENSE: { switch (class_) { // Melee case WARRIOR: case WARRIORGM: { // 210 252 5*level+5 r_value = ((level * 5) + 5); if ( level < 51 ) { if (r_value > 210) { r_value = 210; } } if (r_value > 252) { r_value = 252; } break; } case ROGUE: case ROGUEGM: { // 200 252 5*level+5 r_value = ((level * 5) + 5); if ( level < 51 ) { if (r_value > 200) { r_value = 200; } } if (r_value > 252) { r_value = 252; } break; } case MONK: case MONKGM: { // 230 252 5*level+5 r_value = ((level * 5) + 5); if ( level < 51 ) { if (r_value > 230) { r_value = 230; } } if (r_value > 252) { r_value = 252; } break; } case BERSERKER: case BERSERKERGM: { // 230 252 5*level+5 r_value = ((level * 5) + 5); if ( level < 51 ) { if (r_value > 230) { r_value = 230; } } if (r_value > 252) { r_value = 252; } break; } // Priest case DRUID: case DRUIDGM: case SHAMAN: case SHAMANGM: case CLERIC: case CLERICGM: { // 200 200 4*level+4 r_value = ((level * 4) + 4); if (r_value > 200) { r_value = 200; } break; } // Hybrid case BEASTLORD: case BEASTLORDGM: { // 210 252 5*level+5 r_value = ((level * 5) + 5); if ( level < 51 ) { if (r_value > 210) { r_value = 210; } } if (r_value > 252) { r_value = 252; } break; } case PALADIN: case PALADINGM: case SHADOWKNIGHT: case SHADOWKNIGHTGM: { // 210 252 5*level+5 r_value = ((level * 5) + 5); if ( level < 51 ) { if (r_value > 210) { r_value = 210; } } if (r_value > 252) { r_value = 252; } break; } case BARD: case BARDGM: { // 200 252 5*level+5 r_value = ((level * 5) + 5); if ( level < 51 ) { if (r_value > 200) { r_value = 200; } } if (r_value > 252) { r_value = 252; } break; } case RANGER: case RANGERGM: { // 200 200 5*level+5 r_value = ((level * 5) + 5); if (r_value > 200) { r_value = 200; } break; } // Pure case NECROMANCER: case NECROMANCERGM: case WIZARD: case WIZARDGM: case MAGICIAN: case MAGICIANGM: case ENCHANTER: case ENCHANTERGM: { // 145 145 level*4 r_value = (level * 4); if (r_value > 140) { r_value = 140; } break; } default: break; } break; } case PARRY: { switch (class_) { // Melee case ROGUE: case ROGUEGM: { // 12 200 230 r_value = ((level * 5) + 5); if ( level < 12 ) { r_value = 0; } if (r_value > 200 && level < 51 ) { r_value = 200; } if (r_value > 230) { r_value = 230; } break; } case WARRIOR: case WARRIORGM: { // 10 200 230 r_value = ((level * 5) + 5); if ( level < 10 ) { r_value = 0; } if (r_value > 200 && level < 51 ) { r_value = 200; } if (r_value > 230) { r_value = 230; } break; } case BERSERKER: case BERSERKERGM: { r_value = ((level * 5) + 5); if ( level < 10 ) { r_value = 0; } if (r_value > 175) { r_value = 175; } break; } // Hybrid case BARD: case BARDGM: { // 53 0 75 r_value = ((level * 5) + 5); if ( level < 53 ) { r_value = 0; } if (r_value > 75) { r_value = 75; } break; } case PALADIN: case PALADINGM: case SHADOWKNIGHT: case SHADOWKNIGHTGM: { // 17 175 205 r_value = ((level * 5) + 5); if ( level < 17 ) { r_value = 0; } if (r_value > 175 && level < 51 ) { r_value = 175; } if (r_value > 205) { r_value = 205; } break; } case RANGER: case RANGERGM: { // 18 185 220 r_value = ((level * 5) + 5); if ( level < 18 ) { r_value = 0; } if (r_value > 185 && level < 51 ) { r_value = 185; } if (r_value > 220) { r_value = 220; } break; } // Pure // No skill classes // Melee case MONK: case MONKGM: // Priest case DRUID: case DRUIDGM: case SHAMAN: case SHAMANGM: case CLERIC: case CLERICGM: // Pure case NECROMANCER: case NECROMANCERGM: case WIZARD: case WIZARDGM: case MAGICIAN: case MAGICIANGM: case ENCHANTER: case ENCHANTERGM: // Hybrid case BEASTLORD: case BEASTLORDGM: default: r_value = 0; break; } break; } case RIPOSTE: { switch (class_) { // Melee case BERSERKER: case BERSERKERGM: case WARRIOR: case WARRIORGM: { // 25 200 225 r_value = ((level * 5) + 5); if ( level < 25 ) { r_value = 0; } if (r_value > 200 && level < 51 ) { r_value = 200; } if (r_value > 225) { r_value = 225; } break; } case ROGUE: case ROGUEGM: { // 30 200 225 r_value = ((level * 5) + 5); if ( level < 30 ) { r_value = 0; } if (r_value > 200 && level < 51 ) { r_value = 200; } if (r_value > 225) { r_value = 225; } break; } case MONK: case MONKGM: { // 35 200 225 r_value = ((level * 5) + 5); if ( level < 35 ) { r_value = 0; } if (r_value > 200 && level < 51 ) { r_value = 200; } if (r_value > 225) { r_value = 225; } break; } // Hybrid case BEASTLORD: case BEASTLORDGM: { // 40 150 185 r_value = ((level * 5) + 5); if ( level < 40 ) { r_value = 0; } if (r_value > 150 && level < 51 ) { r_value = 150; } if (r_value > 185) { r_value = 185; } break; } case BARD: case BARDGM: { // 58 75 75 r_value = ((level * 5) + 5); if ( level < 58 ) { r_value = 0; } if (r_value > 75) { r_value = 75; } break; } case PALADIN: case PALADINGM: case SHADOWKNIGHT: case SHADOWKNIGHTGM: { // 30 175 200 r_value = ((level * 5) + 5); if ( level < 30 ) { r_value = 0; } if (r_value > 175 && level < 51 ) { r_value = 175; } if (r_value > 200) { r_value = 200; } break; } case RANGER: case RANGERGM: { // 35 150 150 r_value = ((level * 5) + 5); if ( level < 35 ) { r_value = 0; } if (r_value > 150) { r_value = 150; } break; } // Pure // No skill classes // Melee // Priest case DRUID: case DRUIDGM: case SHAMAN: case SHAMANGM: case CLERIC: case CLERICGM: // Pure case NECROMANCER: case NECROMANCERGM: case WIZARD: case WIZARDGM: case MAGICIAN: case MAGICIANGM: case ENCHANTER: case ENCHANTERGM: // Hybrid default: r_value = 0; break; } break; } case DODGE: { switch (class_) { // Melee case BERSERKER: case BERSERKERGM: case WARRIOR: case WARRIORGM: { // 6 140 175 r_value = ((level * 5) + 5); if ( level < 6 ) { r_value = 0; } if (r_value > 140 && level < 51 ) { r_value = 140; } if (r_value > 175) { r_value = 175; } break; } case ROGUE: case ROGUEGM: { // 4 150 210 r_value = ((level * 5) + 5); if ( level < 4 ) { r_value = 0; } if (r_value > 150 && level < 51 ) { r_value = 150; } if (r_value > 210) { r_value = 210; } break; } case MONK: case MONKGM: { // 1 200 230 r_value = ((level * 5) + 5); if (r_value > 200) { r_value = 200; } if (r_value > 230) { r_value = 230; } break; } // Priest case DRUID: case DRUIDGM: case SHAMAN: case SHAMANGM: case CLERIC: case CLERICGM: { // 15 75 75 4*level+4 r_value = ((level * 4) + 4); if ( level < 15 ) { r_value = 0; } if (r_value > 75) { r_value = 75; } break; } // Hybrid case BEASTLORD: case BEASTLORDGM: case PALADIN: case PALADINGM: case SHADOWKNIGHT: case SHADOWKNIGHTGM: case BARD: case BARDGM: { // 10 125 155 5*level+5 r_value = ((level * 5) + 5); if ( level < 10 ) { r_value = 0; } if (r_value > 125 && level < 51 ) { r_value = 125; } if (r_value > 155) { r_value = 155; } break; } case RANGER: case RANGERGM: { // 8 137 170 5*level+5 r_value = ((level * 5) + 5); if ( level < 8 ) { r_value = 0; } if (r_value > 137 && level < 51 ) { r_value = 137; } if (r_value > 170) { r_value = 170; } break; } // Pure case NECROMANCER: case NECROMANCERGM: case WIZARD: case WIZARDGM: case MAGICIAN: case MAGICIANGM: case ENCHANTER: case ENCHANTERGM: { // 22 75 75 3*level+3 r_value = ((level * 3) + 3); if ( level < 22 ) { r_value = 0; } if (r_value > 75) { r_value = 75; } break; } // No skill classes // Melee // Priest // Pure // Hybrid default: break; } break; } // Other case TAUNT: { switch (class_) { // Melee case WARRIOR: case WARRIORGM: { // 1 200 200 r_value = ((level * 5) + 5); if (r_value > 200) { r_value = 200; } break; } // Priest // Hybrid case PALADIN: case PALADINGM: case SHADOWKNIGHT: case SHADOWKNIGHTGM: { // 1 180 180 r_value = ((level * 5) + 5); if (r_value > 180) { r_value = 180; } break; } case RANGER: case RANGERGM: { // 1 150 150 r_value = ((level * 5) + 5); if (r_value > 150) { r_value = 150; } break; } // Pure // No skill classes // Melee case ROGUE: case ROGUEGM: case MONK: case MONKGM: // Priest case DRUID: case DRUIDGM: case SHAMAN: case SHAMANGM: case CLERIC: case CLERICGM: // Pure case NECROMANCER: case NECROMANCERGM: case WIZARD: case WIZARDGM: case MAGICIAN: case MAGICIANGM: case ENCHANTER: case ENCHANTERGM: // Hybrid case BEASTLORD: case BEASTLORDGM: case BARD: case BARDGM: default: break; } break; } case DISARM: { switch (class_) { // Melee case WARRIOR: case WARRIORGM: { // 35 200 200 r_value = ((level * 5) + 5); if (level < 35) { r_value = 0; } if (r_value > 200) { r_value = 200; } break; } case ROGUE: case ROGUEGM: case MONK: case MONKGM: { // 27 200 200 r_value = ((level * 5) + 5); if (level < 27) { r_value = 0; } if (r_value > 200) { r_value = 200; } break; } case BERSERKER: case BERSERKERGM: { // 35 65 65 r_value = ((level * 5) + 5); if (level < 35) { r_value = 0; } if (r_value > 65) { r_value = 65; } break; } // Priest // Hybrid case PALADIN: case PALADINGM: case SHADOWKNIGHT: case SHADOWKNIGHTGM: { // 40 70 70 r_value = ((level * 5) + 5); if (level < 40) { r_value = 0; } if (r_value > 70) { r_value = 70; } break; } case RANGER: case RANGERGM: { // 35 55 55 r_value = ((level * 5) + 5); if (level < 35) { r_value = 0; } if (r_value > 55) { r_value = 55; } break; } // Pure // No skill classes // Melee // Priest case DRUID: case DRUIDGM: case SHAMAN: case SHAMANGM: case CLERIC: case CLERICGM: // Pure case NECROMANCER: case NECROMANCERGM: case WIZARD: case WIZARDGM: case MAGICIAN: case MAGICIANGM: case ENCHANTER: case ENCHANTERGM: // Hybrid case BARD: case BARDGM: case BEASTLORD: case BEASTLORDGM: default: break; } break; } //////////////////////////////////////////////////////// default: #if EQDEBUG std::cout << "Unknown Defensive skill: " << skillid << std::endl; #endif break; }// Switch skill if (r_value > 252) { r_value = 252; } return r_value; } uint16 Mob::MaxSkill_arcane(uint16 skillid, uint16 class_, uint16 level) const { uint16 r_value = 0; switch (skillid) { case MEDITATE: case ABJURE: case ALTERATION: case CHANNELING: case CONJURATION: case DIVINATION: case EVOCATION: { r_value = ((level * 5) + 5); switch (class_) { // Hybrid case RANGER: case RANGERGM: { // 9 235 235 // Channel 9 200 215 // Med 12 185 235 if (level < 9) { r_value = 0; } if (level < 12 && skillid == MEDITATE) { r_value = 0; } if (r_value > 0 && skillid == CHANNELING) { if ( level < 51 && r_value > 200) { r_value = 200; } if (r_value > 215) { r_value = 215; } } if (r_value > 0 && skillid == MEDITATE) { if ( level < 51 && r_value > 185) { r_value = 185; } if (r_value > 235) { r_value = 235; } } break; } case BEASTLORD: case BEASTLORDGM: case PALADIN: case PALADINGM: case SHADOWKNIGHT: case SHADOWKNIGHTGM: { // 9 235 235 // Channel 9 200 220 // Med 12 185 235 if (level < 9) { r_value = 0; } if (level < 12 && skillid == MEDITATE) { r_value = 0; } if (r_value > 0 && skillid == CHANNELING) { if ( level < 51 && r_value > 185) { r_value = 185; } if (r_value > 220) { r_value = 220; } } if (r_value > 0 && skillid == MEDITATE) { if ( level < 51 && r_value > 185) { r_value = 185; } if (r_value > 235) { r_value = 235; } } break; } // Priest case CLERIC: case CLERICGM: case DRUID: case DRUIDGM: case SHAMAN: case SHAMANGM: { // 1 235 235 // Channel 4 200 220 // Med 8 235 252 if (level < 4 && skillid == CHANNELING) { r_value = 0; } if (level < 8 && skillid == MEDITATE) { r_value = 0; } if (r_value > 0 && skillid == CHANNELING) { if ( level < 51 && r_value > 200) { r_value = 200; } if (r_value > 220) { r_value = 220; } } if (r_value > 0 && skillid == MEDITATE) { if ( level < 51 && r_value > 235) { r_value = 235; } if (r_value > 252) { r_value = 252; } } break; } // Int caster case ENCHANTER: case ENCHANTERGM: case MAGICIAN: case MAGICIANGM: case NECROMANCER: case NECROMANCERGM: case WIZARD: case WIZARDGM: { // 1 235 235 // Channel 1 200 220 // Med 4 235 252 if (level < 4 && skillid == MEDITATE) { r_value = 0; } if (r_value > 0 && skillid == CHANNELING) { if ( level < 51 && r_value > 200) { r_value = 200; } if (r_value > 220) { r_value = 220; } } if (r_value > 0 && skillid == MEDITATE) { if ( level < 51 && r_value > 235) { r_value = 235; } if (r_value > 252) { r_value = 252; } } break; } case BARD: case BARDGM: { r_value = 0; if (level > 9 && skillid == MEDITATE) { r_value = 1; } break; } default: // Unknown class r_value = 0; break; }// Class Switch break; } case SPECIALIZE_ABJURE: case SPECIALIZE_ALTERATION: case SPECIALIZE_CONJURATION: case SPECIALIZE_DIVINATION: case SPECIALIZE_EVOCATION: { r_value = ((level * 5) + 5); switch (class_) { // Non-int casters case CLERIC: case CLERICGM: case DRUID: case DRUIDGM: case SHAMAN: case SHAMANGM: if (level < 30) { r_value = 0; break; } // Int caster case ENCHANTER: case ENCHANTERGM: case MAGICIAN: case MAGICIANGM: case NECROMANCER: case NECROMANCERGM: case WIZARD: case WIZARDGM: { if (level < 20) { r_value = 0; break; } //make sure only 1 skill can be over 50 uint16 hskill = 0; uint16 high = 0; uint16 cur; cur = GetSkill(SPECIALIZE_ABJURE); if (cur > high) { hskill = SPECIALIZE_ABJURE; high = cur; } cur = GetSkill(SPECIALIZE_ALTERATION); if (cur > high) { hskill = SPECIALIZE_ALTERATION; high = cur; } cur = GetSkill(SPECIALIZE_CONJURATION); if (cur > high) { hskill = SPECIALIZE_CONJURATION; high = cur; } cur = GetSkill(SPECIALIZE_DIVINATION); if (cur > high) { hskill = SPECIALIZE_DIVINATION; high = cur; } cur = GetSkill(SPECIALIZE_EVOCATION); if (cur > high) { hskill = SPECIALIZE_EVOCATION; high = cur; } if (high > 50 && hskill != skillid) { r_value = 50; break; } if (r_value > 200) { r_value = 200; } break; } default: { r_value = 0; break; } }// Class Switch break; } case RESEARCH: { r_value = ((level * 5) + 5); switch (class_) { // Int caster case ENCHANTER: case ENCHANTERGM: case MAGICIAN: case MAGICIANGM: case NECROMANCER: case NECROMANCERGM: case WIZARD: case WIZARDGM: { // Res 16 200 200 if (level < 16) { r_value = 0; } if (r_value > 200) { r_value = 200; } // FIXME Only let one SPEC go above what ever limit theres supposed to be break; } default: { r_value = 0; break; } }// Class Switch break; } case BRASS_INSTRUMENTS: case SINGING: case STRINGED_INSTRUMENTS: case WIND_INSTRUMENTS: case PERCUSSION_INSTRUMENTS: { switch (class_) { case BARD: case BARDGM: { r_value = ((level * 5) + 5); if (level < 5 && skillid == PERCUSSION_INSTRUMENTS) { r_value = 0; } if (level < 8 && skillid == STRINGED_INSTRUMENTS) { r_value = 0; } if (level < 11 && skillid == BRASS_INSTRUMENTS) { r_value = 0; } if (level < 14 && skillid == WIND_INSTRUMENTS) { r_value = 0; } if (r_value > 235) { r_value = 235; } break; } default: r_value = 0; break; }// Class Switch break; } //////////////////////////////////////////////////////// default: #if EQDEBUG std::cout << "Unknown arcane skill: " << skillid << std::endl; #endif break; }// Switch skill if (r_value > 252) { r_value = 252; } return r_value; } uint16 Mob::MaxSkill_class(uint16 skillid, uint16 class_, uint16 level) const { uint16 r_value = 0; switch (skillid) { // Rogue case APPLY_POISON: case MAKE_POISON: case PICK_POCKETS: case BACKSTAB: { switch (class_) { // Melee case ROGUE: case ROGUEGM: { r_value = ((level * 5) + 5); switch (skillid) { case APPLY_POISON: { // 18 200 200 if (level < 18) { r_value = 0; } if (r_value > 200) { r_value = 200; } break; } case MAKE_POISON: { // 20 200 250 if (level < 20) { r_value = 0; } if (level < 51 && r_value > 200) { r_value = 200; } if (r_value > 250) { r_value = 250; } break; } case PICK_POCKETS: { // 7 200 210 if (level < 7) { r_value = 0; } if (level < 51 && r_value > 200) { r_value = 200; } if (r_value > 210) { r_value = 210; } break; } case BACKSTAB: { // 10 200 225 if (level < 10) { r_value = 0; } if (level < 51 && r_value > 200) { r_value = 200; } if (r_value > 225) { r_value = 225; } break; } default: r_value = 0; break; } break; } default: r_value = 0; break; }// Class Switch break; } // Monk case BLOCKSKILL: { switch (class_) { case BEASTLORD: case BEASTLORDGM: { r_value = (((level - 25) * 5) + 5); // 12 200 230 if (level < 25) { r_value = 0; } if (level < 51 && r_value > 200) { r_value = 200; } if (r_value > 230) { r_value = 230; } break; } case MONK: case MONKGM: { r_value = ((level * 5) + 5); // 12 200 230 if (level < 12) { r_value = 0; } if (level < 51 && r_value > 200) { r_value = 200; } if (r_value > 230) { r_value = 230; } break; } } break; } case FEIGN_DEATH: case MEND: case DRAGON_PUNCH: case EAGLE_STRIKE: case FLYING_KICK: case ROUND_KICK: case TIGER_CLAW: { switch (class_) { case MONK: case MONKGM: { r_value = ((level * 5) + 5); switch (skillid) { case MEND: { // 1 200 200 if (r_value > 200) { r_value = 200; } break; } case ROUND_KICK: { // 5 200 225 if (level < 5) { r_value = 0; } if (level < 51 && r_value > 200) { r_value = 200; } if (r_value > 225) { r_value = 225; } break; } case TIGER_CLAW: { // 10 200 225 if (level < 10) { r_value = 0; } if (level < 51 && r_value > 200) { r_value = 200; } if (r_value > 225) { r_value = 225; } break; } case FEIGN_DEATH: { // 17 200 200 if (level < 17) { r_value = 0; } if (r_value > 200) { r_value = 200; } break; } case EAGLE_STRIKE: { // 20 200 225 if (level < 20) { r_value = 0; } if (level < 51 && r_value > 200) { r_value = 200; } if (r_value > 225) { r_value = 225; } break; } case DRAGON_PUNCH: { // 25 200 225 if (level < 25) { r_value = 0; } if (level < 51 && r_value > 200) { r_value = 200; } if (r_value > 225) { r_value = 225; } break; } case FLYING_KICK: { // 30 200 225 if (level < 30) { r_value = 0; } if (level < 51 && r_value > 200) { r_value = 200; } if (r_value > 225) { r_value = 225; } break; } default: r_value = 0; break; } break; } default: r_value = 0; break; }// Class Switch break; } //Berzerkers case BERSERKING: { switch (class_) { case BERSERKER: case BERSERKERGM: { r_value = ((level * 5) + 5); if (r_value > 200) { r_value = 200; } } default: r_value = 0; break; } break; } // Shaman case ALCHEMY: { switch (class_) { case SHAMAN: case SHAMANGM: { // 25 130 180 r_value = ((level * 5) + 5); if (level < 25) { r_value = 0; } if (level < 51 && r_value > 130) { r_value = 130; } if (r_value > 180) { r_value = 180; } break; } default: r_value = 0; break; }// Class Switch break; } /////////////////////////////////////////// ////////////////////////////////////////// // Shared skill // Shared Rogue case HIDE: { switch (class_) { // True class case ROGUE: case ROGUEGM: { r_value = ((level * 5) + 5); if (r_value > 200) { r_value = 200; } break; } // Hybrids case RANGER: case RANGERGM: case SHADOWKNIGHT: case SHADOWKNIGHTGM: { //75 cap if (level >= 35) { r_value = (((level - 35) * 5) + 5); if (r_value > 75) { r_value = 75; } } break; } case BARD: case BARDGM: { //40 cap if (level > 25) { r_value = (((level - 25) * 5) + 5); if (r_value > 40) { r_value = 40; } } break; } default: r_value = 0; break; }// Class Switch break; } case SNEAK: { switch (class_) { // True class case ROGUE: case ROGUEGM: { r_value = ((level * 5) + 5); if (r_value > 200) { r_value = 200; } break; } // Hybrids case MONK: case MONKGM: { //113 cap if (level >= 8) { r_value = (((level - 8) * 5) + 5); if (r_value > 113) { r_value = 113; } } break; } case RANGER: case RANGERGM: { //75 cap if (level >= 10) { r_value = (((level - 10) * 5) + 5); if (r_value > 75) { r_value = 75; } } break; } case BARD: case BARDGM: { //75 cap if (level >= 17) { r_value = (((level - 17) * 5) + 5); if (r_value > 75) { r_value = 75; } } break; } case BEASTLORD: case BEASTLORDGM: { //50 cap if (level >= 50) { r_value = (((level - 50) * 5) + 5); if (r_value > 50) { r_value = 50; } } break; } default: r_value = 0; break; }// Class Switch break; } case SENSE_TRAPS: case PICK_LOCK: case DISARM_TRAPS: { switch (class_) { // True class case ROGUE: case ROGUEGM: { r_value = ((level * 5) + 5); if (r_value > 200) { r_value = 200; } break; } // Hybrids case BARD: case BARDGM: { //100 cap if (level >= 30) { //this is wrong I think... r_value = (((level - 30) * 5) + 5); if (r_value > 100) { r_value = 100; } } break; } default: r_value = 0; break; }// Class Switch break; } case SAFE_FALL: { switch (class_) { // Hybrids case BARD: case BARDGM: { //40 cap if (level >= 24) { r_value = (((level - 24) * 5) + 5); if (r_value > 40) { r_value = 40; } } break; } // Melee case MONK: case MONKGM: { if (level >= 3) { r_value = (((level - 3) * 5) + 5); if (r_value > 200) { r_value = 200; } } break; } case ROGUE: case ROGUEGM: { //100 cap if (level >= 12) { r_value = (((level - 12) * 5) + 5); if (r_value > 100) { r_value = 100; } } break; } default: r_value = 0; break; }// Class Switch break; } case INTIMIDATION: { switch (class_) { case BARD: case BARDGM: { //100 cap if (level >= 26) { r_value = (((level - 26) * 5) + 5); if (r_value > 100) { r_value = 100; } } break; } // Melee case MONK: case MONKGM: { if (level >= 18) { r_value = (((level - 18) * 5) + 5); if (r_value > 200) { r_value = 200; } } break; } case BERSERKER: case BERSERKERGM: { if (level >= 20) { r_value = (((level - 20) * 5) + 5); if (r_value > 200) { r_value = 200; } } break; } case ROGUE: case ROGUEGM: { if (level >= 22) { r_value = (((level - 22) * 5) + 5); if (r_value > 200) { r_value = 200; } } break; } default: r_value = 0; break; }// Class Switch break; } // Druid/Ranger/Bard case FORAGE: { switch (class_) { case RANGER: case RANGERGM: { if (level > 3) { r_value = (((level - 3) * 5) + 5); if (r_value > 200) { r_value = 200; } } break; } case DRUID: case DRUIDGM: { r_value = ((level * 5) + 5); if (r_value > 200) { r_value = 200; } break; } case MONK: case MONKGM: case BARD: case BARDGM: r_value = 55; break; default: r_value = 50; break; }// Class Switch break; } case TRACKING: { switch (class_) { case RANGER: case RANGERGM: case BARD: case BARDGM: case DRUID: case DRUIDGM: r_value = 200; break; default: r_value = 0; break; }// Class Switch break; } //////////////////////////////////////////////////////// default: #if EQDEBUG std::cout << "Unknown class skill: " << skillid << std::endl; #endif break; }// Switch skill if (r_value > 252) { r_value = 252; } return r_value; } uint16 Mob::MaxSkill(uint16 skillid, uint16 class_, uint16 level) const { uint16 r_value = 0; switch (skillid) { case _1H_BLUNT: case _2H_BLUNT: case PIERCING: case HAND_TO_HAND: case _1H_SLASHING: case _2H_SLASHING: { r_value = MaxSkill_weapon(skillid, class_, level); break; } case OFFENSE: case THROWING: case ARCHERY: case DOUBLE_ATTACK: case DUAL_WIELD: case KICK: case BASH: { r_value = MaxSkill_offensive(skillid, class_, level); break; } case DEFENSE: case PARRY: case RIPOSTE: case DODGE: case TAUNT: case DISARM: { r_value = MaxSkill_defensive(skillid, class_, level); break; } case MEDITATE: case ABJURE: case ALTERATION: case CHANNELING: case CONJURATION: case DIVINATION: case EVOCATION: case SPECIALIZE_ABJURE: case SPECIALIZE_ALTERATION: case SPECIALIZE_CONJURATION: case SPECIALIZE_DIVINATION: case SPECIALIZE_EVOCATION: case RESEARCH: case BRASS_INSTRUMENTS: case SINGING: case STRINGED_INSTRUMENTS: case WIND_INSTRUMENTS: case PERCUSSION_INSTRUMENTS: { r_value = MaxSkill_arcane(skillid, class_, level); break; } /////////////////////////////////////////// /////////////////////////////////////////// // Class skills // Rogue case APPLY_POISON: case MAKE_POISON: case PICK_POCKETS: case BACKSTAB: // Monk case FEIGN_DEATH: case MEND: case DRAGON_PUNCH: case EAGLE_STRIKE: case FLYING_KICK: case ROUND_KICK: case TIGER_CLAW: case BLOCKSKILL: case ALCHEMY: case HIDE: case SNEAK: case SENSE_TRAPS: case PICK_LOCK: case DISARM_TRAPS: case SAFE_FALL: case INTIMIDATION: // Druid/Ranger/Bard case FORAGE: case TRACKING: { r_value = MaxSkill_class(skillid, class_, level); break; } /////////////////////////////////////////// /////////////////////////////////////////// // Tradeskills case BAKING: case TAILORING: case BLACKSMITHING: case FLETCHING: case BREWING: case JEWELRY_MAKING: case POTTERY: case FISHING: { // Check for Any Trade above 200, check for X (aa skill) Trades above 200 r_value = 250; break; } ///////////////////////////////////// ///////////////////////////////////// // Gnome case TINKERING: { if ( race == GNOME && level > 24 ) { r_value = ((level * 5) + 5); break; } r_value = 0; break; } ///////////////////////////////////////// // Common ///////////////////////////////////////// case BIND_WOUND: { switch (class_) { case BARD: case BARDGM: { r_value = ((level * 5) + 5); if (level >= 50) { if (r_value > 210) { r_value = 210; } } else { if (r_value > 200) { r_value = 200; } } break; } case CLERIC: case CLERICGM: { r_value = ((level * 5) + 5); if (level >= 50) { if (r_value > 201) { r_value = 201; } } else { if (r_value > 200) { r_value = 200; } } break; } case DRUID: case DRUIDGM: case SHAMAN: case SHAMANGM: { r_value = ((level * 5) + 5); if (r_value > 200) { r_value = 200; } break; } case MAGICIAN: case MAGICIANGM: case ENCHANTER: case ENCHANTERGM: case NECROMANCER: case NECROMANCERGM: case WIZARD: case WIZARDGM: { r_value = ((level * 5) + 5); if (r_value > 100) { r_value = 100; } break; } case BEASTLORD: case BEASTLORDGM: case BERSERKER: case BERSERKERGM: case MONK: case MONKGM: { r_value = ((level * 5) + 5); if (level >= 50) { if (r_value > 210) { r_value = 210; } } else { if (r_value > 200) { r_value = 200; } } break; } case PALADIN: case PALADINGM: { if (level > 10) { r_value = (((level - 10) * 5) + 5); if (level >= 50) { if (r_value > 210) { r_value = 210; } } else { if (r_value > 200) { r_value = 200; } } } break; } case RANGER: case RANGERGM: { if (level > 15) { r_value = (((level - 15) * 5) + 5); if (level >= 50) { if (r_value > 200) { r_value = 200; } } else { if (r_value > 150) { r_value = 150; } } } break; } case ROGUE: case ROGUEGM: { r_value = ((level * 5) + 5); if (level >= 50) { if (r_value > 210) { r_value = 210; } } else { if (r_value > 176) { r_value = 176; } } break; } case SHADOWKNIGHT: case SHADOWKNIGHTGM: { r_value = ((level * 5) + 5); if (level >= 50) { if (r_value > 200) { r_value = 200; } } else { if (r_value > 150) { r_value = 150; } } break; } case WARRIOR: case WARRIORGM: { if (level > 5) { r_value = (((level - 5) * 5) + 5); if (level >= 50) { if (r_value > 210) { r_value = 210; } } else { if (r_value > 175) { r_value = 175; } } } break; } default: r_value = 0; break; } break; } case SENSE_HEADING: case SWIMMING: case ALCOHOL_TOLERANCE: case BEGGING: { r_value = 5 + (level * 5); if (r_value > 200) { r_value = 200; } break; } //case BERSERKING: default: { // Unknown skill we should like print something to a log/debug here r_value = 0; break; } } if (r_value >= 253) { r_value = 252; } return r_value; }