mirror of
https://github.com/OpenFusionProject/OpenFusion.git
synced 2024-11-05 06:50:04 +00:00
Reject completion packets for missions that aren't in progress
Also reject players requesting more than 6 missions. This is just a minimal measure to prevent replaying mission completion packets. This part of the codebase will be largely refactored soon, so more through changes can wait.
This commit is contained in:
parent
ffe5947925
commit
f5a34b9a3d
@ -55,6 +55,7 @@ bool MissionManager::startTask(Player* plr, int TaskID) {
|
|||||||
|
|
||||||
if (i == ACTIVE_MISSION_COUNT - 1 && plr->tasks[i] != TaskID) {
|
if (i == ACTIVE_MISSION_COUNT - 1 && plr->tasks[i] != TaskID) {
|
||||||
std::cout << "[WARN] Player has more than 6 active missions!?" << std::endl;
|
std::cout << "[WARN] Player has more than 6 active missions!?" << std::endl;
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@ -164,6 +165,21 @@ bool MissionManager::endTask(CNSocket *sock, int32_t taskNum, int choice) {
|
|||||||
// ugly pointer/reference juggling for the sake of operator overloading...
|
// ugly pointer/reference juggling for the sake of operator overloading...
|
||||||
TaskData& task = *Tasks[taskNum];
|
TaskData& task = *Tasks[taskNum];
|
||||||
|
|
||||||
|
// update player
|
||||||
|
int i;
|
||||||
|
for (i = 0; i < ACTIVE_MISSION_COUNT; i++) {
|
||||||
|
if (plr->tasks[i] == taskNum) {
|
||||||
|
plr->tasks[i] = 0;
|
||||||
|
for (int j = 0; j < 3; j++) {
|
||||||
|
plr->RemainingNPCCount[i][j] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (i == ACTIVE_MISSION_COUNT - 1 && plr->tasks[i] != 0) {
|
||||||
|
std::cout << "[WARN] Player completed non-active mission!?" << std::endl;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
// mission rewards
|
// mission rewards
|
||||||
if (Rewards.find(taskNum) != Rewards.end()) {
|
if (Rewards.find(taskNum) != Rewards.end()) {
|
||||||
if (giveMissionReward(sock, taskNum, choice) == -1)
|
if (giveMissionReward(sock, taskNum, choice) == -1)
|
||||||
@ -188,20 +204,6 @@ bool MissionManager::endTask(CNSocket *sock, int32_t taskNum, int choice) {
|
|||||||
if (task["m_iSUItem"][i] != 0)
|
if (task["m_iSUItem"][i] != 0)
|
||||||
dropQuestItem(sock, taskNum, task["m_iSUInstancename"][i], task["m_iSUItem"][i], 0);
|
dropQuestItem(sock, taskNum, task["m_iSUInstancename"][i], task["m_iSUItem"][i], 0);
|
||||||
|
|
||||||
// update player
|
|
||||||
int i;
|
|
||||||
for (i = 0; i < ACTIVE_MISSION_COUNT; i++) {
|
|
||||||
if (plr->tasks[i] == taskNum) {
|
|
||||||
plr->tasks[i] = 0;
|
|
||||||
for (int j = 0; j < 3; j++) {
|
|
||||||
plr->RemainingNPCCount[i][j] = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (i == ACTIVE_MISSION_COUNT - 1 && plr->tasks[i] != 0) {
|
|
||||||
std::cout << "[WARN] Player completed non-active mission!?" << std::endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
// if it's the last task
|
// if it's the last task
|
||||||
if (task["m_iSUOutgoingTask"] == 0) {
|
if (task["m_iSUOutgoingTask"] == 0) {
|
||||||
// save completed mission on player
|
// save completed mission on player
|
||||||
|
Loading…
Reference in New Issue
Block a user