Полная версия этой страницы:
Сетевые скрипты
ERMMASTER
17 Jun 2010, 15:41
Писал тут разные скрипты понимаешь, все нормально работало, но тестилось на хотсите. Решил испытать на мультиплэйере и тут низверглось небо и посыпало багами)
Кода оч. много поэтому у меня вопрос, достаточно ли поменять триггеры !?BA0 !?BA1 и им подобные на !?BA51 !?BA52/ Кто сталкивался с сетевыми проблемами просьба отписаться с какими и как их править буду оч. благодарен.
DracoLich
17 Jun 2010, 17:01
хот-сит == одиночная игре
Цитата
достаточно ли поменять триггеры !?BA0 !?BA1 и им подобные на !?BA51 !?BA52
в теории да. на практике, все боевые скрипты требует тонны синхронизации через IP.
ERMMASTER
17 Jun 2010, 17:32
Очень жаль... Тонны работы перерабатывать тонной синхронизации...
Что-ж буду пробовать, если нет , забью на multiplayer
Добавлено ([mergetime]1276785157[/mergetime]):
И еще, достаточно ли синхронизировать только битвы хуман vs хуман?
Berserker
17 Jun 2010, 17:52
ERMMASTER, всё элементарно. Просто все скрипты для боя помещаешь в функции. И на источники события вроде мыши или кнопки вызываешь функцию обработки события два раза:
!!FU...: P; // локально
!!FU...: D; // удалённо.
Всё.
DracoLich
17 Jun 2010, 18:10
[
я думал это что-то большее.
MasterOfPuppets
22 Jul 2010, 18:53
Цитата(EtherniDee @ 17 Jun 2010, 17:52)
всё элементарно.
Угу. Элементарно невозможно передать по сетке удаление объекта из-под героя при посещении. Как ни мучай, исход один - сброс игроков с сервака.
Berserker
22 Jul 2010, 20:05
А зачем? Объекты синхронизируются при передаче хода автоматически.
MasterOfPuppets
25 Jul 2010, 17:54
Если бы не было сброса СРАЗУ при удалении объекта, я бы и вовсе не мучал FU:D/IP.
Цитата(EtherniDee @ 22 Jul 2010, 20:05)
А зачем? Объекты синхронизируются при передаче хода автоматически.
Это не тот случай. Просто удалить объект и удалить при посещении - разные вещи. Последнее вечно вызывает выкидыш.
В общем, это нужно протестировать на реальной TCP/IP. А игра между двумя копиями на одном компе - недо-сеть.
sergroj
30 Jul 2010, 01:42
Может, на том компе дублируется удаление, но удаляется герой? Для Эры могу сделать код для проверки, если вспомню, как там вызываются функции по адресу.
Вот у меня, кстати, 2 копии на 1 компе вообще между собой не играют. Даже в СоДе все заканчивается на ходе последнего компа.
EtherniDee, если вызываются некоторые команды типа каста магии, такое не сработает?
MasterOfPuppets
30 Jul 2010, 04:45
Цитата(sergroj @ 30 Jul 2010, 01:42)
Для Эры могу сделать код для проверки, если вспомню, как там вызываются функции по адресу.
Если не затруднит - то, да, пожалуйста. Собственно, это единственный момент, из-за которого я впал в тоску и забил на сеть.
Цитата(sergroj @ 30 Jul 2010, 01:42)
Вот у меня, кстати, 2 копии на 1 компе вообще между собой не играют. Даже в СоДе все заканчивается на ходе последнего компа.
Так это с любой версией так. А тестеры "сети без сети" используют лишь первый игровой день.
sergroj
01 Aug 2010, 00:28
Я был прав.
Попробуй:
Код
при посещении:
!!HE-1:N?v1;
!!IP:D-1; [send to all players]
!!FU111:Dv1/0; [hide hero]
!!UN:Ov998/v999/v1000/1; [удаление объекта]
!!FU111:Dv1/1; [show hero]
!?FU111;
!!UN:C6919480/4/?y1;
!!VRy1:+136736;
!!VRy2&x1=0:S5077328;
!!VRy2&x1<>0:S5077056;
!!SN:Ey2/2/y1;
MasterOfPuppets
01 Aug 2010, 12:12
По-моему, тут что-то надо поправить... Например, вместо x1 в проверке должна быть вроде x2.
В ecx ведь перед вызовом кладётся адрес структуры героя? А что если так?
!?FU111;
!!UN:C6933756/4/?y5;
!!VRy1:S$color$*360;
!!VRy5:-y1;
!!VRy1:Sx1*1170+y5+2896;
!!VRy2&x2=0:S5077328;
!!VRy2&x2<>0:S5077056;
!!SN:Ey2/2/y1;
Мне кажется, вернее.
sergroj
01 Aug 2010, 16:33
Нет, ты пытаешься искать героя в структуре игрока.
Код
!?FU111;
!!UN:C6919480/4/?y1;
!!VRx1:*1170 +y1 +136736;
!!VRy1&x2=0:S5077328;
!!VRy1&x2<>0:S5077056;
!!SN:Ey1/2/x1;
Добавлено ([mergetime]1280669621[/mergetime]):
!!IP:D-1; не обязателен
MasterOfPuppets
01 Aug 2010, 16:35
Да нет, я же использую смещение не от начала структуры текущего игрока, а от начала структур всех игроков. Оно постоянно и никогда не подводит.
!!UN:C6933756/4/?y5; //получили указатель на структуру текущего игрока
!!VRy1:S$color$*360; //умножили текущего игрока на размер структуры
!!VRy5:-y1; //отняли и переместились в начало структур игроков
!!VRy1:Sx1*1170+y5+2896; //припёрлись к структуре данного героя
Ладно. у меня тоже правильно, но у тебя проще.
sergroj
02 Aug 2010, 20:03
Ха, точно. Сработало?
MasterOfPuppets
02 Aug 2010, 20:11
Да, всё отлично.
Подскажите, как вести проверку во время боя при сетевом режиме, чья сторона щас ходит?
Необходимо блокировать возможность ждущему игроку пользоваться втроенными фичами по ПКМ.
Флаг 999 указывает лиш на то,на чьём ходе была инициирована битва..
А вот как уже во время вести контроль, я не знаю
Ведь BG:Q для каждой стороны даёт то,что "ОН" текущий
Можно попробовать BG:N. Если возвращаемое значение больше 20, то ходит существо второго игрока.
Ой, я извиняюсь, неправильно написал вопрос
Как узнать какая сторона щас ожидает, пока ходит другая сторона.. Т.е. как мне контролировать нажатие мышью неактивного игрока в битве???
Ведь BG:Q для всех сторон показывает только активную сторону
Если клик совершается не по монстру, то никаких идей.
tolich
23 Jan 2011, 14:17
Чисто мысли, не проверял.
1) Текущая сторона -> левая (атакующая) или правая (защищающаяся) 0/1.
2a) Активна атакующая сторона -> атакующий герой.
2b) Активен защищающийся герой -> герой-хозяин.
3) Найденный Герой -> Игрок-владелец героя.
4) Если цвет текущего игрока совпадает с цветом игрока-владельца героя, значит именно он сейчас ходит.
Скрипт должен начинаться с !?CM4. В этом и вопрос: как в таком случае получить любую информацию об игроке, который совершил нажатие? В твоем списке это "Найденный герой". Как его найти? Попробуешь взять номер через !!HE-1:... - всегда вернет атаковавшего (если я не ошибаюсь).
tolich
23 Jan 2011, 15:12
!!OW:G ??
feanor
23 Jan 2011, 15:38
В начале хода существа (!?77007 в эре) на обеих сторонах устанавливать какую-нить переменную в номер стороны. В !?СM4 ее проверять.
!!OW:G... гениально. Первый раз о таком слышу, кстати.
tolich, спасибо огромное, тоже незнал о такой команде..
Проверил только что - работает так, как и требовалось
tolich
24 Jan 2011, 13:39
Я тоже не знал.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.