Bloodest 1 Опубликовано 13 Октября 2008 (изменено) А так вот шняжка, строящая графику исходя из распотрашенного all.spawn http://koavia.com/n1/spawnreader.rar(13.5 метров (картинки)) Например, арты в темной долине Исходиники (про недоделки читай read.me) http://koavia.com/n1/spawnreader_cpp.zip(10 метров (+data левел вертексов на 2 уровня)) Изменено 16 Февраля 2010 пользователем Halford 1 Поделиться этим сообщением Ссылка на сообщение
Bloodest 1 Опубликовано 30 Октября 2008 Таксс... На чем писать и производить начальную отладку скриптов... предлагаю... Всемогуторный(с) редактор скрипотов и проч и проч. SciTE http://scite.ruteam.ru/ 1.Качаем 2.Ставим 3.Запускаем 4. Открываем, например ranks.script. Фи - все ч/б. Эт потому, что сталкере луа скрипты не с тем расширением. Самое простое, жмем - меню подсветка, а там выбираем lua. Текст раскрасился. Уже хорошо. Тут видим на квик-меню интереснейшую кнопочку (отпечатки стоп) - но она, зараза, серая - не жмется... 5. Правим мозги всемогутора. Ползем в меню - настройки - Открыть lua.properties. Открывается файлик -полный всякой тарбенью, ее и правим. Сразу бросается в глаза file.patterns.lua=*.lua;*.macro; добавляем file.patterns.lua=*.lua;*.macro;*.script Сохраняем lua.properties, закрываем ranks.script, открываем - сразу выскакивает цветным, с семантикой. Идем дальше command.go.*.lua=Lua-5.0.exe "$(FileNameExt)" # Lua 4.0 #command.go.*.lua=Lua-4.0.exe -c -f "$(FileNameExt)" # ========================================================= # Команда меню - Выполнить (F5) command.go.*.lua=dofile $(FilePath) command.go.subsystem.*.lua=3 command - управляем командой go - команда с меню - "выполнить" тоесть строки с command.go - относятся к этой команде. Следующий октет * - выполнить действие subsystem - субситема всемогутора Действий может быть несколько - выполняется одно - по порядку следования то которое выполнимо. Сейчас их в два - Lua-5.0.exe - внешний интепритатор, dofile - встроенный всемогутора. =3 - субситема скриптов LUA меняем здесь lua на script command.compile.*.script=LuaC-5.0.exe -o "$(FileName).luc" "$(FileNameExt)" # Lua 5.0 command.go.*.script=Lua-5.0.exe "$(FileNameExt)" # Lua 4.0 #command.go.*.lua=Lua-4.0.exe -c -f "$(FileNameExt)" # ========================================================= # Команда меню - Выполнить (F5) command.go.*.script=dofile $(FilePath) command.go.subsystem.*.script=3 Возвращаемся к ranks.script. "Выполнить" доступна - жмем - и ничего... Это от того что в "рядовых" скриптах сталкера нет действий окромя как внутри функций. Интепритаор инициализирует функции и все... Попрубуем сбить инициализацию. Возьмем кусок function parse_ranks( s, tbl ) s = "0," .. s .. ",10000" local t = parse_names( s ) local i = 2 while i < #t do tbl[t[i]] = { tonumber(t[i-1]), tonumber(t[i+1]) } i = i + 2 end return t[i-2] end допустим у while i < #t do забыли дописать "do" - сотрем, выполним - выскочит ...ranks.script:24: 'do' expected near 'tbl' >Lua: error occurred while processing command Тоже самое будет и в игре... Таким образом можно отловить много, но к ,сожалению, далеко не все ошибки. 6. Более сложный - открывем ui_numpad.script ...ui_numpad.script:14: attempt to call global 'class' (a nil value) Так будет со всеми скриптами, содержащими классы. Здесь Луа Сталкера отличается "дефолтного". В луа они есть, классы, но в Сталкере они расширены вполть до изменеия семантики скриптов, во что и уперся интепритатор. Для проверки "выполнением" во всемогуторе достаточно "спустится" к дефолту - здесь достаточно сделать так --class "numpad" (CUIScriptWnd) local numpad = {} Те образовать псевдо-класс - в игре конечно он работать не будет - но для проверки ошибок вполне достаточно. Другое дело править а затем вертать обратно оч муторно. Автоматизируем. 6.1. Ползем обратно в lua.properties и вставляем самопальную шняжку command.name.12.* = sTaLkEr claSS command.mode.12.*=savebefore:yes command.12.*=dofile D:/stalker_class.lua command.subsystem.12.*=3 command.shortcut.12.*=Ctrl+M Все тоже самое ток 12 - цифирь означает "самопальную" команду редактора нумбер 12 всего может быть до 50 штук. Соответственно она будет вызываться "Ctrl+M" и действием ее будет интепритация скрипта D:/stalker_class.lua. Естественно его можно покласть и обозвать как заблагорассудится. Тем более естественным является то что его надо еще написать.. Вот содержимое. trace("начали \n") local position = editor.CurrentPos local start = 0 local flag = true while true do local s,e = editor:findtext("class", SCFIND_WHOLEWORD,start) if( not s) then break end local lineS = editor:LineFromPosition(s) start = editor.LineEndPosition[lineS] local sb = editor:PositionFromLine(lineS) local ss,es = editor:findtext("--", 0, sb,s)-- Проверяем не задизейблено ли определение класса путем установки -- if( not ss) then local s1,e1 = editor:findtext("\"",0,e+1) local s2,e2 = editor:findtext("\"",0,e1+1) local name = editor:textrange(e1,s2) trace ("Строка: "..lineS+1 .." имя класса: " ..tostring(name) .. "\n") editor:InsertText(s,"local " .. name .. " = {} --AutoM1969M ") flag = false end end ---------------экзекуция trace("экзекуция!\n") local exec = editor:GetText() dostring(exec) trace("закончили экзекуциию...\n") --------------- trace ("Возврат\n") start = 0 local delta = 0 while true do local s3,ed = editor:findtext("--AutoM1969M", SCFIND_WHOLEWORD,start) if( not s3) then break end local line = editor:LineFromPosition(s3) start = editor.LineEndPosition[line] trace ("строка: " ..tostring(line)+1 .. "\n") local sd = editor:PositionFromLine(line) editor:remove(sd, ed+1) if(position > ed and flag == true) then -- борьба со смещением курсора delta = delta + (ed+1-sd) end end editor:GotoPos(position-delta) -- delta только если прозводили удаление без вставки Ну, достаточно все просто. Встроенный интепритатор имеет доступ к редактируемому тексту через шнягу "editor". Ее и пользуем. Исчем в тексте словечки "class", преверяем не заремлины ли они. если нет - вычитываем то что в кавычках - имя будущего псевдокдласса ну всталяем перед "class" псевдо и рем и все это на одной строке. те было class "numpad" (CUIScriptWnd) стало local numpad = {} --AutoM1969M class "numpad" (CUIScriptWnd) Засасываем весь текст в окне в строку и кидаем ее в изолированный экзекут. Затем обратно - ищем метки AutoM1969M и чикаем все что перед ними и их самих - получаем исходник. Ну если встретиться ошибка - она вывалится нескольок иной stalker_class.lua:40: [string "-- File: UI_NUMPAD.SCRIPT..."]:20: '<eof>' expected near 'end' но место то же что и на экране (эт я чикнул строчку function numpad:__init(owner) super() - видит что есть хвост (функции) а головы у хвоста нет) песводо с метками остаются - но ни чего - правим, если исправили - после очередного ctrl+M все встает в "как надо". --========================== Эт все к тому что Сталкер некоторые ошибки кушает "на ура" а всемогутор их ловит. Тут на днях ошибся в заголовке при написании оконной менюхи. Вызов коллбека по нажатию кнопки один self:AddCallback("btn_create", ui_events.BUTTON_CLICKED, self.OnButton_create_clicked, self а в объявлении function set_brain_dialog:OnButton_create_clicked() исправить класс (копированием писал) забыл, а класс этот был от предыдущего окна (ветвится управление у мну) и приехали - сталкер работает и кнопяра жмется - только вот результата ни какого... ============================ Упс... я по "глупости" думал что у пысов в скриптах словечко class это "ключевое слово" языка, дык оказывается нет. К сведению - ключевые слова запрещено использовать в качестве имен переменных. ТЕ если class ключевое в языке то написать local class нельзя, если очень хочется можно так local class_ Дык такие аномалии есть в inventory_upgrades.script sim_squad_generic.script Так что если придется работать с этими файлами то local class лудше просто перименовать - там их жизнь удивительно коротка - 2-3 строчки подряд. Поделиться этим сообщением Ссылка на сообщение