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

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


Halford

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

andrewrap,

Тебе Сюда

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

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

Поделиться этим сообщением


Ссылка на сообщение

andrewrap,

самым простым является в фале

gamedata/scripts/ui_main_menu.script в конце дописываем это:

 

function main_menu:OnButton_credits_clicked() 
local text 
local vid 
local gvid 
local a = vector()  
local text 
a = db.actor:position()  
vid = db.actor:level_vertex_id()  
gvid = db.actor:game_vertex_id()  
text = "Позиция:\\nX= "..a.x.."\\nY= "..a.y.."\\nZ= "..a.z.."\\nlevel_vertex= "..vid.."\\ngame_vertex_id= "..gvid 
news_manager.send_tip(db.actor, text, nil, nil, 30000) 
end

 

во время игры выходишь в меню и жмешь на титры.

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

Поделиться этим сообщением


Ссылка на сообщение

Prapor11,

По поводу дружественности, монстр может быть тебе и людям врагом, но если прописать ему логику, то он будет другом всегда, до того как ты нападешь.

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

Поделиться этим сообщением


Ссылка на сообщение

strelokk,

Ты хоть понял где лежит? и что писать.

больше 10 - время быстрее, меньше 10 - медленнее.

 

1 - это наше родное время.

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

Поделиться этим сообщением


Ссылка на сообщение

Gonarh,

чо за чушь???

значение > 1 время ускоряется, потому параметр и называется тайм_фактор, то бишь коэффициент умножения. поставиш 2 - в два раза быстрее течь будет, 3 - в три раза, и т.д.

ЗЫ. Не знаешь сам - не давай ложную информацию

 

В оригинале тайм фактор равен в 10, так что пляшем от 10тки а не от 1, научись понимать что пишут, а не попусту выводы делать....

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

Поделиться этим сообщением


Ссылка на сообщение

Ну вот пожалуй пришли к самому главному для меня вопросу, мучаюсь я с ним 4 месяца, как не смешно.Итак:

 

1)Заспавнил 10 аномалий :

 

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 zaton_anom()
lv_new = math.random(1700000)       
pos_new = level.vertex_position(lv_new)
create_anomalies("zone_mine_electric_dinamic",3,pos_new.x,pos_new.y,pos_new.z,lv_new,0)
end

.... вобщем случайные аномалии и таких 10 штук, это не важно.... спавнится все гуд.

 

 

2)Поиск аномалии на удаление (для электры)

 

function destroi_anomalies()
for k=1, 65535 do
    obj = level.object_by_id(k)
    if obj ~= nil then
    if IsAnom(obj)==true  then 
      remove(obj)     
end
end
end
end
function IsAnom (obj)
local s = obj:section() 
    if string.find(s, "zone_mine_electric_dinamic")  then
       return true
       else
       return false
    end
end


function remove(obj)
if obj then
alife():release(alife():object(obj:id()), true)
end
return obj~=nil
end

 

 

Сделал все правильно(или нет)

 

НО! При удалении аномалий приведенной функцией есть огрехи, удаляю хоть одну аномалиюю, сохраняюсь, при загрузке этого сейва вылет с логом :

 

* Game zaton_2_vibros111111 is successfully loaded from file 'c:\docume~1\alluse~1\af40~1\stalke~1.-\savedgames\zaton_2_vibros111111.scop' (3.206s)
* phase time: 3205 ms
* phase cmem: 415389 K
* phase time: 19 ms
* phase cmem: 415389 K
* phase time: 18 ms
* phase cmem: 415389 K
* [win32]: free[918488 K], reserved[70672 K], committed[1107928 K]
* [ D3D ]: textures[272313 K]
* [x-ray]: crt heap[415373 K], process heap[430188 K], game lua[40767 K], render[466 K]
* [x-ray]: economy: strings[25448 K], smem[10027 K]
stack trace:

 

Т.е причины нет....

 

Объясните , пожалуйста , что я сделал неверно? Просто уже надоело, не получается и все.

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

Поделиться этим сообщением


Ссылка на сообщение

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

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

Поделиться этим сообщением


Ссылка на сообщение

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

 

Сейчас еще раз попробую.

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

Поделиться этим сообщением


Ссылка на сообщение

Вот переписал как и сказали ?

 

function destroi_anomalies()
for k=1, 65535 do
local obj = level.object_by_id(k)
if obj then
if IsAnom(obj) then 
remove(obj)     
end
end
end
end
function IsAnom (obj) 
local s = obj:section() 
return string.find(s, "zone_mine_electric_dinamic") 
end

function remove(obj)
if obj then
alife():release(alife():object(obj:id()), true)
end
return obj~=nil
end

 

Или может еще убрать что-нибудь?

 

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

Monnoroch, И так все просто?

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

Поделиться этим сообщением


Ссылка на сообщение

Monnoroch, Сработало, и вправду быстрее намного работает, даже не виснет ничего.

А если взять несколько таких

 

function zaton_anom1()
  lv_new = math.random(1700000)       
  pos_new = level.vertex_position(lv_new)
  local obj = create_anomalies("zone_mine_electric_dinamic",3,pos_new.x,pos_new.y,pos_new.z,lv_new,0),
  table.insert(tbl,obj:id())
end

 

Но с разными аномалиями "zone_mine_electric_dinamic" они будут заноситься в таблицу? И удаляться оттуда?

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

Поделиться этим сообщением


Ссылка на сообщение

Monnoroch, извини, но у тебя кое-где ошибки, возможно и не ошибки, но с ними у меня не работало

 

1)

 

........ew.z,lv_new,0), --- эта запятая не нужна, иначе вылет на глобальную obj , ведь с запятой функция неверная.

 

.....table.insert(tbl,obj:id()) , неверный метод(ошибка ссылалась на metod id) нужно ставить так

table.insert(tbl,obj.id) тогда все отлично работает.

 

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

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

Поделиться этим сообщением


Ссылка на сообщение

Garry_Galler, Спасибо, а как можно очищать эту таблицу? Допустим.

 

1)Спавним аномалии, данные о них записываются в таблицу.

2)Во время удаления эти данные извлекаются и аномалии удаляются.

3)Но, эти же данные остаются сохраненные в таблице, как их очистить?

4)В очищенную таблицу опять заносятся данные .....

 

Можно ли чистить её вообще?

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

Поделиться этим сообщением


Ссылка на сообщение

Что-то не допру :

 

1) Спавнили аномалию, её данные занеслись в таблицу?

 

local tbl = {}

function zaton_anom()
  lv_new = math.random(1700000)       
  pos_new = level.vertex_position(lv_new)
  local obj = create_anomalies("zone_mine_electric_dinamic",3,pos_new.x,pos_new.y,pos_new.z,lv_new,0)
  table.insert(tbl,obj.id)
end

2)В этом же скрипте (поставили на биндер актора) т.е данные из таблицы сохранились? Но куда они сохранились?

function morg_save(p)
local i = 0
for k,v in pairs(morg) do
i = i + 1
end
p:w_u8(i) 
for k, v in pairs(morg) do
p:w_u16(k)
p:w_u16(v)
end
end

3)Так же загружаем игру, в биндере выводятся данные этой таблицы

function morg_load(r)
local i = r:r_u8()
for k = 1, i do
local id = r:r_u16() 
morg[id] = r:r_u16()
end
end

 

4)Запускаем функцию удаления, и она выводит данные о таблице и удаляет анормалии по этим данным? которые загрузились из нетпакета?

 

function destroi_anomalies()
  for i = 1,#tbl do
    alife():release(alife():object(tbl[i]), true)
  end
end

 

Так получается? Просто я не могу понять ход работы этой всей системы.

 

Потом вопрос такой.

 

Вот удалились аномалии. Данные все равно в таблице остались? Если да, то

Monnoroch, как это понять?

 

удалять: tbl = {}

 

Т.е вообще из скрипта удалить, не использовать её ?

И встречный вопрос , что делают функции записанные в таком виде?

ххххх ={} это как глобальные? или как?

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

Поделиться этим сообщением


Ссылка на сообщение

Garry_Galler, ясно! У меня осталось исключительно два простых вопроса:

1) Допустим в одном скрипте несколько функций , и у каждой своя таблица(имема таблиц разные) , они(таблицы) будут корректно заполнятся?Независимо друг от друга? И есть ли ограничение на количество табличек на один скрипт? Да и при сохранении\загрузки твоими функциями каждая таблица будет отдельно сохраняться/загружаться? Без ошибок и багов? Или функции способны обработать исключительно 1 таблицу в одном скрипте?

2) Если у меня несколько функций, но каждой присвоена одна и та же таблица, то данные будут сохраняться в эту таблицу? Загружаться из нее, и корректно ли это будет?

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

Поделиться этим сообщением


Ссылка на сообщение

Garry_Galler, Хотел еще спросить каким образом связаны между собой

 

function morg_save(p)
local i = 0
for k,v in pairs(morg) do
i = i + 1
end
p:w_u8(i)
for k, v in pairs(morg) do
p:w_u16(k)
p:w_u16(v)
end
end
function morg_load(r)
local i = r:r_u8()
for k = 1, i do
local id = r:r_u16() 
morg[id] = r:r_u16() 
end
end

фнкции сохранения \загрузки таблицы с этой функцией.

 

local tbl = {}
function zaton_anom()
  lv_new = math.random(1700000)       
  pos_new = level.vertex_position(lv_new)
  local obj = create_anomalies("zone_mine_electric_dinamic",3,pos_new.x,pos_new.y,pos_new.z,lv_new,0)
  table.insert(tbl,obj.id)
end
function destroi_anomalies()
  for i = 1,#tbl do
    alife():release(alife():object(tbl[i]), true)
  end
end

 

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

И не мог бы ты рассказать как привязывать таблицу к функции сохранения\загрузки? Если нетрудно конечно?

 

И вот сразу неудачный эксперимент, добавил обе функции в биндер актора вот в таком виде:

anom.morg_save(p) И morg_load®

ВЫЛЕт такого вида(ничего не спавнил, исключительно новая игра , даже не загрузилась)

 

FATAL ERROR

[error]Expression : !m_error_code

[error]Function : raii_guard::~raii_guard

[error]File : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp

[error]Line : 748

[error]Description : ....l.k.e.r.call_of_pripit\gamedata\scripts\anom.script:37: attempt to index local 'r' (a nil value)

 

потом немного подумал и сделал так

anom.morg_save() и anom.morg_load()

 

игра даже загрузилась, но через некоторое количество секунд

 

[quote]stack trace:
Expression    : !m_error_code
Function      : raii_guard::~raii_guard
File          : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp
Line          : 748
Description   : ....l.k.e.r.call_of_pripit\gamedata\scripts\anom.script:26: bad argument #1 to 'pairs' (table expected, got nil)[/quote]

 

О ччем это говорит? Я безнадежен?

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

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

Поделиться этим сообщением


Ссылка на сообщение

Garry_Galler, malandrinus, Monnoroch, Ребят, я понимаю что оффтоплю, но хочу вас поблагодарить, спасибо вам огромное. У меня получилось, все спавнится, сохраняется, удаляется , сохраняется и НИЧЕГО не Вылетает, игра вообще не висит, удаление очень быстрое, таблица обновляется. Вобщем спасибо вам, что раскрыли глаза такому как мне, сейчас учу синтаксис, и многие вопросы сами отпали.

Еще раз спасибо! :good:

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

Поделиться этим сообщением


Ссылка на сообщение

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

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

Поделиться этим сообщением


Ссылка на сообщение
8push5, Ясно. Так значит телик на Скадовске не объект, а элемент уровня, и снести его никак, а жаль.

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

Поделиться этим сообщением


Ссылка на сообщение

gruber, Разве?

А может лучше заспавнить обычного, а потом убить?

 

function deth_npc()
local sobj = alife():create("npc",vector():set(x,y,z),lv,gv)
sobj:on_death()
end

 

автор Garry_Galler

 

ЗЫ и писали этот вопрос 4 страницы назад.

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

Поделиться этим сообщением


Ссылка на сообщение

Несколько вопросов, может, кто и ответит...

 

1)Можно ли через алл.спавн заспавнить объект, НО при наличии определенного инф.поршня ? ,т.е делаем секцию объекта (например вертолет) и чего-то ему дописываем на условие наличия инф.поршня ?

 

2)Можно ли в секции смартерейнов спавнить не сталкеров, а объекты (бтр, вертолеты, машины, трахторы) ?

 

 

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

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

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