Go Back   EQEmulator Home > EQEmulator Forums > Archives > Archive::Development > Archive::Development

Archive::Development Archive area for Development's posts that were moved here after an inactivity period of 90 days.

Reply
 
Thread Tools Display Modes
  #1  
Old 02-16-2003, 11:49 PM
Bigpull
Discordant
 
Join Date: Feb 2003
Posts: 305
Default Client::MaxSkill()

Old
Code:
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
Code:
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;
}
Reply With Quote
  #2  
Old 02-17-2003, 02:11 AM
Trumpcard
Demi-God
 
Join Date: Jan 2002
Location: Charlotte, NC
Posts: 2,614
Default

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
__________________
Quitters never win, and winners never quit, but those who never win and never quit are idiots.
Reply With Quote
  #3  
Old 02-17-2003, 02:38 AM
Bigpull
Discordant
 
Join Date: Feb 2003
Posts: 305
Default

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.
Reply With Quote
  #4  
Old 02-17-2003, 12:09 PM
killspree
Dragon
 
Join Date: Jun 2002
Posts: 776
Default

Looks pretty complete. But don't forget, it's dual wield, not duel wield.
Reply With Quote
  #5  
Old 02-17-2003, 01:51 PM
Trumpcard
Demi-God
 
Join Date: Jan 2002
Location: Charlotte, NC
Posts: 2,614
Default

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..
__________________
Quitters never win, and winners never quit, but those who never win and never quit are idiots.
Reply With Quote
  #6  
Old 02-18-2003, 03:00 AM
Bigpull
Discordant
 
Join Date: Feb 2003
Posts: 305
Default No it's

#define DUEL_WIELD 22
in skills.h =P

I'll split it up into MaxSkill_foo()'s and CheckIncrease will work normal like
Reply With Quote
  #7  
Old 02-18-2003, 04:23 AM
Bigpull
Discordant
 
Join Date: Feb 2003
Posts: 305
Default

Ok off to break more stuff =P

client.h
Code:
    // 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
Code:
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;
}
Reply With Quote
Reply


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump

   

All times are GMT -4. The time now is 08:05 PM.


 

Everquest is a registered trademark of Daybreak Game Company LLC.
EQEmulator is not associated or affiliated in any way with Daybreak Game Company LLC.
Except where otherwise noted, this site is licensed under a Creative Commons License.
       
Powered by vBulletin®, Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Template by Bluepearl Design and vBulletin Templates - Ver3.3