#include "item.h"
#include "player.h"
+#include "extern.h"
item::item()
{
mymodifiers[x] = 0;
}
-item::item(const char *name, long int p, int uses, int m1, int m2, int m3, int m4, int m5, int m6, int m7, int m8)
+item::item(const char *name, long int p, int uses, long int identifier, int m1, int m2, int m3, int m4, int m5, int m6, int m7, int m8)
{
myname = name; // string = char*
myprice = p;
mymodifiers[5] = m6;
mymodifiers[6] = m7;
mymodifiers[7] = m8;
+ id = identifier;
}
-item::item(string name, long int p, int uses, int m1, int m2, int m3, int m4, int m5, int m6, int m7, int m8)
+item::item(string name, long int p, int uses, long int identifier, int m1, int m2, int m3, int m4, int m5, int m6, int m7, int m8)
{
myname = name; // string = char*
myprice = p;
mymodifiers[5] = m6;
mymodifiers[6] = m7;
mymodifiers[7] = m8;
+ id = identifier;
}
item::~item()
{
+ for (int x = 0; x < 8; x++)
+ {
+ mymodifiers[x] = 0;
+ }
+
+ myuses = 0;
+ myname = "";
+ myprice = 0;
+}
+
+void item::setType(type t)
+{
+ mytype = t;
}
bool item::operator<(const item &right) const
return myname != right.myname;
}
+item &item::operator=(const item &right)
+{
+ myname = right.myname;
+ myprice = right.myprice;
+ myuses = right.myuses;
+ id = right.id;
+ mytype = right.mytype;
+
+ for (int x = 0; x < 8; x++)
+ {
+ mymodifiers[x] = right.mymodifiers[x];
+ }
+ return *this; // enables cascading x=y=z;
+}
+weapon::~weapon()
+{
+}
+
+bool weapon::setData(char *datastr)
+{
+ try
+ {
+ char *temp;
+ temp = strtok(datastr, "~"); // Type
+
+ mytype = WEAPON;
+ // Grab the item's id
+ temp = strtok(NULL, "~");
+ id = stringtoint(temp);
+
+ // Grab the item's name
+ temp = strtok(NULL, "~");
+ myname = temp;
+
+ // Grab the item's price
+ temp = strtok(NULL, "~");
+ myprice = stringtoint(temp);
+
+ // Grab the item's uses
+ temp = strtok(NULL, "~");
+ myuses = stringtoint(temp);
+
+ // Grab the item's modifiers
+ for (int x = 0; x < 4; x++)
+ {
+ temp = strtok(NULL, "~");
+ mymodifiers[x] = stringtoint(temp);
+ }
+ // If we got here, we're successful
+ return true;
+ }
+ catch (char *str)
+ {
+ log("Exception setting weapon data: %s", str);
+ return false;
+ }
+}
+
bool weapon::use(Player *p)
{
// weapon(char *name, int p=0, int uses = -1, int strength=0, int defense=0, int maxhp=0)
p->maxhp -= mymodifiers[2];
}
+armor::~armor()
+{
+}
+
void armor::undo(Player *p)
{
p->strength -= mymodifiers[0];
p->maxhp -= mymodifiers[2];
}
+bool armor::setData(char *datastr)
+{
+ try
+ {
+ char *temp;
+ strtok(datastr, "~"); // Type
+
+ mytype = ARMOR;
+
+ // Grab the item's id
+ temp = strtok(NULL, "~");
+ id = stringtoint(temp);
+
+ // Grab the item's name
+ temp = strtok(NULL, "~");
+ myname = temp;
+
+ // Grab the item's price
+ temp = strtok(NULL, "~");
+ myprice = stringtoint(temp);
+
+ // Grab the item's uses
+ temp = strtok(NULL, "~");
+ myuses = stringtoint(temp);
+
+ // Grab the item's modifiers
+ for (int x = 0; x < 4; x++)
+ {
+ temp = strtok(NULL, "~");
+ mymodifiers[x] = stringtoint(temp);
+ }
+ // If we got here, we were successful
+ return true;
+ }
+ catch(char *str)
+ {
+ log("Exception setting armor data: %s", str);
+ return false;
+ }
+
+}
+
bool armor::use(Player *p)
{
// weapon(char *name, int p=0, int uses = -1, int strength=0, int defense=0, int maxhp=0)
return true;
}
+potion::~potion()
+{
+}
+
bool potion::use(Player *p)
{
// potion(char *name, int p=0, int uses = 1, int strength=0, int defense=0, int maxhp=0, int hp=0, int forest_fights=0, int player_fights=0, int gold=0, int bank=0)
return false;
else
{
- p->strength += mymodifiers[0];
- p->defense += mymodifiers[1];
- p->maxhp += mymodifiers[2];
- p->hp += mymodifiers[3];
- p->forest_fights += mymodifiers[4];
- p->player_fights += mymodifiers[5];
- p->gold += mymodifiers[6];
- p->bank += mymodifiers[7];
+ p->strength += myranges[0].random();
+ p->defense += myranges[1].random();
+ p->maxhp += myranges[2].random();
+ p->hp += myranges[3].random();
+ p->forest_fights += myranges[4].random();
+ p->player_fights += myranges[5].random();
+ p->gold += myranges[6].random();
+ p->bank += myranges[7].random();
}
if (myuses > 0)
{
return;
}
+
+bool potion::setData(char *datastr)
+{
+ try
+ {
+ char *temp;
+
+ temp = strtok(datastr, "~"); // Type
+
+ mytype = ARMOR;
+
+ // Grab the item's id
+ temp = strtok(NULL, "~");
+ id = stringtoint(temp);
+
+ // Grab the item's name
+ temp = strtok(NULL, "~");
+ myname = temp;
+
+ // Grab the item's price
+ temp = strtok(NULL, "~");
+ myprice = stringtoint(temp);
+
+ // Grab the item's uses
+ temp = strtok(NULL, "~");
+ myuses = stringtoint(temp);
+
+ // Grab the item's modifiers
+ for (int x = 0; x < 8; x++)
+ {
+ temp = strtok(NULL, "~");
+ myranges[x].low = stringtoint(temp);
+ temp = strtok(NULL, "~");
+ myranges[x].high = stringtoint(temp);
+ }
+ }
+ catch(char *str)
+ {
+ log("Exception setting potion data: %s", str);
+ return false;
+ }
+ // If we got here, we were successful
+ return true;
+}
+
+
+itemContainer::itemContainer()
+{
+ myuses = 0;
+ myitem = NULL;
+}
+
+itemContainer::itemContainer(item *i){
+ myuses = i->uses();
+ myitem = i;
+}
+itemContainer::itemContainer(const itemContainer &right)
+{
+ myuses = right.myuses;
+ myitem = right.myitem;
+}
+itemContainer::~itemContainer()
+{
+ myuses = 0;
+ myitem = NULL;
+}
+
+itemContainer &itemContainer::operator--()
+{
+ --myuses;
+ return *this;
+}
+
+itemContainer itemContainer::operator--(int)
+{
+ itemContainer oldValue = *this;
+
+ operator--();
+
+ return oldValue;
+}
+
+itemContainer &itemContainer::operator++()
+{
+ ++myuses;
+
+ return *this;
+}
+
+itemContainer itemContainer::operator++(int)
+{
+ itemContainer oldValue = *this;
+
+ operator++();
+
+ return oldValue;
+}
+
+void itemContainer::setItem(item *i)
+{
+ myitem = i;
+}
+
+bool itemContainer::operator<(const itemContainer &right) const
+{
+ return (*myitem < *right.myitem);
+}
+
+bool itemContainer::operator>(const itemContainer &right) const
+{
+ return (*myitem > *right.myitem);
+}
+
+bool itemContainer::operator==(const itemContainer &right) const
+{
+ return (*myitem == *right.myitem);
+}
+
+bool itemContainer::operator!=(const itemContainer &right) const
+{
+ return (*myitem == *right.myitem);
+}
+
+void itemContainer::setUses(int uses)
+{
+ myuses = uses;
+}