Вычисляем координаты — различия между версиями — S.T.A.L.K.E.R. Inside Wiki

Вычисляем координаты — различия между версиями

Материал из S.T.A.L.K.E.R. Inside Wiki

Перейти к: навигация, поиск
 
(не показаны 6 промежуточные версии 4 участников)
Строка 12: Строка 12:
 
'''position,levelvertex,gamevertex''' - координаты, позиция вершины обьекта, и сектора карты.  
 
'''position,levelvertex,gamevertex''' - координаты, позиция вершины обьекта, и сектора карты.  
  
Напишу подробно, как очень про100 их узнать:  
+
Напишу подробно, как очень про100 их узнать:
 +
 
Заходим, предварительно распаковав, в каталог '''gamedata/scripts/'''  
 
Заходим, предварительно распаковав, в каталог '''gamedata/scripts/'''  
И там в файле '''ui_main_menu.script'''  
+
И там в файле '''ui_main_menu.script''' в конце дописываем это: ВНЕСУ ПОПРАВКУ (ТАК ПРОЩЕ) by VIKman
в конце дописываем это  
+
<lua>
<code>
+
function main_menu:OnButton_coordinats_clicked()  
function main_menu:OnButton_credits_clicked()  
+
 
local text  
 
local text  
 
local vid  
 
local vid  
Строка 29: Строка 29:
 
news_manager.send_tip(db.actor, text, nil, nil, 30000)  
 
news_manager.send_tip(db.actor, text, nil, nil, 30000)  
 
end  
 
end  
</code>
+
</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>
  
 
Теперь в игре идём на то место (или ногами или деморекордом), где спавним обьект, выходим в меню игры, и жмём на клавишу  
 
Теперь в игре идём на то место (или ногами или деморекордом), где спавним обьект, выходим в меню игры, и жмём на клавишу  
СОЗДАТЕЛИ (CREDITS) - соответственно нашему взоры не предстаёт никакой список создателей, а мы услышим звуковой сигнал, после чего выходим в игру из меню, и в строке сообщений высветиться вся инфа. Всё - F12 или на бумажку.
+
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>

Всё! Теперь в игре перед вами всё время высвечиваются координаты.!

by http://lubu.my1.ru/

Другие места
LANGUAGE