// 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: "< 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: "< 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: "< 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: "< 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: "< 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; }