]> jfr.im git - irc/gameservirc.git/blob - gameserv/player.cpp
Fixed a bug that allowed more than one person to register the same player name
[irc/gameservirc.git] / gameserv / player.cpp
1 #include "player.h"
2 #include "pouch.h"
3 #include "extern.h"
4 #include "flags.h"
5 #include <stdlib.h>
6 #include <stdio.h>
7
8 void Player::reset()
9 {
10 memset(name, 0, 256);
11 memset(password, 0, 256);
12
13 exp = 1;
14 gold = 0;
15 bank = 500;
16 hp = 10;
17 maxhp = 10;
18 strength = 0;
19 defense = 0;
20 armor = 1;
21 weapon = 1;
22 level = 1;
23 forest_fights = forestfights;
24 player_fights = 3;
25 fight = NULL;
26 master = NULL;
27 battle = NULL;
28 flags = 0;
29 setAlive(this);
30 inventory.reset();
31 }
32
33 Player::Player(aClient *user)
34 {
35
36 name = new char[256];
37 password = new char[256];
38
39 if (user)
40 {
41 setData(user->stats);
42 strcpy(name, user->getNick());
43 }
44 else
45 setData(NULL);
46
47 #ifdef DEBUGMODE
48 log("New Player: %s", name);
49 #endif
50 }
51
52 Player::Player(char *n)
53 {
54 name = new char[256];
55 password = new char[256];
56
57 reset(); // Set defaults
58
59 strcpy(name, n);
60
61 log("New Player: %s", name);
62 }
63
64 Player::~Player()
65 {
66 #ifdef DEBUGMODE
67 char *output;
68 output = new char[strlen(name) + strlen(password) + 48];
69 strcpy(output, "Deleting Player");
70 #endif
71
72 if (name != NULL)
73 {
74 #ifdef DEBUGMODE
75 sprintf(output, "%s: %s", output, name);
76 #endif
77
78 delete [] name;
79 }
80
81 if (password != NULL)
82 {
83 #ifdef DEBUGMODE
84 sprintf(output, "%s Password: %s", output, password);
85 #endif
86
87 delete [] password;
88 }
89
90 #ifdef DEBUGMODE
91 log ("%s", output);
92 delete [] output;
93 #endif
94 }
95
96 void Player::setData(Player *right)
97 {
98 if (right)
99 {
100 strcpy(name, right->name);
101 strcpy(password, right->password);
102 exp = right->exp;
103 gold = right->gold;
104 bank = right->bank;
105 hp = right->hp;
106 maxhp = right->maxhp;
107 strength = right->strength;
108 defense = right->defense;
109 armor = right->armor;
110 weapon = right->weapon;
111 level = right->level;
112 forest_fights = right->forest_fights;
113 player_fights = right->player_fights;
114 flags = right->flags;
115 inventory.setInventory(&right->inventory);
116 }
117 else
118 {
119 reset();
120
121 int num = rand() % 32767;
122 sprintf(name, "Player%d", num);
123 }
124
125 log("Setting Player data for %s", name);
126 }
127
128 monster_::~monster_()
129 {
130 delete name;
131 delete weapon;
132 delete death;
133 }
134
135 monster_::monster_()
136 {
137 name = new char[64];
138 weapon = new char[64];
139 death = new char[512];
140
141 memset(name, 0, 64);
142 memset(weapon, 0, 64);
143 memset(death, 0, 512);
144 }
145
146 monster_::monster_(monster_ *m)
147 {
148 name = new char[strlen(m->name) + 1];
149 weapon = new char[strlen(m->weapon) + 1];
150 death = new char[strlen(m->death) + 1];
151
152 strcpy(name, m->name);
153 strcpy(weapon, m->weapon);
154 strcpy(death, m->death);
155
156 strength = m->strength;
157 maxhp = m->maxhp;
158 hp = m->hp;
159 gold = m->gold;
160 exp = m->exp;
161 }
162
163 long int Player::setFlags(long int newflags)
164 {
165 flags = newflags;
166 return getFlags();
167 }
168
169 long int Player::addFlag(long int flag)
170 {
171 flags |= flag;
172 return getFlags();
173 }
174
175 long int Player::remFlag(long int flag)
176 {
177 flags &= ~flag;
178 return getFlags();
179 }
180
181 Pouch::Pouch(int h, int s, int d)
182 {
183 setHealing(h);
184 setStrength(s);
185 setDefense(d);
186 }