[Quest API] Add Parcel Sending to Perl/Lua (#4287)

This commit is contained in:
Alex King
2024-05-04 18:11:59 -04:00
committed by GitHub
parent 46f3e50b5c
commit c4cda66c3b
3 changed files with 174 additions and 0 deletions
+70
View File
@@ -5875,6 +5875,75 @@ std::string Perl__GetZoneShortNameByLongName(std::string zone_long_name)
return zone_store.GetZoneShortNameByLongName(zone_long_name);
}
bool Perl__send_parcel(perl::reference table_ref)
{
perl::hash table = table_ref;
if (
(!table.exists("name") && !table.exists("character_id")) ||
!table.exists("item_id") ||
!table.exists("quantity")
) {
return false;
}
std::string name = table.exists("name") ? table["name"] : "";
uint32 character_id = table.exists("character_id") ? table["character_id"] : 0;
if (character_id) {
const std::string& character_name = database.GetCharName(character_id);
if (character_name.empty()) {
return false;
}
name = character_name;
} else {
auto v = CharacterParcelsRepository::GetParcelCountAndCharacterName(database, name);
if (v.at(0).character_name.empty()) {
return false;
}
character_id = v.at(0).char_id;
}
if (!character_id) {
return false;
}
const int next_parcel_slot = CharacterParcelsRepository::GetNextFreeParcelSlot(database, character_id, RuleI(Parcel, ParcelMaxItems));
if (next_parcel_slot == INVALID_INDEX) {
return false;
}
const uint32 item_id = table["item_id"];
const int16 quantity = table["quantity"];
const uint32 augment_one = table.exists("augment_one") ? table["augment_one"] : 0;
const uint32 augment_two = table.exists("augment_two") ? table["augment_two"] : 0;
const uint32 augment_three = table.exists("augment_three") ? table["augment_three"] : 0;
const uint32 augment_four = table.exists("augment_four") ? table["augment_four"] : 0;
const uint32 augment_five = table.exists("augment_five") ? table["augment_five"] : 0;
const uint32 augment_six = table.exists("augment_six") ? table["augment_six"] : 0;
const std::string& from_name = table.exists("from_name") ? table["from_name"] : std::string();
const std::string& note = table.exists("note") ? table["note"] : std::string();
auto e = CharacterParcelsRepository::NewEntity();
e.char_id = character_id;
e.item_id = item_id;
e.aug_slot_1 = augment_one;
e.aug_slot_2 = augment_two;
e.aug_slot_3 = augment_three;
e.aug_slot_4 = augment_four;
e.aug_slot_5 = augment_five;
e.aug_slot_6 = augment_six;
e.slot_id = next_parcel_slot;
e.quantity = quantity;
e.from_name = from_name;
e.note = note;
e.sent_date = std::time(nullptr);
return CharacterParcelsRepository::InsertOne(database, e).id;
}
void perl_register_quest()
{
perl::interpreter perl(PERL_GET_THX);
@@ -6704,6 +6773,7 @@ void perl_register_quest()
package.add("send_channel_message", (void(*)(uint8, uint32, uint8, uint8, const char*))&Perl__send_channel_message);
package.add("send_channel_message", (void(*)(Client*, uint8, uint32, uint8, uint8, const char*))&Perl__send_channel_message);
package.add("send_channel_message", (void(*)(Client*, const char*, uint8, uint32, uint8, uint8, const char*))&Perl__send_channel_message);
package.add("send_parcel", &Perl__send_parcel);
package.add("setaaexpmodifierbycharid", (void(*)(uint32, uint32, double))&Perl__setaaexpmodifierbycharid);
package.add("setaaexpmodifierbycharid", (void(*)(uint32, uint32, double, int16))&Perl__setaaexpmodifierbycharid);
package.add("set_data", (void(*)(std::string, std::string))&Perl__set_data);