Это популярное сообщение. Malandrinus 615 Опубликовано 22 Ноября 2010 Это популярное сообщение. Поделиться Опубликовано 22 Ноября 2010 (изменено) Проект X-Ray extensions Представляет собой набор добавлений, расширяющих возможности движка для скриптёров, а также, в ряде случаев, меняющих поведение игры. Изменения реализованы в виде бинарных патчей библиотек и исполняемых файлов. Адрес проекта на Google CodeДокументация одним файлом в chm формате (зеркало) по состоянию на 15 августа 2013 г. (собрана, отформатирована и скомпилирована @Kontro-zzz).Версии игры, поддерживаемые на данный момент:ТЧ (патч 1.0006): xrGame.dll, XR_3DA.exe, xrRender_R1/2ЧН (патч 10): xrGame.dll, xrRender_R1/2/3ЗП (патч 1.6.02): xrGame.dll, xrRender_R1/2/3/4 svn хранилище не содержит оригинальных файлов игры. Не забывайте делать резервные копии перед заменой файлов игры! Ссылка на адрес нового репозитария: https://github.com/KD87/xray-extensions Изменено 23 Июня 2016 пользователем Malandrinus 12 12 1 8 Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Ссылка на комментарий
Darkscape 0 Опубликовано 8 Декабря 2011 Поделиться Опубликовано 8 Декабря 2011 saruman_ten, вряд ли, ведь в позициях памяти хранятся только цифры Ссылка на комментарий
_Призрак_ 11 Опубликовано 8 Декабря 2011 Поделиться Опубликовано 8 Декабря 2011 (изменено) Darkscape Ты не прав. В памяти хранится. Другой вопрос что любую вещь можно превратить в набор цифр. Но в данном конкретном случае я могу сказать что изменить описание оружия реально, но тов. malandrinus не дал нам такой возможности. А вообще в памяти можно расположить все что угодно. Например я сейчас пишу класс для работы с конфиг файлами, так он создает в памяти вектор, состоящий из векторов, которые в свою очередь состоят из объектов типа string. saruman_ten Добраться до этих данных реально, но даже в теории существуют несколько ограничений, таких как длинна пути до нового описания и визуала, а так же как поведет себя игра при таком наглом вмешательстве. Вполне возможно что даже изменив путь до визуала он сбросится на оригинальный при переходе онлайн/оффлайн, а если его менять в онлайне то изменений не произойдут, т.к. в игра уже загрузит оригинальный визуал оружия. Изменено 8 Декабря 2011 пользователем _Призрак_ Freedom Ссылка на комментарий
Saruman 8 Опубликовано 8 Декабря 2011 Поделиться Опубликовано 8 Декабря 2011 (изменено) _Призрак_, интересно было бы сделать аgгрейд как в зп, без создания сотни секций, вот только с описаниям не понятно как сделать визуальное отличие ствола после абгрейда, с визуалом ладно, многие абгрейды внутренние Изменено 9 Декабря 2011 пользователем ColR_iT S.T.A.L.K.E.R 1.004, Народная..Солянка от 19.04.10, дополнение 14.08.10, патч 3.09.10, DMX 1.3.5, Saruman addon 1.1 Vkontakte Добавление нового транспорта в сталкер Ссылка на комментарий
SkyLoader 53 Опубликовано 8 Декабря 2011 Поделиться Опубликовано 8 Декабря 2011 _Призрак_, Наверное ошибаюсь, но думаю, что для стринговых изменений созданы ф-ции get/set_wpn_shared_str и get/set_actor_shared_str. Хотя, посмотрев, строение ф-ции теперь думаю, это вряд ли нужные ф-ции. Ссылка на комментарий
Akcok 164 Опубликовано 10 Декабря 2011 Поделиться Опубликовано 10 Декабря 2011 (изменено) malandrinus, а у вас есть в планах восстановление различных методов? А то в ЗП так все урезали, что просто ужас для различных скриптовых правок. В ЧН еще хоть терпимо... P.S. X-Ray extensions развивается только на ЗП? Изменено 10 Декабря 2011 пользователем power-cat Ссылка на комментарий
KD87 718 Опубликовано 10 Декабря 2011 Поделиться Опубликовано 10 Декабря 2011 power-cat, что именно там страшно урезали в плане скриптовых правок? X-Ray extensions развивается, в основном, на ТЧ, как мне кажется. Ссылка на комментарий
abramcumner 1 146 Опубликовано 10 Декабря 2011 Поделиться Опубликовано 10 Декабря 2011 X-Ray extensions развивается Malandrinus`ом. Он в команде ОГСЕ. Сейчас делают ОГСЕ под ТЧ - идут правки под ТЧ. Перейдут на ЧН - будут правки под ЧН Добавлено через 202 мин.: power-cat, что именно там страшно урезали в плане скриптовых правок? Ну как же: lua_help.script в ЗП на 8кб меньше, чем в ТЧ А так как-то так: + class vector2 - const story_ids::XXX + const callback::action_removed и callback::weapon_no_ammo - const key_bindings::kCAM_4 и key_bindings::kCROUCH_TOGGLE - class game_messages - class game_phases - class game_player_flags + const GAME_TYPE::eGameIDCaptureTheArtefact + const task::additional и task::storyline - const ui_events::INVENTORY_ХХХ и тому подобное + class GameGraph__LEVEL_MAP__value_type + class MEMBERS__value_type + class award_pair_t + class best_scores_pair_t + clsid::XXX + const CSightParams::eSightTypeAnimationDirection + function FS_item::ModifDigitOnly - class RPoint + class Patch_Dawnload_Progress + class rotation + class award_data - class SZoneMapEntityData - class TEX_INFO - class game_PlayerState + class profile + function class action_base::weight - class ZoneMapEntities + class suggest_nicks_cb + class account_profiles_cb + class login_operation_cb + class account_operation_cb + class found_email_cb + class store_operation_cb + function CAI_Bloodsucker::force_visibility_state(number); + function CALifeHumanBrain::can_choose_alife_tasks(boolean); + function CALifeMonsterBrain::can_choose_alife_tasks(boolean); - function alife_simulator::object(const alife_simulator*, string); + CALifeSmartTerrainTask::CALifeSmartTerrainTask (number, number); + class CActor + class CAntirad + class CArtefact + function CXXXArtefact::SwitchVisibility(boolean); + function CXXXArtefact::FollowByPath(string, number, vector); + function CXXXArtefact::GetAfRank() const; + class CBottleItem + function CConsole::execute_deferred(CConsole*, string); + function cover_point::is_smart_cover(const cover_point*); + class CDestroyablePhysicsObject - function CDialogHolder::start_stop_menu(CUIDialogWnd*, boolean); - function CDialogHolder::MainInputReceiver(); + class CPhraseScript + class CExplosiveItem + class CFoodItem + function CGameGraph::levels(const CGameGraph*); ~ class CGameTask сильно переделан. + class CGrenadeLauncher ~ class CHelicopter вроде как расширен значительно + class CInventoryBox + class CLevelChanger - class CKinematicsAnimated + class CMainMenu + class CMedkit + class CPda + class CPhysicObject - class CPhraseScript + class CRadioactiveZone + property cse_abstract::angle; и всем наследникам - function XXX::FillProps(string, class xr_vector<class PropItem *,class xalloc<class PropItem *> >&); + class cse_alife_inventory_box + class cse_alife_item_weapon_auto_shotgun ~ class cse_alife_monster_abstract и наследники + class cse_alife_monster_rat + class cse_smart_cover + const anim::capture_prepare = 1; + property game_object::bleeding + function game_object::active_detector() const; + function game_object::actor_look_at_point(vector); + function game_object::add_animation(string, boolean, vector, vector, boolean); + function game_object::add_combat_sound(string, number, enum ESoundTypes, number, number, number, string); + function game_object::aim_bone_id() const; + function game_object::aim_bone_id(string); + function game_object::aim_time(game_object*); + function game_object::aim_time(game_object*, number); + function game_object::allow_break_talk_dialog(boolean); + function game_object::allow_sprint(boolean); + function game_object::apply_loophole_direction_distance() const; + function game_object::apply_loophole_direction_distance(number); + function game_object::attachable_item_load_attach(string); + function game_object::burer_get_force_gravi_attack(); + function game_object::burer_set_force_gravi_attack(boolean); + function game_object::buy_item_condition_factor(number); + function game_object::can_select_weapon() const; + function game_object::can_select_weapon(boolean); + function game_object::can_throw_grenades() const; + function game_object::can_throw_grenades(boolean); + function game_object::character_icon(); + function game_object::community_goodwill(string); + function game_object::deadbody_can_take(boolean); + function game_object::deadbody_can_take_status(); + function game_object::deadbody_closed(boolean); + function game_object::deadbody_closed_status(); + function game_object::death_sound_enabled() const; + function game_object::death_sound_enabled(boolean); + function game_object::disable_hit_marks() const; + function game_object::disable_hit_marks(boolean); + function game_object::disable_inv_upgrade(); + function game_object::disable_show_hide_sounds(boolean); + function game_object::enable_inv_upgrade(); + function game_object::enable_level_changer(boolean); + function game_object::enable_night_vision(boolean); + function game_object::enable_torch(boolean); + function game_object::find_best_cover(vector); + function game_object::force_set_goodwill(number, game_object*); + function game_object::force_stand_sleep_animation(number); + function game_object::force_visibility_state(number); + function game_object::get_artefact(); + function game_object::get_bone_id(string) const; + function game_object::get_campfire(); - function game_object::get_bleeding() const; + function game_object::get_dest_smart_cover(); + function game_object::get_dest_smart_cover_name(); + function game_object::get_force_anti_aim(); - function game_object::get_info_time(string); + function game_object::get_movement_speed() const; + function game_object::get_physics_object(); + function game_object::get_smart_cover_description() const; + function game_object::get_visibility_state(); + function game_object::get_visual_name() const; + function game_object::give_game_news(string, string, string, number, number); + function game_object::give_game_news(string, string, string, number, number, number); - function game_object::give_game_news(string, string, Frect, number, number); + function game_object::give_talk_message2(string, string, string, string); + function game_object::group_throw_time_interval() const; + function game_object::group_throw_time_interval(number); + function game_object::idle_max_time() const; + function game_object::idle_max_time(number); + function game_object::idle_min_time() const; + function game_object::idle_min_time(number); + function game_object::invulnerable() const; + function game_object::invulnerable(boolean); + function game_object::inv_box_can_take(boolean); + function game_object::inv_box_can_take_status(); + function game_object::inv_box_closed(boolean, string); + function game_object::inv_box_closed_status(); + function game_object::in_current_loophole_fov(vector) const; + function game_object::in_current_loophole_range(vector) const; + function game_object::in_loophole_fov(string, string, vector) const; + function game_object::in_loophole_range(string, string, vector) const; + function game_object::in_smart_cover() const; + function game_object::is_door_locked_for_npc() const; + function game_object::is_inv_upgrade_enabled(); + function game_object::is_level_changer_enabled(); + function game_object::is_there_items_to_pickup() const; + function game_object::iterate_inventory_box(function<void>, object); + function game_object::level_vertex_light(const number&) const; + function game_object::lock_door_for_npc(); + function game_object::lookout_max_time() const; + function game_object::lookout_max_time(number); + function game_object::lookout_min_time() const; + function game_object::lookout_min_time(number); + function game_object::make_item_active(game_object*); + function game_object::movement_target_reached(); + function game_object::night_vision_enabled() const; + function game_object::on_door_is_closed(); + function game_object::on_door_is_open(); + function game_object::poltergeist_get_actor_ignore(); + function game_object::poltergeist_set_actor_ignore(boolean); + function game_object::register_door_for_npc(); + function game_object::register_in_combat(); + function game_object::release_stand_sleep_animation(); ~ function game_object::run_talk_dialog(game_object*, boolean); + function game_object::set_active_task(CGameTask*); + function game_object::set_capture_anim(game_object*, string, const vector&, number); + function game_object::set_collision_off(boolean); + function game_object::set_community_goodwill(string, number); - function game_object::set_character_reputation(number); + function game_object::set_dest_game_vertex_id(number); + function game_object::set_dest_loophole(); + function game_object::set_dest_loophole(string); + function game_object::set_dest_smart_cover(); + function game_object::set_dest_smart_cover(string); + function game_object::set_enemy(game_object*); + function game_object::set_force_anti_aim(boolean); + function game_object::set_home(number, number, number, boolean, number); + function game_object::set_level_changer_invitation(string); + function game_object::set_movement_selection_type(enum ESelectionType); + function game_object::set_npc_position(vector); + function game_object::set_smart_cover_target(); + function game_object::set_smart_cover_target(game_object*); + function game_object::set_smart_cover_target(vector); + function game_object::set_smart_cover_target_default(boolean); + function game_object::set_smart_cover_target_fire(); + function game_object::set_smart_cover_target_fire_no_lookout(); + function game_object::set_smart_cover_target_idle(); + function game_object::set_smart_cover_target_lookout(); + function game_object::set_smart_cover_target_selector(); + function game_object::set_smart_cover_target_selector(function<void>); + function game_object::set_smart_cover_target_selector(function<void>, object); + function game_object::set_sympathy(number); + function game_object::set_visual_memory_enabled(boolean); + function game_object::set_visual_name(string); + function game_object::set_vis_state(number); + function game_object::sniper_fire_mode() const; + function game_object::sniper_fire_mode(boolean); + function game_object::sniper_update_rate() const; + function game_object::sniper_update_rate(boolean); + function game_object::special_danger_move(); + function game_object::special_danger_move(boolean); + function game_object::start_particles(string, string); + function game_object::stop_particles(string, string); + function game_object::suitable_smart_cover(game_object*); + function game_object::switch_to_upgrade(); + function game_object::sympathy(); + function game_object::take_items_enabled() const; + function game_object::take_items_enabled(boolean); + function game_object::torch_enabled() const; + function game_object::unlock_door_for_npc(); + function game_object::unregister_door_for_npc(); + function game_object::unregister_in_combat(); + function game_object::use_smart_covers_only() const; + function game_object::use_smart_covers_only(boolean); + function game_object::weapon_grenadelauncher_status(); + function game_object::weapon_is_grenadelauncher(); + function game_object::weapon_is_scope(); + function game_object::weapon_is_silencer(); + function game_object::weapon_scope_status(); + function game_object::weapon_silencer_status(); + const hit::light_burn = 11; + const move::run_with_leader = 7; + const move::walk_with_leader = 6; + function sound_object::attach_tail(string); + function CScriptXmlInit::InitSleepStatic(string, CUIWindow*); + function CScriptXmlInit::InitTextWnd(string, CUIWindow*); + function CScriptXmlInit::InitProgressBar(string, CUIWindow*); + function CScriptXmlInit::InitListBox(string, CUIWindow*); + function CScriptXmlInit::InitMPPlayerName(string, CUIWindow*); - function CScriptXmlInit::InitList(string, CUIWindow*); - function CScriptXmlInit::ParseShTexInfo(string); - function CScriptXmlInit::InitLabel(string, CUIWindow*); - function CScriptXmlInit::InitAutoStaticGroup(string, CUIWindow*); - function CScriptXmlInit::InitButton(string, CUIWindow*); + class CSilencer + const stalker_ids::sound_enemy_lost_no_allies = 12; + const stalker_ids::sound_enemy_lost_with_allies = 13; + const stalker_ids::sound_wounded = 18; + class CTorridZone - class CUICaption + class CWeaponAmmo + class CWeaponAutomaticShotgun + class CZoneCampfire + class FactionState - class IKinematicsAnimated - class SGameTaskObjective + class smart_cover_object + class profile_store + function cast_planner(action_base*); + function IsDynamicMusic(); + function IsGameTypeSingle(); + function IsImportantSave(); + function render_get_dx_level(); + function valid_saved_game(string); - function cast_action_to_planner(action_base*); - function cast_alife_object_to_creature(cse_alife_object*); - function cast_alife_object_to_trader_abstract(cse_alife_object*); - function cast_planner_to_action(action_planner*); - function GetTextureInfo(string, string); - function GetTextureName(string); - function GetTextureRect(string); - function xrRender_test_r2_hw(); + function level.change_game_time(number, number, number); + function level.get_wfx_time(); + function level.hide_indicators_safe(); + function level.high_cover_in_direction(number, const vector&); + function level.low_cover_in_direction(number, const vector&); + function level.show_weapon(boolean); + function level.start_weather_fx_from_time(string, number); + function level.stop_weather_fx(); + function level.vertex_id(vector); - function level.cover_in_direction(number, const vector&); - function level.main_input_receiver(); - function level.start_stop_menu(CUIDialogWnd*, boolean); Ссылка на комментарий
Malandrinus 615 Опубликовано 10 Декабря 2011 Автор Поделиться Опубликовано 10 Декабря 2011 С точки зрения геймплея ничего в ЗП не вырезали, только добавили. Убрали пару ненужных классов и зачем-то порезали оконную систему. Если точнее, то не столько порезали, сколько типа оптимизировали. Но в процессе под нож попали вращение текстур и получение активного окна. Вращение текстур уже вернули, а вот с main_input_receiver сложнее. Ну и всё собственно, если последняя фишка вам не критична, то ЗП по всем параметрам лучше. Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Ссылка на комментарий
Darkscape 0 Опубликовано 18 Декабря 2011 Поделиться Опубликовано 18 Декабря 2011 Может кто-нибудь скинуть собранную r18 или расписать, как ее собрать? Я нашел в теме инструкцию, но там не совсем понятно и нужные файлы удалены с обменников Ссылка на комментарий
Viнt@rь 50 Опубликовано 18 Декабря 2011 Поделиться Опубликовано 18 Декабря 2011 (изменено) Извините за нелепый вопрос, но xray_ext_src_001 никак не могу пропатчить dll, система ХР SP2 x32, при запуске батника make_3967 пишет два раза "Системе не удается найти указанный путь" и выбивает окно завершения программы, полез в батник, увидел строки: c:\masm32\bin\ml /c /coff /Fo mydll.obj mydll.asm c:\masm32\bin\Link /SUBSYSTEM:WINDOWS /DLL /OUT:mydll.dll /DEF:mydll.def mydll.obj как я понял, именно из за того, что у меня нет c:\masm32\bin\ и вылазят те две строки при выполнении программы... Вопрос, что надо сделать, что бы пропатчить dll, возможно каких то файлов не хватает или еще чего-то??? Изменено 18 Декабря 2011 пользователем Viнt@rь GUI для конвертера от бардака(всего и вся в форматы сдк) Полезный утиль-"Utilits pack(mod)" Ссылка на комментарий
*Shoker* 322 Опубликовано 18 Декабря 2011 Поделиться Опубликовано 18 Декабря 2011 (изменено) Скачать и поставить masm Я в теме писал выше где то. Изменено 18 Декабря 2011 пользователем *Shoker* Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий
SkyLoader 53 Опубликовано 29 Декабря 2011 Поделиться Опубликовано 29 Декабря 2011 malandrinus, Хм... решил потестить ф-цию alife():teleport_object("", pos, lvx, gvx, parent_id). И не совсем понял, как ее использовать. Судя по строению функция принимает секцию (section_ = dword ptr 0Ch), зачем? Как можно определить по секции объект? Второе, в вызове ф-ции из оригинала у тебя передается (unsigned __int16 id). Может ты перепутал section_ и id? Ссылка на комментарий
SkyLoader 53 Опубликовано 2 Января 2012 Поделиться Опубликовано 2 Января 2012 И еще, можешь объяснить, что делает ф-ция obj:get/set_actor_shared_str()? Ссылка на комментарий
Malandrinus 615 Опубликовано 3 Января 2012 Автор Поделиться Опубликовано 3 Января 2012 SkyLoader, решил потестить ф-цию alife():teleport_object("", pos, lvx, gvx, parent_id). И не совсем понял, как ее использовать. Первый аргумент-строка - это заглушка и не используется. Последний - id объекта. что делает ф-ция obj:get/set_actor_shared_str()? Большая часть строковых свойств объектов в игре хранится в т.н. shared string. Это по сути индекс в глобальном хранилище строк. При измении значения свойства в объекте сперва проверяется, нет ли такой строки в этом хранилище, затем либо добавляется в хранилище новая строка и прописывается её индекс, либо увеличивается счётчик использования строки, которая уже есть в хранилище. Собственно, функция меняет такое свойство. Или пытается... Не помню уже, получилось или нет. Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Ссылка на комментарий
Real Wolf 34 Опубликовано 3 Января 2012 Поделиться Опубликовано 3 Января 2012 (изменено) malandrinus, С функцией "open_inventory_box" разобрался. Всё работает =) Смещение я брал наугад, первые числа. И как его узнать? Изменено 3 Января 2012 пользователем Real Wolf Ссылка на комментарий
Malandrinus 615 Опубликовано 3 Января 2012 Автор Поделиться Опубликовано 3 Января 2012 Real Wolf, несколько раз проверял на нескольких объектах вызов get_shared_str, и возвращало nil. Вызов set_shared_str привел в вылету. Надо знать смещение для начала. Ты уверен, что смещение от начала объекта было верным? И как правильно использовать функцию "open_inventory_box"? Ведь передавать надо, насколько я понял серверный объект ящика? А вызывать для какого объекта тогда? Не серверный, а клиентский. Для актора Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Ссылка на комментарий
SkyLoader 53 Опубликовано 5 Января 2012 Поделиться Опубликовано 5 Января 2012 (изменено) malandrinus, непися телепортирует, спасибо. А вот с db.actor:get_actor_shared_str(n) проблема: перебором пробовал получить хоть какое-то значение актора, но в итоге всегда получалось nil. Изменено 5 Января 2012 пользователем SkyLoader Ссылка на комментарий
Andrey07071977 18 Опубликовано 8 Января 2012 Поделиться Опубликовано 8 Января 2012 (изменено) malandrinus В r18 обнаружил глюк с 8ым слотом (детектор). Вот скриншот: По какой-то причине, детектор все время болтается под ногами, хотя судя по выводу содержимого в лог - находится в слоте, как и положено. Попробовал с detector_elite, так тот вообще один раз из десяти залазил в слот, но если попадает, то эффект тот-же. Изменено 8 Января 2012 пользователем Andrey07071977 Ссылка на комментарий
SkyLoader 53 Опубликовано 8 Января 2012 Поделиться Опубликовано 8 Января 2012 Andrey07071977, в r18 есть правка активации 8 слота, только не понятно, зачем она нужна. Ссылка на комментарий
Geoset 23 Опубликовано 12 Января 2012 Поделиться Опубликовано 12 Января 2012 Что делал: 1. Установил masm32 (установка прошла успешно). 2. Скачал с гуглокода все компоненты, сохранил структуру папок. Что получил: "...\tools\ml" не является внутренней или внешней командой, исполняемой программой или пакетным файлом. Cmd-файлы пробовал как оригинальные, так и с полными путями (как в посте *Shoker*'а). Переменные среды для masm32 пробовал прописывать вручную. Запускал на XP и висте. Результат вышеозначенный. Что посоветуете в данной ситуации? Либо требуется еще какая-нибудь информация? Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти