소스 검색

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 달 전
부모
커밋
69df7536bf
7개의 변경된 파일51개의 추가작업 그리고 39개의 파일을 삭제
  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)
 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)
 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.
 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
@@ -407,45 +409,45 @@ Disables the damage display on a map.
 
 ---------------------------------------
 
-*weapon_damage_rate	<rate>
+*weapon_damage_rate	{<rate>}
 
 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.
-<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.
-<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).
-<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).
-<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.
-<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,              },
 	{ "guild_emperium_check",               &battle_config.guild_emperium_check,            1,      0,      1,              },
 	{ "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_rename",                         &battle_config.pet_rename,                      0,      0,      1,              },
 	{ "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 emergency_call;
 	int guild_aura;
+	int pc_invincible_time;
 
 	int pet_catch_rate;
 	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);
 
-	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 )
 		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);
 			break;
 		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_MAGIC_DAMAGE_RATE:
 		case MF_MISC_DAMAGE_RATE:
 		case MF_LONG_DAMAGE_RATE:
 		case MF_SHORT_DAMAGE_RATE:
-		case MF_FLEE_PENALTY:
 			if (status) {
 				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
 				mapdata->setMapFlag(mapflag, false);
 			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;
 		}
 
-		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_MAGIC_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: {
 				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);
 			}