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

View File

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

View File

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

View File

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

View File

@ -490,6 +490,10 @@ bool Lua_Client::TakeMoneyFromPP(uint64 copper, bool update_client) {
return self->TakeMoneyFromPP(copper, 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) { void Lua_Client::AddMoneyToPP(uint32 copper, uint32 silver, uint32 gold, uint32 platinum, bool update_client) {
Lua_Safe_Call_Void(); Lua_Safe_Call_Void();
self->AddMoneyToPP(copper, silver, gold, platinum, update_client); 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() { luabind::scope lua_register_client() {
return luabind::class_<Lua_Client, Lua_Mob>("Client") return luabind::class_<Lua_Client, Lua_Mob>("Client")
.def(luabind::constructor<>()) .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))&Lua_Client::AddLevelBasedExp)
.def("AddLevelBasedExp", (void(Lua_Client::*)(int,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("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("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("AddPVPPoints", (void(Lua_Client::*)(uint32))&Lua_Client::AddPVPPoints)
.def("AddSkill", (void(Lua_Client::*)(int,int))&Lua_Client::AddSkill) .def("AddSkill", (void(Lua_Client::*)(int,int))&Lua_Client::AddSkill)
.def("Admin", (int(Lua_Client::*)(void))&Lua_Client::Admin) .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::*)(int))&Lua_Client::GetBindZoneID)
.def("GetBindZoneID", (uint32(Lua_Client::*)(void))&Lua_Client::GetBindZoneID) .def("GetBindZoneID", (uint32(Lua_Client::*)(void))&Lua_Client::GetBindZoneID)
.def("GetCarriedMoney", (uint64(Lua_Client::*)(void))&Lua_Client::GetCarriedMoney) .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("GetCharacterFactionLevel", (int(Lua_Client::*)(int))&Lua_Client::GetCharacterFactionLevel)
.def("GetClassBitmask", (int(Lua_Client::*)(void))&Lua_Client::GetClassBitmask) .def("GetClassBitmask", (int(Lua_Client::*)(void))&Lua_Client::GetClassBitmask)
.def("GetClientMaxLevel", (int(Lua_Client::*)(void))&Lua_Client::GetClientMaxLevel) .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("TGB", (bool(Lua_Client::*)(void))&Lua_Client::TGB)
.def("TakeMoneyFromPP", (bool(Lua_Client::*)(uint64))&Lua_Client::TakeMoneyFromPP) .def("TakeMoneyFromPP", (bool(Lua_Client::*)(uint64))&Lua_Client::TakeMoneyFromPP)
.def("TakeMoneyFromPP", (bool(Lua_Client::*)(uint64,bool))&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("Thirsty", (bool(Lua_Client::*)(void))&Lua_Client::Thirsty)
.def("TrainDisc", (void(Lua_Client::*)(int))&Lua_Client::TrainDisc) .def("TrainDisc", (void(Lua_Client::*)(int))&Lua_Client::TrainDisc)
.def("TrainDiscBySpellID", (void(Lua_Client::*)(int32))&Lua_Client::TrainDiscBySpellID) .def("TrainDiscBySpellID", (void(Lua_Client::*)(int32))&Lua_Client::TrainDiscBySpellID)

View File

@ -130,9 +130,14 @@ public:
int GuildRank(); int GuildRank();
uint32 GuildID(); uint32 GuildID();
int GetFace(); 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 TakeMoneyFromPP(uint64 copper, bool update_client); 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(); bool TGB();
int GetSkillPoints(); int GetSkillPoints();
void SetSkillPoints(int skill); void SetSkillPoints(int skill);
@ -328,6 +333,7 @@ public:
void UnFreeze(); void UnFreeze();
int GetAggroCount(); int GetAggroCount();
uint64 GetCarriedMoney(); uint64 GetCarriedMoney();
uint32 GetCarriedPlatinum();
uint64 GetAllMoney(); uint64 GetAllMoney();
uint32 GetMoney(uint8 type, uint8 subtype); uint32 GetMoney(uint8 type, uint8 subtype);
void OpenLFGuildWindow(); void OpenLFGuildWindow();

View File

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