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

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

Ребят, ва нужно 15 раз заспавнить рандомные объекты что ли? Если да, то на кой черт извращаться с return?

Вначале уточняй что спрашивается, а потом чертыхайся! И не вали всех в кучу, спрашивающий пока один.

 

Если нужно заспавнить 15 предметов одного вида из таблички то делаем так.

local items = {
"booster",
"bread",
"kolbasa",
"conserva",
"vodka",
"energy_drink",
"bandage",
"antirad"
}

function Test()
  local npc = nil
  local SpItem = items[math.random(#items)]
  spawn_item(SpItem, npc)
end

function spawn_item(spawn_item, npc)
  for i=1, 15 do
    if npc==nil then 
      npc=db.actor 
    end
    alife():create(spawn_item, npc:position(), npc:level_vertex_id(),npc:game_vertex_id(),npc:id())
  end
end

Функция Test - для проверки.

 

Если нужно 15 рандомных предметов,то так.

function Test()
  spawn_item()
end

local items = {
"booster",
"bread",
"kolbasa",
"conserva",
"vodka",
"energy_drink",
"bandage",
"antirad"
}

function spawn_item(npc)
  for i=1, 15 do
    if npc==nil then 
      npc=db.actor 
    end
    local SpItem = items[math.random(#items)]
    alife():create(SpItem, npc:position(), npc:level_vertex_id(),npc:game_vertex_id(),npc:id())
  end
end

Функция Test - для проверки.

Каждый раз будет спавнится рандомный предмет из таблицы. Если

 local SpItem = items[math.random(#items)]

Вынесите из функции,то предмет будет одного вида - как в первом случае.

 

Т.e. Вариантов куча.

Но, если используете return - то после первого возвращения - функция больше не работает, все циклы обрубаются! (Как уже говорилось)

 

Tris, Напиши какая функция тебе нужна, с какой функциональностью ???

 

Используй, плз, форматирование кода отступами и тэги спойлера для 'портянок. И не стОит дублировать уже сказанное. --/Artos'

Изменено пользователем Artos

Что-то кончается, что-то начинается...

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

кто скажет мне как можно заспавнить бтр и вертолет принадлежащий определенной группировке а то все никак не могу найти как это сделать.

 

Пиши грамотнее, используя знаки препинания и заглавные буквы.

Безграмотные вопросы будут удаляться, а их авторы - наказываться (читаем правила форума!). --/Artos

Изменено пользователем Artos
Лёха_тц.gif
Ссылка на комментарий

Лёха_тц

А что разве БТР и вертолеты кроме военных еще кому - нибудь принадлежат??? И то военным сказать УСЛОВНО, по сюжету.

А заспавнить их несложно, через скрипт или all.spawn создавая соот секцию.

Пример из оригинала с логикой, у тебя она конечно должна быть своя...

[7095]

; cse_abstract properties

section_name = helicopter

name = aes_helicopter

position = 902.859313964844,-3.61789155006409,-757.310485839844

direction = 0,0,0

 

; cse_alife_object properties

game_vertex_id = 2273

distance = 0

level_vertex_id = 405033

object_flags = 0xffffffb2

custom_data = <<END

[logic]

active = heli_move1

on_hit = hit

 

[heli_move1]

path_move = aes_heli_attack_desant_walk_begin2

on_info = {+aes_desant_go} heli_move2

engine_sound = false

combat_safe_altitude = -100

 

[heli_move2]

path_move = aes_heli_attack_desant_walk2

path_look = aes_heli_attack_desant_look2

invulnerable = true

immortal = true

on_signal = final | %+aes_desant_wave2% heli_move3

combat_ignore = true

mute = true

combat_safe_altitude = -100

 

[heli_move3]

path_move = aes_heli_attack_desant_walk2_2

path_look = aes_heli_attack_desant_look2_2

on_actor_in_zone = aes_actor_heli | %=heli_set_enemy_actor%

mute = true

combat_safe_altitude = -100

on_info = {=heli_health_le(0.3)} heli_move@death

 

[heli_move@death]

path_move = heli_death_way

invulnerable = true

on_signal = arrived | heli_move@silent

combat_ignore = true

 

[heli_move@silent]

path_move = heli_death_way

invulnerable = true

engine_sound = false

combat_ignore = true

 

[hit]

on_info = {+aes_desant_wave2} %+aes_choper_crush_sound =heli_start_flame%

END

 

; cse_visual properties

visual_name = physics\vehicles\mi24\veh_mi24_u_01

 

; cse_motion properties

 

; cse_ph_skeleton properties

skeleton_name = idle

 

; cse_alife_helicopter properties

cse_alife_helicopter__unk1_sz = idle

engine_sound = alexmx\helicopter

 

Изменено пользователем ColR_iT
Не нужно полностью цитировать предыдущий пост!

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

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

losiara, вообще-то техника никому не принадлежит и сама не имеет 'группировок'.

То, что БТРы и вертолеты НЕ обстреливают вояк (как и остальных), а только ГГ (актора) - так это в их логике и схемах заложено.

Внеси вояк в качестве целей - обстреляют и уничтожат и их.

 

Т.о. нет у техники принадлежности к группировкам, можно логикой или скриптами сделать тех или иных врагами или (не)друзьями.

Изменено пользователем Artos

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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

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

 

Строгое предупреждение от модератора Cyclone
Не стоит игнорировать предупреждения куратора. Нарушение п. 2.5. Сутки Р/О.
Лёха_тц.gif
Ссылка на комментарий

Я удалил созданные в алл.спавне секции, вылет не прекратился.

В логе ничего не написано

Создаю глобальный мод с новыми локациямЭ

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

Создал снайпера по тутору пока к нему не подходит ГГ, он нормально сканирует винтовкой местность и все такое, а когда ГГ с ним поговорил или подошел то снайпер встаёт и больше не садится.Как это исправить

;SNIPER ADDON

;Меченый(Стрелок)

[logic]

active = remark@search

 

[remark@fire]

combat_ignore_cond = {!is_sniper_enemy}

radius = 0

anim = hide

on_info = {=health_le(0.5)} remark@search

wounded = wounded@work

sniper = true

 

[remark@search]

combat_ignore_cond = true

combat_ignore_keep_when_attacked = false

anim = hide

target = actor

on_info = {=see_enemy} remark@fire

wounded = wounded@work

[smart_terrains]

none = true

[wounded@work]

hp_state = 0|wounded_heavy@help_heavy

hp_state_see = 0|wounded_heavy@help_heavy

hp_victim = 0|nil

hp_fight = 0|false

hp_cover = 0|false

 

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

Вампир35

А зачем строить логику снайпера на Ремарке???

из тутора:

Схема sniper

 

Разновидность кемпера. Отличаются тем, что стреляют только одиночными выстрелами и не смотрят по точкам патрульного пути, а сканируют пространство между ними. Скорость сканирования от точки к точке фиксирована и равна 20сек.

NB! Ставить снайперу только 2 точки look

 

В кастом дате кемпера прописать:

sniper = true

Пример:

[smart_terrains]

none = true ;нужно для того что бы НПС не брался гулагом!!!

 

[logic]

active = camper

 

[camper]

path_walk = patrol_walk

path_look = patrol_look

sniper = true

radius = 50

;def_state_campering = assault

Примерно так...

 

Изменено пользователем losiara

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

Ссылка на комментарий
Видимо выше в скрипте есть таблица items

Совершенно верно, вверху таблица items просто я не стал её писать, так как ошибки в ней нет, ошибка в цикле.

Vano_Santuri

Да мне нужна была функция рандомного спавна 15 предметов, то есть чтобы из таблицы рандомно ГГ спавнились 15 разных предметов.

Спасибо за помощь!

 

 

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

Vano_Santuri

Кстати заметил ошибку во 2 версии представленного тобой скрипта.

 

Там нужно сделать так:

function spawn_item(SpItem, npc)

А если без SpItem тогда вылет.

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

Tris, Да ладно, ничего там не нужно...

 

local items = {
"booster",
"bread",
"kolbasa",
"conserva",
"vodka",
"energy_drink",
"bandage",
"antirad"
}

function spawn_item(npc)
  for i=1, 15 do
    if npc==nil then 
      npc=db.actor 
    end
    local SpItem = items[math.random(#items)]
    alife():create(SpItem, npc:position(), npc:level_vertex_id(),npc:game_vertex_id(),npc:id())
  end
end

 

 

У меня же переменная

 SpItem

- берется из таблички рандомно.

Её в функцию передавать не нужно, она уже есть...

Изменено пользователем Vano_Santuri

Что-то кончается, что-то начинается...

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

Столкнулся с такой задачей: нужно чтобы НПС при приближении главного героя приветствовал его фразой из списка, а при на прощание говорил ещё одну фразу из списка.

С первым более-менее ясно, но при вот такой логике:

[logic]
active = walker@mar_csky_tech

[walker@mar_csky_tech]
path_walk = mar_csky_base_tech_walk
path_look = mar_csky_base_tech_look
meet = meet

[meet]
use = true
use_wpn = true
meet_talk_enabled = true
victim = 5|actor
victim_wpn = 5|actor
meet_state = 5|ward@marsh_novikov_hello
meet_state_wpn = 5|ward@marsh_novikov_hello
END

- НПС приветствует главного героя редко. Как сделать так, чтобы приветствие звучало каждый раз? И как сделать звук прощания? Копался в туторах настройки логики, но не нашёл там по этому вопросу путного.

P.S. Соотв. изменения в sound_scheme и script_sound.ltx внесены.

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

В своем моде сумашедшему я сделал такую логику:

;marsh crazy sniper   
[logic]
active = {-mar_want_to_talk_sniper} camper@sniper, {+mar_want_to_talk_sniper} remark@sniper
relation = enemy
sympathy = 0
on_death = death

[death]
on_info = %+mar_sniper_dead%

[camper@sniper]
path_walk = mar_crazy_1_walk
path_look = mar_crazy_1_look
out_restr = mar_crazy_restrictor
def_state_moving = sneak_run
def_state_campering = hide_na
def_state_campering_fire = hide_sniper_fire
sniper = true
on_info = {+mar_sniper_must_go_away} %=destroy_object%

[remark@sniper]
anim = guard
target = actor
meet = meet
combat_ignore_cond = true
on_info = {+mar_enemy_sniper_talke_bad} camper@sniper
on_info2 = {+mar_sniper_must_go_away} %=destroy_object%



[meet]   НАС ИТЕРЕСУЕТ ЭТО:
meet_state 		= 3|ward@nil
meet_state_wpn 	= 6|backoff@threat_weap
victim 			= 3|actor
victim_wpn 		= 6|actor
use				= true
use_wpn			= false
sound_start 	= mar_crazy_sniper_meet      -------------звук привет
sound_stop 		= mar_crazy_sniper_meet_bye     -------звук пока
trade_enable = false
quest_npc = true    ----------ставим это обязательно!иначе будут дефолтные звуки

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

Есть конструкция вида:

function repair_precond_s2()
    local item_in_slot_2 = db.actor:item_in_slot(2)
    local item = ""
    
    if item_in_slot_2 then
        item = item_in_slot_2:section()
    else
        item = "no_item"
    end
    
    -- Проверка того, что оружие является уникальным (второй слот):
    if string.find(item, "wpn_ak74_m1") or string.find(item, "wpn_abakan_m1") or 
        string.find(item, "wpn_ak74u_m1") or string.find(item, "wpn_mp5_m1") or 
        string.find(item, "wpn_groza_m1") or string.find(item, "wpn_spas12_m1") or 
        string.find(item, "wpn_winchester_m1") or string.find(item, "wpn_l85_m1") or 
        string.find(item, "wpn_lr300_m1") or string.find(item, "wpn_svd_m1") or 
        string.find(item, "wpn_sig_m1") or string.find(item, "wpn_val_m1") or 
        string.find(item, "wpn_mp5_m2") or string.find(item, "wpn_abakan_m2") or 
        string.find(item, "wpn_l85_m2") or string.find(item, "wpn_sig_m2") or 
        string.find(item, "wpn_rg6_m1") or string.find(item, "hunters_toz") or 
        string.find(item, "pri_lom_ak74") or string.find(item, "wpn_vintorez_coll") then
        if item_in_slot_2 and 1 > item_in_slot_2:condition() + 0.01 then 
            return true
        else
            return false
        end
    else
        return false
    end 
end

 

Как мне её подогнать под использование таблицы, вместо постоянного "or"?

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

Можно так ?

 

Tbl = {

wpn_ak74_m1 = true,
wpn_abakan_m1 =  true,
wpn_ak74u_m1 =  true

}
--пердаем объект
function ValItem(obj)
local item = obj:section()
local TblItem = Tbl[item]
return TblItem
end

 

 

Только вопрос, у тебя будут только это секции,или же секции которые будут иметь в составе приведенные? Мой пример должен работать только для этих секций.

Вопрос к тому,зачем использовать

string.find

.

 

Да, а у апгрейженных стволов секции меняются?

 

 

 

 

Что-то кончается, что-то начинается...

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

iDreD, Ну тогда так и делай, забивай таблицу по приведенному примеру. Если секция будет в таблице - вернет значение (true) если нет, то ничего вернет или nil , я если честно даже не знаю...

 

Gun12, так не интересно, уже готовый код дал, а если самому подумать...

Изменено пользователем Vano_Santuri

Что-то кончается, что-то начинается...

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

iDreD

local t = { wpn_ak74_m1       = true,
            wpn_abakan_m1     = true,
            wpn_ak74u_m1      = true,
            wpn_mp5_m1        = true,
            wpn_groza_m1      = true,
            wpn_spas12_m1     = true,
            wpn_winchester_m1 = true,
            wpn_l85_m1        = true,
            wpn_lr300_m1      = true,
            wpn_svd_m1        = true,
            wpn_sig_m1        = true,
            wpn_val_m1        = true,
            wpn_mp5_m2        = true,
            wpn_abakan_m2     = true,
            wpn_l85_m2        = true,
            wpn_sig_m2        = true,
            wpn_rg6_m1        = true,
            hunters_toz       = true,
            pri_lom_ak74      = true,
            wpn_vintorez_coll = true
          }

function repair_precond_s2()
    local item_in_slot_2 = db.actor:item_in_slot(2)
    if item_in_slot_2 then
        item = item_in_slot_2:section()
        return t[item] and 1 > item_in_slot_2:condition() + 0.01
    end
    return
end

 

Oсмелюсь все же предложить для подобных проверок (прекондишенов) организовать возврат только булевых значений (true|false), что порой критично, т.е. типа:

 ...
function repair_precond_s2()
    local item_in_slot_2 = db.actor:item_in_slot(2)
    if item_in_slot_2 then
        return ( t[item_in_slot_2:section()] == true and 1 > item_in_slot_2:condition() + 0.01 )
    end
    return false
end

--/Artos

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

возможно ли организовать запись строки в переменную из окна редактирования текста в игре....прошу привести примеры!)))

 

 

второй вопрос....возможноли в игре отображать интернет страницы? На пример в ПДА...

 

 

Всем кто ответит заранее спасибо!

Сталкер в душе - сталкер по жизни!

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

temakonkin, странный вопрос ...

А для чего окно редактирования, если не для того чтобы то, что в нем пишется куда-то передавалось/запоминалось! Естественно это делается через переменные, которым и присваивается значение (строка) из окна редактирования.

В скриптах обычно это выглядит типа: local variable = wnd:GetText() , где wnd - объект класса CUIEditBox или полученный методом InitEditBox из класса CUIWindow.

Практических примеров немало в модах, например в кодах GPS-меток или записных книжках.

 

Вывести в игре что-то подобное интернет страницам можно только или создав статичные скриншоты или в виде записанного видео, которые и отображать. Теоретические заморочки с какими-либо 'внешними примочками/надстройками над игрой и пр.извращения' не в счет, тем более, судя по первому вопросу - это тебе явно не по силам ...

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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

Добрый день!

Прошу помощи относительно работы скрипта.

function prov_npc()
if db.actor then
local armor = db.actor:item_in_slot(6)
if (armor ~= nil and armor:section()== "bandit_outfit")
then
db.actor:set_character_community("bandit", 0, 0)
elseif (armor ~= nil and armor:section()== "specops_outfit")
then 
db.actor:set_character_community("military", 0, 0)
elseif (armor ~= nil and armor:section()== "dolg_outfit")
then 
db.actor:set_character_community("dolg", 0, 0)
else
db.actor:set_character_community("actor", 0, 0)
end
end
end

function prov_npc()
local actor = db.actor
local armor = db.actor:item_in_slot(6)
if actor:alive() == true and armor and (armor:section() == "bandit_outfit" or armor:section() == "bandit_master_outfit" or armor:section() == "bandit_veteran_outfit" or armor:section() == "bandit_antigas_outfit_m1")
then
db.actor:set_character_community("bandit", 0, 0)
elseif (armor ~= nil and armor:section() == "specops_outfit")
then 
db.actor:set_character_community("military", 0, 0)
elseif (armor ~= nil and armor:section() == "dolg_outfit")
then 
db.actor:set_character_community("dolg", 0, 0)
else
db.actor:set_character_community("actor", 0, 0)
end
end

 

Предпологается изменение отношения НПС к ГГ при переодевании в соот. броню. Однако, скрипт не работает, ни в первом ни во втором варианте, вопрос почему???

Изменено пользователем ColR_iT
Не забываем про теги!

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

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

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

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

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

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

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

Войти

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

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

×
×
  • Создать...