Случайная подборка модов
MISERY 2.2
4.1
Thorny Way
3.5
Возвращение
3.0
История Кота
3.4
Путь Бандита
2.0
Долина Шорохов
4.5
Последние обновленные темы Прямой эфир Самые популярные темы Последние новости
Архив - только для чтения
⚙ Модострой: Вопросница
Российская Федерация  Wolfstalker
Среда, 24.02.2016, 00:25 | Сообщение # 1
Статус:
Легенда:
Сообщений: 2258
Награды: 15
Регистрация: 05.04.2010

В данной теме вы можете задавать любые вопросы касательно S.T.A.L.K.E.R. моддинга


• Не флудить
• Предварительно просматривайте раздел, ведь ответ на ваш вопрос может быть там
• В своем вопросе указывайте платформу моддинга — Тень Чернобыля, Чистое небо или Зов Припяти




F.A.Q

  Злобная реклама
Среда, 24.02.2016, 00:25
Статус:
Сообщений: 666
Регистрация: 05.04.2010
Российская Федерация  alanbrose
Среда, 04.10.2017, 10:47 | Сообщение # 8116
Статус:
Отмычка:
Сообщений: 113
Награды: 4
Регистрация: 28.08.2015

denis2000, всё там. На другом оружии сработало, проблемы только с беретой и удп, но там ставился апгрейд на глушитель, может иконка апгрейда мешает, только вот как её подвинуть - неизвестно.
  Злобная реклама
Среда, 04.10.2017, 10:47
Статус:
Сообщений: 666
Регистрация: 28.08.2015
Российская Федерация  PROforum
Среда, 04.10.2017, 11:54 | Сообщение # 8117
Статус:
Отмычка:
Сообщений: 140
Награды: 4
Регистрация: 27.09.2015

Цитата alanbrose ()
всё там

Нет, у оружия с апгрейдом на глушитель silencer_x и silencer_y прописаны в конфигах апгрейдов, которые находятся по адресу: gamedata\configs\weapons\upgrades
В нужном конфиге ищите слово "глушитель" или "нанесение наружной резьбы на ствол"
Цитата alanbrose ()
проблемы только с беретой и удп

Снова нет. На сколько я помню, апгрейд на глушитель есть у w_beretta_up, w_walther_up, w_l85_up, w_svu_up
У удп (USP) такого апгрейда нет, наверное вы имели ввиду Волкер-П9м (walther).
  Злобная реклама
Среда, 04.10.2017, 11:54
Статус:
Сообщений: 666
Регистрация: 27.09.2015
Российская Федерация  denis2000
Среда, 04.10.2017, 18:30 | Сообщение # 8118
Время Альянса
Статус:
Ветеран:
Сообщений: 4070
Награды: 16
Регистрация: 19.07.2013

Цитата alanbrose ()
всё там

Однако движек, я и PROforum с вами не согласны. Зато я согласен с многоуважаемым PROforum, если возможность установки глушителя обусловлено соответствующим апгрейдом, то настройки положения иконки стоит поискать именно там.


ZoneGuard, Ваше объявление стоит разместить в >профильной теме< а не здесь.
Сообщение отредактировал denis2000 - Среда, 04.10.2017, 18:32
  Злобная реклама
Среда, 04.10.2017, 18:30
Статус:
Сообщений: 666
Регистрация: 19.07.2013
Российская Федерация  alanbrose
Среда, 04.10.2017, 23:12 | Сообщение # 8119
Статус:
Отмычка:
Сообщений: 113
Награды: 4
Регистрация: 28.08.2015

PROforum, denis2000, спасибо! Сработало.

Не подскажите как состояние предметов перевести в цифровое значение. Сейчас вот так вот, файл actor_menu_item_16.xml. Текстура и цвета, а хотелось бы, чтобы отображалось 35%, 75 %.



Может мод какой-нибудь был с такой фичей.
Сообщение отредактировал alanbrose - Четверг, 05.10.2017, 00:27
  Злобная реклама
Среда, 04.10.2017, 23:12
Статус:
Сообщений: 666
Регистрация: 28.08.2015
Российская Федерация  Overfirst
Четверг, 05.10.2017, 07:20 | Сообщение # 8120
Статус:
Бывалый:
Сообщений: 1081
Награды: 19
Регистрация: 11.06.2015

Умножь получаемое состояние на сто и добавь знак процента: .."%"
  Злобная реклама
Четверг, 05.10.2017, 07:20
Статус:
Сообщений: 666
Регистрация: 11.06.2015
Российская Федерация  alanbrose
Четверг, 05.10.2017, 11:00 | Сообщение # 8121
Статус:
Отмычка:
Сообщений: 113
Награды: 4
Регистрация: 28.08.2015

BoBaH_671, идея то хорошая, но я не скриптер. Мне бы код))
  Злобная реклама
Четверг, 05.10.2017, 11:00
Статус:
Сообщений: 666
Регистрация: 28.08.2015
Украина  _S_k_i_F_
Четверг, 05.10.2017, 12:45 | Сообщение # 8122
Золотой Обоз
Статус:
Опытный:
Сообщений: 1311
Награды: 9
Регистрация: 09.08.2015

alanbrose, это в движке надо менять, в файле UICellItem.cpp
  Злобная реклама
Четверг, 05.10.2017, 12:45
Статус:
Сообщений: 666
Регистрация: 09.08.2015
Российская Федерация  atanda
Четверг, 05.10.2017, 14:53 | Сообщение # 8123
Статус:
Бывалый:
Сообщений: 672
Награды: 7
Регистрация: 12.07.2017

Добрый день всем! В каком файле проходит управление кострами в ТЧ? И есть ли оно там вообще?
  Злобная реклама
Четверг, 05.10.2017, 14:53
Статус:
Сообщений: 666
Регистрация: 12.07.2017
Украина  _S_k_i_F_
Четверг, 05.10.2017, 16:31 | Сообщение # 8124
Золотой Обоз
Статус:
Опытный:
Сообщений: 1311
Награды: 9
Регистрация: 09.08.2015

Такая проблема: есть массив created_afs, куда при спавне артефактов записываю их id
Код
local af_obj = alife():create(afs[j],position,lv_id,gv_id)
created_afs[af_obj.id] = af_obj.id

Потом при поднятии арта в коллбеке on_item_take вызываю ф-ция удаления айдишника поднятого арта из массива
Код
xrs_random_anomaly.remove_taken_af(obj.id)

Код
function remove_taken_af(af_id)
  if created_afs[af_id] ~= nil then
    table.remove(created_afs,af_id)
  end
end

Но айди арта не удаляется. Где ошибся? Заранее спасибо!
Сообщение отредактировал _S_k_i_F_ - Четверг, 05.10.2017, 17:47
  Злобная реклама
Четверг, 05.10.2017, 16:31
Статус:
Сообщений: 666
Регистрация: 09.08.2015
Российская Федерация  alanbrose
Четверг, 05.10.2017, 16:39 | Сообщение # 8125
Статус:
Отмычка:
Сообщений: 113
Награды: 4
Регистрация: 28.08.2015

buffy, gamedata/config/misc/zone_kampfire.ltx

Добавлено (05.10.2017, 16:39)
---------------------------------------------
_S_k_i_F_, жесть... Проще засечки на 70 процентах на текстуре сделать... Спасибо за ответ.

  Злобная реклама
Четверг, 05.10.2017, 16:39
Статус:
Сообщений: 666
Регистрация: 28.08.2015
Российская Федерация  denis2000
Четверг, 05.10.2017, 18:06 | Сообщение # 8126
Время Альянса
Статус:
Ветеран:
Сообщений: 4070
Награды: 16
Регистрация: 19.07.2013

buffy, Такого как в ЗП нет, совсем нет, даже в движке методы не предусмотрены.


Цитата _S_k_i_F_ ()
Где ошибся?

Пробуйте так:
Код
function remove_taken_af(af_id)
  if created_afs[af_id] ~= nil then
    created_afs[af_id] = nil
  end
end
Сообщение отредактировал denis2000 - Четверг, 05.10.2017, 18:11
  Злобная реклама
Четверг, 05.10.2017, 18:06
Статус:
Сообщений: 666
Регистрация: 19.07.2013
Российская Федерация  atanda
Четверг, 05.10.2017, 19:00 | Сообщение # 8127
Статус:
Бывалый:
Сообщений: 672
Награды: 7
Регистрация: 12.07.2017

denis2000,
Я, возможно, буду не прав, но описание костра в файле zone_kampfire на 70-80% идентично описанию аномалии в тех же файлах :zone_gravi, zone_mincer и др. То есть костёр можно считать в тч "псевдо_аномалией"?

Если же мои раздумья верны, я продолжу разговор.
  Злобная реклама
Четверг, 05.10.2017, 19:00
Статус:
Сообщений: 666
Регистрация: 12.07.2017
Украина  _S_k_i_F_
Четверг, 05.10.2017, 19:29 | Сообщение # 8128
Золотой Обоз
Статус:
Опытный:
Сообщений: 1311
Награды: 9
Регистрация: 09.08.2015

denis2000, и так тоже не работает.
  Злобная реклама
Четверг, 05.10.2017, 19:29
Статус:
Сообщений: 666
Регистрация: 09.08.2015
Российская Федерация  denis2000
Четверг, 05.10.2017, 21:47 | Сообщение # 8129
Время Альянса
Статус:
Ветеран:
Сообщений: 4070
Награды: 16
Регистрация: 19.07.2013

_S_k_i_F_, Значит проблема не в предъявленных функциях, а в остальном коде.


Цитата buffy ()
Если же мои раздумья верны, я продолжу разговор.

Никто не против, развивайте мысль.
Сообщение отредактировал denis2000 - Четверг, 05.10.2017, 21:48
  Злобная реклама
Четверг, 05.10.2017, 21:47
Статус:
Сообщений: 666
Регистрация: 19.07.2013
Украина  _S_k_i_F_
Четверг, 05.10.2017, 22:27 | Сообщение # 8130
Золотой Обоз
Статус:
Опытный:
Сообщений: 1311
Награды: 9
Регистрация: 09.08.2015

denis2000, вот полностью сам скрипт
Код
-- Файл: xrs_random_anomaly
-- Назначение: Рандомное заполнение локации аномалиями. Рандомный переспавн аномалий после выброса.
--------------------------------------------------------------------------------
-------------------Скрипты: makdm, 2014 для Припять:Точка Отсчёта
--------------------------------------------------------------------------------

random_anomaly_id = {} -- здесь будем хранить ID аномалий.
created_afs = {} -- массив созданных аномалиями артефактов

local ini = ini_file("misc\\dynamics_anomaly.ltx")

---------------------------------------------вызывается из логики рестриктора

function remove_taken_af(af_id)
  if created_afs[af_id] ~= nil then
    created_afs[af_id] = nil
  end
end

function control_random_anomaly( flag )

    local anomaly = {} -- массив аномалий
    local zone_off = {} -- массив офф-зон
    
       
    if flag == "release" then

  for k,v in pairs( random_anomaly_id ) do
   local se_obj = alife():object( v )
   if se_obj then
    alife():release( se_obj, true )
   end
  end
  random_anomaly_id = {}
  
  for k,v in pairs( created_afs ) do
   local af = alife():object( v )
   if af then
    alife():release( af, true )
   end
  end
  created_afs = {}
    
    elseif flag == "spawn" then
       
  local radius = 3
  local level_name = level.name()    
  local gv_id = 0
  local lv_id = 0
  while game_graph():valid_vertex_id( gv_id ) do
    
   local level = alife():level_name( game_graph():vertex( gv_id ):level_id() )
   if level == level_name then
    lv_id = game_graph():vertex( gv_id ):level_vertex_id()
    break
   end
  gv_id = gv_id + 1
  end
  
  local count_anom, pos_r_x, pos_r_z, pos_x_min, pos_x_max, pos_z_min, pos_z_max, anom_list, anom_in_list, zone_off_list, location
  
  for level in game_graph():levels() do
   location = alife():level_name(level.id)
   if ini:section_exist(location) and level_name == location then
    count_anom = ini:r_s32(location, "anomaly_count") -- читаем количество аномалий для локации
    pos_x_min = ini:r_s32(location, "pos_x_min")
    pos_x_max = ini:r_s32(location, "pos_x_max")
    pos_z_min = ini:r_s32(location, "pos_z_min")
    pos_z_max = ini:r_s32(location, "pos_z_max")
    anom_list = ini:r_string(location, "anomaly_list")
    anom_in_list = ini:line_count(anom_list)
    
    local result, anom_name, field_name, afs = "", "", "", ""
    
    for i=0,anom_in_list-1 do -- записываем все указанные в конфиге аномалии в таблицу
     result, anom_name, afs = ini:r_line(anom_list, i, "", "")
     table.insert(anomaly,anom_name)
    end
    
    result, field_name, zone_off_list = ini:r_line(location, 6) -- читаем офф-зоны
    local zone_off_ind = 1
    zone_off_list = parse_names(zone_off_list)
    while zone_off_list[zone_off_ind] ~= nil do -- записываем офф-зоны в таблицу
     table.insert(zone_off,zone_off_list[zone_off_ind])
     zone_off_ind = zone_off_ind + 1
    end
   end    
  end
  
  for i = 1,count_anom do
   local section = anomaly[ math.random( #anomaly ) ]
   pos_r_x = math.random( pos_x_min, pos_x_max )
   pos_r_z = math.random( pos_z_min, pos_z_max )
   local pos = vector():set( pos_r_x, 0, pos_r_z )
   local vert = level.vertex_id( pos )
   local position = level.vertex_position( vert )
  
   local right_position = true
   for k,v in pairs( zone_off ) do
    local zone = db.zone_by_name[ v ]
    if zone then
     if zone:inside( position ) then
      right_position = false
     end
    end
   end
   
   if right_position == true then
    --[[local del_zone
     if level.name() == "escape" then
      del_zone = db.zone_by_name["esc_anomaly_del"]
     elseif level.name() == "marsh" then
      del_zone = db.zone_by_name["mar_anomaly_del"]    
     else
      del_zone = nil
     end
     if (del_zone == nil) or (del_zone ~= nil and not del_zone:inside(position)) then]]
    local s_obj = create_anomaly( section, radius, position, lv_id, gv_id )
    random_anomaly_id[ s_obj.id ] = s_obj.id
    local line_num = nil
    for k=0,anom_in_list-1 do -- получаем номер строки в конфиге данной аномалии
    result, anom_name, afs = ini:r_line(anom_list, k, "", "")
     if anom_name == section then line_num = k end
    end
    if line_num ~= nil then
    result, anom_name, afs = ini:r_line(anom_list, line_num, "", "") -- читаем в листе аномалий параметры <имя аномалии>:{массив артефактов для данной аномалии и вероятность спавна - нечетный:четный индекс - имя артефакта:вероятность спавна}
     afs = parse_names(afs)
     local j = 1
     local rnd
     while afs[j] ~= nil do -- проходим по всем записанным артефактам
      rnd = math.random(1, 100)
      if rnd <= tonumber(afs[j+1]) then
       local af_obj = alife():create(afs[j],position,lv_id,gv_id) -- спаним артефакт с заданной вероятностью
       created_afs[af_obj.id] = af_obj.id
      end
      j = j + 2
     end
    end
    --end
   end
  
  end

    
    end

end

-------------Запись/загрузка ключевых параметров при сохранении/загрузке игры

function save( packet )
    i = 0
    for k,v in pairs( random_anomaly_id ) do
  i = i + 1
    end
    packet:w_u16( i )
    for k,v in pairs( random_anomaly_id ) do
  packet:w_u32( k )
    end
    i = 0
    for k,v in pairs(created_afs) do
  i = i + 1
    end
    packet:w_u16(i)
    for k,v in pairs(created_afs) do
  packet:w_u32(k)
    end
end

function load( reader )    
    random_anomaly_id = {}
    n = reader:r_u16()
    for i = 1,n do
  local k = reader:r_u32()
  random_anomaly_id[ k ] = k
    end
    created_afs = {}
    n = reader:r_u16()
    for i = 1,n do
  local k = reader:r_u32()
  created_afs[k] = k
    end
end

function create_anomaly( zone_name, zone_radius, position, lv, gv )

----------------------------Создаём объект-аномалию
    
    local sobj = alife():create( zone_name, position, lv, gv )
    
    local packet = net_packet()
    packet:w_begin( 0 )
    
-------------------------------------Читаем нет-пакет   
    sobj:STATE_Write( packet )
    packet:r_seek( 2 )
    
    local game_vertex_id    =    packet:r_u16()
    local distance   =    packet:r_float()
    local direct_control    =    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 spawn_story_id    =    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 max_power      =    packet:r_float()
    local owner_id      =    packet:r_s32()
    local enabled_time     =    packet:r_u32()
    local disabled_time     =    packet:r_u32()
    local start_time_shift    =    packet:r_u32()
    local offline_interactive_radius    =    packet:r_float()
    local artefact_spawn_count   =    packet:r_u16()
    local artefact_position_offset  =    packet:r_s32()
    local last_spawn_time    =    packet:r_u8()
    
------------------------------------------Меняем данные пакета
    
    local new_center = vector():set( 0, 0, 0 )
    owner_id  =    bit_not( 0 )
    restrictor_type    = 3
    max_power = 0
    offline_interactive_radius    = 30
    artefact_spawn_count    = 32
    last_spawn_time = 0
    
------------------------------------------------Пишем в пакет    
    
    packet:w_begin( 0 )
    packet:w_u16( game_vertex_id )
    packet:w_float( distance )
    packet:w_s32( direct_control )
    packet:w_s32( level_vertex_id )
    packet:w_s32( object_flags )
    packet:w_stringZ( custom_data )
    packet:w_s32( story_id )
    packet:w_s32( spawn_story_id )
    packet:w_u8( 1 )
    packet:w_u8( 0 )
    packet:w_vec3( new_center )
    packet:w_float( zone_radius )
    packet:w_u8( restrictor_type )
    packet:w_float( max_power )
    packet:w_s32( owner_id )
    packet:w_u32( enabled_time )   
    packet:w_u32( disabled_time )
    packet:w_u32( start_time_shift )
    packet:w_float( offline_interactive_radius )
    packet:w_u16( artefact_spawn_count )
    packet:w_s32( artefact_position_offset )
    packet:w_u8( last_spawn_time )

    packet:r_seek( 2 )
    sobj:STATE_Read( packet, packet:w_tell() )
  return sobj
end

С помощью news_message проверил - ф-ция remove_taken_af вызывается из on_item_take.
  Злобная реклама
Четверг, 05.10.2017, 22:27
Статус:
Сообщений: 666
Регистрация: 09.08.2015
Поиск: