--===================================== -- Проверка возможности использования навыка "Духовное очищение" --===================================== -- Параметры: -- MapID - ID карты -- InstanceID - ID инстанса -- SkillID - ID навыка (2010701) -- RoleID - ID игрока, использующего навык -- TargetID - ID цели function linghunjinghua_canuse(MapID, InstanceID, SkillID, RoleID, TargetID) -- Инициализация флага возможности использования local bool = false -- Проверяем, является ли цель игроком if unit.IsPlayer(TargetID) then -- Для игроков: проверяем наличие одного из специальных баффов духовного мира -- 61003, 61001, 60006 - ID баффов духовного мира if role.IsRoleHaveBuff(MapID, InstanceID, TargetID, 61003) or role.IsRoleHaveBuff(MapID, InstanceID, TargetID, 61001) or role.IsRoleHaveBuff(MapID, InstanceID, TargetID, 60006) then bool = true end else -- Для существ: проверяем тип существа и наличие соответствующих баффов local TypeID = cre.GetCreatureTypeID(MapID, InstanceID, TargetID) -- 1099002 - специальный тип существа (всегда доступно) if TypeID == 1099002 then bool = true -- 1099001 - требует баффа 61000 elseif TypeID == 1099001 and cre.IsHaveBuff(MapID, InstanceID, TargetID, 61000) then bool = true -- Диапазон 2051001-2051060: существа с баффом 61000 elseif TypeID >= 2051001 and TypeID <= 2051060 and cre.IsHaveBuff(MapID, InstanceID, TargetID, 61000) then bool = true -- Диапазон 2012001-2013034: существа с баффом 61000 elseif TypeID >= 2012001 and TypeID <= 2013034 and cre.IsHaveBuff(MapID, InstanceID, TargetID, 61000) then bool = true -- Диапазон 1080001-1080140: существа с баффом 61002 elseif TypeID >= 1080001 and TypeID <= 1080140 and cre.IsHaveBuff(MapID, InstanceID, TargetID, 61002) then bool = true -- 1099003 - требует баффа 61004 elseif TypeID == 1099003 and cre.IsHaveBuff(MapID, InstanceID, TargetID, 61004) then bool = true -- Закомментированный код для существ 5610007-5610010 (возможно, отключенная функциональность) elseif TypeID >= 5610007 and TypeID <= 5610010 then bool = true -- 1098403 - требует баффа 61004 elseif TypeID == 1098403 and cre.IsHaveBuff(MapID, InstanceID, TargetID, 61004) then bool = true -- Закомментированный код для существ 5610004-5610006 --[[elseif TypeID >= 5610004 and TypeID <= 5610006 and cre.IsHaveBuff(MapID, InstanceID, TargetID, 61002) then bool = true]] -- Диапазоны 1099004-1099020 и 1098001-1098009: требуют баффа 60007 elseif ((TypeID >= 1099004 and TypeID <= 1099020) or (TypeID >= 1098001 and TypeID <= 1098009)) and cre.IsHaveBuff(MapID, InstanceID, TargetID, 60007) then bool = true -- 1099021 - требует баффа 61008 elseif TypeID == 1099021 and cre.IsHaveBuff(MapID, InstanceID, TargetID, 61008) then bool = true end end -- Проверяем результат проверки условий if not bool then -- Если условия не выполнены - отправляем сообщение об ошибке local MsgID = msg.BeginMsgEvent() msg.AddMsgEvent(MsgID, 26, 440101) -- "Цель не находится в состоянии духовного мира, невозможно использовать очищение" msg.DispatchRoleMsgEvent(RoleID, MsgID) return 999 -- Код ошибки - навык нельзя использовать elseif role.GetRoleItemNum(RoleID, 4810005) < 1 then -- Проверяем наличие необходимого предмета (4810005 - вероятно, "Духовная эссенция") local MsgID = msg.BeginMsgEvent() msg.AddMsgEvent(MsgID, 26, 440102) -- "У вас недостаточно духовных лекарств для использования очищения" msg.DispatchRoleMsgEvent(RoleID, MsgID) return 999 -- Код ошибки - недостаточно предметов else return 0 -- Успешно - навык можно использовать end end -- Регистрируем функцию проверки возможности использования навыка -- 2010701 - ID навыка "Духовное очищение" -- 0 - тип события (проверка перед использованием) aux.RegisterSkillEvent(2010701, 0, "linghunjinghua_canuse") --===================================== -- Применение навыка "Духовное очищение" --===================================== function linghunjinghua_Cast(MapID, InstanceID, SkillID, RoleID, TargetID) -- Удаляем 1 единицу предмета 4810005 (Духовная эссенция) из инвентаря игрока -- 420 - возможно, тип предмета или причина удаления role.RemoveFromRole(MapID, InstanceID, RoleID, 4810005, 1, 420) -- Обрабатываем применение навыка в зависимости от типа цели if unit.IsPlayer(TargetID) then -- Для игроков: снимаем соответствующие баффы и даем веру if role.IsRoleHaveBuff(MapID, InstanceID, TargetID, 61003) then -- Снимаем бафф 6100301 (связанный с 61003) unit.CancelBuff(MapID, InstanceID,TargetID,6100301) -- Даем 40 единиц веры игроку, применившему навык getFaith(MapID, InstanceID, 40, RoleID) elseif role.IsRoleHaveBuff(MapID, InstanceID, TargetID, 61001) then -- Снимаем бафф 6100101 (связанный с 61001) unit.CancelBuff(MapID, InstanceID,TargetID,6100101) getFaith(MapID, InstanceID, 40, RoleID) elseif role.IsRoleHaveBuff(MapID, InstanceID, TargetID, 60006) then -- Снимаем бафф 6000601 (связанный с 60006) unit.CancelBuff(MapID, InstanceID,TargetID,6000601) getFaith(MapID, InstanceID, 40, RoleID) end else -- Для существ: применяем различные эффекты в зависимости от типа local TypeID = cre.GetCreatureTypeID(MapID, InstanceID, TargetID) -- 1099002: добавляем бафф 6100501, даем 20 веры if TypeID == 1099002 then unit.AddBuff(MapID, InstanceID,TargetID,6100501,TargetID) getFaith(MapID, InstanceID, 20, RoleID) -- 1099001: добавляем бафф 6101301, даем 10 веры elseif TypeID == 1099001 then unit.AddBuff(MapID, InstanceID,TargetID,6101301,TargetID) getFaith(MapID, InstanceID, 10, RoleID) -- Диапазон 2051001-2051060: добавляем бафф 6100701, даем 20 веры elseif TypeID >= 2051001 and TypeID <= 2051060 then unit.AddBuff(MapID, InstanceID,TargetID,6100701,TargetID) getFaith(MapID, InstanceID, 20, RoleID) -- Диапазон 2012001-2013034: добавляем бафф 6100701, даем 20 веры elseif TypeID >= 2012001 and TypeID <= 2013034 then unit.AddBuff(MapID, InstanceID,TargetID,6100701,TargetID) getFaith(MapID, InstanceID, 20, RoleID) -- Диапазон 1080001-1080140: снимаем бафф 6100201, даем 30 веры elseif TypeID >= 1080001 and TypeID <= 1080140 then unit.CancelBuff(MapID, InstanceID,TargetID,6100201) getFaith(MapID, InstanceID, 30, RoleID) -- 1099003: добавляем бафф 6100601, даем 20 веры, дополнительная логика HP elseif TypeID == 1099003 then unit.AddBuff(MapID, InstanceID,TargetID,6100601,TargetID) getFaith(MapID, InstanceID, 20, RoleID) -- Дополнительная логика для типа 1099003: проверяем здоровье существа local maxhp = unit.GetUnitAttValue(MapID, InstanceID, TargetID, 8) -- Максимальное HP (атрибут 8) local nowhp = unit.GetUnitAttValue(MapID, InstanceID, TargetID, 9) -- Текущее HP (атрибут 9) -- Если текущее HP меньше половины максимального, снимаем бафф 6100401 if nowhp > 0 and maxhp/nowhp >= 2 then unit.CancelBuff(MapID, InstanceID,TargetID,6100401) end -- Закомментированная логика для существ 5610007-5610010: -- Создавала новое существо рядом и наносила урон --[[elseif TypeID >= 5610007 and TypeID <= 5610010 then getFaith(MapID, InstanceID, 10, RoleID) local x,y,z = GetPosition(MapID, InstanceID,TargetID) -- Получаем позицию существа MapCreateCreature(MapID, InstanceID, TargetID+430000,x,y,z) -- Создаем новое существо unit.ChangeHP(MapID, InstanceID, TargetID, -100)]] -- Наносим 100 урона -- 1098403: добавляем бафф 6101301, даем 20 веры elseif TypeID == 1098403 then unit.AddBuff(MapID, InstanceID,TargetID,6101301,TargetID) getFaith(MapID, InstanceID, 20, RoleID) -- Закомментированная логика для существ 5610004-5610006: -- Снимала бафф и давала предмет игроку --[[elseif TypeID >= 5610004 and TypeID <= 5610006 then unit.CancelBuff(MapID, InstanceID,TargetID,6100201) getFaith(MapID, InstanceID, 10, RoleID) role.AddRoleItem(MapID, InstanceID, RoleID, 4810019, 1, -1, 1, 104)]] -- Даем предмет 4810019 -- Диапазоны 1099004-1099020 и 1098001-1098009: снимаем бафф 6000701, даем 40 веры elseif ((TypeID >= 1099004 and TypeID <= 1099020) or (TypeID >= 1098001 and TypeID <= 1098009)) then unit.CancelBuff(MapID, InstanceID,TargetID,6000701) getFaith(MapID, InstanceID, 40, RoleID) -- 1099021: снимаем бафф 6100801, добавляем 6100901 (6101001 закомментирован), даем 20 веры elseif TypeID == 1099021 then unit.CancelBuff(MapID, InstanceID,TargetID,6100801) --unit.AddBuff(MapID, InstanceID,TargetID,6101001,TargetID) -- Альтернативный бафф (закомментирован) unit.AddBuff(MapID, InstanceID,TargetID,6100901,TargetID) getFaith(MapID, InstanceID, 20, RoleID) end end return 1 -- Возвращаем успешный результат применения навыка -- Вспомогательные комментарии с примерами использования функций: -- unit.GetUnitAttValue(MapID, InstanceID, UnitID, AttributeID) - получение значения атрибута юнита -- unit.AddBuff(MapID, InstanceID, UnitID, BuffID, CasterID) - добавление баффа на юнита -- -- cre.IsHaveBuff(MapID, InstanceID, CreatureID, BuffID) - проверка наличия баффа у существа end -- Регистрируем функцию применения навыка -- 2010701 - ID навыка "Духовное очищение" -- 5 - тип события (применение навыка) aux.RegisterSkillEvent(2010701, 5, "linghunjinghua_Cast")