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

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

_Призрак_, так я что, я ничего! Просто на сколько я понял TRAMP14 он хочет выводить колличество имеющихся аптечек в инвенторе на худ. Если функцию повесить на

дроп, юзание и на загрузку игры
информация порой будет выводиться ложная. Хотя лично Я, обыграл бы этот момет твоим способом.

 

TRAMP14, в инструкции вывода часов на худ, присутствует вот такая строка:

msg = string.format(" %02d:%02d\n", time_h, time_m)

Вместо того, что в скобках напиши переменную number_of_kits.

Т.е. функция должна выглядеть

function show_time()
    local hud = get_hud()
    local cs = hud:GetCustomStatic("hud_show_time")
    if cs == nil then
        hud:AddCustomStatic("hud_time_static", true)
        hud:AddCustomStatic("hud_show_time", true)
        cs = hud:GetCustomStatic("hud_show_time")
    end

    local number_of_kits = all_kits (db.actor)

    msg = string.format(number_of_kits)

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

Нужно передать в эту функцию number_of_kits, а не просто прописать!!!

 

Если ошибся, пусть меня поправят!

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

Охохо чем больше я занимаюсь скриптоучением тем больше мне хочет плюнуть и стать конфигером. Куфзук так должно получится?

local function counting_kits(item)
    if item:name() == "medkit" or item:name() == "medkit_army" or item:name() == "medkit_scientic" then
        number_of_kits = number_of_kits + 1
    end
end

local number_of_kits = 0
function all_kits (actor, npc)
    actor:inventory_for_each(counting_kits)
    return number_of_kits
end
    msg = string.format(number_of_kits)    
end

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

TRAMP14, нет! В одном файле размести три функции: counting_kits, all_kits и show_time. В апдейте нужно вызывать show_time, как в инструкции "выводим часы на худ".

Только имеет смысл переименовать функцию show_time, например в show_all_kits.

ВАЖНО! Я не проверял работоспособность! Приду домой проверю и отпишусь в ЛС.

ОЧЕНЬ ВАЖНО! Не стоит останавливаться на достигнутом! TRAMP14, выучить луа ты сможешь! Но важно панять и функции которые использует STALKER, начни отсюда: Справочник по функциям и классам

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

ZeeK

Был такой вылет когда не правильно сделал сам квест

 

Куфзук

Это когда она будет выводится неправильно? Что можно сделать с аптечкой - использовать и выкинуть. Повесить на колбеки эти нужно эту функуцию. Ну еще нужно чтобы скрипт обрабатывал инвентарь при создании игры. Когда же будет показываться неправильное кол-во аптечек

Freedom

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

ZeeK, скорее всего у квеста заголовок не прописан, поэтому и вылет по нилу при конкатенации.

 

_Призрак_, а еще аптечку могу передать НПСы, можно взять ее из ящика и много еще того, что не коллбек на дроп, не на юзание не могут отследить. Так что лучше всего вешать эту ф-ию на апдейт, не очень-то и сильно это нагрузит систему (посмотри на оригинальный актор_апдейт, там на него и не такое повешено).

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

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

Есть подозрение что неправильно прописал звуки, напишите пожалуйста пример

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

такая проблема...

полностью переделал окно инвентаря. всё работает нормально, только мини-окно с информацией об отдельном предмете (по клику на него) не отображается вообще. в чём может быть проблема?

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

Всем доброго утра! И разумеется с наступающим Новым Годом!

В начале страницы шла речь о том, чтобы вывести на худ колличество аптечек. Так вот собственно эта реализация:

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

steelrat, Выводим часы на HUD

Итак! В папке scripts создаем файл ваше_название_скрипта.script и вписываем в него следующие строки:

local function counting_kits(item)
    local section = item:section()
    if section == "medkit" or section == "medkit_army" or section == "medkit_scientic" then
        number_of_kits = number_of_kits + 1
    end
end

function all_kits ()
    number_of_kits = 0
    db.actor:inventory_for_each(counting_kits)
    return number_of_kits
end

function output_kits_to_hud()
    local hud = get_hud()
    local cs = hud:GetCustomStatic("hud_show_time")
    if cs == nil then
        hud:AddCustomStatic("hud_time_static", true)
        hud:AddCustomStatic("hud_show_time", true)
        cs = hud:GetCustomStatic("hud_show_time")
    end

    msg = string.format("%s", all_kits())
    
    if cs ~= nil then cs:wnd():SetText(msg) end
end

После, в файл ui_custom_msgs.xml в папке config/ui/ дописываем следующее:

<hud_time_static  x="852" y="17" width="156" height="52">
     <text complex_mode="0" x="65" y="0" font="letterica16" r="255" g="255" b="255" a="130">st_pda_total</text>
     <texture>ui_hud_frame_clock</texture>
</hud_time_static>
<hud_show_time x="862" y="38" width="156" height="52">
     <text x="0" y="0" font="graffiti19" r="255" g="255" b="255" a="140" align="c"/>
</hud_show_time>

Затем в файл bind_stalker.script дописываем после

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

строку

ваше_название_скрипта.output_kits_to_hud()

 

ЗАМЕЧАНИЕ! Принцип вывода на худ не мой, а steelrata.

Описание алгоритма есть парой постами выше.

Выводить на худ можно количество чего угодно лежащего в инвенторе. В строке

if section == "medkit" or section == "medkit_army" or section == "medkit_scientic" then

вместо аптечек вписываем нужную секцию.

Выражаю свою благодарнось malandrinus, за помощь в отладке скрипта.

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

Expression    : fatal error
Function      : CScriptEngine::lua_error
File          : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp
Line          : 73
Description   : <no expression>
Arguments     : LUA error: ....r. - shadow of chernobyl\gamedata\scripts\_g.script:20: bad argument #2 to 'format' (string expected, got no value)

 

Блин опять етото файл, третий вылет по скрипту и всё время етот файл. как править?

Изменено пользователем TRAMP14
Ссылка на комментарий
TRAMP14, почитай тему. Вылет происходит из-за не правильного! написании логики. Перепроверь.
Ссылка на комментарий

как написать скрипт alife():create, но что бы было несколько вариантов координат для одного спавна, что бы разнообразие было?

Не соответствует. N6260

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

Куфзук, какой еще логики? В логе вообще про отсутствие значения сказано.

 

ZeeK, сделай таблицу со списком координат и рандомно выбирай оттуда значения.

 

TRAMP14, покажи свой код (под спойлером конечно).

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

такой довольно странный баг, всё проверил на сто раз - ошибки быть не может. однако игра вылетает.

 

лог такой:

[quote]
Expression    : fatal error
Function      : CRender::texture_load
File          : E:\stalker\sources\trunk\xr_3da\xrRender\Texture.cpp
Line          : 295
Description   : <no expression>
Arguments     : Can't find texture 'inv_fon'
[/quote]

 

а теперь смотрите. игра использует текстуру "inv_fon". она прописана вот так:

<ui_texture>

 

<file_name>ui\ui_inventory_s</file_name>

<texture id="inv_fon" x="0" y="0" width="895" height="1024" />

 

</ui_texture>




в файле "iba.xml"в папке config\ui, сам файл прописан в system.ltx в строке
[texture_desc]
files

 

файл "ui_inventory_s" существует и лежит в нужной папке. он также нужного формата.

из-за чего вылет-то?!!

 

 

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

ZeeK, вот как это сделано у АМК:

local points={
    {
        position={x=-24.2727108001709,y=-12.1660995483398,z=-100.200202941895},
        gv=0,
        lv=73868
        },
    {
        position={x=159.56,y=4.72,z=88.60},
        gv=155,
        lv=463808
        },
    {
        position={x=-4.11,y=2.90,z=108.09},
        gv=85,
        lv=272619
        }
}

function spawn_star(actor,npc,p1,p2)
    local a = points[math.random(table.getn(points))]
    local obj = alife():create("amk_af_night_star", vector():set(a.position.x,a.position.y,a.position.z), a.lv, a.gv)
    if (obj) then
        if is_debug==true then add_spot_on_map(obj.id, "red_location", "art") end
    end
    local m_where 
    if news_main then
        m_where = news_main.get_point_description("l01_escape", vector():set(a.position.x,a.position.y,a.position.z))
    else
        m_where = "Здесь, на Кордоне"
    end
    db.actor:give_talk_message(m_where.." скорее всего поискать стоит. Где-то там он, точно говорю.", "ui\\ui_iconstotal", Frect():set(0,0,10,10), "simple_answer_item")
end

 

 

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

znachara, что ты делаешь? Ни в одном из оригиналов STALKERa, ни в одном модов который у меня имеется, текстура inv_fon, не используется! :ny_huh:

 

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

TRAMP14, у меня код работает, могу видюшку снять. Делал на полностью пустых локациях от KostyaV.

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

Министр вот всё как сказал Куфзук

local function counting_kits(item)
    local section = item:section()
    if section == "medkit" or section == "medkit_army" or section == "medkit_scientic" then
        number_of_kits = number_of_kits + 1
    end
end

function all_kits ()
    number_of_kits = 0
    db.actor:inventory_for_each(counting_kits)
    return number_of_kits
end

function output_kits_to_hud()
    local hud = get_hud()
    local cs = hud:GetCustomStatic("hud_show_time")
    if cs == nil then
        hud:AddCustomStatic("hud_time_static", true)
        hud:AddCustomStatic("hud_show_time", true)
        cs = hud:GetCustomStatic("hud_show_time")
    end

    msg = string.format("%s", all_kits())
    
    if cs ~= nil then cs:wnd():SetText(msg) end
end

 

 

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

znachara идиотский конечно вопрос но не забыл текстуру в ui положить?

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

У меня вот такой вопрос-сделал такую догику-

[smart_terrains]

none = true

 

[dont_spawn_loot]

 

[logic]

active = remark

combat_ignore = combat_ignore

 

[remark]

anim = hello_wpn

target = actor

combat_ignore_cond = always

meet = meet

 

[meet]

meet_state = 10|guard@wait

meet_state_wpn = 10|backoff2@threat_back

victim = 10|actor

victim_wpn = 10|actor

use = true

use_wpn = false

syndata = backoff2@threat_back

 

[combat_ignore]

combat_ignore_cond = always

 

НПСи должны стоять на месте и впринципе стоят, но если они куда-нибудь отходят-собак пострелять или труп обобрать, то остаются стоять там и на своё место возвращаться не хотят. Можно это как-нибудь исправить?

П.С. - схемы walker или camper не подходят т.к. all.spawn править нельзя - делаю небольшое дополнение к народной солянке и со all.spawn не хочу связываться, да и руки кривоваты.

 

gruber спасибо помогло.

А можно всё-таки сделать что-бы они возвращались на место спавна?

Изменено пользователем @"StreloK"

Prefiero morir de pie, que vivir siempre arrodillado.
 

Ссылка на комментарий
@"StreloK", Никак в ремарке у нпс нет путей,они стоят там где заспавнились.а чтоб не ходили ставь полный игнор(он у тебя кстати стоит,но неправильно-строку после active перемести на место той что у тебя в ремарке)чтоб собачек не стреляли.Но такая логика подходит для группировки нейтральной ко всем иначе замочат и сожрут твоего НПС
Ссылка на комментарий

Меня вот интересует вопрос - как сделать так чтобы НПС после нападения на него, возвращался на точку и ему можно было прописать анимацию стаяния и target? Что то типа ремарка только с возможностью возвращаться на точку

Freedom

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

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

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

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

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

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

Войти

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

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

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