Форум администраторов игровых серверов

Форум администраторов игровых серверов (https://forum.zone-game.info/TT.php)
-   Работа со скриптами (https://forum.zone-game.info/forumdisplay.php?f=37)
-   -   Баф, и гнев шиид (https://forum.zone-game.info/showthread.php?t=12970)

krisadr 10.03.2011 15:49

Re: Баф, и гнев шиид
 
Код:

6169        1        u,Гнев Шиид\0        u,Слышится плач Шиид. Кажется, все монстры вокруг стали сильнее.\0        a,none\0        a,none\0

6171        1        u,Необоримая Воля\0        u,У Вас хватило сил на то, чтобы выйти из-под вражеского влияния. Все ваши способности улучшены.\0        a,none\0        a,none\0

взято с skillname-ru.

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

Добавлено через 30 минут
немного отошли от темы... в каком классе мне прописать выше упомянутый мне код, по моему точно не в onKill и не в onAddEvent а где тогда?ооО

ANZO 10.03.2011 18:41

Re: Баф, и гнев шиид
 
Скила вообще-то 3. Баф для мобов, баф и дебаф для игроков

krisadr 10.03.2011 19:37

Re: Баф, и гнев шиид
 
блин, скажите мне, это щас пренципиально важно? я целый день мучаюсь над этим аи __) а вы про количество бафов рассуждаете.. спасибо конешно но пока что не пашет нифига

Gaikotsu 11.03.2011 00:00

Re: Баф, и гнев шиид
 
ну если ты хочешь изначально неправильно сделать по баффам, то зачем тебе мучения со всем этим - объяви зону со скиллом действующим всегда и все :)

а так, вот твои скиллы по птс, как видишь их 3 штуки завязано все же, а не 2.
Код:

skill_begin        skill_name = [s_area_stakato_nest_fury_for_pc]        skill_id = 6169        level = 1        operate_type = A2        magic_level = 83        self_effect = {}        effect = {}        end_effect = {}        is_magic = 0        mp_consume2 = 0        cast_range = -1        effective_range = -1        skill_hit_time = 0        skill_cool_time = 0        skill_hit_cancel_time = 0        reuse_delay = 0        activate_rate = -1        lv_bonus_rate = 0        basic_property = none        abnormal_time = 60        abnormal_lv = 1        abnormal_type = public_slot        abnormal_instant = 0        irreplaceable_buff = 0        buff_protect_level = 0        attribute = {attr_none;0}        trait = {trait_none}        effect_point = -100        target_type = target        affect_scope = single        affect_limit = {0;0}        next_action = none        debuff = 1        ride_state = {@ride_none}        multi_class = 0        olympiad_use = 1        skill_end

skill_begin        skill_name = [s_area_stakato_nest_fury]        skill_id = 6170        level = 1        operate_type = A2        magic_level = 83        self_effect = {}        effect = {{p_physical_attack;{all};5;per};{p_magical_attack;{all};5;per};{p_magic_critical_dmg;{all};5;per};{p_critical_damage;{all};5;per};{p_attack_speed;{all};5;per};{p_magic_speed;{all};5;per}}        end_effect = {}        is_magic = 0        mp_consume2 = 0        cast_range = -1        effective_range = -1        skill_hit_time = 0        skill_cool_time = 0        skill_hit_cancel_time = 0        reuse_delay = 0        activate_rate = -1        lv_bonus_rate = 0        basic_property = none        abnormal_time = 60        abnormal_lv = 1        abnormal_type = multi_buff        abnormal_instant = 0        irreplaceable_buff = 1        buff_protect_level = 0        attribute = {attr_none;0}        trait = {trait_none}        effect_point = 100        target_type = target        affect_scope = single        affect_limit = {0;0}        next_action = none        debuff = 0        ride_state = {@ride_none}        multi_class = 0        olympiad_use = 1        skill_end

skill_begin        skill_name = [s_area_stakato_nest_replete_power]        skill_id = 6171        level = 1        operate_type = A2        magic_level = 83        self_effect = {}        effect = {{p_physical_attack;{all};5;per};{p_magical_attack;{all};5;per};{p_magic_critical_dmg;{all};5;per};{p_critical_damage;{all};5;per};{p_attack_speed;{all};5;per};{p_magic_speed;{all};5;per}}        end_effect = {}        is_magic = 0        mp_consume2 = 0        cast_range = -1        effective_range = -1        skill_hit_time = 0        skill_cool_time = 0        skill_hit_cancel_time = 0        reuse_delay = 0        activate_rate = -1        lv_bonus_rate = 0        basic_property = none        abnormal_time = 60        abnormal_lv = 1        abnormal_type = ultimate_buff        abnormal_instant = 0        irreplaceable_buff = 1        buff_protect_level = 0        attribute = {attr_none;0}        trait = {trait_none}        effect_point = 100        target_type = target        affect_scope = single        affect_limit = {0;0}        next_action = none        debuff = 0        ride_state = {@ride_none}        multi_class = 0        olympiad_use = 1        skill_end


krisadr 11.03.2011 00:46

Re: Баф, и гнев шиид
 
Да какая разница хоть я там 10 бафов запихаю, у нас раздел скрипты а не дата пак. кто помог тому спасибки кинул. вроде получилось - завтра выложу. да к стати кто вам сказал что я стремлюсь все как по оффу зделать... я лублю и отсебячину добавить...

kork80 11.03.2011 01:04

Re: Баф, и гнев шиид
 
Цитата:

Сообщение от PaInKiLlEr (Сообщение 112054)
данный АИ что на лыже что на фениксе делается минимум 2 минуты, максимум 5 минут

Оспади, умников то сколько. Разве тебя спрашивали сколько делается данный АИ? А слабо потратить две минуты жизни на помощь человеку? Или просто балабол?

PaInKiLlEr 11.03.2011 01:50

Re: Баф, и гнев шиид
 
kork80
а ты мне сначало заплати а потом помогу, а за бесплатно не помогаю :pandaredlol:

krisadr 11.03.2011 22:23

Re: Баф, и гнев шиид
 
Цитата:

Сообщение от PaInKiLlEr (Сообщение 112485)
kork80
а ты мне сначало заплати а потом помогу, а за бесплатно не помогаю :pandaredlol:

конешно хорошо когда ценят свой труд. но в данной ситуации... это низко
что вы тогда делаете на этом форуме в данном разделе? ищете кому бы помочь за 100 руб в написании квеста? (не прими близко к сердцу просто мысли)

PaInKiLlEr 12.03.2011 04:07

Re: Баф, и гнев шиид
 
krisadr
еслиб я хотел кому то помогать за 100 рублей, я бы наверное создал тему о своих услугах, не так ли?
П.С. у меня свои интересы к форуму а отвечать в чужих темах еще никто не отменял

krisadr 12.03.2011 23:43

Re: Баф, и гнев шиид
 
Вообщем, рылся в своей сборке, смотрел разные АИ и написал по их типажу свой... смотрим что получилось))
Код:

package ai.individual.raidboss;

import java.util.Collection;
import java.util.concurrent.ScheduledFuture;

import com.l2dc.gameserver.ThreadPoolManager;
import com.l2dc.gameserver.datatables.SkillTable;
import com.l2dc.gameserver.instancemanager.ZoneManager;
import com.l2dc.gameserver.model.L2Skill;
import com.l2dc.gameserver.model.actor.L2Character;
import com.l2dc.gameserver.model.actor.L2Npc;
import com.l2dc.gameserver.model.actor.instance.L2PcInstance;
import com.l2dc.gameserver.model.zone.L2ZoneType;
import com.l2dc.gameserver.network.serverpackets.ExSetCompassZoneCode;

import ai.group_template.L2AttackableAIScript;

/**
  * @author z00m
 */

public class QueenShyeed extends L2AttackableAIScript
{
        private static final int Queen_Shyeed = 25514;
        private static final int Stacato_Nest_Zone = 12030;
        protected ScheduledFuture<?> _zoneTask = null;
       
        public QueenShyeed(int questId, String name, String descr) {
                super(questId, name, descr);
                addEnterZoneId(Stacato_Nest_Zone);
                addExitZoneId(Stacato_Nest_Zone);
        }
       
        public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
        {
                if(event.equalsIgnoreCase("PlayerEnterInZone"))
                {
                        player.sendPacket(new ExSetCompassZoneCode(ExSetCompassZoneCode.ALTEREDZONE));
                }
                else if(event.equalsIgnoreCase("PlayerExitZone"))
                {
                        player.sendPacket(new ExSetCompassZoneCode(ExSetCompassZoneCode.GENERALZONE));
                }
                return null;
        }
       
        public String onEnterZone(L2Character character, L2ZoneType zone)
        {
                if (character instanceof L2PcInstance)
                {
                        startQuestTimer("PlayerEnterInZone", 1000, null, (L2PcInstance) character);
                        if (!IsPlayer(zone) && _zoneTask == null)
                        {
                                character.sendMessage("Вы входите в Гнездо Стакато.");
                                _zoneTask = ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new StacatoBuffTask(), 1000, 1001);
                        }
                }
                return super.onEnterZone(character, zone);
        }
       
        public String onExitZone(L2Character character, L2ZoneType zone)
        {
                if (character instanceof L2PcInstance)
                {
                        startQuestTimer("PlayerExitZone", 1000, null, (L2PcInstance) character);
                        if (HowManyPlayersInZone(zone) == 1 && _zoneTask != null)
                        {
                                _zoneTask.cancel(true);
                                _zoneTask = null;
                        }
                }
                return super.onExitZone(character, zone);
        }
        // Если 1 то Каролева Стакато жива, если 0 - то нет.
        private int QueenShyeedIsAlive()
        {
                int _QueenShyeedIsAlive = 0;
                final L2ZoneType zone = ZoneManager.getInstance().getZoneById(Stacato_Nest_Zone);
                final Collection<L2Character> charsInZone = zone.getCharactersInside().values();
                for (L2Character c: charsInZone)
                {
                        if (c instanceof L2Npc)
                        {
                                if(((L2Npc) c).getNpcId() == Queen_Shyeed)
                                {
                                        _QueenShyeedIsAlive = 1;
                                }
                        }
                }
                return _QueenShyeedIsAlive;
        }
       
        private boolean IsPlayer(L2ZoneType zone)
        {
                final Collection<L2Character> charsInZone = zone.getCharactersInside().values();
                for (L2Character player : charsInZone)
                {
                        if(player instanceof L2PcInstance)
                        {
                                return true;
                        }
                }
                return false;
        }
       
        private int HowManyPlayersInZone(L2ZoneType zone)
        {
                int count = 0;
                final Collection<L2Character> numb = zone.getCharactersInside().values();
                for (L2Character numbchar : numb)
                {
                        if (numbchar instanceof L2PcInstance)
                        {
                                count++;
                        }
                }
                return count;
        }
       

        private class StacatoBuffTask implements Runnable
        {
                public void run()
                {
                        final L2ZoneType zone = ZoneManager.getInstance().getZoneById(Stacato_Nest_Zone);
                        if (HowManyPlayersInZone(zone) > 0)
                        {
                                int skillId = 0;
                                final Collection<L2Character> charsInZone = zone.getCharactersInside().values();
                                for (L2Character chars : charsInZone)
                                {
                                        if (QueenShyeedIsAlive() == 1)
                                        {
                                                if (chars instanceof L2PcInstance)
                                                {
                                                        skillId = 6169;
                                                        handleNestBuff(chars, skillId);
                                                }
                                                if (chars instanceof L2Npc)
                                                {
                                                        skillId = 6170;
                                                        handleNestBuff(chars, skillId);
                                                }
                                        }
                                        if (QueenShyeedIsAlive() == 0)
                                        {
                                                if (chars instanceof L2PcInstance)
                                                {
                                                        skillId = 6171;
                                                        handleNestBuff(chars, skillId);
                                                }
                                        }
                                }
                        }
                        if (_zoneTask != null)
                        {
                                _zoneTask.cancel(true);
                                _zoneTask = null;
                        }
                }
               
                private void handleNestBuff(L2Character character, int skillId)
                {
                        if (skillId == 6169)
                        {
                                character.stopSkillEffects(6171);
                        }
                        if (skillId == 6171)
                        {
                                character.stopSkillEffects(6169);
                        }
                        if (character.getFirstEffect(skillId) == null)
                        {
                                L2Skill skill = SkillTable.getInstance().getInfo(skillId, 1);
                                skill.getEffects(character, character);
                        }
                }
        }
        public static void main(String[] args)
        {
                new QueenShyeed(-1, "QueenShyeed", "ai");
        }
}

Работает все нормально, да вот только одна трудность... Баф дается только когда входишь в зону, а как только он закончился, а ты остаешься в зоне, он заново не накладывается... придется заново в зону заходить.
Вопрос к знающим что лучше сделать?
1) Сделать время скиллов бесконечным и лиш на выходе из зоны снимать их (как сделать?)
2) Каким нить образом зациклить метод выдачи бафа\дебафа до тех пор пока персонаж не покинул зону.


Текущее время: 11:12. Часовой пояс GMT +3.

Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot