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

[CoP] Ковыряемся в файлах


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

 

 

Если конкретно- есть авианосец,на него хочу поставить что-то для движения.Правильного,с взлетами и посадками.
  :mellow: Ну написать попробовать можно логику, на примере логики вертолета. 

Оц тоц перевертоц, бабушка здорова,
Оц тоц перевертоц кушает компот.
Оц тоц перевертоц и мечтает снова
Оц тоц перевертоц пережить налет!

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

Смотрю в каждом втором моде динамические аномалии реализованы, а отдельно нигде не найти. Из ARS мода взял скрипт level_anomaly.script, но как его запустить? В bind_stalker.script и остальных скриптах (которые упоминаются в level_anomaly.script) прописал, как и в ARS моде , но при загрузке вылетает.


Может кто нибудь подскажет как сделать динамические аномалии с этим скриптом или другой способ?


Пробовал еще скрипт из OGSM, все работает, но не так как нужно. Все аномалии рандомно по карте раскидываются, а надо, чтобы старые аномалии на месте оставались.


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

@e1_nin0, повторюсь с ответом: посмотри другие скрипты, откуда вызывается скрипт с дин. аномалиями. Не которые прописаны в нем, а остальные внешние, например xr_motivator, или другие скрипты от мода. И посмотреть надо что в логе пишет при вылете, это поможет направить в нужное русло.

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

Просмотрел все скрипты, дин. аномалии вызываются из bind_stalker, остальные вызовы дин. аномалий используются для вызова других скриптов, которые мне не нужны. В level_anomaly используются скрипты ars, ars_mod, se_zones, xrs_utils. Оставил в них только нужные мне функции. В se_zones закоментировал ссылки на ненужный скрипт zone_mgr. Вписал в surge_manager нужные строки с вызовом менеджера аномалий из level_anomaly и в bind_stalker как в ARS модепрописал менеджер аномалий и в update(delta) обновление этого менеджера.

В итоге все равно вылет при загрузке. Пробовал редактировать _g.script , вписал туда новый новый класс аномалий и функцию. Ничего не выходит.

 

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

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

Или используя скрипт dexxxа

 

function dinamic_anomalis()

for k=1, 65535 do

obj = level.object_by_id(k)

if obj ~= nil then

if IsAnom(obj)==true then

lv_id=obj:level_vertex_id()

gv_id=obj:game_vertex_id()

local lv_new

local pos_new = vector()

local n_obj

lv_new = math.random(1571597)

pos_new = level.vertex_position(lv_new)

if string.find(obj:section(), "zone_mine_gravitational") or

string.find(obj:section(), "_field_") or

string.find(obj:section(), "zone_radioactive") then

n_obj = create_anom(obj:section(),3,pos_new.x,pos_new.y,pos_new.z,lv_new, gv_id,"field")

else

n_obj = create_anom(obj:section(),3,pos_new.x,pos_new.y,pos_new.z,lv_new, gv_id)

end

remove_item(obj)

 

end

end

end

 

end

 

 

Если убрать удаление аномалий remove_item(obj), то старые аномалии останутся на месте, а новые будут размножаться.

Можно ли как то сделать, чтобы спустя какой то период аномалии, созданные скриптом удалялись?

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

@e1_nin0, динамические аномалии создать на ЗП не проблема, т.е сам модуль, который будет спавнить по выбросу новые на локах, удаляя старые, учитывая сейф-зоны и другие плюшки. Проблемы начинаются в удалении аномалий. Т.е. объект аномалии нельзя просто удалить функцией release(), через несколько циклов спавна-удаления начинаются движковые вылеты без лога. Это связано с тем, что нужно чистить рестрикторы НПС перед удалением. А как это делать... уже второй вопрос, тут лучше к опытным скриптерам обратиться.

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

Ясно, спасибо за ответ.

А можно создать псевдодинамические аномалии с таймерами, например по 30 минут реального времени. Чтобы каждая аномалия имела свой таймер запуска и спящего режима. Т.о. имитировать динамику.

Или создать например 10 паков по 100 аномалий и каждый выброс рандомно выбирать какой из паков выберется. Это реально сделать или можно не заморачиваться?

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

Ну собственно по такому принципу работают аномальные поля (зоны) в ЗП. Там в конфигах зон посмотри - есть несколько слоев (уровней), которые рандомно включаются после выброса. Можно сделать глобальную аномальную зону на всю локу по такому принципу.

Только будет одна проблема, перечеркивающая эту идею: при уходе-заходе на локацию на местах аномалий будут отыгрываться партиклы, а сами аномалии реагировать на ГГ не будут. Это проверено.

 

Так что лучше все-таки найти скриптера, который напишет нормальные дин. аномалии.

  • Спасибо 1
Ссылка на комментарий

В общем подправил немного скрипт dexxxа. Теперь при первом посещении по локации рандомно спавнятся аномалии. Старые аномалии не затрагиваются, скрипт копирует имеющиеся аномалии на карте и разбрасывает эти копии по карте.

Вот основная функция:

 

function dinamic_anomalis()

   if level.name() == "zaton" then
      not has_alife_info("zaton_dinamic_anomalis_done") then 
      for k=1, 65535 do
      obj = level.object_by_id(k)
         if obj ~= nil then
            if IsAnom(obj)==true  then  
      lv_id=obj:level_vertex_id()
      gv_id=obj:game_vertex_id()
               local lv_new
               local pos_new = vector()
               local n_obj
               lv_new = math.random(1571597)              
      pos_new = level.vertex_position(lv_new)  
               if string.find(obj:section(), "zone_mine_gravitational") or
                  string.find(obj:section(), "zone_mine_acidic") or
                  string.find(obj:section(), "zone_mine_electric") or
                  string.find(obj:section(), "mine_thermal") or
                  string.find(obj:section(), "_field_") then 
                  n_obj = create_anom(obj:section(),3,pos_new.x,pos_new.y,pos_new.z,lv_new, gv_id,"field")   
               else
                  n_obj = create_anom(obj:section(),3,pos_new.x,pos_new.y,pos_new.z,lv_new, gv_id)     
               end
            end
         end
      end
   db.actor:give_info_portion("zaton_dinamic_anomalis_done")
   elseif level.name() == "jupiter" then
   not has_alife_info("jupiter_dinamic_anomalis_done") then 
      for k=1, 65535 do
      obj = level.object_by_id(k)
         if obj ~= nil then
            if IsAnom(obj)==true  then  
      lv_id=obj:level_vertex_id()
      gv_id=obj:game_vertex_id()
               local lv_new
               local pos_new = vector()
               local n_obj
               lv_new = math.random(1571597)              
      pos_new = level.vertex_position(lv_new)  
               if string.find(obj:section(), "zone_mine_gravitational") or
                  string.find(obj:section(), "zone_mine_acidic") or
                  string.find(obj:section(), "zone_mine_electric") or
                  string.find(obj:section(), "mine_thermal") or
                  string.find(obj:section(), "_field_") then 
                  n_obj = create_anom(obj:section(),3,pos_new.x,pos_new.y,pos_new.z,lv_new, gv_id,"field")   
               else
                  n_obj = create_anom(obj:section(),3,pos_new.x,pos_new.y,pos_new.z,lv_new, gv_id)     
               end
            end
         end
      end
   db.actor:give_info_portion("jupiter_dinamic_anomalis_done")
   elseif level.name() == "pripyat" then
   not has_alife_info("pripyat_dinamic_anomalis_done") then 
      for k=1, 65535 do
      obj = level.object_by_id(k)
         if obj ~= nil then
            if IsAnom(obj)==true  then  
      lv_id=obj:level_vertex_id()
      gv_id=obj:game_vertex_id()
               local lv_new
               local pos_new = vector()
               local n_obj
               lv_new = math.random(1571597)              
      pos_new = level.vertex_position(lv_new)  
               if string.find(obj:section(), "zone_mine_gravitational") or
                  string.find(obj:section(), "zone_mine_acidic") or
                  string.find(obj:section(), "zone_mine_electric") or
                  string.find(obj:section(), "mine_thermal") or
                  string.find(obj:section(), "_field_") then 
                  n_obj = create_anom(obj:section(),3,pos_new.x,pos_new.y,pos_new.z,lv_new, gv_id,"field")   
               else
                  n_obj = create_anom(obj:section(),3,pos_new.x,pos_new.y,pos_new.z,lv_new, gv_id)     
               end
            end
         end
      end
   db.actor:give_info_portion("pripyat_dinamic_anomalis_done")
   end

end

 

Доп. функции:

 

function IsAnom (obj) 

local s = obj:section() 
    if string.find(s, "zone_mine_gravitational_strong") or
       string.find(s, "zone_mine_gravitational_average") or
       string.find(s, "zone_mine_acidic") or
       string.find(s, "zone_mine_thermal_strong") or
       string.find(s, "zone_mine_electric") then
       return true
       else
       return false
    end
end
  
  
function create_anom(section,rad_anom,x,y,z,lv,gv,mode,time1,time2)
      
      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()
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)
if time1 ~= nil then
packet:w_s32(time1)
else
packet:w_s32(on_off_mode_enabled_time)
end
if time2 ~= nil then
packet:w_s32(time2)
else      
packet:w_s32(on_off_mode_disabled_time)
end
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)
     else
     end
p_obj:STATE_Read(packet, packet:w_tell()-packet:r_tell())
 
return p_obj

end

 

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


Устранил ошибке в скрипте. 

 

function dinamic_anomalis()

   if level.name() == "zaton" then
      if not has_alife_info("zaton_dinamic_anomalis_done") then 
         for k=1, 65535 do
         obj = level.object_by_id(k)
            if obj ~= nil then
               if IsAnom(obj)==true  then  
         lv_id=obj:level_vertex_id()
         gv_id=obj:game_vertex_id()
                  local lv_new
                  local pos_new = vector()
                  local n_obj
                  lv_new = math.random(1571597)              
         pos_new = level.vertex_position(lv_new)  
                  if string.find(obj:section(), "zone_mine_gravitational") or
                     string.find(obj:section(), "zone_mine_acidic") or
                     string.find(obj:section(), "zone_mine_electric") or
                     string.find(obj:section(), "zone_mine_thermal") or
                     string.find(obj:section(), "_field_") then 
                     n_obj = create_anom(obj:section(),3,pos_new.x,pos_new.y,pos_new.z,lv_new, gv_id,"field")   
                  else
                     n_obj = create_anom(obj:section(),3,pos_new.x,pos_new.y,pos_new.z,lv_new, gv_id)     
                  end
               end
            end
         db.actor:give_info_portion("zaton_dinamic_anomalis_done")
         end
      end
   elseif level.name() == "jupiter" then
      if not has_alife_info("jupiter_dinamic_anomalis_done") then 
         for k=1, 65535 do
         obj = level.object_by_id(k)
            if obj ~= nil then
               if IsAnom(obj)==true  then  
         lv_id=obj:level_vertex_id()
         gv_id=obj:game_vertex_id()
                  local lv_new
                  local pos_new = vector()
                  local n_obj
                  lv_new = math.random(1571597)              
         pos_new = level.vertex_position(lv_new)  
                  if string.find(obj:section(), "zone_mine_gravitational") or
                     string.find(obj:section(), "zone_mine_acidic") or
                     string.find(obj:section(), "zone_mine_electric") or
                     string.find(obj:section(), "zone_mine_thermal") or
                     string.find(obj:section(), "_field_") then 
                     n_obj = create_anom(obj:section(),3,pos_new.x,pos_new.y,pos_new.z,lv_new, gv_id,"field")   
                  else
                     n_obj = create_anom(obj:section(),3,pos_new.x,pos_new.y,pos_new.z,lv_new, gv_id)     
                  end
               end
            end
         db.actor:give_info_portion("jupiter_dinamic_anomalis_done")
         end
      end
   elseif level.name() == "pripyat" then
      if not has_alife_info("pripyat_dinamic_anomalis_done") then 
         for k=1, 65535 do
         obj = level.object_by_id(k)
            if obj ~= nil then
               if IsAnom(obj)==true  then  
         lv_id=obj:level_vertex_id()
         gv_id=obj:game_vertex_id()
                  local lv_new
                  local pos_new = vector()
                  local n_obj
                  lv_new = math.random(1571597)              
         pos_new = level.vertex_position(lv_new)  
                  if string.find(obj:section(), "zone_mine_gravitational") or
                     string.find(obj:section(), "zone_mine_acidic") or
                     string.find(obj:section(), "zone_mine_electric") or
                     string.find(obj:section(), "zone_mine_thermal") or
                     string.find(obj:section(), "_field_") then 
                     n_obj = create_anom(obj:section(),3,pos_new.x,pos_new.y,pos_new.z,lv_new, gv_id,"field")   
                  else
                     n_obj = create_anom(obj:section(),3,pos_new.x,pos_new.y,pos_new.z,lv_new, gv_id)     
                  end
               end
            end
         db.actor:give_info_portion("pripyat_dinamic_anomalis_done")
         end
      end
   end
end
 
function IsAnom (obj) 
local s = obj:section() 
    if string.find(s, "zone_mine_gravitational_strong") or
       string.find(s, "zone_mine_gravitational_average") or
       string.find(s, "zone_mine_acidic") or
       string.find(s, "zone_mine_thermal_strong") or
       string.find(s, "zone_mine_electric") then
       return true
    else
       return false
    end
end
  
  
function create_anom(section,rad_anom,x,y,z,lv,gv,mode,time1,time2)
      
      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()
 
 
 
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)
 
if time1 ~= nil then
packet:w_s32(time1)
else
packet:w_s32(on_off_mode_enabled_time)
end
 
if time2 ~= nil then
packet:w_s32(time2)
else      
packet:w_s32(on_off_mode_disabled_time)
end
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)
     else
     end
 
p_obj:STATE_Read(packet, packet:w_tell()-packet:r_tell())
  
 
 
return p_obj
end
 
 
-- Вывод инфы в консоль
function con(msg)
get_console():execute(msg)
end
 
 
-- Записываем переменную
function save(variable_name, value)
xr_logic.pstor_store(db.actor, variable_name, value)
end
 
-- Загружаем переменную
function load(variable_name, value_if_not_found)
return xr_logic.pstor_retrieve(db.actor, variable_name, value_if_not_found)
end
 
-- Удаляем переменную
function del(variable_name)
if db.storage[db.actor:id()].pstor[variable_name] then
db.storage[db.actor:id()].pstor[variable_name] = nil
end

end

 

Но все равно вылет при загрузке получаю.

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

 

 

Но все равно вылет при загрузке получаю.

Лог то покажешь все-таки?)

Ссылка на комментарий
Expression    : !m_error_code
Function      : raii_guard::~raii_guard
File          : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp
Line          : 748
Description   : ...call of pripyat\gamedata\scripts\bind_stalker.script:71: attempt to index global 'dinamic_anomalies' (a nil value)

в bind_stalker функцию добавил

function actor_binder:update(delta)

...

        dinamic_anomalies.dinamic_anomalis()
 
end
Что не так?
Скрипт с дин. аномалиями так и называется dinamic_anomalies.script

А где найти инфопоршни рестрикторов на входе и выходе из локаций?

Изменено пользователем e1_nin0
  • Нравится 1
Ссылка на комментарий

Нашел ошибку, были незакомментированы лишние строки  :facepalm:

Переписал немного и добавил в update(delta)

 

 

        -- Начало спавна аномалий
        if (not has_alife_info("zaton_random_anomalies_done") and level.name() =="zaton") then
        random_anomalies.zaton_random_anomalies()
        give_info("zaton_random_anomalies_done")
        end
 
        if (not has_alife_info("jupiter_random_anomalies_done") and level.name() == "jupiter") then
        random_anomalies.jupiter_random_anomalies()
        give_info("jupiter_random_anomalies_done")
        end
 
        if (not has_alife_info("pripyat_random_anomalies_done") and level.name() == "pripyat") then
        random_anomalies.pripyat_random_anomalies()
        give_info("pripyat_random_anomalies_done")
        end
        -- Конец спавна аномалий

Сам скрипт

function zaton_random_anomalies()
   for k=1, 65535 do
obj = level.object_by_id(k)
      if obj ~= nil then
         if IsAnom(obj)==true  then  
   lv_id=obj:level_vertex_id()
   gv_id=obj:game_vertex_id()
            local lv_new
            local pos_new = vector()
   local n_obj
            lv_new = math.random(1571597)              
            pos_new = level.vertex_position(lv_new)  
            if string.find(obj:section(), "zone_mine_gravitational") or
               string.find(obj:section(), "zone_mine_thermal") or
               string.find(obj:section(), "zone_mine_electric") or
               string.find(obj:section(), "zone_mine_acidic") or
               string.find(obj:section(), "_field_") then
               n_obj = create_anom(obj:section(),3,pos_new.x,pos_new.y,pos_new.z,lv_new, gv_id,"field")   
            else
               n_obj = create_anom(obj:section(),3,pos_new.x,pos_new.y,pos_new.z,lv_new, gv_id)     
            end
         end
      end
   end
end
 
function jupiter_random_anomalies()
   for k=1, 65535 do
obj = level.object_by_id(k)
      if obj ~= nil then
         if IsAnom(obj)==true  then  
   lv_id=obj:level_vertex_id()
   gv_id=obj:game_vertex_id()
            local lv_new
            local pos_new = vector()
            local n_obj
            lv_new = math.random(1571597)
            pos_new = level.vertex_position(lv_new)  
            if string.find(obj:section(), "zone_mine_gravitational") or
               string.find(obj:section(), "zone_mine_thermal") or
               string.find(obj:section(), "zone_mine_electric") or
               string.find(obj:section(), "zone_mine_acidic") or
               string.find(obj:section(), "_field_") then 
               n_obj = create_anom(obj:section(),3,pos_new.x,pos_new.y,pos_new.z,lv_new, gv_id,"field")   
            else
               n_obj = create_anom(obj:section(),3,pos_new.x,pos_new.y,pos_new.z,lv_new, gv_id)     
            end
         end
      end
   end
end
 
function pripyat_random_anomalies()
   for k=1, 65535 do
obj = level.object_by_id(k)
      if obj ~= nil then
         if IsAnom(obj)==true  then  
   lv_id=obj:level_vertex_id()
   gv_id=obj:game_vertex_id()
            local lv_new
            local pos_new = vector()
            local n_obj
            lv_new = math.random(1571597)              
            pos_new = level.vertex_position(lv_new)  
            if string.find(obj:section(), "zone_mine_gravitational") or
               string.find(obj:section(), "zone_mine_thermal") or
               string.find(obj:section(), "zone_mine_electric") or
               string.find(obj:section(), "zone_mine_acidic") or
               string.find(obj:section(), "_field_") then 
               n_obj = create_anom(obj:section(),3,pos_new.x,pos_new.y,pos_new.z,lv_new, gv_id,"field")   
            else
               n_obj = create_anom(obj:section(),3,pos_new.x,pos_new.y,pos_new.z,lv_new, gv_id)     
            end
         end
      end
   end
end
 
function IsAnom (obj) 
local s = obj:section() 
    if string.find(s, "zone_mine_gravitational") or
       string.find(s, "zone_mine_acidic") or
       string.find(s, "zone_mine_thermal") or
       string.find(s, "zone_mine_electric") then
       return true
       else
       return false
    end
end
 
function create_anom(section,rad_anom,x,y,z,lv,gv,mode,time1,time2)
      
      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()
 
 
 
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)
 
if time1 ~= nil then
packet:w_s32(time1)
else
packet:w_s32(on_off_mode_enabled_time)
end
 
if time2 ~= nil then
packet:w_s32(time2)
else      
packet:w_s32(on_off_mode_disabled_time)
end
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)
     else
     end
 
p_obj:STATE_Read(packet, packet:w_tell()-packet:r_tell())
  
 
 
return p_obj
end
 
 
-- Вывод инфы в консоль
function con(msg)
get_console():execute(msg)
end
 
 
-- Записываем переменную
function save(variable_name, value)
xr_logic.pstor_store(db.actor, variable_name, value)
end
 
-- Загружаем переменную
function load(variable_name, value_if_not_found)
return xr_logic.pstor_retrieve(db.actor, variable_name, value_if_not_found)
end
 
-- Удаляем переменную
function del(variable_name)
if db.storage[db.actor:id()].pstor[variable_name] then
db.storage[db.actor:id()].pstor[variable_name] = nil
end
end

Теперь все работает.
_____________________________________________________________________________________________________

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

Изменено пользователем e1_nin0
  • Нравится 2
Ссылка на комментарий

 

 

А может мне кто нибудь объяснить, зачем создавать файл с новыми инфопоршнями и прописывать его в system.ltx, если и без него эти новые инфопоршни нормально выдаются и убираются?
Чтоб не путаться, у меня вот в моде 11 локаций и 11 файлов с инфопоршнями, 11 файлов с персами, 11 файлов с квестами и тд. 
  • Нравится 1

Оц тоц перевертоц, бабушка здорова,
Оц тоц перевертоц кушает компот.
Оц тоц перевертоц и мечтает снова
Оц тоц перевертоц пережить налет!

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

 

 

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

В ЗП не нужно это делать. Движку вообще "по барабану" прописаны поршни или нет.

  • Нравится 2
Ссылка на комментарий

Решил поковырять ЗП. Создал, значит, непися, сделал ему диалог, а он наотрез отказывается говорить. При попытке начать разговор: "Все вопросы к главному"...

Ранее был известен под ником BoBaH_671.

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

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

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

@BoBaH_671,

удали у непися общеигровые диалоги типа: #include "gameplay\character_dialogs.xml"

вставь свой диалог как стартовый:    

</supplies>
  <start_dialog>твоё_название</start_dialog>

 

@dukekan, практически все текстуры считываются при загрузке игры, кроме малого исключения прямого обращения от движка.

  • Спасибо 1
Ссылка на комментарий

@dukekan, практически все текстуры считываются при загрузке игры, кроме малого исключения прямого обращения от движка.

 

А какие всё-таки исключения? Вроде, даже хотя xml хотя считывается каждый раз заново, для гуи, текстура загружается только в первый раз.

И ещё, видел уже давненько наработку по динамической смене текстуры прицела, вот пример:

Наверняка такое можно сделать в движке, но есть ли ещё какие способы? Кто-нибудь знает, как это реализовано?

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

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

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

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

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

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

Войти

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

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

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