VIPHunter
22.05.2002, 00:14
Если бы я знал точные ответы на все эти вопросы я бы разве спрашивал?
Но то что мне удалось догнать в ходе эксперементов. поделюсь по большому секрету.
1. Когда распаковал srver.scc и обработал утилиткой раскодировки получил последовательность #byte #byte ... вот таких чисел, где byte - число из диапазода 0..255. Скорее всего это управляющие коды инициализации, либо сервера, либо еще и каждого клиента. Возможно управляющая последовательность сервером обработки данных и передачи их клиентам.
2. Глобализация PublicVariable "NameOfValue" дает указание о рассылки переменной. Переменная может быть простого типа или объект. Про массивы и группы не сказанно, да я и не пробывал - не было надобности. Ну тут надо вспомнить принципы программирования на языке Ада. Дело в том, что каждый комп можно рассматривать как параллельный процесс, но не синхронизированный с остальными. Т.е. если точнее сказать, то почти синхронизированный. Синхронизация происходит по переменной time, которая доступна только для чтения, но различия ее значения, в зависимости от коннекта может достигать до 5 секунд и иногда более. Так же переменная player - обозначает локального игрока на данном компьютере. Из-за этого можно делать (как я уже пробывал) например разные вступительные ролики для каждой из сторон, а при желании и для каждого игрока...
Это я увлекся малость. Так вот из-за того что сетевая игра - на самом деле параллельные процессы то инструкция типа
MyScoreEast=ScoreEast+1
publicVariable "MyScoreEast"
неверна, так как увеличение вроде на единицу из-за сдвига времени приведет к тому, что переменная увеличиться на количество игроков в игре + сервер, если он удаленный. Скорее лучше сделать
PublicVariable "MyScoreEast"
MyScoreEast=MyScoreEast+1
Но лучше бы рассылку данных производить где-то в середине интервала изменения переменной. После рассылки значение переменной будут совпадать (если переменная с фиксированным интервалом изменения). Кстати какое значение будет итоговым - трудно сказать. Зачем нужна рассылка? Ну для того, чтобы у тех у кого лаги, то они получали достоверные сведения о игре, а не то что у них происходит. Так же не следует делать рассылку кучи переменных, потому что она будет загружать траффик. Достаточно рассылать основные например счет. Кстати инициализацию переменных в начале игры не нужно рассылать, потому как инициализация пройдет у каждого на компе локально. Если вы не увеличиваете и не уменьшаете значение переменной то рассылку стоит вести по образу:
IsDone=true
PublicVariable "IsDone"
Теперь еще. Если вы создаете динамически юниты или технику в игре, то тут надо обходить еще одну трудность. На самом деле игра игра идет на компе каждого своя. Что рассылаеться, так это положение юнита и его направление движение, а так же состояние (например ведет огонь). Игра немного экстраполирует данные (наверное видели в процессе игры как солдат бежит к дому, и пробегает его, а потом телепортируеться возле стены. Это вот экстрополяция. Так вот, чтобы создать юнит, нужно, чтобы его создавал один комп, а потом рассылал (для инициализации) первичные данные. Т.е. нужно блокировать создание объекта на других компах. Для этого нужно использовать переменную player. И потом не забыть разослать данные об объекте.. Кстати можно использовать addAction, для добавления кокому-то юниту. По этому типу я как-то написал шаблон для создания карт типа конквест... Но тут есть так же свои трудности.
Ну вроде что знал ответил.
Теперь догадки (продолжение начала).
В руководстве от БИС написанно, что локализация нужна для пременных из таблицы стрингов, для дальнейшего отображения на компе игрока. но на самом деле. Просмотрев несколько сетевых карт, я понял, что они как всегда наврали (такое подозрение, что никто там не знает, всех команд и описания параметров к ним, а те кто знают хотят заработать денег. По непроверенным данным на одном секретном сервере есть описание структуры config.cpp от БИС. Вообщем очень напоминает ситуацию с Кислородом. Вот так я и задаюсь вопросом. Зачем я платил 60 баксов и зачем они встраивали редактор, без описания...) Ладно, опять увлекся.
Локализироваться могут все объекты, как и в случае их публикации. Зачем это надо я еще не допрыгал. Но думаю может как раз для динамического создания.... Еще меня убивает то, что в их кодах локализация переменных сменяется глобализацией и наоборот. Вот тут я совсем не разобрался.
Вот может кто нить дополнит.
П.С. Копия того, что в споре тиснул на флеш.ру.
Но то что мне удалось догнать в ходе эксперементов. поделюсь по большому секрету.
1. Когда распаковал srver.scc и обработал утилиткой раскодировки получил последовательность #byte #byte ... вот таких чисел, где byte - число из диапазода 0..255. Скорее всего это управляющие коды инициализации, либо сервера, либо еще и каждого клиента. Возможно управляющая последовательность сервером обработки данных и передачи их клиентам.
2. Глобализация PublicVariable "NameOfValue" дает указание о рассылки переменной. Переменная может быть простого типа или объект. Про массивы и группы не сказанно, да я и не пробывал - не было надобности. Ну тут надо вспомнить принципы программирования на языке Ада. Дело в том, что каждый комп можно рассматривать как параллельный процесс, но не синхронизированный с остальными. Т.е. если точнее сказать, то почти синхронизированный. Синхронизация происходит по переменной time, которая доступна только для чтения, но различия ее значения, в зависимости от коннекта может достигать до 5 секунд и иногда более. Так же переменная player - обозначает локального игрока на данном компьютере. Из-за этого можно делать (как я уже пробывал) например разные вступительные ролики для каждой из сторон, а при желании и для каждого игрока...
Это я увлекся малость. Так вот из-за того что сетевая игра - на самом деле параллельные процессы то инструкция типа
MyScoreEast=ScoreEast+1
publicVariable "MyScoreEast"
неверна, так как увеличение вроде на единицу из-за сдвига времени приведет к тому, что переменная увеличиться на количество игроков в игре + сервер, если он удаленный. Скорее лучше сделать
PublicVariable "MyScoreEast"
MyScoreEast=MyScoreEast+1
Но лучше бы рассылку данных производить где-то в середине интервала изменения переменной. После рассылки значение переменной будут совпадать (если переменная с фиксированным интервалом изменения). Кстати какое значение будет итоговым - трудно сказать. Зачем нужна рассылка? Ну для того, чтобы у тех у кого лаги, то они получали достоверные сведения о игре, а не то что у них происходит. Так же не следует делать рассылку кучи переменных, потому что она будет загружать траффик. Достаточно рассылать основные например счет. Кстати инициализацию переменных в начале игры не нужно рассылать, потому как инициализация пройдет у каждого на компе локально. Если вы не увеличиваете и не уменьшаете значение переменной то рассылку стоит вести по образу:
IsDone=true
PublicVariable "IsDone"
Теперь еще. Если вы создаете динамически юниты или технику в игре, то тут надо обходить еще одну трудность. На самом деле игра игра идет на компе каждого своя. Что рассылаеться, так это положение юнита и его направление движение, а так же состояние (например ведет огонь). Игра немного экстраполирует данные (наверное видели в процессе игры как солдат бежит к дому, и пробегает его, а потом телепортируеться возле стены. Это вот экстрополяция. Так вот, чтобы создать юнит, нужно, чтобы его создавал один комп, а потом рассылал (для инициализации) первичные данные. Т.е. нужно блокировать создание объекта на других компах. Для этого нужно использовать переменную player. И потом не забыть разослать данные об объекте.. Кстати можно использовать addAction, для добавления кокому-то юниту. По этому типу я как-то написал шаблон для создания карт типа конквест... Но тут есть так же свои трудности.
Ну вроде что знал ответил.
Теперь догадки (продолжение начала).
В руководстве от БИС написанно, что локализация нужна для пременных из таблицы стрингов, для дальнейшего отображения на компе игрока. но на самом деле. Просмотрев несколько сетевых карт, я понял, что они как всегда наврали (такое подозрение, что никто там не знает, всех команд и описания параметров к ним, а те кто знают хотят заработать денег. По непроверенным данным на одном секретном сервере есть описание структуры config.cpp от БИС. Вообщем очень напоминает ситуацию с Кислородом. Вот так я и задаюсь вопросом. Зачем я платил 60 баксов и зачем они встраивали редактор, без описания...) Ладно, опять увлекся.
Локализироваться могут все объекты, как и в случае их публикации. Зачем это надо я еще не допрыгал. Но думаю может как раз для динамического создания.... Еще меня убивает то, что в их кодах локализация переменных сменяется глобализацией и наоборот. Вот тут я совсем не разобрался.
Вот может кто нить дополнит.
П.С. Копия того, что в споре тиснул на флеш.ру.