Перейти к контенту

Инструментарий для мододелов


HIGHLANDER

Рекомендуемые сообщения

(изменено)

А так вот шняжка, строящая графику исходя из распотрашенного all.spawn

http://koavia.com/n1/spawnreader.rar(13.5 метров (картинки:)))

 

Например, арты в темной долине

f15b4c64108d9aedeb.jpg

 

Исходиники (про недоделки читай read.me)

http://koavia.com/n1/spawnreader_cpp.zip(10 метров (+data левел вертексов на 2 уровня))

Изменено пользователем Halford
  • Нравится 1

Поделиться этим сообщением


Ссылка на сообщение

Таксс...

 

На чем писать и производить начальную отладку скриптов...

 

предлагаю...

 

Всемогуторный(с) редактор скрипотов и проч и проч. 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() исправить класс (копированием писал) забыл, а класс этот был от предыдущего окна (ветвится управление у мну) и приехали - сталкер работает и кнопяра жмется - только вот результата ни какого... :lol:

============================

Упс... я по "глупости" думал что у пысов в скриптах словечко class это "ключевое слово" языка, дык оказывается нет. К сведению - ключевые слова запрещено использовать в качестве имен переменных. ТЕ если class ключевое в языке то написать

local class

нельзя, если очень хочется можно так

local class_

Дык такие аномалии есть в

inventory_upgrades.script

sim_squad_generic.script

Так что если придется работать с этими файлами то local class лудше просто перименовать - там их жизнь удивительно коротка - 2-3 строчки подряд.

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

    Ни один зарегистрированный пользователь не просматривает эту страницу.

AMK-Team.ru

×
×
  • Создать...