diff --git a/node/server.js b/node/server.js index 13504bc..456307b 100644 --- a/node/server.js +++ b/node/server.js @@ -166,6 +166,7 @@ var mode = { all_smart: 1, prevent_external: 0, // for "test" / "hardcore" pvp_level_gap: 0, // have to be within 10 level to attack + fear_affects_heal: 1, // when feared heal output is lowered }; var events = { // SEASONS @@ -1418,20 +1419,30 @@ function calculate_player_stats(player) { (player.level > 20 && 0.04) || 0.05; - var excess = max( + player.fear = Math.max( 0, - max(player.targets_p - player.courage, max(player.targets_m - player.mcourage, player.targets_u - player.pcourage)), + player.targets_p - player.courage, + player.targets_m - player.mcourage, + player.targets_u - player.pcourage, ); - var sredux = [0, 20, 40, 70, 80, 90, 100]; - player.speed -= sredux[min(sredux.length - 1, excess)]; - if (excess > 2) { - player.attack = round(player.attack * 0.2); - } else if (excess > 1) { - player.attack = round(player.attack * 0.4); - } else if (excess) { - player.attack = round(player.attack * 0.6); + const sredux = [0, 20, 40, 70, 80, 90, 100]; + player.speed -= sredux[Math.min(sredux.length - 1, player.fear)]; + if (player.fear > 2) { + player.attack = Math.round(player.attack * 0.2); + if (mode.fear_affects_heal) { + player.heal = Math.round(player.heal * 0.2); + } + } else if (player.fear > 1) { + player.attack = Math.round(player.attack * 0.4); + if (mode.fear_affects_heal) { + player.heal = Math.round(player.heal * 0.4); + } + } else if (player.fear) { + player.attack = Math.round(player.attack * 0.6); + if (mode.fear_affects_heal) { + player.heal = Math.round(player.heal * 0.6); + } } - player.fear = excess; if (player.map == "winterland") { player.speed *= 0.95;