на Главную Форума - back to Forum Indexна Главную Форума - back to Forum Indexна Главную Форума - back to Forum Index
на Главную Форума - back to Forum Index
Эадор.Сотворение - Eador.The Genesis на Главную Форума - back to Forum Indexна Главную Форума - back to Forum Indexна Главную Форума - back to Forum Index
на Главную Форума - back to Forum Index
Автор / Сообщение

Программа для сетевой игры

   GYV

 
 
 -Следопыт-

Свитков: 190
С нами с: 13.06.2010
Откуда: Обнинск
Цитировать
СообщениеДобавлено: Пн Ноя 30, 2020 11:26     Заголовок сообщения:

Arkitekt писал(а):
GYV писал(а):
Что с прокруткой карты?


https://www.dropbox.com/s/9duounpm56sydo0/Eador.exe?dl=0
На свой собственный страх и риск.


Версия какая игры кстати?

Можешь описать что поменял?

Я кстати про tcp ip в дороге почитал... Можно по локалке что-то придумать. Но, опять же. Вне локалки потеря пакетов и необходимость hamchi
Посмотреть профиль Отправить личное сообщение
   GYV

 
 
 -Следопыт-

Свитков: 190
С нами с: 13.06.2010
Откуда: Обнинск
Цитировать
СообщениеДобавлено: Пн Ноя 30, 2020 11:28     Заголовок сообщения:

GYV писал(а):
Arkitekt писал(а):
GYV писал(а):
Что с прокруткой карты?


https://www.dropbox.com/s/9duounpm56sydo0/Eador.exe?dl=0
На свой собственный страх и риск.


Версия какая игры кстати?

Можешь описать что поменял? Это прокрутка или решение с сейвами?

Я кстати про tcp ip в дороге почитал... Можно по локалке что-то придумать. Но, опять же. Вне локалки потеря пакетов и необходимость hamchi
Посмотреть профиль Отправить личное сообщение
   Arkitekt

 
 
 *Владыка Вселенной*
admin
Админ всея форума



Свитков: 5138
С нами с: 30.01.2013
Цитировать
СообщениеДобавлено: Пн Ноя 30, 2020 11:31     Заголовок сообщения:

Последняя ванила. Выключена прокрутка карты мышкой, вроде все на этом.
Но под капотом изменений реально много, возможны утечки памяти, краши и тд.
_________________
20.11.2009 - 24.02.2015
Посмотреть профиль Отправить личное сообщение
   GYV

 
 
 -Следопыт-

Свитков: 190
С нами с: 13.06.2010
Откуда: Обнинск
Цитировать
СообщениеДобавлено: Пн Ноя 30, 2020 12:10     Заголовок сообщения:

Arkitekt писал(а):
Последняя ванила. Выключена прокрутка карты мышкой, вроде все на этом.
Но под капотом изменений реально много, возможны утечки памяти, краши и тд.


Отлично. Возникла идея к альтернативному подходу к сетевой. Не вместо этой, а дополнительно к ней. Хочу попробовать реализовать "улучшенную колбаску". Если турниры возобновятся, то можно её будет реализовать как турнирный проект.
Идея в следующем. Написать"кликер" не только для поя боя, но и на всю карту. Чтобы записывались все действия игрока (в разумных приделаю. Изучения здания, статистик юнита и прочего, чтобы не было. С этим проще реализовать, но второму игроку на это будет скучно смотреть...). То есть только важные "телодвижения."

Далее организовать турнир. Установить время перемирия допустим 40 -45 ходов. Каждый игрок ходит 10-15 ходов. Только за себя, пропуская ход соперника, записывая свои действия.
Потом все действия высылаются "судье" турнира. Который включает поочередно воспроизведения от каждого игрока попутно делая видеозапись с выкладкой её на ютуб.
Игроки потому просматривают игру целиком и получают общую сохранку. Потом они продолжают делать запись своей игры 3-4 раза. Затем происходит "схватка", которая играется в реальном времени. Проигравший выбывает из турнира. (также если игрокам "лень" или нет времени, схватку можно провести автобоем с обоих сторон).

Как идея?
Посмотреть профиль Отправить личное сообщение
   GYV

 
 
 -Следопыт-

Свитков: 190
С нами с: 13.06.2010
Откуда: Обнинск
Цитировать
СообщениеДобавлено: Пн Ноя 30, 2020 23:16     Заголовок сообщения:

Arkitekt писал(а):
Короч ребята, сохранение игры возможно только когда все игроки прокликали все свои события. Поэтому сохранение работает только на последнем игроке. Все танци с бубнами про пропуск ходов - не поможет.
Есть идея добавить не прокликанные события в сейв-файл, но по какой-то причине Адрагерон это не сделал, так что возможны подводные камни.
Будет ли кто-то играть хотсит по переписке если я найду решение для этой проблемы?

Обидно признавать, но ты был прав!

И в двойне обиднее понимать еще 2 вещи. Первое, что я это уже знад, но забыл. Вторая, что за 10 лет это так и не пофиксили:
http://eador.com/B2/viewtopic.php?t=930&highlight=

GYV писал(а):
Я уже предлагал в другой теме пересылать сейвы вручную, но тут существует проблема.....Сохранение происходит после хода последнего игрока(может это только у меня. Играли за одним компом и увидели данную фишку). Также я на форуме заметил одну хорошую идею, предложенную для коллективной игры в одиночной компании. Поэтому предлагаю следующее:
1)Первый игрок создает игру и совершает 5 ходов(можно оговорить), пропуская за 2 игрока ходы.
2) Сохраняется и скидывает сохранку другому.
3)Другой отыгрывает 5 ходов и пересылает сохранку обратно.

Что касается одновременных битв, то не раз обсуждалось:
1) можно нажать F2 и включить быструю
2) можно сходить в гости доиграть(если есть возможность)
3) можно поизвращаться со скайпом и попытаться поиграть в одну и туже сохранку одновременно,
4) можно подключить удаленный рабочий стол(не включать обзор рабочих столов одновременно!!! И будьте готовы к тормозам)
5)Но лучше всего загрузить сохранку одновременно, выяснить друг у друга способ расстановки войск и нажать автоматическую битву(не быструю)
Так, или иначе основная игра будет направлена на преимущество в развитии. А насладиться, в полной мере, уничтожением друг друга на поле боя пока не удастся.


По есть надо делать возможность сохранения после каждого игрока. НУ или принудительно кнопку сохранить вводить.
Есть ещё нюансы. Этот "баг" появляется только из-за событий. То есть если герой стоит на месте (или исследует) и строится, то сохранения работают нормально. То что это баг, легко убедиться просто отменив событие и построив здание. Игра сохранится.
Ещё одна печальная новость. Рандома в игре больше чем я думал. За предыдущие 20 тестов мне выпадало всю одинаковое. Но, по непонятным причинам мне выпало сразу 3 разных события за 3 прокрутки.... То есть в стандартный Эадор и "одновременной колбасой" не поиграешь.
То есть надо править вады и делать важные события 100%, неважные отключать.

Вообщем печаль Crying or Very sad Crying or Very sad Crying or Very sad
Вывод один, надо копаться в сейвах. Пока больше идей нет
Посмотреть профиль Отправить личное сообщение
   Arkitekt

 
 
 *Владыка Вселенной*
admin
Админ всея форума



Свитков: 5138
С нами с: 30.01.2013
Цитировать
СообщениеДобавлено: Вт Dec 01, 2020 8:15     Заголовок сообщения:

По какой-то причине Адрагерон не смог правильно сохранить/загрузить события. Но между тем он говорил в об этом как о решаемой проблеме, так что я думаю ее решить.
После этого уже можно будет что-то поиграть.
Если мы потестим и все будет хорошо работать, я попробую закрыть ходы других владык, чтобы можно было только свой ход видеть. И можно делать турнирную карту.
_________________
20.11.2009 - 24.02.2015
Посмотреть профиль Отправить личное сообщение
   GYV

 
 
 -Следопыт-

Свитков: 190
С нами с: 13.06.2010
Откуда: Обнинск
Цитировать
СообщениеДобавлено: Вт Dec 01, 2020 9:54     Заголовок сообщения:

Arkitekt писал(а):
По какой-то причине Адрагерон не смог правильно сохранить/загрузить события. Но между тем он говорил в об этом как о решаемой проблеме, так что я думаю ее решить.
После этого уже можно будет что-то поиграть.
Если мы потестим и все будет хорошо работать, я попробую закрыть ходы других владык, чтобы можно было только свой ход видеть. И можно делать турнирную карту.


Было бы круто, если бы он просто воткнул не туда процедуру сохранения. Для одиночной игры нет разницы. В хот сит мало кто нестил и заморачивался. Хуже если есть подводные камни.
В теории всё просто. Нажатие кнопки "завершить ход" приводит к сохранению игры. Всегда. Так и надо было реализовывать.
Сейчас судя по всему процедура висит на 2 событиях:
1)Выход из игры. При этом идет проверка, что игрок что-то сделал важное(например построил здание). Скорее всего сделано так для возврата в прошлое, чтобы переигрывать бои и события.
2)Сохранение после прокрутки игррвого дня. Здесь не понятно. Память экономил или просто не подумал, что кому-то это надо. Или с ИИ связано...

Вообще, по хорошему, надо взять исходники и комментировать каждую процедуру. Далее составить на листе схему взаимодействия. А почему он использовал bmp не известно? Почему не jpeg например?
Посмотреть профиль Отправить личное сообщение
   Arkitekt

 
 
 *Владыка Вселенной*
admin
Админ всея форума



Свитков: 5138
С нами с: 30.01.2013
Цитировать
СообщениеДобавлено: Вт Dec 01, 2020 10:26     Заголовок сообщения:

Там практически все инструменты из библиотеки берутся, почти без велосипедов. Разработчики библиотеки остановились на битмапах и тупом копировании оперативной памяти в сейв.
Там сохранение нормально сделано, просто события не сохраняются. Поэтому чтобы избежать поврежденных сейвов, сохранять в хотсите явно запрещено.
_________________
20.11.2009 - 24.02.2015
Посмотреть профиль Отправить личное сообщение
   GYV

 
 
 -Следопыт-

Свитков: 190
С нами с: 13.06.2010
Откуда: Обнинск
Цитировать
СообщениеДобавлено: Вт Dec 01, 2020 15:57     Заголовок сообщения:

Что за библиотеки? На форму нашел упоминание про alleg43.dll Это оно?
Посмотреть профиль Отправить личное сообщение
   GYV

 
 
 -Следопыт-

Свитков: 190
С нами с: 13.06.2010
Откуда: Обнинск
Цитировать
СообщениеДобавлено: Вт Dec 01, 2020 18:42     Заголовок сообщения:

Так, пока процесс с обычным режимом встал займемся колбасой:
Сначала исходники, потом опишу как собственно играть. Компьютера с установленной игрой у меня под рукой нет, но должно всё работать.

Следующим кодом будет запускаться запись игры:
Код:

#include <Misc>
#include <File>

HotKeySet("+{F1}", "_aSaveCoords") ; Shift-z для вызова скрипта

While 1
    Sleep(100)
WEnd

Func _aSaveCoords()
MsgBox(4096, "Запись активирована", "Можете начинать ходить!") ; сообщение для понимания что скрипт работает
Global $file_name_put  ; задаем переменную с указанием пути
Global $MousePos[2] ; задаем переменную массива с 2 значениями
Global $mouse ; задаем переменную для хранения мыши
Global $num_players ; задаем переменную для  количества игроков
Global $hod_player ; задаем переменную для учета количество сделанных ходов
Global $click_player ; задаем переменную для учета количество сделанных кликов мыши(возможно нажатий чего-то в дальнейшем)
Opt("MouseCoordMode",0) ; задаем привязку записи координат к определенному окну

WinWait("Эадор. Сотворение","") ; ожидаем открытие окна
If Not WinActive("Эадор. Сотворение","") Then WinActivate("Эадор. Сотворение","") ; если окно открылось, делаем его активным
WinWaitActive("Эадор. Сотворение","") ; ждем активацию окна

Local $hDLL = DllOpen("user32.dll") ; подгружаем user32.dll


$file_name_put=@ScriptDir &"\save\step.ini" ; присваиваем путь для файла с координатами


$num_players = IniRead ($file_name_put, "Parameters", "max_players", "1" ) ; считываем количество игроков
$hod_player = IniRead ($file_name_put, "Parameters", "Move_number", $num_players ) ; считываем номер хода
$click_player=1 ; присваеваем параметру клик значение 1. То есть задаем, что количество кликов = 1

While 1 ; запускаем цикл
   
   If _IsPressed("01", $hDLL) Then ; если нажата левая кнопка мыши
       $mouse="left" ; записываем, что она левая
       SaveCoords() ; сохраняем её местоположение
       ; Запускаем цикл ожидания, пока клавиша не будет отпущена.
       While _IsPressed("01", $hDLL)
            Sleep(100) ; Выставляем задержку 1/10 секунды.
       WEnd
      
   EndIf
    
   If _IsPressed("02", $hDLL) Then ; если нажата правач кнопка мыши
         $mouse="right" ; записываем
         SaveCoords() ; сохраняем её местоположение
       ; Запускаем цикл ожидания, пока клавиша не будет отпущена.
       While _IsPressed("02", $hDLL)
            Sleep(100)
       WEnd
      
   EndIf
   If _IsPressed("70", $hDLL) Then ; если нажата F1
       Send("{e down}") ; Удерживам клавишу e нажатой
       sleep(100)
       Send("{e up}") ;Отпускаем клавишу e    
       SavePause()  ; активировать запись задержки

   EndIf
   If _IsPressed("71", $hDLL) Then ; если нажата F2

       $hod_player= $hod_player+ $num_players ; Изменяем помер хода на номер хода+количество игроков
      
     IniWrite ($file_name_put, "Parameters", "Move_number", $hod_player ) ; записываем
   
     Send("{e down}") ; Удерживам клавишу e нажатой
     sleep(100)
     Send("{e up}") ;Отпускаем клавишу e
     MsgBox(4096, "Конец записи", "Вы походили. Сейчас ход оппонента",2) ; оповещаем
     ExitLoop ;Выходим из цикла записи
   EndIf
 Wend

DllClose($hDLL)
Sleep(40)
 EndFunc

Func SaveCoords()

   $MousePos = MouseGetPos()
  IniWrite ($file_name_put, "Move_number"& $hod_player, "Action" & $click_player,"Mouse" &" "& $mouse &" "& $MousePos[0]&" "&$MousePos[1] )
  $click_player=$click_player+1
EndFunc

Func SavePause()
   $begin = TimerInit()
   MsgBox(0,"Таймер","Нажмите ок, как только компьютер закончит ход")
   $dif = TimerDiff($begin)
   IniWrite ($file_name_put, "Move_number"& $hod_player, "Action" & $click_player,"Sleep "& Int($dif)+300)
   $click_player=$click_player+1
EndFunc

Func _Exit()
   Exit
EndFunc


Этими кодами воспроизведение:

Код:

#include <Misc>
#include <File>

HotKeySet("+{F1}", "_aSaveCoords") ; Shift-z для вызова скрипта

While 1
    Sleep(100)
WEnd

Func _aSaveCoords()
MsgBox(4096, "Запись активированна", "Можете начинать ходить!") ; сообщение для понимания что скрипт работает
Global $file_name_put  ; задаем переменную с указанием пути
Global $MousePos[2] ; задаем переменную массива с 2 значениями
Global $mouse ; задаем переменную для хранения мыши
Global $num_players ; задаем переменную для  количества игроков
Global $hod_player ; задаем переменную для учета киличество сделаных ходов
Global $click_player ; задаем переменную для учета киличество сделаных хкликов мыши(возможно нажатий чего-то в дальнейшем)
Opt("MouseCoordMode",0) ; задаем привязку записи координат к определенному окну

WinWait("Эадор. Сотворение","") ; ожидаем открытие окна
If Not WinActive("Эадор. Сотворение","") Then WinActivate("Эадор. Сотворение","") ; если окно открылось, делаем его активным
WinWaitActive("Эадор. Сотворение","") ; ждем активацию окна

Local $hDLL = DllOpen("user32.dll") ; подгружаем user32.dll


$file_name_put=@ScriptDir &"\save\step.ini" ; присваиваем путь для файла с координатами


$num_players = IniRead ($file_name_put, "Parameters", "max_players", "1" ) ; считываем количество игроков
$hod_player = IniRead ($file_name_put, "Parameters", "Move_number", $num_players ) ; считываем номер хода
$click_player=1 ; присваеваем параметру клик значение 1. То есть задаем, что количество кликов = 1

While 1 ; запускаем цикл
   
   If _IsPressed("01", $hDLL) Then ; если нажата левая кнопка мыши
       $mouse="left" ; записываем, что она левая
       SaveCoords() ; сохраняем её местоположение
       ; Запускаем цикл ожидания, пока клавиша не будет отпущена.
       While _IsPressed("01", $hDLL)
            Sleep(100) ; Выставляем задержку 1/10 секунды.
       WEnd
      
   EndIf
    
   If _IsPressed("02", $hDLL) Then ; если нажата правач кнопка мыши
         $mouse="right" ; записываем
         SaveCoords() ; сохраняем её местоположение
       ; Запускаем цикл ожидания, пока клавиша не будет отпущена.
       While _IsPressed("02", $hDLL)
            Sleep(100)
       WEnd
      
   EndIf
   If _IsPressed("70", $hDLL) Then ; если нажата F1
       Send("{e down}") ; Удерживам клавишу e нажатой
       sleep(100)
       Send("{e up}") ;Отпускаем клавишу e    
       SavePause()  ; активировать запись задержки

   EndIf
   If _IsPressed("71", $hDLL) Then ; если нажата F2

       $hod_player= $hod_player+ $num_players ; Изменяем помер хода на номер хода+количество игроков
      
     IniWrite ($file_name_put, "Parameters", "Move_number", $hod_player ) ; записываем
   
     Send("{e down}") ; Удерживам клавишу e нажатой
     sleep(100)
     Send("{e up}") ;Отпускаем клавишу e
     MsgBox(4096, "Конец записи", "Вы походили. Сейчас ход оппонента",2) ; оповещаем
     ExitLoop ;Выходим из цикла записи
   EndIf
 Wend

DllClose($hDLL)
Sleep(40)
 EndFunc

Func SaveCoords()

   $MousePos = MouseGetPos()
  IniWrite ($file_name_put, "Move_number"& $hod_player, "Action" & $click_player,"Mouse" &" "& $mouse &" "& $MousePos[0]&" "&$MousePos[1] )
  $click_player=$click_player+1
EndFunc

Func SavePause()
   $begin = TimerInit()
   MsgBox(0,"Таймер","Нажмите ок, как только компьютер закончит ход")
   $dif = TimerDiff($begin)
   IniWrite ($file_name_put, "Move_number"& $hod_player, "Action" & $click_player,"Sleep "& Int($dif)+300)
   $click_player=$click_player+1
EndFunc

Func _Exit()
   Exit
EndFunc


Код:

#include <Misc>
#include <File>
#include "C:\Users\Юрий\Desktop\Загрузка кликов.au3"

Global $zMove,$file_name_put,$kkMove,$iPause
$zMove=1
$file_name_put=@ScriptDir &"\save\step.ini"

IniWrite ($file_name_put, "Parameters", "Load_move", "1")
HotKeySet("+{F2}", "_Test") ; Загрузка кликов
HotKeySet("{F1}", '_Pause') ; пауза / старт



While 1
   
    Sleep(50)
WEnd


Func _Test()
Opt("MouseCoordMode",0)
WinWait("Эадор. Сотворение","")
 If Not WinActive("Эадор. Сотворение","") Then WinActivate("Эадор. Сотворение","")
WinWaitActive("Эадор. Сотворение","")

$kkMove = IniRead ($file_name_put, "Move_number"&($zMove), "Action1", "" )
_aLoadCoords()

If $kkMove <>"" Then
   $zMove=$zMove +1
   IniWrite ($file_name_put, "Parameters", "Load_move", $zMove)
EndIf
EndFunc
Посмотреть профиль Отправить личное сообщение
   GYV

 
 
 -Следопыт-

Свитков: 190
С нами с: 13.06.2010
Откуда: Обнинск
Цитировать
СообщениеДобавлено: Вт Dec 01, 2020 19:07     Заголовок сообщения:

Принцип работы:
Есть файл step.ini с настройками, который хранится в папке save:
Код:

[Parameters]
;номер хода
Move_number=1
;количество игроков
max_players=1
;с какого хода начинать воспроизведение
Load_move=1


Две программы. Одна на запись, другая на воспроизведение.
1) Запускаем Эадор. И программу для записи.
2) Как только появляется "родовая провинция" начинаем запись комбинацией SHIFT+F1
3) После того как сделали первый ход завершаем его нажатием клавиши F2 (закончить запись 1 хода)
4) Проматываем ходу за других(другого) игрока
5) Далее опять нажимаем SHIFT+F1 и делаем свой ход.

Если в этом ходу происходит битва с компьютером, то действия следующие:
5.1) Во время записи входим в битву и расставляем войска.
5.2)Если после расстановки ходим мы, то просто ходим. Если ходит компьютер, то нажимаем F1(записывает время бездействия пользователя)
5.3)Как только компьютер походил жмем "ОК"

и так по кругу.

Как только завершим ход(битву, постройку, перемещение по карте) Нажимаем F2

Ограничения записи:
1) прокрутка или отключена с помощью exe от Arkitekt или сделана на минимум(или не перемещать карту, так как программа не умеет записывать перемещение мыши)
2) ОБЯЗАТЕЛЬНО во время битвы устанавливаем ручной переход нажатием E.

С записью интересней
Есть второй файл, который воспроизводит действия из файла step.ini при нажатии SHIFT+F2. На F1 пауза.
Обе программы выгружаются через трей, как и предыдущая

Регулируя параметр Load_move в step.ini, можно указать с какого хода воспроизводить действия. По умолчанию стоит с 1 хода.
Если запись идет например для 3 игроков(max_players=3), то чтобы посмотреть, что Вы записали конкретно для себя можно сделав копию step.ini. И переименовать [Move_number2] [Move_number5] и т.д по порядку(то есть в [Move_number1],[Move_number2],[Move_number3]).

Ну, а можно просто переслать step.ini файл тому, кто будет соединять игру.
Посмотреть профиль Отправить личное сообщение
   GYV

 
 
 -Следопыт-

Свитков: 190
С нами с: 13.06.2010
Откуда: Обнинск
Цитировать
СообщениеДобавлено: Ср Dec 02, 2020 19:11     Заголовок сообщения:

Для "турнирной колбаски" сразу версию 2 выкладываю. В ней поправлены баги и добавлены новый функции и визуальный интерфейс. Потом подробнее опишу:
https://yadi.sk/d/VBzVGAokQK3bRg

Создал новую тему программа "колбаса" перенесена туда:
http://www.eador.com/B2/viewtopic.php?t=4580

Тут если будут доработки только по старой программе или новые идеи.
Посмотреть профиль Отправить личное сообщение
   UadorU

 
 
 ♠ Император ♠
Ветеран



Свитков: 1060
С нами с: 21.12.2015
Откуда: Хроники Эмбера, Полная история Средиземья, Драгонленс, Черный отряд, Сага о ведьмаке, Джек-из-тени..
Цитировать
СообщениеДобавлено: Сб Мая 15, 2021 20:49     Заголовок сообщения: Re: Программа для сетевой игры

GYV писал(а):
Ссылка на программу https://yadi.sk/d/OL1yZN0tAHrAgQ

Прошу/рекомендую выложить ссылку на скачивание в googl
yadi.sk - только в России доступен, остальные страны обязаны банить доступ к этому ресурсу
(рано или поздно)
аналогично и mail.ru с подобными ей.
Посмотреть профиль Отправить личное сообщение
Часовой пояс: GMT +3:00
На страницу Пред.  1, 2, 3

 


Ты не можешь начинать темы
Ты не можешь отвечать на сообщения
Ты не можешь редактировать свои сообщения
Ты не можешь удалять свои сообщения
Ты не можешь голосовать в опросах
на Главную Форума - back to Forum Indexна Главную Форума - back to Forum Indexна Главную Форума - back to Forum Indexна Главную Форума - back to Forum Index Eador. The Genesis. Encyclopedia на Главную Форума - back to Forum Indexна Главную Форума - back to Forum Indexна Главную Форума - back to Forum Index