]> jfr.im git - irc/gameservirc.git/blobdiff - gameserv/player.cpp
made some changes to the player constructors
[irc/gameservirc.git] / gameserv / player.cpp
index 037c5bb0239d604aec9a507f0ad25f0b4e6085ea..70572a5200b083d685c79eb70a3176b78af1881c 100644 (file)
+#include "item.h"
 #include "player.h"
 #include "pouch.h"
 #include "extern.h"
 #include "flags.h"
-#include <stdlib.h>
+
+#include <string>
 #include <stdio.h>
 
+#if defined(HAVE_CRYPT_H)
+
+#include <crypt.h>
+
+#elif defined(HAVE_UNISTD_H)
+
+#include <unistd.h>
+
+#endif
+
+using namespace std;
+
 void Player::reset()
 {
-    memset(name, 0, 256);
-    memset(password, 0, 256);
-
-    exp = 1;
-    gold = 0;
-    bank = 500;
-    hp = 10;
-    maxhp = 10;
-    strength = 0;
-    defense = 0;
-    armor = 1;
-    weapon = 1;
-    level = 1;
-    forest_fights = forestfights;
-    player_fights = 3;
-    fight = NULL;
-    master = NULL;
-    battle = NULL;
-    flags = 0;
-    lastcommand = 0;
-    lastlogin = 0;
-    setAlive(this);
-    inventory.reset();
+  exp = 1;
+  gold = 0;
+  bank = 500;
+  hp = 10;
+  maxhp = 10;
+  strength = 2;
+  defense = 1;
+  level = 1;
+  forest_fights = forestfights;
+  player_fights = 3;
+  fight = NULL;
+  master = NULL;
+  battle = NULL;
+  flags = 0;
+  lastcommand = 0;
+  lastlogin = time(NULL);
+  setAlive(this);
+  clearMaster(this);
+  w = NULL;
+  a = NULL;
+  inventory->clear();
 }
 
 Player::Player()
 {
-    name = new char[256];
-    password = new char[256];
-    setData(NULL);
+  inventory = new pouch();
+  setData(NULL);
+  
+#ifdef DEBUGMODE
+  log("New Player: %s", name.c_str());
+#endif
+}
 
-    #ifdef DEBUGMODE
-       log("New Player: %s", name);
-    #endif
+Player::Player(char *n)
+{
+  inventory = new pouch();
+  reset(); // Set defaults
+  
+  name = n;
+  
+#ifdef DEBUGMODE
+  log("New Player: %s", name.c_str());
+#endif
 }
 
-Player::Player(aClient *user)
+Player::Player(string n)
 {
+  inventory = new pouch();
+  reset();
+  name = n;
+#ifdef DEBUGMODE
+  log("New Player: %s", name.c_str());
+#endif
+}
+
+Player::~Player()
+{
+  if (inventory != NULL)
+       delete inventory;
+  
+  delMonster();
+  delMaster();
+  delBattle();
+#ifdef DEBUGMODE
+  string *output;
+  output = new string("Deleting Player");
+  *output += ": " + name;
+  *output += "    Password: " + password;
+  log ("%s", output->c_str());
+  delete output;
+#endif
+}
 
-    name = new char[256];
-    password = new char[256];
+void Player::setPassword(const char *p)
+{
+  static char saltChars[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUV\
+WXYZ0123456789./";
+  static char salt[3];
+  
+  salt[0] = saltChars[rand() % strlen(saltChars)];
+  salt[1] = saltChars[rand() % strlen(saltChars)];
+  salt[2] = '\0';
+  
+  password = crypt(p, salt);
+}
+
+void Player::setRawPassword(const char *p)
+{
+  password = p;
+}
 
-    if (user)
+void Player::setData(Player *right)
+{
+  if (right)
+    {
+      name = right->name;
+      password = right->password;
+      exp = right->exp;
+      gold = right->gold;
+      bank = right->bank;
+      hp = right->hp;
+      maxhp = right->maxhp;
+      strength = right->strength;
+      defense = right->defense;
+      level = right->level;
+      forest_fights = right->forest_fights;
+      player_fights = right->player_fights;
+      flags = right->flags;
+      *inventory = *right->inventory;
+      client = right->client;
+      lastcommand = right->lastcommand;
+      lastlogin = right->lastlogin;
+      w = right->w;
+      a = right->a;
+    }
+  else
     {
-       setData(user->stats);
-       strcpy(name, user->getNick());
+      char *temp;
+      reset();
+      temp = new char[16];
+      client = NULL;
+      int num = rand() % 32767;
+      snprintf(temp, 16, "Player: %d", num);
+      name = temp;
+      delete []temp;
     }
-    else
-       setData(NULL);
+  
+#ifdef DEBUGMODE
+  log("Setting Player data for %s", name.c_str());
+#endif
 }
 
-Player::Player(char *n)
+Monster::~Monster()
 {
-    name = new char[256];
-    password = new char[256];
+}
 
-    reset(); // Set defaults
+Monster::Monster()
+{
+  name.erase();
+  weapon.erase();
+  death.erase();
+  strength = 0;
+  defense = 0;
+  exp = 0;
+  gold = 0;
+  maxhp = hp = 0;
+}
 
-    strcpy(name, n);
+Monster::Monster(Monster *m)
+{
+  name = m->name;
+  weapon = m->weapon;
+  death = m->death;
+  strength = m->strength;
+  defense = m->defense;
+  maxhp = m->maxhp;
+  hp = m->hp;
+  gold = m->gold;
+  exp = m->exp;
+}
 
-    #ifdef DEBUGMODE
-       log("New Player: %s", name);
-    #endif
+Monster::Monster(Monster &m)
+{
+  name = m.name;
+  weapon = m.weapon;
+  death = m.death;
+  strength = m.strength;
+  defense = m.defense;
+  maxhp = m.maxhp;
+  hp = m.hp;
+  gold = m.gold;
+  exp = m.exp;
 }
 
-Player::~Player()
-{   
-    #ifdef DEBUGMODE
-       char *output;
-       output = new char[strlen(name) + strlen(password) + 48];
-       strcpy(output, "Deleting Player");
-    #endif
-    if (name != NULL)
-    {
-       #ifdef DEBUGMODE
-           sprintf(output, "%s: %s", output, name);
-       #endif
+Monster::Monster(const Monster &m)
+{
+  name = m.name;
+  weapon = m.weapon;
+  death = m.death;
+  strength = m.strength;
+  defense = m.defense;
+  maxhp = m.maxhp;
+  hp = m.hp;
+  gold = m.gold;
+  exp = m.exp;
+}
 
-       delete [] name;
-    }
+long int Player::setFlags(long int newflags)
+{
+  flags = newflags;
+  return getFlags();
+}
 
-    if (password != NULL)
-    {
-       #ifdef DEBUGMODE
-           sprintf(output, "%s    Password: %s", output, password);
-       #endif
+long int Player::addFlag(long int flag)
+{
+  flags |= flag;
+  return getFlags();
+}
 
-       delete [] password;
-    }
+long int Player::remFlag(long int flag)
+{
+  flags &= ~flag;
+  return getFlags();
+}
 
-    #ifdef DEBUGMODE
-       log ("%s", output);
-       delete [] output;
-    #endif
+void Player::setWeapon(item &weap)
+{
+  w = &weap;
+}
+void Player::setArmor(item &arm)
+{
+  a = &arm;
 }
 
-void Player::setData(Player *right)
+void Player::setName(string &n)
 {
-    if (right)
-    {
-        strcpy(name, right->name);
-        strcpy(password, right->password);
-        exp = right->exp;
-        gold = right->gold;
-        bank = right->bank;
-        hp = right->hp;
-        maxhp = right->maxhp;
-        strength = right->strength;
-        defense = right->defense;
-        armor = right->armor;
-        weapon = right->weapon;
-        level = right->level;
-        forest_fights = right->forest_fights;
-        player_fights = right->player_fights;
-       flags = right->flags;
-       inventory.setInventory(&right->inventory);
-       client = right->client;
-       lastcommand = right->lastcommand;
-       lastlogin = right->lastlogin;
-    }
-    else
-    {
-        reset();
-       client = NULL;
-       int num = rand() % 32767;
-       sprintf(name, "Player%d", num);
-    }
+  name = n;
+}
 
-    #ifdef DEBUGMODE
-       log("Setting Player data for %s", name);
-    #endif
+void Player::setName(const char *n)
+{
+  name = n;
 }
 
-monster_::~monster_()
+void Player::setLevel(int l)
 {
-    delete name;
-    delete weapon;
-    delete death;
+  if (l > 0 && l <= REALLEVELS)
+       {
+         level = l;
+       }
 }
 
-monster_::monster_()
+void Player::setExp(long int e)
 {
-    name = new char[64];
-    weapon = new char[64];
-    death = new char[512];
+  if (e <= 2000000000 && e > 0)
+       {
+         exp = e;
+       }
+}
 
-    memset(name, 0, 64);
-    memset(weapon, 0, 64);
-    memset(death, 0, 512);
+void Player::setGold(long int g)
+{
+  if (g <= 2000000000 && g >= 0)
+       {
+         gold = g;
+       }
+  else if (g > 2000000000)
+       {
+         gold = 2000000000;
+       }
 }
 
-monster_::monster_(monster_ *m)
+void Player::setBank(long int b)
 {
-    name = new char[strlen(m->name) + 1];
-    weapon = new char[strlen(m->weapon) + 1];
-    death = new char[strlen(m->death) + 1];
+  if (b <= 2000000000 && b >= 0)
+       {
+         bank = b;
+       }
+  else if (b > 2000000000)
+       {
+         bank = 2000000000;
+       }
+}
 
-    strcpy(name, m->name);
-    strcpy(weapon, m->weapon);
-    strcpy(death, m->death);
+void Player::setHP(int h)
+{
+  hp = h;
 
-    strength = m->strength;
-    maxhp = m->maxhp;
-    hp = m->hp;
-    gold = m->gold;
-    exp = m->exp;
+  if (hp < 0)
+       {
+         hp = 0;
+       }
+  else if (hp > maxhp)
+       {
+         hp = maxhp; // You can't go higher than your maxhp
+       }
 }
 
-monster_::monster_(monster_ &m)
+void Player::setMaxHP(int m)
 {
-    name = new char[strlen(m.name) + 1];
-    weapon = new char[strlen(m.weapon) + 1];
-    death = new char[strlen(m.death) + 1];
+  maxhp = m;
 
-    strcpy(name, m.name);
-    strcpy(weapon, m.weapon);
-    strcpy(death, m.death);
+  if (maxhp < 0)
+       {
+         maxhp = 10;
+       }
+  else if (maxhp > 32000)
+       {
+         maxhp = 32000;
+       }
+}
 
-    strength = m.strength;
-    maxhp = m.maxhp;
-    hp = m.hp;
-    gold = m.gold;
-    exp = m.exp;
+void Player::setStrength(int s)
+{
+  strength = s;
+  if (strength < 0)
+       {
+         strength = 1;
+       }
+  else if (strength > 32000)
+       {
+         strength = 32000;
+       }
 }
 
-long int Player::setFlags(long int newflags)
+void Player::setDefense(int d)
 {
-    flags = newflags;
-    return getFlags();
+  defense = d;
+
+  if (defense < 0)
+       {
+         defense = 1;
+       }
+  else if (defense > 32000)
+       {
+         defense = 32000;
+       }
 }
 
-long int Player::addFlag(long int flag)
+void Player::setForestFights(int ff)
 {
-    flags |= flag;
-    return getFlags();
+  forest_fights = ff;
+
+  if (forest_fights < 0)
+       {
+         forest_fights = 0;
+       }
+  else if (forest_fights > 32000)
+       {
+         forest_fights = 32000;
+       }
 }
 
-long int Player::remFlag(long int flag)
+void Player::setPlayerFights(int pf)
+{
+  player_fights = pf;
+
+  if (player_fights < 0)
+       {
+         player_fights = 0;
+       }
+  else if (player_fights > 32000)
+       {
+         player_fights = 32000;
+       }
+}
+
+void Player::setClient(aClient *c)
+{
+  client = c;
+}
+
+void Player::setMonster(Monster *m)
 {
-    flags &= ~flag;
-    return getFlags();
+  fight = new Monster(m);
 }
 
-Pouch::Pouch(int h, int s, int d)
+void Player::setMyMaster(Monster *m)
 {
-    setHealing(h);
-    setStrength(s);
-    setDefense(d);
+  master = new Monster(m);
 }
+
+void Player::setBattle(aClient *b)
+{
+  battle = b;
+}
+
+void Player::addExp(int e)
+{
+  setExp(getExp() + e);
+}
+
+void Player::addGold(int g)
+{
+  setGold(getGold() + g);
+}
+
+void Player::addBank(int b)
+{
+  setBank(getBank() + b);
+}
+
+void Player::addHP(int h)
+{
+  setHP(getHP() + h);
+}
+
+void Player::addMaxHP(int m)
+{
+  setMaxHP(getMaxHP() + m);
+}
+
+void Player::addStrength(int s)
+{
+  setStrength(getStrength() + s);
+}
+
+void Player::addDefense(int d)
+{
+  setDefense(getDefense() + d);
+}
+
+void Player::addForestFights(int ff)
+{
+  setForestFights(getForestFights() + ff);
+}
+
+void Player::addPlayerFights(int pf)
+{
+  setPlayerFights(getPlayerFights() + pf);
+}
+
+void Player::addLevel(int l)
+{
+  setLevel(getLevel() + l);
+}
+
+void Player::subtractLevel(int l)
+{
+  setLevel(getLevel() - l);
+}
+
+void Player::subtractExp(long int e)
+{
+  setExp(getExp() - e); 
+}
+
+void Player::subtractGold(long int g)
+{
+  setGold(getGold() - g);
+}
+
+void Player::subtractBank(long int b)
+{
+  setBank(getBank() - b);
+}
+
+void Player::subtractHP(int h)
+{
+  setHP(getHP() - h);
+}
+
+void Player::subtractMaxHP(int m)
+{
+  setMaxHP(getMaxHP() - m);
+}
+
+void Player::subtractStrength(int s)
+{
+  setStrength(getStrength() - s);
+}
+
+void Player::subtractDefense(int d)
+{
+  setDefense(getDefense() - d);
+}
+
+void Player::subtractForestFights(int ff)
+{
+  setForestFights(getForestFights() - ff);
+}
+
+void Player::subtractPlayerFights(int pf)
+{
+  setPlayerFights(getPlayerFights() - pf);
+}
+
+void Player::delMonster()
+{
+  if (fight)
+       delete fight;
+
+  fight = NULL;
+}
+
+void Player::delMaster()
+{
+  if (master)
+       delete master;
+
+  master = NULL;
+}
+
+void Player::delBattle()
+{
+  // Don't delete the other player's aClient
+  battle = NULL;
+}
+