Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Закрома Родины
GAMEINATOR forums > S.T.A.L.K.E.R. > Мастерская: создание модов для S.T.A.L.K.E.R.
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77
Tron
Не брать ТЧ!
Я уже говорил,что версии используемые в ТЧ и ЧН отличаются.
1.3 против 1.5

Инклуды для луа надо брать из ЧН

User_X.A.R26
Я же добавил, что если брать ЧН файлы, то тоже самое

UPD: Взял файлы не из патчей ЧН, а из SDK. Попробовал скомпилить. Лог:
CODE
1>------ Построение начато: проект: lua.JIT.1.1.4, Конфигурация: Release Win32 ------
1>C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\V110\Microsoft.CppBuild.targets(1137,5): warning MSB8012: TargetPath(S:\3rd party\luajit\../../../../intermediate/Win32/Release/lua.JIT.1.1.4\lua.JIT.1.1.4.dll) does not match the Linker's OutputFile property value (S:\binaries\lua.JIT.1.1.4.dll). This may cause your project to build incorrectly. To correct this, please make sure that $(OutDir), $(TargetName) and $(TargetExt) property values match the value specified in %(Link.OutputFile).
1> Создается библиотека ../../../../libraries/lua.JIT.1.1.4.lib и объект ../../../../libraries/lua.JIT.1.1.4.exp
1>lauxlib.obj : error LNK2001: неразрешенный внешний символ "_luaL_opt"
1>lstate.obj : error LNK2001: неразрешенный внешний символ "_luai_userstateclose"
1>../../../../binaries/lua.JIT.1.1.4.dll : fatal error LNK1120: неразрешенных внешних элементов: 2
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
Tron
Цитата(User_X.A.R26 @ 10.08.2014, 21:13) *
Я же добавил, что если брать ЧН файлы, то тоже самое

Быть этого не может,все собираемо.
Но я собирал 1.5.0.7

Забери директорию sdk отсюда
https://bitbucket.org/stalker/clearsky/src/.../lua/?at=master

3dparty отсюда
https://bitbucket.org/stalker/clearsky/src/...arty/?at=master
Modera
Цитата(hi_flyer @ 10.08.2014, 18:04) *
Цитата(Modera @ 10.08.2014, 21:32) *
сорцы за январь 2007

Там оказывается куда больше кода чем в 1.0007. Есть например код 3д-статика и блокнота.

Там даже исходники времен 2001 года есть laugh.gif Реилган, управляемый вертолёт, etc.
Lego
собрал scriptDbgIde от января 2007. Библиотеки (cj60lib, scite162) закинул на всякий на bitbucket.
всегда было интересно, как вообще воспользоваться этой штукой?
Roden Croft
Интересно, а SoC patch 1.0004, это действительно он или совсем не он?
Modera
Цитата(Lego @ 11.08.2014, 06:14) *
всегда было интересно, как вообще воспользоваться этой штукой?

Надо запустить вместе с debug версией движка, и потом можно будет им воспользоваться.
Только этот дебаггер должен быть рядом с xr_3da и геймдатой одновременно. Т.е. никаких бинов, иначе он не сможет загрузить скрипты из геймдаты.
MegaNub
Собрал 1.5.10 (patch 1.5.06), и тут началась странность. При создании новой игры, после загрузки Spawn Points крэшится с таким логом. Проблемы с чтением Game Graph (если смотреть на call stack)? Кто-нибудь встречался с подобной проблемой? Поиск в интернетах толковых результатов не дал.
Log

Создание новой игры...
* Creating new game...
* loading script inventory_upgrades.script
* Loading spawn registry...
* loading script object_collection.script
* loading script task_objects.script
* loading script minigames_manager.script
* loading script minigame_crowkiller.script
* loading script minigame_shooting.script
* loading script sim_combat.script
* loading script cover_manager.script
* 11568 spawn points are successfully loaded
stack trace:

001B:64073A30 xrCore.dll, IReader::pointer, s:\xrcore\fs.h, 277
001B:60DDF780 xrGame.dll, CLevelGraph::CLevelGraph(), s:\xrgame\level_graph.cpp, 34
001B:61111221 xrGame.dll, xr_new<CLevelGraph>(), s:\xrcore\xrmemory_subst_msvc.h, 7
001B:6110EDB0 xrGame.dll, CAI_Space::load(), s:\xrgame\ai_space.cpp, 108
001B:60A7FBFC xrGame.dll, CALifeGraphRegistry::setup_current_level(), s:\xrgame\alife_graph_registry.cpp, 92
001B:60A7F86C xrGame.dll, CALifeGraphRegistry::update(), s:\xrgame\alife_graph_registry.cpp, 61
001B:60A7D0D3 xrGame.dll, CALifeSimulatorBase::register_object(), s:\xrgame\alife_simulator_base2.cpp, 31
001B:60A51AB0 xrGame.dll, CALifeSimulatorBase::create(), s:\xrgame\alife_simulator_base.cpp, 211
001B:60AA6BCF xrGame.dll, CALifeSurgeManager::spawn_new_spawns(), s:\xrgame\alife_surge_manager.cpp, 44
001B:60AA6E8D xrGame.dll, CALifeSurgeManager::spawn_new_objects(), s:\xrgame\alife_surge_manager.cpp, 66
001B:60AA0B67 xrGame.dll, CALifeUpdateManager::new_game(), s:\xrgame\alife_update_manager.cpp, 246
001B:60AA0DA3 xrGame.dll, CALifeUpdateManager::load(), s:\xrgame\alife_update_manager.cpp, 276
001B:609F18B5 xrGame.dll, CALifeSimulator::CALifeSimulator(), s:\xrgame\alife_simulator.cpp, 77
001B:615A59D5 xrGame.dll, xr_new<CALifeSimulator,xrServer *,shared_str *>(), s:\xrcore\xrmemory_subst_msvc.h, 19
001B:615A3B2D xrGame.dll, game_sv_Single::Create(), s:\xrgame\game_sv_single.cpp, 32
001B:615A7854 xrGame.dll, xrServer::Connect(), s:\xrgame\xrserver_connect.cpp, 82
001B:61185873 xrGame.dll, CLevel::net_start2(), s:\xrgame\level_start.cpp, 143
001B:0121D133 xrEngine.exe, CRenderDevice::on_idle(), s:\xrengine\device.cpp, 255
001B:0121DDB2 xrEngine.exe, CRenderDevice::message_loop(), s:\xrengine\device.cpp, 389
001B:0121DECB xrEngine.exe, CRenderDevice::Run(), s:\xrengine\device.cpp, 425
001B:0117F472 xrEngine.exe, Startup(), s:\xrengine\x_ray.cpp, 273
001B:0117FD8D xrEngine.exe, WinMain_impl(), s:\xrengine\x_ray.cpp, 755
001B:0117FFAF xrEngine.exe, WinMain(), s:\xrengine\x_ray.cpp, 806
001B:01289564 xrEngine.exe, __tmainCRTStartup(), f:\dd\vctools\crt_bld\self_x86\crt\src\crtexe.c, 547
001B:757E1866 KERNEL32.DLL, BaseThreadInitThunk()
001B:76EE68F1 ntdll.dll, LdrInitializeThunk()
001B:76EE689D ntdll.dll, LdrInitializeThunk()

[error][ 259] : Дополнительные данные отсутствуют.

YURSHAT
MegaNub, вы точно все правильно скомпилили и использовали для запуска ресурсы от нужного патча?
Попробуйте запустить на моих бинарниках ЧН 1.5.10. Запускать на ресурсах патча 1.5.10

ЗЫ. В исходники не вносил ни единой правки.
MegaNub
YURSHAT, тоже самое, так же жалуется на xrCore.dll, IReader::pointer. Ресурсы точно те, оригинальные бины тоже отказываются запускаться. Мистика какая-то. sad.gif
Modera
Попробуйте какой-нибудь спаун для теста собрать. Желательно родным xrAI из сорцев.

Если не запустится, то плохо дело laugh.gif
hi_flyer
При компиляции xrEngine.exe с конфигурацией "Release" на стадии линковки выдает сообщение:
fatal error C1047: The object or library file '..\..\sdk\libraries\oalibmt.lib' was created with an older compiler than objects; rebuild old objects and libraries

На конфигурации "Mixed" полностью компилируется и даже запускается. Компилирую восьмой студией, экспресс версией.

Подскажите, как решить эту проблему.
jamakasi
hi_flyer,
Цитата
was created with an older compiler than objects; rebuild old objects and libraries

По логике перекомпилировать эту либу но возможно устанавливаются неправильные флаги компиляции для либы этой(если она компилится каждый раз). Попробуй вызвать полный ребилд проекта.
HikeR
OpenAutomate (либа автотестов от нвидии) лет 5 уже как публичная, если GCS не использовали какие-то закрытые тестовые версии, то действительно, проще всего пересобрать ее из исходников.

а пляски со статическими либами собранными древними компиляторами и реакция на них компиляторов сегодняшних уже обсуждались ;)
FantomICW
Цитата(X_Starter_X @ 09.08.2014, 16:11) *
калбэк на смену костюма

Скомпилим с коллегами в очередной раз сорсы, проверим работоспособность моих правок в этом направлении. Если все будет работать, то сделаю туториал по новым коллбекам wink_old.gif
FantomICW
Впрочем, давайте ход мыслей озвучу сейчас. Но работоспособность не гарантирую. Пока что именно правки сорс-файлов, с игровыми скриптами сложностей не возникнет + детально прокомментирую в полном туторе, если такой будет.
Взять, к примеру, предложение Стартера - добавить коллбек на попадание броника в слот. Попробуем сделать коллбек на попадание в свой слот любого предмета.
Нужные файлы из директории xrGame:
- InventoryOwner.cpp
- script_game_object_script.cpp
- game_object_space.h
Текст
1. Открываем game_object_space.h. По идее, здесь идет перечисление движковых названий коллбеков. В таблицу (перечисление?) enum ECallbackType добавляем вниз новый движковый коллбек:
Код
eOnItemInSlot,

2. Дальше идем в script_game_object_script.cpp. Тут движковые коллбеки приобретают свои скриптовые название (те, что мы можем видеть в lua_help.script). После этого:
Код
value("map_location_added",            int(GameObject::eMapLocationAdded))

ставим запятую, ниже дописываем value нашего коллбека. В целом выглядит так:
Код
value("map_location_added",            int(GameObject::eMapLocationAdded)),
                
                value("on_item_in_slot",            int(GameObject::eOnItemInSlot))

3. Теперь переходим к InventoryOwner.cpp, где инициализируются различные инвентарные действия относительно ГГ. Находим void OnItemSlot. В нем, насколько я понимаю, айтем "цепляется" в слоте. Добавим туда некоторые элементы, войд будет выглядеть так:
Код
void CInventoryOwner::OnItemSlot    (CInventoryItem *inventory_item, EItemPlace previous_place)
{
    CGameObject    *object = smart_cast<CGameObject*>(this);
    VERIFY        (object);
    object->callback(GameObject::eOnItemSlot)(inventory_item->object().lua_game_object());
    
    attach        (inventory_item);
}

---------------------
Как-то так. Сразу говорю, что это чуть больше, чем просто метод тыка, основанный на изучении шаблонов других коллбеков. Особыми знаниями C++ не обладаю, как и глубокими знаниями движка.
Asterix
Уважаемые будет добры! Дайте ссыль на скомпилированные исходники ТЧ 1.0007 без правок.
Vampir35
FantomICW, так калбек на попадание в слот имеется, на попадание в рюкзак тоже, следовательно снятие/одевание костюма этими калбеками отловить можно smile.gif
Вот вопрос другой, калбек на нажатие контакта в ПДА нужен, попытавшись найти откуда ноги растут я потерпел неудачу)
Вроде бы вызываться должно там, где выводится биография, которую восстановил товарищ Shadows, если бы еще туда вкатить калбек, который передаст клиентский объект непися, было бы здорово)
FantomICW
Цитата(Vampir35 @ 12.08.2014, 20:22) *
калбек на попадание в слот имеется


Vampir35, покажи мне такой коллбек из данной таблицы smile.gif
Callback
Код
C++ class callback {
    const action_animation = 21;
    const action_movement = 18;
    const action_object = 24;
    const action_particle = 23;
    const action_removed = 20;
    const action_sound = 22;
    const action_watch = 19;
    const actor_sleep = 25;
    const article_info = 12;
    const death = 8;
    const helicopter_on_hit = 27;
    const helicopter_on_point = 26;
    const hit = 16;
    const inventory_info = 11;
    const inventory_pda = 10;
    const level_border_enter = 7;
    const level_border_exit = 6;
    const map_location_added = 14;
    const on_item_drop = 29;
    const on_item_take = 28;
    const patrol_path_in_point = 9;
    const script_animation = 30;
    const sound = 17;
    const take_item_from_box = 34;
    const task_state = 13;
    const trade_perform_operation = 3;
    const trade_sell_buy_item = 2;
    const trade_start = 0;
    const trade_stop = 1;
    const trader_global_anim_request = 31;
    const trader_head_anim_request = 32;
    const trader_sound_end = 33;
    const use_object = 15;
    const weapon_no_ammo = 35;
    const zone_enter = 4;
    const zone_exit = 5
};
Vampir35
Цитата(Mcbeat7 @ 12.08.2014, 20:17) *
Уважаемые будет добры! Дайте ссыль на скомпилированные исходники ТЧ 1.0007 без правок.

А как без правок? В том-то и дело, что тут тема правок, и с правками багов меньше, а если что-то не требуется, то можно не использовать или скомпилить, отключив дефайны.
Есть билд от KD: https://yadi.sk/d/a9RRtuI9ZWJa5
P.S
Если возникла необходимость, могу скомпилить чистую ревизию с нужными вам дефайнами)
FantomICW
Цитата(Vampir35 @ 12.08.2014, 20:22) *
калбек на нажатие контакта в ПДА

Если там класс CUIButton, то, вероятно, файл UIButton.cpp, войд клика:
Код
void CUIButton::OnClick(){
    GetMessageTarget()->SendMessage(this, BUTTON_CLICKED);
    m_bButtonClicked = true;
}
Vampir35
Цитата(FantomICW @ 12.08.2014, 20:28) *
Цитата(Vampir35 @ 12.08.2014, 20:22) *
калбек на попадание в слот имеется


Vampir35, покажи мне такой коллбек из данной таблицы smile.gif
Callback
Код
C++ class callback {
    const action_animation = 21;
    const action_movement = 18;
    const action_object = 24;
    const action_particle = 23;
    const action_removed = 20;
    const action_sound = 22;
    const action_watch = 19;
    const actor_sleep = 25;
    const article_info = 12;
    const death = 8;
    const helicopter_on_hit = 27;
    const helicopter_on_point = 26;
    const hit = 16;
    const inventory_info = 11;
    const inventory_pda = 10;
    const level_border_enter = 7;
    const level_border_exit = 6;
    const map_location_added = 14;
    const on_item_drop = 29;
    const on_item_take = 28;
    const patrol_path_in_point = 9;
    const script_animation = 30;
    const sound = 17;
    const take_item_from_box = 34;
    const task_state = 13;
    const trade_perform_operation = 3;
    const trade_sell_buy_item = 2;
    const trade_start = 0;
    const trade_stop = 1;
    const trader_global_anim_request = 31;
    const trader_head_anim_request = 32;
    const trader_sound_end = 33;
    const use_object = 15;
    const weapon_no_ammo = 35;
    const zone_enter = 4;
    const zone_exit = 5
};



Стал копаться в движке, калбек все-таки имеется, помнил же вроде видел smile.gif таким он будет в скрипте bind_stalker:
"on_item_slot"
FantomICW
Vampir35, так где ты его нашел?
Vampir35
таблица
Код
        value("trade_start", int(GameObject::eTradeStart)),
                    value("trade_stop", int(GameObject::eTradeStop)),
                    value("trade_sell_buy_item", int(GameObject::eTradeSellBuyItem)),
                    value("trade_perform_operation", int(GameObject::eTradePerformTradeOperation)),
                    value("trader_global_anim_request", int(GameObject::eTraderGlobalAnimationRequest)),
                    value("trader_head_anim_request", int(GameObject::eTraderHeadAnimationRequest)),
                    value("trader_sound_end", int(GameObject::eTraderSoundEnd)),
                    value("zone_enter", int(GameObject::eZoneEnter)),
                    value("zone_exit", int(GameObject::eZoneExit)),
                    value("level_border_exit", int(GameObject::eExitLevelBorder)),
                    value("level_border_enter", int(GameObject::eEnterLevelBorder)),
                    value("death", int(GameObject::eDeath)),
                    value("patrol_path_in_point", int(GameObject::ePatrolPathInPoint)),
                    value("inventory_pda", int(GameObject::eInventoryPda)),
                    value("inventory_info", int(GameObject::eInventoryInfo)),
                    value("article_info", int(GameObject::eArticleInfo)),
                    value("use_object", int(GameObject::eUseObject)),
                    value("hit", int(GameObject::eHit)),
                    value("sound", int(GameObject::eSound)),
                    value("action_movement", int(GameObject::eActionTypeMovement)),
                    value("action_watch", int(GameObject::eActionTypeWatch)),
                    value("action_animation", int(GameObject::eActionTypeAnimation)),
                    value("action_sound", int(GameObject::eActionTypeSound)),
                    value("action_particle", int(GameObject::eActionTypeParticle)),
                    value("action_object", int(GameObject::eActionTypeObject)),
                    value("actor_sleep", int(GameObject::eActorSleep)),
                    value("helicopter_on_point", int(GameObject::eHelicopterOnPoint)),
                    value("helicopter_on_hit", int(GameObject::eHelicopterOnHit)),
                    value("on_item_take", int(GameObject::eOnItemTake)),
                    value("on_item_drop", int(GameObject::eOnItemDrop)),
                    value("script_animation", int(GameObject::eScriptAnimation)),
                    value("task_state", int(GameObject::eTaskStateChange)),
                    value("take_item_from_box", int(GameObject::eInvBoxItemTake)),
                    value("map_location_added", int(GameObject::eMapLocationAdded)),
                    value("on_item_in_slot", int(GameObject::eOnItemInSlot))
                    /************************************************** added by Ray Twitty (aka Shadows) START **************************************************/
                    // клавиатура/мышь
                    value("on_key_press", int(GameObject::eonKeyPress)),
                    value("on_key_release", int(GameObject::eOnKeyRelease)),
                    value("on_key_hold", int(GameObject::eOnKeyHold)),
                    value("on_mouse_move", int(GameObject::eonMouseMove)),
                    value("on_mouse_wheel", int(GameObject::eonMouseWheel)),
                    // инвентарь
                    value("on_item_belt", int(GameObject::eOnItemBelt)),
                    value("on_item_slot", int(GameObject::eOnItemSlot)),
                    value("on_item_ruck", int(GameObject::eOnItemRuck)),
                    // фонарь
                    value("switch_torch", int(GameObject::eSwitchTorch)),
                    /*************************************************** added by Ray Twitty (aka Shadows) END ***************************************************/                
                    // Added by Cribbledirge Start
                    value("on_mouse_press", int(GameObject::eOnMousePress)),
                    value("on_mouse_release", int(GameObject::eOnMouseRelease)),
                    value("on_mouse_hold", int(GameObject::eOnMouseHold)),
                    value("on_actor_weapon_fire", int(GameObject::eOnActorWeaponFire)),
                    value("on_actor_weapon_reload", int(GameObject::eOnActorWeaponReload)),
                    value("on_actor_weapon_jammed", int(GameObject::eOnActorWeaponJammed)),
                    value("on_actor_weapon_empty", int(GameObject::eOnActorWeaponEmpty)),
                    value("on_actor_weapon_zoom_in", int(GameObject::eOnActorWeaponZoomIn)),
                    value("on_actor_weapon_zoom_out", int(GameObject::eOnActorWeaponZoomOut))
FantomICW
Vampir35, а, ну ясно. Я ковыряю чистые сорсы, а ты - ревизию Шэдоуса smile.gif
Vampir35
Цитата(FantomICW @ 12.08.2014, 21:14) *
Vampir35, а, ну ясно. Я ковыряю чистые сорсы, а ты - ревизию Шэдоуса smile.gif

Просто я обычно ковыряю последнюю ревизию) в ней сделано больше smile.gif
Билдоман
В сурсах лежат контакты разрабов)
Asterix
Vampir35, кинь ссыль на 108 ревизию

Кстати, кто-нибудь уже сделал выгрузку текстур из G буфера и динамических моделей в сорцах ЧН?
Vampir35
Цитата(Mcbeat7 @ 12.08.2014, 21:49) *
Vampir35, кинь ссыль на 108 ревизию

Кстати, кто-нибудь уже сделал выгрузку текстур из G буфера и динамических моделей в сорцах ЧН?

Так она через СВН обновляется)
Ссылки для svn у меня к сожалению нету smile.gif
Asterix
Vampir35, там код, а мне скомпилированный билд надо.
вот ссылка на репозиторий https://xp-dev.com/svn/xray/
Vampir35
Цитата(Mcbeat7 @ 12.08.2014, 22:00) *
Vampir35, там код, а мне скомпилированный билд надо.
вот ссылка на репозиторий https://xp-dev.com/svn/xray/

Чуть позже скомпилю и кину)
Asterix
Vampir35, спасибо тебе милый человекwink.gif
FantomICW
Цитата(Vampir35 @ 12.08.2014, 22:20) *
я обычно ковыряю последнюю ревизию

Прости, я немного выпавший)) Это ЧН- или ТЧ-сорсы?
Vampir35
Цитата(FantomICW @ 12.08.2014, 22:34) *
Цитата(Vampir35 @ 12.08.2014, 22:20) *
я обычно ковыряю последнюю ревизию

Прости, я немного выпавший)) Это ЧН- или ТЧ-сорсы?

FantomICW', ТЧ)
Mcbeat7, да не за что)
MegaNub
Насчёт моей ошибки (вылет после загрузки Spawn Points), если кому интересно, виноват оказался fsgame.ltx, $level$, $textures$ не должны находиться сразу после $app_data_root$. (Желательно чтобы они находились в конце fsgame.ltx)
Vampir35
Скомпиленная ревизия 108, раскомментированы все дефайны: максимум правок smile.gif . От себя добавил только исправленный system.ltx, чтобы при попытке сменить предмет в слоте ножа, бинокля и остального не было вылета без лога smile.gif
Инвентарь конечно в непотребном виде, но тут каждый настроит под себя сам)
Удалить папки gamedata и bin из 6 патча, а потом накинуть туда содержимое архива
Vampir35
Товарищи двиглоправы smile.gif
Есть у меня такой вопрос, вроде как не нашел я этого функционала из x-ray extensions в ревизии, может ли кто воплотить их? Функции нужные все-таки)
Код
Манипуляции костями скелета мировой модели и худа
[ТЧ]

get_wpn_bone_id(bone_name) - получить индекс кости по её имени для объекта оружия, получаем индекс кости
get_hud_bone_id(bone_name) - получить индекс кости по её имени для худа объекта, получаем индекс кости
get_hud_bone_pos(bone_name) - получить положение кости худа по её имени, получаем vector
get_wpn_bone_visible(bone_name) - получить видимость кости мировой модели объекта оружия (возвращает 1/0)
set_wpn_bone_visible(bone_name, 1|0) - установить видимость кости мировой модели объекта оружия
set_hud_bone_visible(bone_name, 1|0) - установить видимость кости худа объекта
get_bone_visible(bone_name) - получить видимость кости мировой модели объекта (возвращает 1/0)
set_bone_visible(bone_name, 1|0) - установить видимость кости объекта
play_hud_animation(animation_name, mix_in) - проиграть анимацию худа (анимация должна присутствовать в модели). Второй аргумент (true|false) определяет плавность перехода
ini_file object:get_visual_ini() - получить внутренний конфиг модели. Это конфиг, который можно редактировать только в Actor Editor. Многие объекты хранят там свои настройки (машины, прожектора и т.п.)
K.D.
Цитата(Mcbeat7 @ 12.08.2014, 21:49) *
выгрузку текстур из G буфера

Что?
Vampir35
K.D, ведь еще шейдеры для тепловизора были в 6 патче, в седьмом это предвидится?)
alpet
Уф, проделал огромную работу по экспорту свойств актора в скрипты. Теперь можно как в NLC изменять его параметры в реальном времени, и даже чуть больше )
Хочу обнародовать призыв к использованию интерфейсов (Luabind оберток для C++ классов), вместо прямого засорения методами и свойствами общего класса CScriptGameObject (в скриптах - game_object). Самый обыкновенный пример получения интерфейса - метод game_object:get_hanging_lamp(). В ревизии 110 я добавил метод получения интерфейса актора game_object:get_actor()

Теперь пример кода, как получать предмет выбранный мышью в открытом инвентаре:
Код
local a = db.actor:get_actor()
if a then
   local itm = a.inventory.selected_item
   if itm then
     wprintf(" selected item %s ", itm:name())
   end
end
Vampir35
Ничего себе, огромное тебе спасибо, Alpet, вещь очень нужная, слушай, то есть этим же методом можно получать параметры из actor.ltx? Jump_speed например.
alpet
Цитата(Vampir35 @ 13.08.2014, 15:40) *
Ничего себе, огромное тебе спасибо, Alpet, вещь очень нужная, слушай, то есть этим же методом можно получать параметры из actor.ltx? Jump_speed например.

Получать и менять можно. Включая коэффициенты иммунитета и дисперсию.
Код
CActor - свойства актора
CActor.inventory  - свойства инвентаря
CActor.condition   - свойства кондиции
CActor.movement - свойства контроля перемещения

Несколько позже постараюсь все занести в Wiki с подробностями.
HikeR
Цитата(alpet @ 13.08.2014, 15:37) *
Хочу обнародовать призыв к использованию интерфейсов

они быстрее и/или менее ресурсоемкие?
FantomICW
Может, давайте указывать, на какую платформу и версию сорсов делается очередная правка?)
jamakasi
Скорее нужна отдельная тема для сорцев ЧН дабы точно никто не путался.
Vampir35
110 ревизия это уже апприори ТЧ) на ЧН пока столько не сделали smile.gif
alpet
Цитата(HikeR @ 13.08.2014, 15:48) *
они быстрее и/или менее ресурсоемкие?

Если честно, я не уверен насчет скорости. Зависит от оптимальности поиска методов Luabind, при обработке как я понимаю метаметода __index. Если там двоичный поиск по дереву типа boost::map, то заметного выигрыша не будет.

Мне-же больше хочется следующего добиться:
1. Избежать запутывания кода сценариев и при этом пользоваться полиморфизмом на объектах.
2. Упростить совместимость скриптов с прошлыми версиями X-Ray, поскольку скажем в комбинации с перехватчиком или X-Ray Extensions можно сделать скриптовые аналоги интерфейсов (метатаблицы нам помогут!). Конечно можно добавлять методы и в game_object с помощью перехвата __index, но это кажется очень дорогим в плане производительности.
3. Чтобы все было красиво и элегантно smile.gif Чем не может являться класс с сотнями методов и свойств.
FantomICW
jamakasi, оно-то так, но:
Цитата(Loxotron @ 09.08.2014, 07:23) *
отдельные темы по сабжу в разделе прошу не создавать.
Asterix
K.D., ты уже правишь сорцы ЧН?

Очистка текстур G-буфера(если ты не понял)
abramcumner
Цитата(alpet @ 13.08.2014, 16:00) *
и при этом пользоваться полиморфизмом на объектах.

get_actor(), с какой стороны ни глянь, совсем не полиморфизм

Цитата
3. Чтобы все было красиво и элегантно smile.gif Чем не может являться класс с сотнями методов и свойств.

Раньше, например, было элегантно: ГГ и НПЦ обрабатывались единообразно, а сейчас get_actor, get_npc

Цитата
a.inventory.selected_item

А это вообще ужас-ужас

Цитата(Mcbeat7 @ 13.08.2014, 16:43) *
Очистка текстур G-буфера(если ты не понял)

biggrin.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.