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

Принятый ответ

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

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
21
8 лет назад
Отредактирован awesomesk1ll
0
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кб.
Вроде я внимательно всё читал.
0
28
8 лет назад
Отредактирован nvc123
0
считай количество 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 если она в прелоад файле вызывается
0
21
8 лет назад
Отредактирован awesomesk1ll
0
nvc123:
считай количество 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 если она в прелоад файле вызывается
прелоад вызывается только у 1 игрока же, у других ESD выполняется для синхронизации.
Имею ввиду не для синхронизации данных, а что бы не было десинка от прелоада
(файл прелоада есть только у одного игрока например, который его загружает)
таким образом мы считываем файл одному игроку в память, без рассинхрона. затем передача данных другим игрокам
0
28
8 лет назад
0
таким образом мы считываем файл одному игроку в память, без рассинхрона.
считывание в память и так идёт без рассинхрона
рассинхрон вызывают локальные операции с хэндлами
0
21
8 лет назад
Отредактирован awesomesk1ll
0
В общем подытожу дискуссию по поводу начального вопроса. Данные транслировать(синхронизировать) можно только между всеми игроками. От одного игрока другому одному конкретному игроку - невозможно. Тем не менее у нас была проблема с большим подвисанием управления, после синхронизации. И мы решили мы этот момент способом описанным в комменте #10. По поводу обсуждения ниже - скоро доделаем версию 0.2 там можно будет пощупать все обсуждаемые моменты на деле. (сколько данных в одном прелоаде, скорость передачи и синхры данных и прочее)
Мы практически решили все наши проблемы с синхрой и теперь можем загружать на 10 игроков отдельно взятые уровни или же целые паки уровней (до 1000-1500 уровней!)~ файлы которых находятся только у одного игрока. Т.е. я запустил карту, построил в ней десяток уровней, десяток уровней обьединил в "пак". Затем в другой игре ко мне зашло 9 человек, у которых моих уровней нет. Но данные подгружаются от меня всем остальным игрокам. Так это и работает.
0
21
8 лет назад
0
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.