Skill Code

#pragma strict_types

#include <skills.h>

#define LOG_SKILLS 1
#define LOG(X) "/secure/tool"->adm_log("SKILLS",ctime()+" "+X);

mapping weapon_skills;
static mapping tmp_weapon_skills;

public int increase_skill( string skill, int amount );
public int set_skill( string skill, int amount );
public int remove_skill( string skill );
public int query_skill( string skill );
public int increase_tmp_skill( string skill, int amount );
public int remove_tmp_skill( string skill );
public int query_tmp_skill( string skill );


public int increase_skill( string skill, int amount ) {
 if (!weapon_skills) weapon_skills = ([ ]);

 weapon_skills[ skill ] += amount;
 if (interactive(this_object()) && this_player() != this_object()) {
  LOG(this_player()->query_real_name()+" increased "+this_object()->query_real_name()+
     " "+skill+" by "+amount);
  }
#if LOG_SKILLS 
 if (this_player() && this_object()->query_is_player())
  log_file( "SKILLS", this_object()->query_name()+"'s "+ skill +
     " increased by "+amount+" by "+ 
     this_player()->query_real_name()+"\n");
#endif

 if (weapon_skills[ skill ] > MAX_DISPLAY_SKILL) 
  weapon_skills[skill] = MAX_DISPLAY_SKILL;
 if (weapon_skills[ skill ] < 0 )
  weapon_skills[skill] = 0;

 return weapon_skills[skill];
}

public int set_skill( string skill, int amount ) {
 if (!weapon_skills) weapon_skills = ([ ]);

 weapon_skills[ skill ] = amount;

 if (interactive(this_object()) && this_player() != this_object()) {
  LOG(this_player()->query_real_name()+" set "+this_object()->query_real_name()+
     " "+skill+" by "+amount);
  }
#if LOG_SKILLS 
 if (this_player() && this_object()->query_is_player())
  log_file( "SKILLS", this_object()->query_name()+"'s "+
     skill + " set to "+amount+" by "+ 
     this_player()->query_real_name()+"\n");
#endif

 if (weapon_skills[ skill ] > MAX_DISPLAY_SKILL) 
  weapon_skills[skill] = MAX_DISPLAY_SKILL;
 if (weapon_skills[ skill ] < 0 )
  weapon_skills[skill] = 0;
 return weapon_skills[skill];
}

public int remove_skill( string skill ) {
int amount;
 if (!weapon_skills) weapon_skills = ([ ]);
 amount = weapon_skills[skill];
 if (interactive(this_object()) && this_player() != this_object()) {
  LOG(this_player()->query_real_name()+" removed "+this_object()->query_real_name()+
  " "+skill);
  }

#if LOG_SKILLS 
 if (this_player() && this_object()->query_is_player())
  log_file( "SKILLS", this_object()->query_name()+"'s "+
     skill + " removed by "+
     this_player()->query_real_name()+"\n");
#endif

 m_delete(weapon_skills,skill);
 return amount;
}

public int query_skill( string skill ) {
 int amount;
 if (!weapon_skills) weapon_skills = ([ ]);
 if (!tmp_weapon_skills) tmp_weapon_skills = ([ ]);

 amount = weapon_skills[skill] + tmp_weapon_skills[skill];
 return amount;
}

public int increase_tmp_skill( string skill, int amount ) {
 if (!tmp_weapon_skills) tmp_weapon_skills = ([ ]);
 tmp_weapon_skills[ skill ] += amount;

 return tmp_weapon_skills[skill];
}

public int remove_tmp_skill( string skill ) {
int amount;
 if (!tmp_weapon_skills) tmp_weapon_skills = ([ ]);
 amount = tmp_weapon_skills[skill];

 m_delete(tmp_weapon_skills,skill);
 return amount;
}


public int query_tmp_skill( string skill ) {
 if (!tmp_weapon_skills) tmp_weapon_skills = ([ ]);
 return tmp_weapon_skills[skill];
}

mapping query_weapon_skills() {
  if (!weapon_skills) return ([]);
  return copy_mapping(weapon_skills);
}
mapping query_tmp_weapon_skills() {
  if (!tmp_weapon_skills) return ([]);
  return copy_mapping(tmp_weapon_skills);
}