Возможно ли?
Ситуация:
В игре 5 игроков.
Красный хост.
У 4 игроков в папке варкрафта имеется идентичный прелоад файл (некая дата).
У синего этого файла нет.
Возможно ли передать данные от красного игрока синему, и только синему игроку с синхронизацией!? (Чтобы остальные игроки подгрузили данные из своих прелоад источников)

когда игроки подгрузили данные из прелоада и синхронизировали их то устанавливаем им флаг загрузил
а потом просто сохраняем всё что надо у тех у кого нету флага
подробнее в статье про прелоад
данные надо синхронить со всеми иначе десинк
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
21
nvc123:
awesomesk1ll, данные синхронятся и поток стопится на время отправки/приёма
управление висит и после того как данные уже подгрузились и синхронизовались..
21
Такая вот синхронизация потока была
loop
exitwhen (Condition)
call TriggerSyncStart()
call TriggerSyncReady()
endloop
такие замеры
Переделали на
loop
exitwhen (Condition)
call TriggerSyncStart()
call TriggerSyncReady()
call TriggerSleepAction(0.1)
endloop
Лага после синхры теперь нету. Не совсем понятно чем это чревато правда.
Загруженные файлы
32
ты вейт секунды 2 порставь, после if и сравни данные у хоста и другого остальных игроков, если хоть у одного данные в кеше иные, снова вейт 2 сек и так до тех пор пока у всех все ровно будет...
21
nvc123:
awesomesk1ll, 0,1 мало
ставь хотяб 1
Почему?
У нас обьёмы данных думаю на порядок больше чем у тебя на 10 игроков синхронишь. Мы целые уровни передаём между игроками, хотим вообще целые карты передавать (коллекции уровней) в идеале.
этот проект xgm.guru/p/ice/alpha
ну сейчас вроде вообще норм работает).. скоро 0.2 версию выпустим думаю
28
прелоадить за раз можно не более 4096+1024*n байт
где n количество не играющих игроков
21
nvc123:
прелоадить за раз можно не более 4096+1024*n байт
где n количество не играющих игроков
Почему это?)
Можно же больше
28
awesomesk1ll, внимательно читай
тут несколько раз прелоадится
или спроси у того кто писал код
21
nvc123:
awesomesk1ll, внимательно читай
тут несколько раз прелоадится
или спроси у того кто писал код
Вот файл прелоада yadi.sk/d/z1OAoLeTkySv6
Вот код
function ESD takes nothing returns nothing
    set StrData[StrCount] = GetPlayerName(Player(15))
    if (StrData[StrCount] == " ") then
        set StrData[StrCount] = null
    endif
    set StrCount = StrCount + 1
endfunction

private method loadDataFromPlayer takes string name, integer dataCount, player p returns nothing
    local integer i
    set StrCount = 0
    call SetPlayerName(Player(15), " ") // Пробел считается за пустую строку
    if (GetLocalPlayer() == p) then
        call Preloader(name) // Загрузить файл от игрока
    endif
    call SetPlayerName(Player(15), " ")
    set i = StrCount
    loop
        exitwhen (i >= dataCount)
        call ExecuteFunc("ESD") // У всех игроков должно быть одинаковое количество вызовов функции ESD
        set i = i + 1
    endloop
    call SetPlayerName(Player(15), null) // Вернуть имя по умолчанию
endmethod
В одном файле 24~кб данных. Сам файл прелоада 44кб.
Вроде я внимательно всё читал.
28
считай количество call Preload( "") в файле
ведь именно с помощью них данные заносятся в файл
а с помощью call SetPlayerName и call ExecuteFunc("ESD") считываются
кстати можно обойтись и без "У всех игроков должно быть одинаковое количество вызовов функции ESD"
хотя этот цикл мне вообще не понятен
set i = StrCount
    loop
        exitwhen (i >= dataCount)
        call ExecuteFunc("ESD") // У всех игроков должно быть одинаковое количество вызовов функции ESD
        set i = i + 1
    endloop
зачем мы вызываем ESD если она в прелоад файле вызывается
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.