2020-03-26 00:13:23 -07:00
|
|
|
/*
|
2022-07-07 09:10:14 -07:00
|
|
|
* Copyright (c) 2016-2022 Vera Visions LLC.
|
2020-03-26 00:13:23 -07:00
|
|
|
*
|
|
|
|
* Permission to use, copy, modify, and distribute this software for any
|
|
|
|
* purpose with or without fee is hereby granted, provided that the above
|
|
|
|
* copyright notice and this permission notice appear in all copies.
|
|
|
|
*
|
|
|
|
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
|
|
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
|
|
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
|
|
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
|
|
* WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
|
|
|
|
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
|
|
|
|
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
2022-07-07 09:10:14 -07:00
|
|
|
*/
|
2020-03-26 00:13:23 -07:00
|
|
|
|
2021-01-06 04:58:37 -08:00
|
|
|
/*
|
|
|
|
=================
|
|
|
|
Skill_Init
|
|
|
|
|
|
|
|
Usually just parses a config file. Make sure readcmd() is used here because
|
|
|
|
localcmd() does not parse files instantly - so monsters/weapons may be
|
|
|
|
initialized before the skill variables are read!
|
|
|
|
This will almost always result in them using default values, or (worst case) 0.
|
|
|
|
=================
|
|
|
|
*/
|
2020-07-24 16:58:12 -07:00
|
|
|
void
|
|
|
|
Skill_Init(void)
|
|
|
|
{
|
2024-03-02 00:40:08 -08:00
|
|
|
string mapSkillFile = sprintf("maps/%s_skl.cfg", serverkey("mapname"));
|
|
|
|
|
2024-02-21 21:08:57 -08:00
|
|
|
Skill_ParseConfig("cfg/skill_manifest.cfg");
|
2024-03-02 00:40:08 -08:00
|
|
|
|
|
|
|
if (FileExists(mapSkillFile)) {
|
|
|
|
Skill_ParseConfig(mapSkillFile);
|
|
|
|
}
|
2020-07-24 16:58:12 -07:00
|
|
|
}
|
|
|
|
|
2021-01-06 04:58:37 -08:00
|
|
|
/*
|
|
|
|
=================
|
|
|
|
Skill_GetValue
|
|
|
|
|
2024-02-21 21:08:57 -08:00
|
|
|
Return a skill variable's value or return a defaultValue if it's undefined.
|
2021-01-06 04:58:37 -08:00
|
|
|
=================
|
|
|
|
*/
|
2020-07-26 16:19:53 -07:00
|
|
|
float
|
2024-02-21 21:08:57 -08:00
|
|
|
Skill_GetValue(string variable, float defaultValue)
|
2020-03-26 00:13:23 -07:00
|
|
|
{
|
|
|
|
float skill = cvar("skill");
|
2023-11-18 19:58:29 -08:00
|
|
|
|
|
|
|
if (skill == 0)
|
|
|
|
skill = 2; /* default to medium */
|
|
|
|
|
2020-12-11 16:54:00 -08:00
|
|
|
float val = fabs(cvar(sprintf("sk_%s%d", variable, skill)));
|
2024-02-21 21:08:57 -08:00
|
|
|
return (val == 0) ? defaultValue : val;
|
2020-03-26 00:13:23 -07:00
|
|
|
}
|
2023-05-27 11:58:34 -07:00
|
|
|
|
|
|
|
/* input string is potentially a skill variable */
|
|
|
|
float
|
|
|
|
Skill_GetDefValue(string variable)
|
|
|
|
{
|
|
|
|
if (substring(variable, 0, 6) == "skill:") {
|
|
|
|
return Skill_GetValue(substring(variable, 6, -1), 0);
|
|
|
|
}
|
|
|
|
|
|
|
|
return stof(variable);
|
2024-02-21 21:08:57 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
bool
|
|
|
|
Skill_ParseConfig(string fileName)
|
|
|
|
{
|
|
|
|
string tempString;
|
|
|
|
filestream configFile = fopen(fileName, FILE_READ);
|
|
|
|
|
|
|
|
if (configFile < 0) {
|
2024-03-02 00:40:08 -08:00
|
|
|
NSWarning("Unable to exec %S for parsing.", fileName);
|
2024-02-21 21:08:57 -08:00
|
|
|
return (false);
|
|
|
|
}
|
|
|
|
|
|
|
|
while ((tempString = fgets(configFile))) {
|
|
|
|
int argCount = (int)tokenize_console(tempString);
|
|
|
|
string firstArg = argv(0);
|
|
|
|
|
|
|
|
if (argCount == 2i) {
|
|
|
|
if (firstArg == "exec") {
|
|
|
|
Skill_ParseConfig(sprintf("cfg/%s", argv(1)));
|
|
|
|
}
|
|
|
|
} else if (argCount == 3i) {
|
|
|
|
if (firstArg == "set" || firstArg == "seta")
|
|
|
|
cvar_set(argv(1), argv(2));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
fclose(configFile);
|
|
|
|
return (true);
|
2023-05-27 11:58:34 -07:00
|
|
|
}
|