XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Желтая пресса: обучающие статьи
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

 
YellowStar
poon
offline
Опыт: 15,144
Активность:
Хранилище локализованных строк в wc3
Данная статья выложена для ознакомления юзеров с некоторыми методами работы с архивами.
Чтобы переводить по данному методу, вы должны иметь под рукой вторую мою статью о мультиязычности карт (где описана одна из MPQ возможностей) так как данная статья будет ссылаться на прошлую(LocaleID).
Требование:
Знаниче Jass [Среднее]
Прочтение прошлой статьи по MPQ переводам.
Много времени и нервов.
  1. Подготовка к переводу Jass кода.
Ну для начала загрузите файл карты. Для перевода нам потребуеться игровой кэш, так что создайте его в глобальных переменных(jass - кнопка переменных ; vjass - globals,englobals). Теперь создадим sample прелоад file. Создаем триггер срабатывающий на запуск карты в warcraft3ft и добавляем туда такую команду.
call PreloadGenStart()
call PreloadGenEnd("PRELOAD\\MySamplePreload.pld") можно и .j
В целом у нас все готово переходим ко второму этапу. (Не забудьте закоментить строки прелоадГенСтарт и ГенЕнд, иначе потрет вашу дальнейшую работу, эти функции нам больше не понадобяться)
  1. Разбираемся в .pld
Чтобы понять как происходит перевод строк мы должны будем разобраться в .pld файле.
Прелоадер может:
  • Работать с функциям common.j
  • Работать с подфункциями
  • Работать с переменными (объявляються внутри файла как globals ; endglobals)
Прелоадер неможет:
  • Работать с функциями blizzard.j и функциями находящимися в карте.
  • Работать с переменными которые находяться в карте.
  • Запускать отдельные потоки.
  • Работать с локальными игроками.
  • Работать с функциями common.j дописанные пользователем (переменные тоже идут в счет)
Открыв наш файл MySamplePreload.pld мы видим такую конструкцию.
function PreloadFiles takes nothing returns nothing
call PreloadEnd(0.0)
endfunction
Заметьте функция PreloadFiles ОБЯЗАТЕЛЬНАЯ!!!! Если её удалить то прелоадер работать не будет. Кстати как пример могу показать что будет работать внутри прелоад файла. Также если в коде прелоадера будет хотя бы одна ошибка, весь прелоадер работать не будет!!
globals
boolean b=true
endglobals
function MessageTrue takes nothing returns string
return "TRUE"
endfunction
function MessageFalse takes nothing returns string
return "FALSE"
endfunction
function PreloadFiles takes nothing returns nothing
if b then
call DisplayTextToPlayer(Player(0),0,0,MessageTrue())
else
call DisplayTextToPlayer(Player(0),0,0,MessageFalse())
endif
endfunction
собственно этого достаточно знать чтобы перейти к следующему этапу.
  1. Первые шаги по переводу.
Скопируем наш .pld файл столько количество раз, сколько будет у нас версий с переводом.
Далее мы попробуем локализовать такой код!!!
function TestLocalization takes nothing returns nothing
call BJDebugMsg("That version ENGLISH")
endfunction
Чтобы его локализовать нам придеться добавить одну функцию...
function PreloadLocalPlayer takes player p returns boolean
return GetLocalPlayer()==p
endfunction
Далее мы делаем нашу запись такого типа.
function TestLocalization takes nothing returns nothing
local integer i=0
loop
exitwhen i>11
if PreloadLocalPlayer(Player(p)) then
call BJDebugMsg("That version ENGLISH")
endif
set i=i+1
endloop
endfunction
Это требуеться потому что работа с LocaleID подразумевает работу с Локальным игроком(так как мы будем использовать КЭШ!)
Собственно переходим к Кэшовой записи. Меняем
call BJDebugMsg("That version ENGLISH")
на
call BJDebugMsg(GetStoredString(InitGameCache("SampleLocal"),"Version","That version ENGLISH"))
Теперь добавляем в наши .pld файлы такие строки. (К примеру у нас две версии RUS и ENG)
RUS:
call StoreString(InitGameCache("SampleLocal"),"Version","That version ENGLISH","Эта версия РУССКАЯ")
ENG:
call StoreString(InitGameCache("SampleLocal"),"Version","That version ENGLISH","That version ENGLISH")
На данном этапе все. Переходим к следующему этапу.
  1. Подключаем перевод к нашей карте.
Чтобы подключить перевод к карте, вам потребуеться изучить другую мою статью по поводу MPQ. Если вы её читали то заносим наши прелоад файлы в карту с ОДИНАКОВЫМИ именами и разными LocaleID. Русский перевод с RUS LocaleID ; Английскую с ENG LocaleID.
Теперь чтобы подключить перевод в карте, мы в скрипте при загрузки карты (вместо прелоад GENStart и ENd) записываем такую функцию.
call Preloader("SampleLocaliz\\MySamplePreload.pld")
Это запрелоадит все строки в игровой Кэш, каждому пользователю на комп, в зависимости от версии варкрафта. (Совет: синхронизируйте данные внутри Кэшей после использование переменной, иначе возможен Десинк.(SyncStoredValue(gamecache,string,string)))
Все перевод в принципе готов. Все что вам осталось сделать это перевести строки и занести их в свои .pld и обновлять постоянно по количеству строк. Далее дело техники ;)...
  1. Возможные использования Preloader'a
    Вот пару идей для использования прелоадера
    • Создание конфигов [-loadcfg ; -savecfg]
    • Создание сэйвлоадов на локальных компах (Т.Е переносим данные из карты в карту в мультиплеере(Проверял, работает))
    • Создание сэйвлоадов героев(Ога, и это работает, тоже делал)
  1. Для переводчиков
Есди же вы все же решили переводить проффесионально то как вариант подойдет еще один метод. Копируем .wts файл. И меняем ему локальный ID. Далее достаем командой GetLocalizedString ;). Так будет намного удобнее и правильнее (Не будет различных десинхнронизаций)
P.S: Возможно выложу пример если не будет лень заниматься его реализацией.
Спасибо за внимание.
Старый 24.11.2009, 12:56
iZucken
ШТО
offline
Опыт: 17,960
Активность:
Это же... КРУТО!!!
Особенно многим пригодится вот это:
Создание сэйвлоадов на локальных компах
Создание сэйвлоадов героев
Я о таком подозревал, но, думал что можно обойтись просто кешем...
Старый 24.11.2009, 20:18
ScorpioT1000
Работаем
online
Опыт: отключен
Старый 25.11.2009, 12:09
FunkieFoO

offline
Опыт: 7,159
Активность:
А кстати насцет прелоада... в прелоад можно записать любой код? например си++ мона?
FunkieFoO добавил:
А кстати насцет прелоада... в прелоад можно записать любой код? например си++ мона?
Старый 01.12.2009, 08:14
Sebra

offline
Опыт: 5,603
Активность:
narayan:
Создание конфигов [-loadcfg ; -savecfg]
Создание сэйвлоадов на локальных компах (Т.Е переносим данные из карты в карту в мультиплеере(Проверял, работает))
Создание сэйвлоадов героев(Ога, и это работает, тоже делал)
Раз уж всё равно делал, брось примерчики...
А то уж больно сомнительно.
ScorpioT1000, Не о том совсем.
Старый 03.12.2009, 20:44
ScorpioT1000
Работаем
online
Опыт: отключен
Для локализации строк жасс-кода моя вещ рулит )
А так да, это солюшен, молодец.
Старый 03.12.2009, 20:52
Anufis

offline
Опыт: 6,290
Активность:
Ты можешь написать, не просто как создавать пустой прелоад, а что-то туда записать еще триггерами?
Старый 08.12.2009, 17:55
YellowStar
poon
offline
Опыт: 15,144
Активность:
Как бы там в примерах написано все:). Реализовать можно самому за пять минут сеив лоад -,- как бы геимкэш работает внутри...
Старый 08.12.2009, 18:00
Anufis

offline
Опыт: 6,290
Активность:
narayan:
Как бы там в примерах написано все
В каком пункте, а то я слепой. Не вижу, как заставить карту создать pld-файл и написать туда 5 строк триггерно.
Старый 08.12.2009, 18:06
Тзинч

offline
Опыт: 4,948
Активность:
Хм... хорошая статья. Но ей не хватает нормальной оформления. Например: те же примеры с кодом.
Думает, бросать моделлинг и изучать жасс.
Старый 09.12.2009, 12:31
ZeToX2007

offline
Опыт: 7,009
Активность:
Цитата:
Сообщение от narayan
Создание сэйвлоадов героев(Ога, и это работает, тоже делал)


можете кинуть пример ?
Старый 24.04.2010, 21:01
YellowStar
poon
offline
Опыт: 15,144
Активность:
В барахолке выкладывал.
Старый 25.04.2010, 00:08

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 21:02.