Рейтинг темы:
  • 1 Голос(ов) - 1 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
Баф, и гнев шиид
#31
да уж... извращаться дак со вкусом...

ну неужели у тебя там нет возможности просто включать/выключать зоны и ведь наверняка есть тип зон с накладыванием баффа/дебаффа на игроков в этой зоне...
Ответ
#32
ну что то вроде этого есть, тока в XML ках. а как к ним привязать рб беспонятия, у меня же не pheonix

Добавлено через 19 минут
короче решил так делать, потому что как делать по другому не втыкаю, и то этот скрипт весь день писал))) всю субботу потратил... я не шучу

Добавлено через 2 часа 43 минуты
все разобрался, всем кто помогал спасибо тыкнул. каму нада вот код
Код:
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 = 20304;
    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;
            }
            if (QueenShyeedIsAlive() == 0)
            {
                character.stopSkillEffects(6171);
            }
            if (QueenShyeedIsAlive() == 1)
            {
                character.stopSkillEffects(6169);
            }
        }
        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");
    }
}
тему можно закрыть.
Ответ
#33
а что то подобное под лыжу есть? и под этот код будет под ней работать?
Ответ
#34
Оффтоп
Оффтоп
Ответ
#35
1) этот код как раз таки и под лыжу...
2) да эта моя аватарка с контакта, тобиш моя фотка =) я знаю на таких форумах это не приветствуется но мне как то по х** xD
Ответ
#36
Великий и беспощадный Некромансер посетил эту тему и оставил это сообщение здесь.

Выдрал ai из другой сборки ai Queen Syeed, пытаюсь к своей прикрутить
Код:
/*
* This program is free software: you can redistribute it and/or modify it under
* the terms of the GNU General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later
* version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>.
*/
package zone_scripts.StakatoNest;

import java.util.Collection;
import java.util.concurrent.Future;

import l2.brick.bflmpsvz.a.L2AttackableAIScript;

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

public class QueenShyeed extends L2AttackableAIScript
{
        private static final int QUEEN_SHYEED = 25514;
        private static final int STAKATO_NEST_ZONE = 12030;
        private long _QueenRespawn = 0;
        private long _QueenStatus = 0; // 0 alive, 1 dead
        protected Future<?> _zoneTask = null;
      
        public QueenShyeed(int questId, String name, String descr)
        {
                super(questId, name, descr);
                addKillId(QUEEN_SHYEED);
                addEnterZoneId(STAKATO_NEST_ZONE);
                addExitZoneId(STAKATO_NEST_ZONE);
              
                try
                {
                        _QueenRespawn = Long.valueOf(loadGlobalQuestVar("_QueenRespawn"));
                        _QueenStatus = Long.valueOf(loadGlobalQuestVar("_QueenStatus"));
                }
                catch (Exception e) {}
              
                saveGlobalQuestVar("_QueenRespawn", String.valueOf(_QueenRespawn));
                saveGlobalQuestVar("_QueenStatus", String.valueOf(_QueenStatus));
              
                if (_QueenStatus == 0 && !checkIfQueenSpawned())
                {
                        addSpawn(QUEEN_SHYEED, 79635, -55612, -5980, 0, false, 0);
                        startQuestTimer("QueenDespawn", 10800000, null, null);
                }
                else
                        startQuestTimer("QueenSpawn", _QueenRespawn - System.currentTimeMillis(), null, null);
                _zoneTask = ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new stakatoBuffTask(), 30000, 30001);
        }

        @Override
        public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
        {
                if (event.equalsIgnoreCase("QueenSpawn"))
                {
                        if (!checkIfQueenSpawned())
                        {
                                saveGlobalQuestVar("_QueenStatus", String.valueOf(0));
                                _QueenStatus = 0;
                                startQuestTimer("QueenDespawn", 10800000, null, null);
                                addSpawn(QUEEN_SHYEED, 79635, -55612, -5980, 0, false, 0);
                        }
                }
                else if (event.equalsIgnoreCase("QueenDespawn"))
                {
                        final L2ZoneType zone = ZoneManager.getInstance().getZoneById(STAKATO_NEST_ZONE);
                        final Collection<L2Character> charsZone = zone.getCharactersInside().values();
                        for (L2Character c : charsZone)
                        {
                                if (!(c instanceof L2Npc))
                                        continue;

                                if (((L2Npc) c).getNpcId() == QUEEN_SHYEED)
                                {
                                        final long respawn = 86400000; // 24h
                                        saveGlobalQuestVar("_QueenRespawn", String.valueOf(System.currentTimeMillis() + respawn));
                                        saveGlobalQuestVar("_QueenStatus", String.valueOf(1));
                                        _QueenStatus = 1;
                                        startQuestTimer("QueenSpawn", respawn, null, null);
                                        ((L2RaidBossInstance) c).deleteMe();
                                }
                        }
                    }
                    else if (event.equalsIgnoreCase("CompassON"))
                    {
                            player.sendPacket(new ExSetCompassZoneCode(ExSetCompassZoneCode.ALTEREDZONE));
                    }
                    else if (event.equalsIgnoreCase("CompassOFF"))
                    {
                            player.sendPacket(new ExSetCompassZoneCode(ExSetCompassZoneCode.GENERALZONE));
                    }
                    return null;
            }
    
            @Override
            public String onKill(L2Npc npc, L2PcInstance killer, boolean isPet)
            {
                    final long respawn = 86400000; // 24h
                    startQuestTimer("QueenSpawn", respawn, npc, null);
                    saveGlobalQuestVar("_QueenRespawn", String.valueOf(System.currentTimeMillis() + respawn));
                    saveGlobalQuestVar("_QueenStatus", String.valueOf(1));
                    _QueenStatus = 1;
                    return super.onKill(npc, killer, isPet);
            }
    
            @Override
            public String onEnterZone(L2Character character, L2ZoneType zone)
            {
                    if (character instanceof L2PcInstance)
                    {
                            startQuestTimer("CompassON", 5000, null, (L2PcInstance) character);
                            if (!checkIfPc(zone) && _zoneTask == null)
                                    _zoneTask = ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new stakatoBuffTask(), 30000, 30001);
                    }
                    return super.onEnterZone(character, zone);
            }
    
            @Override
            public String onExitZone(L2Character character, L2ZoneType zone)
            {
                    if (character instanceof L2PcInstance)
                    {
                            startQuestTimer("CompassOFF", 5000, null, (L2PcInstance) character);
                            if (howManyPc(zone) == 1 && _zoneTask != null)
                            {
                                    _zoneTask.cancel(true);
                                    _zoneTask = null;
                            }
                    }
                    return super.onExitZone(character, zone);
            }
    
            private boolean checkIfQueenSpawned()
            {
                    final L2ZoneType zone = ZoneManager.getInstance().getZoneById(STAKATO_NEST_ZONE);
                    final Collection<L2Character> charsZone = zone.getCharactersInside().values();
                    for (L2Character c : charsZone)
                    {
                            if (c instanceof L2Npc)
                            {
                                    if (((L2Npc) c).getNpcId() == QUEEN_SHYEED)
                                            return true;
                            }
                    }
                    return false;
            }
    
            private boolean checkIfPc(L2ZoneType zone)
            {
                    final Collection<L2Character> inside = zone.getCharactersInside().values();
                    for (L2Character c : inside)
                    {
                            if (c instanceof L2PcInstance)
                                    return true;
                    }
                    return false;
            }
    
            private int howManyPc(L2ZoneType zone)
            {
                    int count = 0;
                    final Collection<L2Character> inside = zone.getCharactersInside().values();
                    for (L2Character c : inside)
                    {
                            if (c instanceof L2PcInstance)
                                    count++;
                    }
                    return count;
            }
    
            private class stakatoBuffTask implements Runnable
            {
                    public void run()
                    {
                            final L2ZoneType zone = ZoneManager.getInstance().getZoneById(STAKATO_NEST_ZONE);
                            if (howManyPc(zone) > 0)
                            {
                                    int skillId = 0;
                                    final Collection<L2Character> inside = zone.getCharactersInside().values();
                                    for (L2Character c : inside)
                                    {
                                            if (_QueenStatus == 0)
                                            {
                                                    if (c instanceof L2PcInstance)
                                                    {
                                                            skillId = 6169;
                                                            handleNestBuff(c, skillId);
                                                    }
                                                    else if (c instanceof L2Npc)
                                                    {
                                                            skillId = 6170;
                                                            handleNestBuff(c, skillId);
                                                    }
                                            }
                                            else
                                            {
                                                    if (c instanceof L2PcInstance)
                                                    {
                                                            skillId = 6171;
                                                            handleNestBuff(c, skillId);
                                                    }
                                            }
                                    }
                            }
                            else if (_zoneTask != null)
                            {
                                    _zoneTask.cancel(true);
                                    _zoneTask = null;
                            }
                    }
                  
                    private void handleNestBuff(L2Character c, int skillId)
                    {
                            if (skillId == 6169)
                                    c.stopSkillEffects(6171);
                            else
                                    c.stopSkillEffects(6169);
                          
                            if (c.getFirstEffect(skillId) == null)
                            {
                                    L2Skill skill = SkillTable.getInstance().getInfo(skillId, 1);
                                    skill.getEffects(c, c);
                            }
                    }
            }
    
           public static void main(String[] args)
    {
        new QueenShyeed(-1, "QueenShyeed", "zone_scripts");
    }
    }
гс ругается, как победить?
[Изображение: 46878_QueenSyeed.jpg]
Ответ


Перейти к форуму:


Пользователи, просматривающие эту тему: 1 Гость(ей)