Change the ActivityInformation::Text*s to std::string

This commit is contained in:
Michael Cook (mackal) 2018-06-12 00:32:13 -04:00
parent 6b64a8183d
commit 9e64132261
2 changed files with 138 additions and 146 deletions

View File

@ -48,11 +48,6 @@ TaskManager::TaskManager() {
TaskManager::~TaskManager() {
for(int i=0; i<MAXTASKS; i++) {
if(Tasks[i] != nullptr) {
for(int j=0; j<Tasks[i]->ActivityCount; j++) {
safe_delete_array(Tasks[i]->Activity[j].Text1);
safe_delete_array(Tasks[i]->Activity[j].Text2);
safe_delete_array(Tasks[i]->Activity[j].Text3);
}
safe_delete_array(Tasks[i]->Title);
safe_delete_array(Tasks[i]->Description);
safe_delete_array(Tasks[i]->Reward);
@ -98,12 +93,6 @@ bool TaskManager::LoadSingleTask(int TaskID) {
// If this task already exists in memory, free all the dynamically allocated strings.
if(Tasks[TaskID]) {
for(int j=0; j<Tasks[TaskID]->ActivityCount; j++) {
safe_delete_array(Tasks[TaskID]->Activity[j].Text1);
safe_delete_array(Tasks[TaskID]->Activity[j].Text2);
safe_delete_array(Tasks[TaskID]->Activity[j].Text3);
}
safe_delete_array(Tasks[TaskID]->Title);
safe_delete_array(Tasks[TaskID]->Description);
safe_delete_array(Tasks[TaskID]->Reward);
@ -119,8 +108,8 @@ void TaskManager::ReloadGoalLists() {
Log(Logs::Detail, Logs::Tasks,"TaskManager::LoadTasks LoadLists failed");
}
bool TaskManager::LoadTasks(int singleTask) {
bool TaskManager::LoadTasks(int singleTask)
{
// If TaskID !=0, then just load the task specified.
Log(Logs::General, Logs::Tasks, "[GLOBALLOAD] TaskManager::LoadTasks Called");
@ -135,13 +124,14 @@ bool TaskManager::LoadTasks(int singleTask) {
query = StringFormat("SELECT `id`, `duration`, `title`, `description`, `reward`, "
"`rewardid`, `cashreward`, `xpreward`, `rewardmethod`, "
"`startzone`, `minlevel`, `maxlevel`, `repeatable` "
"FROM `tasks` WHERE `id` < %i", MAXTASKS);
}
else
"FROM `tasks` WHERE `id` < %i",
MAXTASKS);
} else
query = StringFormat("SELECT `id`, `duration`, `title`, `description`, `reward`, "
"`rewardid`, `cashreward`, `xpreward`, `rewardmethod`, "
"`startzone`, `minlevel`, `maxlevel`, `repeatable` "
"FROM `tasks` WHERE `id` = %i",singleTask);
"FROM `tasks` WHERE `id` = %i",
singleTask);
const char *ERR_MYSQLERROR = "[TASKS]Error in TaskManager::LoadTasks: %s";
@ -156,7 +146,8 @@ bool TaskManager::LoadTasks(int singleTask) {
if ((taskID <= 0) || (taskID >= MAXTASKS)) {
// This shouldn't happen, as the SELECT is bounded by MAXTASKS
Log(Logs::General, Logs::Error, "[TASKS]Task ID %i out of range while loading tasks from database", taskID);
Log(Logs::General, Logs::Error,
"[TASKS]Task ID %i out of range while loading tasks from database", taskID);
continue;
}
@ -180,28 +171,30 @@ bool TaskManager::LoadTasks(int singleTask) {
Tasks[taskID]->SequenceMode = ActivitiesSequential;
Tasks[taskID]->LastStep = 0;
Log(Logs::General, Logs::Tasks, "[GLOBALLOAD] TaskID: %5i, Duration: %8i, StartZone: %3i Reward: %s MinLevel %i MaxLevel %i Repeatable: %s",
Log(Logs::General, Logs::Tasks,
"[GLOBALLOAD] TaskID: %5i, Duration: %8i, StartZone: %3i Reward: %s MinLevel %i MaxLevel %i "
"Repeatable: %s",
taskID, Tasks[taskID]->Duration, Tasks[taskID]->StartZone, Tasks[taskID]->Reward,
Tasks[taskID]->MinLevel, Tasks[taskID]->MaxLevel,
Tasks[taskID]->Repeatable ? "Yes" : "No");
Tasks[taskID]->MinLevel, Tasks[taskID]->MaxLevel, Tasks[taskID]->Repeatable ? "Yes" : "No");
Log(Logs::General, Logs::Tasks, "[GLOBALLOAD] Title: %s", Tasks[taskID]->Title);
}
if (singleTask == 0)
query = StringFormat("SELECT `taskid`, `step`, `activityid`, `activitytype`, "
"`text1`, `text2`, `text3`, `goalid`, `goalmethod`, "
"`goalcount`, `delivertonpc`, `zoneid`, `optional` "
"FROM `activities` "
"WHERE `taskid` < %i AND `activityid` < %i "
"ORDER BY taskid, activityid ASC", MAXTASKS, MAXACTIVITIESPERTASK);
"ORDER BY taskid, activityid ASC",
MAXTASKS, MAXACTIVITIESPERTASK);
else
query = StringFormat("SELECT `taskid`, `step`, `activityid`, `activitytype`, "
"`text1`, `text2`, `text3`, `goalid`, `goalmethod`, "
"`goalcount`, `delivertonpc`, `zoneid`, `optional` "
"FROM `activities` "
"WHERE `taskid` = %i AND `activityid` < %i "
"ORDER BY taskid, activityid ASC", singleTask, MAXACTIVITIESPERTASK);
"ORDER BY taskid, activityid ASC",
singleTask, MAXACTIVITIESPERTASK);
results = database.QueryDatabase(query);
if (!results.Success()) {
Log(Logs::General, Logs::Error, ERR_MYSQLERROR, results.ErrorMessage().c_str());
@ -216,13 +209,17 @@ bool TaskManager::LoadTasks(int singleTask) {
if ((taskID <= 0) || (taskID >= MAXTASKS) || (activityID < 0) || (activityID >= MAXACTIVITIESPERTASK)) {
// This shouldn't happen, as the SELECT is bounded by MAXTASKS
Log(Logs::General, Logs::Error, "[TASKS]Task or Activity ID (%i, %i) out of range while loading "
"activities from database", taskID, activityID);
Log(Logs::General, Logs::Error,
"[TASKS]Task or Activity ID (%i, %i) out of range while loading "
"activities from database",
taskID, activityID);
continue;
}
if (Tasks[taskID] == nullptr) {
Log(Logs::General, Logs::Error, "[TASKS]Activity for non-existent task (%i, %i) while loading activities from database", taskID, activityID);
Log(Logs::General, Logs::Error,
"[TASKS]Activity for non-existent task (%i, %i) while loading activities from database",
taskID, activityID);
continue;
}
@ -239,33 +236,23 @@ bool TaskManager::LoadTasks(int singleTask) {
// ERR_NOTASK errors.
// Change to (activityID != (Tasks[taskID]->ActivityCount + 1)) to index from 1
if (activityID != Tasks[taskID]->ActivityCount) {
Log(Logs::General, Logs::Error, "[TASKS]Activities for Task %i are not sequential starting at 0. Not loading task.", taskID, activityID);
Log(Logs::General, Logs::Error,
"[TASKS]Activities for Task %i are not sequential starting at 0. Not loading task.", taskID,
activityID);
Tasks[taskID] = nullptr;
continue;
}
Tasks[taskID]->Activity[Tasks[taskID]->ActivityCount].Type = atoi(row[3]);
Tasks[taskID]->Activity[Tasks[taskID]->ActivityCount].Text1 = new char[strlen(row[4]) + 1];
if (row[4][0])
Tasks[taskID]->Activity[Tasks[taskID]->ActivityCount].Text1 = row[4];
if(strlen(row[4])>0)
strcpy(Tasks[taskID]->Activity[Tasks[taskID]->ActivityCount].Text1, row[4]);
else
Tasks[taskID]->Activity[Tasks[taskID]->ActivityCount].Text1[0]=0;
if (row[5][0])
Tasks[taskID]->Activity[Tasks[taskID]->ActivityCount].Text2 = row[5];
Tasks[taskID]->Activity[Tasks[taskID]->ActivityCount].Text2 = new char[strlen(row[5]) + 1];
if(strlen(row[5])>0)
strcpy(Tasks[taskID]->Activity[Tasks[taskID]->ActivityCount].Text2, row[5]);
else
Tasks[taskID]->Activity[Tasks[taskID]->ActivityCount].Text2[0]=0;
Tasks[taskID]->Activity[Tasks[taskID]->ActivityCount].Text3 = new char[strlen(row[6]) + 1];
if(strlen(row[6])>0)
strcpy(Tasks[taskID]->Activity[Tasks[taskID]->ActivityCount].Text3, row[6]);
else
Tasks[taskID]->Activity[Tasks[taskID]->ActivityCount].Text3[0]=0;
if (row[6][0])
Tasks[taskID]->Activity[Tasks[taskID]->ActivityCount].Text3 = row[6];
Tasks[taskID]->Activity[Tasks[taskID]->ActivityCount].GoalID = atoi(row[7]);
Tasks[taskID]->Activity[Tasks[taskID]->ActivityCount].GoalMethod = (TaskMethodType)atoi(row[8]);
@ -274,7 +261,8 @@ bool TaskManager::LoadTasks(int singleTask) {
Tasks[taskID]->Activity[Tasks[taskID]->ActivityCount].ZoneID = atoi(row[11]);
Tasks[taskID]->Activity[Tasks[taskID]->ActivityCount].Optional = atoi(row[12]);
Log(Logs::General, Logs::Tasks, "[GLOBALLOAD] Activity Slot %2i: ID %i for Task %5i. Type: %3i, GoalID: %8i, "
Log(Logs::General, Logs::Tasks,
"[GLOBALLOAD] Activity Slot %2i: ID %i for Task %5i. Type: %3i, GoalID: %8i, "
"GoalMethod: %i, GoalCount: %3i, ZoneID:%3i",
Tasks[taskID]->ActivityCount, activityID, taskID,
Tasks[taskID]->Activity[Tasks[taskID]->ActivityCount].Type,
@ -283,9 +271,12 @@ bool TaskManager::LoadTasks(int singleTask) {
Tasks[taskID]->Activity[Tasks[taskID]->ActivityCount].GoalCount,
Tasks[taskID]->Activity[Tasks[taskID]->ActivityCount].ZoneID);
Log(Logs::General, Logs::Tasks, "[GLOBALLOAD] Text1: %s", Tasks[taskID]->Activity[Tasks[taskID]->ActivityCount].Text1);
Log(Logs::General, Logs::Tasks, "[GLOBALLOAD] Text2: %s", Tasks[taskID]->Activity[Tasks[taskID]->ActivityCount].Text2);
Log(Logs::General, Logs::Tasks, "[GLOBALLOAD] Text3: %s", Tasks[taskID]->Activity[Tasks[taskID]->ActivityCount].Text3);
Log(Logs::General, Logs::Tasks, "[GLOBALLOAD] Text1: %s",
Tasks[taskID]->Activity[Tasks[taskID]->ActivityCount].Text1.c_str());
Log(Logs::General, Logs::Tasks, "[GLOBALLOAD] Text2: %s",
Tasks[taskID]->Activity[Tasks[taskID]->ActivityCount].Text2.c_str());
Log(Logs::General, Logs::Tasks, "[GLOBALLOAD] Text3: %s",
Tasks[taskID]->Activity[Tasks[taskID]->ActivityCount].Text3.c_str());
Tasks[taskID]->ActivityCount++;
}
@ -2348,10 +2339,10 @@ void ClientTaskState::SendTaskHistory(Client *c, int TaskIndex) {
if(CompletedTasks[AdjustedTaskIndex].ActivityDone[i]) {
CompletedActivityCount++;
PacketLength = PacketLength + sizeof(TaskHistoryReplyData1_Struct) +
strlen(Task->Activity[i].Text1) + 1 +
strlen(Task->Activity[i].Text2) + 1 +
Task->Activity[i].Text1.size() + 1 +
Task->Activity[i].Text2.size() + 1 +
sizeof(TaskHistoryReplyData2_Struct) +
strlen(Task->Activity[i].Text3) + 1;
Task->Activity[i].Text3.size() + 1;
}
}
@ -2371,8 +2362,8 @@ void ClientTaskState::SendTaskHistory(Client *c, int TaskIndex) {
thd1 = (TaskHistoryReplyData1_Struct*)Ptr;
thd1->ActivityType = Task->Activity[i].Type;
Ptr = (char *)thd1 + sizeof(TaskHistoryReplyData1_Struct);
VARSTRUCT_ENCODE_STRING(Ptr, Task->Activity[i].Text1);
VARSTRUCT_ENCODE_STRING(Ptr, Task->Activity[i].Text2);
VARSTRUCT_ENCODE_STRING(Ptr, Task->Activity[i].Text1.c_str());
VARSTRUCT_ENCODE_STRING(Ptr, Task->Activity[i].Text2.c_str());
thd2 = (TaskHistoryReplyData2_Struct*)Ptr;
thd2->GoalCount = Task->Activity[i].GoalCount;
thd2->unknown04 = 0xffffffff;
@ -2380,7 +2371,7 @@ void ClientTaskState::SendTaskHistory(Client *c, int TaskIndex) {
thd2->ZoneID = Task->Activity[i].ZoneID;
thd2->unknown16 = 0x00000000;
Ptr = (char *)thd2 + sizeof(TaskHistoryReplyData2_Struct);
VARSTRUCT_ENCODE_STRING(Ptr, Task->Activity[i].Text3);
VARSTRUCT_ENCODE_STRING(Ptr, Task->Activity[i].Text3.c_str());
}
}
@ -2562,9 +2553,9 @@ void TaskManager::SendTaskActivityLong(Client *c, int TaskID, int ActivityID, in
TaskActivityTrailer_Struct* tat;
long PacketLength = sizeof(TaskActivityHeader_Struct) + +sizeof(TaskActivityData1_Struct) + sizeof(TaskActivityTrailer_Struct);
PacketLength = PacketLength + strlen(Tasks[TaskID]->Activity[ActivityID].Text1) + 1 +
strlen(Tasks[TaskID]->Activity[ActivityID].Text2) + 1 +
strlen(Tasks[TaskID]->Activity[ActivityID].Text3) + 1;
PacketLength = PacketLength + Tasks[TaskID]->Activity[ActivityID].Text1.size() + 1 +
Tasks[TaskID]->Activity[ActivityID].Text2.size() + 1 +
Tasks[TaskID]->Activity[ActivityID].Text3.size() + 1;
auto outapp = new EQApplicationPacket(OP_TaskActivity, PacketLength);
@ -2587,10 +2578,10 @@ void TaskManager::SendTaskActivityLong(Client *c, int TaskID, int ActivityID, in
tah->unknown5 = 0x00000000;
// One of these unknown fields maybe related to the 'Use On' activity types
Ptr = (char *) tah + sizeof(TaskActivityHeader_Struct);
sprintf(Ptr, "%s", Tasks[TaskID]->Activity[ActivityID].Text1);
sprintf(Ptr, "%s", Tasks[TaskID]->Activity[ActivityID].Text1.c_str());
Ptr = Ptr + strlen(Ptr) + 1;
sprintf(Ptr, "%s", Tasks[TaskID]->Activity[ActivityID].Text2);
sprintf(Ptr, "%s", Tasks[TaskID]->Activity[ActivityID].Text2.c_str());
Ptr = Ptr + strlen(Ptr) + 1;
tad1 = (TaskActivityData1_Struct*)Ptr;
@ -2614,7 +2605,7 @@ void TaskManager::SendTaskActivityLong(Client *c, int TaskID, int ActivityID, in
tad1->unknown3 = 0x00000000;
Ptr = (char *) tad1 + sizeof(TaskActivityData1_Struct);
sprintf(Ptr, "%s", Tasks[TaskID]->Activity[ActivityID].Text3);
sprintf(Ptr, "%s", Tasks[TaskID]->Activity[ActivityID].Text3.c_str());
Ptr = Ptr + strlen(Ptr) + 1;
tat = (TaskActivityTrailer_Struct*)Ptr;
@ -2641,9 +2632,9 @@ void TaskManager::SendTaskActivityNew(Client *c, int TaskID, int ActivityID, int
String2Len = 4;
long PacketLength = 29 + 4 + 8 + 4 + 4 + 5;
PacketLength = PacketLength + strlen(Tasks[TaskID]->Activity[ActivityID].Text1) + 1 +
strlen(Tasks[TaskID]->Activity[ActivityID].Text2) + 1 +
strlen(Tasks[TaskID]->Activity[ActivityID].Text3) + 1 +
PacketLength = PacketLength + Tasks[TaskID]->Activity[ActivityID].Text1.size() + 1 +
Tasks[TaskID]->Activity[ActivityID].Text2.size() + 1 +
Tasks[TaskID]->Activity[ActivityID].Text3.size() + 1 +
((strlen(itoa(Tasks[TaskID]->Activity[ActivityID].ZoneID)) + 1) * 2) +
3 + String2Len;
@ -2666,10 +2657,10 @@ void TaskManager::SendTaskActivityNew(Client *c, int TaskID, int ActivityID, int
outapp->WriteUInt8(0); // unknown5
// One of these unknown fields maybe related to the 'Use On' activity types
outapp->WriteString(Tasks[TaskID]->Activity[ActivityID].Text1);
outapp->WriteString(Tasks[TaskID]->Activity[ActivityID].Text1.c_str());
outapp->WriteUInt32((strlen(Tasks[TaskID]->Activity[ActivityID].Text2) + 1)); // String Length - Add in null terminator
outapp->WriteString(Tasks[TaskID]->Activity[ActivityID].Text2);
outapp->WriteUInt32(Tasks[TaskID]->Activity[ActivityID].Text2.size() + 1); // String Length - Add in null terminator
outapp->WriteString(Tasks[TaskID]->Activity[ActivityID].Text2.c_str());
// Goal Count
if(Tasks[TaskID]->Activity[ActivityID].Type != ActivityGiveCash)
@ -2693,7 +2684,7 @@ void TaskManager::SendTaskActivityNew(Client *c, int TaskID, int ActivityID, int
outapp->WriteString(itoa(Tasks[TaskID]->Activity[ActivityID].ZoneID));
outapp->WriteUInt32(0); // unknown7
outapp->WriteString(Tasks[TaskID]->Activity[ActivityID].Text3);
outapp->WriteString(Tasks[TaskID]->Activity[ActivityID].Text3.c_str());
if(Tasks[TaskID]->Activity[ActivityID].Type != ActivityGiveCash)
outapp->WriteUInt32(c->GetTaskActivityDoneCount(ClientTaskIndex, ActivityID)); // DoneCount

View File

@ -24,6 +24,7 @@ Copyright (C) 2001-2004 EQEMu Development Team (http://eqemulator.net)
#include <list>
#include <vector>
#include <string>
#define MAXTASKS 10000
#define MAXTASKSETS 1000
@ -101,9 +102,9 @@ typedef enum { METHODSINGLEID = 0, METHODLIST = 1, METHODQUEST = 2 } TaskMethodT
struct ActivityInformation {
int StepNumber;
int Type;
char *Text1;
char *Text2;
char *Text3;
std::string Text1;
std::string Text2;
std::string Text3;
int GoalID;
TaskMethodType GoalMethod;
int GoalCount;