summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--conf/battle/gm.conf4
-rw-r--r--src/map/atcommand.c25
-rw-r--r--src/map/battle.c3
-rw-r--r--src/map/battle.h3
4 files changed, 22 insertions, 13 deletions
diff --git a/conf/battle/gm.conf b/conf/battle/gm.conf
index 21b54f386..d345b3978 100644
--- a/conf/battle/gm.conf
+++ b/conf/battle/gm.conf
@@ -56,6 +56,10 @@ gm_kick_chat: no
// set to 'Yes', Normal players (gm level 0) can never use a GM command even if you set the command level to 0.
atcommand_gm_only: no
+// (@) @allstats/@str/@agi/@vit/@int/@dex/@luk
+// allow gms to bypass the maximum stat parameter? ( if yes gm stats can go up to 32k ) default: no
+atcommand_max_stat_bypass: no
+
// Is the character of a GM account set as the object of a display by @ command etc. or not?
hide_GM_session: no
diff --git a/src/map/atcommand.c b/src/map/atcommand.c
index c0a834593..e0fb1c309 100644
--- a/src/map/atcommand.c
+++ b/src/map/atcommand.c
@@ -3065,7 +3065,7 @@ ACMD_FUNC(zeny)
*------------------------------------------*/
ACMD_FUNC(param)
{
- int i, value = 0, new_value;
+ int i, value = 0, new_value, max;
const char* param[] = { "str", "agi", "vit", "int", "dex", "luk" };
short* status[6];
//we don't use direct initialization because it isn't part of the c standard.
@@ -3094,16 +3094,16 @@ ACMD_FUNC(param)
status[4] = &sd->status.dex;
status[5] = &sd->status.luk;
- if(value < 0 && *status[i] <= -value)
- {
- new_value = 1;
- }
- else if(SHRT_MAX - *status[i] < value)
- {
- new_value = SHRT_MAX;
- }
+ if( battle_config.atcommand_max_stat_bypass )
+ max = SHRT_MAX;
else
- {
+ max = pc_maxparameter(sd);
+
+ if(value < 0 && *status[i] <= -value) {
+ new_value = 1;
+ } else if(max - *status[i] < value) {
+ new_value = max;
+ } else {
new_value = *status[i] + value;
}
@@ -3145,7 +3145,10 @@ ACMD_FUNC(stat_all)
value = pc_maxparameter(sd);
max = pc_maxparameter(sd);
} else {
- max = SHRT_MAX;
+ if( battle_config.atcommand_max_stat_bypass )
+ max = SHRT_MAX;
+ else
+ max = pc_maxparameter(sd);
}
count = 0;
diff --git a/src/map/battle.c b/src/map/battle.c
index 10105ba94..e12caaef8 100644
--- a/src/map/battle.c
+++ b/src/map/battle.c
@@ -4580,9 +4580,10 @@ static const struct _battle_data {
{ "bg_misc_attack_damage_rate", &battle_config.bg_misc_damage_rate, 60, 0, INT_MAX, },
{ "bg_flee_penalty", &battle_config.bg_flee_penalty, 20, 0, INT_MAX, },
/**
- * RR-Specific
+ * rAthena
**/
{ "max_third_parameter", &battle_config.max_third_parameter, 20, 0, INT_MAX, },
+ { "atcommand_max_stat_bypass", &battle_config.atcommand_max_stat_bypass, 0, 0, 100, },
};
diff --git a/src/map/battle.h b/src/map/battle.h
index a64c81041..41ff70850 100644
--- a/src/map/battle.h
+++ b/src/map/battle.h
@@ -497,8 +497,9 @@ extern struct Battle_Config
int bg_magic_damage_rate;
int bg_misc_damage_rate;
int bg_flee_penalty;
- //[RR]
+ // rAthena
int max_third_parameter;
+ int atcommand_max_stat_bypass;
} battle_config;
void do_init_battle(void);