////////////////////////////////////////////////////////////////////////
// OpenTibia - an opensource roleplaying game
////////////////////////////////////////////////////////////////////////
// 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, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; 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, see .
////////////////////////////////////////////////////////////////////////
#ifndef __CONFIG_MANAGER__
#define __CONFIG_MANAGER__
#include "luascript.h"
extern "C"
{
#include
#include
#include
}
class ConfigManager
{
public:
ConfigManager();
virtual ~ConfigManager() {}
enum string_config_t
{
DUMMY_STR = 0,
CONFIG_FILE,
MAP_NAME,
HOUSE_RENT_PERIOD,
LOGIN_MSG,
FIRST_MSG,
SERVER_NAME,
OWNER_NAME,
OWNER_EMAIL,
URL,
LOCATION,
IP,
MOTD,
WORLD_TYPE,
SQL_HOST,
SQL_USER,
SQL_PASS,
SQL_DB,
DEFAULT_PRIORITY,
#ifdef MULTI_SQL_DRIVERS
SQL_TYPE,
#endif
SQL_FILE,
PASSWORD_TYPE,
MAP_AUTHOR,
RUNFILE,
OUT_LOG,
ERROR_LOG,
DATA_DIRECTORY,
PREFIX_CHANNEL_LOGS,
CORES_USED,
MAILBOX_DISABLED_TOWNS,
LAST_STRING_CONFIG /* this must be the last one */
};
enum number_config_t
{
LOGIN_TRIES = 0,
RETRY_TIMEOUT,
LOGIN_TIMEOUT,
LOGIN_PORT,
GAME_PORT,
ADMIN_PORT,
STATUS_PORT,
SQL_PORT,
SQL_KEEPALIVE,
MAX_PLAYERS,
PZ_LOCKED,
HUNTING_DURATION,
DEFAULT_DESPAWNRANGE,
DEFAULT_DESPAWNRADIUS,
RATE_SPAWN,
SPAWNPOS_X,
SPAWNPOS_Y,
SPAWNPOS_Z,
SPAWNTOWN_ID,
GLOBALSAVE_H,
START_LEVEL,
START_MAGICLEVEL,
HOUSE_PRICE,
HIGHSCORES_TOP,
MAX_MESSAGEBUFFER,
HIGHSCORES_UPDATETIME,
ACTIONS_DELAY_INTERVAL,
EX_ACTIONS_DELAY_INTERVAL,
CRITICAL_HIT_CHANCE,
PROTECTION_LEVEL,
PASSWORDTYPE,
STATUSQUERY_TIMEOUT,
LEVEL_TO_FORM_GUILD,
MIN_GUILDNAME,
MAX_GUILDNAME,
LEVEL_TO_BUY_HOUSE,
HOUSES_PER_ACCOUNT,
WHITE_SKULL_TIME,
RED_SKULL_LENGTH,
BLACK_SKULL_LENGTH,
MAX_VIOLATIONCOMMENT_SIZE,
NOTATIONS_TO_BAN,
WARNINGS_TO_FINALBAN,
WARNINGS_TO_DELETION,
BAN_LENGTH,
FINALBAN_LENGTH,
IPBANISHMENT_LENGTH,
MAX_PLAYER_SUMMONS,
FIELD_OWNERSHIP,
WORLD_ID,
EXTRA_PARTY_PERCENT,
EXTRA_PARTY_LIMIT,
MYSQL_READ_TIMEOUT,
MYSQL_WRITE_TIMEOUT,
PARTY_RADIUS_X,
PARTY_RADIUS_Y,
PARTY_RADIUS_Z,
LOGIN_PROTECTION,
PLAYER_DEEPNESS,
STAIRHOP_DELAY,
RATE_STAMINA_LOSS,
STAMINA_LIMIT_TOP,
STAMINA_LIMIT_BOTTOM,
BLESS_REDUCTION_BASE,
BLESS_REDUCTION_DECREAMENT,
BLESS_REDUCTION,
NICE_LEVEL,
EXPERIENCE_COLOR,
GUILD_PREMIUM_DAYS,
PUSH_CREATURE_DELAY,
DEATH_CONTAINER,
MAXIMUM_DOOR_LEVEL,
DEATH_ASSISTS,
RED_DAILY_LIMIT,
RED_WEEKLY_LIMIT,
RED_MONTHLY_LIMIT,
BLACK_DAILY_LIMIT,
BLACK_WEEKLY_LIMIT,
BLACK_MONTHLY_LIMIT,
BAN_DAILY_LIMIT,
BAN_WEEKLY_LIMIT,
BAN_MONTHLY_LIMIT,
BLACK_SKULL_DEATH_HEALTH,
BLACK_SKULL_DEATH_MANA,
DEATHLIST_REQUIRED_TIME,
EXPERIENCE_SHARE_ACTIVITY,
ITEMLIMIT_PROTECTIONZONE,
ITEMLIMIT_HOUSETILE,
SQUARE_COLOR,
LOOT_MESSAGE,
LOOT_MESSAGE_TYPE,
NAME_REPORT_TYPE,
LAST_NUMBER_CONFIG /* this must be the last one */
};
enum double_config_t
{
RATE_EXPERIENCE,
RATE_SKILL,
RATE_MAGIC,
RATE_LOOT,
PARTY_DIFFERENCE,
CRITICAL_HIT_MUL,
RATE_STAMINA_GAIN,
RATE_STAMINA_THRESHOLD,
RATE_STAMINA_ABOVE,
RATE_STAMINA_UNDER,
EFP_MIN_THRESHOLD,
EFP_MAX_THRESHOLD,
RATE_PVP_EXPERIENCE,
LAST_DOUBLE_CONFIG /* this must be the last one */
};
enum bool_config_t
{
GLOBALSAVE_ENABLED = 0,
START_CHOOSEVOC,
ON_OR_OFF_CHARLIST,
ONE_PLAYER_ON_ACCOUNT,
REMOVE_WEAPON_AMMO,
REMOVE_WEAPON_CHARGES,
REMOVE_RUNE_CHARGES,
RANDOMIZE_TILES,
SHUTDOWN_AT_GLOBALSAVE,
CLEAN_MAP_AT_GLOBALSAVE,
FREE_PREMIUM,
ADMIN_LOGS_ENABLED,
GENERATE_ACCOUNT_NUMBER,
BANK_SYSTEM,
REMOVE_PREMIUM_ON_INIT,
TELEPORT_SUMMONS,
TELEPORT_PLAYER_SUMMONS,
PVP_TILE_IGNORE_PROTECTION,
DISPLAY_CRITICAL_HIT,
ADVANCING_SKILL_LEVEL,
CLEAN_PROTECTED_ZONES,
SPELL_NAME_INSTEAD_WORDS,
EMOTE_SPELLS,
REPLACE_KICK_ON_LOGIN,
ALLOW_CLONES,
PREMIUM_FOR_PROMOTION,
SHOW_HEALING_DAMAGE,
BROADCAST_BANISHMENTS,
SAVE_GLOBAL_STORAGE,
INGAME_GUILD_MANAGEMENT,
HOUSE_BUY_AND_SELL,
HOUSE_NEED_PREMIUM,
HOUSE_RENTASPRICE,
HOUSE_PRICEASRENT,
ACCOUNT_MANAGER,
NAMELOCK_MANAGER,
ALLOW_CHANGEOUTFIT,
CANNOT_ATTACK_SAME_LOOKFEET,
AIMBOT_HOTKEY_ENABLED,
FORCE_CLOSE_SLOW_CONNECTION,
EXPERIENCE_STAGES,
BLESSING_ONLY_PREMIUM,
BED_REQUIRE_PREMIUM,
ALLOW_CHANGECOLORS,
LOGIN_ONLY_LOGINSERVER,
STOP_ATTACK_AT_EXIT,
DISABLE_OUTFITS_PRIVILEGED,
OPTIMIZE_DB_AT_STARTUP,
OLD_CONDITION_ACCURACY,
STORE_TRASH,
HOUSE_STORAGE,
TRUNCATE_LOGS,
TRACER_BOX,
STORE_DIRECTION,
DISPLAY_LOGGING,
STAMINA_BONUS_PREMIUM,
BAN_UNKNOWN_BYTES,
ALLOW_CHANGEADDONS,
GHOST_INVISIBLE_EFFECT,
SHOW_HEALING_DAMAGE_MONSTER,
CHECK_CORPSE_OWNER,
BUFFER_SPELL_FAILURE,
CONFIM_OUTDATED_VERSION,
PREMIUM_SKIP_WAIT,
GUILD_HALLS,
DEATH_LIST,
BIND_IP_ONLY,
GHOST_SPELL_EFFECTS,
PVPZONE_ADDMANASPENT,
USE_BLACK_SKULL,
ALLOW_FIGHTBACK,
LAST_BOOL_CONFIG /* this must be the last one */
};
bool load();
bool reload();
void startup() {m_startup = false;}
const std::string& getString(uint32_t _what) const;
bool getBool(uint32_t _what) const;
int32_t getNumber(uint32_t _what) const;
double getDouble(uint32_t _what) const;
bool setString(uint32_t _what, const std::string& _value);
bool setNumber(uint32_t _what, int32_t _value);
void getValue(const std::string& key, lua_State* _L) {LuaScriptInterface::getValue(key, L, _L);}
private:
std::string getGlobalString(const std::string& _identifier, const std::string& _default = "")
{
return LuaScriptInterface::getGlobalString(L, _identifier, _default);
}
bool getGlobalBool(const std::string& _identifier, bool _default = false)
{
return LuaScriptInterface::getGlobalBool(L, _identifier, _default);
}
int32_t getGlobalNumber(const std::string& _identifier, const int32_t _default = 0)
{
return LuaScriptInterface::getGlobalNumber(L, _identifier, _default);
}
double getGlobalDouble(const std::string& _identifier, const double _default = 0)
{
return LuaScriptInterface::getGlobalDouble(L, _identifier, _default);
}
bool m_loaded, m_startup;
lua_State* L;
static void moveValue(lua_State* fromL, lua_State* toL);
std::string m_confString[LAST_STRING_CONFIG];
bool m_confBool[LAST_BOOL_CONFIG];
int32_t m_confNumber[LAST_NUMBER_CONFIG];
double m_confDouble[LAST_DOUBLE_CONFIG];
};
#endif