eqemu-server/common/MaxSkill.cpp
2013-05-09 11:37:51 -04:00

1901 lines
40 KiB
C++

#include "../common/races.h"
#include "../common/classes.h"
#include "../zone/skills.h"
uint8 MaxSkillTable(uint16 skillid, uint16 race, uint16 eqclass, uint16 level);
/* TODO:
Load MaxSkillTable function into ram as a really big matrix:
MaxSkillTable[skillid][race][eqclass][level]
in preperation for that, dont put anything that wont work in
that table into MaxSkillTable (ie, AA checks, skill values that
depend on other skill values, etc), put it into MaxSkill instead
*/
uint8 MaxSkill(uint16 skillid, uint16 race, uint16 eqclass, uint16 level) {
uint8 ret = MaxSkillTable(skillid, race, eqclass, level);
return ret;
}
/* SPECIAL VALUES:
level:
0 = "skill level at character create"
TODO: catch levels > 65 (ie, npcs)
race:
NPCs will always have their skills maxed, and often ignore class
restrictions, accomplished by the special values below.
EMU_RACE_NPC
EMU_RACE_PET
EMU_RACE_UNKNOWN
return value:
TODO: Find out the specal values for the client for "your class/race doesnt have this skill" and
"must put one point in at GM", etc
*/
uint8 MaxSkillTable(uint16 skillid, uint16 race, uint16 eqclass, uint16 level) {
uint16 r_value = 0;
switch (skillid) {
///////////////
// Melee Weapon/ Hand to Hand
///////////////
case _1H_BLUNT:
case _2H_BLUNT:
case PIERCING:
case HAND_TO_HAND:
case _1H_SLASHING:
case _2H_SLASHING:{
switch (eqclass) {
// Pure melee classes
case WARRIOR: case WARRIORGM: {
r_value = 5 + (level*5);
if ( level < 51 && r_value > 200)
r_value = 200;
if ( level > 51 && 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;
if ( r_value > 252 )
r_value = 252;
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 ) {
if ( r_value > 250 )
r_value = 250;
}
else if ( level < 51 ) {
if ( r_value > 200 && skillid != PIERCING )
r_value = 200;
switch (skillid) {
case PIERCING: {
if (r_value > 210)
r_value = 210;
break;
}
default:
break;
}
}
switch (skillid) {
case HAND_TO_HAND:{
if ( r_value > 100 )
r_value = 100;
break;
}
default:
break;
}
break;
}
//////////////////////////////////////////////////////////////
// Melee Weapon/ Hand to Hand
// 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;
}
///////////////////////////////////////////////////////////
// Melee Weapon/ Hand to Hand
// 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 ){
if ( r_value > 225 )
r_value = 225;
}
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 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 && skillid != HAND_TO_HAND )
r_value = 225;
}
if ( r_value > 250 )
r_value = 250;
if ( level < 51 && r_value > 200 )
r_value = 200;
switch (skillid) {
case HAND_TO_HAND:{
r_value = 5 + (level*5);
if ( level < 51 )
r_value = 200;
if ( r_value > 250 )
r_value = 250;
break;
}
case _1H_SLASHING:
case _2H_SLASHING:{
r_value = 0;
break;
}
default:
break;
}
break;
}
// Melee Weapon/ Hand to Hand
// 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;
break;
}
case _1H_SLASHING:
case _2H_SLASHING:{
r_value = 0;
break;
}
default:
break;
}
}
default: {
r_value = 0;
break;
}
}// end switch(eqclass)
break;
} // end case weapon skills
/////////////////////////////////////////////////////////////
// Combat non weapon
/////////////////////////////////////////////////////////////
// Attack
case OFFENSE: {
switch (eqclass) {
// Melee
case WARRIOR: case WARRIORGM:
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: {
r_value = 0;
break;
}
} // end switch (eqclass)
break;
} // end case OFFENSE
case THROWING: {
switch (eqclass) {
// Melee
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;
}
} // end switch (eqclass)
break;
} // end case THROWING:
case ARCHERY: {
switch (eqclass) {
// 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;
}
} // end switch (eqclass)
break;
} // end case ARCHERY:
case DOUBLE_ATTACK: {
switch (eqclass) {
// 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 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;
}
} // end switch (eqclass)
break;
} // end case DOUBLE_ATTACK:
case DUEL_WIELD: {
switch (eqclass) {
// 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 < 15 )
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 DUEL_WIELD:
case KICK: {
switch (eqclass) {
// Melee
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;
}
} // end switch(eqclass)
break;
} // end case KICK:
///////////
// FIXME Where is slam?
// Quagmire: Slam = bash w/ race check
case BASH:{
r_value = ((level*5)+5);
switch (eqclass) {
// 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;
}
} // end switch (race)
r_value = 0;
break;
}
}
break;
} // end case BASH:
/////////////////////////////////////
/////////////////////////////////////
// Defensive skills
case DEFENSE:{
switch (eqclass) {
// 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;
}
// 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;
}
} // end switch(eqclass)
break;
} // end case DEFENSE:
case PARRY:{
switch (eqclass) {
// 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;
}
// 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;
}
} // end switch (eqclass)
break;
} // end case PARRY:
case RIPOSTE:{
switch (eqclass) {
// Melee
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;
}
} // end switch (eqclass)
break;
} // end case RIPOSTE:
case DODGE:{
switch (eqclass) {
// Melee
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: {
r_value = 0;
break;
}
} // end switch (eqclass)
break;
} // end case DODGE:
// Other
case TAUNT:{
switch (eqclass) {
// 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: {
r_value = 0;
break;
}
} // end swtich (eqclass)
break;
} // end case TAUNT:
case DISARM:{
switch (eqclass) {
// 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;
}
// 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: {
r_value = 0;
break;
}
} // end switch (eqclass)
break;
} // end case DISARM:
///////////////////////////////////////////
///////////////////////////////////////////
// Spell Skills
case MEDITATE:
case ABJURE:
case ALTERATION:
case CHANNELING:
case CONJURATION:
case DIVINATION:
case EVOCATION:{
r_value = ((level*5) + 5);
switch(eqclass){
// 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;
} // end spell skills
case SPECIALIZE_ABJURE:
case SPECIALIZE_ALTERATION:
case SPECIALIZE_CONJURATION:
case SPECIALIZE_DIVINATION:
case SPECIALIZE_EVOCATION:
case RESEARCH:{
r_value = ((level*5) + 5);
switch(eqclass){
// 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 && skillid == RESEARCH)
r_value = 0;
if (r_value > 0 && skillid == RESEARCH) {
if (r_value > 200)
r_value = 200;
}
if (r_value > 235)
r_value = 235;
// FIXME Only let one SPEC go above what ever limit theres supposed to be
break;
}
default:{
r_value = 0;
break;
}
}// Class Switch
break;
} // end specilize & research skills
case BRASS_INSTRUMENTS:
case SINGING:
case STRINGED_INSTRUMENTS:
case WIND_INSTRUMENTS:
case PERCUSSION_INSTRUMENTS:{
switch(eqclass){
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;
} // bard song skills
///////////////////////////////////////////
///////////////////////////////////////////
// Class skills
// Rogue
case APPLY_POISON:
case MAKE_POISON:
case PICK_POCKETS:
case BACKSTAB:{
switch (eqclass) {
// 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;
}
} // end switch (skillid)
break;
} // end case ROGUE: case ROGUEGM:
default: {
r_value = 0;
break;
}
}// Class Switch
break;
} // end rogue skills
// Monk
case FEIGN_DEATH:
case MEND:
case DRAGON_PUNCH:
case EAGLE_STRIKE:
case FLYING_KICK:
case ROUND_KICK:
case TIGER_CLAW:
case BLOCKSKILL:{
switch(eqclass){
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 BLOCKSKILL:{
// 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;
}
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;
}
} // end switch (skillid)
break;
} // end case MONK: case MONKGM:
default: {
r_value = 0;
break;
}
}// Class Switch
break;
} // end monk skills
// Shaman
case ALCHEMY:{
switch(eqclass){
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;
} // end case ALCHEMY:
///////////////////////////////////////////
//////////////////////////////////////////
// Shared skill
// Shared Rogue
case HIDE:
case SNEAK:{
switch(eqclass){
// True class
case ROGUE: case ROGUEGM:{
break;
}
// Hybrids
case MONK: case MONKGM:
case RANGER: case RANGERGM:
case SHADOWKNIGHT: case SHADOWKNIGHTGM:
case BARD: case BARDGM:{
break;
}
default: {
r_value = 0;
break;
}
}// Class Switch
} // end sneak/hide
case SENSE_TRAPS:
case PICK_LOCK:
case DISARM_TRAPS:{
switch(eqclass){
// True class
case ROGUE: case ROGUEGM:{
break;
}
// Hybrids
case BARD: case BARDGM:{
break;
}
default: {
r_value = 0;
break;
}
}// Class Switch
break;
} // end case SENSE_TRAPS/PICK_LOCK/DISARM_TRAPS
case SAFE_FALL:
case INTIMIDATION:{
switch(eqclass){
// Melee
case MONK: case MONKGM:
case ROGUE: case ROGUEGM:{
break;
}
default: {
r_value = 0;
break;
}
}// Class Switch
break;
} // end SAFE_FALL/INTIMIDATION
// Druid/Ranger/Bard
case FORAGE:{
switch(eqclass) {
case DRUID: case DRUIDGM:
case RANGER: case RANGERGM:{
if (r_value > 200)
r_value = 200;
break;
}
case BARD: case BARDGM: {
r_value = 55;
break;
}
default: {
r_value = 00;
break;
}
} // end switch (eqclass)
break;
} // end case FORAGE:
case TRACKING:{
switch(eqclass){
case RANGER: case RANGERGM:
case BARD: case BARDGM:
case DRUID: case DRUIDGM: {
}
default: {
r_value = 0;
break;
}
}// Class Switch
} // end case TRACKING
///////////////////////////////////////////
///////////////////////////////////////////
// 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 = 200;
break;
}
///////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////
// Gnome
///////////////////////////////////////////////////////////////////
case TINKERING:{
if ( race == GNOME && level > 24 ) {
r_value = ((level*5)+5);
break;
}
r_value = 0;
break;
} // end case TINKERING:
/////////////////////////////////////////
// Common
/////////////////////////////////////////
case BIND_WOUND:{
r_value = 5 + (level*5);
if (level > 50){
// Check for aa and class
}
if (r_value > 200)
r_value = 200;
switch (eqclass) {
case ENCHANTER: case ENCHANTERGM:
case MAGICIAN: case MAGICIANGM:
case NECROMANCER: case NECROMANCERGM:
case WIZARD: case WIZARDGM:{
if ( r_value > 100 )
r_value = 100;
}
default: {
break;
}
} // end switch (eqclass)
break;
} // end case BIND_WOUND:
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;
}
} // end switch (skillid)
// NO skill may go over 252
if (r_value > 252)
r_value = 252;
return r_value;
}