Перейти к содержимому
La2Base
Главная
ЗагрузкиВикиФорумFAQ
ruen
Регистрация Войти
ГлавнаяФайлыВикиВойти
  • Главная
  • Загрузки
  • Вики
  • FAQ
  • Обратная связь
  • О проекте
  • Правила
  • Конфиденциальность
  • Условия использования

© 2026 la2base.com · Все права защищены

ruen
Форум/Форум для новичков[JAVA]/[help]баг с трейдом
Поиск

[help]баг с трейдом

24 ответов315 просмотровСейчас просматривают: 1
I
interhostnn

Пользователь

Участник

Постов: 48

На форуме с: 02.01.2009

Репутация: +4

Рейтинг: 0

· 08.08.2009, 18:42

Железо: 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);

Итак, баг пофикшен...



Помогить решить данную проблему.

0
tiesto
tiesto

Пользователь

Бывалый

Постов: 265

На форуме с: 24.03.2009

Репутация: +138

Рейтинг: 0

· 08.08.2009, 19:22

Не мог бы дать ссылку на мускул 7,0!!! х64...???

— АдмиралЪ О_о

0
I
interhostnn

Пользователь

Участник

Постов: 48

На форуме с: 02.01.2009

Репутация: +4

Рейтинг: 0

· 08.08.2009, 19:39

tiesto: Не мог бы дать ссылку на мускул 7,0!!! х64...???

Выложил на сервер.

ссылку дал в личку







АП! Тема остается открытой, по прежнему на сервере людей так разводят.Нужна помощь...

0
Long117
Long117

Пользователь

Участник

Постов: 83

На форуме с: 08.08.2009

Репутация: +85

Рейтинг: 0

· 08.08.2009, 19:42

Ну тогда надо чтобы пофиксили сборку те у кого есть исходники)) Попробуй юзнуть (в данном случае купить) платную последнюю сборку Базы, может там убрали этот баг

0
I
interhostnn

Пользователь

Участник

Постов: 48

На форуме с: 02.01.2009

Репутация: +4

Рейтинг: 0

· 08.08.2009, 19:44

Long: Ну тогда надо чтобы пофиксили сборку те у кого есть исходники)) Попробуй юзнуть (в данном случае купить) платную последнюю сборку Базы, может там убрали этот баг

Не убрали.

0
Long117
Long117

Пользователь

Участник

Постов: 83

На форуме с: 08.08.2009

Репутация: +85

Рейтинг: 0

· 09.08.2009, 11:00

Или попроси чтобы пофиксили.. Например заплати Destus'у и все будет норм :)

0
I
interhostnn

Пользователь

Участник

Постов: 48

На форуме с: 02.01.2009

Репутация: +4

Рейтинг: 0

· 10.08.2009, 09:43

Есть те люди, которые исправили ?

0
А
Антон

Пользователь

Бывалый

Постов: 118

На форуме с: 30.10.2008

Репутация: +6

Рейтинг: 0

· 10.08.2009, 10:17

ты откуда это брал? в базе чутка не так сделано

0
I
interhostnn

Пользователь

Участник

Постов: 48

На форуме с: 02.01.2009

Репутация: +4

Рейтинг: 0

· 10.08.2009, 10:48

ну а под базу есть ?

Может найдутся такие люди, которые с этим справились ?

0
I
interhostnn

Пользователь

Участник

Постов: 48

На форуме с: 02.01.2009

Репутация: +4

Рейтинг: 0

· 10.08.2009, 11:18

У всех исправлено ? )

0
А
Антон

Пользователь

Бывалый

Постов: 118

На форуме с: 30.10.2008

Репутация: +6

Рейтинг: 0

· 10.08.2009, 11:33

я вставил шас буду тестить)

0
I
interhostnn

Пользователь

Участник

Постов: 48

На форуме с: 02.01.2009

Репутация: +4

Рейтинг: 0

· 10.08.2009, 11:37

region: я вставил шас буду тестить)

Дай аську свою. В долгу не останусь...

0
I
interhostnn

Пользователь

Участник

Постов: 48

На форуме с: 02.01.2009

Репутация: +4

Рейтинг: 0

· 12.08.2009, 19:16

У кого-то решена эта прорблема ?

0
-=[BloodKill]=-
-=[BloodKill]=-

Пользователь

Ветеран

Постов: 1355

На форуме с: 01.09.2008

Репутация: +1179

Рейтинг: 0

· 12.08.2009, 19:38

Там еще есть 1 баг с трейдом))

Цитата
Запускаеш 2 окна, кидаеш трейд с 1 окна на 2, заходиш на 2 окно и нажимаеш там Alt+h , потом заходиш снова на 1 окно кидаеш трейд тому с кем ты должен торговать, кидаеш шмотки те о котрых вы договорились и он кидаеть, пишеш ему "сек", заходиш на 2 окно нажимаеш Alt+h и соглашаешся с торговлей, потом заходиш на 1 окно и надимаеш ДА, и он нажимаеть ДА. и всё все шмотки идут к тебе , ему нечего. Только одно но ты должен первый потвердить зделку


в платной его нет

— Оо

0
I
interhostnn

Пользователь

Участник

Постов: 48

На форуме с: 02.01.2009

Репутация: +4

Рейтинг: 0

· 12.08.2009, 19:39

-=[BloodKill]=-: Там еще есть 1 баг с трейдом))



в платной его нет

Есть.

0
-=[BloodKill]=-
-=[BloodKill]=-

Пользователь

Ветеран

Постов: 1355

На форуме с: 01.09.2008

Репутация: +1179

Рейтинг: 0

· 12.08.2009, 19:41

interhostnn: Есть.


в "платной" с сайтов l2supercborka.ru конечно есть

— Оо

0
I
interhostnn

Пользователь

Участник

Постов: 48

На форуме с: 02.01.2009

Репутация: +4

Рейтинг: 0

· 12.08.2009, 19:44

-=[BloodKill]=-: в "платной" с сайтов l2supercborka.ru конечно есть

в платной la2base есть :)

давай ссылку сервера в лк, сейчас тебе продемонстрирую...

А сам вопрос по прежнему открытый..

Баз без рестарта работает... в 2 окна.

0
-=[BloodKill]=-
-=[BloodKill]=-

Пользователь

Ветеран

Постов: 1355

На форуме с: 01.09.2008

Репутация: +1179

Рейтинг: 0

· 12.08.2009, 19:49

interhostnn: в платной la2base есть :)

давай ссылку сервера в лк, сейчас тебе продемонстрирую...

А сам вопрос по прежнему открытый..

лк?

ссылку дал... проверил - не работает russian_roulette.gif

— Оо

0
I
interhostnn

Пользователь

Участник

Постов: 48

На форуме с: 02.01.2009

Репутация: +4

Рейтинг: 0

· 12.08.2009, 19:50

-=[BloodKill]=-: лк?

ссылку дал... проверил - не работает russian_roulette.gif



Сейчас продемонстрирую зайду. Сек. Дай аську, чтобы ник сказать :)


Не так значит делал.

0
-=[BloodKill]=-
-=[BloodKill]=-

Пользователь

Ветеран

Постов: 1355

На форуме с: 01.09.2008

Репутация: +1179

Рейтинг: 0

· 12.08.2009, 19:53

interhostnn: Сейчас продемонстрирую зайду. Сек. Дай аську, чтобы ник сказать :)


Не так значит делал.

Аську дал..жду

— Оо

0
Тема закрыта для ответов