/
lib/banish/
lib/d/coronos/
lib/d/coronos/w/alena/
lib/d/coronos/w/angel/
lib/d/coronos/w/angel/caves/
lib/d/coronos/w/angel/caves/monst/
lib/d/coronos/w/angel/city/chambers/
lib/d/coronos/w/angel/city/monst/
lib/d/coronos/w/angel/city/obj/
lib/d/coronos/w/angel/city/streets/
lib/d/coronos/w/angel/farms/plains/
lib/d/coronos/w/angel/monst/
lib/d/tempus/
lib/d/tempus/w/angel/
lib/d/tempus/w/kingbill/
lib/d/tempus/w/mirak/
lib/d/tempus/w/mirak/monst/
lib/d/tempus/w/mirak/obj/
lib/d/tempus/w/relgar/planes/baat/
lib/d/tempus/w/sarak/
lib/d/tempus/w/serepion/mon/
lib/d/tempus/w/valrejn/
lib/doc/
lib/doc/domains/
lib/doc/efun/
lib/include/fn_specs/
lib/info/
lib/inherit/base/
lib/log/
lib/log/mailbox/
lib/log/main/
lib/news/
lib/obj/party/
lib/objects/componen/
lib/open/
lib/open/party/
lib/open/paste/
lib/open/spells/
lib/open/valrejn/
lib/players/
lib/players/alena/
lib/players/alena/obj/
lib/players/alena/open/
lib/players/alena/private/
lib/players/angel/
lib/players/angel/obj/
lib/players/ash/
lib/players/biggs/
lib/players/biggs/food/
lib/players/biggs/gobkeep/
lib/players/biggs/mnstr/
lib/players/biggs/town/caves/
lib/players/biggs/town/tower/
lib/players/biggs/wpns/
lib/players/calris/
lib/players/deathurg/
lib/players/deathurg/open/
lib/players/deathurg/private/thief/
lib/players/dogberry/
lib/players/dogberry/library/
lib/players/dogberry/open/
lib/players/epsilon/
lib/players/epsilon/private/
lib/players/farewell/
lib/players/hippo/
lib/players/hippo/open/
lib/players/hippo/tools/
lib/players/jimpa/
lib/players/josh/
lib/players/josh/room/
lib/players/josh/room/mage/dungeon/
lib/players/josh/room/mage/dungeon/obj/
lib/players/josh/wep/
lib/players/kingbill/
lib/players/metatron/
lib/players/miette/
lib/players/mirak/
lib/players/mirak/open/
lib/players/parsilan/
lib/players/relgar/
lib/players/relgar/private/
lib/players/sarak/
lib/players/sarak/bugs/
lib/players/sarak/feelings/
lib/players/sarak/magical/
lib/players/sarak/minotaur/island/
lib/players/sarak/open/
lib/players/sarak/private/
lib/players/serepion/
lib/players/serepion/open/
lib/players/serepion/private/
lib/players/spike/
lib/players/spike/open/
lib/players/spike/private/
lib/players/spike/seaworld/
lib/players/valrejn/
lib/players/valrejn/open/
lib/players/valrejn/private/
lib/players/virus/
lib/players/wrath/
lib/players/wrath/arm/
lib/players/wrath/mon/
lib/players/wrath/room/
lib/players/wrath/room/entry/
lib/players/wrath/room/zolgath/
lib/players/wrath/weap/
lib/players/zil/
lib/room/
lib/room/city/arena/
lib/room/city/creator/
lib/room/city/garden/monst/
lib/room/city/library/
lib/room/city/library/open/books/
lib/room/city/shop/
lib/room/death/
lib/room/death/open/
lib/room/island/
lib/room/keeps/
lib/room/registry/
lib/room/ships/crew/
lib/room/ships/open/
lib/room/ships/open/types/bounty/
lib/room/ships/open/types/nebula/
lib/room/ships/open/types/phoenix/
lib/secure/udp_cmd_/
lib/skills/
lib/skills/fighter/
lib/skills/psionici/
lib/skills/thief/
lib/usr/
lib/usr/creators/
lib/usr/no_banis/
lib/usr/players/
#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 */