mirror of
https://github.com/EQEmu/Server.git
synced 2026-05-19 21:48:25 +00:00
Add Optional Enforce Task Level Requirement
Affected: quest::assigntask $client->AssignTask This is to allow those task level requirements in DB to be used, optionally. It defaults to do not enforce (translated: no change for current servers), but can be set with an additional flag to both commands (see below). The LUA bit was added thanks to help from demonstar55. quest::assigntask(703); # works quest::assigntask(703, 1); # denies user $client->AssignTask(701, $npc->GetID()); # works $client->AssignTask(701, $npc->GetID(), 1); # denies user
This commit is contained in:
+31
-1
@@ -895,6 +895,30 @@ bool TaskManager::AppropriateLevel(int TaskID, int PlayerLevel) {
|
||||
|
||||
}
|
||||
|
||||
int TaskManager::GetTaskMinLevel(int TaskID)
|
||||
{
|
||||
if (Tasks[TaskID]->MinLevel)
|
||||
{
|
||||
return Tasks[TaskID]->MinLevel;
|
||||
}
|
||||
else
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
int TaskManager::GetTaskMaxLevel(int TaskID)
|
||||
{
|
||||
if (Tasks[TaskID]->MaxLevel)
|
||||
{
|
||||
return Tasks[TaskID]->MaxLevel;
|
||||
}
|
||||
else
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
void TaskManager::TaskSetSelector(Client *c, ClientTaskState *state, Mob *mob, int TaskSetID) {
|
||||
|
||||
unsigned int EnabledTaskIndex = 0;
|
||||
@@ -2948,7 +2972,7 @@ void ClientTaskState::RemoveTask(Client *c, int sequenceNumber) {
|
||||
}
|
||||
|
||||
|
||||
void ClientTaskState::AcceptNewTask(Client *c, int TaskID, int NPCID) {
|
||||
void ClientTaskState::AcceptNewTask(Client *c, int TaskID, int NPCID, bool enforce_level_requirement) {
|
||||
|
||||
if(!taskmanager || TaskID<0 || TaskID>=MAXTASKS) {
|
||||
c->Message(13, "Task system not functioning, or TaskID %i out of range.", TaskID);
|
||||
@@ -2973,6 +2997,12 @@ void ClientTaskState::AcceptNewTask(Client *c, int TaskID, int NPCID) {
|
||||
}
|
||||
}
|
||||
|
||||
if (enforce_level_requirement && !taskmanager->AppropriateLevel(TaskID, c->GetLevel()))
|
||||
{
|
||||
c->Message(13, "You are outside the level range of this task.");
|
||||
return;
|
||||
}
|
||||
|
||||
if(!taskmanager->IsTaskRepeatable(TaskID) && IsTaskCompleted(TaskID)) return;
|
||||
|
||||
// We do it this way, because when the Client cancels a task, it retains the sequence number of the remaining
|
||||
|
||||
Reference in New Issue
Block a user