PDA

View Full Version : Client::MaxSkill()


Bigpull
02-16-2003, 11:49 PM
Old

int8 Client::MaxSkill(int16 skillid, int16 class_, int16 level) {
switch (skillid) {
case OFFENSE:
case DEFENSE: {
int16 tmp = level * 5;
if (tmp > 200)
tmp = 200;
return tmp;
}
default: {
return level*4;
}
}
}


And the new

int8 Client::MaxSkill(int16 skillid, int16 class_, int16 level) {
int16 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 (class_) {
// Pure melee classes
case WARRIOR:{
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:{
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:{
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;
}
// Priest classes
case CLERIC:{
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:{
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:{
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:{
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 SHADOWKNIGHT:{
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:{
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:{
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;
}
// Pure casters
case NECROMANCER:
case WIZARD:
case MAGICIAN:
case ENCHANTER:{
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;
}
}
default: break;
}// End Class
}// End Weapons
///////////////////////////////////////
// Combat non weapon
////////////////////////////////////////
// Attack
case OFFENSE:{
switch (class_) {
// Melee
case WARRIOR:
case ROGUE:{
// 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:{
// 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 SHAMAN:
case CLERIC:{
// 200 200 4*level+4
r_value = ((level*4) + 4);
if (r_value > 200)
r_value = 200;
break;
}
// Hybrid
case BEASTLORD:{
// 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 SHADOWKNIGHT:
case BARD:{
// 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:{
// 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 WIZARD:
case MAGICIAN:
case ENCHANTER:{
// 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 ROGUE:{
// 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 MONK:{
// 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 BARD:
case RANGER:{
// 113
r_value = ((level*5) + 5);
if ( r_value > 113 )
r_value = 113;
break;
}
// Pure
case NECROMANCER:
case WIZARD:
case MAGICIAN:

case ENCHANTER:{
// 75
r_value = ((level*3) + 3);
if ( r_value > 75 )
r_value = 75;
break;
}
// No skill classes
case DRUID:
case SHAMAN:
case CLERIC:
case PALADIN:
case SHADOWKNIGHT:
default:
r_value = 0;
break;
}
break;
}
case ARCHERY:{
switch (class_) {
// Melee
case ROGUE:
case WARRIOR:{
// 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 SHADOWKNIGHT:{
// 75 75
r_value = ((level*5) + 5);
if ( r_value > 75 )
r_value = 75;
break;
}
case RANGER:{
// 240 240
r_value = ((level*5) + 5);
if ( r_value > 240 )
r_value = 240;
break;
}
// Pure
// No skill classes
// Melee
case MONK:
// Priest
case DRUID:
case SHAMAN:
case CLERIC:
// Pure
case NECROMANCER:
case WIZARD:
case MAGICIAN:
case ENCHANTER:
// Hybrid
case BEASTLORD:
case BARD:
default:
r_value = 0;
break;
}
break;
}
case DOUBLE_ATTACK:{
switch (class_) {
// Melee
case ROGUE:{
// 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:{
// 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:{
// 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 SHADOWKNIGHT:{
// 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:{
// 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 SHAMAN:
case CLERIC:
// Pure
case NECROMANCER:
case WIZARD:
case MAGICIAN:
case ENCHANTER:
// Hybrid
case BEASTLORD:
case BARD:
default:
r_value = 0;
break;
}
break;
}
case DUEL_WIELD:{
switch (class_) {
// Melee
case WARRIOR:
case ROGUE:
case MONK:
// Hybrid
case BEASTLORD:
case BARD:
case RANGER:

// No skill classes
// Melee
// Priest
case DRUID:
case SHAMAN:
case CLERIC:
// Pure
case NECROMANCER:
case WIZARD:
case MAGICIAN:
case ENCHANTER:
// Hybrid
case PALADIN:
case SHADOWKNIGHT:
default:
r_value = 0;
break;
}// Class switch
}
case KICK:{
switch (class_) {
// Melee
case WARRIOR:{
// 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:{
// 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:{
// 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:{
// 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:
// Melee
// Priest
case DRUID:
case SHAMAN:
case CLERIC:
// Pure
case NECROMANCER:
case WIZARD:
case MAGICIAN:
case ENCHANTER:
// Hybrid
case PALADIN:
case SHADOWKNIGHT:
case BARD:
default:
r_value = 0;
break;
}
break;
}
///////////
// FIXME Where is slam?
case BASH:{
r_value = ((level*5)+5);
switch (class_) {
// Melee
case WARRIOR:{
// 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:{
// 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 SHADOWKNIGHT:{
// 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 ROGUE:
// Priest
case DRUID:
case SHAMAN:
// Pure
case NECROMANCER:
case WIZARD:
case MAGICIAN:
case ENCHANTER:
// Hybrid
case BEASTLORD:
case RANGER:
case BARD:{
switch (race) {
case BARBARIAN:
case TROLL:
case OGRE:{
r_value = 50;
break;
}
default: break;
}
r_value = 0;
break;
}
}
break;
}
/////////////////////////////////////
/////////////////////////////////////
// Defensive skills
case DEFENSE:{
switch (class_) {
// Melee
case WARRIOR:{
// 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:{
// 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:{
// 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 SHAMAN:
case CLERIC:{
// 200 200 4*level+4
r_value = ((level*4) + 4);
if (r_value > 200)
r_value = 200;
break;
}
// Hybrid
case BEASTLORD:{
// 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 SHADOWKNIGHT:{
// 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:{
// 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:{
// 200 200 5*level+5
r_value = ((level*5) + 5);
if (r_value > 200)
r_value = 200;
break;
}
// Pure
case NECROMANCER:
case WIZARD:
case MAGICIAN:
case ENCHANTER:{
// 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:{
// 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:{
// 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:{
// 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 SHADOWKNIGHT:{
// 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:{
// 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:
// Priest
case DRUID:
case SHAMAN:
case CLERIC:
// Pure
case NECROMANCER:
case WIZARD:
case MAGICIAN:
case ENCHANTER:
// Hybrid
case BEASTLORD:
default:
r_value = 0;
break;
}
break;
}
case RIPOSTE:{
switch (class_) {
// Melee
case WARRIOR:{
// 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:{
// 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:{
// 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:{
// 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:{
// 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 SHADOWKNIGHT:{
// 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:{
// 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 SHAMAN:
case CLERIC:
// Pure
case NECROMANCER:
case WIZARD:
case MAGICIAN:
case ENCHANTER:
// Hybrid
default:
r_value = 0;
break;

}
break;
}
case DODGE:{
switch (class_) {
// Melee
case WARRIOR:{
// 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:{
// 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:{
// 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 SHAMAN:
case CLERIC:{
// 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 PALADIN:
case SHADOWKNIGHT:
case BARD:{
// 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:{
// 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 WIZARD:
case MAGICIAN:
case ENCHANTER:{
// 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;
}
}
// Other
case TAUNT:{
switch (class_) {
// Melee
case WARRIOR:{
// 1 200 200
r_value = ((level*5) + 5);
if (r_value > 200)
r_value = 200;
break;
}
// Priest
// Hybrid
case PALADIN:
case SHADOWKNIGHT:{
// 1 180 180
r_value = ((level*5) + 5);
if (r_value > 180)
r_value = 180;
break;
}
case RANGER:{
// 1 150 150
r_value = ((level*5) + 5);
if (r_value > 150)
r_value = 150;
break;

}
// Pure

// No skill classes
// Melee
case ROGUE:
case MONK:
// Priest
case DRUID:
case SHAMAN:
case CLERIC:
// Pure
case NECROMANCER:
case WIZARD:
case MAGICIAN:
case ENCHANTER:
// Hybrid
case BEASTLORD:
case BARD:
default: break;
}
}
case DISARM:{
switch (class_) {
// Melee
case WARRIOR:{
// 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 MONK:{
// 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 SHADOWKNIGHT:{
// 40 70 70
r_value = ((level*5) + 5);
if (level < 40)
r_value = 0;
if (r_value > 70)
r_value = 70;
break;
}
case RANGER:{
// 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 SHAMAN:
case CLERIC:
// Pure
case NECROMANCER:
case WIZARD:
case MAGICIAN:
case ENCHANTER:
// Hybrid
case BARD:
case BEASTLORD:
default: break;
}
}
///////////////////////////////////////////
///////////////////////////////////////////
// Spell Skills
case MEDITATE:
case ABJURE:

case ALTERATION:
case CHANNELING:
case CONJURATION:
case DIVINATION:

case EVOCATION:{
r_value = ((level*5) + 5);
switch(class_){
// Hybrid
case RANGER:{
// 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 PALADIN:
case SHADOWKNIGHT:{
// 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 DRUID:
case SHAMAN:{
// 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 MAGICIAN:
case NECROMANCER:
case WIZARD:{
// 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:{
r_value = 0;
if (level > 9 && skillid == MEDITATE)
r_value = 1;
break;
}
default:
// Unknown class
r_value = 0;
break;
}// Class Switch
}

case SPECIALIZE_ABJURE:
case SPECIALIZE_ALTERATION:
case SPECIALIZE_CONJURATION:
case SPECIALIZE_DIVINATION:
case SPECIALIZE_EVOCATION:
case RESEARCH:{
r_value = ((level*5) + 5);
switch(class_){
// Int caster
case ENCHANTER:
case MAGICIAN:
case NECROMANCER:
case WIZARD:{
// 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
}

case BRASS_INSTRUMENTS:
case SINGING:
case STRINGED_INSTRUMENTS:
case WIND_INSTRUMENTS:
case PERCUSSION_INSTRUMENTS:{
switch(class_){
case BARD:{
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
}
///////////////////////////////////////////
///////////////////////////////////////////
// Class skills
// Rogue
case APPLY_POISON:
case MAKE_POISON:
case PICK_POCKETS:
case BACKSTAB:{
switch (class_) {
// Melee
case ROGUE: {
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
}
// Monk
case FEIGN_DEATH:
case MEND:
case DRAGON_PUNCH:
case EAGLE_STRIKE:
case FLYING_KICK:
case ROUND_KICK:
case TIGER_CLAW:
case BLOCK:{
switch(class_){
case MONK:{
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 BLOCK:{
// 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;
}
break;
}
default:
r_value = 0;
break;
}// Class Switch
}
// Shaman
case ALCHEMY:{
switch(class_){
case SHAMAN:{
// 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
}
///////////////////////////////////////////
//////////////////////////////////////////
// Shared skill
// Shared Rogue
case HIDE:
case SNEAK:{
switch(class_){
// True class
case ROGUE:{
break;
}
// Hybrids
case MONK:
case RANGER:
case SHADOWKNIGHT:
case BARD:{
break;
}
default:
r_value = 0;
break;
}// Class Switch
}


case SENSE_TRAPS:
case PICK_LOCK:
case DISARM_TRAPS:{
switch(class_){
// True class
case ROGUE:{
break;
}
// Hybrids
case BARD:{
break;
}
default:
r_value = 0;
break;
}// Class Switch
}

case SAFE_FALL:
case INTIMIDATION:{
switch(class_){
// Melee
case MONK:
case ROGUE:{
break;
}
default:
r_value = 0;
break;

}// Class Switch
}
// Druid/Ranger/Bard
case FORAGE:{
switch(class_) {
case DRUID:
case RANGER:{
if (r_value > 200)
r_value = 200;
break;
}
case BARD:
r_value = 55;
break;
default:
r_value = 50;
break;
}
break;
}
case TRACKING:{
switch(class_){
case RANGER:
case BARD:
case DRUID:
default:
r_value = 0;
break;
}// Class Switch
}
///////////////////////////////////////////
///////////////////////////////////////////
// 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;
}

/////////////////////////////////////////
// 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 (class_) {
case ENCHANTER:
case MAGICIAN:
case NECROMANCER:
case WIZARD:{
if ( r_value > 100 )
r_value = 100;
}
default: 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;
}
}
return r_value;
}

Trumpcard
02-17-2003, 02:11 AM
Wow! Very complete! Thanks..

BY the love of God, attatch it as a text next time.. Formatting this thing is going to be a mother ! LOL

Bigpull
02-17-2003, 02:38 AM
It needs "audited"
anywhere i was still awake enough to put the

// aquisition_level pre_kunark_cap post_kunark_cap

if someone would make sure I used those values, they'd be like a hero and stuff. I know theres gotta be errors in there somewhere it's around 1700 lines last time i counted.

killspree
02-17-2003, 12:09 PM
Looks pretty complete. But don't forget, it's dual wield, not duel wield. :)

Trumpcard
02-17-2003, 01:51 PM
Good catch on that..

The problem is that the function is just way to long... We either need to put skill maxes in the database and load the table into memory, or divide this function up into a few seperate ones. If we did that though, we'd have to make modifications to CheckSkillIncrease to figure out which one to call..

Bigpull
02-18-2003, 03:00 AM
#define DUEL_WIELD 22
in skills.h =P

I'll split it up into MaxSkill_foo()'s and CheckIncrease will work normal like

Bigpull
02-18-2003, 04:23 AM
Ok off to break more stuff =P

client.h

// Util functions for MaxSkill
int8 MaxSkill_weapon(int16 skillid, int16 class_, int16 level);
int8 MaxSkill_offensive(int16 skillid, int16 class_, int16 level);
int8 MaxSkill_defensive(int16 skillid, int16 class_, int16 level);
int8 MaxSkill_arcane(int16 skillid, int16 class_, int16 level);
int8 MaxSkill_class(int16 skillid, int16 class_, int16 level);
int8 MaxSkill(int16 skillid, int16 class_, int16 level);


client.cpp

int8 Client::MaxSkill_weapon(int16 skillid, int16 class_, int16 level){
int8 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:{
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:{
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:{
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;
}
// Priest classes
case CLERIC:{
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:{
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:{
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:{
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 SHADOWKNIGHT:{
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:{
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:{
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 WIZARD:
case MAGICIAN:
case ENCHANTER:{
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 DEBUG
cout<<"MaxSkill_Weapon() Unknown class: "<<class_<<endl;
#endif
break;
}
break;// Switch Class
}
default:
#if DEBUG
cout<<"Unknown weapon skill: "<<skillid<<endl;
#endif
break;
}// Switch skill
if (r_value > 252)
r_value = 252;
return r_value;
}

int8 Client::MaxSkill_offensive(int16 skillid, int16 class_, int16 level){
int8 r_value = 0;
switch(skillid) {

case OFFENSE:{
switch (class_) {
// Melee
case WARRIOR:
case ROGUE:{
// 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:{
// 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 SHAMAN:
case CLERIC:{
// 200 200 4*level+4
r_value = ((level*4) + 4);
if (r_value > 200)
r_value = 200;
break;
}
// Hybrid
case BEASTLORD:{
// 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 SHADOWKNIGHT:
case BARD:{
// 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:{
// 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 WIZARD:
case MAGICIAN:
case ENCHANTER:{
// 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 ROGUE:{
// 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 MONK:{
// 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 BARD:
case RANGER:{
// 113
r_value = ((level*5) + 5);
if ( r_value > 113 )
r_value = 113;
break;
}
// Pure
case NECROMANCER:
case WIZARD:
case MAGICIAN:

case ENCHANTER:{
// 75
r_value = ((level*3) + 3);
if ( r_value > 75 )
r_value = 75;
break;
}
// No skill classes
case DRUID:
case SHAMAN:
case CLERIC:
case PALADIN:
case SHADOWKNIGHT:
default:
r_value = 0;
break;
}
break;
}
/////////////////////////////////////////////////
case ARCHERY:{
switch (class_) {
// Melee
case ROGUE:
case WARRIOR:{
// 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 SHADOWKNIGHT:{
// 75 75
r_value = ((level*5) + 5);
if ( r_value > 75 )
r_value = 75;
break;
}
case RANGER:{
// 240 240
r_value = ((level*5) + 5);
if ( r_value > 240 )
r_value = 240;
break;
}
// Pure
// No skill classes
// Melee
case MONK:
// Priest
case DRUID:
case SHAMAN:
case CLERIC:
// Pure
case NECROMANCER:
case WIZARD:
case MAGICIAN:
case ENCHANTER:
// Hybrid
case BEASTLORD:
case BARD:
default:
r_value = 0;
break;
}
break;
}
/////////////////////////////////////////////////
case DOUBLE_ATTACK:{
switch (class_) {
// Melee
case ROGUE:{
// 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:{
// 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:{
// 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 SHADOWKNIGHT:{
// 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:{
// 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 SHAMAN:
case CLERIC:
// Pure
case NECROMANCER:
case WIZARD:
case MAGICIAN:
case ENCHANTER:
// Hybrid
case BEASTLORD:
case BARD:
default:
r_value = 0;
break;
}
break;
}
/////////////////////////////////////////////////
case DUEL_WIELD:{
switch (class_) {
// Melee
case WARRIOR:
case ROGUE:
case MONK:
// Hybrid
case BEASTLORD:
case BARD:
case RANGER:{
r_value = ((level*5) +5);
// FIXME fudged limit to 250
if (r_value > 250)
r_value = 250;
break;
}
// No skill classes
// Melee
// Priest
case DRUID:
case SHAMAN:
case CLERIC:
// Pure
case NECROMANCER:
case WIZARD:
case MAGICIAN:
case ENCHANTER:
// Hybrid
case PALADIN:
case SHADOWKNIGHT:
default:
r_value = 0;
break;
}// Class switch
}
////////////////////////////////////////////////////////
case KICK:{
switch (class_) {
// Melee
case WARRIOR:{
// 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:{
// 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:{
// 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:{
// 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:
// Melee
// Priest
case DRUID:
case SHAMAN:
case CLERIC:
// Pure
case NECROMANCER:
case WIZARD:
case MAGICIAN:
case ENCHANTER:
// Hybrid
case PALADIN:
case SHADOWKNIGHT:
case BARD:
default:
r_value = 0;
break;
}
break;
}
////////////////////////////////////////////////////////
// FIXME Where is slam?
case BASH:{
r_value = ((level*5)+5);
switch (class_) {
// Melee
case WARRIOR:{
// 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:{
// 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 SHADOWKNIGHT:{
// 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 ROGUE:
// Priest
case DRUID:
case SHAMAN:
// Pure
case NECROMANCER:
case WIZARD:
case MAGICIAN:
case ENCHANTER:
// Hybrid
case BEASTLORD:
case RANGER:
case BARD:{
switch (race) {
case BARBARIAN:
case TROLL:
case OGRE:{
r_value = 50;

break;
}
default: break;
}
r_value = 0;
break;
}
}
break;
}
////////////////////////////////////////////////////////
default:
#if DEBUG
cout<<"Unknown Offensive skill: "<<skillid<<endl;
#endif
break;
}// Switch skill
if (r_value > 252)
r_value = 252;
return r_value;
}
int8 Client::MaxSkill_defensive(int16 skillid, int16 class_, int16 level){
int8 r_value = 0;
switch(skillid) {
case DEFENSE:{
switch (class_) {
// Melee
case WARRIOR:{
// 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:{
// 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:{
// 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 SHAMAN:
case CLERIC:{
// 200 200 4*level+4
r_value = ((level*4) + 4);
if (r_value > 200)
r_value = 200;
break;
}
// Hybrid
case BEASTLORD:{
// 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 SHADOWKNIGHT:{
// 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:{
// 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:{
// 200 200 5*level+5
r_value = ((level*5) + 5);
if (r_value > 200)
r_value = 200;
break;
}
// Pure
case NECROMANCER:
case WIZARD:
case MAGICIAN:
case ENCHANTER:{
// 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:{
// 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:{
// 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:{
// 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 SHADOWKNIGHT:{
// 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:{
// 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:
// Priest
case DRUID:
case SHAMAN:
case CLERIC:
// Pure
case NECROMANCER:
case WIZARD:
case MAGICIAN:
case ENCHANTER:
// Hybrid
case BEASTLORD:
default:
r_value = 0;
break;
}
break;
}
case RIPOSTE:{
switch (class_) {
// Melee
case WARRIOR:{
// 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:{
// 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:{
// 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:{
// 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:{
// 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 SHADOWKNIGHT:{
// 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:{
// 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 SHAMAN:
case CLERIC:
// Pure
case NECROMANCER:
case WIZARD:
case MAGICIAN:
case ENCHANTER:
// Hybrid
default:
r_value = 0;
break;

}
break;
}
case DODGE:{
switch (class_) {
// Melee
case WARRIOR:{
// 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:{
// 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:{
// 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 SHAMAN:
case CLERIC:{
// 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 PALADIN:
case SHADOWKNIGHT:
case BARD:{
// 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:{
// 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 WIZARD:
case MAGICIAN:
case ENCHANTER:{
// 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;
}
}
// Other
case TAUNT:{
switch (class_) {
// Melee
case WARRIOR:{
// 1 200 200
r_value = ((level*5) + 5);
if (r_value > 200)
r_value = 200;
break;
}
// Priest
// Hybrid
case PALADIN:
case SHADOWKNIGHT:{
// 1 180 180
r_value = ((level*5) + 5);
if (r_value > 180)
r_value = 180;

break;
}
case RANGER:{
// 1 150 150
r_value = ((level*5) + 5);
if (r_value > 150)
r_value = 150;
break;

}
// Pure

// No skill classes
// Melee
case ROGUE:
case MONK:
// Priest
case DRUID:
case SHAMAN:
case CLERIC:
// Pure
case NECROMANCER:
case WIZARD:
case MAGICIAN:
case ENCHANTER:
// Hybrid
case BEASTLORD:
case BARD:
default: break;
}
}
case DISARM:{
switch (class_) {
// Melee
case WARRIOR:{
// 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 MONK:{
// 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 SHADOWKNIGHT:{
// 40 70 70
r_value = ((level*5) + 5);
if (level < 40)
r_value = 0;
if (r_value > 70)
r_value = 70;
break;
}
case RANGER:{
// 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 SHAMAN:
case CLERIC:
// Pure
case NECROMANCER:
case WIZARD:
case MAGICIAN:
case ENCHANTER:
// Hybrid
case BARD:
case BEASTLORD:
default: break;
}
}
////////////////////////////////////////////////////////
default:
#if DEBUG
cout<<"Unknown Defensive skill: "<<skillid<<endl;
#endif
break;
}// Switch skill
if (r_value > 252)
r_value = 252;
return r_value;
}
int8 Client::MaxSkill_arcane(int16 skillid, int16 class_, int16 level){
int8 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:{
// 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 PALADIN:
case SHADOWKNIGHT:{
// 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 DRUID:
case SHAMAN:{
// 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 MAGICIAN:
case NECROMANCER:
case WIZARD:{
// 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:{
r_value = 0;
if (level > 9 && skillid == MEDITATE)
r_value = 1;
break;
}
default:
// Unknown class
r_value = 0;
break;
}// Class Switch
}

case SPECIALIZE_ABJURE:
case SPECIALIZE_ALTERATION:
case SPECIALIZE_CONJURATION:
case SPECIALIZE_DIVINATION:
case SPECIALIZE_EVOCATION:
case RESEARCH:{
r_value = ((level*5) + 5);
switch(class_){
// Int caster
case ENCHANTER:
case MAGICIAN:
case NECROMANCER:

case WIZARD:{
// 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
}

case BRASS_INSTRUMENTS:
case SINGING:
case STRINGED_INSTRUMENTS:
case WIND_INSTRUMENTS:
case PERCUSSION_INSTRUMENTS:{
switch(class_){
case BARD:{
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
}
////////////////////////////////////////////////////////
default:
#if DEBUG
cout<<"Unknown arcane skill: "<<skillid<<endl;
#endif
break;
}// Switch skill
if (r_value > 252)
r_value = 252;
return r_value;
}
int8 Client::MaxSkill_class(int16 skillid, int16 class_, int16 level){
int8 r_value = 0;
switch(skillid) {
// Rogue
case APPLY_POISON:
case MAKE_POISON:
case PICK_POCKETS:
case BACKSTAB:{
switch (class_) {
// Melee
case ROGUE: {
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
}
// Monk
case FEIGN_DEATH:
case MEND:
case DRAGON_PUNCH:
case EAGLE_STRIKE:
case FLYING_KICK:
case ROUND_KICK:
case TIGER_CLAW:
case BLOCK:{
switch(class_){
case MONK:{
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 BLOCK:{
// 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;
}
break;
}
default:
r_value = 0;
break;
}// Class Switch
}
// Shaman
case ALCHEMY:{
switch(class_){
case SHAMAN:{
// 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
}
///////////////////////////////////////////
//////////////////////////////////////////
// Shared skill
// Shared Rogue
case HIDE:
case SNEAK:{
switch(class_){
// True class
case ROGUE:{
break;
}
// Hybrids
case MONK:
case RANGER:
case SHADOWKNIGHT:
case BARD:{
break;
}
default:
r_value = 0;
break;
}// Class Switch
}


case SENSE_TRAPS:
case PICK_LOCK:
case DISARM_TRAPS:{
switch(class_){
// True class
case ROGUE:{
break;
}
// Hybrids
case BARD:{
break;
}
default:
r_value = 0;
break;
}// Class Switch
}

case SAFE_FALL:
case INTIMIDATION:{
switch(class_){
// Melee
case MONK:
case ROGUE:{
break;
}
default:
r_value = 0;
break;

}// Class Switch
}
// Druid/Ranger/Bard
case FORAGE:{
switch(class_) {
case DRUID:
case RANGER:{
if (r_value > 200)
r_value = 200;
break;
}
case BARD:
r_value = 55;
break;
default:
r_value = 50;
break;
}
break;
}
case TRACKING:{
switch(class_){
case RANGER:
case BARD:
case DRUID:

default:
r_value = 0;
break;
}// Class Switch
}
////////////////////////////////////////////////////////
default:
#if DEBUG
cout<<"Unknown class skill: "<<skillid<<endl;
#endif
break;
}// Switch skill
if (r_value > 252)
r_value = 252;
return r_value;
}

int8 Client::MaxSkill(int16 skillid, int16 class_, int16 level) {
int16 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 DUEL_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 BLOCK:
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 = 200;
break;
}
/////////////////////////////////////
/////////////////////////////////////
// Gnome
case TINKERING:{
if ( race == GNOME && level > 24 ) {
r_value = ((level*5)+5);
break;
}
r_value = 0;
break;
}

/////////////////////////////////////////
// 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 (class_) {
case ENCHANTER:
case MAGICIAN:
case NECROMANCER:
case WIZARD:{
if ( r_value > 100 )
r_value = 100;
}
default: 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;
}
}
return r_value;
}