View Single Post
  #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