Ну ты пишешь, как я понял, про мертвую зону. А у меня проблема в том, что даже над землей, не долетев из-за предела/падая с верхнего абиса до ока, ну 60 метров выставил на тесты предел, на 61 метре умираешь. Если вставать там же саморесом - эффект 1в1 как в мертвой зоне - встал и упал моментально. Если вставать у ники/кибелиска/в данже - встаешь на респе и сразу же умираешь там. Второй раз встаешь уже нормально
Насчет ока в старом геодвиге идет аишка как только влетаешь тебе смерть, в новом геодвиге должно дамажить скиллом при входе в око и входе на территорию крепы чужой расы. Походу когда там умираешь тебя не сразу убирает с ObserveController'a и при респе он еще думает что ты в оке\крепе где нельзя вот и килляет
Просто предел падения багнут. Если умереть от предела падения, то нельзя встать на месте, а на респе умираешь повторно.
Тут как раз скорее всего при респе кто-то думает что персонаж еще падает и убивает его снова. Даже когда он уже у кибелиска находится, может не получает новых координат?
Я уже стул прожжег неделю эту херню копать, как можно было такое начудить.. Все вышеописанные файлы - дефолтные лайты 2.7
StatFunctions? Вот он отличается от лайтов: Код: public static boolean calculateFallDamage(Player player, float distance, boolean stoped) { if (player.isInvul()) { return false; } if (distance >= FallDamageConfig.MAXIMUM_DISTANCE_DAMAGE || !stoped) { player.getController().onStopMove(); player.getFlyController().onStopGliding(false); player.getLifeStats().reduceHp(player.getLifeStats().getMaxHp() + 1, player); return true; } else if (distance >= FallDamageConfig.MINIMUM_DISTANCE_DAMAGE) { float dmgPerMeter = player.getLifeStats().getMaxHp() * FallDamageConfig.FALL_DAMAGE_PERCENTAGE / 100f; int damage = (int) (distance * dmgPerMeter); player.getLifeStats().reduceHp(damage, player); PacketSendUtility.sendPacket(player, new SM_ATTACK_STATUS(player, SM_ATTACK_STATUS.TYPE.FALL_DAMAGE, 0, -damage)); } return false; } Лайты: Код: public static boolean calculateFallDamage(Player player, float distance, boolean stoped) { if (player.isInvul()) { return false; } if (distance >= FallDamageConfig.MAXIMUM_DISTANCE_DAMAGE || !stoped) { player.getController().onStopMove(); player.getFlyController().onStopGliding(false); //TODO [AT] don't call onDie directly - better reduce HP! player.getController().onDie(player, false); if (player.isInInstance()) PlayerReviveService.instanceRevive(player); else if (player.getKisk() != null) PlayerReviveService.kiskRevive(player); else PlayerReviveService.bindRevive(player); return true; } else if (distance >= FallDamageConfig.MINIMUM_DISTANCE_DAMAGE) { float dmgPerMeter = player.getLifeStats().getMaxHp() * FallDamageConfig.FALL_DAMAGE_PERCENTAGE / 100f; int damage = (int) (distance * dmgPerMeter); player.getLifeStats().reduceHp(damage, player); PacketSendUtility.sendPacket(player, new SM_ATTACK_STATUS(player, SM_ATTACK_STATUS.TYPE.FALL_DAMAGE, 0, -damage)); } return false; } Сейчас пошаманю
Я так понимаю у них корректное воскрешение в падении моей идеей реализовано, накидывать инвул во время реса? if (player.isInvul()) { return false; }