mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-11 21:01:29 +00:00
Updated $client->UpdateTaskActivity to have optional argument ignore_quest_update IE: Client::UpdateTaskActivity(THIS, TaskID, ActivityID, Count, [ignore_quest_update])
Also updated internal UpdateTaskActivity methods to optionally ignore quest based task updates to prevent feedback
This commit is contained in:
parent
33e88bffe9
commit
81dfffadf6
@ -2,6 +2,8 @@ EQEMu Changelog (Started on Sept 24, 2003 15:50)
|
||||
-------------------------------------------------------
|
||||
== 12/29/2014 ==
|
||||
Trevius: (RoF2) Identified a few Item Fields and resolved an issue with cloth armor not accepting certain augments that they should.
|
||||
Akkadius: Updated $client->UpdateTaskActivity to have optional argument ignore_quest_update IE: Client::UpdateTaskActivity(THIS, TaskID, ActivityID, Count, [ignore_quest_update])
|
||||
Akkadius: Also updated internal UpdateTaskActivity methods to optionally ignore quest based task updates to prevent feedback
|
||||
|
||||
== 12/28/2014 ==
|
||||
Uleat: Implemented class Client::TextLink as a replacement for the dozens of individual link formatters.
|
||||
|
||||
@ -987,7 +987,7 @@ public:
|
||||
inline bool IsTaskActive(int TaskID) { return (taskstate ? taskstate->IsTaskActive(TaskID) : false); }
|
||||
inline bool IsTaskActivityActive(int TaskID, int ActivityID) { return (taskstate ? taskstate->IsTaskActivityActive(TaskID, ActivityID) : false); }
|
||||
inline ActivityState GetTaskActivityState(int index, int ActivityID) { return (taskstate ? taskstate->GetTaskActivityState(index, ActivityID) : ActivityHidden); }
|
||||
inline void UpdateTaskActivity(int TaskID, int ActivityID, int Count) { if(taskstate) taskstate->UpdateTaskActivity(this, TaskID, ActivityID, Count); }
|
||||
inline void UpdateTaskActivity(int TaskID, int ActivityID, int Count, bool ignore_quest_update = false) { if (taskstate) taskstate->UpdateTaskActivity(this, TaskID, ActivityID, Count, ignore_quest_update); }
|
||||
inline void ResetTaskActivity(int TaskID, int ActivityID) { if(taskstate) taskstate->ResetTaskActivity(this, TaskID, ActivityID); }
|
||||
inline void UpdateTasksOnKill(int NPCTypeID) { if(taskstate) taskstate->UpdateTasksOnKill(this, NPCTypeID); }
|
||||
inline void UpdateTasksForItem(ActivityType Type, int ItemID, int Count=1) { if(taskstate) taskstate->UpdateTasksForItem(this, Type, ItemID, Count); }
|
||||
|
||||
@ -2277,18 +2277,20 @@ XS(XS__updatetaskactivity);
|
||||
XS(XS__updatetaskactivity)
|
||||
{
|
||||
dXSARGS;
|
||||
unsigned int task, activity;
|
||||
unsigned int task, activity, ignore_quest_update;
|
||||
int count = 1;
|
||||
ignore_quest_update = 0;
|
||||
if(items == 2) {
|
||||
task = (int)SvIV(ST(0));
|
||||
activity = (int)SvIV(ST(1));
|
||||
quest_manager.updatetaskactivity(task, activity, count);
|
||||
quest_manager.updatetaskactivity(task, activity, count, false);
|
||||
}
|
||||
else if(items == 3) {
|
||||
task = (int)SvIV(ST(0));
|
||||
activity = (int)SvIV(ST(1));
|
||||
count = (int)SvIV(ST(2));
|
||||
quest_manager.updatetaskactivity(task, activity, count);
|
||||
bool ignore_quest_update = (bool)SvTRUE(ST(3));
|
||||
quest_manager.updatetaskactivity(task, activity, count, ignore_quest_update);
|
||||
} else {
|
||||
Perl_croak(aTHX_ "Usage: updatetaskactivity(task, activity [,count])");
|
||||
}
|
||||
|
||||
@ -5057,13 +5057,14 @@ XS(XS_Client_UpdateTaskActivity); /* prototype to pass -Wmissing-prototypes */
|
||||
XS(XS_Client_UpdateTaskActivity)
|
||||
{
|
||||
dXSARGS;
|
||||
if (items != 4)
|
||||
Perl_croak(aTHX_ "Usage: Client::UpdateTaskActivity(THIS, TaskID, ActivityID, Count)");
|
||||
if (items <= 4)
|
||||
Perl_croak(aTHX_ "Usage: Client::UpdateTaskActivity(THIS, TaskID, ActivityID, Count, [ignore_quest_update])");
|
||||
{
|
||||
Client * THIS;
|
||||
int TaskID = (int)SvIV(ST(1));
|
||||
int ActivityID = (int)SvIV(ST(2));
|
||||
int Count = (int)SvUV(ST(3));
|
||||
bool ignore_quest_update = (bool)SvTRUE(ST(4));
|
||||
|
||||
if (sv_derived_from(ST(0), "Client")) {
|
||||
IV tmp = SvIV((SV*)SvRV(ST(0)));
|
||||
@ -5074,7 +5075,7 @@ XS(XS_Client_UpdateTaskActivity)
|
||||
if(THIS == nullptr)
|
||||
Perl_croak(aTHX_ "THIS is nullptr, avoiding crash.");
|
||||
|
||||
THIS->UpdateTaskActivity(TaskID, ActivityID, Count);
|
||||
THIS->UpdateTaskActivity(TaskID, ActivityID, Count, ignore_quest_update);
|
||||
}
|
||||
XSRETURN_EMPTY;
|
||||
}
|
||||
@ -6305,7 +6306,7 @@ XS(boot_Client)
|
||||
newXSproto(strcpy(buf, "ClearCompassMark"), XS_Client_ClearCompassMark, file, "$");
|
||||
newXSproto(strcpy(buf, "GetFreeSpellBookSlot"), XS_Client_GetFreeSpellBookSlot, file, "$;$");
|
||||
newXSproto(strcpy(buf, "GetSpellBookSlotBySpellID"), XS_Client_GetSpellBookSlotBySpellID, file, "$$");
|
||||
newXSproto(strcpy(buf, "UpdateTaskActivity"), XS_Client_UpdateTaskActivity, file, "$$$$");
|
||||
newXSproto(strcpy(buf, "UpdateTaskActivity"), XS_Client_UpdateTaskActivity, file, "$$$$$");
|
||||
newXSproto(strcpy(buf, "AssignTask"), XS_Client_AssignTask, file, "$$$");
|
||||
newXSproto(strcpy(buf, "FailTask"), XS_Client_FailTask, file, "$$");
|
||||
newXSproto(strcpy(buf, "IsTaskCompleted"), XS_Client_IsTaskCompleted, file, "$$");
|
||||
|
||||
@ -2108,11 +2108,12 @@ int QuestManager::gettaskactivitydonecount(int task, int activity) {
|
||||
|
||||
}
|
||||
|
||||
void QuestManager::updatetaskactivity(int task, int activity, int count) {
|
||||
void QuestManager::updatetaskactivity(int task, int activity, int count, bool ignore_quest_update /*= false*/)
|
||||
{
|
||||
QuestManagerCurrentQuestVars();
|
||||
|
||||
if(RuleB(TaskSystem, EnableTaskSystem) && initiator)
|
||||
initiator->UpdateTaskActivity(task, activity, count);
|
||||
initiator->UpdateTaskActivity(task, activity, count, ignore_quest_update);
|
||||
}
|
||||
|
||||
void QuestManager::resettaskactivity(int task, int activity) {
|
||||
|
||||
@ -183,7 +183,7 @@ public:
|
||||
bool istaskactive(int task);
|
||||
bool istaskactivityactive(int task, int activity);
|
||||
int gettaskactivitydonecount(int task, int activity);
|
||||
void updatetaskactivity(int task, int activity, int count);
|
||||
void updatetaskactivity(int task, int activity, int count, bool ignore_quest_update = false);
|
||||
void resettaskactivity(int task, int activity);
|
||||
void taskexploredarea(int exploreid);
|
||||
void assigntask(int taskid);
|
||||
|
||||
@ -1786,7 +1786,7 @@ void ClientTaskState::UpdateTasksOnTouch(Client *c, int ZoneID) {
|
||||
|
||||
return;
|
||||
}
|
||||
void ClientTaskState::IncrementDoneCount(Client *c, TaskInformation* Task, int TaskIndex, int ActivityID, int Count) {
|
||||
void ClientTaskState::IncrementDoneCount(Client *c, TaskInformation* Task, int TaskIndex, int ActivityID, int Count, bool ignore_quest_update) {
|
||||
|
||||
_log(TASKS__UPDATE, "IncrementDoneCount");
|
||||
|
||||
@ -1795,10 +1795,12 @@ void ClientTaskState::IncrementDoneCount(Client *c, TaskInformation* Task, int T
|
||||
if(ActiveTasks[TaskIndex].Activity[ActivityID].DoneCount > Task->Activity[ActivityID].GoalCount)
|
||||
ActiveTasks[TaskIndex].Activity[ActivityID].DoneCount = Task->Activity[ActivityID].GoalCount;
|
||||
|
||||
char buf[24];
|
||||
snprintf(buf, 23, "%d %d %d", ActiveTasks[TaskIndex].Activity[ActivityID].DoneCount, ActiveTasks[TaskIndex].Activity[ActivityID].ActivityID, ActiveTasks[TaskIndex].TaskID);
|
||||
buf[23] = '\0';
|
||||
parse->EventPlayer(EVENT_TASK_UPDATE, c, buf, 0);
|
||||
if (!ignore_quest_update){
|
||||
char buf[24];
|
||||
snprintf(buf, 23, "%d %d %d", ActiveTasks[TaskIndex].Activity[ActivityID].DoneCount, ActiveTasks[TaskIndex].Activity[ActivityID].ActivityID, ActiveTasks[TaskIndex].TaskID);
|
||||
buf[23] = '\0';
|
||||
parse->EventPlayer(EVENT_TASK_UPDATE, c, buf, 0);
|
||||
}
|
||||
|
||||
ActiveTasks[TaskIndex].Activity[ActivityID].Updated=true;
|
||||
// Have we reached the goal count for this activity ?
|
||||
@ -1821,11 +1823,12 @@ void ClientTaskState::IncrementDoneCount(Client *c, TaskInformation* Task, int T
|
||||
c->Message(0, "Your task '%s' has been updated.", Task->Title);
|
||||
|
||||
if(Task->Activity[ActivityID].GoalMethod != METHODQUEST) {
|
||||
char buf[24];
|
||||
snprintf(buf, 23, "%d %d", ActiveTasks[TaskIndex].TaskID, ActiveTasks[TaskIndex].Activity[ActivityID].ActivityID);
|
||||
buf[23] = '\0';
|
||||
parse->EventPlayer(EVENT_TASK_STAGE_COMPLETE, c, buf, 0);
|
||||
|
||||
if (!ignore_quest_update){
|
||||
char buf[24];
|
||||
snprintf(buf, 23, "%d %d", ActiveTasks[TaskIndex].TaskID, ActiveTasks[TaskIndex].Activity[ActivityID].ActivityID);
|
||||
buf[23] = '\0';
|
||||
parse->EventPlayer(EVENT_TASK_STAGE_COMPLETE, c, buf, 0);
|
||||
}
|
||||
/* QS: PlayerLogTaskUpdates :: Update */
|
||||
if (RuleB(QueryServ, PlayerLogTaskUpdates)){
|
||||
std::string event_desc = StringFormat("Task Stage Complete :: taskid:%i activityid:%i donecount:%i in zoneid:%i instid:%i", ActiveTasks[TaskIndex].TaskID, ActiveTasks[TaskIndex].Activity[ActivityID].ActivityID, ActiveTasks[TaskIndex].Activity[ActivityID].DoneCount, c->GetZoneID(), c->GetInstanceID());
|
||||
@ -2039,7 +2042,8 @@ bool ClientTaskState::IsTaskActivityActive(int TaskID, int ActivityID) {
|
||||
|
||||
}
|
||||
|
||||
void ClientTaskState::UpdateTaskActivity(Client *c, int TaskID, int ActivityID, int Count) {
|
||||
void ClientTaskState::UpdateTaskActivity(Client *c, int TaskID, int ActivityID, int Count, bool ignore_quest_update /*= false*/)
|
||||
{
|
||||
|
||||
_log(TASKS__UPDATE, "ClientTaskState UpdateTaskActivity(%i, %i, %i).", TaskID, ActivityID, Count);
|
||||
|
||||
@ -2069,7 +2073,7 @@ void ClientTaskState::UpdateTaskActivity(Client *c, int TaskID, int ActivityID,
|
||||
// The Activity is not currently active
|
||||
if(ActiveTasks[ActiveTaskIndex].Activity[ActivityID].State != ActivityActive) return;
|
||||
_log(TASKS__UPDATE, "Increment done count on UpdateTaskActivity");
|
||||
IncrementDoneCount(c, Task, ActiveTaskIndex, ActivityID, Count);
|
||||
IncrementDoneCount(c, Task, ActiveTaskIndex, ActivityID, Count, ignore_quest_update);
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -175,7 +175,7 @@ public:
|
||||
bool IsTaskActive(int TaskID);
|
||||
bool IsTaskActivityActive(int TaskID, int ActivityID);
|
||||
ActivityState GetTaskActivityState(int index, int ActivityID);
|
||||
void UpdateTaskActivity(Client *c, int TaskID, int ActivityID, int Count);
|
||||
void UpdateTaskActivity(Client *c, int TaskID, int ActivityID, int Count, bool ignore_quest_update = false);
|
||||
void ResetTaskActivity(Client *c, int TaskID, int ActivityID);
|
||||
void CancelTask(Client *c, int SequenceNumber, bool RemoveFromDB = true);
|
||||
void CancelAllTasks(Client *c);
|
||||
@ -204,7 +204,7 @@ public:
|
||||
|
||||
private:
|
||||
bool UnlockActivities(int CharID, int TaskIndex);
|
||||
void IncrementDoneCount(Client *c, TaskInformation *Task, int TaskIndex, int ActivityID, int Count=1);
|
||||
void IncrementDoneCount(Client *c, TaskInformation *Task, int TaskIndex, int ActivityID, int Count = 1, bool ignore_quest_update = false);
|
||||
int ActiveTaskCount;
|
||||
ClientTaskInformation ActiveTasks[MAXACTIVETASKS];
|
||||
std::vector<int>EnabledTasks;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user