The New Future :: FOnline Roleplay 2019 :: Действующий ролевой сервер  

Вернуться   The New Future :: FOnline Roleplay 2019 :: Действующий ролевой сервер > Fallout Roleplay 2019 > FOmod > Учебка

Важная информация

Учебка Обучающие материалы.

Ответ
 
Опции темы Опции просмотра
Старый 03.11.2017, 03:07   #1
Gekko
Senior Member
 
Регистрация: 14.04.2013
Сообщений: 113
Вес репутации: 102
Gekko is on a distinguished road
По умолчанию Динамично меняющийся навык

Как правильно сделать, что бы от текущего макс. здоровья менялся навык рукопашки?
Думается, что в fonline_tla.cpp
Добавил в config
PHP код:
 SetParameterGetBehaviourSK_UNARMEDdllName "getParam_UNARMED"         );, 
В fonline_tla.cpp так:
PHP код:
EXPORT int getParam_UNARMEDCritterMutualcruint )
{
    
int val cr.ParamsSK_UNARMED] - cr.ParamsST_MAX_LIFE ];
    return 
CLAMPval0300 );

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

Последний раз редактировалось Gekko; 03.11.2017 в 03:08.
Gekko вне форума   Ответить с цитированием
Старый 08.11.2017, 17:36   #2
Cracker
Junior Member
 
Регистрация: 21.10.2010
Сообщений: 14
Вес репутации: 0
Cracker has a spectacular aura aboutCracker has a spectacular aura aboutCracker has a spectacular aura about
По умолчанию

Ничего не понял. Но на всякий случай: параметры в скриптах отражаются геттерами и сеттерами, то есть при обращении скажем к Stat[ST_MAX] вызывается функция в движке
int get_Param( Critter& cr, uint ParamIndex )
И эта функция уже вызывает обработчики заданные через функцию SetParameterGetBehaviour, в длл либо в скрипте.

Что это значит и нафига я это пишу?
Просто обращаясь в нативе к cr.Params[ ST_MAX_LIFE ] ты обращаешься напрямую к значению, игнорируя все геттеры. Не делай так, и вместо обращения к значению обращайся к функции геттеру который устанавливаешь параметру.
Конечно это не относится к самому родному для функции параметру, в данном случае к SK_UNARMED.

Код у тебя должен быть примерно таким:

EXPORT int getParam_UNARMED( CritterMutual& cr, uint param )
{
int val = cr.Params[ param] - getParam_MaxLife( cr, ST_MAX_LIFE );
return CLAMP( val, 0, 300 );
}

Последний раз редактировалось Cracker; 08.11.2017 в 17:36.
Cracker вне форума   Ответить с цитированием
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 21:30.


Powered by vBulletin® Version 3.8.3
Copyright ©2000 - 2021, Jelsoft Enterprises Ltd. Перевод: zCarot
Для внутреннего пользования