Browse Source

Add back player_invincible_time battle config
* Resolves an issue where the invincible time as not getting applied to maps without the MF_INVINCIBLE_TIME flag.
* Move the logic checks for MF_INVINCIBLE_TIME, MF_FLEE_PENALTY, MF_WEAPON_DAMAGE_RATE, MF_MAGIC_DAMAGE_RATE, MF_MISC_DAMAGE_RATE, MF_LONG_DAMAGE_RATE, and MF_SHORT_DAMAGE_RATE to map_setmapflag_sub() from npc_parse_mapflag().
* Update the mapflag documentation.

aleos 8 months ago
parent
commit
69df7536bf
7 changed files with 51 additions and 39 deletions
  1. 5 0
      conf/battle/player.conf
  2. 15 13
      doc/mapflags.txt
  3. 1 0
      src/map/battle.cpp
  4. 1 0
      src/map/battle.hpp
  5. 6 2
      src/map/clif.cpp
  6. 19 2
      src/map/map.cpp
  7. 4 22
      src/map/npc.cpp

+ 5 - 0
conf/battle/player.conf

@@ -46,6 +46,11 @@ quest_skill_reset: no
 // You must have basic skills to be able to sit, trade, form a party or create a chatroom? (Note 1)
 // You must have basic skills to be able to sit, trade, form a party or create a chatroom? (Note 1)
 basic_skill_check: yes
 basic_skill_check: yes
 
 
+// When teleporting, or spawning to a map, how long before a monster sees you if you don't move? (time is in milliseconds)
+// That is, when you go to a map and don't move, how long before the monsters will notice you.
+// If you attack a monster, it will attack you back regardless of this setting.
+player_invincible_time: 5000
+
 // The time interval for HP to restore naturally. (in milliseconds)
 // The time interval for HP to restore naturally. (in milliseconds)
 natural_healhp_interval: 6000
 natural_healhp_interval: 6000
 
 

+ 15 - 13
doc/mapflags.txt

@@ -388,11 +388,13 @@ prtg_cas01	mapflag	skill_duration	HT_ANKLESNARE,400
 
 
 ---------------------------------------
 ---------------------------------------
 
 
-*invincible_time duration
+*invincible_time {<duration>}
 
 
 Sets the duration (in milliseconds) for when a player loads onto a map with how long they are invincible for.
 Sets the duration (in milliseconds) for when a player loads onto a map with how long they are invincible for.
 The duration is cancelled if the player walks or interacts in any fashion.
 The duration is cancelled if the player walks or interacts in any fashion.
 
 
+Duration defaults to 5 seconds if the value is not specified.
+
 ---------------------------------------
 ---------------------------------------
 
 
 *noknockback
 *noknockback
@@ -407,45 +409,45 @@ Disables the damage display on a map.
 
 
 ---------------------------------------
 ---------------------------------------
 
 
-*weapon_damage_rate	<rate>
+*weapon_damage_rate	{<rate>}
 
 
 Weapon skills damage adjustments.
 Weapon skills damage adjustments.
-<rate> is given as a percentage (i.e. 60 = 60%).
+<rate> is given as a percentage (i.e. 60 = 60%). Defaulted to 100.
 
 
 ---------------------------------------
 ---------------------------------------
 
 
-*magic_damage_rate	<rate>
+*magic_damage_rate	{<rate>}
 
 
 Magic skills damage adjustments.
 Magic skills damage adjustments.
-<rate> is given as a percentage (i.e. 60 = 60%).
+<rate> is given as a percentage (i.e. 60 = 60%). Defaulted to 100.
 
 
 ---------------------------------------
 ---------------------------------------
 
 
-*misc_damage_rate	<rate>
+*misc_damage_rate	{<rate>}
 
 
 Misc skills damage adjustments.
 Misc skills damage adjustments.
-<rate> is given as a percentage (i.e. 60 = 60%).
+<rate> is given as a percentage (i.e. 60 = 60%). Defaulted to 100.
 
 
 ---------------------------------------
 ---------------------------------------
 
 
-*short_damage_rate	<rate>
+*short_damage_rate	{<rate>}
 
 
 Melee damage adjustments (non-skill).
 Melee damage adjustments (non-skill).
-<rate> is given as a percentage (i.e. 60 = 60%).
+<rate> is given as a percentage (i.e. 60 = 60%). Defaulted to 100.
 
 
 ---------------------------------------
 ---------------------------------------
 
 
-*long_damage_rate	<rate>
+*long_damage_rate	{<rate>}
 
 
 Ranged damage adjustments (non-skill).
 Ranged damage adjustments (non-skill).
-<rate> is given as a percentage (i.e. 60 = 60%).
+<rate> is given as a percentage (i.e. 60 = 60%). Defaulted to 100.
 
 
 ---------------------------------------
 ---------------------------------------
 
 
-*flee_penalty	<rate>
+*flee_penalty	{<rate>}
 
 
 Flee penalty applied to players.
 Flee penalty applied to players.
-<rate> is given as a percentage (i.e. 60 = 60%).
+<rate> is given as a percentage (i.e. 60 = 60%). Defaulted to 20.
 
 
 ---------------------------------------
 ---------------------------------------
 
 

+ 1 - 0
src/map/battle.cpp

@@ -10988,6 +10988,7 @@ static const struct _battle_data {
 	{ "basic_skill_check",                  &battle_config.basic_skill_check,               1,      0,      1,              },
 	{ "basic_skill_check",                  &battle_config.basic_skill_check,               1,      0,      1,              },
 	{ "guild_emperium_check",               &battle_config.guild_emperium_check,            1,      0,      1,              },
 	{ "guild_emperium_check",               &battle_config.guild_emperium_check,            1,      0,      1,              },
 	{ "guild_exp_limit",                    &battle_config.guild_exp_limit,                 50,     0,      99,             },
 	{ "guild_exp_limit",                    &battle_config.guild_exp_limit,                 50,     0,      99,             },
+	{ "player_invincible_time",             &battle_config.pc_invincible_time,              5000,   0,      INT_MAX,        },
 	{ "pet_catch_rate",                     &battle_config.pet_catch_rate,                  100,    0,      INT_MAX,        },
 	{ "pet_catch_rate",                     &battle_config.pet_catch_rate,                  100,    0,      INT_MAX,        },
 	{ "pet_rename",                         &battle_config.pet_rename,                      0,      0,      1,              },
 	{ "pet_rename",                         &battle_config.pet_rename,                      0,      0,      1,              },
 	{ "pet_friendly_rate",                  &battle_config.pet_friendly_rate,               100,    0,      INT_MAX,        },
 	{ "pet_friendly_rate",                  &battle_config.pet_friendly_rate,               100,    0,      INT_MAX,        },

+ 1 - 0
src/map/battle.hpp

@@ -240,6 +240,7 @@ struct Battle_Config
 	int guild_skill_relog_type;
 	int guild_skill_relog_type;
 	int emergency_call;
 	int emergency_call;
 	int guild_aura;
 	int guild_aura;
+	int pc_invincible_time;
 
 
 	int pet_catch_rate;
 	int pet_catch_rate;
 	int pet_rename;
 	int pet_rename;

+ 6 - 2
src/map/clif.cpp

@@ -10726,8 +10726,12 @@ void clif_parse_LoadEndAck(int fd,map_session_data *sd)
 
 
 	struct map_data *mapdata = map_getmapdata(sd->bl.m);
 	struct map_data *mapdata = map_getmapdata(sd->bl.m);
 
 
-	if (mapdata->getMapFlag(MF_INVINCIBLE_TIME) > 0)
-		pc_setinvincibletimer(sd, mapdata->getMapFlag(MF_INVINCIBLE_TIME));
+	if(battle_config.pc_invincible_time > 0) {
+		if (mapdata->getMapFlag(MF_INVINCIBLE_TIME) > 0)
+			pc_setinvincibletimer(sd, mapdata->getMapFlag(MF_INVINCIBLE_TIME));
+		else
+			pc_setinvincibletimer(sd,battle_config.pc_invincible_time);
+	}
 
 
 	if( mapdata->users++ == 0 && battle_config.dynamic_mobs )
 	if( mapdata->users++ == 0 && battle_config.dynamic_mobs )
 		map_spawnmobs(sd->bl.m);
 		map_spawnmobs(sd->bl.m);

+ 19 - 2
src/map/map.cpp

@@ -5381,16 +5381,33 @@ bool map_setmapflag_sub(int16 m, enum e_mapflag mapflag, bool status, union u_ma
 			mapdata->setMapFlag(mapflag, status);
 			mapdata->setMapFlag(mapflag, status);
 			break;
 			break;
 		case MF_INVINCIBLE_TIME:
 		case MF_INVINCIBLE_TIME:
+			if (status) {
+				nullpo_retr(false, args);
+
+				// Default is 5 seconds.
+				mapdata->setMapFlag(mapflag, ((args->flag_val <= 0) ? 5000 : args->flag_val));
+			} else
+				mapdata->setMapFlag(mapflag, false);
+			break;
+		case MF_FLEE_PENALTY:
+			if (status) {
+				nullpo_retr(false, args);
+
+				// Default to 20%.
+				mapdata->setMapFlag(mapflag, ((args->flag_val <= 0) ? 20 : args->flag_val));
+			} else
+				mapdata->setMapFlag(mapflag, false);
+			break;
 		case MF_WEAPON_DAMAGE_RATE:
 		case MF_WEAPON_DAMAGE_RATE:
 		case MF_MAGIC_DAMAGE_RATE:
 		case MF_MAGIC_DAMAGE_RATE:
 		case MF_MISC_DAMAGE_RATE:
 		case MF_MISC_DAMAGE_RATE:
 		case MF_LONG_DAMAGE_RATE:
 		case MF_LONG_DAMAGE_RATE:
 		case MF_SHORT_DAMAGE_RATE:
 		case MF_SHORT_DAMAGE_RATE:
-		case MF_FLEE_PENALTY:
 			if (status) {
 			if (status) {
 				nullpo_retr(false, args);
 				nullpo_retr(false, args);
 
 
-				mapdata->setMapFlag(mapflag, ((args->flag_val < 0) ? 0 : args->flag_val));
+				// Default to 100%.
+				mapdata->setMapFlag(mapflag, ((args->flag_val <= 0) ? 100 : args->flag_val));
 			} else
 			} else
 				mapdata->setMapFlag(mapflag, false);
 				mapdata->setMapFlag(mapflag, false);
 			break;
 			break;

+ 4 - 22
src/map/npc.cpp

@@ -5574,26 +5574,8 @@ const char* npc_parse_mapflag(char* w1, char* w2, char* w3, char* w4, const char
 			break;
 			break;
 		}
 		}
 
 
-		case MF_INVINCIBLE_TIME: {
-				union u_mapflag_args args = {};
-
-				if (sscanf(w4, "%11d", &args.flag_val) < 1)
-					args.flag_val = 5000;
-
-				map_setmapflag_sub(m, mapflag, state, &args);
-			}
-			break;
-
-		case MF_FLEE_PENALTY: {
-				union u_mapflag_args args = {};
-
-				if (sscanf(w4, "%11d", &args.flag_val) < 1)
-					args.flag_val = 20;
-
-				map_setmapflag_sub(m, mapflag, state, &args);
-			}
-			break;
-
+		case MF_INVINCIBLE_TIME:
+		case MF_FLEE_PENALTY:
 		case MF_WEAPON_DAMAGE_RATE:
 		case MF_WEAPON_DAMAGE_RATE:
 		case MF_MAGIC_DAMAGE_RATE:
 		case MF_MAGIC_DAMAGE_RATE:
 		case MF_MISC_DAMAGE_RATE:
 		case MF_MISC_DAMAGE_RATE:
@@ -5601,8 +5583,8 @@ const char* npc_parse_mapflag(char* w1, char* w2, char* w3, char* w4, const char
 		case MF_SHORT_DAMAGE_RATE: {
 		case MF_SHORT_DAMAGE_RATE: {
 				union u_mapflag_args args = {};
 				union u_mapflag_args args = {};
 
 
-				if (sscanf(w4, "%11d", &args.flag_val) < 1)
-					args.flag_val = 100;
+				if (state)
+					sscanf(w4, "%11d", &args.flag_val);
 
 
 				map_setmapflag_sub(m, mapflag, state, &args);
 				map_setmapflag_sub(m, mapflag, state, &args);
 			}
 			}