summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/defines.h2
-rw-r--r--src/game-server/being.cpp5
-rw-r--r--src/game-server/buysell.cpp2
-rw-r--r--src/game-server/trade.cpp3
-rw-r--r--src/scripting/lua.cpp29
5 files changed, 34 insertions, 7 deletions
diff --git a/src/defines.h b/src/defines.h
index fc99fb60..89b9b383 100644
--- a/src/defines.h
+++ b/src/defines.h
@@ -159,7 +159,7 @@ enum Element
#define ATTR_MOVE_SPEED_RAW 17
// Money and inventory size attributes.
-#define ATTR_GP 18
+#define ATTR_MONEY 18
#define ATTR_INV_CAPACITY 19
/**
diff --git a/src/game-server/being.cpp b/src/game-server/being.cpp
index c2228dcc..a01126f0 100644
--- a/src/game-server/being.cpp
+++ b/src/game-server/being.cpp
@@ -528,6 +528,11 @@ bool Being::recalculateBaseAttribute(unsigned int attr)
// Provisional
newBase = 2000.0 + getModifiedAttribute(ATTR_STR) * 180.0;
break;
+ case ATTR_MONEY:
+ // Set the money to 0 if it was never set before.
+ if (getModifiedAttribute(ATTR_MONEY) < 0)
+ newBase = 0.0;
+ break;
}
if (newBase != getAttribute(attr))
{
diff --git a/src/game-server/buysell.cpp b/src/game-server/buysell.cpp
index b3abb3e2..4c083f5c 100644
--- a/src/game-server/buysell.cpp
+++ b/src/game-server/buysell.cpp
@@ -32,7 +32,7 @@
#include <algorithm>
BuySell::BuySell(Character *c, bool sell):
- mCurrencyId(ATTR_GP), mChar(c), mSell(sell)
+ mCurrencyId(ATTR_MONEY), mChar(c), mSell(sell)
{
c->setBuySell(this);
}
diff --git a/src/game-server/trade.cpp b/src/game-server/trade.cpp
index 51509307..bcdc9974 100644
--- a/src/game-server/trade.cpp
+++ b/src/game-server/trade.cpp
@@ -38,7 +38,8 @@
*/
Trade::Trade(Character *c1, Character *c2):
- mChar1(c1), mChar2(c2), mMoney1(0), mMoney2(0), mState(TRADE_INIT), mCurrencyId(ATTR_GP)
+ mChar1(c1), mChar2(c2), mMoney1(0), mMoney2(0), mState(TRADE_INIT),
+ mCurrencyId(ATTR_MONEY)
{
MessageOut msg(GPMSG_TRADE_REQUEST);
msg.writeInt16(c1->getPublicID());
diff --git a/src/scripting/lua.cpp b/src/scripting/lua.cpp
index 3a615412..57146cb9 100644
--- a/src/scripting/lua.cpp
+++ b/src/scripting/lua.cpp
@@ -370,8 +370,14 @@ static int chr_inv_change(lua_State *s)
int id = lua_tointeger(s, i * 2 + 2);
int nb = lua_tointeger(s, i * 2 + 3);
- if (id == 0)
- LOG_WARN("chr_inv_change: id 0! Currency is now handled through attributes!");
+ if (id == 0) // Id 0 = Change money amount.
+ {
+ double money = q->getModifiedAttribute(ATTR_MONEY);
+ money += nb;
+ q->setAttribute(ATTR_MONEY, money);
+ lua_pushboolean(s, 1);
+ return 1;
+ }
else if (nb < 0)
{
nb = inv.remove(id, -nb);
@@ -421,8 +427,23 @@ static int chr_inv_count(lua_State *s)
Inventory inv(q);
for (int i = 2; i <= nb_items + 1; ++i)
{
- int nb = inv.count(luaL_checkint(s, i));
- lua_pushinteger(s, nb);
+ int id = luaL_checkint(s, i);
+
+ // Id 0 = Money - get it through attributes
+ if (id == 0)
+ {
+ int money = (int) q->getAttribute(ATTR_MONEY);
+
+ if (money < 0)
+ money = 0;
+ lua_pushinteger(s, money);
+ }
+ else
+ {
+ // Otherwise, return the normal count result
+ int nb = inv.count(id);
+ lua_pushinteger(s, nb);
+ }
}
return nb_items;
}