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

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

Тема для обсуждения скриптов всего и всех в серии игр STALKER.


Задавая вопрос (!):
1. Внимательно изучите суть вопроса. Вопрос должен соответствовать выбранной Вами темы. Это поможет сохранить порядок и читабельность темы, а также облегчит поиск и понимание сего;
2. Изучите то, что уже есть в теме (пролистайте "руками", воспользуйтесь поиском на форуме);
3. Изучите информацию которая может вам помочь:

 
 

Stalkerin. Там есть много хороших статей касательно данной темы.
Уроки по модостроению. Есть рабочие примеры готовых скриптов различного назначения.

 

Справочное руководство по языку Lua 5.1
https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/ru
Справочник по функциям и классам. Собрано много информации по функциям и классам, не всем, но по основные сведения предоставлены.

4. Дабы не превращать обсуждение в "кашу" разной информативной направленности, задавайте несколько вопросов по порядку (в разных постах) после того, как получите ответ на предыдущий вопрос;
5. "Спасибо" и тому подобное - будьте так любезны в ПМ. Если не любите писать в ПМ, в конце вопроса напишите фразу: "Заранее спасибо!" - или что-то в этом духе;
6. ПОЖАЛУЙСТА! Указывайте, для какой игры Вам необходима информация (ТЧ, ЧН, ЗП), если стоит мод - укажите название мода;
7. Если Вы что-то сделали и результат не такой, какой Вами задумывался, то, пожалуйста, приводите коды которые Вы изменяли/писали целиком! Это поможет другим правильно ответить на Ваш вопрос, а также оградит Вас от лишней писанины.
8. Оформляйте сообщение. Пользуйтесь тегами для того, чтобы отделить код от текста. Пишите грамотно - ПОЛЬЗУЙТЕСЬ ЗНАКАМИ ПРЕПИНАНИЯ.
9. И помните: «Правильно заданный вопрос – половина ответа».

 

Какие вопросы следует задавать, а какие нет...

 

Задавайте вопросы, которые касаются непосредственно скриптов и их работы, т.е. Вы что-то делаете, а у Вас что-то не получается, при этом у Вас на руках должен быть хотя бы какой-то код, свидетельствующий о Вашей причастности к вопросу.

 

Вопросы которые будут удалятся, следовательно их задавать не нужно:
-- Где находится та или иная функция?
Для ответа используем поиск по словам среди файлов оригинальной игры или мода, если объект поиска относится к нему, при помощью программы, которая Вам наиболее симпатизирует;
-- Как сделать что-то/то-то?
С подобными вопросами, либо в "ковырялки", где Вам вероятнее всего так же не ответят, либо выдвигаем мысли, подкреплённые теорией, практикой (идеальный вариант) и здравым рассудком;
-- Вопросы со смыслом: "сделайте", "совместите" и подобными глаголами повелительного наклонения.
-- К тому же удалению будут подвергаться вопросы, в которых масштабно не используются теги, для отделения кода и цитат от основного текста, а также не вписан в спойлер код размером превышающие семь строк.
Ответ на возможно возникший вопрос: В какую тему можно обратиться по поводу логики и спавна объектов?
В тему "ковырялок" соответствующей версии игры, для которой Вы задаёте вопрос.

И последнее: очень рекомендовано к прочтению Правила форума
 


  • Спасибо 1
  • Полезно 2
Ссылка на комментарий

Ребята выручайте нужна помощь возможно ли заспавнить модель к примеру укреплений из песка переведенную в огф формат ну и соответственно с текстурами если да то как ?

Ссылка на комментарий

Лёха_тц,

тебе же 5 страниц назад отвечали: спавнишь как physic_object, в custom_data надо прописать fixed_bones, чтобы модель не двигали. Ну и в огф должна быть сделана кость.

У тебя огф то есть?

 

Ну и после спавна надо еще рестриктором будет накрыть, чтобы нпц сквозь твое укрепление не ходили. Ну и если что, прятаться за ним они тоже не будут.

Ссылка на комментарий
но проблема в том что когда костюм достигает нулевой кондиции эти сообщения появлются одно за другим эквивалент появления примерно доля сотой секунды

Так это нужно прописывать не в update, а в функцию, вызываемую при попадании (hit_callback). Тогда никаих лишних переменных вводить не придётся.

Ссылка на комментарий
Так это нужно прописывать не в update, а в функцию, вызываемую при попадании (hit_callback). Тогда никаих лишних переменных вводить не придётся.

Для ГГ в оригиналах hit_callback не вызывается

Ссылка на комментарий

serega-gamer

Moжет что-то типа такого подойдёт? :

Я тут добавил и сообщение при восстановления костюма(если нужно конечно)

local hev_crash = "%c[255,160,160,160]Автоматическая система ввода медицинских препаратов\\n".."%c[default] %c[255,230,0,0]Общий сбой системы. Система отключается!"
local hev_restore = "%c[255,160,160,160]Автоматическая система ввода медицинских препаратов\\n".."%c[default] %c[255,230,0,0]Работа системы восстановлена. Система включается!"
local hev_min_cond_active = 0.01
local flag

local   function GetHevParam(hev)
            return hev:condition() < hev_min_cond_active and hev:section() == "nano_kostum"
        end

local   function ShowHevGameNews(msg, path)
            local snd_obj = xr_sound.get_safe_sound_object(path)
            snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0)
            db.actor:give_game_news(msg, "ui\\ui_iconsTotal", Frect():set(0,188,83,47), 0, 3000)
        end

function CheckHevCond()
    local act_suit = db.actor:item_in_slot(6)
    if not flag then
        if  act_suit and GetHevParam(act_suit) then
            ShowHevGameNews(hev_crash, 'HEV\\hev_crash')
            flag = true
        end
    elseif act_suit and not GetHevParam(act_suit) then
        ShowHevGameNews(hev_restore, 'HEV\\hev_restore')
        flag = nil
    end
end

CheckHevCond() на апдейт. Ну и задержку, если нужно

 

Изменено пользователем Gun12
Ссылка на комментарий

Gun12 Спасибо большое! Я как раз так и хотел что бы сообщение о ре-активации системы тоже приходило :ny_z_2:

Теперь такая проблема скажите пожалуйста кто в курсе можно ли через db.actor кровотечение отследить?? А то я что то только пси здоровье, радиацию, мораль и выносливость нашёл!

Изменено пользователем serega-gamer
Ссылка на комментарий

В окне инвентаря, по нажатии добавленной мною кнопки, создается окно наследованное от CUIScriptWnd. На нем размещаю список (использую CUIListWnd), который заполняю (CUIListItemEx). Реализацию в общем содрал из скриптов главного меню. Все вроде работает.

 

-----------------
class "CAddItemEx" (CUIListItemEx)

function CAddItemEx:__init() super()
    self:SetWndRect(0,0,330,30)

    self.item_icon = CUIStatic()
    self:AttachChild(self.item_icon)
    self.item_icon:SetAutoDelete(true)
    self.item_icon:SetWndRect(0,0,30,30)
    self.item_icon:SetStretchTexture(true)
    self.item_icon:InitTexture("ля-ля-ля")

    self.item_name = CUIStatic()
    self:AttachChild(self.item_name)
    self.item_name:SetAutoDelete(true)
    self.item_name:SetWndRect(32,0,300,30)
    self.item_name:SetFont(GetFontLetterica16Russian())
    self.item_name:SetTextColor(255,216,186,140)
    self.item_name:SetText("item_name")
end

function CAddItemEx:__finalize()

end

----------------
class "CUIMyScriptWnd" (CUIScriptWnd)

st_items_list = nil

function CUIMyScriptWnd:__init(owner) super()
--    self.owner = owner
    self:InitControls()
    self:InitCallBacks()
    
    self:FillItemsList()
end

function CUIMyScriptWnd:__finalize()

end

function CUIMyScriptWnd:InitControls()
    -- Положение и размеры окна
    self:Init(345,20,335,520)--345,2,335,520
    -- файл-описатель элементов
    local xml = CScriptXmlInit()
    xml:ParseFile("ля-ля-ля.xml")
    xml:InitStatic("main_background", self)
    self:Register(xml:Init3tButton("btn_close", self),"btn_close")

    -- список предметов
    st_items_list = CUIListWnd()
    st_items_list:Init(11, 370, 305, 140)
    self:AttachChild(st_items_list)
    st_items_list:SetAutoDelete(true)
    st_items_list:EnableScrollBar(true)
    st_items_list:Show(true)
    self:Register(st_items_list, "items_list")
end

function CUIMyScriptWnd:FillItemsList()
    local add_item = nil
    local num_add = 7
    for i = 1, num_add do
        add_item = CAddItemEx()
        add_item.item_icon:SetStretchTexture(true)
        add_item.item_icon:InitTexture("ля-ля-ля") -- иконка эл-та в списке

        local item_text = ""
        item_text = string.format("Item %d", i)
        add_item.item_name:SetText(item_text) -- надпись эл-та в списке

        if add_item and st_items_list then
            st_items_list:AddItem(add_item)
        end
    end
end

Но обнаружил проблему - после того, как хотя-бы раз было вызвано это мое окно со списком, при выходе в главное меню (там где загрузить\сохранить\выйти) на нем просматривается прозрачное окно списка со всеми добавленными строками. Т.е. похоже я чет напортачил с зачисткой при закрытии окна инвентаря. В скриптах главного меню, которые брал за образец, нигде нет даже упоминания DetachChild для строк списка и для самого окна списка.

Подскажите, как побороть ?

Ссылка на комментарий

стандартно скрываю

------------------ обработка нажатий клавы ---------------------------------
function CUIMyScriptWnd:OnKeyboard(dik, keyboard_action)
    CUIScriptWnd.OnKeyboard(self,dik,keyboard_action)
    if keyboard_action == ui_events.WINDOW_KEY_PRESSED then
        -- на выход повесим Esc
        if dik == DIK_keys.DIK_ESCAPE then
            self:on_Close()
        end
    end

    return true
end

-----------------
function CUIMyScriptWnd:on_Close()
    self:GetHolder():start_stop_menu(self, true)
end

 

 

Добавлено через 66 мин.:

В моем сообщении #3313 есть ф-ция заполнения списка элементами, состоящими из иконки и текста. Если к примеру элемент списка должен описывать патрон "ammo_9x18_fmj", как скриптово получить соответствующую ему иконку\текстуру (похоже из файла ui_icon_equipment.dds) и строку названия ?

 

Если хочу вывести список всех имеющихся боеприпасов, понятно, что нужно перебрать все объекты в инвентаре актера (подходящие ф-ции видел в описании класса game_object) и проверить принадлежность к искомому типу. В описаниях боеприпасов в файле weapons.ltx есть вроде подходящий параметр - "class = AMMO", но как к нему добраться скриптово ?

Ссылка на комментарий

AndreySol,

Если к примеру элемент списка должен описывать патрон "ammo_9x18_fmj", как скриптово получить соответствующую ему иконку\текстуру (похоже из файла ui_icon_equipment.dds) и строку названия ?

парсим из секции координаты иконки и ставим их(x, y, w, h)

Название аналогично, получаем строку и далее game.translate_string или SetTextST

Изменено пользователем RvP
Ссылка на комментарий

serega-gamer

Теперь такая проблема скажите пожалуйста кто в курсе можно ли через db.actor кровотечение отследить?? А то я что то только пси здоровье, радиацию, мораль и выносливость нашёл!

db.actor:get_bleeding()

возвращает float. причем не 0..1, у меня бывало и 2.4

Изменено пользователем Zander_driver
Ссылка на комментарий

Вот кто подскажет из за чего вот этот вылет

 

[591]=[sim_test_108]

[592]=[sim_test_109]

[593]=[sim_test_110]

[594]=[sim_test_111]

[595]=[sim_test_112]

[596]=[sim_test_113]

[597]=[sim_test_114]

 

FATAL ERROR

 

[error]Expression : no_assert

[error]Function : CXML_IdToIndex<class CCharacterInfo>::GetById

[error]File : e:\stalker\sources\trunk\xr_3da\xrgame\xml_str_id_loader.h

[error]Line : 112

[error]Description : item not found, id

[error]Arguments : bar_stalker_1

 

stack trace:

 

 

 

а вот то что я ему прописывал

<specific_character id="bar_stalker_1" team_default = "1">

<name>bar_stalker_1</name>

<icon>ui_npc_u_stalker_neytral_hood_8</icon>

<bio>bar_stalker1r_bio</bio>

 

<class>bar_stalker_1</class>

<community>dolg</community>

<terrain_sect>stalker_terrain</terrain_sect>

 

<rank>350</rank>

<reputation>15</reputation>

<money min="5000" max="5025" infinitive="0"/>

<panic_treshold>0</panic_treshold>

 

<snd_config>characters_voice\human_01\stalker\</snd_config>

<crouch_type>-1</crouch_type>

 

<visual>actors\neytral\stalker_neytral_hood_8</visual>

<supplies>

[spawn] \n

wpn_pkm \n

ammo_9x18_fmj = 5 \n

vodkanew = 6 \n

af_mincer_meat \n

</supplies>

 

#include "gameplay\character_criticals_3.xml"

 

<start_dialog>hello_dialog</start_dialog>

#include "gameplay\character_dialogs.xml"

</specific_character>

 

 

 

<character id="bar_Stalker_2">

<class>bar_Stalker_2</class>

</character>

 

 

 

[bar_stalker_1]:stalker

$spawn = "respawn\agr2_respawn_factory"

character_profile = bar_stalker_1

spec_rank = regular

community = stalker

custom_data = scripts\logic_stalker_1.ltx

 

 

 

[99999999999999999999999999999999999999999999999]

; cse_abstract properties

section_name = stalker

name = bar_stalker_1

position = 227.99346923828,1.4395974874496,-36.13639831543

direction = 0,0,0

 

; cse_alife_trader_abstract properties

money = 5000

character_profile = bar_stalker_1

 

; cse_alife_object properties

game_vertex_id = 1174

distance = 14

level_vertex_id = 57986

object_flags = 0xffffffff

custom_data = <<END

[smart_terrains]

none = true

END

 

; cse_visual properties

visual_name = actors\novice\green_stalker_5

 

; cse_alife_creature_abstract properties

g_team = 0

g_squad = 0

g_group = 0

health = 1

dynamic_out_restrictions =

dynamic_in_restrictions =

 

upd:health = 1

upd:timestamp = 0

upd:creature_flags = 0

upd:position = 227.99346923828,1.4395974874496,-36.13639831543

upd:o_model = 0

upd:o_torso = -0.000151783766341396,-0.0297925509512424,0

upd:g_team = 0

upd:g_squad = 0

upd:g_group = 0

 

; cse_alife_monster_abstract properties

 

upd:next_game_vertex_id = 65535

upd:prev_game_vertex_id = 65535

upd:distance_from_point = 0

upd:distance_to_point = 0

 

; cse_alife_human_abstract properties

predicate5 = 1,0,1,0,0

predicate4 = 2,0,2,1

 

; cse_ph_skeleton properties

 

upd:start_dialog =

 

; se_stalker properties

 

 

 

чего уже тока не пробовал но не могу понять из за чего вылет.

Ссылка на комментарий

Лёха_тц,

ну ты выдал (С)

<character id="bar_Stalker_2">

<class>bar_Stalker_2</class>

</character>

Когда должно быть bar_Stalker_1 и желательно везде регистр не менять.

Ссылка на комментарий
парсим из секции координаты иконки и ставим их(x, y, w, h)

Название аналогично, получаем строку и далее game.translate_string или SetTextST

где-ж эту секцию искать, в которой координаты иконки ? В каком файле ?

Парсинг ltx и xml файлов - есть что-то встроенное в ЛУА\движок или надо самому ? Если самому - может есть готовые вещи, чтоб велосипед не изобретать ?

Ссылка на комментарий

Лёха_тц, понимаю, что все можно свести к определению "скриптование", но(!) давайте не заваливать топик всякой всячиной ...

Имеются топики серии "Ковыряемся в файлах", в которых (ИМХО) самое место уточнять и разбирать ошибки по правке конфигов и пр.

 

AndreySol, имеется топик "Справочник по функциям и классам", который и предназначен для тех, кто не хочет тратить время на изобретение велосипедов. Да и в кодах самой игры немало примеров как читаются параметры из секций объектов ...

Приглянись, например, к system_ini() иль ini_file(string).

Ну а параметр "class" прочитать можно как: system_ini():r_string(section,"class") => строка или system_ini():r_clsid(section,"class") => число.

Изменено пользователем Artos
Ссылка на комментарий

Здравствуйте, скажите пожалуйста, как можно написать на LUA интерфейс для плеера? Плеер должен вызываться по использованию предмета в инвентаре ГГ.

Если есть какие-либо статьи как это сделать в ЗП 1.6.02 дайте пожалуйста ссылку.

 

Ссылка на комментарий

Amicron, не стОит задавать "пустых" общих вопросов.

"Как на Lua написать интерфейс?" - имеет великое множество вариантов и зависит только от фантазии "писателя".

Чем тебе не "руководство" - то как написан интерфейс того же спальника из мода АМК? Ведь подмени "спальник" на "плеер" и получаешь ответ на свой вопрос.

Ссылки на "где искать статьи" указаны в шапке топика. Так же в топике "Уроки по модостроению" совсем недавно выложен "Как самому создать спальный мешок".

 

Прежде чем задавать вопросы - читаем форум и используем простейший поиск.

При желании можно найти и готовый мод именно по плееру (чтобы не изобретать велосипеда).

Изменено пользователем Artos
Ссылка на комментарий

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

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти
  • Недавно просматривали   0 пользователей

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