Перейти к содержанию
Авторизация  
Alex Kireev

[SOC]Отображение координат ГГ

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

 

Небольшое изменение скрипта, отображающий координаты ГГ.

Автор marlock08, из этой статьи.

Файлы игры, которые будем редактировать:

  • scripts/bind_stalker.script
  • config/ui/ui_custom_msgs.xml

1. Открываем файл bind_stalker.script находим строку object_binder.update(self, delta) и дописываем:

Спойлер

function actor_binder:update(delta)
    object_binder.update(self, delta)
    
    posihion.posihion_mod()

Строку posihion.posihion_mod() можно написать и в конце этой функции, после self.bCheckStart = false end, между двумя end

Спойлер

        level_tasks.add_lchanger_location()

        self.bCheckStart = false

        end

    posihion.posihion_mod()

end

2. Открываем файл ui_custom_msgs.xml и в начале, после <header> дописываем:

Спойлер

 <header>      

<cs_debug  x="450" y="80" width="600" height="100" complex_mode="1">
                <text font="graffiti22"  r="240" g="217" b="182" a="255" align="l"/>
       </cs_debug>

 Здесь можно поменять расположение выводимого текста.

Изначально текст выводиться по середине экрана, для смены места текста, редактируйте значения х и у.
Начало координат расположено в верхнем левом углу экрана. Ось "Х" расположена горизонтально, и направлена слева - направо. Ось "Y" расположена вертикально и направлена сверху - вниз.

3. Осталось написать сам скрипт

В папке gamedata/scripts создаем файл posihion.script и в него добавляем следующий текст:

Спойлер

    ------------------------------------- Вывод информации level_vertex_id, game_vertex_id, pos
    
function posihion_mod()
    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 valid = pos2:distance_to(pos) <= 0.7                                   
    local msg = string.format("lvid: %d\\n", lvid) ..                             -- Левел вертекс
                string.format("gvid: %d\\n", gvid) ..                              -- Гейм вертекс
                string.format("pos: %.2f,%.2f,%.2f\\n", pos.x, pos.y, pos.z) ..   -- Координаты ГГ, округлены до 2х знаков после точки
    --            string.format("dir: %f,%f,%f\\n", dir.x, dir.y, dir.z) ..         -- Направление взгляда, ЗАКОМЕНТИРОВАНО
                string.format("valid: %s", tostring(valid))                       -- Положение ГГ, на земле, в воздухе или на объекте
    if cs ~= nil then
        cs:wnd():SetText(msg)                                                     -- Выводим 
    end
end

Изначально выводится число с 6ю знаками после запятой. Для уменьшения знаков после запятой, число округляют до нужной точности.  Более подробно про это можно почитать здесь.

Тестировал на ТЧ, версия игры 1.0004

Изменено пользователем Alex Kireev
  • Лайк 1
  • Хабар 2

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


Ссылка на сообщение
Поделиться на другие сайты
 

Осталось только повесить на кнопку для удобства

function on_key_press(dik)
    if (dik == DIK_keys.DIK_RCONTROL) then
        posihion_mod()
    end
end

function on_game_start()
    RegisterScriptCallback("on_key_press",on_key_press)
end

Если движок позволяет конечно.

  • Мастер! 1

Беспечный диздок

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


Ссылка на сообщение
Поделиться на другие сайты
 

hothead можно сделать вызов скрипта из главного меню, то есть Esc -> F4 -> Esc, но там нужен будет обработчик клавиш, или написать функцию скрипта в файле главного меню, там где будет назначаться кнопка вызова скрипта.

Папка gamedata/scripts, файл ui_main_menu.script

И в конце, где обработчик нажатий клавиш, дописать условие, в котором будет включаться скрипт, и тут уже 2 варианта есть. Попозже постараюсь рассказать.


Дополнено 10 минуты спустя

В догонку к посту, допольные параметры для скрипта.

Важно, после передачи аргументов в строку, если это не последняя строка, то надо ставить две точки:

Спойлер

   string.format("dir: %f,%f,%f\\n", dir.x, dir.y, dir.z) ..         -- Это не последняя строка ТОЧКИ СТАВИТЬ
                string.format("valid: %s", tostring(valid))                       -- Это последняя строка, ТОЧКИ НЕ СТАВИТЬ
    if cs ~= nil then

Вот список дополнительных параметров, которые можно выводить на экран

Спойлер

                string.format("bleeding: %f\\n",db.actor.bleeding)..              -- Потеря крови 
                string.format("satiety: %f\\n",db.actor.satiety)..              -- Сытность
                string.format("section: %s\\n",db.actor:section())..                  -- Секция, раздел???
                string.format("name: %s\\n",db.actor:name())..                        -- Имя???
                string.format("health: %.2f\\n", db.actor.health)..                   -- Здоровье    

                string.format("morale: %.2f\\n", db.actor.morale)..                   -- Мораль???
                string.format("power: %.2f\\n", db.actor.power)..                     -- Выносливость
                string.format("psy_health: %.2f\\n", db.actor.psy_health)..           -- Пси излучение???
                string.format("radiation: %.2f\\n", db.actor.radiation)..             -- Облученние радиацией

ЧТО ТО МОЖЕТ НЕ РАБОТАТЬ!!!

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


Ссылка на сообщение
Поделиться на другие сайты
 

Может быть пригодится

Скрипт выводить на экран местонахождение ГГ, полосу здоровья и брони 

function posihion_mod()
	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 outfit = db.actor:get_current_outfit()   -- Функция получения брони
	local armor = 0
	
	if outfit then       				    -- Если броня есть
		armor = outfit:condition()  		-- То получаем её состояние
	else
		armor = 0  						    -- Иначе считать брони нет
	end
	
	
	local pos = db.actor:position()                                               -- Положение актера                                  
	local msg =
				string.format("Pos: %.2f,%.2f,%.2f\\n", pos.x, pos.y, pos.z) ..   -- Координаты ГГ
				string.format("Health: %.2f\\n", db.actor.health)..               -- Жизнь   
				string.format("Armor %.2f\\n", armor)                             -- Броня

	if cs ~= nil then
		cs:wnd():SetText(msg)                                                   
	end
end

 

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


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу