Новости В Of Ash and Steel начался закрытый плейтест
  • 3.966
  • 9
Разработчики "Русской Готики" объявили о старте закрытого плейтеста. Если вы оставляли заявку на участие, не забудьте проверить электронную почту или посмотреть свою библиотеку - возможно игра уже...
С Днём России!
  • 5.061
  • 6
Дорогие друзья! Поздравляю вас с Днём России! Этот праздник напоминает нам о богатой истории и культуре нашей страны, о её величии и непоколебимом духе народа! Желаю вам крепкого здоровья...
Новости Анонсирован Atomic Heart II
Новости Анонсирован ремастер Final Fantasy Tactics
  • 3.281
  • 2
Культовая пошаговая тактическая RPG от Square Enix получит второе дыхание. На проходящей выставке State of Play, где анонсируются игры для Play Station, состоялся анонс ремастера Final Fantasy...

В процессе Эффектные эффекты: как перевесить эффекты(не визуал!) со стрел на само оружие?

Автор
Автор
Е

Ержан

Бродяга
Участник форума
Регистрация
22 Авг 2022
Сообщения
25
Реакции
0
Баллы
8
Лучшие ответы
0
#11
@Ержан,
Код:
func void rx_rangeweapon(var c_npc oth, var c_npc slf, var c_item otherweap){
  rx_rangeweapon_old();
  var int dist;
  dist = npc_getdisttonpc(oth, slf);
    if (hlp_isitem(otherweap, itrw_kmr_darklong_bow_01) == true); разве здесь ненадо
    {
        if (dist <= 3200); и тут тоже
        {
           ast_freezenpc(slf, 4, 1);
           b_magichurtnpc(oth, slf, 15);
        };
    };
};
все равно компилятор пишет, что Expected ',' in line ,где rx_rangeweapon_old();
как-то иначе, наверное, вызывается старая функция в теле новой
 

ToXaL1

Рыцарь
Участник форума
Регистрация
8 Окт 2017
Сообщения
2.764
Реакции
605
Баллы
230
Лучшие ответы
38
#12
@Ержан, так у вас в конце первой строки квадратная скобка вместо ;
 

n1kx

Гвардеец
Локализатор
Участник форума
Регистрация
4 Май 2017
Сообщения
1.730
Реакции
1.218
Баллы
306
Лучшие ответы
140
#13
Когда мы делаем хук старой функции, ей нужно передать аргументы
Код:
func void rx_rangeweapon(var c_npc oth, var c_npc slf, var c_item otherweap){
  rx_rangeweapon_old(oth,slf,otherweap);
 
Автор
Автор
Е

Ержан

Бродяга
Участник форума
Регистрация
22 Авг 2022
Сообщения
25
Реакции
0
Баллы
8
Лучшие ответы
0
#14
Когда мы делаем хук старой функции, ей нужно передать аргументы
Код:
func void rx_rangeweapon(var c_npc oth, var c_npc slf, var c_item otherweap){
  rx_rangeweapon_old(oth,slf,otherweap);
ты абсолютно прав. Заработало. Более того, поскольку функция теперь определена корректно "с петлей" (хуком) для самовызова оригинальной функции, то и все плюшки оригинальной[функции] теперь в полной мере доступны. Урон от отравленных стрел (которые как раз определялись в оригинальной функции) теперь идет корректно, наравне с эффектами от самого лука.
В общем случае, если переопределяем предмет, то делаем так
Код:
instance itmw_2h_orcsword_04(C_ITEM)   // instance код предмета(c_item)
{
itmw_2h_orcsword_04_old();                               // хук на старую версию предмета
value = 500;                                                        // новый код, в данном случае переопределение цены
};
если переопределяем функцию, то делаем так
Код:
func void rx_rangeweapon(var c_npc oth, var c_npc slf, var c_item otherweap)  // какую именно, определяется задумкой и данными из декомпилятора
{
    rx_rangeweapon_old(oth,slf,otherweap);  // вызываем старую функцию с припиской _old , ОБЯЗАТЕЛЬНО указываем аргументы функции, обращая внимание на из написание
  var int dist;                                                 // если в функции старой/новой используются внутренние переменные, то  обязательно их объявляем
  dist = npc_getdisttonpc(oth, slf);   
    if (hlp_isitem(otherweap, itrw_kmr_darklong_bow_01) == true){             // далее новый код, который добавляется к старой функции
        if (dist <= 3200){
           ast_freezenpc(slf, 4, 1);
           b_magichurtnpc(oth, slf, 15);
        };
    };
};
 
Сверху Снизу