Вычисляем координаты — различия между версиями
Материал из S.T.A.L.K.E.R. Inside Wiki
| (не показаны 8 промежуточные версии 4 участников) | |||
| Строка 1: | Строка 1: | ||
Нашел на одном форуме, достаточно интересно. | Нашел на одном форуме, достаточно интересно. | ||
| − | Как получить координаты для спавна предмета или НПЦ. Скрипт сей найден на каком-то форуме, проверен и работает :) | + | ''Как получить координаты для спавна предмета или НПЦ. Скрипт сей найден на каком-то форуме, проверен и работает :)'' |
функция спавна имеет вид | функция спавна имеет вид | ||
<code> | <code> | ||
| Строка 7: | Строка 7: | ||
</code> | </code> | ||
Где: | Где: | ||
| − | section - имя того/чего спавним | + | |
| − | position,levelvertex,gamevertex - координаты, позиция вершины обьекта, и сектора карты. | + | '''section''' - имя того/чего спавним |
| − | Напишу подробно, как очень про100 их узнать: | + | |
| − | Заходим, предварительно распаковав, в каталог gamedata/scripts/ | + | '''position,levelvertex,gamevertex''' - координаты, позиция вершины обьекта, и сектора карты. |
| − | И там в файле ui_main_menu.script | + | |
| − | в конце дописываем это | + | Напишу подробно, как очень про100 их узнать: |
| − | < | + | |
| − | function main_menu: | + | Заходим, предварительно распаковав, в каталог '''gamedata/scripts/''' |
| + | И там в файле '''ui_main_menu.script''' в конце дописываем это: ВНЕСУ ПОПРАВКУ (ТАК ПРОЩЕ) by VIKman | ||
| + | <lua> | ||
| + | function main_menu:OnButton_coordinats_clicked() | ||
local text | local text | ||
local vid | local vid | ||
| Строка 26: | Строка 29: | ||
news_manager.send_tip(db.actor, text, nil, nil, 30000) | news_manager.send_tip(db.actor, text, nil, nil, 30000) | ||
end | end | ||
| − | </ | + | </lua> |
| + | |||
| + | И после: | ||
| + | |||
| + | <lua>if dik == DIK_keys.DIK_S then | ||
| + | self:OnButton_load_spawn() | ||
| + | |||
| + | elseif dik == DIK_keys.DIK_Q then | ||
| + | self:OnMessageQuitWin()</lua> | ||
| + | |||
| + | Дописываем: | ||
| + | |||
| + | <lua>if dik == DIK_keys.DIK_S then | ||
| + | self:OnButton_load_spawn() | ||
| + | |||
| + | elseif dik == DIK_keys.DIK_Q then | ||
| + | self:OnMessageQuitWin() | ||
| + | |||
| + | elseif dik == DIK_keys.DIK_F11 then | ||
| + | self:OnButton_coordinats_clicked()</lua> | ||
Теперь в игре идём на то место (или ногами или деморекордом), где спавним обьект, выходим в меню игры, и жмём на клавишу | Теперь в игре идём на то место (или ногами или деморекордом), где спавним обьект, выходим в меню игры, и жмём на клавишу | ||
| − | + | F11 , а мы услышим звуковой сигнал, после чего выходим в игру из меню, и в строке сообщений высветиться вся инфа. Всё - F12 или на бумажку. | |
| − | '''By Pereiro, added by loxotron''' | + | '''By Pereiro, added by loxotron, pravka by VIKman''' |
[[Категория:Скрипты]] | [[Категория:Скрипты]] | ||
| + | |||
| + | --------------------------------------------------------------- | ||
| + | '''Предлагаю более лёгкий способ:''' | ||
| + | Создайте новый скрипт, в него запишите следующую функцию: | ||
| + | function show_coordinates() | ||
| + | local hud = get_hud() | ||
| + | local cs = hud:GetCustomStatic("cs_debug") | ||
| + | if cs == nil then | ||
| + | hud:AddCustomStatic("cs_debug", true) | ||
| + | cs = hud:GetCustomStatic("cs_debug") | ||
| + | end | ||
| + | local lvid, gvid = db.actor:level_vertex_id(), db.actor:game_vertex_id() | ||
| + | local pos, dir = db.actor:position(), db.actor:direction() | ||
| + | local pos2 = level.vertex_position(lvid) | ||
| + | local d = vector():sub(pos, pos2) | ||
| + | local valid = (math.abs(d.x) <= 0.35 and math.abs(d.y) < 1.0 and math.abs(d.z) <= 0.35) | ||
| + | local msg = string.format("lvid: %d\\n", lvid) .. | ||
| + | string.format("gvid: %d\\n", gvid) .. | ||
| + | string.format("pos: %f,%f,%f\\n", pos.x, pos.y, pos.z) .. | ||
| + | string.format("dir: %f,%f,%f\\n", dir.x, dir.y, dir.z) .. | ||
| + | "valid: " .. tostring(valid) | ||
| + | if cs ~= nil then | ||
| + | cs:wnd():SetText(msg) | ||
| + | end | ||
| + | end | ||
| + | Далее открываем bind_stalker.script и находим функцию actor_binder:update(delta) | ||
| + | Напишем в ней после: | ||
| + | local time = time_global() | ||
| + | game_stats.update (delta, self.object) | ||
| + | Это: | ||
| + | if t_coord < time then | ||
| + | t_coord = time + 250 | ||
| + | имя_вашего_скрипта.show_coordinates() | ||
| + | end | ||
| + | 250 - это четверть секунды, т.е. четыре раза в секунду будет обновляться информация о координатах. | ||
| + | Теперь нужно обозначить нашу новую переменную: просто где-нибудь вне всяких функций в этом же файле напишите: | ||
| + | t_coord=0 | ||
| + | Чуть не забыл, в папке config\ui в файле, например, "ui_custom_msgs.xml" в конце перед </header> напишите: | ||
| + | <pre> | ||
| + | <cs_debug x="200" y="180" width="600" height="100" complex_mode="1"> | ||
| + | <text font="letterica18" r="240" g="217" b="182" a="255" align="l"/> | ||
| + | </cs_debug> | ||
| + | </pre> | ||
| + | Всё! Теперь в игре перед вами всё время высвечиваются координаты.! | ||
| + | |||
| + | '''by''' '''http://lubu.my1.ru/''' | ||
Текущая версия на 11:53, 27 июня 2011
Нашел на одном форуме, достаточно интересно.
Как получить координаты для спавна предмета или НПЦ. Скрипт сей найден на каком-то форуме, проверен и работает :) функция спавна имеет вид
alife():create(section,position,levelvertex,gamevertex)
Где:
section - имя того/чего спавним
position,levelvertex,gamevertex - координаты, позиция вершины обьекта, и сектора карты.
Напишу подробно, как очень про100 их узнать:
Заходим, предварительно распаковав, в каталог gamedata/scripts/ И там в файле ui_main_menu.script в конце дописываем это: ВНЕСУ ПОПРАВКУ (ТАК ПРОЩЕ) by VIKman
function main_menu:OnButton_coordinats_clicked() local text local vid local gvid local a = vector() local text a = db.actor:position() vid = db.actor:level_vertex_id() gvid = db.actor:game_vertex_id() text = "Позиция:\\nX= "..a.x.."\\nY= "..a.y.."\\nZ= "..a.z.."\\nlevel_vertex= "..vid.."\\ngame_vertex_id= "..gvid news_manager.send_tip(db.actor, text, nil, nil, 30000) end
И после:
if dik == DIK_keys.DIK_S then self:OnButton_load_spawn() elseif dik == DIK_keys.DIK_Q then self:OnMessageQuitWin()
Дописываем:
if dik == DIK_keys.DIK_S then self:OnButton_load_spawn() elseif dik == DIK_keys.DIK_Q then self:OnMessageQuitWin() elseif dik == DIK_keys.DIK_F11 then self:OnButton_coordinats_clicked()
Теперь в игре идём на то место (или ногами или деморекордом), где спавним обьект, выходим в меню игры, и жмём на клавишу F11 , а мы услышим звуковой сигнал, после чего выходим в игру из меню, и в строке сообщений высветиться вся инфа. Всё - F12 или на бумажку.
By Pereiro, added by loxotron, pravka by VIKman
Предлагаю более лёгкий способ: Создайте новый скрипт, в него запишите следующую функцию:
function show_coordinates()
local hud = get_hud()
local cs = hud:GetCustomStatic("cs_debug")
if cs == nil then
hud:AddCustomStatic("cs_debug", true)
cs = hud:GetCustomStatic("cs_debug")
end
local lvid, gvid = db.actor:level_vertex_id(), db.actor:game_vertex_id()
local pos, dir = db.actor:position(), db.actor:direction()
local pos2 = level.vertex_position(lvid)
local d = vector():sub(pos, pos2)
local valid = (math.abs(d.x) <= 0.35 and math.abs(d.y) < 1.0 and math.abs(d.z) <= 0.35)
local msg = string.format("lvid: %d\\n", lvid) ..
string.format("gvid: %d\\n", gvid) ..
string.format("pos: %f,%f,%f\\n", pos.x, pos.y, pos.z) ..
string.format("dir: %f,%f,%f\\n", dir.x, dir.y, dir.z) ..
"valid: " .. tostring(valid)
if cs ~= nil then
cs:wnd():SetText(msg)
end
end
Далее открываем bind_stalker.script и находим функцию actor_binder:update(delta) Напишем в ней после:
local time = time_global() game_stats.update (delta, self.object)
Это:
if t_coord < time then t_coord = time + 250 имя_вашего_скрипта.show_coordinates() end
250 - это четверть секунды, т.е. четыре раза в секунду будет обновляться информация о координатах. Теперь нужно обозначить нашу новую переменную: просто где-нибудь вне всяких функций в этом же файле напишите:
t_coord=0
Чуть не забыл, в папке config\ui в файле, например, "ui_custom_msgs.xml" в конце перед </header> напишите:
<cs_debug x="200" y="180" width="600" height="100" complex_mode="1"> <text font="letterica18" r="240" g="217" b="182" a="255" align="l"/> </cs_debug>
Всё! Теперь в игре перед вами всё время высвечиваются координаты.!