mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-12 09:31:30 +00:00
LoadTasks converted to QueryDatabase
This commit is contained in:
parent
be7d2e9457
commit
48299b6024
264
zone/tasks.cpp
264
zone/tasks.cpp
@ -117,203 +117,177 @@ void TaskManager::ReloadGoalLists() {
|
|||||||
_log(TASKS__GLOBALLOAD,"TaskManager::LoadTasks LoadLists failed");
|
_log(TASKS__GLOBALLOAD,"TaskManager::LoadTasks LoadLists failed");
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TaskManager::LoadTasks(int SingleTask) {
|
bool TaskManager::LoadTasks(int singleTask) {
|
||||||
|
|
||||||
// If TaskID !=0, then just load the task specified.
|
// If TaskID !=0, then just load the task specified.
|
||||||
|
|
||||||
const char *AllTaskQuery = "SELECT `id`, `duration`, `title`, `description`, `reward`, `rewardid`,"
|
|
||||||
"`cashreward`, `xpreward`, `rewardmethod`, `startzone`, `minlevel`, `maxlevel`, `repeatable` "
|
|
||||||
"from `tasks` WHERE `id` < %i";
|
|
||||||
|
|
||||||
const char *SingleTaskQuery = "SELECT `id`, `duration`, `title`, `description`, `reward`, `rewardid`,"
|
|
||||||
"`cashreward`, `xpreward`, `rewardmethod`, `startzone`, `minlevel`, `maxlevel`, `repeatable` "
|
|
||||||
"from `tasks` WHERE `id` = %i";
|
|
||||||
|
|
||||||
const char *AllActivityQuery = "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";
|
|
||||||
|
|
||||||
const char *SingleTaskActivityQuery = "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";
|
|
||||||
|
|
||||||
const char *ERR_TASK_OOR = "[TASKS]Task ID %i out of range while loading tasks from database";
|
|
||||||
|
|
||||||
const char *ERR_TASK_OR_ACTIVITY_OOR = "[TASKS]Task or Activity ID (%i, %i) out of range while loading"
|
|
||||||
"activities from database";
|
|
||||||
|
|
||||||
const char *ERR_NOTASK = "[TASKS]Activity for non-existent task (%i, %i) while loading activities from database";
|
|
||||||
|
|
||||||
const char *ERR_SEQERR = "[TASKS]Activities for Task %i are not sequential starting at 0. Not loading task.";
|
|
||||||
|
|
||||||
const char *ERR_MYSQLERROR = "[TASKS]Error in TaskManager::LoadTasks: %s";
|
|
||||||
|
|
||||||
char errbuf[MYSQL_ERRMSG_SIZE];
|
|
||||||
char* query = 0;
|
|
||||||
int QueryLength = 0;
|
|
||||||
MYSQL_RES *result;
|
|
||||||
MYSQL_ROW row;
|
|
||||||
|
|
||||||
_log(TASKS__GLOBALLOAD, "TaskManager::LoadTasks Called");
|
_log(TASKS__GLOBALLOAD, "TaskManager::LoadTasks Called");
|
||||||
|
|
||||||
if(SingleTask == 0) {
|
std::string query;
|
||||||
|
if(singleTask == 0) {
|
||||||
if(!GoalListManager.LoadLists())
|
if(!GoalListManager.LoadLists())
|
||||||
_log(TASKS__GLOBALLOAD,"TaskManager::LoadTasks LoadLists failed");
|
_log(TASKS__GLOBALLOAD,"TaskManager::LoadTasks LoadLists failed");
|
||||||
|
|
||||||
if(!LoadTaskSets())
|
if(!LoadTaskSets())
|
||||||
_log(TASKS__GLOBALLOAD,"TaskManager::LoadTasks LoadTaskSets failed");
|
_log(TASKS__GLOBALLOAD,"TaskManager::LoadTasks LoadTaskSets failed");
|
||||||
|
|
||||||
QueryLength = MakeAnyLenString(&query,AllTaskQuery,MAXTASKS);
|
query = StringFormat("SELECT `id`, `duration`, `title`, `description`, `reward`, "
|
||||||
|
"`rewardid`, `cashreward`, `xpreward`, `rewardmethod`, "
|
||||||
|
"`startzone`, `minlevel`, `maxlevel`, `repeatable` "
|
||||||
|
"FROM `tasks` WHERE `id` < %i", MAXTASKS);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
QueryLength = MakeAnyLenString(&query,SingleTaskQuery,SingleTask);
|
query = StringFormat("SELECT `id`, `duration`, `title`, `description`, `reward`, "
|
||||||
|
"`rewardid`, `cashreward`, `xpreward`, `rewardmethod`, "
|
||||||
|
"`startzone`, `minlevel`, `maxlevel`, `repeatable` "
|
||||||
|
"FROM `tasks` WHERE `id` = %i",singleTask);
|
||||||
|
|
||||||
if(database.RunQuery(query,QueryLength,errbuf,&result)) {
|
const char *ERR_MYSQLERROR = "[TASKS]Error in TaskManager::LoadTasks: %s";
|
||||||
|
|
||||||
while((row = mysql_fetch_row(result))) {
|
auto results = database.QueryDatabase(query);
|
||||||
int TaskID = atoi(row[0]);
|
if (!results.Success()) {
|
||||||
if((TaskID <= 0) || (TaskID >= MAXTASKS)) {
|
LogFile->write(EQEMuLog::Error, ERR_MYSQLERROR, results.ErrorMessage().c_str());
|
||||||
// This shouldn't happen, as the SELECT is bounded by MAXTASKS
|
|
||||||
LogFile->write(EQEMuLog::Error, ERR_TASK_OOR, TaskID);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
Tasks[TaskID] = new TaskInformation;
|
|
||||||
Tasks[TaskID]->Duration = atoi(row[1]);
|
|
||||||
Tasks[TaskID]->Title = new char[strlen(row[2]) + 1];
|
|
||||||
strcpy(Tasks[TaskID]->Title, row[2]);
|
|
||||||
Tasks[TaskID]->Description = new char[strlen(row[3]) + 1];
|
|
||||||
strcpy(Tasks[TaskID]->Description, row[3]);
|
|
||||||
Tasks[TaskID]->Reward = new char[strlen(row[4]) + 1];
|
|
||||||
strcpy(Tasks[TaskID]->Reward, row[4]);
|
|
||||||
Tasks[TaskID]->RewardID = atoi(row[5]);
|
|
||||||
Tasks[TaskID]->CashReward = atoi(row[6]);
|
|
||||||
Tasks[TaskID]->XPReward = atoi(row[7]);
|
|
||||||
Tasks[TaskID]->RewardMethod = (TaskMethodType)atoi(row[8]);
|
|
||||||
Tasks[TaskID]->StartZone = atoi(row[9]);
|
|
||||||
Tasks[TaskID]->MinLevel = atoi(row[10]);
|
|
||||||
Tasks[TaskID]->MaxLevel = atoi(row[11]);
|
|
||||||
Tasks[TaskID]->Repeatable = atoi(row[12]);
|
|
||||||
Tasks[TaskID]->ActivityCount = 0;
|
|
||||||
Tasks[TaskID]->SequenceMode = ActivitiesSequential;
|
|
||||||
Tasks[TaskID]->LastStep = 0;
|
|
||||||
|
|
||||||
_log(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");
|
|
||||||
_log(TASKS__GLOBALLOAD,"Title: %s ", Tasks[TaskID]->Title);
|
|
||||||
//_log(TASKS__GLOBALLOAD,"Description: %s ", Tasks[TaskID]->Description);
|
|
||||||
|
|
||||||
}
|
|
||||||
mysql_free_result(result);
|
|
||||||
safe_delete_array(query);
|
|
||||||
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
LogFile->write(EQEMuLog::Error, ERR_MYSQLERROR, errbuf);
|
|
||||||
safe_delete_array(query);
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(SingleTask==0)
|
for(auto row = results.begin(); row != results.end(); ++row) {
|
||||||
QueryLength = MakeAnyLenString(&query,AllActivityQuery,MAXTASKS, MAXACTIVITIESPERTASK);
|
int taskID = atoi(row[0]);
|
||||||
else
|
|
||||||
QueryLength = MakeAnyLenString(&query,SingleTaskActivityQuery, SingleTask, MAXACTIVITIESPERTASK);
|
|
||||||
|
|
||||||
if(database.RunQuery(query,QueryLength, errbuf, &result)) {
|
if((taskID <= 0) || (taskID >= MAXTASKS)) {
|
||||||
|
|
||||||
while((row = mysql_fetch_row(result))) {
|
|
||||||
int TaskID = atoi(row[0]);
|
|
||||||
int Step = atoi(row[1]);
|
|
||||||
|
|
||||||
int ActivityID = atoi(row[2]);
|
|
||||||
|
|
||||||
if((TaskID <= 0) || (TaskID >= MAXTASKS) || (ActivityID < 0) || (ActivityID >= MAXACTIVITIESPERTASK)) {
|
|
||||||
// This shouldn't happen, as the SELECT is bounded by MAXTASKS
|
// This shouldn't happen, as the SELECT is bounded by MAXTASKS
|
||||||
LogFile->write(EQEMuLog::Error, ERR_TASK_OR_ACTIVITY_OOR, TaskID, ActivityID);
|
LogFile->write(EQEMuLog::Error, "[TASKS]Task ID %i out of range while loading tasks from database", taskID);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if(Tasks[TaskID]==nullptr) {
|
|
||||||
LogFile->write(EQEMuLog::Error, ERR_NOTASK, TaskID, ActivityID);
|
Tasks[taskID] = new TaskInformation;
|
||||||
|
Tasks[taskID]->Duration = atoi(row[1]);
|
||||||
|
Tasks[taskID]->Title = new char[strlen(row[2]) + 1];
|
||||||
|
strcpy(Tasks[taskID]->Title, row[2]);
|
||||||
|
Tasks[taskID]->Description = new char[strlen(row[3]) + 1];
|
||||||
|
strcpy(Tasks[taskID]->Description, row[3]);
|
||||||
|
Tasks[taskID]->Reward = new char[strlen(row[4]) + 1];
|
||||||
|
strcpy(Tasks[taskID]->Reward, row[4]);
|
||||||
|
Tasks[taskID]->RewardID = atoi(row[5]);
|
||||||
|
Tasks[taskID]->CashReward = atoi(row[6]);
|
||||||
|
Tasks[taskID]->XPReward = atoi(row[7]);
|
||||||
|
Tasks[taskID]->RewardMethod = (TaskMethodType)atoi(row[8]);
|
||||||
|
Tasks[taskID]->StartZone = atoi(row[9]);
|
||||||
|
Tasks[taskID]->MinLevel = atoi(row[10]);
|
||||||
|
Tasks[taskID]->MaxLevel = atoi(row[11]);
|
||||||
|
Tasks[taskID]->Repeatable = atoi(row[12]);
|
||||||
|
Tasks[taskID]->ActivityCount = 0;
|
||||||
|
Tasks[taskID]->SequenceMode = ActivitiesSequential;
|
||||||
|
Tasks[taskID]->LastStep = 0;
|
||||||
|
|
||||||
|
_log(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");
|
||||||
|
_log(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);
|
||||||
|
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);
|
||||||
|
results = database.QueryDatabase(query);
|
||||||
|
if (!results.Success()) {
|
||||||
|
LogFile->write(EQEMuLog::Error, ERR_MYSQLERROR, results.ErrorMessage().c_str());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
for(auto row = results.begin(); row != results.end(); ++row) {
|
||||||
|
int taskID = atoi(row[0]);
|
||||||
|
int step = atoi(row[1]);
|
||||||
|
|
||||||
|
int activityID = atoi(row[2]);
|
||||||
|
|
||||||
|
if((taskID <= 0) || (taskID >= MAXTASKS) || (activityID < 0) || (activityID >= MAXACTIVITIESPERTASK)) {
|
||||||
|
// This shouldn't happen, as the SELECT is bounded by MAXTASKS
|
||||||
|
LogFile->write(EQEMuLog::Error, "[TASKS]Task or Activity ID (%i, %i) out of range while loading "
|
||||||
|
"activities from database", taskID, activityID);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
Tasks[TaskID]->Activity[Tasks[TaskID]->ActivityCount].StepNumber = Step;
|
|
||||||
|
|
||||||
if(Step != 0)
|
if(Tasks[taskID]==nullptr) {
|
||||||
Tasks[TaskID]->SequenceMode = ActivitiesStepped;
|
LogFile->write(EQEMuLog::Error, "[TASKS]Activity for non-existent task (%i, %i) while loading activities from database", taskID, activityID);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if(Step >Tasks[TaskID]->LastStep) Tasks[TaskID]->LastStep = Step;
|
Tasks[taskID]->Activity[Tasks[taskID]->ActivityCount].StepNumber = step;
|
||||||
|
|
||||||
|
if(step != 0)
|
||||||
|
Tasks[taskID]->SequenceMode = ActivitiesStepped;
|
||||||
|
|
||||||
|
if(step >Tasks[taskID]->LastStep)
|
||||||
|
Tasks[taskID]->LastStep = step;
|
||||||
|
|
||||||
// Task Activities MUST be numbered sequentially from 0. If not, log an error
|
// Task Activities MUST be numbered sequentially from 0. If not, log an error
|
||||||
// and set the task to nullptr. Subsequent activities for this task will raise
|
// and set the task to nullptr. Subsequent activities for this task will raise
|
||||||
// ERR_NOTASK errors.
|
// ERR_NOTASK errors.
|
||||||
// Change to (ActivityID != (Tasks[TaskID]->ActivityCount + 1)) to index from 1
|
// Change to (activityID != (Tasks[taskID]->ActivityCount + 1)) to index from 1
|
||||||
if(ActivityID != Tasks[TaskID]->ActivityCount) {
|
if(activityID != Tasks[taskID]->ActivityCount) {
|
||||||
LogFile->write(EQEMuLog::Error, ERR_SEQERR, TaskID, ActivityID);
|
LogFile->write(EQEMuLog::Error, "[TASKS]Activities for Task %i are not sequential starting at 0. Not loading task.", taskID, activityID);
|
||||||
Tasks[TaskID] = nullptr;
|
Tasks[taskID] = nullptr;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
Tasks[TaskID]->Activity[Tasks[TaskID]->ActivityCount].Type = atoi(row[3]);
|
Tasks[taskID]->Activity[Tasks[taskID]->ActivityCount].Type = atoi(row[3]);
|
||||||
|
|
||||||
Tasks[TaskID]->Activity[Tasks[TaskID]->ActivityCount].Text1 = new char[strlen(row[4]) + 1];
|
Tasks[taskID]->Activity[Tasks[taskID]->ActivityCount].Text1 = new char[strlen(row[4]) + 1];
|
||||||
|
|
||||||
if(strlen(row[4])>0)
|
if(strlen(row[4])>0)
|
||||||
strcpy(Tasks[TaskID]->Activity[Tasks[TaskID]->ActivityCount].Text1, row[4]);
|
strcpy(Tasks[taskID]->Activity[Tasks[taskID]->ActivityCount].Text1, row[4]);
|
||||||
else
|
else
|
||||||
Tasks[TaskID]->Activity[Tasks[TaskID]->ActivityCount].Text1[0]=0;
|
Tasks[taskID]->Activity[Tasks[taskID]->ActivityCount].Text1[0]=0;
|
||||||
|
|
||||||
Tasks[TaskID]->Activity[Tasks[TaskID]->ActivityCount].Text2 = new char[strlen(row[5]) + 1];
|
Tasks[taskID]->Activity[Tasks[taskID]->ActivityCount].Text2 = new char[strlen(row[5]) + 1];
|
||||||
|
|
||||||
if(strlen(row[5])>0)
|
if(strlen(row[5])>0)
|
||||||
strcpy(Tasks[TaskID]->Activity[Tasks[TaskID]->ActivityCount].Text2, row[5]);
|
strcpy(Tasks[taskID]->Activity[Tasks[taskID]->ActivityCount].Text2, row[5]);
|
||||||
else
|
else
|
||||||
Tasks[TaskID]->Activity[Tasks[TaskID]->ActivityCount].Text2[0]=0;
|
Tasks[taskID]->Activity[Tasks[taskID]->ActivityCount].Text2[0]=0;
|
||||||
|
|
||||||
Tasks[TaskID]->Activity[Tasks[TaskID]->ActivityCount].Text3 = new char[strlen(row[6]) + 1];
|
Tasks[taskID]->Activity[Tasks[taskID]->ActivityCount].Text3 = new char[strlen(row[6]) + 1];
|
||||||
|
|
||||||
if(strlen(row[6])>0)
|
if(strlen(row[6])>0)
|
||||||
strcpy(Tasks[TaskID]->Activity[Tasks[TaskID]->ActivityCount].Text3, row[6]);
|
strcpy(Tasks[taskID]->Activity[Tasks[taskID]->ActivityCount].Text3, row[6]);
|
||||||
else
|
else
|
||||||
Tasks[TaskID]->Activity[Tasks[TaskID]->ActivityCount].Text3[0]=0;
|
Tasks[taskID]->Activity[Tasks[taskID]->ActivityCount].Text3[0]=0;
|
||||||
|
|
||||||
Tasks[TaskID]->Activity[Tasks[TaskID]->ActivityCount].GoalID = atoi(row[7]);
|
Tasks[taskID]->Activity[Tasks[taskID]->ActivityCount].GoalID = atoi(row[7]);
|
||||||
Tasks[TaskID]->Activity[Tasks[TaskID]->ActivityCount].GoalMethod = (TaskMethodType)atoi(row[8]);
|
Tasks[taskID]->Activity[Tasks[taskID]->ActivityCount].GoalMethod = (TaskMethodType)atoi(row[8]);
|
||||||
Tasks[TaskID]->Activity[Tasks[TaskID]->ActivityCount].GoalCount = atoi(row[9]);
|
Tasks[taskID]->Activity[Tasks[taskID]->ActivityCount].GoalCount = atoi(row[9]);
|
||||||
Tasks[TaskID]->Activity[Tasks[TaskID]->ActivityCount].DeliverToNPC = atoi(row[10]);
|
Tasks[taskID]->Activity[Tasks[taskID]->ActivityCount].DeliverToNPC = atoi(row[10]);
|
||||||
Tasks[TaskID]->Activity[Tasks[TaskID]->ActivityCount].ZoneID = atoi(row[11]);
|
Tasks[taskID]->Activity[Tasks[taskID]->ActivityCount].ZoneID = atoi(row[11]);
|
||||||
Tasks[TaskID]->Activity[Tasks[TaskID]->ActivityCount].Optional = atoi(row[12]);
|
Tasks[taskID]->Activity[Tasks[taskID]->ActivityCount].Optional = atoi(row[12]);
|
||||||
|
|
||||||
_log(TASKS__GLOBALLOAD, "Activity Slot %2i: ID %i for Task %5i. Type: %3i, GoalID: %8i, "
|
_log(TASKS__GLOBALLOAD, "Activity Slot %2i: ID %i for Task %5i. Type: %3i, GoalID: %8i, "
|
||||||
"GoalMethod: %i, GoalCount: %3i, ZoneID:%3i",
|
"GoalMethod: %i, GoalCount: %3i, ZoneID:%3i",
|
||||||
Tasks[TaskID]->ActivityCount, ActivityID, TaskID,
|
Tasks[taskID]->ActivityCount, activityID, taskID,
|
||||||
Tasks[TaskID]->Activity[Tasks[TaskID]->ActivityCount].Type,
|
Tasks[taskID]->Activity[Tasks[taskID]->ActivityCount].Type,
|
||||||
Tasks[TaskID]->Activity[Tasks[TaskID]->ActivityCount].GoalID,
|
Tasks[taskID]->Activity[Tasks[taskID]->ActivityCount].GoalID,
|
||||||
Tasks[TaskID]->Activity[Tasks[TaskID]->ActivityCount].GoalMethod,
|
Tasks[taskID]->Activity[Tasks[taskID]->ActivityCount].GoalMethod,
|
||||||
Tasks[TaskID]->Activity[Tasks[TaskID]->ActivityCount].GoalCount,
|
Tasks[taskID]->Activity[Tasks[taskID]->ActivityCount].GoalCount,
|
||||||
Tasks[TaskID]->Activity[Tasks[TaskID]->ActivityCount].ZoneID);
|
Tasks[taskID]->Activity[Tasks[taskID]->ActivityCount].ZoneID);
|
||||||
|
|
||||||
_log(TASKS__GLOBALLOAD, " Text1: %s",
|
_log(TASKS__GLOBALLOAD, " Text1: %s", Tasks[taskID]->Activity[Tasks[taskID]->ActivityCount].Text1);
|
||||||
Tasks[TaskID]->Activity[Tasks[TaskID]->ActivityCount].Text1);
|
_log(TASKS__GLOBALLOAD, " Text2: %s", Tasks[taskID]->Activity[Tasks[taskID]->ActivityCount].Text2);
|
||||||
_log(TASKS__GLOBALLOAD, " Text2: %s",
|
_log(TASKS__GLOBALLOAD, " Text3: %s", Tasks[taskID]->Activity[Tasks[taskID]->ActivityCount].Text3);
|
||||||
Tasks[TaskID]->Activity[Tasks[TaskID]->ActivityCount].Text2);
|
|
||||||
_log(TASKS__GLOBALLOAD, " Text3: %s",
|
|
||||||
Tasks[TaskID]->Activity[Tasks[TaskID]->ActivityCount].Text3);
|
|
||||||
|
|
||||||
Tasks[TaskID]->ActivityCount++;
|
|
||||||
|
|
||||||
|
Tasks[taskID]->ActivityCount++;
|
||||||
}
|
}
|
||||||
mysql_free_result(result);
|
|
||||||
safe_delete_array(query);
|
|
||||||
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
LogFile->write(EQEMuLog::Error, ERR_MYSQLERROR, errbuf);
|
|
||||||
safe_delete_array(query);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user