From dd3066849bfe2b17ecf561f8a706676fd06d8abb Mon Sep 17 00:00:00 2001 From: gsemaj Date: Mon, 26 Apr 2021 13:50:51 -0400 Subject: [PATCH] Make dynamic IDs count down from max instead of up from 0 --- src/Chunking.cpp | 6 +++--- src/CustomCommands.cpp | 4 ++-- src/NPCManager.cpp | 4 ++-- src/TableData.cpp | 32 ++++++++++++++++---------------- 4 files changed, 23 insertions(+), 23 deletions(-) diff --git a/src/Chunking.cpp b/src/Chunking.cpp index 1b67645..74fb873 100644 --- a/src/Chunking.cpp +++ b/src/Chunking.cpp @@ -275,7 +275,7 @@ void Chunking::createInstance(uint64_t instanceID) { continue; // follower; don't copy individually Mob* newMob = new Mob(baseNPC->x, baseNPC->y, baseNPC->z, baseNPC->appearanceData.iAngle, - instanceID, baseNPC->appearanceData.iNPCType, NPCManager::NPCData[baseNPC->appearanceData.iNPCType], NPCManager::nextId++); + instanceID, baseNPC->appearanceData.iNPCType, NPCManager::NPCData[baseNPC->appearanceData.iNPCType], NPCManager::nextId--); NPCManager::NPCs[newMob->appearanceData.iNPC_ID] = newMob; // if in a group, copy over group members as well @@ -284,7 +284,7 @@ void Chunking::createInstance(uint64_t instanceID) { Mob* mobData = (Mob*)baseNPC; for (int i = 0; i < 4; i++) { if (mobData->groupMember[i] != 0) { - int followerID = NPCManager::nextId++; // id for follower + int followerID = NPCManager::nextId--; // id for follower BaseNPC* baseFollower = NPCManager::NPCs[mobData->groupMember[i]]; // follower from template // new follower instance Mob* newMobFollower = new Mob(baseFollower->x, baseFollower->y, baseFollower->z, baseFollower->appearanceData.iAngle, @@ -306,7 +306,7 @@ void Chunking::createInstance(uint64_t instanceID) { instanceID, baseNPC->appearanceData.iAngle); } else { BaseNPC* newNPC = new BaseNPC(baseNPC->x, baseNPC->y, baseNPC->z, baseNPC->appearanceData.iAngle, - instanceID, baseNPC->appearanceData.iNPCType, NPCManager::nextId++); + instanceID, baseNPC->appearanceData.iNPCType, NPCManager::nextId--); NPCManager::NPCs[newNPC->appearanceData.iNPC_ID] = newNPC; NPCManager::updateNPCPosition(newNPC->appearanceData.iNPC_ID, baseNPC->x, baseNPC->y, baseNPC->z, instanceID, baseNPC->appearanceData.iAngle); diff --git a/src/CustomCommands.cpp b/src/CustomCommands.cpp index fe64a59..2a4da3c 100644 --- a/src/CustomCommands.cpp +++ b/src/CustomCommands.cpp @@ -512,8 +512,8 @@ static void eggCommand(std::string full, std::vector& args, CNSocke return; } - assert(NPCManager::nextId < INT32_MAX); - int id = NPCManager::nextId++; + //assert(NPCManager::nextId < INT32_MAX); + int id = NPCManager::nextId--; Player* plr = PlayerManager::getPlayer(sock); diff --git a/src/NPCManager.cpp b/src/NPCManager.cpp index e63aa2e..50b84fc 100644 --- a/src/NPCManager.cpp +++ b/src/NPCManager.cpp @@ -124,8 +124,8 @@ BaseNPC *NPCManager::summonNPC(int x, int y, int z, uint64_t instance, int type, uint64_t inst = baseInstance ? MAPNUM(instance) : instance; #define EXTRA_HEIGHT 0 - assert(nextId < INT32_MAX); - int id = nextId++; + //assert(nextId < INT32_MAX); + int id = nextId--; int team = NPCData[type]["m_iTeam"]; BaseNPC *npc = nullptr; diff --git a/src/TableData.cpp b/src/TableData.cpp index 884be73..34111ef 100644 --- a/src/TableData.cpp +++ b/src/TableData.cpp @@ -139,7 +139,7 @@ static void loadPaths(int* nextId) { if (passedDistance >= SLIDER_GAP_SIZE) { // space them out uniformaly passedDistance -= SLIDER_GAP_SIZE; // step down // spawn a slider - Bus* slider = new Bus(point.x, point.y, point.z, 0, INSTANCE_OVERWORLD, 1, (*nextId)++); + Bus* slider = new Bus(point.x, point.y, point.z, 0, INSTANCE_OVERWORLD, 1, (*nextId)--); NPCManager::NPCs[slider->appearanceData.iNPC_ID] = slider; NPCManager::updateNPCPosition(slider->appearanceData.iNPC_ID, slider->x, slider->y, slider->z, INSTANCE_OVERWORLD, 0); Transport::NPCQueues[slider->appearanceData.iNPC_ID] = route; @@ -484,7 +484,7 @@ static void loadEggs(int32_t* nextId) { int eggCount = 0; for (auto _egg = eggs.begin(); _egg != eggs.end(); _egg++) { auto egg = _egg.value(); - int id = (*nextId)++; + int id = (*nextId)--; uint64_t instanceID = egg.find("iMapNum") == egg.end() ? INSTANCE_OVERWORLD : (int)egg["iMapNum"]; Egg* addEgg = new Egg((int)egg["iX"], (int)egg["iY"], (int)egg["iZ"], instanceID, (int)egg["iType"], id, false); @@ -560,7 +560,7 @@ static void loadGruntwork(int32_t *nextId) { for (auto _mob = mobs.begin(); _mob != mobs.end(); _mob++) { auto mob = _mob.value(); BaseNPC *npc; - int id = (*nextId)++; + int id = (*nextId)--; uint64_t instanceID = mob.find("iMapNum") == mob.end() ? INSTANCE_OVERWORLD : (int)mob["iMapNum"]; if (NPCManager::NPCData[(int)mob["iNPCType"]]["m_iTeam"] == 2) { @@ -595,7 +595,7 @@ static void loadGruntwork(int32_t *nextId) { tmp->groupLeader = *nextId; - (*nextId)++; + (*nextId)--; auto followers = leader["aFollowers"]; if (followers.size() < 5) { @@ -616,7 +616,7 @@ static void loadGruntwork(int32_t *nextId) { tmpFol->groupLeader = tmp->appearanceData.iNPC_ID; tmp->groupMember[followerCount++] = *nextId; - (*nextId)++; + (*nextId)--; } } else { @@ -629,7 +629,7 @@ static void loadGruntwork(int32_t *nextId) { auto eggs = gruntwork["eggs"]; for (auto _egg = eggs.begin(); _egg != eggs.end(); _egg++) { auto egg = _egg.value(); - int id = (*nextId)++; + int id = (*nextId)--; uint64_t instanceID = egg.find("iMapNum") == egg.end() ? INSTANCE_OVERWORLD : (int)egg["iMapNum"]; Egg* addEgg = new Egg((int)egg["iX"], (int)egg["iY"], (int)egg["iZ"], instanceID, (int)egg["iType"], id, false); @@ -648,7 +648,7 @@ static void loadGruntwork(int32_t *nextId) { } void TableData::init() { - int32_t nextId = 0; + int32_t nextId = INT32_MAX; // next dynamic ID to hand out // load NPCs from NPC.json try { @@ -664,7 +664,7 @@ void TableData::init() { #ifdef ACADEMY // do not spawn NPCs in the future if (npc["iX"] > 512000 && npc["iY"] < 256000) { - nextId++; + nextId--; continue; } #endif @@ -672,7 +672,7 @@ void TableData::init() { NPCManager::NPCs[nextId] = tmp; NPCManager::updateNPCPosition(nextId, npc["iX"], npc["iY"], npc["iZ"], instanceID, npc["iAngle"]); - nextId++; + nextId--; if (npc["iNPCType"] == 641 || npc["iNPCType"] == 642) NPCManager::RespawnPoints.push_back({ npc["iX"], npc["iY"], ((int)npc["iZ"]) + RESURRECT_HEIGHT, instanceID }); @@ -891,7 +891,7 @@ void TableData::init() { #ifdef ACADEMY // do not spawn NPCs in the future if (npc["iX"] > 512000 && npc["iY"] < 256000) { - nextId++; + nextId--; continue; } #endif @@ -901,7 +901,7 @@ void TableData::init() { NPCManager::NPCs[nextId] = tmp; NPCManager::updateNPCPosition(nextId, npc["iX"], npc["iY"], npc["iZ"], instanceID, npc["iAngle"]); - nextId++; + nextId--; } // mob groups @@ -915,8 +915,8 @@ void TableData::init() { #ifdef ACADEMY // do not spawn NPCs in the future if (leader["iX"] > 512000 && leader["iY"] < 256000) { - nextId++; - nextId += followers.size(); + nextId--; + nextId -= followers.size(); continue; } #endif @@ -928,7 +928,7 @@ void TableData::init() { tmp->groupLeader = nextId; - nextId++; + nextId--; if (followers.size() < 5) { int followerCount = 0; @@ -945,7 +945,7 @@ void TableData::init() { tmpFol->groupLeader = tmp->appearanceData.iNPC_ID; tmp->groupMember[followerCount++] = nextId; - nextId++; + nextId--; } } else { std::cout << "[WARN] Mob group leader with ID " << nextId << " has too many followers (" << followers.size() << ")\n"; @@ -980,7 +980,7 @@ void TableData::init() { NPCManager::NPCs[nextId] = new BaseNPC(npc["iX"], npc["iY"], npc["iZ"], npc["iAngle"], instanceID, npc["iNPCType"], nextId); NPCManager::updateNPCPosition(nextId, npc["iX"], npc["iY"], npc["iZ"], instanceID, npc["iAngle"]); - nextId++; + nextId--; if (npc["iNPCType"] == 641 || npc["iNPCType"] == 642) NPCManager::RespawnPoints.push_back({ npc["iX"], npc["iY"], ((int)npc["iZ"]) + RESURRECT_HEIGHT, instanceID });