From d1b0564698700d232f0339289cd2114a1713a6f9 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sat, 22 Nov 2014 18:43:23 -0600 Subject: [PATCH] Changing corpse loading structure --- zone/corpse.cpp | 58 +++++++++++++++++++++++++++++++++++-------------- zone/corpse.h | 5 +++-- zone/zonedb.cpp | 47 +++++++++++++++++++-------------------- 3 files changed, 69 insertions(+), 41 deletions(-) diff --git a/zone/corpse.cpp b/zone/corpse.cpp index 886d32aac..c969ed03c 100644 --- a/zone/corpse.cpp +++ b/zone/corpse.cpp @@ -63,36 +63,62 @@ void Corpse::SendLootReqErrorPacket(Client* client, uint8 response) { safe_delete(outapp); } -Corpse* Corpse::LoadFromDBData(uint32 in_dbid, uint32 in_charid, char* in_charname, PlayerCorpse_Struct* pcs, float in_x, float in_y, float in_z, float in_heading, char* time_of_death, bool rezzed, bool was_at_graveyard) { +Corpse* Corpse::LoadFromDBData(uint32 in_dbid, uint32 in_charid, char* in_charname, float in_x, float in_y, float in_z, float in_heading, char* time_of_death, bool rezzed, bool was_at_graveyard) { + PlayerCorpse_Struct pcs; + database.LoadCharacterCorpseData(in_dbid, &pcs); + /* Load Items */ ItemList itemlist; 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; - memcpy(tmp, &pcs->items[i], sizeof(player_lootitem::ServerLootItem_Struct)); + memcpy(tmp, &pcs.items[i], sizeof(player_lootitem::ServerLootItem_Struct)); tmp->equipSlot = CorpseToServerSlot(tmp->equipSlot); itemlist.push_back(tmp); } /* Create Corpse Entity */ - Corpse* pc = new Corpse(in_dbid, in_charid, in_charname, &itemlist, pcs->copper, pcs->silver, pcs->gold, pcs->plat, in_x, in_y, in_z, in_heading, pcs->size, pcs->gender, pcs->race, pcs->class_, pcs->deity, pcs->level, pcs->texture, pcs->helmtexture, pcs->exp, was_at_graveyard); - if (pcs->locked) + Corpse* pc = new Corpse( + in_dbid, + in_charid, + in_charname, + &itemlist, + pcs.copper, + pcs.silver, + pcs.gold, + pcs.plat, + in_x, + in_y, + in_z, + in_heading, + pcs.size, + pcs.gender, + pcs.race, + pcs.class_, + pcs.deity, + pcs.level, + pcs.texture, + pcs.helmtexture, + pcs.exp, + was_at_graveyard + ); + if (pcs.locked) pc->Lock(); /* 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)); /* Load Physical Appearance */ - pc->haircolor = pcs->haircolor; - pc->beardcolor = pcs->beardcolor; - pc->eyecolor1 = pcs->eyecolor1; - pc->eyecolor2 = pcs->eyecolor2; - pc->hairstyle = pcs->hairstyle; - pc->luclinface = pcs->face; - pc->beard = pcs->beard; - pc->drakkin_heritage = pcs->drakkin_heritage; - pc->drakkin_tattoo = pcs->drakkin_tattoo; - pc->drakkin_details = pcs->drakkin_details; + pc->haircolor = pcs.haircolor; + pc->beardcolor = pcs.beardcolor; + pc->eyecolor1 = pcs.eyecolor1; + pc->eyecolor2 = pcs.eyecolor2; + pc->hairstyle = pcs.hairstyle; + pc->luclinface = pcs.face; + pc->beard = pcs.beard; + pc->drakkin_heritage = pcs.drakkin_heritage; + pc->drakkin_tattoo = pcs.drakkin_tattoo; + pc->drakkin_details = pcs.drakkin_details; pc->IsRezzed(rezzed); pc->become_npc = false; diff --git a/zone/corpse.h b/zone/corpse.h index 8b1269c1b..a3544834f 100644 --- a/zone/corpse.h +++ b/zone/corpse.h @@ -30,13 +30,14 @@ class Corpse : public Mob { public: static void SendEndLootErrorPacket(Client* client); - static void SendLootReqErrorPacket(Client* client, uint8 response = 2); - static Corpse* LoadFromDBData(uint32 in_corpseid, uint32 in_charid, char* in_charname, PlayerCorpse_Struct* pcs, float in_x, float in_y, float in_z, float in_heading, char* time_of_death, bool rezzed = false, bool wasAtGraveyard = false); + static void SendLootReqErrorPacket(Client* client, uint8 response = 2); + Corpse(NPC* in_npc, ItemList* in_itemlist, uint32 in_npctypeid, const NPCType** in_npctypedata, uint32 in_decaytime = 600000); Corpse(Client* client, int32 in_rezexp); Corpse(uint32 in_corpseid, uint32 in_charid, char* in_charname, ItemList* in_itemlist, uint32 in_copper, uint32 in_silver, uint32 in_gold, uint32 in_plat, float in_x, float in_y, float in_z, float in_heading, float in_size, uint8 in_gender, uint16 in_race, uint8 in_class, uint8 in_deity, uint8 in_level, uint8 in_texture, uint8 in_helmtexture,uint32 in_rezexp, bool wasAtGraveyard = false); ~Corpse(); + static Corpse* LoadFromDBData(uint32 in_dbid, uint32 in_charid, char* in_charname, float in_x, float in_y, float in_z, float in_heading, char* time_of_death, bool rezzed, bool was_at_graveyard); //abstract virtual function implementations requird by base abstract class virtual bool Death(Mob* killerMob, int32 damage, uint16 spell_id, SkillUseTypes attack_skill) { return true; } diff --git a/zone/zonedb.cpp b/zone/zonedb.cpp index 671d109ec..f42e0ab78 100644 --- a/zone/zonedb.cpp +++ b/zone/zonedb.cpp @@ -3884,9 +3884,18 @@ Corpse* ZoneDatabase::SummonBuriedCharacterCorpses(uint32 char_id, uint32 dest_z auto results = QueryDatabase(query); for (auto row = results.begin(); row != results.end(); ++row) { - PlayerCorpse_Struct pcs; - database.LoadCharacterCorpseData(atoi(row[0]), &pcs); - NewCorpse = Corpse::LoadFromDBData(atoi(row[0]), char_id, row[1], &pcs, dest_x, dest_y, dest_z, dest_heading, row[2], atoi(row[3]) == 1, false); + NewCorpse = Corpse::LoadFromDBData( + atoi(row[0]), // uint32 in_dbid + char_id, // uint32 in_charid + row[1], // char* in_charname + dest_x, // float in_x + dest_y, // float in_y + dest_z, // float in_z + dest_heading, // float in_heading + row[2], // char* time_of_death + atoi(row[3]) == 1, // bool rezzed + false // bool was_at_graveyard + ); if (NewCorpse) { entity_list.AddCorpse(NewCorpse); NewCorpse->SetDecayTimer(RuleI(Character, CorpseDecayTimeMS)); @@ -3917,18 +3926,17 @@ bool ZoneDatabase::SummonAllCharacterCorpses(uint32 char_id, uint32 dest_zone_id results = QueryDatabase(query); for (auto row = results.begin(); row != results.end(); ++row) { - PlayerCorpse_Struct pcs; - database.LoadCharacterCorpseData(atoi(row[0]), &pcs); - NewCorpse = Corpse::LoadFromDBData(atoi(row[0]), + NewCorpse = Corpse::LoadFromDBData( + atoi(row[0]), char_id, row[1], - &pcs, dest_x, dest_y, dest_z, dest_heading, row[2], - atoi(row[3]) == 1, false); + atoi(row[3]) == 1, + false); if (NewCorpse) { entity_list.AddCorpse(NewCorpse); NewCorpse->SetDecayTimer(RuleI(Character, CorpseDecayTimeMS)); @@ -3963,18 +3971,15 @@ Corpse* ZoneDatabase::LoadCharacterCorpse(uint32 player_corpse_id) { ); auto results = QueryDatabase(query); for (auto row = results.begin(); row != results.end(); ++row) { - PlayerCorpse_Struct pcs; - database.LoadCharacterCorpseData(atoi(row[0]), &pcs); NewCorpse = Corpse::LoadFromDBData( atoi(row[0]), // id uint32 in_dbid atoi(row[1]), // charid uint32 in_charid - row[2], // charname char* in_charname - &pcs, // PlayerCorpse_Struct* pcs + row[2], // char_name atof(row[3]), // x float in_x - atof(row[4]), // y float in_y + atof(row[4]), // y float in_y atof(row[5]), // z float in_z - atof(row[6]), // heading float in_heading - row[7], // time_of_death char* time_of_death + atof(row[6]), // heading float in_heading + row[7], // time_of_death char* time_of_death atoi(row[8]) == 1, // is_rezzed bool rezzed atoi(row[9]) // was_at_graveyard bool was_at_graveyard ); @@ -3992,22 +3997,18 @@ bool ZoneDatabase::LoadCharacterCorpses(uint32 zone_id, uint16 instance_id) { auto results = QueryDatabase(query); for (auto row = results.begin(); row != results.end(); ++row) { - PlayerCorpse_Struct pcs; - database.LoadCharacterCorpseData(atoi(row[0]), &pcs); - entity_list.AddCorpse( + entity_list.AddCorpse( Corpse::LoadFromDBData( atoi(row[0]), // id uint32 in_dbid atoi(row[1]), // charid uint32 in_charid - row[2], // charname char* in_charname - &pcs, // PlayerCorpse_tSruct* pcs - atof(row[3]), // x float in_x + row[2], // PlayerCorpse_tSruct* pcs + atof(row[3]), // x float in_x atof(row[4]), // y float in_y atof(row[5]), // z float in_z atof(row[6]), // heading float in_heading row[7], // time_of_death char* time_of_death atoi(row[8]) == 1, // is_rezzed bool rezzed - atoi(row[9]) - ) + atoi(row[9])) ); }