https://abyss-lords.ru/ (2)

[ Сегодня были () · Новые сообщения · Правила форума (обновлено) · Поиск · Реклама ]
  • Страница 1 из 1
  • 1
Топ серверов пиратии Go piratia » Серверная » Защита » Защита от рисования скилов
Защита от рисования скилов
duduf Дата: Пятница, 25.07.2014, 23:57 | Сообщение # 1
Офлайн

Начинающий
Сообщений: 2
Награды: 0
Репутация: 4
Замечания: 0%
Часть первая. Скилы монстров и боссов.

Самый простой и решающий 90% проблем со скилами способ - блокировка их изучения.

Открываем skillinfo.txt и выставляем в четвертой колонке заведомо недостижимые требования для изучения необходимых скилов.
Вариант 1. Поставить "-1" - никто скил не может изучить, в т.ч. и с использованием ГМ-команд.
Вариант 2. Поставить "18,10" - 18 это профессия Engineer, которая недоступна в игре. Для изучения ГМ-ом необходимо сначала установить себе необходимую профу (&attr 4,18), затем выучить нужный скил и вернуть профу обратно.

Монстры и боссы и так уже имеют скилы, им их изучать не надо.

Часть вторая. Скилы перерождения.

В текущем способе блокируется возможность использования скилов без необходимого уровня перерождения. Для блокировки возможности изучения обращайтесь к Третьей части.

В function.lua создаем функцию

Код
function getRebirthLevel ( role )
    local zs_exp = GetChaAttr ( role , ATTR_CSAILEXP )
    if zs_exp >= 20000 then
       return 3
    elseif zs_exp >= 10000 then
       return 2
    elseif zs_exp > 0 then
       return 1
    end
    return 0
end


При прохождении третьего РБ установите SEXP персонажа в значение 20000

Изменяем функцию пассивного навыка Сила перерождения

Код
function Skill_Rbmp_Use( role , sklv )  
    if getRebirthLevel (role) >= sklv then  
       local statelv  = sklv   
       local rb_bonus = (-1) * ( 0.050 + 0.005 * sklv ) -- Increases by 5.5%
       local mnatksa  = math.floor (  (MnatkSa (role) - rb_bonus ) * ATTR_RADIX )  
       local mxatksa  = math.floor (  (MxatkSa (role) - rb_bonus ) * ATTR_RADIX )
       local defsa    = math.floor (  (DefSa   (role) - rb_bonus ) * ATTR_RADIX )  
       local ResistSa = math.floor (  (ResistSa(role) - rb_bonus ) * ATTR_RADIX )  
       SetCharaAttr( mnatksa  , role , ATTR_STATEC_MNATK )
       SetCharaAttr( mxatksa  , role , ATTR_STATEC_MXATK )
       SetCharaAttr( defsa    , role , ATTR_STATEC_DEF   )  
       SetCharaAttr( ResistSa , role , ATTR_STATEC_PDEF  )
       ALLExAttrSet(role)    
    end
end


Изменяем содержимое функций активных скилов Skill_EmoYuYan_Begin, Skill_SSSP_Begin, Skill_ShouWangS_Begin, Skill_ArfGX_Begin, Skill_WuYin_Begin, Skill_XYSYF_Begin на

Код
function Skill_xxx_Begin ( role , sklv )  
    if getRebirthLevel (role) < sklv then
       SkillUnable(role)
       SystemNotice(role, "Уровень навыка не соответствует уровню перерождения")
    end
end
 

Вносим изменения в skillinfo.txt, чтобы эти функции вызывались при начале использования скила. Попутно это фиксит двойное снятие маны при использовании Дьявольского проклятия

Код
0453   Духовный удар   1   9,3   1,-1   1,1;1,2   1,-1   -1   2   1   0   -1   -1   0   1   1   0   4   2   0   0   4   0   0   SkillSp_WuYin   0   0   SkillArea_Circle_WuYin   Skill_WuYin_Begin   Skill_WuYin_End   0   0   0   0   0   0   0   0   0   0   0   0   0   0   SkillCooldown_WuYin   1   1   14   0   40   2   0   0   0   0,0   0,0   0   -1   -1   0   0   41   -1   195   -1   939   0   s0453.tga   0   0   Поражает врагов выбросом энергии клинка   Наносит 500 урона окружающим врагам. С уровнем навыка растет урон.   Потребляет 125 МН   0
0454   Сверхсознание   1   16,3   1,-1   1,-1   1,-1   -1   2   1   0   -1   -1   0   1   1   0   4   2   0   0   4   0   SkillArea_State_XYSYF   SkillSp_XYSYF   0   0   SkillArea_Circle_XYSYF   Skill_XYSYF_Begin   Skill_XYSYF_End   0   0   0   0   0   0   0   0   0   0   0   0   0   0   SkillCooldown_XYSYF   1   1   12   0   40   2   0   0   0   0,0   0,0   0   -1   -1   0   0   41   -1   131   -1   0   0   s0454.tga   0   0   Использует удивительную силу мысли для вызова различных предметов, наносящих урон врагу.   1 уровень наносит 180 урона каждые 3 сек в течение 15 сек и увеличивается на 30 урона за каждый уровень навыка.   Постоянное использование 160 МН   0
0455   Сокрушительный удар   1   8,3   1,-1   1,2   1,27;2,825;2,845;2,2367;2,2549   -1   2   1   0   -1   -1   0   1   1   0   4   2   0   0   4   0   0   SkillSp_ShouWangS   0   0   SkillArea_Circle_ShouWangS   Skill_ShouWangS_Begin   Skill_ShouWangS_End   0   0   0   0   0   0   0   0   0   0   0   0   0   0   SkillCooldown_ShouWangS   1   1   12   0   50   -1   102   0   -1   0,0   0,0   -1   -1   -1   0   0   51   -1   0   -1   938   0   s0455.tga   0   0   Замедляет окружающих врагов   Наносит 500 урона окружающим врагам. С уровнем навыка растет урон.   Тратится 125 МН   0    
0456   Пушка грома   1   12,3   1,-1   1,4   1,-1   -1   2   1   0   -1   -1   0   1   1   800   4   2   0   0   1   0   0   SkillSp_ArfGX   0   0   SkillArea_Line_ArfGX   Skill_ArfGX_Begin   Skill_ArfGX_End   0   0   0   0   0   0   0   0   0   0   0   0   0   0   SkillCooldown_ArfGX   1   1   7,8,9   0   106   6,-1   940   0,0   0   0,0   0,0   0   -1   -1   0   0   107   -1   267   -1   0   0   s0456.tga   0   0   Каждая цель в линии получает некоторый урон   Наносит 500 урона врагам на линии. С уровнем навыка растет урон.   Потребляет 105 МН   0
0457   Дьявольское проклятие   1   14,3   1,-1   1,9   1,-1   -1   2   1   0   -1   -1   0   1   1   1200   4   2   0   0   4   0   0   SkillSp_EmoYuYan   0   0   SkillArea_Circle_EmoYuYan   Skill_EmoYuYan_Begin   Skill_EmoYuYan_End   0   0   0   0   0   0   0   0   0   0   0   0   0   0   SkillCooldown_EmoYuYan   1   1   12   0   56   2   0   0   0   0,0   0,0   0   -1   -1   0   0   57   2   0   -1   0   0   s0457.tga   0   0   Вызывает демона, атакующего противника и наносящего ему определенный ущерб. Также снижает защиту, движение, скорость атаки и мо   Наносит ущерб в 150 окружающим врагам. Навык также добавляет к ущербу врагу 35 очков каждую секунду, действует 25 секунд.   Потребляет 155 МН   0
0458   Священный суд   1   13,3   1,-1   1,9   1,-1   -1   2   1   1   -1   -1   0   1   1   0   0   2   0   0   4   0   0   SkillSp_SSSP   0   0   SkillArea_Circle_SSSP   Skill_SSSP_Begin   Skill_SSSP_End   0   0   0   0   0   0   0   0   0   0   0   0   0   0   SkillCooldown_SSSP   1   1   12   0   40   2   0   0   0   0,0   0,0   0   -1   -1   0   0   41   2   0   -1   935   0   s0458.tga   0   0   Восполняет силы, излечивает союзников и поражает противников   Наносит 650 урона окружающим врагам, лечит окружающих союзников на 350 ЖЗ   На уровне 1 используются 140 МН, каждый добавленный уровень навыков использует еще 20 МН.   0


Часть третья. Скилы, апаемые книжками.

Посешн, Кулинария, Производство, Анализ, Ремесло, скилы фей, скилы, получаемые через НПСов или внутренние функции - все это фиксится здесь. Сюда не входят скилы, для изучения которых нужна книга, а потом они апаются плюсиками - скилы на профессии + Рыболовство, Траление, Рубка. 

1. Блокируем изучение необходимых скилов в skillinfo.txt (см. Часть Первую)
2. Патчим ГС, в результате которого мы получим доступ к функции AddSkill, позволяющей изучить навык игнорируя необходимые требования. Эта функция изначально нигде не используется и сама по себе содержит ошибку, приводящую к ее неработоспособности. Пустим ее на благие цели.

Gameserver 1.38

Код
Ищем 83 F8 03 75 43 6A 01 8B 4D 08 51 E8 77 25 16 00
Меняем на 83 F8 04 75 43 6A 01 8B 4D 08 51 E8 77 25 16 00

Ищем 6A 01 6A 01 6A 01 8A 45 BF 50 66 8B 4D C0 51 8B
Меняем на 6A 00 6A 00 6A 01 8A 45 BF 50 66 8B 4D C0 51 8B


Создадим в function.lua функции-врапперы для AddSkill

Код
function AddSimpleSkill( role, skillid, sklv )
    return AddSkill (role, nil, skillid, sklv)
end

function AddLifeSkill( role, skillid, sklv )
    local life_ap = GetChaAttr ( role , ATTR_LIFETP )
    if life_ap < 1 then
       SystemNotice( role, "Недостаточно очков мирных навыков" )
       return LUA_FALSE
    end
    local a = AddSkill (role, nil, skillid, sklv)
    if a == 1 then
       SetCharaAttr( life_ap - 1 , role , ATTR_LIFETP )  
    end
    return a
end


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

Теперь идем в функции нужных книжек и меняем условия вида 

Код
a = AddChaSkill ( role , sk_add, sk_lv , 1 , 0 )
на
a = AddSimpleSkill( role, sk_add, sk_lv )

a = AddChaSkill ( role , sk_add, star_lv , 1 , 1 )
на
a = AddLifeSkill( role, sk_add, star_lv )


Ну и аналогичные замены надо произвести в функциях, где скилы выдаются по квесту, НПСом и пр.

Часть четвертая. Скилы, апаемые плюсиками

Вышеописанные мероприятия решают большинство проблем, связанных с незаконным изучением и использованием скилов. Фикс данного вида скилов для меня, в данный момент, довольно ресурсозатратен. Будет время и возможность - будет и четвертая часть.

P.S. Особо не тестировалось, возможны ошибки
 

Engrain Дата: Вторник, 29.07.2014, 11:15 | Сообщение # 2
Офлайн

Высший ранг (450+)
Сообщений: 705
Награды: 5
Репутация: 20
Замечания: 0%
спасибо,должно помочь

 
Топ серверов пиратии Go piratia » Серверная » Защита » Защита от рисования скилов
  • Страница 1 из 1
  • 1
Поиск:

Правила чата
Мини-чат
+Мини-чат
0