[help]баг с трейдом
Железо: Core Quad 2,4GHz (Q6600),
10 Gb RAM,
2Ч160Gb 7200rpm HDD
ОС: Windows Server 2003 х64
Программы: мускул 7.0 х64, ява х64
Сборка: Interlude, la2base, final 1.1.7
Краткое изложение СУТИ проблемы: Два персонажа договариваются о торге. Один кидает вещи в трейд, другой тоже что-то швыряет и нажимает ок. И делает рестарт, в результате все вещи достаются тому человеку, который сделал рестарт.
Вопрос: в чем причина и как исправить?
Мои соображения по этому поводу: ну ошибка в ядре. почитал некоторые темы на форуме. нашел следующий фикс от людей :
6. Баг с трейдом (дюп) :
Доступно только для пользователейВыкладываю долгожданный фикс бага с трейдом. Этот фикс очень нужный, т.к. баг работает практически на 90% ява серверов.
И фикс этого бага - не просто проверка, как это было раньше, а куда более серьёзная функция и проверки ессно тоже имеют место быть.
Чтобы пофиксить этот баг, мы вводим переменную в ClientThread.java "чар уже выбран", чтобы не допустить обработку входа персонажем дважды....
Итак, ClientThread.java, после:
Код
private String _loginName;
private L2PcInstance _activeChar;
private SessionKey _sessionId;
private final Connection _connection;
final ScheduledFuture _autoSaveInDB;
добавляем:
Код
private int sendedcharselected = 0;
после:
public String getLoginName()
{
return _loginName;
}
добавляем:
Код
public int reqCharSelected(){
if (sendedcharselected == 0){
sendedcharselected = 1;
return 0;
} else return 1;
}
public void reqRequestRestart(){
sendedenterworld = 0;
sendedcharselected =0;
}
Теперь делаем проверку в исходнике CharacterSelected.java:
Приводим void runImpl() к виду:
Код
void runImpl()
{
if (Config.DEBUG) _log.fine("selected slot:" + _charSlot);
L2PcInstance cha = getClient().loadCharFromDisk(_charSlot);
ClientThread client = getClient();
if (client.reqCharSelected() == 1) {
_log.warning("~~~BHuMaHue!!! char "+_charSlot+" delaet dvojnoj vxod...");
cha.closeNetConnection();
return;
}
//loadup character from disk
if(cha == null)
{
..........................
..........................
..........................
Тоесть теперь в рамках одной сессии с гейм сервером будет обрабатываться только один пакет CharacterSelected.
Но не стоит забывать, что человек может сделать рестарт к примеру (выход на комнату персонажей), и в этом случае он не сможет зайти за вновь выбранного чара. Что делать? Всё очень просто, нам всего лишь необходимо сбрасывать значение переменной sendedcharselected на 0. Для этого и была сделанна вторая функция в ClientThread.java.
Итак, исходник RequestRestart.java:
В код вставить вызов функции:
player.deleteMe();
ClientThread.saveCharToDisk(getClient().getActiveC har());
RestartResponse response = new RestartResponse();
sendPacket(response);
}
getClient().reqRequestRestart();
getClient().setActiveChar(null);
Итак, баг пофикшен...
Помогить решить данную проблему.
tiesto: Не мог бы дать ссылку на мускул 7,0!!! х64...???
Выложил на сервер.
ссылку дал в личку
АП! Тема остается открытой, по прежнему на сервере людей так разводят.Нужна помощь...
Ну тогда надо чтобы пофиксили сборку те у кого есть исходники)) Попробуй юзнуть (в данном случае купить) платную последнюю сборку Базы, может там убрали этот баг
Long: Ну тогда надо чтобы пофиксили сборку те у кого есть исходники)) Попробуй юзнуть (в данном случае купить) платную последнюю сборку Базы, может там убрали этот баг
Не убрали.
Там еще есть 1 баг с трейдом))
в платной его нет
— Оо
-=[BloodKill]=-: в "платной" с сайтов l2supercborka.ru конечно есть
в платной la2base есть :)
давай ссылку сервера в лк, сейчас тебе продемонстрирую...
А сам вопрос по прежнему открытый..
Баз без рестарта работает... в 2 окна.
interhostnn: в платной la2base есть :)
давай ссылку сервера в лк, сейчас тебе продемонстрирую...
А сам вопрос по прежнему открытый..
лк?
ссылку дал... проверил - не работает
— Оо
-=[BloodKill]=-: лк?
ссылку дал... проверил - не работает
Сейчас продемонстрирую зайду. Сек. Дай аську, чтобы ник сказать :)
Не так значит делал.



![-=[BloodKill]=-](/uploads/fotos/av-39301.jpg)