mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-13 02:11:30 +00:00
Initial work
This commit is contained in:
parent
fd990136f7
commit
da739b8520
@ -17,6 +17,7 @@ SET(zone_sources
|
|||||||
client_mods.cpp
|
client_mods.cpp
|
||||||
client_packet.cpp
|
client_packet.cpp
|
||||||
client_process.cpp
|
client_process.cpp
|
||||||
|
console.cpp
|
||||||
command.cpp
|
command.cpp
|
||||||
corpse.cpp
|
corpse.cpp
|
||||||
data_bucket.cpp
|
data_bucket.cpp
|
||||||
@ -28,6 +29,7 @@ SET(zone_sources
|
|||||||
embxs.cpp
|
embxs.cpp
|
||||||
encounter.cpp
|
encounter.cpp
|
||||||
entity.cpp
|
entity.cpp
|
||||||
|
eqemu_api_zone_data_service.cpp
|
||||||
exp.cpp
|
exp.cpp
|
||||||
fastmath.cpp
|
fastmath.cpp
|
||||||
fearpath.cpp
|
fearpath.cpp
|
||||||
@ -140,7 +142,8 @@ SET(zone_sources
|
|||||||
zone.cpp
|
zone.cpp
|
||||||
zone_config.cpp
|
zone_config.cpp
|
||||||
zonedb.cpp
|
zonedb.cpp
|
||||||
zoning.cpp)
|
zoning.cpp
|
||||||
|
)
|
||||||
|
|
||||||
SET(zone_headers
|
SET(zone_headers
|
||||||
aa.h
|
aa.h
|
||||||
@ -157,14 +160,16 @@ SET(zone_headers
|
|||||||
client_packet.h
|
client_packet.h
|
||||||
command.h
|
command.h
|
||||||
common.h
|
common.h
|
||||||
|
console.h
|
||||||
corpse.h
|
corpse.h
|
||||||
data_bucket.h
|
data_bucket.h
|
||||||
doors.h
|
doors.h
|
||||||
embparser.h
|
embparser.h
|
||||||
embperl.h
|
embperl.h
|
||||||
embxs.h
|
embxs.h
|
||||||
encounter.h
|
encounter.h
|
||||||
entity.h
|
entity.h
|
||||||
|
eqemu_api_zone_data_service.h
|
||||||
errmsg.h
|
errmsg.h
|
||||||
event_codes.h
|
event_codes.h
|
||||||
fastmath.h
|
fastmath.h
|
||||||
@ -245,7 +250,7 @@ SET(zone_headers
|
|||||||
zone.h
|
zone.h
|
||||||
zone_config.h
|
zone_config.h
|
||||||
zonedb.h
|
zonedb.h
|
||||||
zonedump.h)
|
zonedump.h eqemu_api_zone_data_service.cpp eqemu_api_zone_data_service.h)
|
||||||
|
|
||||||
IF(EQEMU_DEPOP_INVALIDATES_CACHE)
|
IF(EQEMU_DEPOP_INVALIDATES_CACHE)
|
||||||
ADD_DEFINITIONS(-DDEPOP_INVALIDATES_NPC_TYPES_CACHE)
|
ADD_DEFINITIONS(-DDEPOP_INVALIDATES_NPC_TYPES_CACHE)
|
||||||
|
|||||||
122
zone/console.cpp
Normal file
122
zone/console.cpp
Normal file
@ -0,0 +1,122 @@
|
|||||||
|
/**
|
||||||
|
* EQEmulator: Everquest Server Emulator
|
||||||
|
* Copyright (C) 2001-2019 EQEmulator Development Team (https://github.com/EQEmu/Server)
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; version 2 of the License.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY except by those people which sell it, which
|
||||||
|
* are required to give you total support for your newly bought product;
|
||||||
|
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
||||||
|
* A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "console.h"
|
||||||
|
#include "../common/string_util.h"
|
||||||
|
#include "../common/md5.h"
|
||||||
|
#include "../common/database.h"
|
||||||
|
#include "../common/json/json.h"
|
||||||
|
#include "zone.h"
|
||||||
|
#include "npc.h"
|
||||||
|
#include "entity.h"
|
||||||
|
#include "eqemu_api_zone_data_service.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param username
|
||||||
|
* @param password
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
struct EQ::Net::ConsoleLoginStatus CheckLogin(const std::string &username, const std::string &password)
|
||||||
|
{
|
||||||
|
struct EQ::Net::ConsoleLoginStatus ret;
|
||||||
|
ret.account_id = database.CheckLogin(username.c_str(), password.c_str());
|
||||||
|
if (ret.account_id == 0) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
char account_name[64];
|
||||||
|
database.GetAccountName(static_cast<uint32>(ret.account_id), account_name);
|
||||||
|
|
||||||
|
ret.account_name = account_name;
|
||||||
|
ret.status = database.CheckStatus(static_cast<uint32>(ret.account_id));
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param connection
|
||||||
|
* @param command
|
||||||
|
* @param args
|
||||||
|
*/
|
||||||
|
void ConsoleApi(
|
||||||
|
EQ::Net::ConsoleServerConnection *connection,
|
||||||
|
const std::string &command,
|
||||||
|
const std::vector<std::string> &args
|
||||||
|
)
|
||||||
|
{
|
||||||
|
Json::Value root;
|
||||||
|
Json::Value response;
|
||||||
|
|
||||||
|
BenchTimer timer;
|
||||||
|
timer.reset();
|
||||||
|
|
||||||
|
EQEmuApiZoneDataService::get(response, args);
|
||||||
|
|
||||||
|
std::string method = args[0];
|
||||||
|
|
||||||
|
root["execution_time"] = std::to_string(timer.elapsed());
|
||||||
|
root["method"] = method;
|
||||||
|
root["data"] = response;
|
||||||
|
|
||||||
|
std::stringstream payload;
|
||||||
|
payload << root;
|
||||||
|
|
||||||
|
connection->SendLine(payload.str());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param connection
|
||||||
|
* @param command
|
||||||
|
* @param args
|
||||||
|
*/
|
||||||
|
void ConsoleNull(
|
||||||
|
EQ::Net::ConsoleServerConnection *connection,
|
||||||
|
const std::string &command,
|
||||||
|
const std::vector<std::string> &args
|
||||||
|
)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param connection
|
||||||
|
* @param command
|
||||||
|
* @param args
|
||||||
|
*/
|
||||||
|
void ConsoleQuit(
|
||||||
|
EQ::Net::ConsoleServerConnection *connection,
|
||||||
|
const std::string &command,
|
||||||
|
const std::vector<std::string> &args
|
||||||
|
)
|
||||||
|
{
|
||||||
|
connection->SendLine("Exiting...");
|
||||||
|
connection->Close();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param console
|
||||||
|
*/
|
||||||
|
void RegisterConsoleFunctions(std::unique_ptr<EQ::Net::ConsoleServer> &console)
|
||||||
|
{
|
||||||
|
console->RegisterLogin(std::bind(CheckLogin, std::placeholders::_1, std::placeholders::_2));
|
||||||
|
console->RegisterCall("api", 200, "api", std::bind(ConsoleApi, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3));
|
||||||
|
console->RegisterCall("ping", 50, "ping", std::bind(ConsoleNull, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3));
|
||||||
|
console->RegisterCall("quit", 50, "quit", std::bind(ConsoleQuit, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3));
|
||||||
|
console->RegisterCall("exit", 50, "exit", std::bind(ConsoleQuit, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3));
|
||||||
|
}
|
||||||
25
zone/console.h
Normal file
25
zone/console.h
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
/**
|
||||||
|
* EQEmulator: Everquest Server Emulator
|
||||||
|
* Copyright (C) 2001-2018 EQEmulator Development Team (https://github.com/EQEmu/Server)
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; version 2 of the License.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY except by those people which sell it, which
|
||||||
|
* are required to give you total support for your newly bought product;
|
||||||
|
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
||||||
|
* A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "../common/net/console_server.h"
|
||||||
|
|
||||||
|
void RegisterConsoleFunctions(std::unique_ptr<EQ::Net::ConsoleServer> &console);
|
||||||
370
zone/eqemu_api_zone_data_service.cpp
Normal file
370
zone/eqemu_api_zone_data_service.cpp
Normal file
@ -0,0 +1,370 @@
|
|||||||
|
/**
|
||||||
|
* EQEmulator: Everquest Server Emulator
|
||||||
|
* Copyright (C) 2001-2019 EQEmulator Development Team (https://github.com/EQEmu/Server)
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; version 2 of the License.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY except by those people which sell it, which
|
||||||
|
* are required to give you total support for your newly bought product;
|
||||||
|
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
||||||
|
* A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "eqemu_api_zone_data_service.h"
|
||||||
|
#include "npc.h"
|
||||||
|
#include "zone.h"
|
||||||
|
#include "entity.h"
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
extern Zone *zone;
|
||||||
|
|
||||||
|
void callGetNpcListDetail(Json::Value &response)
|
||||||
|
{
|
||||||
|
auto &list = entity_list.GetNPCList();
|
||||||
|
|
||||||
|
for (auto &iter : list) {
|
||||||
|
auto npc = iter.second;
|
||||||
|
Json::Value row;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Main
|
||||||
|
*/
|
||||||
|
row["id"] = npc->GetID();
|
||||||
|
row["clean_name"] = npc->GetCleanName();
|
||||||
|
row["x"] = npc->GetX();
|
||||||
|
row["y"] = npc->GetY();
|
||||||
|
row["z"] = npc->GetZ();
|
||||||
|
row["heading"] = npc->GetHeading();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Rest
|
||||||
|
*/
|
||||||
|
row["accuracy_rating"] = npc->GetAccuracyRating();
|
||||||
|
row["ai_has_spells"] = npc->AI_HasSpells();
|
||||||
|
row["ai_has_spells_effects"] = npc->AI_HasSpellsEffects();
|
||||||
|
row["ammo_id_file"] = npc->GetAmmoIDfile();
|
||||||
|
row["attack_delay"] = npc->GetAttackDelay();
|
||||||
|
row["attack_speed"] = npc->GetAttackSpeed();
|
||||||
|
row["avoidance_rating"] = npc->GetAvoidanceRating();
|
||||||
|
row["base_damage"] = npc->GetBaseDamage();
|
||||||
|
row["combat_event"] = npc->GetCombatEvent();
|
||||||
|
row["copper"] = npc->GetCopper();
|
||||||
|
row["count_loot"] = npc->CountLoot();
|
||||||
|
row["drops_global_loot"] = npc->DropsGlobalLoot();
|
||||||
|
row["gold"] = npc->GetGold();
|
||||||
|
row["grid"] = npc->GetGrid();
|
||||||
|
row["has_private_corpse"] = npc->HasPrivateCorpse();
|
||||||
|
row["is_animal"] = npc->IsAnimal();
|
||||||
|
row["is_guarding"] = npc->IsGuarding();
|
||||||
|
row["is_ldon_locked"] = npc->IsLDoNLocked();
|
||||||
|
row["is_ldon_trap_detected"] = npc->IsLDoNTrapDetected();
|
||||||
|
row["is_ldon_trapped"] = npc->IsLDoNTrapped();
|
||||||
|
row["is_merchant_open"] = npc->IsMerchantOpen();
|
||||||
|
row["is_not_targetable_with_hotkey"] = npc->IsNotTargetableWithHotkey();
|
||||||
|
row["is_proximity_set"] = npc->IsProximitySet();
|
||||||
|
row["is_taunting"] = npc->IsTaunting();
|
||||||
|
row["ldon_locked_skill"] = npc->GetLDoNLockedSkill();
|
||||||
|
row["ldon_trap_spell_id"] = npc->GetLDoNTrapSpellID();
|
||||||
|
row["ldon_trap_type"] = npc->GetLDoNTrapType();
|
||||||
|
row["loottable_id"] = npc->GetLoottableID();
|
||||||
|
row["max_dmg"] = npc->GetMaxDMG();
|
||||||
|
row["max_wp"] = npc->GetMaxWp();
|
||||||
|
row["min_damage"] = npc->GetMinDamage();
|
||||||
|
row["min_dmg"] = npc->GetMinDMG();
|
||||||
|
row["npc_spells_effects_id"] = npc->GetNPCSpellsEffectsID();
|
||||||
|
row["npc_spells_id"] = npc->GetNPCSpellsID();
|
||||||
|
row["npchp_regen"] = npc->GetNPCHPRegen();
|
||||||
|
row["num_merc_types"] = npc->GetNumMercTypes();
|
||||||
|
row["num_mercs"] = npc->GetNumMercs();
|
||||||
|
row["number_of_attacks"] = npc->GetNumberOfAttacks();
|
||||||
|
row["pet_spell_id"] = npc->GetPetSpellID();
|
||||||
|
row["platinum"] = npc->GetPlatinum();
|
||||||
|
row["prim_skill"] = npc->GetPrimSkill();
|
||||||
|
|
||||||
|
if (npc->IsProximitySet()) {
|
||||||
|
row["proximity_max_x"] = npc->GetProximityMaxX();
|
||||||
|
row["proximity_max_y"] = npc->GetProximityMaxY();
|
||||||
|
row["proximity_max_z"] = npc->GetProximityMaxZ();
|
||||||
|
row["proximity_min_x"] = npc->GetProximityMinX();
|
||||||
|
row["proximity_min_y"] = npc->GetProximityMinY();
|
||||||
|
row["proximity_min_z"] = npc->GetProximityMinZ();
|
||||||
|
}
|
||||||
|
|
||||||
|
row["ranged_skill"] = npc->GetRangedSkill();
|
||||||
|
row["raw_ac"] = npc->GetRawAC();
|
||||||
|
row["sec_skill"] = npc->GetSecSkill();
|
||||||
|
row["silver"] = npc->GetSilver();
|
||||||
|
row["slow_mitigation"] = npc->GetSlowMitigation();
|
||||||
|
row["sp2"] = npc->GetSp2();
|
||||||
|
row["swarm_owner"] = npc->GetSwarmOwner();
|
||||||
|
row["swarm_target"] = npc->GetSwarmTarget();
|
||||||
|
row["waypoint_max"] = npc->GetWaypointMax();
|
||||||
|
row["will_aggro_npcs"] = npc->WillAggroNPCs();
|
||||||
|
|
||||||
|
response.append(row);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void callGetMobListDetail(Json::Value &response)
|
||||||
|
{
|
||||||
|
auto &list = entity_list.GetMobList();
|
||||||
|
|
||||||
|
for (auto &iter : list) {
|
||||||
|
auto mob = iter.second;
|
||||||
|
|
||||||
|
Json::Value row;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Main
|
||||||
|
*/
|
||||||
|
row["id"] = mob->GetID();
|
||||||
|
row["clean_name"] = mob->GetCleanName();
|
||||||
|
row["x"] = mob->GetX();
|
||||||
|
row["y"] = mob->GetY();
|
||||||
|
row["z"] = mob->GetZ();
|
||||||
|
row["heading"] = mob->GetHeading();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Rest
|
||||||
|
*/
|
||||||
|
row["ac"] = mob->GetAC();
|
||||||
|
row["ac_softcap"] = mob->GetACSoftcap();
|
||||||
|
row["ac_sum"] = mob->ACSum();
|
||||||
|
row["active_light_type"] = mob->GetActiveLightType();
|
||||||
|
row["aggro_range"] = mob->GetAggroRange();
|
||||||
|
row["allow_beneficial"] = mob->GetAllowBeneficial();
|
||||||
|
row["animation"] = mob->GetAnimation();
|
||||||
|
row["assist_range"] = mob->GetAssistRange();
|
||||||
|
row["aura_slots"] = mob->GetAuraSlots();
|
||||||
|
row["base_fear_speed"] = mob->GetBaseFearSpeed();
|
||||||
|
row["base_runspeed"] = mob->GetBaseRunspeed();
|
||||||
|
row["base_size"] = mob->GetBaseSize();
|
||||||
|
row["base_walkspeed"] = mob->GetBaseWalkspeed();
|
||||||
|
row["beard"] = mob->GetBeard();
|
||||||
|
row["beard_color"] = mob->GetBeardColor();
|
||||||
|
row["best_melee_skill"] = mob->GetBestMeleeSkill();
|
||||||
|
row["calc_fear_resist_chance"] = mob->CalcFearResistChance();
|
||||||
|
row["calc_resist_chance_bonus"] = mob->CalcResistChanceBonus();
|
||||||
|
row["can_block_spell"] = mob->CanBlockSpell();
|
||||||
|
row["can_facestab"] = mob->CanFacestab();
|
||||||
|
row["casted_spell_inv_slot"] = mob->GetCastedSpellInvSlot();
|
||||||
|
row["casting_spell_id"] = mob->CastingSpellID();
|
||||||
|
row["charmed"] = mob->Charmed();
|
||||||
|
row["check_last_los_state"] = mob->CheckLastLosState();
|
||||||
|
row["class"] = mob->GetClass();
|
||||||
|
row["class_level_factor"] = mob->GetClassLevelFactor();
|
||||||
|
row["class_race_ac_bonus"] = mob->GetClassRaceACBonus();
|
||||||
|
row["compute_defense"] = mob->compute_defense();
|
||||||
|
row["count_dispellable_buffs"] = mob->CountDispellableBuffs();
|
||||||
|
row["cripp_blow_chance"] = mob->GetCrippBlowChance();
|
||||||
|
row["cur_wp"] = mob->GetCurWp();
|
||||||
|
row["cwp"] = mob->GetCWP();
|
||||||
|
row["cwpp"] = mob->GetCWPP();
|
||||||
|
row["divine_aura"] = mob->DivineAura();
|
||||||
|
row["do_casting_checks"] = mob->DoCastingChecks();
|
||||||
|
row["dont_buff_me_before"] = mob->DontBuffMeBefore();
|
||||||
|
row["dont_cure_me_before"] = mob->DontCureMeBefore();
|
||||||
|
row["dont_dot_me_before"] = mob->DontDotMeBefore();
|
||||||
|
row["dont_heal_me_before"] = mob->DontHealMeBefore();
|
||||||
|
row["dont_root_me_before"] = mob->DontRootMeBefore();
|
||||||
|
row["dont_snare_me_before"] = mob->DontSnareMeBefore();
|
||||||
|
row["drakkin_details"] = mob->GetDrakkinDetails();
|
||||||
|
row["drakkin_heritage"] = mob->GetDrakkinHeritage();
|
||||||
|
row["drakkin_tattoo"] = mob->GetDrakkinTattoo();
|
||||||
|
row["emote_id"] = mob->GetEmoteID();
|
||||||
|
row["equipment_light_type"] = mob->GetEquipmentLightType();
|
||||||
|
row["eye_color1"] = mob->GetEyeColor1();
|
||||||
|
row["eye_color2"] = mob->GetEyeColor2();
|
||||||
|
row["fear_speed"] = mob->GetFearSpeed();
|
||||||
|
row["flurry_chance"] = mob->GetFlurryChance();
|
||||||
|
row["follow_can_run"] = mob->GetFollowCanRun();
|
||||||
|
row["follow_distance"] = mob->GetFollowDistance();
|
||||||
|
row["follow_id"] = mob->GetFollowID();
|
||||||
|
row["gender"] = mob->GetGender();
|
||||||
|
row["hair_color"] = mob->GetHairColor();
|
||||||
|
row["hair_style"] = mob->GetHairStyle();
|
||||||
|
row["has_active_song"] = mob->HasActiveSong();
|
||||||
|
row["has_assist_aggro"] = mob->HasAssistAggro();
|
||||||
|
row["has_died"] = mob->HasDied();
|
||||||
|
row["has_disc_buff"] = mob->HasDiscBuff();
|
||||||
|
row["has_endur_upkeep"] = mob->HasEndurUpkeep();
|
||||||
|
row["has_free_aura_slots"] = mob->HasFreeAuraSlots();
|
||||||
|
row["has_free_trap_slots"] = mob->HasFreeTrapSlots();
|
||||||
|
row["has_mgb"] = mob->HasMGB();
|
||||||
|
row["has_numhits"] = mob->HasNumhits();
|
||||||
|
row["has_pet"] = mob->HasPet();
|
||||||
|
row["has_pet_affinity"] = mob->HasPetAffinity();
|
||||||
|
row["has_primary_aggro"] = mob->HasPrimaryAggro();
|
||||||
|
row["has_project_illusion"] = mob->HasProjectIllusion();
|
||||||
|
row["has_projectile_attack"] = mob->HasProjectileAttack();
|
||||||
|
row["has_shield_equiped"] = mob->HasShieldEquiped();
|
||||||
|
row["has_special_abilities"] = mob->HasSpecialAbilities();
|
||||||
|
row["has_tar_reflection"] = mob->HasTargetReflection();
|
||||||
|
row["has_temp_pets_active"] = mob->HasTempPetsActive();
|
||||||
|
row["has_two_hand_blunt_equiped"] = mob->HasTwoHandBluntEquiped();
|
||||||
|
row["has_two_hander_equipped"] = mob->HasTwoHanderEquipped();
|
||||||
|
row["has_virus"] = mob->HasVirus();
|
||||||
|
row["hate_summon"] = mob->HateSummon();
|
||||||
|
row["helm_texture"] = mob->GetHelmTexture();
|
||||||
|
row["hp"] = mob->GetHP();
|
||||||
|
row["improved_taunt"] = mob->ImprovedTaunt();
|
||||||
|
row["innate_light_type"] = mob->GetInnateLightType();
|
||||||
|
row["is_ai_controlled"] = mob->IsAIControlled();
|
||||||
|
row["is_amnesiad"] = mob->IsAmnesiad();
|
||||||
|
row["is_animation"] = mob->IsAnimation();
|
||||||
|
row["is_blind"] = mob->IsBlind();
|
||||||
|
row["is_casting"] = mob->IsCasting();
|
||||||
|
row["is_charmed"] = mob->IsCharmed();
|
||||||
|
row["is_destructible_object"] = mob->IsDestructibleObject();
|
||||||
|
row["is_engaged"] = mob->IsEngaged();
|
||||||
|
row["is_enraged"] = mob->IsEnraged();
|
||||||
|
row["is_familiar"] = mob->IsFamiliar();
|
||||||
|
row["is_feared"] = mob->IsFeared();
|
||||||
|
row["is_findable"] = mob->IsFindable();
|
||||||
|
row["is_focused"] = mob->IsFocused();
|
||||||
|
row["is_g_held"] = mob->IsGHeld();
|
||||||
|
row["is_grouped"] = mob->IsGrouped();
|
||||||
|
row["is_held"] = mob->IsHeld();
|
||||||
|
row["is_looting"] = mob->IsLooting();
|
||||||
|
row["is_melee_disabled"] = mob->IsMeleeDisabled();
|
||||||
|
row["is_mezzed"] = mob->IsMezzed();
|
||||||
|
row["is_moved"] = mob->IsMoved();
|
||||||
|
row["is_moving"] = mob->IsMoving();
|
||||||
|
row["is_no_cast"] = mob->IsNoCast();
|
||||||
|
row["is_off_hand_atk"] = mob->IsOffHandAtk();
|
||||||
|
row["is_pet_owner_client"] = mob->IsPetOwnerClient();
|
||||||
|
row["is_pet_regroup"] = mob->IsPetRegroup();
|
||||||
|
row["is_pet_stop"] = mob->IsPetStop();
|
||||||
|
row["is_pseudo_rooted"] = mob->IsPseudoRooted();
|
||||||
|
row["is_raid_grouped"] = mob->IsRaidGrouped();
|
||||||
|
row["is_rare_spawn"] = mob->IsRareSpawn();
|
||||||
|
row["is_roamer"] = mob->IsRoamer();
|
||||||
|
row["is_rooted"] = mob->IsRooted();
|
||||||
|
row["is_running"] = mob->IsRunning();
|
||||||
|
row["is_silenced"] = mob->IsSilenced();
|
||||||
|
row["is_stunned"] = mob->IsStunned();
|
||||||
|
row["is_tar_lock_pet"] = mob->IsTargetLockPet();
|
||||||
|
row["is_tarable"] = mob->IsTargetable();
|
||||||
|
row["is_tared"] = mob->IsTargeted();
|
||||||
|
row["is_temp_pet"] = mob->IsTempPet();
|
||||||
|
row["is_trackable"] = mob->IsTrackable();
|
||||||
|
row["item_hp_bonuses"] = mob->GetItemHPBonuses();
|
||||||
|
row["last_name"] = mob->GetLastName();
|
||||||
|
row["level"] = mob->GetLevel();
|
||||||
|
row["luclin_face"] = mob->GetLuclinFace();
|
||||||
|
row["mana"] = mob->GetMana();
|
||||||
|
row["mana_percent"] = mob->GetManaPercent();
|
||||||
|
row["mana_ratio"] = mob->GetManaRatio();
|
||||||
|
row["max_hp"] = mob->GetMaxHP();
|
||||||
|
row["max_mana"] = mob->GetMaxMana();
|
||||||
|
row["melee_mitigation"] = mob->GetMeleeMitigation();
|
||||||
|
row["mitigation_ac"] = mob->GetMitigationAC();
|
||||||
|
row["movespeed"] = mob->GetMovespeed();
|
||||||
|
row["name"] = mob->GetName();
|
||||||
|
row["next_hp_event"] = mob->GetNextHPEvent();
|
||||||
|
row["next_inc_hp_event"] = mob->GetNextIncHPEvent();
|
||||||
|
row["npc_assist_cap"] = mob->NPCAssistCap();
|
||||||
|
row["npc_type_id"] = mob->GetNPCTypeID();
|
||||||
|
row["orig_level"] = mob->GetOrigLevel();
|
||||||
|
row["orig_name"] = mob->GetOrigName();
|
||||||
|
row["owner_id"] = mob->GetOwnerID();
|
||||||
|
row["pet_id"] = mob->GetPetID();
|
||||||
|
row["pet_power"] = mob->GetPetPower();
|
||||||
|
row["pet_tar_lock_id"] = mob->GetPetTargetLockID();
|
||||||
|
row["qglobal"] = mob->GetQglobal();
|
||||||
|
row["race"] = mob->GetRace();
|
||||||
|
row["run_anim_speed"] = mob->GetRunAnimSpeed();
|
||||||
|
row["sanctuary"] = mob->Sanctuary();
|
||||||
|
row["see_hide"] = mob->SeeHide();
|
||||||
|
row["see_improved_hide"] = mob->SeeImprovedHide();
|
||||||
|
row["see_invisible"] = mob->SeeInvisible();
|
||||||
|
row["see_invisible_undead"] = mob->SeeInvisibleUndead();
|
||||||
|
row["size"] = mob->GetSize();
|
||||||
|
row["slow_mitigation"] = mob->GetSlowMitigation();
|
||||||
|
row["snared_amount"] = mob->GetSnaredAmount();
|
||||||
|
row["spawned"] = mob->Spawned();
|
||||||
|
row["spell_hp_bonuses"] = mob->GetSpellHPBonuses();
|
||||||
|
row["spell_light_type"] = mob->GetSpellLightType();
|
||||||
|
row["spell_power_distance_mod"] = mob->GetSpellPowerDistanceMod();
|
||||||
|
row["spell_x"] = mob->GetSpellX();
|
||||||
|
row["spell_y"] = mob->GetSpellY();
|
||||||
|
row["spell_z"] = mob->GetSpellZ();
|
||||||
|
row["tar_ring_x"] = mob->GetTargetRingX();
|
||||||
|
row["tar_ring_y"] = mob->GetTargetRingY();
|
||||||
|
row["tar_ring_z"] = mob->GetTargetRingZ();
|
||||||
|
row["temp_pet_count"] = mob->GetTempPetCount();
|
||||||
|
row["texture"] = mob->GetTexture();
|
||||||
|
row["trap_slots"] = mob->GetTrapSlots();
|
||||||
|
row["try_death_save"] = mob->TryDeathSave();
|
||||||
|
row["try_divine_save"] = mob->TryDivineSave();
|
||||||
|
row["try_spell_on_death"] = mob->TrySpellOnDeath();
|
||||||
|
row["update_active_light"] = mob->UpdateActiveLight();
|
||||||
|
row["wander_type"] = mob->GetWanderType();
|
||||||
|
|
||||||
|
response.append(row);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void callGetZoneAttributes(Json::Value &response)
|
||||||
|
{
|
||||||
|
Json::Value row;
|
||||||
|
|
||||||
|
row["aggro_limit_reached"] = zone->AggroLimitReached();
|
||||||
|
row["allow_mercs"] = zone->AllowMercs();
|
||||||
|
row["buff_timers_suspended"] = zone->BuffTimersSuspended();
|
||||||
|
row["can_bind"] = zone->CanBind();
|
||||||
|
row["can_cast_outdoor"] = zone->CanCastOutdoor();
|
||||||
|
row["can_do_combat"] = zone->CanDoCombat();
|
||||||
|
row["can_levitate"] = zone->CanLevitate();
|
||||||
|
row["count_auth"] = zone->CountAuth();
|
||||||
|
row["count_spawn2"] = zone->CountSpawn2();
|
||||||
|
row["file_name"] = zone->GetFileName();
|
||||||
|
row["graveyard_id"] = zone->graveyard_id();
|
||||||
|
row["graveyard_zoneid"] = zone->graveyard_zoneid();
|
||||||
|
row["has_graveyard"] = zone->HasGraveyard();
|
||||||
|
row["has_map"] = zone->HasMap();
|
||||||
|
row["has_water_map"] = zone->HasWaterMap();
|
||||||
|
row["has_weather"] = zone->HasWeather();
|
||||||
|
row["instance_id"] = zone->GetInstanceID();
|
||||||
|
row["instance_version"] = zone->GetInstanceVersion();
|
||||||
|
row["instant_grids"] = zone->InstantGrids();
|
||||||
|
row["is_city"] = zone->IsCity();
|
||||||
|
row["is_hotzone"] = zone->IsHotzone();
|
||||||
|
row["is_instance_persistent"] = zone->IsInstancePersistent();
|
||||||
|
row["is_pvp_zone"] = zone->IsPVPZone();
|
||||||
|
row["is_static_zone"] = zone->IsStaticZone();
|
||||||
|
row["is_ucs_server_available"] = zone->IsUCSServerAvailable();
|
||||||
|
row["long_name"] = zone->GetLongName();
|
||||||
|
row["max_clients"] = zone->GetMaxClients();
|
||||||
|
row["mobs_aggro_count"] = zone->MobsAggroCount();
|
||||||
|
row["save_zone_cfg"] = zone->SaveZoneCFG();
|
||||||
|
row["short_name"] = zone->GetShortName();
|
||||||
|
row["total_blocked_spells"] = zone->GetTotalBlockedSpells();
|
||||||
|
row["zone_id"] = zone->GetZoneID();
|
||||||
|
row["zone_type"] = zone->GetZoneType();
|
||||||
|
|
||||||
|
response.append(row);
|
||||||
|
}
|
||||||
|
|
||||||
|
void EQEmuApiZoneDataService::get(Json::Value &response, const std::vector<std::string> &args)
|
||||||
|
{
|
||||||
|
std::string method = args[0];
|
||||||
|
|
||||||
|
if (method == "get_npc_list_detail") {
|
||||||
|
callGetNpcListDetail(response);
|
||||||
|
}
|
||||||
|
if (method == "get_mob_list_detail") {
|
||||||
|
callGetMobListDetail(response);
|
||||||
|
}
|
||||||
|
if (method == "get_zone_attributes") {
|
||||||
|
callGetZoneAttributes(response);
|
||||||
|
}
|
||||||
|
}
|
||||||
32
zone/eqemu_api_zone_data_service.h
Normal file
32
zone/eqemu_api_zone_data_service.h
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
/**
|
||||||
|
* EQEmulator: Everquest Server Emulator
|
||||||
|
* Copyright (C) 2001-2019 EQEmulator Development Team (https://github.com/EQEmu/Server)
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; version 2 of the License.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY except by those people which sell it, which
|
||||||
|
* are required to give you total support for your newly bought product;
|
||||||
|
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
||||||
|
* A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef EQEMU_API_ZONE_DATA_SERVICE_H
|
||||||
|
#define EQEMU_API_ZONE_DATA_SERVICE_H
|
||||||
|
|
||||||
|
#include "../common/json/json.h"
|
||||||
|
|
||||||
|
class EQEmuApiZoneDataService {
|
||||||
|
public:
|
||||||
|
static void get(Json::Value &response, const std::vector<std::string> &args);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#endif //EQEMU_API_ZONE_DATA_SERVICE_H
|
||||||
36
zone/net.cpp
36
zone/net.cpp
@ -67,6 +67,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|||||||
#include "../common/event/event_loop.h"
|
#include "../common/event/event_loop.h"
|
||||||
#include "../common/event/timer.h"
|
#include "../common/event/timer.h"
|
||||||
#include "../common/net/eqstream.h"
|
#include "../common/net/eqstream.h"
|
||||||
|
#include "../common/net/servertalk_server.h"
|
||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <string>
|
#include <string>
|
||||||
@ -90,6 +91,9 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|||||||
#else
|
#else
|
||||||
#include <pthread.h>
|
#include <pthread.h>
|
||||||
#include "../common/unix.h"
|
#include "../common/unix.h"
|
||||||
|
#include "../common/net/console_server.h"
|
||||||
|
#include "console.h"
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
volatile bool RunLoops = true;
|
volatile bool RunLoops = true;
|
||||||
@ -446,24 +450,50 @@ int main(int argc, char** argv) {
|
|||||||
Log(Logs::Detail, Logs::None, "Main thread running with thread id %d", pthread_self());
|
Log(Logs::Detail, Logs::None, "Main thread running with thread id %d", pthread_self());
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
bool worldwasconnected = worldserver.Connected();
|
||||||
|
bool eqsf_open = false;
|
||||||
|
bool telnet_server_opened = false;
|
||||||
|
|
||||||
Timer quest_timers(100);
|
Timer quest_timers(100);
|
||||||
UpdateWindowTitle();
|
UpdateWindowTitle();
|
||||||
bool worldwasconnected = worldserver.Connected();
|
|
||||||
std::shared_ptr<EQStreamInterface> eqss;
|
std::shared_ptr<EQStreamInterface> eqss;
|
||||||
EQStreamInterface *eqsi;
|
EQStreamInterface *eqsi;
|
||||||
bool eqsf_open = false;
|
|
||||||
std::unique_ptr<EQ::Net::EQStreamManager> eqsm;
|
std::unique_ptr<EQ::Net::EQStreamManager> eqsm;
|
||||||
std::chrono::time_point<std::chrono::system_clock> frame_prev = std::chrono::system_clock::now();
|
std::chrono::time_point<std::chrono::system_clock> frame_prev = std::chrono::system_clock::now();
|
||||||
|
std::unique_ptr<EQ::Net::ConsoleServer> console;
|
||||||
|
|
||||||
auto loop_fn = [&](EQ::Timer* t) {
|
auto loop_fn = [&](EQ::Timer* t) {
|
||||||
//Advance the timer to our current point in time
|
//Advance the timer to our current point in time
|
||||||
Timer::SetCurrentTime();
|
Timer::SetCurrentTime();
|
||||||
|
|
||||||
//Calculate frame time
|
/**
|
||||||
|
* Calculate frame time
|
||||||
|
*/
|
||||||
std::chrono::time_point<std::chrono::system_clock> frame_now = std::chrono::system_clock::now();
|
std::chrono::time_point<std::chrono::system_clock> frame_now = std::chrono::system_clock::now();
|
||||||
frame_time = std::chrono::duration_cast<std::chrono::duration<double>>(frame_now - frame_prev).count();
|
frame_time = std::chrono::duration_cast<std::chrono::duration<double>>(frame_now - frame_prev).count();
|
||||||
frame_prev = frame_now;
|
frame_prev = frame_now;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Telnet server
|
||||||
|
*/
|
||||||
|
if (!telnet_server_opened && Config->ZonePort != 0) {
|
||||||
|
if (Config->TelnetEnabled) {
|
||||||
|
Log(
|
||||||
|
Logs::General,
|
||||||
|
Logs::Zone_Server,
|
||||||
|
"Telnet Console (TCP) listener started (%s:%u).",
|
||||||
|
Config->TelnetIP.c_str(),
|
||||||
|
Config->ZonePort
|
||||||
|
);
|
||||||
|
console.reset(new EQ::Net::ConsoleServer(Config->TelnetIP, Config->ZonePort));
|
||||||
|
RegisterConsoleFunctions(console);
|
||||||
|
telnet_server_opened = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* EQStreamManager
|
||||||
|
*/
|
||||||
if (!eqsf_open && Config->ZonePort != 0) {
|
if (!eqsf_open && Config->ZonePort != 0) {
|
||||||
Log(Logs::General, Logs::Zone_Server, "Starting EQ Network server on port %d", Config->ZonePort);
|
Log(Logs::General, Logs::Zone_Server, "Starting EQ Network server on port %d", Config->ZonePort);
|
||||||
|
|
||||||
|
|||||||
@ -1834,33 +1834,6 @@ void Zone::ShowSpawnStatusByID(Mob* client, uint32 spawnid)
|
|||||||
client->Message(0, "No matching spawn id was found in this zone.");
|
client->Message(0, "No matching spawn id was found in this zone.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool Zone::RemoveSpawnEntry(uint32 spawnid)
|
|
||||||
{
|
|
||||||
LinkedListIterator<Spawn2*> iterator(spawn2_list);
|
|
||||||
|
|
||||||
|
|
||||||
iterator.Reset();
|
|
||||||
while(iterator.MoreElements())
|
|
||||||
{
|
|
||||||
if(iterator.GetData()->GetID() == spawnid)
|
|
||||||
{
|
|
||||||
iterator.RemoveCurrent();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
iterator.Advance();
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool Zone::RemoveSpawnGroup(uint32 in_id) {
|
|
||||||
if(spawn_group_list.RemoveSpawnGroup(in_id))
|
|
||||||
return true;
|
|
||||||
else
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool ZoneDatabase::GetDecayTimes(npcDecayTimes_Struct *npcCorpseDecayTimes)
|
bool ZoneDatabase::GetDecayTimes(npcDecayTimes_Struct *npcCorpseDecayTimes)
|
||||||
{
|
{
|
||||||
const std::string query =
|
const std::string query =
|
||||||
|
|||||||
529
zone/zone.h
529
zone/zone.h
@ -31,32 +31,31 @@
|
|||||||
#include "pathfinder_interface.h"
|
#include "pathfinder_interface.h"
|
||||||
#include "global_loot_manager.h"
|
#include "global_loot_manager.h"
|
||||||
|
|
||||||
struct ZonePoint
|
struct ZonePoint {
|
||||||
{
|
float x;
|
||||||
float x;
|
float y;
|
||||||
float y;
|
float z;
|
||||||
float z;
|
float heading;
|
||||||
float heading;
|
|
||||||
uint16 number;
|
uint16 number;
|
||||||
float target_x;
|
float target_x;
|
||||||
float target_y;
|
float target_y;
|
||||||
float target_z;
|
float target_z;
|
||||||
float target_heading;
|
float target_heading;
|
||||||
uint16 target_zone_id;
|
uint16 target_zone_id;
|
||||||
int32 target_zone_instance;
|
int32 target_zone_instance;
|
||||||
uint32 client_version_mask;
|
uint32 client_version_mask;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ZoneClientAuth_Struct {
|
struct ZoneClientAuth_Struct {
|
||||||
uint32 ip; // client's IP address
|
uint32 ip; // client's IP address
|
||||||
uint32 wid; // client's WorldID#
|
uint32 wid; // client's WorldID#
|
||||||
uint32 accid;
|
uint32 accid;
|
||||||
int16 admin;
|
int16 admin;
|
||||||
uint32 charid;
|
uint32 charid;
|
||||||
bool tellsoff;
|
bool tellsoff;
|
||||||
char charname[64];
|
char charname[64];
|
||||||
char lskey[30];
|
char lskey[30];
|
||||||
bool stale;
|
bool stale;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ZoneEXPModInfo {
|
struct ZoneEXPModInfo {
|
||||||
@ -65,11 +64,11 @@ struct ZoneEXPModInfo {
|
|||||||
};
|
};
|
||||||
|
|
||||||
struct item_tick_struct {
|
struct item_tick_struct {
|
||||||
uint32 itemid;
|
uint32 itemid;
|
||||||
uint32 chance;
|
uint32 chance;
|
||||||
uint32 level;
|
uint32 level;
|
||||||
int16 bagslot;
|
int16 bagslot;
|
||||||
std::string qglobal;
|
std::string qglobal;
|
||||||
};
|
};
|
||||||
|
|
||||||
class Client;
|
class Client;
|
||||||
@ -81,290 +80,292 @@ struct NPCType;
|
|||||||
struct ServerZoneIncomingClient_Struct;
|
struct ServerZoneIncomingClient_Struct;
|
||||||
class MobMovementManager;
|
class MobMovementManager;
|
||||||
|
|
||||||
class Zone
|
class Zone {
|
||||||
{
|
|
||||||
public:
|
public:
|
||||||
static bool Bootup(uint32 iZoneID, uint32 iInstanceID, bool iStaticZone = false);
|
static bool Bootup(uint32 iZoneID, uint32 iInstanceID, bool iStaticZone = false);
|
||||||
static void Shutdown(bool quite = false);
|
static void Shutdown(bool quite = false);
|
||||||
|
|
||||||
Zone(uint32 in_zoneid, uint32 in_instanceid, const char* in_short_name);
|
Zone(uint32 in_zoneid, uint32 in_instanceid, const char *in_short_name);
|
||||||
~Zone();
|
~Zone();
|
||||||
|
|
||||||
/* When zone has its own version of time */
|
|
||||||
bool is_zone_time_localized;
|
|
||||||
|
|
||||||
bool Init(bool iStaticZone);
|
|
||||||
bool LoadZoneCFG(const char* filename, uint16 instance_id);
|
|
||||||
bool SaveZoneCFG();
|
|
||||||
bool IsLoaded();
|
|
||||||
bool IsPVPZone() { return pvpzone; }
|
|
||||||
inline const char* GetLongName() { return long_name; }
|
|
||||||
inline const char* GetFileName() { return file_name; }
|
|
||||||
inline const char* GetShortName() { return short_name; }
|
|
||||||
inline const uint32 GetZoneID() const { return zoneid; }
|
|
||||||
inline const uint32 GetInstanceID() const { return instanceid; }
|
|
||||||
inline const uint16 GetInstanceVersion() const { return instanceversion; }
|
|
||||||
inline const bool IsInstancePersistent() const { return pers_instance; }
|
|
||||||
inline const uint8 GetZoneType() const { return zone_type; }
|
|
||||||
|
|
||||||
inline Timer* GetInstanceTimer() { return Instance_Timer; }
|
|
||||||
Timer spawn2_timer;
|
|
||||||
|
|
||||||
inline glm::vec3 GetSafePoint() { return m_SafePoint; }
|
|
||||||
inline const uint32& graveyard_zoneid() { return pgraveyard_zoneid; }
|
|
||||||
inline glm::vec4 GetGraveyardPoint() { return m_Graveyard; }
|
|
||||||
inline const uint32& graveyard_id() { return pgraveyard_id; }
|
|
||||||
|
|
||||||
inline const uint32& GetMaxClients() { return pMaxClients; }
|
|
||||||
|
|
||||||
//new AA
|
|
||||||
void LoadAlternateAdvancement();
|
|
||||||
AA::Ability *GetAlternateAdvancementAbility(int id);
|
AA::Ability *GetAlternateAdvancementAbility(int id);
|
||||||
AA::Ability *GetAlternateAdvancementAbilityByRank(int rank_id);
|
AA::Ability *GetAlternateAdvancementAbilityByRank(int rank_id);
|
||||||
AA::Rank *GetAlternateAdvancementRank(int rank_id);
|
AA::Rank *GetAlternateAdvancementRank(int rank_id);
|
||||||
std::pair<AA::Ability*, AA::Rank*> GetAlternateAdvancementAbilityAndRank(int id, int points_spent);
|
bool is_zone_time_localized;
|
||||||
|
bool AggroLimitReached() { return (aggroedmobs > 10) ? true : false; }
|
||||||
void LoadZoneDoors(const char* zone, int16 version);
|
bool AllowMercs() const { return (allow_mercs); }
|
||||||
bool LoadZoneObjects();
|
bool CanBind() const { return (can_bind); }
|
||||||
bool LoadGroundSpawns();
|
bool CanCastOutdoor() const { return (can_castoutdoor); } //qadar
|
||||||
void ReloadStaticData();
|
bool CanDoCombat() const { return (can_combat); }
|
||||||
|
bool CanLevitate() const { return (can_levitate); } // Magoth78
|
||||||
uint32 CountSpawn2();
|
bool Depop(bool StartSpawnTimer = false);
|
||||||
ZonePoint* GetClosestZonePoint(const glm::vec3& location, const char* to_name, Client *client, float max_distance = 40000.0f);
|
|
||||||
ZonePoint* GetClosestZonePoint(const glm::vec3& location, uint32 to, Client *client, float max_distance = 40000.0f);
|
|
||||||
ZonePoint* GetClosestZonePointWithoutZone(float x, float y, float z, Client *client, float max_distance = 40000.0f);
|
|
||||||
SpawnGroupList spawn_group_list;
|
|
||||||
|
|
||||||
bool RemoveSpawnEntry(uint32 spawnid);
|
|
||||||
bool RemoveSpawnGroup(uint32 in_id);
|
|
||||||
|
|
||||||
bool Process();
|
|
||||||
void Despawn(uint32 spawngroupID);
|
|
||||||
|
|
||||||
bool Depop(bool StartSpawnTimer = false);
|
|
||||||
void Repop(uint32 delay = 0);
|
|
||||||
void RepopClose(const glm::vec4& client_position, uint32 repop_distance);
|
|
||||||
void ClearNPCTypeCache(int id);
|
|
||||||
void SpawnStatus(Mob* client);
|
|
||||||
void ShowEnabledSpawnStatus(Mob* client);
|
|
||||||
void ShowDisabledSpawnStatus(Mob* client);
|
|
||||||
void ShowSpawnStatusByID(Mob* client, uint32 spawnid);
|
|
||||||
void StartShutdownTimer(uint32 set_time = (RuleI(Zone, AutoShutdownDelay)));
|
|
||||||
void ChangeWeather();
|
|
||||||
bool HasWeather();
|
|
||||||
void AddAuth(ServerZoneIncomingClient_Struct* szic);
|
|
||||||
void RemoveAuth(const char* iCharName);
|
|
||||||
void ResetAuth();
|
|
||||||
bool GetAuth(uint32 iIP, const char* iCharName, uint32* oWID = 0, uint32* oAccID = 0, uint32* oCharID = 0, int16* oStatus = 0, char* oLSKey = 0, bool* oTellsOff = 0);
|
|
||||||
uint32 CountAuth();
|
|
||||||
|
|
||||||
void AddAggroMob() { aggroedmobs++; }
|
|
||||||
void DelAggroMob() { aggroedmobs--; }
|
|
||||||
bool AggroLimitReached() { return (aggroedmobs>10)?true:false; } // change this value, to allow more NPCs to autoaggro
|
|
||||||
int32 MobsAggroCount() { return aggroedmobs; }
|
|
||||||
inline bool InstantGrids() { return(!initgrids_timer.Enabled()); }
|
|
||||||
void SetStaticZone(bool sz) { staticzone = sz; }
|
|
||||||
inline bool IsStaticZone() { return staticzone; }
|
|
||||||
inline void SetZoneHasCurrentTime(bool time) { zone_has_current_time = time; }
|
|
||||||
|
|
||||||
void SpawnConditionChanged(const SpawnCondition &c, int16 old_value);
|
|
||||||
|
|
||||||
void GetMerchantDataForZoneLoad();
|
|
||||||
void LoadNewMerchantData(uint32 merchantid);
|
|
||||||
void LoadTempMerchantData();
|
|
||||||
uint32 GetTempMerchantQuantity(uint32 NPCID, uint32 Slot);
|
|
||||||
int SaveTempItem(uint32 merchantid, uint32 npcid, uint32 item, int32 charges, bool sold=false);
|
|
||||||
void LoadMercTemplates();
|
|
||||||
void LoadMercSpells();
|
|
||||||
void LoadLevelEXPMods();
|
|
||||||
MercTemplate* GetMercTemplate( uint32 template_id );
|
|
||||||
|
|
||||||
void SetInstanceTimer(uint32 new_duration);
|
|
||||||
void LoadLDoNTraps();
|
|
||||||
void LoadLDoNTrapEntries();
|
|
||||||
void LoadAdventureFlavor();
|
|
||||||
|
|
||||||
std::map<uint32,NPCType *> npctable;
|
|
||||||
std::map<uint32,NPCType *> merctable;
|
|
||||||
std::map<uint32,std::list<MerchantList> > merchanttable;
|
|
||||||
std::map<uint32,std::list<TempMerchantList> > tmpmerchanttable;
|
|
||||||
std::map<uint32,std::string> adventure_entry_list_flavor;
|
|
||||||
std::map<uint32,LDoNTrapTemplate*> ldon_trap_list;
|
|
||||||
std::map<uint32,std::list<LDoNTrapTemplate*> > ldon_trap_entry_list;
|
|
||||||
std::map<uint32,std::list<MercStanceInfo> > merc_stance_list;
|
|
||||||
std::map<uint32, MercTemplate> merc_templates;
|
|
||||||
std::map<uint32,std::list<MercSpellEntry> > merc_spells_list;
|
|
||||||
std::map<uint32, ZoneEXPModInfo> level_exp_mod;
|
|
||||||
std::list<InternalVeteranReward> VeteranRewards;
|
|
||||||
std::list<AltCurrencyDefinition_Struct> AlternateCurrencies;
|
|
||||||
char *adv_data;
|
|
||||||
bool did_adventure_actions;
|
bool did_adventure_actions;
|
||||||
|
bool GetAuth(
|
||||||
|
uint32 iIP,
|
||||||
|
const char *iCharName,
|
||||||
|
uint32 *oWID = 0,
|
||||||
|
uint32 *oAccID = 0,
|
||||||
|
uint32 *oCharID = 0,
|
||||||
|
int16 *oStatus = 0,
|
||||||
|
char *oLSKey = 0,
|
||||||
|
bool *oTellsOff = 0
|
||||||
|
);
|
||||||
|
bool HasGraveyard();
|
||||||
|
bool HasWeather();
|
||||||
|
bool Init(bool iStaticZone);
|
||||||
|
bool IsCity() const { return (is_city); }
|
||||||
|
bool IsHotzone() const { return (is_hotzone); }
|
||||||
|
bool IsLoaded();
|
||||||
|
bool IsPVPZone() { return pvpzone; }
|
||||||
|
bool IsSpellBlocked(uint32 spell_id, const glm::vec3 &location);
|
||||||
|
bool IsUCSServerAvailable() { return m_ucss_available; }
|
||||||
|
bool LoadGroundSpawns();
|
||||||
|
bool LoadZoneCFG(const char *filename, uint16 instance_id);
|
||||||
|
bool LoadZoneObjects();
|
||||||
|
bool Process();
|
||||||
|
bool SaveZoneCFG();
|
||||||
|
|
||||||
//new AA
|
char *adv_data;
|
||||||
std::unordered_map<int, std::unique_ptr<AA::Ability>> aa_abilities;
|
|
||||||
std::unordered_map<int, std::unique_ptr<AA::Rank>> aa_ranks;
|
|
||||||
|
|
||||||
void DoAdventureCountIncrease();
|
const char *GetSpellBlockedMessage(uint32 spell_id, const glm::vec3 &location);
|
||||||
void DoAdventureAssassinationCountIncrease();
|
|
||||||
void DoAdventureActions();
|
|
||||||
void LoadVeteranRewards();
|
|
||||||
void LoadAlternateCurrencies();
|
|
||||||
void LoadNPCEmotes(LinkedList<NPC_Emote_Struct*>* NPCEmoteList);
|
|
||||||
void ReloadWorld(uint32 Option);
|
|
||||||
void ReloadMerchants();
|
|
||||||
|
|
||||||
Map *zonemap;
|
EQEmu::Random random;
|
||||||
WaterMap *watermap;
|
EQTime zone_time;
|
||||||
IPathfinder *pathing;
|
|
||||||
NewZone_Struct newzone_data;
|
|
||||||
|
|
||||||
SpawnConditionManager spawn_conditions;
|
ZonePoint *GetClosestZonePoint(const glm::vec3 &location, const char *to_name, Client *client, float max_distance = 40000.0f);
|
||||||
|
|
||||||
EQTime zone_time;
|
inline bool BuffTimersSuspended() const { return newzone_data.SuspendBuffs != 0; };
|
||||||
void GetTimeSync();
|
|
||||||
void SetDate(uint16 year, uint8 month, uint8 day, uint8 hour, uint8 minute);
|
|
||||||
void SetTime(uint8 hour, uint8 minute, bool update_world = true);
|
|
||||||
|
|
||||||
void weatherSend(Client* client = nullptr);
|
|
||||||
bool CanBind() const { return(can_bind); }
|
|
||||||
bool IsCity() const { return(is_city); }
|
|
||||||
bool CanDoCombat() const { return(can_combat); }
|
|
||||||
bool CanLevitate() const {return(can_levitate); } // Magoth78
|
|
||||||
bool CanCastOutdoor() const {return(can_castoutdoor);} //qadar
|
|
||||||
bool AllowMercs() const {return(allow_mercs);}
|
|
||||||
bool IsHotzone() const { return(is_hotzone); }
|
|
||||||
inline bool BuffTimersSuspended() const { return newzone_data.SuspendBuffs != 0; };
|
|
||||||
|
|
||||||
time_t weather_timer;
|
|
||||||
uint8 weather_intensity;
|
|
||||||
uint8 zone_weather;
|
|
||||||
|
|
||||||
uint8 loglevelvar;
|
|
||||||
uint8 merchantvar;
|
|
||||||
uint8 tradevar;
|
|
||||||
uint8 lootvar;
|
|
||||||
|
|
||||||
bool HasGraveyard();
|
|
||||||
void SetGraveyard(uint32 zoneid, const glm::vec4& graveyardPosition);
|
|
||||||
|
|
||||||
void LoadBlockedSpells(uint32 zoneid);
|
|
||||||
void ClearBlockedSpells();
|
|
||||||
bool IsSpellBlocked(uint32 spell_id, const glm::vec3& location);
|
|
||||||
const char *GetSpellBlockedMessage(uint32 spell_id, const glm::vec3& location);
|
|
||||||
int GetTotalBlockedSpells() { return totalBS; }
|
|
||||||
inline bool HasMap() { return zonemap != nullptr; }
|
inline bool HasMap() { return zonemap != nullptr; }
|
||||||
inline bool HasWaterMap() { return watermap != nullptr; }
|
inline bool HasWaterMap() { return watermap != nullptr; }
|
||||||
|
inline bool InstantGrids() { return (!initgrids_timer.Enabled()); }
|
||||||
QGlobalCache *GetQGlobals() { return qGlobals; }
|
inline bool IsStaticZone() { return staticzone; }
|
||||||
QGlobalCache *CreateQGlobals() { qGlobals = new QGlobalCache(); return qGlobals; }
|
inline const bool IsInstancePersistent() const { return pers_instance; }
|
||||||
void UpdateQGlobal(uint32 qid, QGlobal newGlobal);
|
inline const char *GetFileName() { return file_name; }
|
||||||
void DeleteQGlobal(std::string name, uint32 npcID, uint32 charID, uint32 zoneID);
|
inline const char *GetLongName() { return long_name; }
|
||||||
|
inline const char *GetShortName() { return short_name; }
|
||||||
LinkedList<Spawn2*> spawn2_list;
|
inline const uint8 GetZoneType() const { return zone_type; }
|
||||||
LinkedList<ZonePoint*> zone_point_list;
|
inline const uint16 GetInstanceVersion() const { return instanceversion; }
|
||||||
uint32 numzonepoints;
|
inline const uint32 &GetMaxClients() { return pMaxClients; }
|
||||||
|
inline const uint32 &graveyard_id() { return pgraveyard_id; }
|
||||||
LinkedList<NPC_Emote_Struct*> NPCEmoteList;
|
inline const uint32 &graveyard_zoneid() { return pgraveyard_zoneid; }
|
||||||
|
inline const uint32 GetInstanceID() const { return instanceid; }
|
||||||
void LoadTickItems();
|
inline const uint32 GetZoneID() const { return zoneid; }
|
||||||
uint32 GetSpawnKillCount(uint32 in_spawnid);
|
inline glm::vec3 GetSafePoint() { return m_SafePoint; }
|
||||||
void UpdateHotzone();
|
inline glm::vec4 GetGraveyardPoint() { return m_Graveyard; }
|
||||||
std::unordered_map<int, item_tick_struct> tick_items;
|
|
||||||
|
|
||||||
inline std::vector<int> GetGlobalLootTables(NPC *mob) const { return m_global_loot.GetGlobalLootTables(mob); }
|
inline std::vector<int> GetGlobalLootTables(NPC *mob) const { return m_global_loot.GetGlobalLootTables(mob); }
|
||||||
|
inline Timer *GetInstanceTimer() { return Instance_Timer; }
|
||||||
inline void AddGlobalLootEntry(GlobalLootEntry &in) { return m_global_loot.AddEntry(in); }
|
inline void AddGlobalLootEntry(GlobalLootEntry &in) { return m_global_loot.AddEntry(in); }
|
||||||
inline void ShowZoneGlobalLoot(Client *to) { m_global_loot.ShowZoneGlobalLoot(to); }
|
inline void SetZoneHasCurrentTime(bool time) { zone_has_current_time = time; }
|
||||||
inline void ShowNPCGlobalLoot(Client *to, NPC *who) { m_global_loot.ShowNPCGlobalLoot(to, who); }
|
inline void ShowNPCGlobalLoot(Client *to, NPC *who) { m_global_loot.ShowNPCGlobalLoot(to, who); }
|
||||||
|
inline void ShowZoneGlobalLoot(Client *to) { m_global_loot.ShowZoneGlobalLoot(to); }
|
||||||
|
int GetTotalBlockedSpells() { return totalBS; }
|
||||||
|
int SaveTempItem(uint32 merchantid, uint32 npcid, uint32 item, int32 charges, bool sold = false);
|
||||||
|
int32 MobsAggroCount() { return aggroedmobs; }
|
||||||
|
|
||||||
|
IPathfinder *pathing;
|
||||||
|
LinkedList<NPC_Emote_Struct *> NPCEmoteList;
|
||||||
|
LinkedList<Spawn2 *> spawn2_list;
|
||||||
|
LinkedList<ZonePoint *> zone_point_list;
|
||||||
|
Map *zonemap;
|
||||||
|
MercTemplate *GetMercTemplate(uint32 template_id);
|
||||||
|
NewZone_Struct newzone_data;
|
||||||
|
QGlobalCache *CreateQGlobals()
|
||||||
|
{
|
||||||
|
qGlobals = new QGlobalCache();
|
||||||
|
return qGlobals;
|
||||||
|
}
|
||||||
|
QGlobalCache *GetQGlobals() { return qGlobals; }
|
||||||
|
SpawnConditionManager spawn_conditions;
|
||||||
|
SpawnGroupList spawn_group_list;
|
||||||
|
|
||||||
|
std::list<AltCurrencyDefinition_Struct> AlternateCurrencies;
|
||||||
|
std::list<InternalVeteranReward> VeteranRewards;
|
||||||
|
std::map<uint32, LDoNTrapTemplate *> ldon_trap_list;
|
||||||
|
std::map<uint32, MercTemplate> merc_templates;
|
||||||
|
std::map<uint32, NPCType *> merctable;
|
||||||
|
std::map<uint32, NPCType *> npctable;
|
||||||
|
std::map<uint32, std::list<LDoNTrapTemplate *> > ldon_trap_entry_list;
|
||||||
|
std::map<uint32, std::list<MerchantList> > merchanttable;
|
||||||
|
std::map<uint32, std::list<MercSpellEntry> > merc_spells_list;
|
||||||
|
std::map<uint32, std::list<MercStanceInfo> > merc_stance_list;
|
||||||
|
std::map<uint32, std::list<TempMerchantList> > tmpmerchanttable;
|
||||||
|
std::map<uint32, std::string> adventure_entry_list_flavor;
|
||||||
|
std::map<uint32, ZoneEXPModInfo> level_exp_mod;
|
||||||
|
|
||||||
|
std::pair<AA::Ability *, AA::Rank *> GetAlternateAdvancementAbilityAndRank(int id, int points_spent);
|
||||||
|
|
||||||
|
std::unordered_map<int, item_tick_struct> tick_items;
|
||||||
|
std::unordered_map<int, std::unique_ptr<AA::Ability>> aa_abilities;
|
||||||
|
std::unordered_map<int, std::unique_ptr<AA::Rank>> aa_ranks;
|
||||||
|
|
||||||
|
time_t weather_timer;
|
||||||
|
Timer spawn2_timer;
|
||||||
|
|
||||||
|
uint8 weather_intensity;
|
||||||
|
uint8 zone_weather;
|
||||||
|
uint8 loglevelvar;
|
||||||
|
uint8 lootvar;
|
||||||
|
uint8 merchantvar;
|
||||||
|
uint8 tradevar;
|
||||||
|
uint32 numzonepoints;
|
||||||
|
uint32 CountAuth();
|
||||||
|
uint32 CountSpawn2();
|
||||||
|
uint32 GetSpawnKillCount(uint32 in_spawnid);
|
||||||
|
uint32 GetTempMerchantQuantity(uint32 NPCID, uint32 Slot);
|
||||||
|
|
||||||
|
void AddAggroMob() { aggroedmobs++; }
|
||||||
|
void AddAuth(ServerZoneIncomingClient_Struct *szic);
|
||||||
|
void ChangeWeather();
|
||||||
|
void ClearBlockedSpells();
|
||||||
|
void ClearNPCTypeCache(int id);
|
||||||
|
void DelAggroMob() { aggroedmobs--; }
|
||||||
|
void DeleteQGlobal(std::string name, uint32 npcID, uint32 charID, uint32 zoneID);
|
||||||
|
void Despawn(uint32 spawngroupID);
|
||||||
|
void DoAdventureActions();
|
||||||
|
void DoAdventureAssassinationCountIncrease();
|
||||||
|
void DoAdventureCountIncrease();
|
||||||
|
void GetMerchantDataForZoneLoad();
|
||||||
|
void GetTimeSync();
|
||||||
|
void LoadAdventureFlavor();
|
||||||
|
void LoadAlternateAdvancement();
|
||||||
|
void LoadAlternateCurrencies();
|
||||||
|
void LoadBlockedSpells(uint32 zoneid);
|
||||||
|
void LoadLDoNTrapEntries();
|
||||||
|
void LoadLDoNTraps();
|
||||||
|
void LoadLevelEXPMods();
|
||||||
|
void LoadMercSpells();
|
||||||
|
void LoadMercTemplates();
|
||||||
|
void LoadNewMerchantData(uint32 merchantid);
|
||||||
|
void LoadNPCEmotes(LinkedList<NPC_Emote_Struct *> *NPCEmoteList);
|
||||||
|
void LoadTempMerchantData();
|
||||||
|
void LoadTickItems();
|
||||||
|
void LoadVeteranRewards();
|
||||||
|
void LoadZoneDoors(const char *zone, int16 version);
|
||||||
|
void ReloadStaticData();
|
||||||
|
void ReloadWorld(uint32 Option);
|
||||||
|
void RemoveAuth(const char *iCharName);
|
||||||
|
void Repop(uint32 delay = 0);
|
||||||
|
void RepopClose(const glm::vec4 &client_position, uint32 repop_distance);
|
||||||
void RequestUCSServerStatus();
|
void RequestUCSServerStatus();
|
||||||
|
void ResetAuth();
|
||||||
|
void SetDate(uint16 year, uint8 month, uint8 day, uint8 hour, uint8 minute);
|
||||||
|
void SetGraveyard(uint32 zoneid, const glm::vec4 &graveyardPosition);
|
||||||
|
void SetInstanceTimer(uint32 new_duration);
|
||||||
|
void SetStaticZone(bool sz) { staticzone = sz; }
|
||||||
|
void SetTime(uint8 hour, uint8 minute, bool update_world = true);
|
||||||
void SetUCSServerAvailable(bool ucss_available, uint32 update_timestamp);
|
void SetUCSServerAvailable(bool ucss_available, uint32 update_timestamp);
|
||||||
bool IsUCSServerAvailable() { return m_ucss_available; }
|
void ShowDisabledSpawnStatus(Mob *client);
|
||||||
|
void ShowEnabledSpawnStatus(Mob *client);
|
||||||
|
void ShowSpawnStatusByID(Mob *client, uint32 spawnid);
|
||||||
|
void SpawnConditionChanged(const SpawnCondition &c, int16 old_value);
|
||||||
|
void SpawnStatus(Mob *client);
|
||||||
|
void StartShutdownTimer(uint32 set_time = (RuleI(Zone, AutoShutdownDelay)));
|
||||||
|
void UpdateHotzone();
|
||||||
|
void UpdateQGlobal(uint32 qid, QGlobal newGlobal);
|
||||||
|
void weatherSend(Client *client = nullptr);
|
||||||
|
|
||||||
// random object that provides random values for the zone
|
WaterMap *watermap;
|
||||||
EQEmu::Random random;
|
ZonePoint *GetClosestZonePoint(const glm::vec3 &location, uint32 to, Client *client, float max_distance = 40000.0f);
|
||||||
|
ZonePoint *GetClosestZonePointWithoutZone(float x, float y, float z, Client *client, float max_distance = 40000.0f);
|
||||||
|
|
||||||
static void GMSayHookCallBackProcess(uint16 log_category, std::string message){
|
/**
|
||||||
/* Cut messages down to 4000 max to prevent client crash */
|
* GMSay Callback for LogSys
|
||||||
if (!message.empty())
|
*
|
||||||
|
* @param log_category
|
||||||
|
* @param message
|
||||||
|
*/
|
||||||
|
static void GMSayHookCallBackProcess(uint16 log_category, std::string message)
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Cut messages down to 4000 max to prevent client crash
|
||||||
|
*/
|
||||||
|
if (!message.empty()) {
|
||||||
message = message.substr(0, 4000);
|
message = message.substr(0, 4000);
|
||||||
|
}
|
||||||
|
|
||||||
/* Replace Occurrences of % or MessageStatus will crash */
|
/**
|
||||||
|
* Replace Occurrences of % or MessageStatus will crash
|
||||||
|
*/
|
||||||
find_replace(message, std::string("%"), std::string("."));
|
find_replace(message, std::string("%"), std::string("."));
|
||||||
|
|
||||||
if (message.find("\n") != std::string::npos){
|
if (message.find("\n") != std::string::npos) {
|
||||||
auto message_split = SplitString(message, '\n');
|
auto message_split = SplitString(message, '\n');
|
||||||
entity_list.MessageStatus(0, 80, LogSys.GetGMSayColorFromCategory(log_category), "%s", message_split[0].c_str());
|
entity_list.MessageStatus(
|
||||||
|
0,
|
||||||
|
80,
|
||||||
|
LogSys.GetGMSayColorFromCategory(log_category),
|
||||||
|
"%s",
|
||||||
|
message_split[0].c_str()
|
||||||
|
);
|
||||||
|
|
||||||
for (size_t iter = 1; iter < message_split.size(); ++iter) {
|
for (size_t iter = 1; iter < message_split.size(); ++iter) {
|
||||||
entity_list.MessageStatus(0, 80, LogSys.GetGMSayColorFromCategory(log_category), "--- %s", message_split[iter].c_str());
|
entity_list.MessageStatus(
|
||||||
|
0,
|
||||||
|
80,
|
||||||
|
LogSys.GetGMSayColorFromCategory(log_category),
|
||||||
|
"--- %s",
|
||||||
|
message_split[iter].c_str()
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else{
|
else {
|
||||||
entity_list.MessageStatus(0, 80, LogSys.GetGMSayColorFromCategory(log_category), "%s", message.c_str());
|
entity_list.MessageStatus(0, 80, LogSys.GetGMSayColorFromCategory(log_category), "%s", message.c_str());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//MODDING HOOKS
|
/**
|
||||||
|
* Modding hooks
|
||||||
|
*/
|
||||||
void mod_init();
|
void mod_init();
|
||||||
void mod_repop();
|
void mod_repop();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
uint32 zoneid;
|
bool allow_mercs;
|
||||||
uint32 instanceid;
|
bool can_bind;
|
||||||
uint16 instanceversion;
|
bool can_castoutdoor;
|
||||||
bool pers_instance;
|
bool can_combat;
|
||||||
char* short_name;
|
bool can_levitate;
|
||||||
char file_name[16];
|
bool is_city;
|
||||||
char* long_name;
|
bool is_hotzone;
|
||||||
char* map_name;
|
bool pers_instance;
|
||||||
bool pvpzone;
|
bool pvpzone;
|
||||||
|
bool m_ucss_available;
|
||||||
|
bool staticzone;
|
||||||
|
bool zone_has_current_time;
|
||||||
|
char *long_name;
|
||||||
|
char *map_name;
|
||||||
|
char *short_name;
|
||||||
|
char file_name[16];
|
||||||
glm::vec3 m_SafePoint;
|
glm::vec3 m_SafePoint;
|
||||||
uint32 pMaxClients;
|
|
||||||
bool can_bind;
|
|
||||||
bool is_city;
|
|
||||||
bool can_combat;
|
|
||||||
bool can_castoutdoor;
|
|
||||||
bool can_levitate;
|
|
||||||
bool is_hotzone;
|
|
||||||
uint8 zone_type;
|
|
||||||
bool allow_mercs;
|
|
||||||
uint32 pgraveyard_id, pgraveyard_zoneid;
|
|
||||||
glm::vec4 m_Graveyard;
|
glm::vec4 m_Graveyard;
|
||||||
int default_ruleset;
|
int default_ruleset;
|
||||||
|
int totalBS;
|
||||||
|
int32 aggroedmobs;
|
||||||
|
uint8 zone_type;
|
||||||
|
uint16 instanceversion;
|
||||||
|
uint32 instanceid;
|
||||||
|
uint32 pgraveyard_id, pgraveyard_zoneid;
|
||||||
|
uint32 pMaxClients;
|
||||||
|
uint32 zoneid;
|
||||||
|
uint32 m_last_ucss_update;
|
||||||
|
uint32 pQueuedMerchantsWorkID;
|
||||||
|
uint32 pQueuedTempMerchantsWorkID;
|
||||||
|
|
||||||
int totalBS;
|
GlobalLootManager m_global_loot;
|
||||||
ZoneSpellsBlocked *blocked_spells;
|
LinkedList<ZoneClientAuth_Struct *> client_auth_list;
|
||||||
|
MobMovementManager *mMovementManager;
|
||||||
|
QGlobalCache *qGlobals;
|
||||||
|
Timer *Instance_Shutdown_Timer;
|
||||||
|
Timer *Instance_Timer;
|
||||||
|
Timer *Instance_Warning_timer;
|
||||||
|
Timer *Weather_Timer;
|
||||||
|
Timer autoshutdown_timer;
|
||||||
|
Timer clientauth_timer;
|
||||||
|
Timer hotzone_timer;
|
||||||
|
Timer initgrids_timer; //delayed loading of initial grids.
|
||||||
|
Timer qglobal_purge_timer;
|
||||||
|
ZoneSpellsBlocked *blocked_spells;
|
||||||
|
|
||||||
/*
|
|
||||||
Spawn related things
|
|
||||||
*/
|
|
||||||
int32 aggroedmobs;
|
|
||||||
Timer initgrids_timer; //delayed loading of initial grids.
|
|
||||||
|
|
||||||
|
|
||||||
bool staticzone;
|
|
||||||
bool zone_has_current_time;
|
|
||||||
|
|
||||||
uint32 pQueuedMerchantsWorkID;
|
|
||||||
uint32 pQueuedTempMerchantsWorkID;
|
|
||||||
|
|
||||||
Timer autoshutdown_timer;
|
|
||||||
Timer clientauth_timer;
|
|
||||||
Timer qglobal_purge_timer;
|
|
||||||
Timer* Weather_Timer;
|
|
||||||
Timer* Instance_Timer;
|
|
||||||
Timer* Instance_Shutdown_Timer;
|
|
||||||
Timer* Instance_Warning_timer;
|
|
||||||
LinkedList<ZoneClientAuth_Struct*> client_auth_list;
|
|
||||||
QGlobalCache *qGlobals;
|
|
||||||
|
|
||||||
Timer hotzone_timer;
|
|
||||||
|
|
||||||
GlobalLootManager m_global_loot;
|
|
||||||
|
|
||||||
bool m_ucss_available;
|
|
||||||
uint32 m_last_ucss_update;
|
|
||||||
|
|
||||||
MobMovementManager *mMovementManager;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user