Сообщений: 78
Тем: 16
Зарегистрирован: Mar 2013
Репутация:
143
Сборка Phenix/Open, с полгода назад все работало, а вчера на сервере владельцы замков решили поменяться замками и выяснилось, что при выделении артефакта и попытке использовать скилл "печать правителя" ничего не происходит. Совершенно ничего. Сервер ничего не пишет.
Сбой скорее всего закрался в БД, т.к. доступа к ядру у меня нет.
Предпринял: Сделал частичный вайп ивента 7 печатий (сегодня в 18-00 закончится первый период после вайпа), Обнулил результаты тв (вернул флаги в замки), снизил уровни кланов с 11-го до 10-го (повышал я, через админку).
Какая еще может быть причина того, что КЛ не может использовать скилл "Печать правителя" при осаде замка?
Заранее благодарен за помощь!
P.S. В data/ нет текстового файла world_regions.txt для удаления.
Сообщений: 78
Тем: 16
Зарегистрирован: Mar 2013
Репутация:
143
05-20-2017, 09:49 PM
(Сообщение последний раз редактировалось: 05-21-2017, 10:31 AM ntking.)
Появились подробности: Выключил геодату, персонаж куда-то ломится, потом начинает кастовать, замок переходит к его клану. Но ведь раньше работало и с включенной геодатой. Что удалось найти в шаре, содержимое TakeCastle:
Код: public class TakeCastle extends L2Skill
{
@Override
public boolean checkCondition(L2Character activeChar, L2Character target, boolean forceUse, boolean dontMove, boolean first)
{
if(!super.checkCondition(activeChar, target, forceUse, dontMove, first))
return false;
if(activeChar == null || !activeChar.isPlayer())
return false;
L2Player player = (L2Player) activeChar;
if(player.getClan() == null || !player.isClanLeader())
return false;
Siege siege = SiegeManager.getSiege(activeChar, true);
if(siege == null || siege.getSiegeUnit().getType() != ResidenceType.Castle)
return false;
if(siege.getAttackerClan(player.getClan()) == null)
return false;
if(player.isMounted())
return false;
if(!player.isInRangeZ(target, 120))
{
player.sendPacket(Msg.YOUR_TARGET_IS_OUT_OF_RANGE);
return false;
}
if(first)
for(SiegeClan sc : siege.getDefenderClans().values())
{
L2Clan clan = sc.getClan();
if(clan != null)
clan.broadcastToOnlineMembers(Msg.THE_OPPONENT_CLAN_HAS_BEGUN_TO_ENGRAVE_THE_RULER);
}
return true;
}
public TakeCastle(StatsSet set)
{
super(set);
}
@Override
public void useSkill(L2Character activeChar, GArray<L2Character> targets)
{
for(L2Character target : targets)
if(target != null)
{
if(!target.isArtefact())
continue;
L2Player player = (L2Player) activeChar;
Siege siege = SiegeManager.getSiege(activeChar, true);
if(siege != null)
{
siege.announceToPlayer(new SystemMessage(SystemMessage.CLAN_S1_HAS_SUCCEEDED_IN_ENGRAVING_THE_RULER).addString(player.getClan().getName()), false, true);
siege.Engrave(player.getClan(), target.getObjectId());
}
}
}
}
cast_range у скилла 246 "Печать правителя" - 150, с запасом.
На скрине видно, что артефакт и персонаж очень близко:
Содержимое конфига геодаты не менялось:
Код: #===================================================#
# Даный файл является конфигуратором геодаты. #
#===================================================#
GeodataEnabled = True
GeodataDebug = false
PathfindDebug = false
MultiThreadedLoad = false
GeoFirstX = 11
GeoFirstY = 10
GeoLastX = 26
GeoLastY = 26
# Паттерн для файлов геодаты.
# Файлы что подойдут под паттерн будут считатся файлами геодаты
GeoFilesPattern = (\\d{2}_\\d{2})\\.l2j
# Обрабатывать ли двери в геодате
# Настройка влияет на ГеймСервер
AllowDoors = True
# Разрешать игроку падать с горизонтальной стены если он кликает по самой стене
AllowFallFromWalls = False
# Движение клавиатурой (стрелочками)
AllowMoveWithKeyboard = True
# оптимизация размещение гео в памяти, экономит около 150Мб памяти
# для оптимизации нужно сначала нужно сгенерировать карты совпадений
# java -Xms1g -Xmx1400m -Xmn192m -XX:PermSize=16m -cp l2openserver.jar l2open.debug.benchmark.GeoMatchesGenerator
CompactGeoData = False
# Мобы срезают углы, за счет чего нагрузка падает в несколько раз
# Могут застревать на поворотах и некрасиво обходить деревья
SimplePathFindForMobs = True
# Диагональный поиск. Возможно тратит больше ресурсов.
PathFindDiagonal = True
# Сглаживает путь.
# Стоит отключать только для дебага.
PathClean = True
# Сильно ускоряет поиск, как влияет на качество неизвестно
# 0 - отключить, 1 - только начало пути, 2 - начало и конец пути
PathFindBoost = 2
# Максимальная высота ступеньки для поиска пути
PathFindMaxZDiff = 32
# Максимальная высота ступеньки для геодаты
MaxZDiff = 64
# Минимальная разница между слоями
MinLayerHeight = 64
# Базовый вес ячейки
Weight0 = 0.5
# Вес "плохих" клеток первого плана
Weight1 = 2
# Вес "плохих" клеток второго плана
Weight2 = 1
# Настройка буфферов для поиска пути
PathFindBuffers = 8x100;8x128;8x192;4x256;2x320;2x384;1x500
# Прибавка к Z для пакетов
ClientZShift = 16
# Глубина видимости (количество видимых регионов). От 1 и более.
ViewOffset = 1
# Размер региона. Менять с учетом ViewOffset.
DivBy = 2048
DivByForZ = 1024
# Номера квадратов геодаты с вертикальным разделением регионов (густонаселенные многоэтажные локации)
# Cruma Tower, Swamp of Screams, Garden of Eva, Tower of Insolence, Forge of the Gods, Imperial Tomb, Giant's Cave
VerticalSplitRegions = 20_21;22_16;22_25;23_18;25_14;25_15;25_19;24_23
# Отложенный спавн
DelayedSpawn = False
Попробовал выстрелить по артефакту из лука или нанести магический урон через CTRL - не получается. Возможно именно в этом причина сбоя в работе скилла. Ваши советы:
Сообщений: 16
Тем: 2
Зарегистрирован: Dec 2015
Репутация:
0
ntking Написал:Появились подробности: Выключил геодату, персонаж куда-то ломится, потом начинает кастовать, замок переходит к его клану. Но ведь раньше работало и с включенной геодатой. Что удалось найти в шаре, содержимое TakeCastle:
Код: public class TakeCastle extends L2Skill
{
@Override
public boolean checkCondition(L2Character activeChar, L2Character target, boolean forceUse, boolean dontMove, boolean first)
{
if(!super.checkCondition(activeChar, target, forceUse, dontMove, first))
return false;
if(activeChar == null || !activeChar.isPlayer())
return false;
L2Player player = (L2Player) activeChar;
if(player.getClan() == null || !player.isClanLeader())
return false;
Siege siege = SiegeManager.getSiege(activeChar, true);
if(siege == null || siege.getSiegeUnit().getType() != ResidenceType.Castle)
return false;
if(siege.getAttackerClan(player.getClan()) == null)
return false;
if(player.isMounted())
return false;
if(!player.isInRangeZ(target, 120))
{
player.sendPacket(Msg.YOUR_TARGET_IS_OUT_OF_RANGE);
return false;
}
if(first)
for(SiegeClan sc : siege.getDefenderClans().values())
{
L2Clan clan = sc.getClan();
if(clan != null)
clan.broadcastToOnlineMembers(Msg.THE_OPPONENT_CLAN_HAS_BEGUN_TO_ENGRAVE_THE_RULER);
}
return true;
}
public TakeCastle(StatsSet set)
{
super(set);
}
@Override
public void useSkill(L2Character activeChar, GArray<L2Character> targets)
{
for(L2Character target : targets)
if(target != null)
{
if(!target.isArtefact())
continue;
L2Player player = (L2Player) activeChar;
Siege siege = SiegeManager.getSiege(activeChar, true);
if(siege != null)
{
siege.announceToPlayer(new SystemMessage(SystemMessage.CLAN_S1_HAS_SUCCEEDED_IN_ENGRAVING_THE_RULER).addString(player.getClan().getName()), false, true);
siege.Engrave(player.getClan(), target.getObjectId());
}
}
}
}
cast_range у скилла 246 "Печать правителя" - 150, с запасом.
На скрине видно, что артефакт и персонаж очень близко:
Содержимое конфига геодаты не менялось:
Код: #===================================================#
# Даный файл является конфигуратором геодаты. #
#===================================================#
GeodataEnabled = True
GeodataDebug = false
PathfindDebug = false
MultiThreadedLoad = false
GeoFirstX = 11
GeoFirstY = 10
GeoLastX = 26
GeoLastY = 26
# Паттерн для файлов геодаты.
# Файлы что подойдут под паттерн будут считатся файлами геодаты
GeoFilesPattern = (\\d{2}_\\d{2})\\.l2j
# Обрабатывать ли двери в геодате
# Настройка влияет на ГеймСервер
AllowDoors = True
# Разрешать игроку падать с горизонтальной стены если он кликает по самой стене
AllowFallFromWalls = False
# Движение клавиатурой (стрелочками)
AllowMoveWithKeyboard = True
# оптимизация размещение гео в памяти, экономит около 150Мб памяти
# для оптимизации нужно сначала нужно сгенерировать карты совпадений
# java -Xms1g -Xmx1400m -Xmn192m -XX:PermSize=16m -cp l2openserver.jar l2open.debug.benchmark.GeoMatchesGenerator
CompactGeoData = False
# Мобы срезают углы, за счет чего нагрузка падает в несколько раз
# Могут застревать на поворотах и некрасиво обходить деревья
SimplePathFindForMobs = True
# Диагональный поиск. Возможно тратит больше ресурсов.
PathFindDiagonal = True
# Сглаживает путь.
# Стоит отключать только для дебага.
PathClean = True
# Сильно ускоряет поиск, как влияет на качество неизвестно
# 0 - отключить, 1 - только начало пути, 2 - начало и конец пути
PathFindBoost = 2
# Максимальная высота ступеньки для поиска пути
PathFindMaxZDiff = 32
# Максимальная высота ступеньки для геодаты
MaxZDiff = 64
# Минимальная разница между слоями
MinLayerHeight = 64
# Базовый вес ячейки
Weight0 = 0.5
# Вес "плохих" клеток первого плана
Weight1 = 2
# Вес "плохих" клеток второго плана
Weight2 = 1
# Настройка буфферов для поиска пути
PathFindBuffers = 8x100;8x128;8x192;4x256;2x320;2x384;1x500
# Прибавка к Z для пакетов
ClientZShift = 16
# Глубина видимости (количество видимых регионов). От 1 и более.
ViewOffset = 1
# Размер региона. Менять с учетом ViewOffset.
DivBy = 2048
DivByForZ = 1024
# Номера квадратов геодаты с вертикальным разделением регионов (густонаселенные многоэтажные локации)
# Cruma Tower, Swamp of Screams, Garden of Eva, Tower of Insolence, Forge of the Gods, Imperial Tomb, Giant's Cave
VerticalSplitRegions = 20_21;22_16;22_25;23_18;25_14;25_15;25_19;24_23
# Отложенный спавн
DelayedSpawn = False
Попробовал выстрелить по артефакту из лука или нанести магический урон через CTRL - не получается. Возможно именно в этом причина сбоя в работе скилла. Ваши советы:
Но в таргет возможно взять артефакт?
Сообщений: 1,610
Тем: 44
Зарегистрирован: Jan 2016
Репутация:
1,353
//Понял что слишком костыльно.
//Deleted.
Сообщений: 78
Тем: 16
Зарегистрирован: Mar 2013
Репутация:
143
05-22-2017, 11:16 AM
(Сообщение последний раз редактировалось: 05-22-2017, 01:05 PM ntking.)
Цитата:Но в таргет возможно взять артефакт?
GGteam, да, конечно.
Добавлю еще: Я ТП-шнулся за артефакт (возьмем примером Дион), и находясь сзади него, при включенной геодате - кастует. Но только я перехожу в левый бок или на перед артефакта не кастует, даже находясь на площадке в непосредственной близости, где стоит артефакт.
Я пробовал чистить геодату спереди атрефакта, убирал полностью условия, не помогает.
Единственное, что мне пришло в голову, что артефакты тупо застряли в текстурах и их "не видно" спереди. Это бы можно было принять как решение, если бы не артефакты Руны или того же Годдарда, где к ним можно подойти со всех сторон. Пробовал спавнить артефакты выше на сотку, по логике вещей должно было помочь, но нет, проблему не решило.
Еще раз повторюсь: не так давно такой проблемы не было. Ума не приложу, что могло произойти с геодатой или геодвижком (к коду которого у меня нет доступа). Максимум, что могу вспомнить - это я добавлял в геодату пару квадратов Грации, которые начали использовать ну и мелкие фиксы провалов по всей карте.
Персонаж по какой-то причине не видит артефакт, даже не бежит к нему. Если сесть на выверну - на выверне пытается подлететь к нему, но не кастует. Т.е. фактически логика сервера: артефакт находится в закрытой с 4-х сторон "комнате", в которую нет прямой видимости, а через "стены" соответственно скилл не активируется. Как такое произошло - понять и решить проблему не моих силах((( Возможно, если переставить артефакты на пол - все заработает. Но это очень не эстетично.
Сообщений: 78
Тем: 16
Зарегистрирован: Mar 2013
Репутация:
143
Решение найдено. Причиной возникновения данного сбоя был я и моя правка скиллов (как раз с полгода назад я занимался парсингом с pts). На сервере маги довольно дальнобойными были и я резанул всем дальность магии на 100. Вот и получилось, что попросту не хватало того самого cast_range=150 с запасом, т.к. фактически он был 50 и этого оказалось мало, чтобы кастовать с балконов. Непонятно только одно, почему сервер не предупреждал о том, что расстояние до артефакта слишком большое, ведь этот код это предусматривает:
Код: if(!player.isInRangeZ(target, 120))
{
player.sendPacket(Msg.YOUR_TARGET_IS_OUT_OF_RANGE);
return false;
}
Теперь это неважно. Проблема решена, извините за беспокойство.
Сообщений: 5,863
Тем: 105
Зарегистрирован: Sep 2010
Репутация:
13,014
ntking Написал:Решение найдено. Причиной возникновения данного сбоя был я и моя правка скиллов (как раз с полгода назад я занимался парсингом с pts). На сервере маги довольно дальнобойными были и я резанул всем дальность магии на 100. Нормально так :redlol:
|