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

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

Всем здравствуйте!

Изъюзал весь поиск,но так и не нашёл ответа на,казалось бы простой вопрос:

Что такое мины?Как их спаунить? Какие конфиги за них отвечают.

Я имею ввиду простые стационарные мины,спавнящиеся с началом игры.

Правильно заданный вопрос- уже половина ответа!
Ссылка на комментарий

Larry76, простые мины палочкой вверх?

Если да, то это аномалии такие, типа мины.

В состоянии idle имеют партикл палочки, а в активном состоянии, когда актор вошёл в зону мины, активное, тоесть хит и партикл взрыва, звук.

Спавнить их в sdk или all.spawn, или скриптом.

Также спавнить, как и аномалии.

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

TREWKO.А поподробнее, с примером?

Я,в принципе понял,что они действуют наподобии аномалий.Но вот примерчик спавна одиночной мины не помешал бы конечно... :blush:

Интересно,а в Сигерусе мины как сделаны? (те,которые с началом игры по локации разбросаны.)

Изменено пользователем Larry76
Правильно заданный вопрос- уже половина ответа!
Ссылка на комментарий

Здрасьте.

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

И через какой инфопоршень его желательно вызывать?

FWR mod
Обитаю здесь и здесь

Так же известен, как: ~<Red>~

Где то на компе лежит куча стволов, и весьма хороших, фишка в том, буду ли я выкладывать их еще

:)

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

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

 

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

Larry76, спавнятся как и аномалии.

Скриптом я аномалии так и не научился спавнить, скрипт у меня не пашет.

Секция мины = zone_mine_field

Но вот:

function create_anom(section,rad_anom,x,y,z,lv,gv,mode)

-- con(section)

if gv==nil then gv=db.actor:game_vertex_id() end

if lv==nil then lv=db.actor:level_vertex_id() end

if pos==nil then pos=db.actor:position() end

 

local p_obj = alife():create(section,vector():set(x,y,z),lv,gv)

 

local packet = net_packet()

packet:w_begin(0)

p_obj:STATE_Write(packet)

packet:r_seek(2)

 

local game_vertex_id = packet:r_u16()

local cse_alife_object__unk1_f32 = packet:r_float()

local cse_alife_object__unk2_u32 = packet:r_s32()

local level_vertex_id = packet:r_s32()

local object_flags = packet:r_s32()

local custom_data = packet:r_stringZ()

local story_id = packet:r_s32()

local cse_alife_object__unk3_u32 = packet:r_s32()

 

local shape_count = packet:r_u8()

for i=1,shape_count do

local shape_type = packet:r_u8()

if shape_type == 0 then

local center = packet:r_vec3()

local radius = packet:r_float()

else

local box = packet:r_matrix()

end

end

 

local restrictor_type = packet:r_u8()

 

local cse_alife_custom_zone__unk1_f32 = packet:r_float()

local cse_alife_custom_zone__unk2_u32 = packet:r_s32()

local on_off_mode_enabled_time = packet:r_s32()

local on_off_mode_disabled_time = packet:r_s32()

local on_off_mode_shift_time = packet:r_s32()

 

local offline_interactive_radius = packet:r_float()

local artefact_spawn_places_count = packet:r_u16()

local cse_alife_anomalous_zone__unk1_u32 = packet:r_s32()

 

local last_spawn_time_present = packet:r_u8()

 

-- if packet:r_elapsed() ~= 0 then abort("left=%d", packet:r_elapsed()) end

 

packet:w_u16(game_vertex_id)

packet:w_float(cse_alife_object__unk1_f32)

packet:w_s32(cse_alife_object__unk2_u32)

packet:w_s32(level_vertex_id)

packet:w_s32(object_flags)

if mode~=nil then custom_data = mode end

packet:w_stringZ(custom_data)

packet:w_s32(story_id)

packet:w_s32(cse_alife_object__unk3_u32)

 

packet:w_u8(1)

packet:w_u8(0)

local sphere_center = vector()

sphere_center:set(0, 0, 0)

packet:w_vec3(sphere_center)

radius = rad_anom

packet:w_float(radius)

 

packet:w_u8(restrictor_type)

 

packet:w_float(cse_alife_custom_zone__unk1_f32)

cse_alife_custom_zone__unk2_u32 = bit_not(0)

packet:w_s32(cse_alife_custom_zone__unk2_u32)

packet:w_s32(on_off_mode_enabled_time)

packet:w_s32(on_off_mode_disabled_time)

packet:w_s32(on_off_mode_shift_time)

 

packet:w_float(offline_interactive_radius)

packet:w_u16(artefact_spawn_places_count)

packet:w_s32(cse_alife_anomalous_zone__unk1_u32)

 

if mode == nil then

 

packet:w_u8(last_spawn_time_present)

end

p_obj:STATE_Read(packet, packet:w_tell()-packet:r_tell())

-- add_spot_on_map(p_obj.id,"red_location","Аномалия")

 

 

return p_obj

end

 

 

 

 

Вызвать так:

Ниже этого скрипта пиши:

function anm_cr()
    create_anom("zone_mine_field",radius,x,y,z,lv,gv, nil) -- пропиши координаты и радиус.
end

Сам толком не проверял.

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

~<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 мин.:

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

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

Как и любой другой объект в игре :).

в цикле по инвентарю ищешь название и удаляешь по id

либо просто отбираешь у игрока :)(посмотри в сторону dialogs.script или amk_mod.script)

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

а тогда как?

FWR mod
Обитаю здесь и здесь

Так же известен, как: ~<Red>~

Где то на компе лежит куча стволов, и весьма хороших, фишка в том, буду ли я выкладывать их еще

:)

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

Здрасте народ! Никто не подскажет возможен ли какой нибудь счетчик диалогов? Например если один и тот же диалог например прошел 3 раза то чего нибудь делаем...

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

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

Подскажите, кто знает:

1. как узнать использован ли в данный момент оптический прицел главным героем ?

2. как убрать/вернуть весь индикаторный худ как по клавишам "серый минус"/"серый плюс" ?

 

malandrinus, это для ТЧ.

1. оружие с оптическим прицелом в состоянии прицеливания.

2. level.hide_indicators()/level.show_indicators() эквивалентны -/+, hud_weapon on/off убирает руки с оружием, hud_info on/off не заметил изменений на экране, а остальное не пробовал из-за ненадобности.

Изменено пользователем sapsan
Ссылка на комментарий
Никто не подскажет возможен ли какой нибудь счетчик диалогов?

В диалогах можно завести тег action. Вписываешь туда свою функцию и делаешь там что надо. Можно и счётчик завести.

 

1. как узнать использован ли в данный момент оптический прицел главным героем ?

2. как убрать/вернуть весь индикаторный худ как по клавишам "серый минус"/"серый плюс" ?

1. Уточнить бы вопрос. Надет прицел на текущем оружии или оружие в состоянии прицеливания? Если установленность прицела, то в ТЧ это только через нетпакеты. Начиная с ЧН есть вроде функция у ствола weapon_is_scope

2. Для манипуляции элементами худа можно использовать консольные команды (через get_console():execute()):

hud_crosshair on/off

hud_crosshair_dist on/off

hud_info on/off

hud_weapon on/off

и функции:

level.hide_indicators()

level.show_indicators()

Что из этого заменяет +/- уже не помню.

 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

Ссылка на комментарий
кровоSTALKER, а почему не пойдут-то? Это всего лишь проверка времени (с последствиями в виде запуска нужных событий) повешенная на апдейт актора. :)
Ссылка на комментарий

Как сделать чтобы при подходе ГГ к НПС с определенным SIDом ближе чем на 10метров его(ГГ) бил хит(слабенький) + постэффект и появлялось сообщение что ближе мол нельзя убьёт.

87728-stalker.gif
Ссылка на комментарий

ФеНиКс:

Впервые я могу что-то предложить:

Ну во-первых тебе надо сделать проверку на дистанцию:

local flobals = false

function bind_hit_static()
  for a=1,65635,1 do 
    local obj=level.object_by_id(a) 
    if obj and string.find(obj:name(),"имя нпс") and not flobals then
     if obj:position():distance_to(db.actor:position()) < 10 then
      local h = hit ();
      h.power = 1;
      h.direction = vector():set (0, 0, 0);
      h.impulse = 0;
      h.draftsman = obj;
      h.type = hit.explosion;
      obj:hit (h);
      flobals = true
     end
    end
  end
end

Вот мы и получили хит... по моему)))

Теперь надо сделать сообщение, получаем такое:

local flobals = false

function bind_hit_static()
  for a=1,65635,1 do 
    local npc=level.object_by_id(a) 
    if npc and string.find(npc:name(),"имя нпс") and not flobals then
     if npc:position():distance_to(db.actor:position()) < 10 then
      local h = hit ();
      h.power = 1;
      h.direction = vector():set (0, 0, 0);
      h.impulse = 0;
      h.draftsman = obj;
      h.type = hit.explosion;
      npc:hit (h);
      flobals = true
    local sactor = alife():actor() 
    local cactor = level.object_by_id(sactor.id) 
    cactor:give_game_news(
        "%c[255,255,1,1]Имя того, кто это скажет\\n%c[255,1,255,1]Дальше подойти нельзя! Опасная зона!",   
        "ui\\ui_iconstotal",        
        Frect():set(1245,517,83,47),  
        math.random(1000, 2000),     -- задержка появления сообщения. корейский рандом)))
        5000 -- сколько продержится это сообщение.                         
        )
     end
    end
  end
end

Но вот я не понял, эффект какой, пост эффект?

Или аним?

К сожалению не врубился, как прописать sid... Может: level.object_by_sid(номер сида)?

 

 

Кстати:

Засунул в скрипт test.script это:

local lamps_marsh_vr_on = false

function bind()
    local id, obj
    for id=0, 65535 do
        obj = level.object_by_id(id)
        if obj ~= nil and
           obj:section() == "lights_hanging_lamp" and
           string.find(obj:name(), "light_alarm_glass_0001")
        then
            local hl = obj:get_hanging_lamp()
            if hl ~= nil then
                                if lamps_marsh_vr_on then 
                     hl:turn_on()
                                   else
                     hl:turn_off()
                                end
            end
        end
    end
end

Прописал в биндер сталка: test.bind()

То есть, при запуске игры выключается лампочка в подвале у сидора.

Но как только запускаю игру, игра идёт нормально... как только сидор махнул рукой - бац вылет!

Вылет без лога.

Удаляю скрипт--> игра работает без проблем.

Результат выключения лампочки увидеть не могу, так как слишком быстро всё происходит.

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

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

 

Проверил с помощью проверки на наличие часов:

get_hud():GetCustomStatic("hud_show_time")

так они всегда присутствуют...

 

malandrinus, а сам элемент есть такой ? "hud_show_time" - это в Солянке часы выводятся...

Код

        local guiHidedManually = not cs
        get_console():execute("load ~#I#: guiHidedManually="..tostring(guiHidedManually))
        get_console():execute("load ~#I#: cs:wnd():IsEnabled()="..tostring(cs:wnd():IsEnabled()))
        get_console():execute("load ~#I#: cs:wnd():IsShown()="..tostring(cs:wnd():IsShown()))
        get_console():execute("load ~#I#: cs:wnd():GetWidth()="..tostring(cs:wnd():GetWidth()))
        get_console():execute("load ~#I#: cs:wnd():GetHeight()="..tostring(cs:wnd():GetHeight()))
        get_console():execute("load ~#I#: cs:wnd():GetTextX()="..tostring(cs:wnd():GetTextX()))
        get_console():execute("load ~#I#: cs:wnd():GetTextY()="..tostring(cs:wnd():GetTextY()))

всегда возвращает:

! Cannot find saved game ~#i#: guihidedmanually=false
! Cannot find saved game ~#i#: cs:wnd():isenabled()=true
! Cannot find saved game ~#i#: cs:wnd():isshown()=true
! Cannot find saved game ~#i#: cs:wnd():getwidth()=98
! Cannot find saved game ~#i#: cs:wnd():getheight()=19
! Cannot find saved game ~#i#: cs:wnd():gettextx()=22
! Cannot find saved game ~#i#: cs:wnd():gettexty()=1

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

sapsan,

странно, у меня эта же проверка стабильно выдаёт nil. Но если есть статик, то можно попытаться проверить видимость или положение окна, связанного с ним.

 

 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

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

Привет всем. Люди добрые, подскажите мне пожайлуста как прикрутить аномалию(например - электра) к конкретному объекту(например - бочка с бензином)? :russian_ru:


Команда ReWrite Team. От сталкера отошли. Пересели за другую платформу.

 

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

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

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

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

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

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

Войти

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

Войти
×
×
  • Создать...