mirror of
https://github.com/EQEmu/Server.git
synced 2026-03-01 17:32:25 +00:00
Corpses properly loading now
This commit is contained in:
parent
7fa1256c5d
commit
12ceac4c02
@ -65,23 +65,17 @@ void Corpse::SendLootReqErrorPacket(Client* client, uint8 response) {
|
|||||||
|
|
||||||
Corpse* Corpse::LoadFromDBData(uint32 in_dbid, uint32 in_charid, std::string in_charname, float in_x, float in_y, float in_z, float in_heading, std::string time_of_death, bool rezzed, bool was_at_graveyard)
|
Corpse* Corpse::LoadFromDBData(uint32 in_dbid, uint32 in_charid, std::string in_charname, float in_x, float in_y, float in_z, float in_heading, std::string time_of_death, bool rezzed, bool was_at_graveyard)
|
||||||
{
|
{
|
||||||
|
uint32 item_count = database.GetCharacterCorpseItemCount(in_dbid);
|
||||||
std::cout << "LoadFromDBData: 0 " << in_dbid << std::endl;
|
char *buffer = new char[sizeof(PlayerCorpse_Struct) + (item_count * sizeof(player_lootitem::ServerLootItem_Struct))];
|
||||||
std::cout << "LoadFromDBData: 1 " << in_charid << std::endl;
|
PlayerCorpse_Struct *pcs = (PlayerCorpse_Struct*)buffer;
|
||||||
std::cout << "LoadFromDBData: 2 " << in_charname << std::endl;
|
database.LoadCharacterCorpseData(in_dbid, pcs);
|
||||||
std::cout << "LoadFromDBData: 3 " << in_x << std::endl;
|
|
||||||
std::cout << "LoadFromDBData: 4 " << in_y << std::endl;
|
|
||||||
std::cout << "LoadFromDBData: 5 " << in_z << std::endl;
|
|
||||||
|
|
||||||
PlayerCorpse_Struct pcs;
|
|
||||||
database.LoadCharacterCorpseData(in_dbid, &pcs);
|
|
||||||
|
|
||||||
/* Load Items */
|
/* Load Items */
|
||||||
ItemList itemlist;
|
ItemList itemlist;
|
||||||
ServerLootItem_Struct* tmp = 0;
|
ServerLootItem_Struct* tmp = 0;
|
||||||
for (unsigned int i = 0; i < pcs.itemcount; i++) {
|
for (unsigned int i = 0; i < pcs->itemcount; i++) {
|
||||||
tmp = new ServerLootItem_Struct;
|
tmp = new ServerLootItem_Struct;
|
||||||
memcpy(tmp, &pcs.items[i], sizeof(player_lootitem::ServerLootItem_Struct));
|
memcpy(tmp, &pcs->items[i], sizeof(player_lootitem::ServerLootItem_Struct));
|
||||||
tmp->equip_slot = CorpseToServerSlot(tmp->equip_slot);
|
tmp->equip_slot = CorpseToServerSlot(tmp->equip_slot);
|
||||||
itemlist.push_back(tmp);
|
itemlist.push_back(tmp);
|
||||||
}
|
}
|
||||||
@ -92,45 +86,57 @@ Corpse* Corpse::LoadFromDBData(uint32 in_dbid, uint32 in_charid, std::string in_
|
|||||||
in_charid, // uint32 in_charid
|
in_charid, // uint32 in_charid
|
||||||
in_charname.c_str(), // char* in_charname
|
in_charname.c_str(), // char* in_charname
|
||||||
&itemlist, // ItemList* in_itemlist
|
&itemlist, // ItemList* in_itemlist
|
||||||
pcs.copper, // uint32 in_copper
|
pcs->copper, // uint32 in_copper
|
||||||
pcs.silver, // uint32 in_silver
|
pcs->silver, // uint32 in_silver
|
||||||
pcs.gold, // uint32 in_gold
|
pcs->gold, // uint32 in_gold
|
||||||
pcs.plat, // uint32 in_plat
|
pcs->plat, // uint32 in_plat
|
||||||
in_x, // float in_x
|
in_x, // float in_x
|
||||||
in_y, // float in_y
|
in_y, // float in_y
|
||||||
in_z, // float in_z
|
in_z, // float in_z
|
||||||
in_heading, // float in_heading
|
in_heading, // float in_heading
|
||||||
pcs.size, // float in_size
|
pcs->size, // float in_size
|
||||||
pcs.gender, // uint8 in_gender
|
pcs->gender, // uint8 in_gender
|
||||||
pcs.race, // uint16 in_race
|
pcs->race, // uint16 in_race
|
||||||
pcs.class_, // uint8 in_class
|
pcs->class_, // uint8 in_class
|
||||||
pcs.deity, // uint8 in_deity
|
pcs->deity, // uint8 in_deity
|
||||||
pcs.level, // uint8 in_level
|
pcs->level, // uint8 in_level
|
||||||
pcs.texture, // uint8 in_texture
|
pcs->texture, // uint8 in_texture
|
||||||
pcs.helmtexture, // uint8 in_helmtexture
|
pcs->helmtexture, // uint8 in_helmtexture
|
||||||
pcs.exp, // uint32 in_rezexp
|
pcs->exp, // uint32 in_rezexp
|
||||||
was_at_graveyard // bool wasAtGraveyard
|
was_at_graveyard // bool wasAtGraveyard
|
||||||
);
|
);
|
||||||
if (pcs.locked)
|
if (pcs->locked)
|
||||||
pc->Lock();
|
pc->Lock();
|
||||||
|
|
||||||
/* Load Item Tints */
|
/* Load Item Tints */
|
||||||
memcpy(pc->item_tint, pcs.item_tint, sizeof(pc->item_tint));
|
// memcpy(pc->item_tint, pcs->item_tint, sizeof(pc->item_tint));
|
||||||
|
pc->item_tint[0].color = pcs->item_tint[0].color;
|
||||||
|
pc->item_tint[1].color = pcs->item_tint[1].color;
|
||||||
|
pc->item_tint[2].color = pcs->item_tint[2].color;
|
||||||
|
pc->item_tint[3].color = pcs->item_tint[3].color;
|
||||||
|
pc->item_tint[4].color = pcs->item_tint[4].color;
|
||||||
|
pc->item_tint[5].color = pcs->item_tint[5].color;
|
||||||
|
pc->item_tint[6].color = pcs->item_tint[6].color;
|
||||||
|
pc->item_tint[7].color = pcs->item_tint[7].color;
|
||||||
|
pc->item_tint[8].color = pcs->item_tint[8].color;
|
||||||
|
|
||||||
|
|
||||||
/* Load Physical Appearance */
|
/* Load Physical Appearance */
|
||||||
pc->haircolor = pcs.haircolor;
|
pc->haircolor = pcs->haircolor;
|
||||||
pc->beardcolor = pcs.beardcolor;
|
pc->beardcolor = pcs->beardcolor;
|
||||||
pc->eyecolor1 = pcs.eyecolor1;
|
pc->eyecolor1 = pcs->eyecolor1;
|
||||||
pc->eyecolor2 = pcs.eyecolor2;
|
pc->eyecolor2 = pcs->eyecolor2;
|
||||||
pc->hairstyle = pcs.hairstyle;
|
pc->hairstyle = pcs->hairstyle;
|
||||||
pc->luclinface = pcs.face;
|
pc->luclinface = pcs->face;
|
||||||
pc->beard = pcs.beard;
|
pc->beard = pcs->beard;
|
||||||
pc->drakkin_heritage = pcs.drakkin_heritage;
|
pc->drakkin_heritage = pcs->drakkin_heritage;
|
||||||
pc->drakkin_tattoo = pcs.drakkin_tattoo;
|
pc->drakkin_tattoo = pcs->drakkin_tattoo;
|
||||||
pc->drakkin_details = pcs.drakkin_details;
|
pc->drakkin_details = pcs->drakkin_details;
|
||||||
pc->IsRezzed(rezzed);
|
pc->IsRezzed(rezzed);
|
||||||
pc->become_npc = false;
|
pc->become_npc = false;
|
||||||
|
|
||||||
|
safe_delete_array(pcs);
|
||||||
|
|
||||||
return pc;
|
return pc;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -532,9 +538,6 @@ bool Corpse::Save() {
|
|||||||
dbpc->drakkin_tattoo = drakkin_tattoo;
|
dbpc->drakkin_tattoo = drakkin_tattoo;
|
||||||
dbpc->drakkin_details = drakkin_details;
|
dbpc->drakkin_details = drakkin_details;
|
||||||
|
|
||||||
std::cout << "SLI1: " << sizeof(player_lootitem::ServerLootItem_Struct) << std::endl;
|
|
||||||
std::cout << "SLI2: " << sizeof(ServerLootItem_Struct) << std::endl;
|
|
||||||
|
|
||||||
uint32 x = 0;
|
uint32 x = 0;
|
||||||
ItemList::iterator cur, end;
|
ItemList::iterator cur, end;
|
||||||
cur = itemlist.begin();
|
cur = itemlist.begin();
|
||||||
|
|||||||
118
zone/zonedb.cpp
118
zone/zonedb.cpp
@ -3530,7 +3530,7 @@ uint32 ZoneDatabase::UpdateCharacterCorpse(uint32 db_id, uint32 char_id, const c
|
|||||||
);
|
);
|
||||||
auto results = QueryDatabase(query);
|
auto results = QueryDatabase(query);
|
||||||
|
|
||||||
query = StringFormat("DELETE FROM `character_corpse_items` WHERE `corpse_id` = %u");
|
query = StringFormat("DELETE FROM `character_corpse_items` WHERE `corpse_id` = %u", db_id);
|
||||||
results = QueryDatabase(query);
|
results = QueryDatabase(query);
|
||||||
|
|
||||||
/* Dump Items from Inventory */
|
/* Dump Items from Inventory */
|
||||||
@ -3736,6 +3736,18 @@ uint32 ZoneDatabase::GetCharacterCorpseID(uint32 char_id, uint8 corpse) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint32 ZoneDatabase::GetCharacterCorpseItemCount(uint32 corpse_id){
|
||||||
|
std::string query = StringFormat("SELECT COUNT(*) FROM character_corpse_items WHERE `corpse_id` = %u",
|
||||||
|
corpse_id
|
||||||
|
);
|
||||||
|
auto results = QueryDatabase(query);
|
||||||
|
auto row = results.begin();
|
||||||
|
if (results.Success() && results.RowsAffected() != 0){
|
||||||
|
return atoi(row[0]);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
uint32 ZoneDatabase::GetCharacterCorpseItemAt(uint32 corpse_id, uint16 slotid) {
|
uint32 ZoneDatabase::GetCharacterCorpseItemAt(uint32 corpse_id, uint16 slotid) {
|
||||||
Corpse* tmp = LoadCharacterCorpse(corpse_id);
|
Corpse* tmp = LoadCharacterCorpse(corpse_id);
|
||||||
uint32 itemid = 0;
|
uint32 itemid = 0;
|
||||||
@ -3791,39 +3803,39 @@ bool ZoneDatabase::LoadCharacterCorpseData(uint32 corpse_id, PlayerCorpse_Struct
|
|||||||
auto results = QueryDatabase(query);
|
auto results = QueryDatabase(query);
|
||||||
uint16 i = 0;
|
uint16 i = 0;
|
||||||
for (auto row = results.begin(); row != results.end(); ++row) {
|
for (auto row = results.begin(); row != results.end(); ++row) {
|
||||||
pcs->locked = atoi(row[i]); i++; // is_locked,
|
pcs->locked = atoi(row[i++]); // is_locked,
|
||||||
pcs->exp = atoi(row[i]); i++; // exp,
|
pcs->exp = atoi(row[i++]); // exp,
|
||||||
pcs->size = atoi(row[i]); i++; // size,
|
pcs->size = atoi(row[i++]); // size,
|
||||||
pcs->level = atoi(row[i]); i++; // `level`,
|
pcs->level = atoi(row[i++]); // `level`,
|
||||||
pcs->race = atoi(row[i]); i++; // race,
|
pcs->race = atoi(row[i++]); // race,
|
||||||
pcs->gender = atoi(row[i]); i++; // gender,
|
pcs->gender = atoi(row[i++]); // gender,
|
||||||
pcs->class_ = atoi(row[i]); i++; // class,
|
pcs->class_ = atoi(row[i++]); // class,
|
||||||
pcs->deity = atoi(row[i]); i++; // deity,
|
pcs->deity = atoi(row[i++]); // deity,
|
||||||
pcs->texture = atoi(row[i]); i++; // texture,
|
pcs->texture = atoi(row[i++]); // texture,
|
||||||
pcs->helmtexture = atoi(row[i]); i++; // helm_texture,
|
pcs->helmtexture = atoi(row[i++]); // helm_texture,
|
||||||
pcs->copper = atoi(row[i]); i++; // copper,
|
pcs->copper = atoi(row[i++]); // copper,
|
||||||
pcs->silver = atoi(row[i]); i++; // silver,
|
pcs->silver = atoi(row[i++]); // silver,
|
||||||
pcs->gold = atoi(row[i]); i++; // gold,
|
pcs->gold = atoi(row[i++]); // gold,
|
||||||
pcs->plat = atoi(row[i]); i++; // platinum,
|
pcs->plat = atoi(row[i++]); // platinum,
|
||||||
pcs->haircolor = atoi(row[i]); i++; // hair_color,
|
pcs->haircolor = atoi(row[i++]); // hair_color,
|
||||||
pcs->beardcolor = atoi(row[i]); i++; // beard_color,
|
pcs->beardcolor = atoi(row[i++]); // beard_color,
|
||||||
pcs->eyecolor1 = atoi(row[i]); i++; // eye_color_1,
|
pcs->eyecolor1 = atoi(row[i++]); // eye_color_1,
|
||||||
pcs->eyecolor2 = atoi(row[i]); i++; // eye_color_2,
|
pcs->eyecolor2 = atoi(row[i++]); // eye_color_2,
|
||||||
pcs->hairstyle = atoi(row[i]); i++; // hair_style,
|
pcs->hairstyle = atoi(row[i++]); // hair_style,
|
||||||
pcs->face = atoi(row[i]); i++; // face,
|
pcs->face = atoi(row[i++]); // face,
|
||||||
pcs->beard = atoi(row[i]); i++; // beard,
|
pcs->beard = atoi(row[i++]); // beard,
|
||||||
pcs->drakkin_heritage = atoi(row[i]); i++; // drakkin_heritage,
|
pcs->drakkin_heritage = atoi(row[i++]); // drakkin_heritage,
|
||||||
pcs->drakkin_tattoo = atoi(row[i]); i++; // drakkin_tattoo,
|
pcs->drakkin_tattoo = atoi(row[i++]); // drakkin_tattoo,
|
||||||
pcs->drakkin_details = atoi(row[i]); i++; // drakkin_details,
|
pcs->drakkin_details = atoi(row[i++]); // drakkin_details,
|
||||||
pcs->item_tint[0].color = atoi(row[i]); i++; // wc_1,
|
pcs->item_tint[0].color = atoi(row[i++]); // wc_1,
|
||||||
pcs->item_tint[1].color = atoi(row[i]); i++; // wc_2,
|
pcs->item_tint[1].color = atoi(row[i++]); // wc_2,
|
||||||
pcs->item_tint[2].color = atoi(row[i]); i++; // wc_3,
|
pcs->item_tint[2].color = atoi(row[i++]); // wc_3,
|
||||||
pcs->item_tint[3].color = atoi(row[i]); i++; // wc_4,
|
pcs->item_tint[3].color = atoi(row[i++]); // wc_4,
|
||||||
pcs->item_tint[4].color = atoi(row[i]); i++; // wc_5,
|
pcs->item_tint[4].color = atoi(row[i++]); // wc_5,
|
||||||
pcs->item_tint[5].color = atoi(row[i]); i++; // wc_6,
|
pcs->item_tint[5].color = atoi(row[i++]); // wc_6,
|
||||||
pcs->item_tint[6].color = atoi(row[i]); i++; // wc_7,
|
pcs->item_tint[6].color = atoi(row[i++]); // wc_7,
|
||||||
pcs->item_tint[7].color = atoi(row[i]); i++; // wc_8,
|
pcs->item_tint[7].color = atoi(row[i++]); // wc_8,
|
||||||
pcs->item_tint[8].color = atoi(row[i]); i++; // wc_9
|
pcs->item_tint[8].color = atoi(row[i++]); // wc_9
|
||||||
}
|
}
|
||||||
query = StringFormat(
|
query = StringFormat(
|
||||||
"SELECT \n"
|
"SELECT \n"
|
||||||
@ -3847,19 +3859,16 @@ bool ZoneDatabase::LoadCharacterCorpseData(uint32 corpse_id, PlayerCorpse_Struct
|
|||||||
|
|
||||||
pcs->itemcount = results.RowCount();
|
pcs->itemcount = results.RowCount();
|
||||||
uint16 r = 0;
|
uint16 r = 0;
|
||||||
// Allocate memory for items.
|
|
||||||
// pcs->items = reinterpret_cast<player_lootitem::ServerLootItem_Struct*>(new char[pcs->itemcount * sizeof(player_lootitem::ServerLootItem_Struct)]);
|
|
||||||
|
|
||||||
for (auto row = results.begin(); row != results.end(); ++row) {
|
for (auto row = results.begin(); row != results.end(); ++row) {
|
||||||
memset(&pcs->items[i], 0, sizeof (player_lootitem::ServerLootItem_Struct));
|
memset(&pcs->items[i], 0, sizeof (player_lootitem::ServerLootItem_Struct));
|
||||||
pcs->items[i].equip_slot = atoi(row[r]); r++; // equip_slot,
|
pcs->items[i].equip_slot = atoi(row[r++]); // equip_slot,
|
||||||
pcs->items[i].item_id = atoi(row[r]); r++; // item_id,
|
pcs->items[i].item_id = atoi(row[r++]); // item_id,
|
||||||
pcs->items[i].charges = atoi(row[r]); r++; // charges,
|
pcs->items[i].charges = atoi(row[r++]); // charges,
|
||||||
pcs->items[i].aug_1 = atoi(row[r]); r++; // aug_1,
|
pcs->items[i].aug_1 = atoi(row[r++]); // aug_1,
|
||||||
pcs->items[i].aug_2 = atoi(row[r]); r++; // aug_2,
|
pcs->items[i].aug_2 = atoi(row[r++]); // aug_2,
|
||||||
pcs->items[i].aug_3 = atoi(row[r]); r++; // aug_3,
|
pcs->items[i].aug_3 = atoi(row[r++]); // aug_3,
|
||||||
pcs->items[i].aug_4 = atoi(row[r]); r++; // aug_4,
|
pcs->items[i].aug_4 = atoi(row[r++]); // aug_4,
|
||||||
pcs->items[i].aug_5 = atoi(row[r]); r++; // aug_5,
|
pcs->items[i].aug_5 = atoi(row[r++]); // aug_5,
|
||||||
r = 0;
|
r = 0;
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
@ -3913,7 +3922,7 @@ bool ZoneDatabase::SummonAllCharacterCorpses(uint32 char_id, uint32 dest_zone_id
|
|||||||
"SELECT `id`, `charname`, `time_of_death`, `is_rezzed` FROM `character_corpses` WHERE `charid` = '%u'"
|
"SELECT `id`, `charname`, `time_of_death`, `is_rezzed` FROM `character_corpses` WHERE `charid` = '%u'"
|
||||||
"ORDER BY time_of_death",
|
"ORDER BY time_of_death",
|
||||||
char_id
|
char_id
|
||||||
);
|
);
|
||||||
results = QueryDatabase(query);
|
results = QueryDatabase(query);
|
||||||
|
|
||||||
for (auto row = results.begin(); row != results.end(); ++row) {
|
for (auto row = results.begin(); row != results.end(); ++row) {
|
||||||
@ -4026,19 +4035,30 @@ uint32 ZoneDatabase::GetFirstCorpseID(uint32 char_id) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool ZoneDatabase::ClearCorpseItems(uint32 db_id){
|
||||||
|
std::string query = StringFormat("DELETE FROM `character_corpse_items` WHERE `corpse_id` = %u", db_id);
|
||||||
|
auto results = QueryDatabase(query);
|
||||||
|
if (results.Success() && results.RowsAffected() != 0){
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
bool ZoneDatabase::BuryCharacterCorpse(uint32 db_id) {
|
bool ZoneDatabase::BuryCharacterCorpse(uint32 db_id) {
|
||||||
std::string query = StringFormat("UPDATE `character_corpses` SET `is_buried` = 1 WHERE `id` = %d", db_id);
|
std::string query = StringFormat("UPDATE `character_corpses` SET `is_buried` = 1 WHERE `id` = %u", db_id);
|
||||||
auto results = QueryDatabase(query);
|
auto results = QueryDatabase(query);
|
||||||
if (results.Success() && results.RowsAffected() != 0){
|
if (results.Success() && results.RowsAffected() != 0){
|
||||||
|
ClearCorpseItems(db_id);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ZoneDatabase::BuryAllCharacterCorpses(uint32 char_id) {
|
bool ZoneDatabase::BuryAllCharacterCorpses(uint32 char_id) {
|
||||||
std::string query = StringFormat("UPDATE `character_corpses` SET `is_buried` = 1 WHERE `charid` = %d", char_id);
|
std::string query = StringFormat("SELECT `id` FROM `character_corpses` WHERE `charid` = %u", char_id);
|
||||||
auto results = QueryDatabase(query);
|
auto results = QueryDatabase(query);
|
||||||
if (results.Success() && results.RowsAffected() != 0){
|
for (auto row = results.begin(); row != results.end(); ++row) {
|
||||||
|
BuryCharacterCorpse(atoi(row[0]));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@ -295,7 +295,8 @@ public:
|
|||||||
bool NoRentExpired(const char* name);
|
bool NoRentExpired(const char* name);
|
||||||
|
|
||||||
/* Corpses */
|
/* Corpses */
|
||||||
|
bool ClearCorpseItems(uint32 db_id);
|
||||||
|
uint32 GetCharacterCorpseItemCount(uint32 corpse_id);
|
||||||
bool LoadCharacterCorpseData(uint32 corpse_id, PlayerCorpse_Struct* pcs);
|
bool LoadCharacterCorpseData(uint32 corpse_id, PlayerCorpse_Struct* pcs);
|
||||||
Corpse* LoadCharacterCorpse(uint32 player_corpse_id);
|
Corpse* LoadCharacterCorpse(uint32 player_corpse_id);
|
||||||
Corpse* SummonBuriedCharacterCorpses(uint32 char_id, uint32 dest_zoneid, uint16 dest_instanceid, float dest_x, float dest_y, float dest_z, float dest_heading);
|
Corpse* SummonBuriedCharacterCorpses(uint32 char_id, uint32 dest_zoneid, uint16 dest_instanceid, float dest_x, float dest_y, float dest_z, float dest_heading);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user