mirror of
https://github.com/emagi/eq2emu
synced 2026-08-12 18:23:04 -04:00
25 KiB
25 KiB
File: zoneserver.h
Classes
SpellProcessTradeskillMgrBotPlayerProximityLocationProximityLocationGridGridMapTrackedSpawnHouseItemWidgetClientSignObjectGroundSpawnGroundSpawnEntryGroundSpawnEntryItemLootTableLootDropGlobalLootTransportDestinationLocationTransportDestinationRevivePointSpawnScriptTimerFlightPathInfoFlightPathLocationZoneInfoSlideStructInfoZoneInfoSlideStructTransitionInfoZoneInfoSlideStructZoneServer
Functions
void ZoneLoop(void *tmp);void SpawnLoop(void *tmp);void SendInitialSpawns(void *tmp);void SendLevelChangedSpawns(void*tmp);void IncrementIncomingClients();void DecrementIncomingClients();void Init();bool Process();bool SpawnProcess();void AddZoneInfoSlideStructTransitionInfo(ZoneInfoSlideStruct* info, int32 x, int32 y, float zoom, float transition_time);void LoadRevivePoints(vector<RevivePoint*>* revive_points);void AddClient(Client* client);void SimpleMessage(int8 type, const char* message, Spawn* from, float distance, bool send_to_sender = true);void HandleChatMessage(Spawn* from, const char* to, int16 channel, const char* message, float distance = 0, const char* channel_name = 0, bool show_bubble = true, int32 language = 0);void HandleChatMessage(Client* client, Spawn* from, const char* to, int16 channel, const char* message, float distance = 0, const char* channel_name = 0, bool show_bubble = true, int32 language = 0);void HandleChatMessage(Client* client, std::string fromName, const char* to, int16 channel, const char* message, float distance = 0, const char* channel_name = 0, int32 language = 0);void HandleChatMessage(std::string fromName, const char* to, int16 channel, const char* message, float distance, const char* channel_name, int32 language);void HandleBroadcast(const char* message);void HandleAnnouncement(const char* message);int16 SetSpawnTargetable(Spawn* spawn, float distance);int16 SetSpawnTargetable(int32 spawn_id);void ApplySetSpawnCommand(Client* client, Spawn* target, int8 type, const char* value);void SetSpawnCommand(Spawn* spawn, int8 type, char* value, Client* client = 0);void SetSpawnCommand(int32 spawn_id, int8 type, char* value, Client* client = 0);void AddLoot(NPC* npc, Spawn* killer = nullptr, GroupLootMethod loot_method = GroupLootMethod::METHOD_FFA, int8 item_rarity = 0, int32 group_id = 0);void AddSpawn(Spawn* spawn);void RemoveDeadEnemyList(Spawn* spawn);void RemoveDeadSpawn(Spawn* spawn);void AddSpawnGroupLocation(int32 group_id, int32 location_id, int32 spawn_location_id);void AddSpawnGroupAssociation(int32 group_id1, int32 group_id2);void AddSpawnGroupChance(int32 group_id, float percent);void RemoveSpawn(Spawn* spawn, bool delete_spawn = true, bool respawn = true, bool lock = true, bool erase_from_spawn_list = true, bool lock_spell_process = false);void ProcessSpawnLocations();void SendQuestUpdates(Client* client, Spawn* spawn = 0);bool CallSpawnScript(Spawn* npc, int8 type, Spawn* spawn = 0, const char* message = 0, bool is_door_open = false, sint32 input_value = 0, sint32* return_value = 0);void SendSpawnVisualState(Spawn* spawn, int16 type);void SendSpellFailedPacket(Client* client, int16 error);void SendInterruptPacket(Spawn* interrupted, LuaSpell* spell, bool fizzle=false);void HandleEmote(Spawn* originator, string name, Spawn* opt_target = nullptr, bool no_target = false);void PlaySoundFile(Client* client, const char* name, float origin_x, float origin_y, float origin_z);void SendZoneSpawns(Client* client);void StartZoneInitialSpawnThread(Client* client);void SendSpawnChanges();void SendSpawnChanges(Spawn* spawn);void SendSpawnChanges(Spawn* spawn, Client* client, bool override_changes = false, bool override_vis_changes = false);void SendSpawnChangesByDBID(int32 spawn_id, Client* client, bool override_changes = false, bool override_vis_changes = false);void SendPlayerPositionChanges(Player* player);void UpdateVitality(float amount);void KillSpawn(bool spawnListLocked, Spawn* dead, Spawn* killer, bool send_packet = true, int8 type = 0, int8 damage_type = 0, int16 kill_blow_type = 0);void SendDamagePacket(Spawn* attacker, Spawn* victim, int8 type1, int8 type2, int8 damage_type, int16 damage, const char* spell_name);void SendHealPacket(Spawn* caster, Spawn* target, int16 type, int32 heal_amt, const char* spell_name);void SendCastSpellPacket(LuaSpell* spell, Entity* caster, int32 spell_visual_override = 0, int16 casttime_override = 0xFFFF);void SendCastSpellPacket(int32 spell_visual, Spawn* target, Spawn* caster = 0);void SendCastEntityCommandPacket(EntityCommand* entity_command, int32 spawn_id, int32 target_id);void TriggerCharSheetTimer();void SendTimeUpdateToAllClients();void AddWidgetTimer(Spawn* widget, float time);bool HasWidgetTimer(Spawn* widget);void Despawn(Spawn* spawn, int32 timer);void RepopSpawns(Client* client, Spawn* spawn);bool AddCloseSpawnsToSpawnGroup(Spawn* spawn, float radius);void Depop(bool respawns = false, bool repop = false);bool IsSpawnGroupAlive(int32 id);void AddEnemyList(NPC* npc);void ReloadClientQuests();void SendAllSpawnsForLevelChange(Client* client);void SendAllSpawnsForSeeInvisChange(Client* client);void SendAllSpawnsForVisChange(Client* client, bool limitToEntities=true);void AddLocationGrid(LocationGrid* grid);void RemoveLocationGrids();void DeleteTransporters();void CheckTransporters(Client* client);void WritePlayerStatistics();bool SendRadiusSpawnInfo(Client* client, float radius);void FindSpawn(Client* client, char* regSearchStr);void AddChangedSpawn(Spawn* spawn);void AddDamagedSpawn(Spawn* spawn);void AddDrowningVictim(Player* player);void RemoveDrowningVictim(Player* player);void DeleteSpellProcess();void LoadSpellProcess();void LockAllSpells(Player* player);void UnlockAllSpells(Player* player);void RemoveSpellTimersFromSpawn(Spawn* spawn, bool remove_all, bool delete_recast = true, bool call_expire_function = true, bool lock_spell_process = false);void Interrupted(Entity* caster, Spawn* interruptor, int16 error_code, bool cancel = false, bool from_movement = false);void ProcessSpell(Spell* spell, Entity* caster, Spawn* target = 0, bool lock = true, bool harvest_spell = false, LuaSpell* customSpell = 0, int16 custom_cast_time = 0, bool in_heroic_opp = false);void ProcessEntityCommand(EntityCommand* entity_command, Entity* caster, Spawn* target, bool lock = true);void AddPlayerTracking(Player* player);void RemovePlayerTracking(Player* player, int8 mode);void SendUpdateTitles(Client *client, Title *suffix = 0, Title *prefix = 0);void SendUpdateTitles(Spawn *spawn, Title *suffix = 0, Title *prefix = 0);void RemoveTargetFromSpell(LuaSpell* spell, Spawn* target, bool remove_caster = false);void SetRain(float val);void SetWind(float val);void ProcessWeather();void ResurrectSpawn(Spawn* spawn, Client* client);void HidePrivateSpawn(Spawn* spawn);bool SetPlayerTargetByName(Client* originator, char* targetName, float distance);std::vector<int32> GetGridsByLocation(Spawn* originator, glm::vec3 loc, float distance);void StartZoneSpawnsForLevelThread(Client* client);void SendDispellPacket(Entity* caster, Spawn* target, string dispell_name, string spell_name, int8 dispell_type);void SetupInstance(int32 createdInstanceID=0);void SendUpdateDefaultCommand(Spawn* spawn, const char* command, float distance, Spawn* toplayer = NULL);int32 GetClosestLocation(Spawn* spawn);void PlayFlavor(Client* client, Spawn* spawn, const char* mp3, const char* text, const char* emote, int32 key1, int32 key2, int8 language);void PlayVoice(Client* client, Spawn* spawn, const char* mp3, int32 key1, int32 key2);void PlayFlavor(Spawn* spawn, const char* mp3, const char* text, const char* emote, int32 key1, int32 key2, int8 language);void PlayFlavorID(Spawn* spawn, int8 type, int32 id, int16 index, int8 language);void PlayVoice(Spawn* spawn, const char* mp3, int32 key1, int32 key2);void SendThreatPacket(Spawn* caster, Spawn* target, int32 threat_amt, const char* spell_name);void SendYellPacket(Spawn* yeller, float max_distance=50.0f);void KillSpawnByDistance(Spawn* spawn, float max_distance, bool include_players = false, bool send_packet = false);void SpawnSetByDistance(Spawn* spawn, float max_distance, string field, string value);void AddSpawnScriptTimer(SpawnScriptTimer* timer);void AddMovementNPC(Spawn* spawn);void AddPlayerProximity(Spawn* spawn, float distance, string in_range_function, string leaving_range_function);void AddLocationProximity(float x, float y, float z, float max_variation, string in_range_function, string leaving_range_function);void PlayAnimation(Spawn* spawn, int32 visual_state, Spawn* spawn2 = 0, int8 type = 1);void AddTransportSpawn(Spawn* spawn);void RemovePlayerPassenger(int32 char_id);bool IsDusk() { return isDusk; } // never used, probably meant for lua thoughvoid SetZoneName(char* new_zone) {void SetZoneFile(char* zone) {void SetZoneSkyFile(char* zone) {void SetZoneDescription(char* desc) {void SetUnderWorld(float under){ underworld = under; }float GetUnderWorld(){ return underworld; }void SetZoneID(int32 new_id){ zoneID = new_id; }void SetCityZone(bool val) { cityzone = val; }void SetAlwaysLoaded(bool val) { always_loaded = val; }void SetDuplicatedZone(bool val) { duplicated_zone = val; }void SetDuplicatedID(int32 id) { duplicated_id = id; }int32 NumPlayers() { return pNumPlayers; }void SetMinimumStatus(sint16 minStatus) { minimumStatus = minStatus; }sint16 GetMinimumStatus() { return minimumStatus; }void SetMinimumLevel(int16 minLevel) { minimumLevel = minLevel; }void SetMaximumLevel(int16 maxLevel) { maximumLevel = maxLevel; }void SetMinimumVersion(int16 minVersion) { minimumVersion = minVersion; }int16 GetMinimumLevel() { return minimumLevel; }int16 GetMaximumLevel() { return maximumLevel; }int16 GetMinimumVersion() { return minimumVersion; }void SetZoneLockState(bool lock_state) { locked = lock_state; } // JA: /zone lock|unlockint32 GetInstanceID() { return instanceID; }bool IsInstanceZone() { return isInstance; }void SetInstanceID(int32 newInstanceID) { instanceID = newInstanceID; }void SetShutdownTimer(int val){void AddSpawnLocation(int32 id, SpawnLocation* spawnlocation) {void SetInstanceType(int16 type) { InstanceType = (Instance_Type)type; if(type>0)isInstance=true; else isInstance=false; }Instance_Type GetInstanceType() { return InstanceType; }float GetSafeX(){ return safe_x; }float GetSafeY(){ return safe_y; }float GetSafeZ(){ return safe_z; }float GetSafeHeading() { return safe_heading; }void SetSafeX(float val){ safe_x = val; }void SetSafeY(float val){ safe_y = val; }void SetSafeZ(float val){ safe_z = val; }void SetSafeHeading(float val) { safe_heading = val; }float GetXPModifier() { return xp_mod; }void SetXPModifier(float val) { xp_mod = val; }void SetZoneMOTD(string z_motd) { zone_motd = z_motd; }string GetZoneMOTD() { return zone_motd; }bool isZoneShuttingDown ( ) { return zoneShuttingDown; }void Shutdown(){ zoneShuttingDown = true; }int32 GetClientCount(){ return clients.size(); }int32 GetDefaultLockoutTime() { return def_lockout_time; }int32 GetDefaultReenterTime() { return def_reenter_time; }int32 GetDefaultResetTime() { return def_reset_time; }int8 GetForceGroupZoneOption() { return group_zone_option; }void SetDefaultLockoutTime(int32 val) { def_lockout_time = val; }void SetDefaultReenterTime(int32 val) { def_reenter_time = val; }void SetDefaultResetTime(int32 val) { def_reset_time = val; }void SetForceGroupZoneOption(int8 val) { group_zone_option = val; }bool FinishedDepop(){ return finished_depop; }bool isWeatherEnabled() { return weather_enabled; }void SetWeatherEnabled(bool val) { weather_enabled = val; }bool isWeatherAllowed() { return weather_allowed; }void SetWeatherAllowed(bool val) { weather_allowed = val; }int8 GetWeatherType() { return weather_type; }void SetWeatherType(int8 val) { weather_type = val; }int32 GetWeatherFrequency() { return weather_frequency; }void SetWeatherFrequency(int32 val) { weather_frequency = val; }float GetWeatherMinSeverity() { return weather_min_severity; }void SetWeatherMinSeverity(float val) { weather_min_severity = val; }float GetWeatherMaxSeverity() { return weather_max_severity; }void SetWeatherMaxSeverity(float val) { weather_max_severity = val; }float GetWeatherChangeAmount() { return weather_change_amount; }void SetWeatherChangeAmount(float val) { weather_change_amount = val; }float GetWeatherDynamicOffset() { return weather_dynamic_offset; }void SetWeatherDynamicOffset(float val) { weather_dynamic_offset = val; }int8 GetWeatherChance() { return weather_change_chance; }void SetWeatherChance(int8 val) { weather_change_chance = val; }float GetCurrentWeather() { return weather_current_severity; }void SetCurrentWeather(float val) { weather_current_severity = val; }int8 GetWeatherPattern() { return weather_pattern; }void SetWeatherPattern(int8 val) { weather_pattern = val; }void SetWeatherLastChangedTime(int32 val) { weather_last_changed_time = val; }int32 GetExpansionFlag() { return expansion_flag; }void SetExpansionFlag(int32 val) { expansion_flag = val; }int32 GetHolidayFlag() { return holiday_flag; }void SetHolidayFlag(int32 val) { holiday_flag = val; }int32 GetCanBind() { return can_bind; }void SetCanBind(int32 val) { can_bind = val; }bool GetCanGate() { return can_gate; }void SetCanGate(int32 val) { can_gate = val; }bool GetCanEvac() { return can_evac; }void SetCanEvac(int32 val) { can_evac = val; }void RemoveClientImmediately(Client* client);void ClearHate(Entity* entity);void AddFlightPath(int32 id, FlightPathInfo* info);void AddFlightPathLocation(int32 id, FlightPathLocation* location);void DeleteFlightPaths();void SendFlightPathsPackets(Client* client);int32 GetFlightPathIndex(int32 id);float GetFlightPathSpeed(int32 id);void SendSpawn(Spawn* spawn, Client* client); // moved from private to public for botsvoid ProcessSpawnConditional(int8 condition);void SetSpawnStructs(Client* client);void AddSpawnProximities(Spawn* spawn);void RemoveSpawnProximities(Spawn* spawn);void SetSpawnScript(SpawnEntry* entry, Spawn* spawn);bool IsLoading() {vector<HouseItem> GetHouseItems(Client* client);void SendHouseItems(Client* client);int32 GetWatchdogTime() { return watchdogTimestamp; }void SetWatchdogTime(int32 time) { watchdogTimestamp = time; }void CancelThreads();void AddPendingSpawnRemove(int32 id);void ProcessSpawnRemovals();bool SendRemoveSpawn(Client* client, Spawn* spawn, PacketStruct* packet = 0, bool delete_spawn = false);void AddSpawnToGroup(Spawn* spawn, int32 group_id);void QueueStateCommandToClients(int32 spawn_id, int32 state);void QueueDefaultCommand(int32 spawn_id, std::string command, float distance);void ProcessQueuedStateCommands();void RemoveClientsFromZone(ZoneServer* zone);void WorldTimeUpdateTrigger() { sync_game_time_timer.Trigger(); }void StopSpawnScriptTimer(Spawn* spawn, std::string functionName);void SendSubSpawnUpdates(SUBSPAWN_TYPES subtype);bool HouseItemSpawnExists(int32 item_id);void ProcessPendingSpawns();void AddSpawnToGrid(Spawn* spawn, int32 grid_id);void RemoveSpawnFromGrid(Spawn* spawn, int32 grid_id);int32 GetSpawnCountInGrid(int32 grid_id);void SendClientSpawnListInGrid(Client* client, int32 grid_id);void AddIgnoredWidget(int32 id);void AddRespawn(Spawn* spawn);void AddRespawn(int32 locationID, int32 respawnTime);void SendRespawnTimerList(Client* client);void AddTransporter(LocationTransportDestination* loc);void CheckDeadSpawnRemoval();void DeleteData(bool boot_clients = true);void DeleteFactionLists();void ProcessDepop(bool respawns_allowed = false, bool repop = false);void ClientProcess(bool ignore_shutdown_timer = false); // never used outside zone servervoid RemoveClient(Client* client); // never used outside zone servervoid DeterminePosition(SpawnLocation* spawnlocation, Spawn* spawn); // never used outside zone servervoid AddDeadSpawn(Spawn* spawn, int32 timer = 0xFFFFFFFF); // never used outside zone serverint32 CalculateSpawnGroup(SpawnLocation* spawnlocation, bool respawn = false); // never used outside zone serverfloat GetSpawnGroupChance(int32 group_id); // never used outside zone servervoid ProcessSpawnLocation(int32 location_id, map<int32,int32>* instNPCs, map<int32,int32>* instGroundSpawns, map<int32,int32>* instObjSpawns, map<int32,int32>* instWidgetSpawns, map<int32,int32>* instSignSpawns, bool respawn = false); // never used outside zone servervoid SendRaidSheetChanges(); // never used outside zone servervoid SendCharSheetChanges(); // never used outside zone servervoid SendCharSheetChanges(Client* client); // never used outside zone servervoid SaveClients(); // never used outside zone servervoid CheckSendSpawnToClient(); // never used outside zone servervoid CheckSendSpawnToClient(Client* client, bool initial_login = false); // never used outside zone servervoid CheckRemoveSpawnFromClient(Spawn* spawn); // never used outside zone servervoid SaveClient(Client* client); // never used outside zone servervoid ProcessFaction(Spawn* spawn, Client* client); // never used outside zone servervoid RegenUpdate(); // never used outside zone servervoid SendCalculatedXP(Player* player, Spawn* victim); // never used outside zone server, might not be used at all any morevoid SendTimeUpdate(Client* client); // never used outside zone servervoid CheckWidgetTimers(); // never used outside zone servervoid CheckRespawns(); // never used outside zone servervoid CheckSpawnExpireTimers(); // never used outside zone servervoid AddSpawnExpireTimer(Spawn* spawn, int32 expire_time, int32 expire_offset = 0); // never used outside zone servervoid CheckSpawnRange(Client* client, Spawn* spawn, bool initial_login = false); // never used outside zone servervoid CheckSpawnRange(Spawn* spawn); // never used outside zone servervoid DeleteSpawnScriptTimers(Spawn* spawn, bool all = false); // never used outside zone servervoid DeleteSpawnScriptTimers(); // never used outside zone servervoid CheckSpawnScriptTimers(); // never used outside zone serverbool PrepareSpawnID(Player* player, Spawn* spawn); // never used outside zone servervoid RemoveMovementNPC(Spawn* spawn); // never used outside zone serverbool CheckNPCAttacks(NPC* npc, Spawn* victim, Client* client = 0); // never used outside zone serverbool AggroVictim(NPC* npc, Spawn* victim, Client* client = 0); // never used outside zone serverbool CheckEnemyList(NPC* npc); // never used outside zone servervoid RemovePlayerProximity(Spawn* spawn, bool all = false); // never used outside zone servervoid RemovePlayerProximity(Client* client); // never used outside zone servervoid CheckPlayerProximity(Spawn* spawn, Client* client); // never used outside zone servervoid RemoveLocationProximities(); // never used outside zone servervoid CheckLocationProximity(); // never used outside zone servervoid CheckLocationGrids(); // never used outside zone servervoid RemoveSpawnSupportFunctions(Spawn* spawn, bool lock_spell_process = false, bool shutdown = false); // never used outside zone servervoid ReloadTransporters(); // never used outside zone servervoid DeleteSpawns(bool delete_all); // never used outside zone servervoid AddPendingDelete(Spawn* spawn); // never used outside zone servervoid ClearDeadSpawns(); // never used outside zone servervoid RemoveChangedSpawn(Spawn* spawn); // never used outside zone servervoid ProcessDrowning(); // never used outside zone servervoid RemoveDamagedSpawn(Spawn* spawn); // never used outside zone servervoid ProcessTracking(); // never used outside zone servervoid ProcessTracking(Client* client); // never used outside zone servervoid SendEpicMobDeathToGuild(Player* killer, Spawn* victim); // never used outside zone servervoid ProcessAggroChecks(Spawn* spawn); // never used outside zone serverbool CombatProcess(Spawn* spawn); // never used outside zone servervoid LootProcess(Spawn* spawn);void CloseSpawnLootWindow(Spawn* spawn);void InitWeather(); // never used outside zone servervoid DismissAllPets(); // never used outside zone servervoid SetEntityCommandList(int32 id, EntityCommand* command);void ClearEntityCommands();void AddNPC(int32 id, NPC* npc);void AddNPCSkill(int32 list_id, int32 skill_id, int16 value);void AddNPCEquipment(int32 list_id, int32 item_id);void SetNPCEquipment(NPC* npc);void AddObject(int32 id, Object* object){ object_list[id] = object; }void AddSign(int32 id, Sign* sign){ sign_list[id] = sign; }void AddWidget(int32 id, Widget* widget);void AddGroundSpawnEntry(int32 groundspawn_id, int16 min_skill_level, int16 min_adventure_level, int8 bonus_table, float harvest1, float harvest3, float harvest5, float harvest_imbue, float harvest_rare, float harvest10, int32 harvest_coin);void AddGroundSpawnItem(int32 groundspawn_id, int32 item_id, int8 is_rare, int32 grid_id);void LoadGroundSpawnEntries();void LoadGroundSpawnItems();void DeleteGroundSpawnItems();void AddGroundSpawn(int32 id, GroundSpawn* spawn);void AddLootTable(int32 id, LootTable* table);void AddLootDrop(int32 id, LootDrop* drop);void AddSpawnLootList(int32 spawn_id, int32 id);void ClearSpawnLootList(int32 spawn_id);void AddLevelLootList(GlobalLoot* loot);void AddRacialLootList(int16 racial_id, GlobalLoot* loot);void AddZoneLootList(int32 zone, GlobalLoot* loot);void ClearLootTables();vector<int32> GetSpawnLootList(int32 spawn_id, int32 zone_id, int8 spawn_level, int16 racial_id, Spawn* spawn = 0);void AddLocationTransporter(int32 zone_id, string message, float trigger_x, float trigger_y, float trigger_z, float trigger_radius, int32 destination_zone_id, float destination_x, float destination_y, float destination_z, float destination_heading, int32 cost, int32 unique_id);void GetTransporters(vector<TransportDestination*>* returnList, Client* client, int32 transport_id);void DeleteGlobalTransporters();void AddTransportMap(int32 id, string name);bool TransportHasMap(int32 id);string GetTransportMap(int32 id);void DeleteTransporterMaps();void DeleteGlobalSpawns();void ReloadSpawns();void SendStateCommand(Spawn* spawn, int32 state);int32 getGroupraidMinLevel() const {int32 getGroupraidMaxLevel() const {int32 getGroupraidAvgLevel() const {int32 getGroupraidFirstLevel() const {void setGroupRaidLevels(int32 min_level, int32 max_level, int32 avg_level, int32 first_level) {
Notable Comments
- /*
- */
- // Can't verify these 3 values
- // 32768 - SF
- // 131072 - AoD
- /* JA: TODO Turn into R_World Rules */
- // need to attempt to clean this up and add xml comments, remove unused code, find a logical way to sort the functions maybe by get/set/process/add etc...
- ///
Sends the game time packet to all connected clients - ///
Set the rain levl in the zone - /// Level of rain in the zone 0.0 - 1.1 (rain starts at 0.76)