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

Скриптование


Svoboда

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

Запнулся на элементарнейшем скрипте :blink: :

function have_tema_eda2()

return sak.have_item_namber("bread",20) ~= false or return sak.have_item_namber("konserva",10) ~= false then

end

Что не так то?

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


Ссылка на сообщение

Эм... Ты про пунктик "Что можешь интересного рассказать"? Эти диалоги ДАЛЕКО, не динамические... Прописаны в gamedata\config\gameplay\character_dialogs.xml.

 

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

Возник вопрос: можно ли использовать такую конструкцию?

--Локальная переменная содержащая монстров которые спаунятся на локации где попало.

local spawned_mutants = {

"pseudodog",

"bloodsucker",

"zombie_strong"}

 

--Функция спаунющая мутантов где попало.

function spawn_m()

alife():create(spawned_mutants[math.random(3)], vector():set(x,y,z),lv,gv)

end

 

local x = {

"190"

"453"

"532"}

 

local y = {

"10"

"15"

"2"}

 

local z = {

"867"

"564"

"345"}

 

local lv = {

"100"

"143"

"200"}

 

local gv = {

"432"

"564"

"246"}

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

Изменено пользователем кровоSTALKER

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


Ссылка на сообщение

Ещё создал

--Локальная переменная содержащая в себе имена профилей сталкеров подлежащих удалению.

local deleted_stalkers = {"gar_seriy", "gar_hellcar", "gar_bandit_leader"}

 

--Функция берущая имена профилей НПС из локальной переменной и удаляющая их.

function delete_s()

alife():release(deleted_stalkers)

end

вызываемую

level_tasks.add_lchanger_location()

 

self.bCheckStart = false

end

if level.name() == "l02_garbage" then

pioners.delete_s()

end

end

end

но вылетает с таким

FATAL ERROR

 

[error]Expression : fatal error

[error]Function : CScriptEngine::lua_error

[error]File : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp

[error]Line : 73

[error]Description : <no expression>

[error]Arguments : LUA error: ... publishing\s.t.a.l.k.e.r\gamedata\scripts\_g.script:20: bad argument #2 to 'format' (string expected, got no value)

 

 

stack trace:

В чём проблема?

Изменено пользователем кровоSTALKER

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


Ссылка на сообщение

Хм... А как id получить?

 

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

Тоесть, примерно

local deleted_stalkers = {"gar_seriy", "gar_hellcar", "gar_bandit_leader"}

 

function delete_s()

local se_obj = alife():object(deleted_stalkers)

if se_obj then

alife():release(se_obj, true)

end

end

функция? Но и она не работает...

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


Ссылка на сообщение

Суть вопроса ты не пояснил. Сказал рандомные, а хз какие именно. Сори за офтоп.

Строгое предупреждение от модератора n6260
ХЗ - есть слово ругательное.

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


Ссылка на сообщение

function start_taimer() --при запуске этой функции запуститься таймер игровово времени с именем dialog,

amk.g_start_timer("dialog",0,0,1) --время 0 дней, 0 часов, 1 мин.

end

 

открываем amk.script ищем function __do_timer_action

в конец добавляем

 

if select_string=="dialog" then --имя таймера

db.actor:give_info_portion("info_dialog_taimer") --по истечению таимера выдаем поршен

new_kardon.shustryi_sms() --или сработает функция

end

 

 

В файле bind_stalker.script в функцию

function actor_binder:update(delta)

добавляем (перед последним end)

amk.actor_update(delta)

local timers={}

local g_timers={}

local timer_trigger=nil

 

function actor_update(delta)

if not timer_trigger then

timer_trigger=game.time()

end

if timer_trigger<=game.time() then

timer_trigger=game.time()+1000

check_timers()

end

end

 

function start_timer(name,delay,action)

if not delay then

return false

end

 

if not action then

action = ""

end

 

local time = game.time() --time in seconds since 1970

local a=1

while db.storage[db.actor:id()].pstor["xt"..a] do

a=a+1

if a>100 then

return false

end

end

save_variable("xt"..a, name)

save_variable("xd"..a, time+delay*1000*system_ini():r_float("alife","time_factor"))

save_variable("xp"..a, action)

 

return true

end

 

function g_start_timer(name,delay_d,delay_h,delay_m,action)

local time = level.get_time_days()*60*24+level.get_time_hours()*60+level.get_time_minutes() --time in game minutes

if delay_d==nil or delay_h==nil or delay_m==nil then

return false

end

 

if action==nil then

action = ""

end

 

local a=1

while db.storage[db.actor:id()].pstor["gt"..a] do

a=a+1

if a>100 then

return false

end

end

 

save_variable("gt"..a, name)

save_variable("gd"..a, time+delay_d*60*24+delay_h*60+delay_m)

save_variable("gp"..a, action)

 

return true

end

 

function check_timers()

local tmp

for a=1,100,1 do

tmp=load_variable("xt"..a,nil)

if tmp~=nil then

__timer_found(a)

end

end

 

for a=1,100,1 do

tmp=load_variable("gt"..a,nil)

if tmp~=nil then

__g_timer_found(a)

end

end

end

 

function __timer_found(idx)

local time = game.time() --time in seconds since 1970

local name,params

if load_variable("xd"..idx, nil)<=time then

name=load_variable("xt"..idx, nil)

params=load_variable("xp"..idx, nil)

del_variable("xt"..idx)

del_variable("xd"..idx)

del_variable("xp"..idx)

oau_reason=name.." "..params

__do_timer_action(name,params)

return true

end

return false

end

 

function __g_timer_found(idx)

local gtime = level.get_time_days()*60*24+level.get_time_hours()*60+level.get_time_minutes() --time in game minutes

local name,params

if load_variable("gd"..idx, nil)<=gtime then

name=load_variable("gt"..idx, nil)

params=load_variable("gp"..idx, nil)

del_variable("gt"..idx)

del_variable("gd"..idx)

del_variable("gp"..idx)

oau_reason=name.." "..params

__do_timer_action(name,params)

return true

end

return false

end

 

function __do_timer_action(select_string,params_string)

if select_string=="name_taimer" then --имя таймера

my_file.my_function() --функция которая сработает по истичению

end

end

 

function save_variable(variable_name, value)

if value==nil then

amk.mylog("saving nil into "..variable_name)

del_variable(variable_name)

else

xr_logic.pstor_store(db.actor, variable_name, value)

end

end

 

function load_variable(variable_name, value_if_not_found)

return xr_logic.pstor_retrieve(db.actor, variable_name, value_if_not_found)

end

 

function del_variable(variable_name)

if db.storage[db.actor:id()].pstor[variable_name] then

db.storage[db.actor:id()].pstor[variable_name] = nil

end

end

 

 

by max_max_08.

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


Ссылка на сообщение

Как выглядит проверка на количество репутации у ГГ к опр. группировке? Нужно для прекондишна в диалог.

 

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

И ещё, как прибавить актору радиацию по средствам скрипта?

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


Ссылка на сообщение

Хм... Странно, не работает.

function add_radiation_from_vintorez()

if db.actor:active_item() == "wpn_vintorez_m2" then

db.actor.radiation = 0.1

end

end

 

 

Мне нужно если юзается этот итем ((мой винторез) тоесть если он в слоте под оружие) то прибовляется радиация.

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


Ссылка на сообщение

~<Red>~,

function spawn_vintorez()
alife():create("имя_нпс_из_файла_character_descr_***",vector():set(-179.04676818848,9.4119186401367,76.59033203125),582891,145)
end

Где *** имя локации.

(-179.04676818848,9.4119186401367,76.59033203125),582891,145)

Координаты. В нашём случае спаун на затоне в одном из домов сгоревшего хутора.

И через какой инфопоршень его желательно вызывать?
Хм... Это как? Вызвать функцию можешь из диалога тегом
<action>имя_скрипта.имя_функции_спауна</action>

Всё.

ЗЫ: И вот это прочти. Много нового узнаешь.

 

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

А как удалить предмет из инвентаря скриптом?

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


Ссылка на сообщение

Хотел спросить - как остановить постоянный вызов функции в бинд_сталкере?

Ну тоесть, имею функцию:

if db.actor:object("digger_pda") then
     db.actor:give_info_portion("find_instr")
      news_manager.send_tip(db.actor, "digger_tip", 10, "stalker", 10000)
       local snd_obj = xr_sound.get_safe_sound_object([[characters_voice\scenario\military\digger_msg]])
        snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0)
   end

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

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


Ссылка на сообщение

Нее, я решил проблему старым добрым методом - инфопоршнями). Вот функция, может кому пригодится:

    if db.actor:object("digger_pda") then
     db.actor:give_info_portion("find_instr") 
      if has_alife_info("find_instr") and not has_alife_info("script_info") then
       news_manager.send_tip(db.actor, "digger_tip", 0, "stalker", 10000)
        local snd_obj = xr_sound.get_safe_sound_object([[characters_voice\scenario\military\digger_msg]])
        snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0)
         db.actor:give_info_portion("script_info")
        end 
   end

 

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


Ссылка на сообщение
ФеНиКс, я думаю, может можно как-то прицепить это всё на on_item_use? Тоесть при юзании гитары (а ты думал я не догадаюсь?) неписям в радиусе (?) 2-3 метров от тебя даётся задание воспроизводить реплику. Я не знаю - спроси вон у знающих :).

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


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

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