Запрет на использование скиллов

Статус
В этой теме нельзя размещать новые ответы.

asert

Последний из атеистов
Участник
Сообщения
51
Розыгрыши
0
Репутация
31
Реакции
20
Баллы
850
Здравствуйте! Подскажите пожалуйста, можно ли как-то заблокировать атаку скиллами по нпц? ( Без запрета классов )

Код:
class 1 unique_sys : (null)
{
parameter:
    int    WeaponID1 = 0;
    int    WeaponID2 = 0;
    int    WeaponID3 = 0;
    int    WeaponID4 = 0;
    int    WeaponID5 = 0;
    int    PrimaryItem1 = 0;
    int    PrimaryItem2 = 0;
    int    PrimaryItem3 = 0;
    int    PrimaryItem4 = 0;
    int    SecondaryItem1 = 0;
    int    SecondaryCount = 0;
    int    ErrorMsg = 0;
    int    crfpt = 25399;
    int    IsLeather = 0;
    int    DropChance = 45;

handler:
    EventHandler CREATED()
    {
        myself.i_ai0 = 0;
    }

    EventHandler ATTACKED(attacker,damage,i0)
    {
        myself.i_ai0 = ( myself.i_ai0 + 1 );
        if( myself.i_ai0 > 5 && gg::Rand(100) < 20 )
        {
            myself::Despawn();
        }
        if( myself::FloatToInt(myself.sm.x) != myself.start_x )
        {
            myself::InstantTeleport(myself.sm,myself.start_x,myself.start_y,myself.start_z);
        }
        if( gg::Rand(100) > DropChance )
        {
            return;
        }
        if( attacker.equiped_weapon_class_id == WeaponID1 || ( attacker.equiped_weapon_class_id == WeaponID2 || ( attacker.equiped_weapon_class_id == WeaponID3 || ( attacker.equiped_weapon_class_id == WeaponID4 || attacker.equiped_weapon_class_id == WeaponID5  ) ) ) )
        {
            i0 = gg::Rand(100);
            if( i0 < 50 )
            {
                if( attacker.equiped_weapon_class_id == WeaponID5 )
                {
                    myself::GiveItem1(attacker,PrimaryItem1,2);
                }
                else
                {
                    myself::GiveItem1(attacker,PrimaryItem1,1);
                }
                if( gg::Rand(100) < 50 )
                {
                    if( attacker.equiped_weapon_class_id == WeaponID5 )
                    {
                        myself::GiveItem1(attacker,crfpt,2);
                    }
                    else
                    {
                        myself::GiveItem1(attacker,crfpt,1);
                    }
                }
                if( gg::Rand(100) < 50 )
                {
                    if( attacker.equiped_weapon_class_id == WeaponID5 )
                    {
                        myself::GiveItem1(attacker,SecondaryItem1,( gg::Rand(SecondaryCount) + 8 ));
                    }
                    else
                    {
                        myself::GiveItem1(attacker,SecondaryItem1,( gg::Rand(SecondaryCount) + 1 ));
                    }
                }
            }
            if( i0 >= 50 && ( i0 < 85 && ( attacker.equiped_weapon_class_id == WeaponID2 || ( attacker.equiped_weapon_class_id == WeaponID3 || ( attacker.equiped_weapon_class_id == WeaponID4 || attacker.equiped_weapon_class_id == WeaponID5 ) ) ) ) )
            {
                if( i0 >= 50 && ( i0 < 85 && attacker.equiped_weapon_class_id == WeaponID5 ) )
                {
                    myself::GiveItem1(attacker,PrimaryItem2,2);
                }
                else
                {
                    myself::GiveItem1(attacker,PrimaryItem2,1);
                }
                if( gg::Rand(100) < 65 )
                {
                    if( i0 >= 50 && ( i0 < 85 && attacker.equiped_weapon_class_id == WeaponID5 ) )
                    {
                        myself::GiveItem1(attacker,crfpt,2);
                    }
                    else
                    {
                        myself::GiveItem1(attacker,crfpt,1);
                    }
                }
                if( gg::Rand(100) < 65 )
                {
                    if( i0 >= 50 && ( i0 < 85 && attacker.equiped_weapon_class_id == WeaponID5 ) )
                    {
                        myself::GiveItem1(attacker,SecondaryItem1,( gg::Rand(SecondaryCount) + 8 ));
                    }
                    else
                    {
                        myself::GiveItem1(attacker,SecondaryItem1,( gg::Rand(SecondaryCount) + 1 ));
                    }
                }
            }
            if( i0 >= 85 && ( i0 < 99 && ( attacker.equiped_weapon_class_id == WeaponID3 || ( attacker.equiped_weapon_class_id == WeaponID4 || attacker.equiped_weapon_class_id == WeaponID5 ) ) ) )
            {
                if( i0 >= 85 && ( i0 < 99 && attacker.equiped_weapon_class_id == WeaponID5 ) )
                {
                    myself::GiveItem1(attacker,PrimaryItem3,2);
                }
                else
                {
                    myself::GiveItem1(attacker,PrimaryItem3,1);
                }
                if( gg::Rand(100) < 86 )
                {
                    if( i0 >= 85 && ( i0 < 99 && attacker.equiped_weapon_class_id == WeaponID5 ) )
                    {
                        myself::GiveItem1(attacker,crfpt,2);
                    }
                    else
                    {
                        myself::GiveItem1(attacker,crfpt,1);
                    }
                }
                if( gg::Rand(100) < 86 )
                {
                    if( i0 >= 85 && ( i0 < 99 && attacker.equiped_weapon_class_id == WeaponID5 ) )
                    {
                        myself::GiveItem1(attacker,SecondaryItem1,( gg::Rand(SecondaryCount) + 8 ));
                    }
                    else
                    {
                        myself::GiveItem1(attacker,SecondaryItem1,( gg::Rand(SecondaryCount) + 1 ));
                    }
                }
            }
            if( i0 == 99 && ( attacker.equiped_weapon_class_id == WeaponID4 || attacker.equiped_weapon_class_id == WeaponID5 ) )
            {
                if( i0 == 99 && attacker.equiped_weapon_class_id == WeaponID5 )
                {
                    myself::GiveItem1(attacker,PrimaryItem4,2);
                }
                else
                {
                    myself::GiveItem1(attacker,PrimaryItem4,1);
                }
                if( gg::Rand(100) < 99 )
                {
                    if( i0 == 99 && attacker.equiped_weapon_class_id == WeaponID5 )
                    {
                        myself::GiveItem1(attacker,crfpt,2);
                    }
                    else
                    {
                        myself::GiveItem1(attacker,crfpt,1);
                    }
                }
                if( gg::Rand(100) < 99 )
                {
                    if( i0 == 99 && attacker.equiped_weapon_class_id == WeaponID5 )
                    {
                        myself::GiveItem1(attacker,SecondaryItem1,( gg::Rand(SecondaryCount) + 8 ));
                    }
                    else
                    {
                        myself::GiveItem1(attacker,SecondaryItem1,( gg::Rand(SecondaryCount) + 1 ));
                    }
                }
            }
        }
        else
        {
            myself::ShowSystemMessage(attacker,ErrorMsg);
        }
        if( IsLeather == 1 )
        {
            myself::Despawn();
        }
    }

}
 

Do you want to reward only melee attackers? Try this (not checked):

C:
EventHandler ATTACKED (attacker, damage, skill_name_id) {

        if (skill_name_id != 0) {
                return;
            }   
        // do stuff
 
        }
 
  • Мне нравится
Реакции: asert

    asert

    Баллов: 3
    thanks
урон считает движок, так что аи тебе никак не по хорошему поможет, если не плодить костыли, например:

1) Заставить моба восстанавливать себе хп, если его бьют скиллом (skill_name_id есть), но если урон выше числа хп - моб закономерно помрёт
2) Создать бесконечный эффект инвиза и заставить моба баффнуть его, но тогда вообще все атаки заблокирует


если вспоминать тот же тыквенный эвент, там система примерно в том же духе - в движке хардкор на ИД оружий, которыми можно бить и наносить урон тыкве, другими (в т.ч. скиллами) тыква просто урон не получает
 
урон считает движок, так что аи тебе никак не по хорошему поможет, если не плодить костыли, например:

1) Заставить моба восстанавливать себе хп, если его бьют скиллом (skill_name_id есть), но если урон выше числа хп - моб закономерно помрёт
2) Создать бесконечный эффект инвиза и заставить моба баффнуть его, но тогда вообще все атаки заблокирует


если вспоминать тот же тыквенный эвент, там система примерно в том же духе - в движке хардкор на ИД оружий, которыми можно бить и наносить урон тыкве, другими (в т.ч. скиллами) тыква просто урон не получает
Спасибо за ответ. Тут проблема именно не в уроне, а в том, что при ударе моба скиллами ( с нужным инструментом в руке ), выдается награда. Нужно, чтобы награда выдавалась только при ударе по нпц мили атакой.

Do you want to reward only melee attackers? Try this (not checked):

C:
EventHandler ATTACKED (attacker, damage, skill_name_id) {

        if (skill_name_id != 0) {
                return;
            }  
        // do stuff
 
        }
Thank you, that's right, I'll check it out.

Do you want to reward only melee attackers? Try this (not checked):

C:
EventHandler ATTACKED (attacker, damage, skill_name_id) {

        if (skill_name_id != 0) {
                return;
            }  
        // do stuff
 
        }
It works, thanks

Вопрос решен, можно закрыть тему. Всем спасибо за ответ.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху Снизу