mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-11 16:51:29 +00:00
124 lines
2.9 KiB
C++
124 lines
2.9 KiB
C++
/**
|
|
* 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
|
|
*
|
|
*/
|
|
|
|
#ifndef EQEMU_NPC_SCALE_MANAGER_H
|
|
#define EQEMU_NPC_SCALE_MANAGER_H
|
|
|
|
#include "npc.h"
|
|
#include "zone.h"
|
|
extern Zone* zone;
|
|
|
|
class NpcScaleManager {
|
|
public:
|
|
struct global_npc_scale {
|
|
int8 type;
|
|
uint8 level;
|
|
uint32 zone_id;
|
|
uint16 instance_version;
|
|
int ac;
|
|
int64 hp;
|
|
int accuracy;
|
|
int slow_mitigation;
|
|
int attack;
|
|
int strength;
|
|
int stamina;
|
|
int dexterity;
|
|
int agility;
|
|
int intelligence;
|
|
int wisdom;
|
|
int charisma;
|
|
int magic_resist;
|
|
int cold_resist;
|
|
int fire_resist;
|
|
int poison_resist;
|
|
int disease_resist;
|
|
int corruption_resist;
|
|
int physical_resist;
|
|
int min_dmg;
|
|
int max_dmg;
|
|
int64 hp_regen_rate;
|
|
int64 hp_regen_per_second;
|
|
int attack_delay;
|
|
int spell_scale;
|
|
int heal_scale;
|
|
uint32 avoidance;
|
|
int heroic_strikethrough;
|
|
|
|
std::string special_abilities;
|
|
};
|
|
|
|
std::vector<std::string> scaling_stats = {
|
|
"ac",
|
|
"max_hp",
|
|
"accuracy",
|
|
"slow_mitigation",
|
|
"atk",
|
|
"str",
|
|
"sta",
|
|
"dex",
|
|
"agi",
|
|
"int",
|
|
"wis",
|
|
"cha",
|
|
"mr",
|
|
"cr",
|
|
"fr",
|
|
"pr",
|
|
"dr",
|
|
"cr",
|
|
"pr",
|
|
"min_hit",
|
|
"max_hit",
|
|
"hp_regen",
|
|
"hp_regen_per_second",
|
|
"attack_delay",
|
|
"spell_scale",
|
|
"heal_scale",
|
|
"avoidance",
|
|
"heroic_strikethrough",
|
|
"special_abilities"
|
|
};
|
|
|
|
void ScaleNPC(NPC* npc, bool always_scale = false, bool override_special_abilities = false);
|
|
void ResetNPCScaling(NPC* npc);
|
|
bool IsAutoScaled(NPC* npc);
|
|
bool LoadScaleData();
|
|
|
|
global_npc_scale GetGlobalScaleDataForTypeLevel(
|
|
int8 npc_type,
|
|
uint8 npc_level,
|
|
uint32 zone_id,
|
|
uint16 instance_version
|
|
);
|
|
|
|
std::map<std::tuple<int8, uint8, uint32, uint16>, global_npc_scale> npc_global_base_scaling_data;
|
|
|
|
int8 GetNPCScalingType(NPC * &npc);
|
|
std::string GetNPCScalingTypeName(NPC * &npc);
|
|
bool ApplyGlobalBaseScalingToNPCStatically(NPC * &npc);
|
|
bool ApplyGlobalBaseScalingToNPCDynamically(NPC * &npc);
|
|
|
|
uint32 GetClassLevelDamageMod(uint32 level, uint32 npc_class);
|
|
};
|
|
|
|
extern NpcScaleManager *npc_scale_manager;
|
|
|
|
#endif //EQEMU_NPC_SCALE_MANAGER_H
|