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

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


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

PazDim,

Эти параметы точно нельзя изменить с помощью другой программы?

Насколько помню - нет

Главное ведь чтоб удобнее было? И каждый сам решает, что для него удобнее

Это да ,но...

И еще вопрос: аномалии спавнятся так-же как и обычные объекты? Я имею ввиду спавн функцией create().

Нет,тут надо нет-пакеты разбирать\собирать :)...В любом моде где есть динамические аномалии смотрите :)

Серый Волк,

Конфигом никак - скрипты "наше всё".

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

PazDim,

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

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

 

 

 

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

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

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

 

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

Серый Волк, Писать надо кодов много :)

 

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

PazDim, 2010 студия работает на отличненько,как вышла юзаю :)

 

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

PazDim, про анамалии - да, но им надо дополнительно дописывать нет-пакет.

 

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

PazDim, И ты уж извини, вирт машина может и мобильнее, да уж точно медленнее.

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

Насчет вирт машины - это зависит от физического компа. У меня двух-ядерный проц(по 2.6 Ггц) и 2 Гб оперативы. Виртуальной дал одно ядро и один гиг. Для ХР больше чем полагается. Зато когда нодоест - можно смело жать красную кнопку и не ждать завершения работы :). А что такое нет-пакеты, я просто не знаю(тему еще не всю прочитал - каюсь, уж слишком много материала)

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

http://stalkerin.gameru.net/wiki/index.php...B2_%D0%97%D0%9F

 

Посмотри: пример спавна аномалии(не знаю, не пробовал менять имя объекта). Указываешь координаты и аномалия спавнится(в данном случае - "тополиный пух")

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

Привет братки! Подскажите где ковырнуть Кордана? Инструмент взял а обгрейдить не хочет (ARS 0.5.2)

На форуме ARS темы висят с января, на АМК тема закрыта. Все пролистал но такой байды не у кого небыло.

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

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

придется использовать СДК, вчастности Актор-эдитор - создавать

каркасы моделей (ogf-файлы), затем описывать это в конфигах, как новые

обьекты типа холодильнеиков, телевизоров, дизель-генераторов и т.п.

А затем уж пихать в олл.спавн. Правда не представляю, как они будут смотреться.

Если тебе попадался мод "Прибой" для ТЧ - там спавнилить отдельные здания, ветряки

именно через олл.спавн. Но освещение этих обьектов выдавало их инородность.

 

Еще забыл сказать - прежде всего придется в каком-ни-будь 3-д редакторе создавать

хоть одну кость, дабы назначить вес модели.

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

Народ, хорош тупить. Уже сколько раз выкладывали срипт пакета аномалий, еще Шокер со времен выхода ЧН.

 

Вариант без таймингов(время работы, неработы). Готовый спавн аномалий на Затоне в количестве 150 штук

 

function spawn_zaton_anomalies(zaton_anomalies_sect)
  for i=1,150 do
local anomalies = {"zone_mine_acidic_weak","zone_mine_acidic_average","zone_mine_acidic_strong",
"zone_mine_acidic_big","zone_mine_chemical_weak","zone_mine_chemical_average","zone_mine_chemical_strong",
"zone_buzz_weak","zone_buzz_average","zone_buzz_strong","zone_mine_electric_weak","zone_mine_electric_average",
"zone_mine_electric_strong","zone_witches_galantine_weak","zone_witches_galantine_average","zone_witches_galantine_strong",
"zone_mine_gravitational_average","zone_mine_gravitational_weak","zone_mine_gravitational_big","zone_gravi_zone",
"zone_mine_thermal_weak","zone_mine_thermal_average","zone_mine_thermal_strong","zone_mine_steam_weak",
"zone_mine_steam_average","zone_mine_steam_strong","zone_zharka_static_weak","zone_zharka_static_average",
"zone_zharka_static_strong"}
local zaton_anomalies_sect  = anomalies[math.random(#anomalies)]
   z_anom(zaton_anomalies_sect)
  end
end
function z_anom(zaton_anomalies_sectt)
  lv_new = math.random(1700000)       
  pos_new = level.vertex_position(lv_new)
  create_anomalies(zaton_anomalies_sectt,3,pos_new.x,pos_new.y,pos_new.z,lv_new,0)
end
function create_anomalies(section,rad_anom,x,y,z,lv,gv,mode)
      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)
   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())
   return p_obj
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    
        



section -секция аномалии из конфига
rad_anom - радиус аномалии(3 -норма)
x - перваяя координата х
y - вторая координата у
z - третья координата z
lv - левел-вертекс
gv - гейм-вертекс
mode - если используете поля, то нужно писать "filed" , если обычные аномалии то nil
time1 - время работы в милисекундах (1 секунда -1000 мили)
time2 - время неработы (1 секунда -1000 мили)
если постоянно, то в обоих ставте nil

 

 

ЗЫ. Если вы еще спросите "куда ето вставить" - забейте. Идите правте вес.... бронежелетов.

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

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

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

Прошу извинить меня за тупой и, впрочем, ненужный вопрос, но зачем в СДК создавать дополнительный виртуальный диск? все ведь и так работает(я имею ввиду редактирование музыки)

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

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

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

Жизнь-говно. Бабы -консервы.

Забьюсь под стол, чтоб никто не трогал.

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

Есть функции для преобразовывания вертексов в координаты и обратно? Очень нужно

 

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

И еще вопрос: вот создал я зону "zone_field_radioactive". Визуальный эффект есть(темнеет в глазах, счетчик гейгера трещит), но сама радиация не прибавляется. Как это исправить? Заранее спасибо

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

ui hud menu , только точно не погмню, а так все файлы связанные с худом лежат в U:\Program Files\X-Ray_SDK\level_editor\gamedata\config\ui

и все что начинается с ui и отвечает за худ

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

Жизнь-говно. Бабы -консервы.

Забьюсь под стол, чтоб никто не трогал.

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

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

P.S. - ну можете что-нибудь посоветовать по зоне радиоктивности?

создал я зону "zone_field_radioactive". Визуальный эффект есть(темнеет в глазах, счетчик гейгера трещит), но сама радиация не прибавляется. Пробовал с другими полями(пси, термо, кислота) - только визуал. Как это исправить? Заранее спасибо

 

 

Ссылка на комментарий
PazDim, Спавнить аномалии надо пакетом, а не обычным креатом... Изменено пользователем Vano_Santuri

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

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

Вот функция:

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

local sobj=alife():create(zone_name,pos,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 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 init_data~=nil then

custom_data=init_data

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=zone_radius

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)

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

return sobj

end

 

Пробовал спавнить аномалии(электра, газировка...) - все работает. Жизни отнимаются... разве что на свароге не отображаются. А вот радиоактивные, пси и другие поля не работают(есть только визуал)

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

PazDim, ты сам обрезал скрипт? Я давал на предыдущей странице, и кстати там был параметр mode, так вот, если ты спавнишь поля, в том числе и радиацию, то необходимо указывать mode = "field" при спавне каждого поля(куда ты пишешь координаты и верстексы).

ЗЫ. Используй тот, что я дал с этим параметром.

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

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

Мне его дал Shredder, вроде-бы вытащил из SGM-мода(вроде так называется), щас попробую твой(просто вроде бы пробовал - не получалось. Насчет параметра mode - если хочу заспавнить обычную аномалию, то его вообще не указывать? Или инициализировать nil-ом?

И еще вопрос: Спавнил аномалии на затоне. Алгоритм дал Shredder:

function respawn()

local level_vertexes={

zaton = 1844793,

jupiter = 1422445,

pripyat = 477061

}

 

local game_vertexes={

zaton = {0,316},

jupiter = {317,665},

pripyat = {666,856}

}

 

local lname= "jupiter"

local gvn,gvx,lvx = game_vertexes[lname][1], game_vertexes[lname][2], level_vertexes[lname]

for i=1,1000 do

new_lv = math.random(1,lvx)

local pos = level.vertex_position(new_lv)

local new_gv = 0

local min_dist = 100000

for a = gvn, gvx do

g1 = game_graph():vertex(a):game_point()

if g1:distance_to(pos)<min_dist then

min_dist = g1:distance_to(pos)

new_gv = a

end

end

alife():create("wpn_ak74",pos,new_lv,new_gv)

pos = level.vertex_position(new_lv)

create_anomaly("zone_mine_electric",1,new_lv,new_gv,pos)

end

 

end

 

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

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

Это я пример приводил.... Показал, что для Затона можно использовать ОДИН ДЛЯ ВСЕХ game vertex , 0 , для юпитера он 317, для Припяти 666.

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

Почему они у тебя висят над землей и под , я не знаю.

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

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

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

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

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

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

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

Войти

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

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

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