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

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

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

Хочешь чтобы не сразу уходил - добавляй секций в логику, типа уходить после того-то и того-то ... или спавни сразу на точку где должен быть.

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

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

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

ЧН. На ряде локаций имеются m точек. При старте новой игры необходимо рэндомно выбрать из них n точек и заспавнить там аномалии(одну и ту же). (Цифры пока взял с потолка).

---создаем список точек на каждой локе---
local position_table = {}
position_table["march"] = {
    {246.804992675781,15.5329999923706,494.454986572266},
    {247.100006103516,13.7950000762939,439.272003173828},
    {339.779998779297,-6.9539999961853,368.662994384766}
}
position_table["escape"] = {
    {246.804992675781,15.5329999923706,494.454986572266},
    {247.100006103516,13.7950000762939,439.272003173828},
    {339.779998779297,-6.9539999961853,368.662994384766}
}

Дальше необходимо выбрать из этих точек (на каждой локе) n количество. Как будет выглядеть фунция рэндомного выбора?
math.random

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

Всех с наступающим рождеством!

У меня вопрос: Как вызвать в функции сообщения, чтобы вместо дефолтной иконки, отображалась иконка из ui/ui_iconstotal.dds

 

К примеру функция смс

 

function yan_sm_zone_sms()
news_manager.send_tip(db.actor, "%c[255,160,160,160]".."ШРАМ:".."\\n".."%c[255,255,128,128]Готово! Охранника зачистил! Профессор, давай быстрей телепортируйся, и отключай защиту мать твою! .......".."".."\n", nil, nil, 40000)
end

 

В news_manager.script - Иконка Шрама, пусть по местонахождению наз. shram

 

tips_icons = {
    killer   = { 0, 658},
              shram = { 83, 375}
}

 

Т.е. отобразить с сообщением имя (Шрам) и так же его иконку. :ny_rolleyes:

 

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

Старлей

Можно конечно и зациклить, но суть не в этом, тогда и спавн повторяться будет, можно конечно и его обойти, но звук при этом только из одного файла воспроизводиться будет, вот в чем проблема, а надо что бы все поочередно или рандомно без разницы с задержкой 1-3 сек. одна от другой!!!

characters_voice\scenario\rnd_fallscream, characters_voice\scenario\rnd_moan, characters_voice\scenario\rnd_the_horror3, characters_voice\scenario\rnd_scr3, characters_voice\scenario\rnd_ratchant

Artos

Хочешь рандомно и весь список - тут как раз своя функция сгодится, выбирая из списка и отсеживая его окончание ...

Именно так и хочу, однако штатных функций не обнаружил.

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

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

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

Igor88.89, Я через функцию хочу вызвать не только имя, но так же иконку.

 

losiara Не пробовал по методу рупоров, т.е. схему, корая заложена в них? Звуки проигрываются поочерёдно. Через sound_theme.script Пример: snd = radio_music, далее схему отыграть в своём рестрикторе?

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

Igor88.89

сорри, не помню точно, но помойму при спавне через скрипт, что бы заспавнить на определенный локе - обязательно надо указывать lvlid и gvid
position_table = {
      [ 1] = {246.804992675781, 15.5329999923706, 494.454986572266,lvlid-твой,gvid-твой},
      [ 2] = {247.100006103516, 13.7950000762939, 439.272003173828,lvlid-твой,gvid-твой},
      [ 3] = {339.779998779297, -6.9539999961853, 368.662994384766,lvlid-твой,gvid-твой}
-- и так далее
     }
local aNums = {}

function spawn_anoms()
local rCount  = math.random(1,#position_table)
     for i = 1,rCount do
          local rNum  = math.random(1,#position_table)
          if aNums[rNum] then
              rNum = rNum+1 --что бы не спавнить в одно и тоже место
          end
          local tT = position_table[rNum]
          alife():create("секция твоей аномалии", vector():set(tT[1],tT[2],tT[3]), tT[4], tT[5] )
          aNums[rNum] = {} --примено так, сорри если что, точно не помню
     end
end

 

 

в прочем как-то так)), но стоит доработать, так как всеравно может заспавниться аномалия по одним и тем же координатам

Ссылка на комментарий
Igor88.89 #position_table - Операция получения длины массива/таблицы, а math.random(1,#position_table) берет рандомное число из промежутка от 1, до числа, которое вернет #position_table Изменено пользователем Viнt@rь
Ссылка на комментарий

Т.е. у меня один массив с координатами должен быть, ведь lvlid, gvid точно указывают на место на любой локации?

Доработать нужно в любом случае. И массивов придётся делать на каждую локу. Необходимо на каждой локе из m точек рэндомно выбрать n-нное количество и родить там аномалии.

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

да...

 

только обязательно учти

стоит доработать, так как всеравно может заспавниться аномалия по одним и тем же координатам
Изменено пользователем Viнt@rь
Ссылка на комментарий
Igor88.89, вообще можно без координат обойтись. Для спавна через alife():create() координаты можно получить из левел вертекса так: level.vertex_position(lvid). Длина стороны аи-ноды составляет 0,7 метров, так что, думаю, такой точности для спавна аномалий хватит.
Ссылка на комментарий

Igor88.89, тогда примерно так

local lTbl = {"marsh","escape"}
local position_table= { 
["marsh"]  = {
      [ 1] = {246.804992675781, 15.5329999923706, 494.454986572266,lvlid-твой,gvid-твой},
      [ 2] = {247.100006103516, 13.7950000762939, 439.272003173828,lvlid-твой,gvid-твой},
      [ 3] = {339.779998779297, -6.9539999961853, 368.662994384766,lvlid-твой,gvid-твой}
-- и так далее
},
["escape"] = {
      [ 1] = {246.804992675781, 15.5329999923706, 494.454986572266,lvlid-твой,gvid-твой},
      [ 2] = {247.100006103516, 13.7950000762939, 439.272003173828,lvlid-твой,gvid-твой},
      [ 3] = {339.779998779297, -6.9539999961853, 368.662994384766,lvlid-твой,gvid-твой}
-- и так далее
}
-- и так далее
}

function spawn_anoms()
for k,v in pairs(lTbl) do
local aNums = {}
local rCount  = math.random(1,#position_table[v])
     for i = 1,rCount do
          local rNum  = math.random(1,#position_table[v])
          if aNums[rNum] then
              rNum = rNum+1 --что бы не спавнить в одно и тоже место
          end
          local tT = position_table[rNum]
          alife():create("секция твоей аномалии", vector():set(tT[1],tT[2],tT[3]), tT[4], tT[5] )
          aNums[rNum] = {} --примено так, сорри если что, точно не помню
     end
end
end

 

 

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

Запутался...

 

Вручаем неписю в руки что-нибудь. Скажем, item:enable_attachable_item( true ). Вручилось. Непись замечательно проигрывает с этим предметом анимации - ест/пьет/на гормошке играет. Вдруг, внезапно, непись умирает. Что будет идеологически правильно:

сделать enable_attachable_item( false ), ничего не трогать вообще, удалить итем нафиг, что-то еще(что именно) ?

 

Код, который смотрю, делает первое. Причем, похоже, после того, как по on_death удалил сам предмет. Что странно. Ну, то есть,

function action_foo:finalize()
item = npc:object( "figovina" )
if item then enable_attachable_item( false ) end
end

удаление вызывается в on_death() из мотиватора раньше, чем вызовется action_foo:finalize().

 

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

И, кстати, объект, наверное, стоит не получать прямо здесь по секции, а где-то хранить, на случай, если их c такой секцией окажется несколько ?

А удалять у мертвого непися можно в любой момент, при условии, что он (предмет, да и непись тоже) ни кем и ни чем больше не трогается ?

 

P.P.S. Аналогичный вопрос для случая с on_net_destroy(): с предметами в руках у неписей в этот момент, наверное, ничего делать не стоит ?

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

Всем доброго времени суток, с прошедшими праздниками и наступившим Рождеством. Возник такой вопрос: что отвечает за непереход некоторых NPC в offline? Объясняю: в SoC на кордоне новички с Волком переходят в offline, а солдатня на блокпосте - нет. Сравнил их секции в All.spawn и заметил разницу в флагах. Причина только в этом?

Лучше спросить глупость, чем её совершить.

Ссылка на комментарий
лнкс, хотя в данном случае дело в этом, но в общем случае не обязательно. Флагами flSwitchOffline/flSwitchOnline можно управлять методами can_switch_offline()/can_switch_online() соответствующих серверных объектов. Доступ к этим методам можно получить через регистрацию сетов с помощью object_factory. Смотри se_stalker.script, например.
Ссылка на комментарий

Попробую. Ещё вопрос: заспавнил рюкзак

[10279]
; cse_abstract properties
section_name = physic_object
name = predbannik_physic_object_0108
position = -425.600646972656,12.9063091278076,-149.377365112305
direction = 0,-1.92239999771118,0

; cse_alife_object properties
game_vertex_id = 3908
distance = 0
level_vertex_id = 290047
object_flags = 0xffffff3a

; cse_visual properties
visual_name = equipments\item_rukzak

; cse_ph_skeleton properties

; cse_alife_object_physic properties
physic_type = 0x3
mass = 1000
fixed_bones = link

, сделал из него тайник

[10280]
; cse_abstract properties
section_name = inventory_box
name = predbannik_inventory_box_0008
position = -425.600646972656,12.9063091278076,-149.377365112305
direction = 0,-1.92239999771118,0

; cse_alife_object properties
game_vertex_id = 3908
distance = 35
level_vertex_id = 290047
object_flags = 0xffffff3b
custom_data = <<END
[spawn]
mag_30_7.62x39_fmj = 10
END

; cse_visual properties
visual_name = equipments\item_rukzak

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

Лучше спросить глупость, чем её совершить.

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

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

У тебя поднимается второй рюкзак с именем predbannik_inventory_box_0008, поставь ему также fixed_bones = link и он подниматься перестанет.

 

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

Сообщение от модератора ColR_iT
HellStalkerDog и strelok200, задавайте, пожалуйста, вопросы в соответствующие темы.

Посты Ваши переместил, в следующий раз просто удалю.

Спасибо за понимание.

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

Igor88.89

вот сдесь я допустил ошибку

 

надо не

local tT = position_table[rNum]

 

а

local tT = position_table[v][rNum]

 

вот только не помню передастся ли v из первого цикла во второй, если нет то после первого цикла добавь такое

 

local level_name = v

и тогда это будет так

local tT = position_table[level_name][rNum]

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

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

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

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

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

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

Войти

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

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

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