#ifndef PALADIN_H
#define PALADIN_H
#define PALADIN_HEAL_PERIOD (30 - query_wisdom()/6)
void heal_paladin() {
   if(random(PALADIN_HEAL_PERIOD)) return;
   this_object()->adj_all_cleric(1);
}
void adj_all_paladin(int i) {
  this_object()->adj_all_cleric(i);
}
status query_weapon_spec(string str);
string *weapon_spec;                    /* the array of specialised weapons */
int sword_spec;                         /* bonus for WC w/- sword           */
int crushing_spec;                      /* bonus for WC w/- mace            */
int lance_spec;                         /* bonus for WC w/- lance           */
int shield_spec;                        /* hit for shield                   */
string *horse_info;                     /* personalised steed things        */
/****************************************************************************/
/* sets */
void add_weapon_spec(string str){  
  if(!query_weapon_spec(str) && str) weapon_spec += ({ str, });
}  
void remove_weapon_spec(string str){  
  int i;
  if((i=member_array(str, weapon_spec)) != -1){  
    weapon_spec = weapon_spec[0..i-1] +
    weapon_spec[i+1..sizeof(weapon_spec)-1];
  }
}     
int set_sword_spec(int i)    { return sword_spec = i;    }
int set_lance_spec(int i)    { return lance_spec = i;    }
int set_crushing_spec(int i) { return crushing_spec = i; }
int set_shield_spec(int i)   { return shield_spec = i;   }
mixed set_horse_info(string *arr) { return horse_info = arr; }
/**************************************************************************/
/* query */
int query_sword_spec()    { return sword_spec;    }
int query_lance_spec()    { return lance_spec;    }
int query_crushing_spec() { return crushing_spec; }
int query_shield_spec()   { return shield_spec;   }
mixed query_horse_info()  {  
  if(!horse_info) horse_info = ({});
  return horse_info;   
}
mixed query_weapon_spec(string str) {
  if(!weapon_spec) weapon_spec = ({});
  if(!str) return weapon_spec;
  return (member_array(str, weapon_spec) == -1) ? 0 : 1;
}
void clear_paladin() {
  object obj;
  sword_spec = 0;
  crushing_spec = 0;
  lance_spec = 0;
  shield_spec = 0;
  weapon_spec = ({});
  horse_info = ({});
  this_object()->clear_fighter();
  this_object()->clear_cleric();
  this_object()->set_guild_string(0);
  if(obj = (this_object()->query_paladin_aura_object())) 
    destruct(obj);
} 
void query_paladin_stats() {
  string str;
  object obj;
  obj = this_object();
  write("\n               -=[ Paladin Skills ]=-\n\n");
  str = "Weapons of choice: "+
  implode(query_weapon_spec(0), " ")+"                                   ";
  write(str+"\n\n");
  str  = "Sword spec: "+sword_spec+"                                     ";
  str  = extract(str,0,25);
  str += " Lance spec: "+lance_spec+"                                    ";
  str = extract(str,0,75);
  write(str+"\n");
  str  = "Crushing spec: "+crushing_spec+"                               ";
  str  = extract(str,0,25);
  str += " Shield spec: "+shield_spec+"                                   ";
  str = extract(str,0,50);
  /* Fighter skills for Paladin */
  str += " Multi attack: "+(int)obj->query_multi_attack()+"              ";
  str = extract(str,0,75);
  write(str+"\n");
  str  = "Multi opponent: "+(int)obj->query_multi_opponent()+"           ";
  str  = extract(str,0,25);
  str += " Armouring: "+(int)obj->query_armouring()+"                    ";
  str  = extract(str,0,50);
  str += " Weapon smith: "+(int)obj->query_weapon_smith()+"              ";
  str  = extract(str,0,75);
  write(str+"\n");
  /* Cleric skills for Paladin */
  str  = "Healing sphere: "+(int)obj->query_healing_sphere()+"("+
         (int)obj->query_healing_sphere_points()+")                     ";
  str  = extract(str,0,25);
  str += " Combat sphere: "+(int)obj->query_combat_sphere()+"("+
         (int)obj->query_combat_sphere_points()+")                      ";
  str  = extract(str,0,50);
  str += " Protection sphere: "+(int)obj->query_protection_sphere()+"("+
         (int)obj->query_protection_sphere_points()+")                  ";
  str  = extract(str,0,80);
  write(str+"\n");
}
#endif /* PALADIN_H */