Added /toggleai command for easier mob placement and testing.

This commit is contained in:
dongresource 2020-10-07 20:38:32 +02:00
parent 7a83a3b45c
commit 0d0332e551
3 changed files with 21 additions and 1 deletions

View File

@ -266,6 +266,19 @@ void unsummonWCommand(std::string full, std::vector<std::string>& args, CNSocket
NPCManager::destroyNPC(npc->appearanceData.iNPC_ID); NPCManager::destroyNPC(npc->appearanceData.iNPC_ID);
} }
void toggleAiCommand(std::string full, std::vector<std::string>& args, CNSocket* sock) {
MobManager::simulateMobs = !MobManager::simulateMobs;
if (MobManager::simulateMobs)
return;
// return all mobs to their spawn points
for (auto& pair : MobManager::Mobs) {
pair.second->state = MobState::RETREAT;
pair.second->target = nullptr;
}
}
void npcRotateCommand(std::string full, std::vector<std::string>& args, CNSocket* sock) { void npcRotateCommand(std::string full, std::vector<std::string>& args, CNSocket* sock) {
PlayerView& plrv = PlayerManager::players[sock]; PlayerView& plrv = PlayerManager::players[sock];
Player* plr = plrv.plr; Player* plr = plrv.plr;
@ -324,6 +337,7 @@ void ChatManager::init() {
registerCommand("npcr", 30, npcRotateCommand); registerCommand("npcr", 30, npcRotateCommand);
registerCommand("summonW", 30, summonWCommand); registerCommand("summonW", 30, summonWCommand);
registerCommand("unsummonW", 30, unsummonWCommand); registerCommand("unsummonW", 30, unsummonWCommand);
registerCommand("toggleai", 30, toggleAiCommand);
registerCommand("flush", 30, flushCommand); registerCommand("flush", 30, flushCommand);
registerCommand("level", 50, levelCommand); registerCommand("level", 50, levelCommand);
registerCommand("population", 100, populationCommand); registerCommand("population", 100, populationCommand);

View File

@ -12,6 +12,8 @@
std::map<int32_t, Mob*> MobManager::Mobs; std::map<int32_t, Mob*> MobManager::Mobs;
std::queue<int32_t> MobManager::RemovalQueue; std::queue<int32_t> MobManager::RemovalQueue;
bool MobManager::simulateMobs;
void MobManager::init() { void MobManager::init() {
REGISTER_SHARD_TIMER(step, 200); REGISTER_SHARD_TIMER(step, 200);
REGISTER_SHARD_TIMER(playerTick, 2000); REGISTER_SHARD_TIMER(playerTick, 2000);
@ -22,6 +24,8 @@ void MobManager::init() {
REGISTER_SHARD_PACKET(P_CL2FE_REQ_PC_COMBAT_END, combatEnd); REGISTER_SHARD_PACKET(P_CL2FE_REQ_PC_COMBAT_END, combatEnd);
REGISTER_SHARD_PACKET(P_CL2FE_DOT_DAMAGE_ONOFF, dotDamageOnOff); REGISTER_SHARD_PACKET(P_CL2FE_DOT_DAMAGE_ONOFF, dotDamageOnOff);
REGISTER_SHARD_PACKET(P_CL2FE_REQ_PC_ATTACK_CHARs, pcAttackChars); REGISTER_SHARD_PACKET(P_CL2FE_REQ_PC_ATTACK_CHARs, pcAttackChars);
simulateMobs = settings::SIMULATEMOBS;
} }
void MobManager::pcAttackNpcs(CNSocket *sock, CNPacketData *data) { void MobManager::pcAttackNpcs(CNSocket *sock, CNPacketData *data) {
@ -436,7 +440,8 @@ void MobManager::step(CNServer *serv, time_t currTime) {
continue; continue;
// skip mob movement and combat if disabled // skip mob movement and combat if disabled
if (!settings::SIMULATEMOBS && pair.second->state != MobState::DEAD) if (!simulateMobs && pair.second->state != MobState::DEAD
&& pair.second->state != MobState::RETREAT)
continue; continue;
// skip attack/move if stunned or asleep // skip attack/move if stunned or asleep

View File

@ -85,6 +85,7 @@ struct Mob : public BaseNPC {
namespace MobManager { namespace MobManager {
extern std::map<int32_t, Mob*> Mobs; extern std::map<int32_t, Mob*> Mobs;
extern std::queue<int32_t> RemovalQueue; extern std::queue<int32_t> RemovalQueue;
extern bool simulateMobs;
void init(); void init();
void step(CNServer*, time_t); void step(CNServer*, time_t);