]> jfr.im git - irc/gameservirc.git/blobdiff - gameserv/player.cpp
Added everything necessary to save overtop of the old dragon when someone beats the...
[irc/gameservirc.git] / gameserv / player.cpp
index c09f615696ecbd5ffa92b428fb369dd7d00c2fc7..372ebe1fbb726ca903065c27fbc6cde467ba5d25 100644 (file)
@@ -1,19 +1,14 @@
 #include "player.h"
-#include <stdlib.h>
+#include "pouch.h"
+#include "extern.h"
+#include "flags.h"
+#include <string>
 #include <stdio.h>
 
+using namespace std;
+
 void Player::reset()
 {
-    if (name)
-       delete name;
-    if (password)
-       delete password;
-
-    name = new char[64];
-    password = new char[256];
-    name[0] = '\0';
-    password[0] = '\0';
-
     exp = 1;
     gold = 0;
     bank = 500;
@@ -24,13 +19,25 @@ void Player::reset()
     armor = 1;
     weapon = 1;
     level = 1;
-    alive = 1;
-    started = 1; // Possibly deprecated
-    forest_fights = 100;
+    forest_fights = forestfights;
     player_fights = 3;
     fight = NULL;
     master = NULL;
     battle = NULL;
+    flags = 0;
+    lastcommand = 0;
+    lastlogin = 0;
+    setAlive(this);
+    inventory.reset();
+}
+
+Player::Player()
+{
+    setData(NULL);
+
+    #ifdef DEBUGMODE
+       log("New Player: %s", name.c_str());
+    #endif
 }
 
 Player::Player(aClient *user)
@@ -38,54 +45,69 @@ Player::Player(aClient *user)
 
     if (user)
     {
-       if (user->stats)
-           setData(user->stats);
-       else
-           reset(); // Set Defaults
-       strcpy(name, user->getNick());
+       setData(user->stats);
+       name = user->getNick();
     }
     else
-    {
-       reset(); // Set default properties
-       int num = rand() % 32767;
-       sprintf(name, "Player%d", num);
-    }
-    cout << "New Player: " << name << endl << flush;
+       setData(NULL);
 }
+
 Player::Player(char *n)
 {
     reset(); // Set defaults
 
-    strcpy(name, n);
+    name = n;
+
+    #ifdef DEBUGMODE
+       log("New Player: %s", name.c_str());
+    #endif
+}
 
-    cout << "New Player: " << name << endl << flush;
+Player::Player(string n)
+{
+    reset();
+    name = n;
+    #ifdef DEBUGMODE
+       log("New Player: %s", name.c_str());
+    #endif
 }
 
 Player::~Player()
-{    
-    cout << "Deleting player";
+{   
+    #ifdef DEBUGMODE
+       string *output;
+       output = new string("Deleting Player");
+    #endif
+    #ifdef DEBUGMODE
+        *output += ": " + name;
+    #endif
 
-    if (name)
-    {
-       cout << ": " << name;
-       delete name;
-    }
-    if (password)
-    {
-       cout << "   Password: " << password;
-       delete password;
-    }
-    cout << endl << "Player Deleted";
+    #ifdef DEBUGMODE
+       *output += "    Password: " + password;
+       log ("%s", output->c_str());
+       delete output;
+    #endif
+}
+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::setData(Player *right)
 {
     if (right)
     {
-        strcpy(name, right->name);
-       strcpy(password, right->password);
-
+       name = right->name;
+       password = right->password;
         exp = right->exp;
         gold = right->gold;
         bank = right->bank;
@@ -96,34 +118,94 @@ void Player::setData(Player *right)
         armor = right->armor;
         weapon = right->weapon;
         level = right->level;
-        alive = right->alive;
-        started = right->started; // Possibly obsoleted
         forest_fights = right->forest_fights;
         player_fights = right->player_fights;
-       cout << "Setting Player data for " << right->name << endl;
+       flags = right->flags;
+       inventory.setInventory(&right->inventory);
+       client = right->client;
+       lastcommand = right->lastcommand;
+       lastlogin = right->lastlogin;
+    }
+    else
+    {
+       char *temp;
+        reset();
+       temp = new char[16];
+       client = NULL;
+       int num = rand() % 32767;
+       snprintf(temp, 16, "Player: %d", num);
+       name = temp;
+       delete []temp;
     }
+
+    #ifdef DEBUGMODE
+       log("Setting Player data for %s", name.c_str());
+    #endif
 }
 
-const Player &Player::operator=( const Player &right )
+monster_::~monster_()
 {
-    if (&right != this)
-    {
-       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;
-       alive = right.alive;
-       started = right.started; // Possibly obsoleted
-       forest_fights = right.forest_fights;
-       player_fights = right.player_fights;
-    }
-    return *this;    // Enables Cascading ( x = y = z;)
+}
+
+monster_::monster_()
+{
+    name.erase();
+    weapon.erase();
+    death.erase();
+    strength = 0;
+    defense = 0;
+    exp = 0;
+    gold = 0;
+    maxhp = hp = 0;
+}
+
+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;
+}
+
+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;
+}
+
+long int Player::setFlags(long int newflags)
+{
+    flags = newflags;
+    return getFlags();
+}
+
+long int Player::addFlag(long int flag)
+{
+    flags |= flag;
+    return getFlags();
+}
+
+long int Player::remFlag(long int flag)
+{
+    flags &= ~flag;
+    return getFlags();
+}
+
+Pouch::Pouch(int h, int s, int d)
+{
+    setHealing(h);
+    setStrength(s);
+    setDefense(d);
 }