diff --git a/changelog.txt b/changelog.txt index 8ad64ad30..54c7478a2 100644 --- a/changelog.txt +++ b/changelog.txt @@ -2,6 +2,8 @@ EQEMu Changelog (Started on Sept 24, 2003 15:50) ------------------------------------------------------- == 01/12/2015 == Uleat: Fix for OP_FormattedMessage text link server crashes +Uleat: Added text link translators for OP_TaskDescription (RoF+ -- all clients current) +Uleat: Fix for load_bots.sql using '\\' as a delimiter (Changed to '$$') == 01/11/2015 == Uleat: Added text link translators for OP_TaskDescription (Ti thru UF..RoF+ in-work) diff --git a/common/patches/rof.cpp b/common/patches/rof.cpp index 2ccac0803..3ec0565bb 100644 --- a/common/patches/rof.cpp +++ b/common/patches/rof.cpp @@ -877,26 +877,27 @@ namespace RoF unsigned char *__emu_buffer = in->pBuffer; + char *old_message_ptr = (char *)in->pBuffer; + old_message_ptr += sizeof(FormattedMessage_Struct); + std::string old_message_array[9]; - char *old_message_ptr = (char *)__emu_buffer + sizeof(FormattedMessage_Struct); - for (int i = 0; i < 9; ++i) { + if (*old_message_ptr == 0) { break; } old_message_array[i] = old_message_ptr; old_message_ptr += old_message_array[i].length() + 1; - if (old_message_array[i].length() == 0) { break; } } uint32 new_message_size = 0; std::string new_message_array[9]; for (int i = 0; i < 9; ++i) { + if (old_message_array[i].length() == 0) { break; } ServerToRoFTextLink(new_message_array[i], old_message_array[i]); - new_message_size += (new_message_array[i].length() + 1); - if (new_message_array[i].length() == 0) { break; } + new_message_size += new_message_array[i].length() + 1; } - in->size = sizeof(FormattedMessage_Struct) + new_message_size; + in->size = sizeof(FormattedMessage_Struct) + new_message_size + 1; in->pBuffer = new unsigned char[in->size]; char *OutBuffer = (char *)in->pBuffer; @@ -906,10 +907,12 @@ namespace RoF VARSTRUCT_ENCODE_TYPE(uint32, OutBuffer, emu->type); for (int i = 0; i < 9; ++i) { - VARSTRUCT_ENCODE_STRING(OutBuffer, new_message_array[i].c_str()); if (new_message_array[i].length() == 0) { break; } + VARSTRUCT_ENCODE_STRING(OutBuffer, new_message_array[i].c_str()); } + VARSTRUCT_ENCODE_TYPE(uint8, OutBuffer, 0); + delete[] __emu_buffer; dest->FastQueuePacket(&in, ack_req); } @@ -3249,16 +3252,55 @@ namespace RoF EQApplicationPacket *in = *p; *p = nullptr; + unsigned char *__emu_buffer = in->pBuffer; + + char *InBuffer = (char *)in->pBuffer; + char *block_start = InBuffer; + + InBuffer += sizeof(TaskDescriptionHeader_Struct); + uint32 title_size = strlen(InBuffer) + 1; + InBuffer += title_size; + + TaskDescriptionData1_Struct *emu_tdd1 = (TaskDescriptionData1_Struct *)InBuffer; + emu_tdd1->StartTime = (time(nullptr) - emu_tdd1->StartTime); // RoF has elapsed time here rather than start time + + InBuffer += sizeof(TaskDescriptionData1_Struct); + uint32 description_size = strlen(InBuffer) + 1; + InBuffer += description_size; + InBuffer += sizeof(TaskDescriptionData2_Struct); + + std::string old_message = InBuffer; // start 'Reward' as string + std::string new_message; + ServerToRoFTextLink(new_message, old_message); + + in->size = sizeof(TaskDescriptionHeader_Struct) + sizeof(TaskDescriptionData1_Struct)+ + sizeof(TaskDescriptionData2_Struct) + sizeof(TaskDescriptionTrailer_Struct)+ + title_size + description_size + new_message.length() + 1; + + in->pBuffer = new unsigned char[in->size]; + + char *OutBuffer = (char *)in->pBuffer; + + memcpy(OutBuffer, block_start, (InBuffer - block_start)); + OutBuffer += (InBuffer - block_start); + + VARSTRUCT_ENCODE_STRING(OutBuffer, new_message.c_str()); + + InBuffer += strlen(InBuffer) + 1; + + memcpy(OutBuffer, InBuffer, sizeof(TaskDescriptionTrailer_Struct)); + + delete[] __emu_buffer; + dest->FastQueuePacket(&in, ack_req); + +#if 0 // original code + EQApplicationPacket *in = *p; + *p = nullptr; + EQApplicationPacket *outapp = new EQApplicationPacket(OP_TaskDescription, in->size + 1); // Set the Write pointer as we don't know what has been done with the packet before we get it. in->SetReadPosition(0); // Copy the header - // - // Server header struct is { uint32; uint32; uint32; uint32; uint8; } - // Yet, we're writing 5 uint32's... that's 17 vs 20 bytes... - // 3 Bytes difference..but, we only increase packet size by 1 byte..something wrong here? -U - // (Tying to add text link translators and can't figure out if '+1' size is a new RoF field or something else) - // for (int i = 0; i < 5; ++i) outapp->WriteUInt32(in->ReadUInt32()); @@ -3278,6 +3320,7 @@ namespace RoF delete in; dest->FastQueuePacket(&outapp, ack_req); +#endif } ENCODE(OP_TaskHistoryReply) diff --git a/common/patches/rof2.cpp b/common/patches/rof2.cpp index 10798be82..c586fe260 100644 --- a/common/patches/rof2.cpp +++ b/common/patches/rof2.cpp @@ -943,26 +943,27 @@ namespace RoF2 unsigned char *__emu_buffer = in->pBuffer; + char *old_message_ptr = (char *)in->pBuffer; + old_message_ptr += sizeof(FormattedMessage_Struct); + std::string old_message_array[9]; - char *old_message_ptr = (char *)__emu_buffer + sizeof(FormattedMessage_Struct); - for (int i = 0; i < 9; ++i) { + if (*old_message_ptr == 0) { break; } old_message_array[i] = old_message_ptr; old_message_ptr += old_message_array[i].length() + 1; - if (old_message_array[i].length() == 0) { break; } } uint32 new_message_size = 0; std::string new_message_array[9]; for (int i = 0; i < 9; ++i) { + if (old_message_array[i].length() == 0) { break; } ServerToRoF2TextLink(new_message_array[i], old_message_array[i]); - new_message_size += (new_message_array[i].length() + 1); - if (new_message_array[i].length() == 0) { break; } + new_message_size += new_message_array[i].length() + 1; } - in->size = sizeof(FormattedMessage_Struct) + new_message_size; + in->size = sizeof(FormattedMessage_Struct) + new_message_size + 1; in->pBuffer = new unsigned char[in->size]; char *OutBuffer = (char *)in->pBuffer; @@ -972,10 +973,12 @@ namespace RoF2 VARSTRUCT_ENCODE_TYPE(uint32, OutBuffer, emu->type); for (int i = 0; i < 9; ++i) { - VARSTRUCT_ENCODE_STRING(OutBuffer, new_message_array[i].c_str()); if (new_message_array[i].length() == 0) { break; } + VARSTRUCT_ENCODE_STRING(OutBuffer, new_message_array[i].c_str()); } + VARSTRUCT_ENCODE_TYPE(uint8, OutBuffer, 0); + delete[] __emu_buffer; dest->FastQueuePacket(&in, ack_req); } @@ -3315,6 +3318,51 @@ namespace RoF2 EQApplicationPacket *in = *p; *p = nullptr; + unsigned char *__emu_buffer = in->pBuffer; + + char *InBuffer = (char *)in->pBuffer; + char *block_start = InBuffer; + + InBuffer += sizeof(TaskDescriptionHeader_Struct); + uint32 title_size = strlen(InBuffer) + 1; + InBuffer += title_size; + + TaskDescriptionData1_Struct *emu_tdd1 = (TaskDescriptionData1_Struct *)InBuffer; + emu_tdd1->StartTime = (time(nullptr) - emu_tdd1->StartTime); // RoF2 has elapsed time here rather than start time + + InBuffer += sizeof(TaskDescriptionData1_Struct); + uint32 description_size = strlen(InBuffer) + 1; + InBuffer += description_size; + InBuffer += sizeof(TaskDescriptionData2_Struct); + + std::string old_message = InBuffer; // start 'Reward' as string + std::string new_message; + ServerToRoF2TextLink(new_message, old_message); + + in->size = sizeof(TaskDescriptionHeader_Struct) + sizeof(TaskDescriptionData1_Struct)+ + sizeof(TaskDescriptionData2_Struct) + sizeof(TaskDescriptionTrailer_Struct)+ + title_size + description_size + new_message.length() + 1; + + in->pBuffer = new unsigned char[in->size]; + + char *OutBuffer = (char *)in->pBuffer; + + memcpy(OutBuffer, block_start, (InBuffer - block_start)); + OutBuffer += (InBuffer - block_start); + + VARSTRUCT_ENCODE_STRING(OutBuffer, new_message.c_str()); + + InBuffer += strlen(InBuffer) + 1; + + memcpy(OutBuffer, InBuffer, sizeof(TaskDescriptionTrailer_Struct)); + + delete[] __emu_buffer; + dest->FastQueuePacket(&in, ack_req); + +#if 0 // original code + EQApplicationPacket *in = *p; + *p = nullptr; + EQApplicationPacket *outapp = new EQApplicationPacket(OP_TaskDescription, in->size + 1); // Set the Write pointer as we don't know what has been done with the packet before we get it. in->SetReadPosition(0); @@ -3338,6 +3386,7 @@ namespace RoF2 delete in; dest->FastQueuePacket(&outapp, ack_req); +#endif } ENCODE(OP_TaskHistoryReply) diff --git a/common/patches/sod.cpp b/common/patches/sod.cpp index 3938e238f..09e219672 100644 --- a/common/patches/sod.cpp +++ b/common/patches/sod.cpp @@ -646,26 +646,27 @@ namespace SoD unsigned char *__emu_buffer = in->pBuffer; + char *old_message_ptr = (char *)in->pBuffer; + old_message_ptr += sizeof(FormattedMessage_Struct); + std::string old_message_array[9]; - char *old_message_ptr = (char *)__emu_buffer + sizeof(FormattedMessage_Struct); - for (int i = 0; i < 9; ++i) { + if (*old_message_ptr == 0) { break; } old_message_array[i] = old_message_ptr; old_message_ptr += old_message_array[i].length() + 1; - if (old_message_array[i].length() == 0) { break; } } uint32 new_message_size = 0; std::string new_message_array[9]; for (int i = 0; i < 9; ++i) { + if (old_message_array[i].length() == 0) { break; } ServerToSoDTextLink(new_message_array[i], old_message_array[i]); - new_message_size += (new_message_array[i].length() + 1); - if (new_message_array[i].length() == 0) { break; } + new_message_size += new_message_array[i].length() + 1; } - in->size = sizeof(FormattedMessage_Struct) + new_message_size; + in->size = sizeof(FormattedMessage_Struct) + new_message_size + 1; in->pBuffer = new unsigned char[in->size]; char *OutBuffer = (char *)in->pBuffer; @@ -675,10 +676,12 @@ namespace SoD VARSTRUCT_ENCODE_TYPE(uint32, OutBuffer, emu->type); for (int i = 0; i < 9; ++i) { - VARSTRUCT_ENCODE_STRING(OutBuffer, new_message_array[i].c_str()); if (new_message_array[i].length() == 0) { break; } + VARSTRUCT_ENCODE_STRING(OutBuffer, new_message_array[i].c_str()); } + VARSTRUCT_ENCODE_TYPE(uint8, OutBuffer, 0); + delete[] __emu_buffer; dest->FastQueuePacket(&in, ack_req); } @@ -2201,15 +2204,15 @@ namespace SoD std::string new_message; ServerToSoDTextLink(new_message, old_message); - in->size = sizeof(TaskDescriptionHeader_Struct)+sizeof(TaskDescriptionData1_Struct)+ - sizeof(TaskDescriptionData2_Struct)+sizeof(TaskDescriptionTrailer_Struct)+ + in->size = sizeof(TaskDescriptionHeader_Struct) + sizeof(TaskDescriptionData1_Struct)+ + sizeof(TaskDescriptionData2_Struct) + sizeof(TaskDescriptionTrailer_Struct)+ title_size + description_size + new_message.length() + 1; in->pBuffer = new unsigned char[in->size]; char *OutBuffer = (char *)in->pBuffer; - memcpy(OutBuffer, (char *)__emu_buffer, (InBuffer - block_start)); + memcpy(OutBuffer, block_start, (InBuffer - block_start)); OutBuffer += (InBuffer - block_start); VARSTRUCT_ENCODE_STRING(OutBuffer, new_message.c_str()); diff --git a/common/patches/sof.cpp b/common/patches/sof.cpp index a9c5c0ea2..07885944a 100644 --- a/common/patches/sof.cpp +++ b/common/patches/sof.cpp @@ -633,26 +633,27 @@ namespace SoF unsigned char *__emu_buffer = in->pBuffer; + char *old_message_ptr = (char *)in->pBuffer; + old_message_ptr += sizeof(FormattedMessage_Struct); + std::string old_message_array[9]; - char *old_message_ptr = (char *)__emu_buffer + sizeof(FormattedMessage_Struct); - for (int i = 0; i < 9; ++i) { + if (*old_message_ptr == 0) { break; } old_message_array[i] = old_message_ptr; old_message_ptr += old_message_array[i].length() + 1; - if (old_message_array[i].length() == 0) { break; } } uint32 new_message_size = 0; std::string new_message_array[9]; for (int i = 0; i < 9; ++i) { + if (old_message_array[i].length() == 0) { break; } ServerToSoFTextLink(new_message_array[i], old_message_array[i]); - new_message_size += (new_message_array[i].length() + 1); - if (new_message_array[i].length() == 0) { break; } + new_message_size += new_message_array[i].length() + 1; } - in->size = sizeof(FormattedMessage_Struct) + new_message_size; + in->size = sizeof(FormattedMessage_Struct) + new_message_size + 1; in->pBuffer = new unsigned char[in->size]; char *OutBuffer = (char *)in->pBuffer; @@ -662,10 +663,12 @@ namespace SoF VARSTRUCT_ENCODE_TYPE(uint32, OutBuffer, emu->type); for (int i = 0; i < 9; ++i) { - VARSTRUCT_ENCODE_STRING(OutBuffer, new_message_array[i].c_str()); if (new_message_array[i].length() == 0) { break; } + VARSTRUCT_ENCODE_STRING(OutBuffer, new_message_array[i].c_str()); } + VARSTRUCT_ENCODE_TYPE(uint8, OutBuffer, 0); + delete[] __emu_buffer; dest->FastQueuePacket(&in, ack_req); } @@ -1800,15 +1803,15 @@ namespace SoF std::string new_message; ServerToSoFTextLink(new_message, old_message); - in->size = sizeof(TaskDescriptionHeader_Struct)+sizeof(TaskDescriptionData1_Struct)+ - sizeof(TaskDescriptionData2_Struct)+sizeof(TaskDescriptionTrailer_Struct)+ + in->size = sizeof(TaskDescriptionHeader_Struct) + sizeof(TaskDescriptionData1_Struct)+ + sizeof(TaskDescriptionData2_Struct) + sizeof(TaskDescriptionTrailer_Struct)+ title_size + description_size + new_message.length() + 1; in->pBuffer = new unsigned char[in->size]; char *OutBuffer = (char *)in->pBuffer; - memcpy(OutBuffer, (char *)__emu_buffer, (InBuffer - block_start)); + memcpy(OutBuffer, block_start, (InBuffer - block_start)); OutBuffer += (InBuffer - block_start); VARSTRUCT_ENCODE_STRING(OutBuffer, new_message.c_str()); diff --git a/common/patches/titanium.cpp b/common/patches/titanium.cpp index 500e5f128..9aa8afad8 100644 --- a/common/patches/titanium.cpp +++ b/common/patches/titanium.cpp @@ -492,26 +492,27 @@ namespace Titanium unsigned char *__emu_buffer = in->pBuffer; + char *old_message_ptr = (char *)in->pBuffer; + old_message_ptr += sizeof(FormattedMessage_Struct); + std::string old_message_array[9]; - char *old_message_ptr = (char *)__emu_buffer + sizeof(FormattedMessage_Struct); - for (int i = 0; i < 9; ++i) { + if (*old_message_ptr == 0) { break; } old_message_array[i] = old_message_ptr; old_message_ptr += old_message_array[i].length() + 1; - if (old_message_array[i].length() == 0) { break; } } uint32 new_message_size = 0; std::string new_message_array[9]; for (int i = 0; i < 9; ++i) { + if (old_message_array[i].length() == 0) { break; } ServerToTitaniumTextLink(new_message_array[i], old_message_array[i]); - new_message_size += (new_message_array[i].length() + 1); - if (new_message_array[i].length() == 0) { break; } + new_message_size += new_message_array[i].length() + 1; } - in->size = sizeof(FormattedMessage_Struct) + new_message_size; + in->size = sizeof(FormattedMessage_Struct) + new_message_size + 1; in->pBuffer = new unsigned char[in->size]; char *OutBuffer = (char *)in->pBuffer; @@ -521,10 +522,12 @@ namespace Titanium VARSTRUCT_ENCODE_TYPE(uint32, OutBuffer, emu->type); for (int i = 0; i < 9; ++i) { - VARSTRUCT_ENCODE_STRING(OutBuffer, new_message_array[i].c_str()); if (new_message_array[i].length() == 0) { break; } + VARSTRUCT_ENCODE_STRING(OutBuffer, new_message_array[i].c_str()); } + VARSTRUCT_ENCODE_TYPE(uint8, OutBuffer, 0); + delete[] __emu_buffer; dest->FastQueuePacket(&in, ack_req); } @@ -1258,7 +1261,7 @@ namespace Titanium char *OutBuffer = (char *)in->pBuffer; - memcpy(OutBuffer, (char *)__emu_buffer, (InBuffer - block_start)); + memcpy(OutBuffer, block_start, (InBuffer - block_start)); OutBuffer += (InBuffer - block_start); VARSTRUCT_ENCODE_STRING(OutBuffer, new_message.c_str()); diff --git a/common/patches/underfoot.cpp b/common/patches/underfoot.cpp index 5a07fed7e..ba04ea9a7 100644 --- a/common/patches/underfoot.cpp +++ b/common/patches/underfoot.cpp @@ -790,26 +790,27 @@ namespace Underfoot unsigned char *__emu_buffer = in->pBuffer; + char *old_message_ptr = (char *)in->pBuffer; + old_message_ptr += sizeof(FormattedMessage_Struct); + std::string old_message_array[9]; - char *old_message_ptr = (char *)__emu_buffer + sizeof(FormattedMessage_Struct); - for (int i = 0; i < 9; ++i) { + if (*old_message_ptr == 0) { break; } old_message_array[i] = old_message_ptr; old_message_ptr += old_message_array[i].length() + 1; - if (old_message_array[i].length() == 0) { break; } } uint32 new_message_size = 0; std::string new_message_array[9]; for (int i = 0; i < 9; ++i) { + if (old_message_array[i].length() == 0) { break; } ServerToUnderfootTextLink(new_message_array[i], old_message_array[i]); - new_message_size += (new_message_array[i].length() + 1); - if (new_message_array[i].length() == 0) { break; } + new_message_size += new_message_array[i].length() + 1; } - in->size = sizeof(FormattedMessage_Struct) + new_message_size; + in->size = sizeof(FormattedMessage_Struct) + new_message_size + 1; in->pBuffer = new unsigned char[in->size]; char *OutBuffer = (char *)in->pBuffer; @@ -819,10 +820,12 @@ namespace Underfoot VARSTRUCT_ENCODE_TYPE(uint32, OutBuffer, emu->type); for (int i = 0; i < 9; ++i) { - VARSTRUCT_ENCODE_STRING(OutBuffer, new_message_array[i].c_str()); if (new_message_array[i].length() == 0) { break; } + VARSTRUCT_ENCODE_STRING(OutBuffer, new_message_array[i].c_str()); } + VARSTRUCT_ENCODE_TYPE(uint8, OutBuffer, 0); + delete[] __emu_buffer; dest->FastQueuePacket(&in, ack_req); } @@ -2467,15 +2470,15 @@ namespace Underfoot std::string new_message; ServerToUnderfootTextLink(new_message, old_message); - in->size = sizeof(TaskDescriptionHeader_Struct)+sizeof(TaskDescriptionData1_Struct)+ - sizeof(TaskDescriptionData2_Struct)+sizeof(TaskDescriptionTrailer_Struct)+ + in->size = sizeof(TaskDescriptionHeader_Struct) + sizeof(TaskDescriptionData1_Struct)+ + sizeof(TaskDescriptionData2_Struct) + sizeof(TaskDescriptionTrailer_Struct)+ title_size + description_size + new_message.length() + 1; in->pBuffer = new unsigned char[in->size]; char *OutBuffer = (char *)in->pBuffer; - memcpy(OutBuffer, (char *)__emu_buffer, (InBuffer - block_start)); + memcpy(OutBuffer, block_start, (InBuffer - block_start)); OutBuffer += (InBuffer - block_start); VARSTRUCT_ENCODE_STRING(OutBuffer, new_message.c_str()); diff --git a/common/shareddb.cpp b/common/shareddb.cpp index c036fb5de..42aeebfea 100644 --- a/common/shareddb.cpp +++ b/common/shareddb.cpp @@ -1979,7 +1979,7 @@ void SharedDatabase::LoadCharacterInspectMessage(uint32 character_id, InspectMes std::string query = StringFormat("SELECT `inspect_message` FROM `character_inspect_messages` WHERE `id` = %u LIMIT 1", character_id); auto results = QueryDatabase(query); auto row = results.begin(); - memcpy(message, "", sizeof(InspectMessage_Struct)); + memset(message, '\0', sizeof(InspectMessage_Struct)); for (auto row = results.begin(); row != results.end(); ++row) { memcpy(message, row[0], sizeof(InspectMessage_Struct)); } diff --git a/utils/sql/git/bots/deprecated/load_bots_old.sql b/utils/sql/git/bots/deprecated/load_bots_old.sql index 44d1c1b90..5d88a8088 100644 --- a/utils/sql/git/bots/deprecated/load_bots_old.sql +++ b/utils/sql/git/bots/deprecated/load_bots_old.sql @@ -194,7 +194,7 @@ CREATE TABLE `botguildmembers` ( PRIMARY KEY (`char_id`) ) ENGINE=InnoDB; -DELIMITER // +DELIMITER $$ CREATE FUNCTION `GetMobType` (mobname VARCHAR(64)) RETURNS CHAR(1) BEGIN @@ -209,7 +209,7 @@ BEGIN END IF; RETURN Result; -END// +END$$ DELIMITER ; diff --git a/utils/sql/git/bots/load_bots.sql b/utils/sql/git/bots/load_bots.sql index 9957b882a..0dd030545 100644 --- a/utils/sql/git/bots/load_bots.sql +++ b/utils/sql/git/bots/load_bots.sql @@ -194,7 +194,7 @@ CREATE TABLE `botguildmembers` ( PRIMARY KEY (`char_id`) ) ENGINE=InnoDB; -DELIMITER \\ +DELIMITER $$ CREATE FUNCTION `GetMobType` (mobname VARCHAR(64)) RETURNS CHAR(1) BEGIN @@ -209,7 +209,7 @@ BEGIN END IF; RETURN Result; -END\\ +END$$ DELIMITER ; diff --git a/zone/client.cpp b/zone/client.cpp index 55775943c..adaa7ce2f 100644 --- a/zone/client.cpp +++ b/zone/client.cpp @@ -2814,7 +2814,7 @@ void Client::Message_StringID(uint32 type, uint32 string_id, const char* message return; int i = 0, argcount = 0, length = 0; - char *bufptr; + char *bufptr = nullptr; const char *message_arg[9] = {0}; if(type==MT_Emote) @@ -2839,8 +2839,7 @@ void Client::Message_StringID(uint32 type, uint32 string_id, const char* message for(; message_arg[argcount]; ++argcount) length += strlen(message_arg[argcount]) + 1; - if (length == 0) - length = 1; + length += 1; EQApplicationPacket* outapp = new EQApplicationPacket(OP_FormattedMessage, sizeof(FormattedMessage_Struct) + length); FormattedMessage_Struct *fm = (FormattedMessage_Struct *)outapp->pBuffer; @@ -2853,8 +2852,7 @@ void Client::Message_StringID(uint32 type, uint32 string_id, const char* message bufptr += strlen(message_arg[i]) + 1; } - if (argcount == 0) - bufptr = '\0'; + bufptr = '\0'; if(distance>0) entity_list.QueueCloseClients(this,outapp,false,distance); @@ -2930,7 +2928,7 @@ void Client::FilteredMessage_StringID(Mob *sender, uint32 type, eqFilterType fil return; int i = 0, argcount = 0, length = 0; - char *bufptr; + char *bufptr = nullptr; const char *message_arg[9] = {0}; if (type == MT_Emote) @@ -2954,8 +2952,7 @@ void Client::FilteredMessage_StringID(Mob *sender, uint32 type, eqFilterType fil for (; message_arg[argcount]; ++argcount) length += strlen(message_arg[argcount]) + 1; - if (length == 0) - length = 1; + length += 1; EQApplicationPacket *outapp = new EQApplicationPacket(OP_FormattedMessage, sizeof(FormattedMessage_Struct) + length); FormattedMessage_Struct *fm = (FormattedMessage_Struct *)outapp->pBuffer; @@ -2967,8 +2964,7 @@ void Client::FilteredMessage_StringID(Mob *sender, uint32 type, eqFilterType fil bufptr += strlen(message_arg[i]) + 1; } - if (argcount == 0) - bufptr = '\0'; + bufptr = '\0'; QueuePacket(outapp); safe_delete(outapp); diff --git a/zone/spell_effects.cpp b/zone/spell_effects.cpp index 70a7d3981..1f7083118 100644 --- a/zone/spell_effects.cpp +++ b/zone/spell_effects.cpp @@ -6568,33 +6568,32 @@ bool Mob::TrySpellProjectile(Mob* spell_target, uint16 spell_id, float speed){ DoAnim(anim, 0, true, IsClient() ? FilterPCSpells : FilterNPCSpells); //Override the default projectile animation. return true; -} +} -void Mob::ResourceTap(int32 damage, uint16 spellid){ +void Mob::ResourceTap(int32 damage, uint16 spellid) +{ //'this' = caster if (!IsValidSpell(spellid)) return; - for (int i = 0; i <= EFFECT_COUNT; i++) - { - if (spells[spellid].effectid[i] == SE_ResourceTap){ - - damage += (damage * spells[spellid].base[i])/100; + for (int i = 0; i < EFFECT_COUNT; i++) { + if (spells[spellid].effectid[i] == SE_ResourceTap) { + damage += (damage * spells[spellid].base[i]) / 100; if (spells[spellid].max[i] && (damage > spells[spellid].max[i])) damage = spells[spellid].max[i]; - if (spells[spellid].base2[i] == 0){ //HP Tap + if (spells[spellid].base2[i] == 0) { // HP Tap if (damage > 0) HealDamage(damage); else - Damage(this, -damage,0, SkillEvocation,false); + Damage(this, -damage, 0, SkillEvocation, false); } - if (spells[spellid].base2[i] == 1) //Mana Tap + if (spells[spellid].base2[i] == 1) // Mana Tap SetMana(GetMana() + damage); - if (spells[spellid].base2[i] == 2 && IsClient()) //Endurance Tap + if (spells[spellid].base2[i] == 2 && IsClient()) // Endurance Tap CastToClient()->SetEndurance(CastToClient()->GetEndurance() + damage); } } diff --git a/zone/tasks.cpp b/zone/tasks.cpp index d6f285de6..431a7554c 100644 --- a/zone/tasks.cpp +++ b/zone/tasks.cpp @@ -2756,7 +2756,7 @@ void TaskManager::SendActiveTaskDescription(Client *c, int TaskID, int SequenceN + sizeof(TaskDescriptionData1_Struct) + strlen(Tasks[TaskID]->Description) + 1 + sizeof(TaskDescriptionData2_Struct) + 1 + sizeof(TaskDescriptionTrailer_Struct); - std::string RewardText; + std::string reward_text; int ItemID = NOT_USED; // If there is an item make the Reward text into a link to the item (only the first item if a list @@ -2784,17 +2784,17 @@ void TaskManager::SendActiveTaskDescription(Client *c, int TaskID, int SequenceN linker.SetProxyText(Tasks[TaskID]->Reward); auto reward_link = linker.GenerateLink(); - RewardText += reward_link.c_str(); + reward_text.append(reward_link); } else { - RewardText += Tasks[TaskID]->Reward; + reward_text.append(Tasks[TaskID]->Reward); } } else { - RewardText += Tasks[TaskID]->Reward; + reward_text.append(Tasks[TaskID]->Reward); } - PacketLength += strlen(RewardText.c_str()) + 1; + PacketLength += reward_text.length() + 1; char *Ptr; TaskDescriptionHeader_Struct* tdh; @@ -2850,7 +2850,7 @@ void TaskManager::SendActiveTaskDescription(Client *c, int TaskID, int SequenceN tdd2->unknown3 = 0x0000; Ptr = (char *) tdd2 + sizeof(TaskDescriptionData2_Struct); - sprintf(Ptr, "%s", RewardText.c_str()); + sprintf(Ptr, "%s", reward_text.c_str()); Ptr = Ptr + strlen(Ptr) + 1; tdt = (TaskDescriptionTrailer_Struct*)Ptr;