[Quest API] Add AddPlatinum(), GetCarriedPlatinum() and TakePlatinum() to Perl/Lua. (#2079)

* [Quest API] Add AddPlatinum(), GetCarriedPlatinum() and TakePlatinum() to Perl/Lua.
- Allows for easier NPC interactions.
- GetCarriedPlatinum() adds together all currencies in inventory based on conversion amounts so it works easily with removals/checks.
- Add $client->AddPlatinum(platinum, update_client) to Perl.
- Add $client->GetCarriedPlatinum() to Perl.
- Add $client->TakePlatinum(platinum, update_client) to Perl.
- Add client:AddPlatinum(platinum, update_client) to Lua.
- Add client:GetCarriedPlatinum() to Lua.
- Add client:TakePlatinum(platinum, update_client) to Lua.

* Formatting.
This commit is contained in:
Kinglykrab 2022-04-30 10:57:05 -04:00 committed by GitHub
parent b1311780a7
commit 1b7c12297d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 293 additions and 145 deletions

View File

@ -2170,78 +2170,84 @@ void Client::QuestReadBook(const char* text, uint8 type) {
}
}
void Client::SendClientMoneyUpdate(uint8 type,uint32 amount){
auto outapp = new EQApplicationPacket(OP_TradeMoneyUpdate, sizeof(TradeMoneyUpdate_Struct));
TradeMoneyUpdate_Struct* mus= (TradeMoneyUpdate_Struct*)outapp->pBuffer;
mus->amount=amount;
mus->trader=0;
mus->type=type;
QueuePacket(outapp);
safe_delete(outapp);
uint32 Client::GetCarriedPlatinum() {
return (
GetMoney(3, 0) +
(GetMoney(2, 0) / 10) +
(GetMoney(1, 0) / 100) +
(GetMoney(0, 0) / 1000)
);
}
bool Client::TakeMoneyFromPP(uint64 copper, bool updateclient) {
int64 copperpp,silver,gold,platinum;
copperpp = m_pp.copper;
bool Client::TakePlatinum(uint32 platinum, bool update_client) {
if (GetCarriedPlatinum() >= platinum) {
auto copper = static_cast<uint64>(platinum * 1000);
return TakeMoneyFromPP(copper, update_client);
}
return false;
}
bool Client::TakeMoneyFromPP(uint64 copper, bool update_client) {
int64 player_copper, silver, gold, platinum;
player_copper = m_pp.copper;
silver = static_cast<int64>(m_pp.silver) * 10;
gold = static_cast<int64>(m_pp.gold) * 100;
platinum = static_cast<int64>(m_pp.platinum) * 1000;
int64 clienttotal = copperpp + silver + gold + platinum;
int64 client_total = player_copper + silver + gold + platinum;
clienttotal -= copper;
if(clienttotal < 0)
{
client_total -= copper;
if (client_total < 0) {
return false; // Not enough money!
}
else
{
copperpp -= copper;
if(copperpp <= 0)
{
copper = std::abs(copperpp);
} else {
player_copper -= copper;
if(player_copper <= 0) {
copper = std::abs(player_copper);
m_pp.copper = 0;
}
else
{
m_pp.copper = copperpp;
if(updateclient)
} else {
m_pp.copper = player_copper;
if (update_client) {
SendMoneyUpdate();
}
SaveCurrency();
return true;
}
silver -= copper;
if(silver <= 0)
{
if (silver <= 0) {
copper = std::abs(silver);
m_pp.silver = 0;
}
else
{
m_pp.silver = silver/10;
m_pp.copper += (silver-(m_pp.silver*10));
if(updateclient)
} else {
m_pp.silver = silver / 10;
m_pp.copper += (silver - (m_pp.silver * 10));
if (update_client) {
SendMoneyUpdate();
}
SaveCurrency();
return true;
}
gold -=copper;
if(gold <= 0)
{
if (gold <= 0) {
copper = std::abs(gold);
m_pp.gold = 0;
}
else
{
m_pp.gold = gold/100;
uint64 silvertest = (gold-(static_cast<uint64>(m_pp.gold)*100))/10;
m_pp.silver += silvertest;
uint64 coppertest = (gold-(static_cast<uint64>(m_pp.gold)*100+silvertest*10));
m_pp.copper += coppertest;
if(updateclient)
} else {
m_pp.gold = gold / 100;
uint64 silver_test = (gold - (static_cast<uint64>(m_pp.gold) * 100)) / 10;
m_pp.silver += silver_test;
uint64 copper_test = (gold - (static_cast<uint64>(m_pp.gold) * 100 + silver_test * 10));
m_pp.copper += copper_test;
if (update_client) {
SendMoneyUpdate();
}
SaveCurrency();
return true;
}
@ -2250,74 +2256,84 @@ bool Client::TakeMoneyFromPP(uint64 copper, bool updateclient) {
//Impossible for plat to be negative, already checked above
m_pp.platinum = platinum/1000;
uint64 goldtest = (platinum-(static_cast<uint64>(m_pp.platinum)*1000))/100;
m_pp.gold += goldtest;
uint64 silvertest = (platinum-(static_cast<uint64>(m_pp.platinum)*1000+goldtest*100))/10;
m_pp.silver += silvertest;
uint64 coppertest = (platinum-(static_cast<uint64>(m_pp.platinum)*1000+goldtest*100+silvertest*10));
m_pp.copper = coppertest;
if(updateclient)
m_pp.platinum = platinum / 1000;
uint64 gold_test = (platinum - (static_cast<uint64>(m_pp.platinum) * 1000)) / 100;
m_pp.gold += gold_test;
uint64 silver_test = (platinum - (static_cast<uint64>(m_pp.platinum) * 1000 + gold_test * 100)) / 10;
m_pp.silver += silver_test;
uint64 copper_test = (platinum - (static_cast<uint64>(m_pp.platinum) * 1000 + gold_test * 100 + silver_test * 10));
m_pp.copper = copper_test;
if (update_client) {
SendMoneyUpdate();
}
RecalcWeight();
SaveCurrency();
return true;
}
}
void Client::AddMoneyToPP(uint64 copper, bool updateclient){
uint64 tmp;
uint64 tmp2;
tmp = copper;
void Client::AddPlatinum(uint32 platinum, bool update_client) {
auto copper = static_cast<uint64>(platinum * 1000);
AddMoneyToPP(copper, update_client);
}
void Client::AddMoneyToPP(uint64 copper, bool update_client){
uint64 temporary_copper;
uint64 temporary_copper_two;
temporary_copper = copper;
/* Add Amount of Platinum */
tmp2 = tmp/1000;
int32 new_val = m_pp.platinum + tmp2;
if(new_val < 0) { m_pp.platinum = 0; }
else { m_pp.platinum = m_pp.platinum + tmp2; }
tmp-=tmp2*1000;
temporary_copper_two = temporary_copper / 1000;
int32 new_value = m_pp.platinum + temporary_copper_two;
//if (updateclient)
// SendClientMoneyUpdate(3,tmp2);
if (new_value < 0) {
m_pp.platinum = 0;
} else {
m_pp.platinum = m_pp.platinum + temporary_copper_two;
}
temporary_copper -= temporary_copper_two * 1000;
/* Add Amount of Gold */
tmp2 = tmp/100;
new_val = m_pp.gold + tmp2;
if(new_val < 0) { m_pp.gold = 0; }
else { m_pp.gold = m_pp.gold + tmp2; }
temporary_copper_two = temporary_copper / 100;
new_value = m_pp.gold + temporary_copper_two;
tmp-=tmp2*100;
//if (updateclient)
// SendClientMoneyUpdate(2,tmp2);
if (new_value < 0) {
m_pp.gold = 0;
} else {
m_pp.gold = m_pp.gold + temporary_copper_two;
}
temporary_copper -= temporary_copper_two * 100;
/* Add Amount of Silver */
tmp2 = tmp/10;
new_val = m_pp.silver + tmp2;
if(new_val < 0) {
temporary_copper_two = temporary_copper / 10;
new_value = m_pp.silver + temporary_copper_two;
if (new_value < 0) {
m_pp.silver = 0;
} else {
m_pp.silver = m_pp.silver + tmp2;
m_pp.silver = m_pp.silver + temporary_copper_two;
}
tmp-=tmp2*10;
//if (updateclient)
// SendClientMoneyUpdate(1,tmp2);
// Add Copper
//tmp = tmp - (tmp2* 10);
//if (updateclient)
// SendClientMoneyUpdate(0,tmp);
tmp2 = tmp;
new_val = m_pp.copper + tmp2;
if(new_val < 0) {
temporary_copper -= temporary_copper_two * 10;
/* Add Amount of Copper */
temporary_copper_two = temporary_copper;
new_value = m_pp.copper + temporary_copper_two;
if (new_value < 0) {
m_pp.copper = 0;
} else {
m_pp.copper = m_pp.copper + tmp2;
m_pp.copper = m_pp.copper + temporary_copper_two;
}
//send them all at once, since the above code stopped working.
if(updateclient)
if (update_client) {
SendMoneyUpdate();
}
RecalcWeight();
@ -2337,27 +2353,32 @@ void Client::EVENT_ITEM_ScriptStopReturn(){
this->SetEntityVariable("Stop_Return", buffer);
}
void Client::AddMoneyToPP(uint32 copper, uint32 silver, uint32 gold, uint32 platinum, bool updateclient){
this->EVENT_ITEM_ScriptStopReturn();
void Client::AddMoneyToPP(uint32 copper, uint32 silver, uint32 gold, uint32 platinum, bool update_client){
EVENT_ITEM_ScriptStopReturn();
int32 new_value = m_pp.platinum + platinum;
if(new_value >= 0 && new_value > m_pp.platinum)
if (new_value >= 0 && new_value > m_pp.platinum) {
m_pp.platinum += platinum;
}
new_value = m_pp.gold + gold;
if(new_value >= 0 && new_value > m_pp.gold)
if (new_value >= 0 && new_value > m_pp.gold) {
m_pp.gold += gold;
}
new_value = m_pp.silver + silver;
if(new_value >= 0 && new_value > m_pp.silver)
if (new_value >= 0 && new_value > m_pp.silver) {
m_pp.silver += silver;
}
new_value = m_pp.copper + copper;
if(new_value >= 0 && new_value > m_pp.copper)
if (new_value >= 0 && new_value > m_pp.copper) {
m_pp.copper += copper;
}
if(updateclient)
if (update_client) {
SendMoneyUpdate();
}
RecalcWeight();
SaveCurrency();
@ -2380,41 +2401,55 @@ void Client::SendMoneyUpdate() {
FastQueuePacket(&outapp);
}
bool Client::HasMoney(uint64 Copper) {
bool Client::HasMoney(uint64 copper) {
if ((static_cast<uint64>(m_pp.copper) +
if (
(static_cast<uint64>(m_pp.copper) +
(static_cast<uint64>(m_pp.silver) * 10) +
(static_cast<uint64>(m_pp.gold) * 100) +
(static_cast<uint64>(m_pp.platinum) * 1000)) >= Copper)
(static_cast<uint64>(m_pp.platinum) * 1000)) >= copper
) {
return true;
}
return false;
}
uint64 Client::GetCarriedMoney() {
return ((static_cast<uint64>(m_pp.copper) +
(static_cast<uint64>(m_pp.silver) * 10) +
(static_cast<uint64>(m_pp.gold) * 100) +
(static_cast<uint64>(m_pp.platinum) * 1000)));
return (
(
static_cast<uint64>(m_pp.copper) +
(static_cast<uint64>(m_pp.silver) * 10) +
(static_cast<uint64>(m_pp.gold) * 100) +
(static_cast<uint64>(m_pp.platinum) * 1000)
)
);
}
uint64 Client::GetAllMoney() {
return (
(static_cast<uint64>(m_pp.copper) +
(static_cast<uint64>(m_pp.silver) * 10) +
(static_cast<uint64>(m_pp.gold) * 100) +
(static_cast<uint64>(m_pp.platinum) * 1000) +
(static_cast<uint64>(m_pp.copper_bank) +
(static_cast<uint64>(m_pp.silver_bank) * 10) +
(static_cast<uint64>(m_pp.gold_bank) * 100) +
(static_cast<uint64>(m_pp.platinum_bank) * 1000) +
(static_cast<uint64>(m_pp.copper_cursor) +
(static_cast<uint64>(m_pp.silver_cursor) * 10) +
(static_cast<uint64>(m_pp.gold_cursor) * 100) +
(static_cast<uint64>(m_pp.platinum_cursor) * 1000) +
(static_cast<uint64>(m_pp.platinum_shared) * 1000)))));
(
static_cast<uint64>(m_pp.copper) +
(static_cast<uint64>(m_pp.silver) * 10) +
(static_cast<uint64>(m_pp.gold) * 100) +
(static_cast<uint64>(m_pp.platinum) * 1000) +
(
static_cast<uint64>(m_pp.copper_bank) +
(static_cast<uint64>(m_pp.silver_bank) * 10) +
(static_cast<uint64>(m_pp.gold_bank) * 100) +
(static_cast<uint64>(m_pp.platinum_bank) * 1000) +
(
static_cast<uint64>(m_pp.copper_cursor) +
(static_cast<uint64>(m_pp.silver_cursor) * 10) +
(static_cast<uint64>(m_pp.gold_cursor) * 100) +
(static_cast<uint64>(m_pp.platinum_cursor) * 1000) +
(static_cast<uint64>(m_pp.platinum_shared) * 1000)
)
)
)
);
}
bool Client::CheckIncreaseSkill(EQ::skills::SkillType skillid, Mob *against_who, int chancemodi) {
@ -8692,7 +8727,7 @@ void Client::QuestReward(Mob* target, uint32 copper, uint32 silver, uint32 gold,
qr->exp_reward = exp;
if (copper > 0 || silver > 0 || gold > 0 || platinum > 0)
AddMoneyToPP(copper, silver, gold, platinum, false);
AddMoneyToPP(copper, silver, gold, platinum);
if (itemid > 0)
SummonItem(itemid, -1, 0, 0, 0, 0, 0, false, EQ::invslot::slotCursor);
@ -8727,7 +8762,7 @@ void Client::QuestReward(Mob* target, const QuestReward_Struct &reward, bool fac
qr->mob_id = target ? target->GetID() : 0; // Entity ID for the from mob name
if (reward.copper > 0 || reward.silver > 0 || reward.gold > 0 || reward.platinum > 0)
AddMoneyToPP(reward.copper, reward.silver, reward.gold, reward.platinum, false);
AddMoneyToPP(reward.copper, reward.silver, reward.gold, reward.platinum);
for (int i = 0; i < QUESTREWARD_COUNT; ++i)
if (reward.item_id[i] > 0)

View File

@ -733,13 +733,15 @@ public:
void ReadBook(BookRequest_Struct *book);
void ReadBookByName(std::string book_name, uint8 book_type);
void QuestReadBook(const char* text, uint8 type);
void SendClientMoneyUpdate(uint8 type,uint32 amount);
void SendMoneyUpdate();
bool TakeMoneyFromPP(uint64 copper, bool updateclient=false);
void AddMoneyToPP(uint64 copper,bool updateclient);
void AddMoneyToPP(uint32 copper, uint32 silver, uint32 gold,uint32 platinum,bool updateclient);
bool TakeMoneyFromPP(uint64 copper, bool update_client = false);
bool TakePlatinum(uint32 platinum, bool update_client = false);
void AddMoneyToPP(uint64 copper, bool update_client = false);
void AddMoneyToPP(uint32 copper, uint32 silver, uint32 gold, uint32 platinum, bool update_client = false);
void AddPlatinum(uint32 platinu, bool update_client = false);
bool HasMoney(uint64 copper);
uint64 GetCarriedMoney();
uint32 GetCarriedPlatinum();
uint64 GetAllMoney();
uint32 GetMoney(uint8 type, uint8 subtype);
int GetAccountAge();

View File

@ -3652,12 +3652,12 @@ void Client::Handle_OP_Begging(const EQApplicationPacket *app)
if (CurrentSkill < 50)
{
brs->Result = 4; // Copper
AddMoneyToPP(brs->Amount, false);
AddMoneyToPP(brs->Amount);
}
else
{
brs->Result = 3; // Silver
AddMoneyToPP(brs->Amount * 10, false);
AddMoneyToPP(brs->Amount * 10);
}
}
@ -13295,7 +13295,7 @@ void Client::Handle_OP_ShopPlayerSell(const EQApplicationPacket *app)
}
}
AddMoneyToPP(price, false);
AddMoneyToPP(price);
if (inst->IsStackable() || inst->IsCharged())
{

View File

@ -1062,7 +1062,7 @@ void Corpse::MakeLootRequestPackets(Client* client, const EQApplicationPacket* a
d->silver = GetSilver();
d->gold = GetGold();
d->platinum = GetPlatinum();
client->AddMoneyToPP(GetCopper(), GetSilver(), GetGold(), GetPlatinum(), false);
client->AddMoneyToPP(GetCopper(), GetSilver(), GetGold(), GetPlatinum());
}
RemoveCash();

View File

@ -490,6 +490,10 @@ bool Lua_Client::TakeMoneyFromPP(uint64 copper, bool update_client) {
return self->TakeMoneyFromPP(copper, update_client);
}
void Lua_Client::AddMoneyToPP(uint32 copper, uint32 silver, uint32 gold, uint32 platinum) {
Lua_Safe_Call_Void();
self->AddMoneyToPP(copper, silver, gold, platinum);
}
void Lua_Client::AddMoneyToPP(uint32 copper, uint32 silver, uint32 gold, uint32 platinum, bool update_client) {
Lua_Safe_Call_Void();
self->AddMoneyToPP(copper, silver, gold, platinum, update_client);
@ -2397,6 +2401,31 @@ void Lua_Client::AddItem(luabind::object item_table) {
);
}
void Lua_Client::AddPlatinum(uint32 platinum) {
Lua_Safe_Call_Void();
self->AddPlatinum(platinum);
}
void Lua_Client::AddPlatinum(uint32 platinum, bool update_client) {
Lua_Safe_Call_Void();
self->AddPlatinum(platinum, update_client);
}
uint32 Lua_Client::GetCarriedPlatinum() {
Lua_Safe_Call_Int();
return self->GetCarriedPlatinum();
}
bool Lua_Client::TakePlatinum(uint32 platinum) {
Lua_Safe_Call_Bool();
return self->TakePlatinum(platinum);
}
bool Lua_Client::TakePlatinum(uint32 platinum, bool update_client) {
Lua_Safe_Call_Bool();
return self->TakePlatinum(platinum, update_client);
}
luabind::scope lua_register_client() {
return luabind::class_<Lua_Client, Lua_Mob>("Client")
.def(luabind::constructor<>())
@ -2418,7 +2447,10 @@ luabind::scope lua_register_client() {
.def("AddLevelBasedExp", (void(Lua_Client::*)(int))&Lua_Client::AddLevelBasedExp)
.def("AddLevelBasedExp", (void(Lua_Client::*)(int,int))&Lua_Client::AddLevelBasedExp)
.def("AddLevelBasedExp", (void(Lua_Client::*)(int,int,bool))&Lua_Client::AddLevelBasedExp)
.def("AddMoneyToPP", (void(Lua_Client::*)(uint32,uint32,uint32,uint32))&Lua_Client::AddMoneyToPP)
.def("AddMoneyToPP", (void(Lua_Client::*)(uint32,uint32,uint32,uint32,bool))&Lua_Client::AddMoneyToPP)
.def("AddPlatinum", (void(Lua_Client::*)(uint32))&Lua_Client::AddPlatinum)
.def("AddPlatinum", (void(Lua_Client::*)(uint32,bool))&Lua_Client::AddPlatinum)
.def("AddPVPPoints", (void(Lua_Client::*)(uint32))&Lua_Client::AddPVPPoints)
.def("AddSkill", (void(Lua_Client::*)(int,int))&Lua_Client::AddSkill)
.def("Admin", (int(Lua_Client::*)(void))&Lua_Client::Admin)
@ -2506,6 +2538,7 @@ luabind::scope lua_register_client() {
.def("GetBindZoneID", (uint32(Lua_Client::*)(int))&Lua_Client::GetBindZoneID)
.def("GetBindZoneID", (uint32(Lua_Client::*)(void))&Lua_Client::GetBindZoneID)
.def("GetCarriedMoney", (uint64(Lua_Client::*)(void))&Lua_Client::GetCarriedMoney)
.def("GetCarriedPlatinum", (uint32(Lua_Client::*)(void))&Lua_Client::GetCarriedPlatinum)
.def("GetCharacterFactionLevel", (int(Lua_Client::*)(int))&Lua_Client::GetCharacterFactionLevel)
.def("GetClassBitmask", (int(Lua_Client::*)(void))&Lua_Client::GetClassBitmask)
.def("GetClientMaxLevel", (int(Lua_Client::*)(void))&Lua_Client::GetClientMaxLevel)
@ -2769,6 +2802,8 @@ luabind::scope lua_register_client() {
.def("TGB", (bool(Lua_Client::*)(void))&Lua_Client::TGB)
.def("TakeMoneyFromPP", (bool(Lua_Client::*)(uint64))&Lua_Client::TakeMoneyFromPP)
.def("TakeMoneyFromPP", (bool(Lua_Client::*)(uint64,bool))&Lua_Client::TakeMoneyFromPP)
.def("TakePlatinum", (bool(Lua_Client::*)(uint32))&Lua_Client::TakePlatinum)
.def("TakePlatinum", (bool(Lua_Client::*)(uint32,bool))&Lua_Client::TakePlatinum)
.def("Thirsty", (bool(Lua_Client::*)(void))&Lua_Client::Thirsty)
.def("TrainDisc", (void(Lua_Client::*)(int))&Lua_Client::TrainDisc)
.def("TrainDiscBySpellID", (void(Lua_Client::*)(int32))&Lua_Client::TrainDiscBySpellID)

View File

@ -130,9 +130,14 @@ public:
int GuildRank();
uint32 GuildID();
int GetFace();
void AddMoneyToPP(uint32 copper, uint32 silver, uint32 gold, uint32 platinum);
void AddMoneyToPP(uint32 copper, uint32 silver, uint32 gold, uint32 platinum, bool update_client);
void AddPlatinum(uint32 platinum);
void AddPlatinum(uint32 platinum, bool update_client);
bool TakeMoneyFromPP(uint64 copper);
bool TakeMoneyFromPP(uint64 copper, bool update_client);
void AddMoneyToPP(uint32 copper, uint32 silver, uint32 gold, uint32 platinum, bool update_client);
bool TakePlatinum(uint32 platinum);
bool TakePlatinum(uint32 platinum, bool update_client);
bool TGB();
int GetSkillPoints();
void SetSkillPoints(int skill);
@ -328,6 +333,7 @@ public:
void UnFreeze();
int GetAggroCount();
uint64 GetCarriedMoney();
uint32 GetCarriedPlatinum();
uint64 GetAllMoney();
uint32 GetMoney(uint8 type, uint8 subtype);
void OpenLFGuildWindow();

View File

@ -1427,18 +1427,20 @@ XS(XS_Client_TakeMoneyFromPP); /* prototype to pass -Wmissing-prototypes */
XS(XS_Client_TakeMoneyFromPP) {
dXSARGS;
if (items < 2 || items > 3)
Perl_croak(aTHX_ "Usage: Client::TakeMoneyFromPP(THIS, uint32 copper, bool update_client = false)"); // @categories Currency and Points
Perl_croak(aTHX_ "Usage: Client::TakeMoneyFromPP(THIS, uint32 copper, [bool update_client = false])"); // @categories Currency and Points
{
Client *THIS;
bool RETVAL;
bool updateclient = false;
uint32 copper = (uint32) SvUV(ST(1));
bool has_money;
bool update_client = false;
uint32 copper = (uint32) SvUV(ST(1));
VALIDATE_THIS_IS_CLIENT;
if (items > 2)
updateclient = (bool) SvTRUE(ST(2));
RETVAL = THIS->TakeMoneyFromPP(copper, updateclient);
ST(0) = boolSV(RETVAL);
if (items == 3) {
update_client = (bool) SvTRUE(ST(2));
}
has_money = THIS->TakeMoneyFromPP(copper, update_client);
ST(0) = boolSV(has_money);
sv_2mortal(ST(0));
}
XSRETURN(1);
@ -1447,17 +1449,22 @@ XS(XS_Client_TakeMoneyFromPP) {
XS(XS_Client_AddMoneyToPP); /* prototype to pass -Wmissing-prototypes */
XS(XS_Client_AddMoneyToPP) {
dXSARGS;
if (items != 6)
Perl_croak(aTHX_ "Usage: Client::AddMoneyToPP(THIS, uint32 copper, uint32 silver, uint32 gold, uint32 platinum, bool update_client)"); // @categories Currency and Points
if (items < 5 || items > 6)
Perl_croak(aTHX_ "Usage: Client::AddMoneyToPP(THIS, uint32 copper, uint32 silver, uint32 gold, uint32 platinum, [bool update_client = false])"); // @categories Currency and Points
{
Client *THIS;
uint32 copper = (uint32) SvUV(ST(1));
uint32 silver = (uint32) SvUV(ST(2));
uint32 gold = (uint32) SvUV(ST(3));
uint32 platinum = (uint32) SvUV(ST(4));
bool updateclient = (bool) SvTRUE(ST(5));
uint32 copper = (uint32) SvUV(ST(1));
uint32 silver = (uint32) SvUV(ST(2));
uint32 gold = (uint32) SvUV(ST(3));
uint32 platinum = (uint32) SvUV(ST(4));
bool update_client = false;
VALIDATE_THIS_IS_CLIENT;
THIS->AddMoneyToPP(copper, silver, gold, platinum, updateclient);
if (items == 6) {
update_client = (bool) SvTRUE(ST(5));
}
THIS->AddMoneyToPP(copper, silver, gold, platinum, update_client);
}
XSRETURN_EMPTY;
}
@ -6115,6 +6122,66 @@ XS(XS_Client_AddItem) {
XSRETURN_EMPTY;
}
XS(XS_Client_AddPlatinum); /* prototype to pass -Wmissing-prototypes */
XS(XS_Client_AddPlatinum) {
dXSARGS;
if (items < 2 || items > 3)
Perl_croak(aTHX_ "Usage: Client::AddPlatinum(THIS, uint32 platinum, [bool update_client = false])"); // @categories Currency and Points
{
Client *THIS;
uint32 platinum = (uint32) SvUV(ST(1));
bool update_client = false;
VALIDATE_THIS_IS_CLIENT;
if (items == 3) {
update_client = (bool) SvTRUE(ST(2));
}
THIS->AddPlatinum(platinum, update_client);
}
XSRETURN_EMPTY;
}
XS(XS_Client_GetCarriedPlatinum); /* prototype to pass -Wmissing-prototypes */
XS(XS_Client_GetCarriedPlatinum) {
dXSARGS;
if (items != 1)
Perl_croak(aTHX_ "Usage: Client::GetCarriedPlatinum(THIS)"); // @categories Currency and Points
{
Client *THIS;
int RETVAL;
dXSTARG;
VALIDATE_THIS_IS_CLIENT;
RETVAL = THIS->GetCarriedPlatinum();
XSprePUSH;
PUSHi((IV) RETVAL);
}
XSRETURN(1);
}
XS(XS_Client_TakePlatinum); /* prototype to pass -Wmissing-prototypes */
XS(XS_Client_TakePlatinum) {
dXSARGS;
if (items < 2 || items > 3)
Perl_croak(aTHX_ "Usage: Client::TakePlatinum(THIS, uint32 platinum, [bool update_client = false])"); // @categories Currency and Points
{
Client *THIS;
uint32 platinum = (uint32) SvUV(ST(1));
bool has_money = false;
bool update_client = false;
VALIDATE_THIS_IS_CLIENT;
if (items == 3) {
update_client = (bool) SvTRUE(ST(2));
}
has_money = THIS->TakePlatinum(platinum, update_client);
ST(0) = boolSV(has_money);
sv_2mortal(ST(0));
}
XSRETURN(1);
}
#ifdef __cplusplus
extern "C"
#endif
@ -6144,7 +6211,8 @@ XS(boot_Client) {
newXSproto(strcpy(buf, "AddLDoNLoss"), XS_Client_AddLDoNLoss, file, "$$");
newXSproto(strcpy(buf, "AddLDoNWin"), XS_Client_AddLDoNWin, file, "$$");
newXSproto(strcpy(buf, "AddLevelBasedExp"), XS_Client_AddLevelBasedExp, file, "$$;$$");
newXSproto(strcpy(buf, "AddMoneyToPP"), XS_Client_AddMoneyToPP, file, "$$$$$$");
newXSproto(strcpy(buf, "AddMoneyToPP"), XS_Client_AddMoneyToPP, file, "$$$$$;$");
newXSproto(strcpy(buf, "AddPlatinum"), XS_Client_AddPlatinum, file, "$$;$");
newXSproto(strcpy(buf, "AddPVPPoints"), XS_Client_AddPVPPoints, file, "$$");
newXSproto(strcpy(buf, "AddSkill"), XS_Client_AddSkill, file, "$$$");
newXSproto(strcpy(buf, "Admin"), XS_Client_Admin, file, "$");
@ -6212,6 +6280,7 @@ XS(boot_Client) {
newXSproto(strcpy(buf, "GetBindZ"), XS_Client_GetBindZ, file, "$$");
newXSproto(strcpy(buf, "GetBindZoneID"), XS_Client_GetBindZoneID, file, "$$");
newXSproto(strcpy(buf, "GetCarriedMoney"), XS_Client_GetCarriedMoney, file, "$");
newXSproto(strcpy(buf, "GetCarriedPlatinum"), XS_Client_GetCarriedPlatinum, file, "$");
newXSproto(strcpy(buf, "GetCharacterFactionLevel"), XS_Client_GetCharacterFactionLevel, file, "$$");
newXSproto(strcpy(buf, "GetClassBitmask"), XS_Client_GetClassBitmask, file, "$");
newXSproto(strcpy(buf, "GetClientMaxLevel"), XS_Client_GetClientMaxLevel, file, "$");
@ -6427,6 +6496,7 @@ XS(boot_Client) {
newXSproto(strcpy(buf, "SummonItem"), XS_Client_SummonItem, file, "$$;$$$$$$$$");
newXSproto(strcpy(buf, "TGB"), XS_Client_TGB, file, "$");
newXSproto(strcpy(buf, "TakeMoneyFromPP"), XS_Client_TakeMoneyFromPP, file, "$$;$");
newXSproto(strcpy(buf, "TakePlatinum"), XS_Client_TakePlatinum, file, "$$;$");
newXSproto(strcpy(buf, "Thirsty"), XS_Client_Thirsty, file, "$");
newXSproto(strcpy(buf, "TrainDiscBySpellID"), XS_Client_TrainDiscBySpellID, file, "$$");
newXSproto(strcpy(buf, "UnFreeze"), XS_Client_UnFreeze, file, "$");

View File

@ -2800,7 +2800,7 @@ void Client::SellToBuyer(const EQApplicationPacket *app) {
Buyer->TakeMoneyFromPP(Quantity * Price);
AddMoneyToPP(Quantity * Price, false);
AddMoneyToPP(Quantity * Price);
if(RuleB(Bazaar, AuditTrail))
BazaarAuditTrail(GetName(), Buyer->GetName(), ItemName, Quantity, Quantity * Price, 1);