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

X-Ray extensions

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

Darkscape

Ты не прав. В памяти хранится. Другой вопрос что любую вещь можно превратить в набор цифр. Но в данном конкретном случае я могу сказать что изменить описание оружия реально, но тов. malandrinus не дал нам такой возможности. А вообще в памяти можно расположить все что угодно. Например я сейчас пишу класс для работы с конфиг файлами, так он создает в памяти вектор, состоящий из векторов, которые в свою очередь состоят из объектов типа string.

 

saruman_ten

Добраться до этих данных реально, но даже в теории существуют несколько ограничений, таких как длинна пути до нового описания и визуала, а так же как поведет себя игра при таком наглом вмешательстве. Вполне возможно что даже изменив путь до визуала он сбросится на оригинальный при переходе онлайн/оффлайн, а если его менять в онлайне то изменений не произойдут, т.к. в игра уже загрузит оригинальный визуал оружия.

Изменено пользователем _Призрак_

Freedom

Ссылка на комментарий
_Призрак_, интересно было бы сделать аgгрейд как в зп, без создания сотни секций, вот только с описаниям не понятно как сделать визуальное отличие ствола после абгрейда, с визуалом ладно, многие абгрейды внутренние Изменено пользователем 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

Добавление нового транспорта в сталкер

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

_Призрак_,

Наверное ошибаюсь, но думаю, что для стринговых изменений созданы ф-ции get/set_wpn_shared_str и get/set_actor_shared_str.

Хотя, посмотрев, строение ф-ции теперь думаю, это вряд ли нужные ф-ции.

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

malandrinus, а у вас есть в планах восстановление различных методов? А то в ЗП так все урезали, что просто ужас для различных скриптовых правок. :(

В ЧН еще хоть терпимо...

P.S. X-Ray extensions развивается только на ЗП?

Изменено пользователем power-cat
Ссылка на комментарий
power-cat, что именно там страшно урезали в плане скриптовых правок? X-Ray extensions развивается, в основном, на ТЧ, как мне кажется.
Ссылка на комментарий

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);

 

 

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

С точки зрения геймплея ничего в ЗП не вырезали, только добавили. Убрали пару ненужных классов и зачем-то порезали оконную систему. Если точнее, то не столько порезали, сколько типа оптимизировали. Но в процессе под нож попали вращение текстур и получение активного окна. Вращение текстур уже вернули, а вот с main_input_receiver сложнее. Ну и всё собственно, если последняя фишка вам не критична, то ЗП по всем параметрам лучше.

 

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

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

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

 

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

Может кто-нибудь скинуть собранную r18 или расписать, как ее собрать? Я нашел в теме инструкцию, но там не совсем понятно и нужные файлы удалены с обменников

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

Извините за нелепый вопрос, но 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, возможно каких то файлов не хватает или еще чего-то???

Изменено пользователем Viнt@rь
Ссылка на комментарий

Скачать и поставить masm :)

Я в теме писал выше где то.

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

Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О

Мастер аномалий на свою заднюю точку.

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

malandrinus,

Хм... решил потестить ф-цию alife():teleport_object("", pos, lvx, gvx, parent_id). И не совсем понял, как ее использовать. Судя по строению функция принимает секцию (section_ = dword ptr 0Ch), зачем? Как можно определить по секции объект?

Второе, в вызове ф-ции из оригинала у тебя передается (unsigned __int16 id). Может ты перепутал section_ и id?

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

SkyLoader,

решил потестить ф-цию alife():teleport_object("", pos, lvx, gvx, parent_id). И не совсем понял, как ее использовать.

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

 

что делает ф-ция obj:get/set_actor_shared_str()?

Большая часть строковых свойств объектов в игре хранится в т.н. shared string. Это по сути индекс в глобальном хранилище строк. При измении значения свойства в объекте сперва проверяется, нет ли такой строки в этом хранилище, затем либо добавляется в хранилище новая строка и прописывается её индекс, либо увеличивается счётчик использования строки, которая уже есть в хранилище. Собственно, функция меняет такое свойство. Или пытается... Не помню уже, получилось или нет.

 

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

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

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

 

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

malandrinus,

С функцией "open_inventory_box" разобрался. Всё работает =)

 

Смещение я брал наугад, первые числа. И как его узнать?

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

Real Wolf,

несколько раз проверял на нескольких объектах вызов get_shared_str, и возвращало nil.

Вызов set_shared_str привел в вылету.

Надо знать смещение для начала. Ты уверен, что смещение от начала объекта было верным?

 

И как правильно использовать функцию "open_inventory_box"? Ведь передавать надо, насколько я понял серверный объект ящика? А вызывать для какого объекта тогда?

Не серверный, а клиентский.

Для актора

 

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

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

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

 

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

malandrinus, непися телепортирует, спасибо.

 

А вот с db.actor:get_actor_shared_str(n) проблема: перебором пробовал получить хоть какое-то значение актора, но в итоге всегда получалось nil.

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

malandrinus

В r18 обнаружил глюк с 8ым слотом (детектор). Вот скриншот:

image.png

 

 

 

По какой-то причине, детектор все время болтается под ногами, хотя судя по выводу содержимого в лог - находится в слоте, как и положено. Попробовал с detector_elite, так тот вообще один раз из десяти залазил в слот, но если попадает, то эффект тот-же.

 

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

Что делал:

1. Установил masm32 (установка прошла успешно).

2. Скачал с гуглокода все компоненты, сохранил структуру папок.

 

Что получил:

"...\tools\ml" не является внутренней или внешней командой, исполняемой программой или пакетным файлом.

 

Cmd-файлы пробовал как оригинальные, так и с полными путями (как в посте *Shoker*).

Переменные среды для masm32 пробовал прописывать вручную.

Запускал на XP и висте.

 

Результат вышеозначенный.

 

Что посоветуете в данной ситуации? Либо требуется еще какая-нибудь информация?

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

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

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

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

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

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

Войти

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

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

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

AMK-Team.ru

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