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

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


Halford

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

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

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


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

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

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


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

Нож на классе бинокля, это как? В чём его отличие от обычного?

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


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

Всем привет! Может не совсем туда пишу, но кто-нибудь может подсказать какой файл отвечает за смену типа гранат, РГД-5 на Ф-1 с помощью кнопки Y как патроны переключаются например обычные и бронебойные, дело в том что что пытаюсь собрать свой мод и учась по ходу дела, со скриптами пока проблемы, всё что совмещаю сравниваю файлы в программе WinMerge, то что уже собрал работает, но при перемещении гранат на пояс, считаются только те гранаты тип которой в руке, допустим на поясе 5 шт РГД-5 и 5 шт Ф-1, всего 10, но если у ГГ в руке допустим Ф-1 но на счетчике будет 5, а не десять и при этом не переключается тип гранат, подозревают что что-то не так в bind_stalker.script. Понимаю что то что я там намутил, это моих рук дело и косяк мой, но может кто подскажет на примере обычного ТЧ, как работает и где прописывается смена типа гранат. Патроны и гранаты для подствольника у меня работают.

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


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

Подскажите пожалуйста как это можно вылечит?

 

Expression : fatal error
Function : CResourceManager::_GetBlender
File : E:\stalker\sources\trunk\xr_3da\ResourceManager.cpp
Line : 49
Description :
Arguments : Shader 'hud\scope' not found in library.

 


Понимаю что не хватает шейдера вроде, а вот где именно, в самой папке shaders или где-то ещё?

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


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

Такая ошибка возникает после того как я закинул в папку bin файл xrGame.dll из другого мода, посоветовали что так можно реализовать новые слоты, если с правками движка ничего не выходит, в итоге у меня вылет связанный с шейдеров, а вот если я кидаю целую папку bin от мода, то всё запускается, есть новые слоты, но почему-то гранаты перестают переключаться РГД-5 и Ф1, почему-то имея в инвентаре допустим по 5 гранат, всего 10, игра считает только те гранаты, вид которой в руке ГГ, при том что в моде откуда папка bin взята с гранатами всё нормально, в чём может быть причина?

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


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

Если быть точнее то O.G.S.E. 0.6.9.3 Final 1.04


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

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


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

Я извиняюсь) но я пока плохо всё это понимаю, если можно подробнее про этот момент, где эти функции искать :)  

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


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

Кажется нашел файл отвечающий за скриптовое переключение гранат, но при добавлении его в игру ничего не поменялось, как не работало так и не работает, может игра не видит файл, может прописать где-то надо? Посмотрите кто-нибудь пожалуйста, есть тут что-то по переключению или нет, а то я пока в этом не понимаю увы, файл определил по названию ogse_grenade_switcher и то что в нем про гранаты и вроде про клавиши написано, могу ошибаться.

Вот содержание 

 

function attach(sm)
sm:subscribe({signal = "on_key_down", fun = this.on_key_down})
end

local grenades_sequence = {"grenade_f1", "grenade_rgd5", "grenade_light", "grenade_gd-05", "grenade_gas"}
local sect2key = {}
for i,sec in ipairs(grenades_sequence) do sect2key[sec] = i end

function on_key_down(key, bind)
if bind ~= key_bindings.kWPN_NEXT then return end
local act = db.actor
if act:active_slot() ~= 3 then return end
local gren = act:active_item()
if not gren then return end
local gren_sec = gren:section()
local start_pos = sect2key[gren_sec]
ASSERT(start_pos, "ogse_grenade_switcher.on_key_down: unregistered grenade section '"..gren_sec.."'")

for pos = start_pos,start_pos+#grenades_sequence-2 do
local cur_sec = grenades_sequence[math.fmod(pos, #grenades_sequence) + 1]
local gren_new = act:object(cur_sec)
if gren_new then
db.actor:move_to_ruck(gren)
db.actor:move_to_slot_and_activate(gren_new)
return true
end
end
end


 

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


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

Каллбэк на кнопки выглядит таким образом?

 

 

self.object:set_callback(callback_ex.on_mouse_wheel, nil)

 

 

 

Тут как я понимаю колёсико мышки)

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


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

Есть вот такие

 

 

self.object:set_callback(callback_ex.on_key_press, nil)

self.object:set_callback(callback_ex.on_key_press, self.on_key, self)

 

 

И с key_down

 

 

function actor_binder:on_key(key)
ogse_debug.process_actor("key", 1)
ogse.on_key(key, dik_to_bind(key))
ogse_debug.process_actor("key", 0)
self.am:call("on_key_down", key, dik_to_bind(key))
event("key_down"):trigger({key = key, bind = dik_to_bind(key)})
end

 


Сегодня читал разную информацию про скрипты, ну пока мало что понял, буду стараться освоить) а пока в этих кодах не разберусь без помощи)

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


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

Понял, спасибо!  :)  Буду пробовать


Я так понимаю числа вот эти?

 

 

-- коды дополнительных колбеков
callback_ex = {
["on_key_press"] = 123,
["on_key_release"] = 124,
["on_key_hold"] = 125,
["on_mouse_wheel"] = 126,
["on_mouse_move"] = 127,

["on_belt"] = 130,
["on_ruck"] = 131,
["on_slot"] = 132,

["on_inv_box_put_item"] = 151,
["entity_alive_before_hit"] = 152,
["dbg_gg_distance_failed"] = 153,
["update_addons_visibility"] = 154,
["update_hud_addons_visibility"] = 155,
["on_before_use_item"] = 156;

["pda_contact"] = 180,

 

 

 

 

["on_key_press"] = 123,


В OGSE, в net_destroy вот так всё выглядит

 

 

function actor_binder:net_destroy()
if(actor_stats.remove_from_ranking~=nil)then
actor_stats.remove_from_ranking(self.object:id())
end
-- game_stats.shutdown ()
set_extensions_flags(0)
db.del_actor(self.object)

sr_light.clean_up ()

self.object:set_callback(callback.inventory_info, nil)
self.object:set_callback(callback.article_info, nil)
self.object:set_callback(callback.on_item_take, nil)
self.object:set_callback(callback.on_item_drop, nil)
--self.object:set_callback(callback.actor_sleep, nil)
self.object:set_callback(callback.task_state, nil)
self.object:set_callback(callback.level_border_enter, nil)
self.object:set_callback(callback.level_border_exit, nil)
self.object:set_callback(callback.take_item_from_box, nil)
self.object:set_callback(callback.use_object, nil)

self.object:set_callback(callback.on_key_press, nil)
self.object:set_callback(callback.on_key_release, nil)
self.object:set_callback(callback.on_key_hold, nil)
self.object:set_callback(callback.on_mouse_wheel, nil)
self.object:set_callback(callback.on_mouse_move, nil)
self.object:set_callback(callback.on_belt, nil)
self.object:set_callback(callback.on_ruck, nil)
self.object:set_callback(callback.on_slot, nil)
self.object:set_callback(callback.hit, nil)

self.object:set_callback(callback.dbg_gg_distance_failed, nil)

self.object:set_callback(callback.entity_alive_before_hit, nil)
self.object:set_callback(callback.on_before_use_item, nil)

if sr_psy_antenna.psy_antenna then
sr_psy_antenna.psy_antenna:destroy()
sr_psy_antenna.psy_antenna = false
end

xr_sound.stop_all_sound_object()

ogse.on_net_destroy()
self.am:call("on_destroy")
event("actor_destroy"):trigger()
end

 


Мне же всё это не нужно, только строка где self.object:set_callback(callback_ex.on_key_press, nil)?


Видимо я что-то не так сделал, вот что я сделал

 

function actor_binder:net_destroy()
self.object:set_callback(callback_ex.on_key_press, nil)

set_extension_flags(0)

end
----------------------------------------------------------------------------------------------------------------------
function actor_binder:reinit()
self.object:set_callback(callback_ex.on_key_press, self.on_key, self)
end

function actor_binder:on_key(123)
ogse_grenade_switcher.on_key_down(key, dik_to_bind(key))
end

 

 

 

Получил такой вылет

 

 

Expression : fatal error
Function : CScriptEngine::lua_error
File : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp
Line : 73
Description :
Arguments : LUA error: ...А.Л.К.Е.Р. Тень Чернобыля\gamedata\scripts\_g.script:20: bad argument #2 to 'format' (string expected, got no value)

 

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


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

Спасибо! Посмотрю, может разберусь)


Подключать я это хочу к моду, который пытаюсь делать) Реализовать правку движка на новые слоты не удалось, мне посоветовали взять папку bin от OGSE, новы слоты появились, но как оказалось в движке OGSE есть какой-то баг по переключению типа гранат, но в моде есть скрипт, позволяющий имправить эту проблему, вот я пытаюсь найти как мне это сделать

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


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

По поводу удалять или нет, ну тот код который я скинул выше, так вот в моём bind_stalker из чистого ТЧ, такого кода вообще я не видел, тогда я его целиком из OGSE получается копируют и вставляют в свой bind_stalker?

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


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

Сегодня пробовать буду :-) Может не совсем по теме, но где можно найти самые основы написания скриптов как этому научиться, есть статьи для тех кто вообще ничего не знает) или может вообще начать изучение например с Турбо Паскаль?))) Мне один человек это посоветовал, говорит что зная Турбо Паскаль, у меня уже основа для понимания будет)

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


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

Что-то не работает, я думаю может код 123  on_key_press не правильно указан, я его то из OGSE взял, сейчас вспомнил, в чистом ТЧ наверно другой? В OGSE это значение написано в  _g.script, в ТЧ в этом файле нет таких значений , видимо где-то в другом файле, а так вот что у меня получилось

 

 

function actor_binder:net_spawn(data)
set_extensions_flags(16)

printf("actor net spawn")

level.show_indicators()

self.bCheckStart = true
self.weapon_hide = false -- спрятано или нет оружие при разговоре.
weapon_hide = false -- устанавливаем глобальный дефолтовый флаг.

if object_binder.net_spawn(self,data) == false then
return false
end

 

 

function actor_binder:net_destroy()
set_extensions_flags(0)
if(actor_stats.remove_from_ranking~=nil)then
actor_stats.remove_from_ranking(self.object:id())
end
-- game_stats.shutdown ()
db.del_actor(self.object)

sr_light.clean_up ()

self.object:set_callback(123, nil)
self.object:set_callback(callback.inventory_info, nil)
self.object:set_callback(callback.article_info, nil)
self.object:set_callback(callback.on_item_take, nil)
self.object:set_callback(callback.on_item_drop, nil)
--self.object:set_callback(callback.actor_sleep, nil)
self.object:set_callback(callback.task_state, nil)
self.object:set_callback(callback.level_border_enter, nil)
self.object:set_callback(callback.level_border_exit, nil)
self.object:set_callback(callback.take_item_from_box, nil)

if sr_psy_antenna.psy_antenna then
sr_psy_antenna.psy_antenna:destroy()
sr_psy_antenna.psy_antenna = false
end

xr_sound.stop_all_sound_object()

object_binder.net_destroy(self)
end

 

 

function actor_binder:reinit()
object_binder.reinit(self)

local npc_id = self.object:id()

db.storage[npc_id] = { }

self.st = db.storage[npc_id]
self.st.pstor = nil

self.next_restrictors_update_time = -10000

self.object:set_callback(123, self.on_key, self)
self.object:set_callback(callback.inventory_info, self.info_callback, self)
self.object:set_callback(callback.article_info, self.article_callback, self)
self.object:set_callback(callback.on_item_take, self.on_item_take, self)
self.object:set_callback(callback.on_item_drop, self.on_item_drop, self)
self.object:set_callback(callback.trade_sell_buy_item, self.on_trade, self) -- for game stats
--self.object:set_callback(callback.actor_sleep, self.sleep_callback, self)
self.object:set_callback(callback.task_state, self.task_callback, self)
--self.object:set_callback(callback.map_location_added, self.map_location_added_callback, self)
self.object:set_callback(callback.level_border_enter, self.level_border_enter, self)
self.object:set_callback(callback.level_border_exit, self.level_border_exit, self)
self.object:set_callback(callback.take_item_from_box, self.take_item_from_box, self)
end

----------------------------------------------------------------------------------------------------------------------
function actor_binder:on_key(key)
ogse_grenade_switcher.on_key_down(key, dik_to_bind(key))
end
----------------------------------------------------------------------------------------------------------------------






 


Ничего не удалял, просто добавил строки 

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


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

Попробую поменять значение на 15


К сожалению не помогло, всё так же. Почему-то на счетчике показывается только количество того вида гранат которая в руке, если имеется Ф1 - 5 шт и РГД-5 - 7 шт, если у ГГ в руке будет к примеру РГД, то на счетчике будет 7, а не 12, это так и должно быть? Я просто не помню как в оригинале, патроны знаю считается общее количество всех типов, обычные и бронебойные общим количеством.

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


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

Патроны всех типов и гранаты для подствольника считаются общим количеством и переключение работает, проблема только с ручными гранатами

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


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

Ну просто в чистом ТЧ они переключаются клавишей Y как патроны, а  сейчас не работает переключение, в OGSE скриптовое переключение сделано


Кто знает где в ТЧ прописываются коды калбекков, на подобии как в OGSE? вот пример

 

 

-- коды дополнительных колбеков
callback_ex = {
["on_key_press"] = 123,
["on_key_release"] = 124,
["on_key_hold"] = 125,
["on_mouse_wheel"] = 126,
["on_mouse_move"] = 127,

 


Или в ТЧ такого нет?


Переключение гранат заработало, но когда я поставил мод "Патроны на поясе" происходит вылет без лога после того как я пытаюсь переключить вид гранат, которые уже есть на поясе. Попробовал сделать следующее, взял файл bind_stalker на котором переключение заработало, но там нет мода на пояс и стал из другого bind_stalker который у меня в моде (там есть пояс) перекидывать недостающие строчки сравнивая оба файла в программе WinMerge, удалось выявить что после добавления строки  inventory.update() происходит вылет при попытке переключения гранат уже на поясе.


Поставил "Гранаты на поясе" получил такой вылет

 

Expression : fatal error
Function : CScriptEngine::lua_error
File : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp
Line : 73
Description :
Arguments : LUA error: ...íîáûëÿ\gamedata\scripts\ogse_grenade_switcher.script:19: attempt to perform arithmetic on local 'start_pos' (a nil value)

 

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


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

Ну буду пытаться разбираться) 


Народ, кто-нибудь знает как реализовать транспорт, с багажником и необходимостью заправки, как в ОГСЕ, Лост Альфа, Новый Арсенал и ещё в некоторых модах, может есть отдельный мини мод на это или статья какая-то по созданию такого транспорта?

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


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

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