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

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


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

А не подскажете, как вывести на худ вместимость инвентаря?

И как изменить прозрачность карты на худе?

 

Насчёт первого не очень ясно, вес? объём? Насчёт 2-го открываешь текстуры худа через фотошоп на катором установлен плагин nVidea и в каналах меняешь альфа-канал. Белый видно, чёрный-нет, значит серый прозрачный))) Всё зависит от яркости Чем белее тем виднее.

ЯДиск папка с крутым схроном!

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

text = string.format("%s %s %s %s %s.%s.", obj_name, verb, adjective, substantive, str, habar)

 

Вылетает на охранении 50-го мессиджа

Не могу понять почему меня не срабатывает проверка

Стоит проверка на запас в 180 байт. Потом пишутся все данные функцией taynik_rnd.message_save. Ты бы привёл её код, а то так не понять. Что за число 180? Какое отношение имеет к записываемым данным? Где твои 45-50 сообщений?

 

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

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

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

 

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

Ребят! недавно спрашивал как можно уменьшить кол-во монстров или убрать их совсем...подсказали что можно изменить время бодрствования монстров...я изменил в основном на ночное время...но НЕРАБОТАЕТ! как появлялись днем так и лезут...подскажите как их убрать или уменьшить количество...

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

malandrinus

насчет string.format понял - все просто :ny_ph34r_1:

спасибо. я пробелы поставить не додумался между "%s и %s - и у меня все слитно выходило.

 

function message_save(p)
local size= 0
size = table_maxn(message) --получим кол-во строковых ключей в таблице первого уровня  
p:w_u8(size) --запомним их кол-во
for k, v in pairs(message) do
p:w_stringZ(k)   --запомним имена строковых ключей
size= 0
size = table_maxn(v) --запомним кол-во ключей в таблицах второго уровня
p:w_u8(size)   --запишем кол-во целочисленных ключей в этих таблицах
--теперь проитерируем  сразу таблицы третьего уровня  - где ключи - числа,  а значения таблицы
for  index, tab in ipairs(v) do   
p:w_stringZ(tab.text_id) --запишем значение первого ключа
p:w_u16(tab.id)  --запишем значение второго ключа
end
end
end

table_maxn(tbl) - это моя функция которая возвращает кол-во ключей таблицы - использую в основном для строковых ключей(хотя годится и для целочисленных) - почему то разработчик LUA не позаботился о такой мелочи - вот и приходится строковые считать через отдельную функцию.

 

 

180 байт это типа примерный максимум который будет записан - то есть длина одного мессиджа + ключи таблицы.

вот я и проверяю - если 180 байт+ то что уже есть (packet:w_tell() возвращает ведь текущую позицию записи - то есть байт на котором остановилась последняя запись) меньше размера пакета то пишем. Иначе - нет.

 

Но сейчас понял что это как то не то -- надо получать точный размер того что придется записать - буду исправлять.

 

ЗЫ: вопрос не по теме - как подключать в SCITE библиотеку классов?

вроде require (classlib") - только куда это вписать и надо ли модуль создавать...и саму библиотечку куда лучше положить.

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

Labus насчёт 1-го это работа в скриптах, в них я полный 0. Так что спроси у скриптера. Насчёт второго знаю что в папке config\ui в некоторых файлах есть свойства r="225" g="225" b="250" a="255", наверное но врать не буду точно не знаю, что a="255" это альфа, значение 0 полностью прозрачно, 255 не прозрачно. Если в этих файлах есть путь к map то можешь попробовать исправить, ну или план Б, берёшь текстуры карт Зоны и везде альфа высветляешь.

ЯДиск папка с крутым схроном!

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

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

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

Garry_Galler,

Но сейчас понял что это как то не то -- надо получать точный размер того что придется записать
Правильно. Ещё вариант, проверять оставшееся место перед каждым оператором записи.

 

вопрос не по теме - как подключать в SCITE библиотеку классов?
вроде require (classlib") - только куда это вписать и надо ли модуль создавать...и саму библиотечку куда лучше положить.

Вписать в начале головного модуля. Библиотеку клади рядом с выполняемым файлом. А что за классы? Luabind же в SCITE недоступен.

 

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

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

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

 

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

malandrinus

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

"Библиотека построения именованных классов. Самая продвинутая реализация классов и практически всех принципов ООП включая виртуальные классы от разработчика LUA."

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

Dimmer, можно попробовать уменьшить количество без редактирования all.spawn. В gamedata\config\scripts\amk есть файлы например escape.ltx открываем и видим:

[esc_rat5]
xyzlg = -38.25,-18.31,-192.03,239633,106
respawn_section = rat_strong
max_count = х
min_spawn = х
max_spawn = х
idle_spawn = 86400
creature_binded_logic = logic\esc_rat5
[esc_fracture]
xyzlg = -247.08001708984,-8.905158996582,-72.884590148926,11439,66
respawn_section = fracture_strong
max_count = x
min_spawn = x
max_spawn = x
idle_spawn = 86400
creature_binded_logic = logic\esc_fracture

 

x - число. Ставим везде единицу, в итоге должен спавнится один монстр. И так открываем каждый файл с названием локи и редактируем каждую секцию.

Изменено пользователем uglan59
Ссылка на комментарий
так как я в этом пока не разбираюсь, то напишу как написано на сайте откуда скачал.
Приведи ссылку плиз.

 

 

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

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

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

 

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

Vano_Santuri, у тебя удалится только тот обьект,что ты передал в функцию.

 

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

И malandrinus тебе уже написал - не пишут так.

пишут так:

 

function remove(obj)

if obj then

alife():release(alife():object(obj:id()), true)

end

return obj~=nil

end

 

и вообще зачем тут return?

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

Ну вот пожалуй пришли к самому главному для меня вопросу, мучаюсь я с ним 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:

 

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

 

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

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

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

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

И еще:

if IsAnom(obj)==true then = if IsAnom(obj) then

 

И вот:

 

if string.find(s, "zone_mine_electric_dinamic") then

return true

else

return false

end

 

то же самоечто и

 

return string.find(s, "zone_mine_electric_dinamic")

 

далее if obj ~= nil then = if obj then

====

 

и важно: пиши local obj = level.object_by_id(k) а не obj = level.object_by_id(k)

 

перепиши все,и попробуй.

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

 

=====

возможно между спавном и удалением не прошел апдейт....

Зачем здесь функция вообще?

Кстати,да.

и тут: function IsAnom (obj)- тоже не нужны она.

Изменено пользователем Monnoroch
Ссылка на комментарий
и вообще зачем тут return?

Зачем здесь функция вообще? release либо удалит либо вылетит, так что что-то там возвращать смысла нет.

 

В С++ даже есть специальная функция strcmp для сравнения именно строк, а не их адресов.
Здесь более уместны аналогии с STL. Там строки - это объекты класса и сравниваются по содержимому.

 

 

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

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

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

 

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

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

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

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

Vano_Santuri, а как ты их спавнишь и удаляешь?

в 1 функции?

должно пройти гдето 1/10 секунды между спавном и удалением.

 

насильно никак.просто подождать.(ну там кода куча,да)

Но в игре у тебя заведомо пройдет не одня тысяча апдейтов - иначе эти анамалии просто не рентабельны :)

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

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

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

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

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

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

Войти

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

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

×
×
  • Создать...