Болтающий гвард

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

BadStealth

Величайший
Местный
Победитель в номинации 2023
Победитель в номинации 2022
Победитель в номинации 2021
Победитель в номинации 2020
Просветитель
Клиент разработчик
Старожил I степени
Преподаватель
За веру и верность форуму
Победитель в номинации 2019
Сообщения
309
Розыгрыши
0
Репутация
431
Реакции
610
Баллы
1 573
Ребят нужна помощь в поиске.
Все изрыл но не нашел.
1) Есть ли у каво скрипт говорящего гварда для Феников? Просто в фениках нет скрипта Creature.
Все что находил все не подходят.
2) Так же как-то на глаза попадался центр Гирана где вместо статуи стоит фонтан- есть ли у каво это?
 

Так напишите им AI
 
Дело в том что я пытаюсь им прописать AI но не получается.
У меня в Guard прописано так:
Код:
    @Override
    public void checkAggression(L2Character target)
    {
        L2NpcInstance actor = getActor();
        if(actor == null || !(target.getKarma() > 0 || getBool("evilGuard", false) && target.getPvpFlag() > 0))
        {
            return;
        }
        if(getIntention() != CtrlIntention.AI_INTENTION_ACTIVE)
        {
            return;
        }
        if(_globalAggro < 0)
        {
            return;
        }
        if(target.getHateList().get(actor) == null && !actor.isInRange(target, 600))
        {
            return;
        }
        if(Math.abs(target.getZ() - actor.getZ()) > MAX_Z_AGGRO_RANGE)
        {
            return;
        }
        if(target.isPlayable() && !canSeeInSilentMove((L2Playable) target))
        {
            return;
        }
        if(!GeoEngine.canSeeTarget(actor, target, false))
        {
            return;
        }
        if(target.isPlayer() && ((L2Player) target).isInvisible())
        {
            return;
        }
        if((target.isSummon() || target.isPet()) && target.getPlayer() != null)
        {
            target.getPlayer().addDamageHate(actor, 0, 1);
        }
        target.addDamageHate(actor, 0, 2);
        startRunningTask(2000);
        setIntention(CtrlIntention.AI_INTENTION_ATTACK, target);
    }
Я в ChattyGuard.java пытался прописать так:
Код:
    @Override
    public void checkAggression(L2Character target)
    {
        L2NpcInstance actor = getActor();
        Functions.npcSay(actor, "То что болтает гвард");
        super.checkAggression(target);
    }
Но не работает подхожу к гварду- молчит. Если я прописываю в сам скрипт Guard- то говорит сразу а тут не хочет зараза такая.
 
Дело в том что я пытаюсь им прописать AI но не получается.
У меня в Guard прописано так:
Код:
    @Override
    public void checkAggression(L2Character target)
    {
        L2NpcInstance actor = getActor();
        if(actor == null || !(target.getKarma() > 0 || getBool("evilGuard", false) && target.getPvpFlag() > 0))
        {
            return;
        }
        if(getIntention() != CtrlIntention.AI_INTENTION_ACTIVE)
        {
            return;
        }
        if(_globalAggro < 0)
        {
            return;
        }
        if(target.getHateList().get(actor) == null && !actor.isInRange(target, 600))
        {
            return;
        }
        if(Math.abs(target.getZ() - actor.getZ()) > MAX_Z_AGGRO_RANGE)
        {
            return;
        }
        if(target.isPlayable() && !canSeeInSilentMove((L2Playable) target))
        {
            return;
        }
        if(!GeoEngine.canSeeTarget(actor, target, false))
        {
            return;
        }
        if(target.isPlayer() && ((L2Player) target).isInvisible())
        {
            return;
        }
        if((target.isSummon() || target.isPet()) && target.getPlayer() != null)
        {
            target.getPlayer().addDamageHate(actor, 0, 1);
        }
        target.addDamageHate(actor, 0, 2);
        startRunningTask(2000);
        setIntention(CtrlIntention.AI_INTENTION_ATTACK, target);
    }
Я в ChattyGuard.java пытался прописать так:
Код:
    @Override
    public void checkAggression(L2Character target)
    {
        L2NpcInstance actor = getActor();
        Functions.npcSay(actor, "То что болтает гвард");
        super.checkAggression(target);
    }
Но не работает подхожу к гварду- молчит. Если я прописываю в сам скрипт Guard- то говорит сразу а тут не хочет зараза такая.
:Kaede: а ты ударь его
У тебя проверка на агр... А не на таргет...
 
У тебя проверка на агр... А не на таргет...
Да и бил я его и карму себе делал чтобы они агрились- молчат сволочи. Если в самом Guard прописываю болтовню то при агре сразу говорят- а так не хотят сволочи такие. Должно быть что-то упускаю...
 
а указать ай не надо у нпц?)
 
Дело в том что я пытаюсь им прописать AI но не получается.
У меня в Guard прописано так:
Код:
    @Override
    public void checkAggression(L2Character target)
    {
        L2NpcInstance actor = getActor();
        if(actor == null || !(target.getKarma() > 0 || getBool("evilGuard", false) && target.getPvpFlag() > 0))
        {
            return;
        }
        if(getIntention() != CtrlIntention.AI_INTENTION_ACTIVE)
        {
            return;
        }
        if(_globalAggro < 0)
        {
            return;
        }
        if(target.getHateList().get(actor) == null && !actor.isInRange(target, 600))
        {
            return;
        }
        if(Math.abs(target.getZ() - actor.getZ()) > MAX_Z_AGGRO_RANGE)
        {
            return;
        }
        if(target.isPlayable() && !canSeeInSilentMove((L2Playable) target))
        {
            return;
        }
        if(!GeoEngine.canSeeTarget(actor, target, false))
        {
            return;
        }
        if(target.isPlayer() && ((L2Player) target).isInvisible())
        {
            return;
        }
        if((target.isSummon() || target.isPet()) && target.getPlayer() != null)
        {
            target.getPlayer().addDamageHate(actor, 0, 1);
        }
        target.addDamageHate(actor, 0, 2);
        startRunningTask(2000);
        setIntention(CtrlIntention.AI_INTENTION_ATTACK, target);
    }
Я в ChattyGuard.java пытался прописать так:
Код:
    @Override
    public void checkAggression(L2Character target)
    {
        L2NpcInstance actor = getActor();
        Functions.npcSay(actor, "То что болтает гвард");
        super.checkAggression(target);
    }
Но не работает подхожу к гварду- молчит. Если я прописываю в сам скрипт Guard- то говорит сразу а тут не хочет зараза такая.

Попробуй таким методом...
Код:
String[] _attackText = {"Много букф", "Много букф".};
 
в личку id
 
а указать ай не надо у нпц?)
Вот я тупанул- ребят все нормально работает теперь- сам идиот. Забыл прописать AI гварду. Вот они и молчали как рыбы. СПС темку можно закрывать.
Ну и выложу сам скрипт говорящего гварда под Феников.
Код:
package l2p.gameserver.ai;

import l2p.util.Rnd;
import l2p.gameserver.ai.Guard;
import l2p.gameserver.model.L2Character;
import l2p.gameserver.model.L2Player;
import l2p.gameserver.model.base.Sex;
import l2p.gameserver.model.instances.L2NpcInstance;
import l2p.extensions.scripts.Functions;

public class ChattyGuard extends Guard
{
    private static final int _chattyChance = 100; // Шанс того, что гвард после его респавна будет болтливым
    private static final int _sayNormalChance = 100; // Шанс произнесения фразы, адресуемой проходящим мимо игрокам
    private static final long _sayNormalPeriod = 120000; // Минимальный период (в мс), с которым гвард произносит фразы, адресуемые проходящим мимо игрокам
    private static final long _sayAggroPeriod = 10000; // Минимальный период (в мс), с которым гвард произносит фразы, при начале атаки ПК

    // Фразы, которые может произнести гвард, когда начинает атаковать ПК
    private static final String[] _aggroText = {
        "{name}, никуда не уходи, сейчас я тебя чуть-чуть убью!",
        "{name}, я тебя зарэжу, мамой клянусь!",
        "Ля-ля-ля, я сошел с ума. Сейчас всех буду убивать!",
        "Сколько я зарезал, сколько перерезал, сколько я народу загубил! Будешь ты, {name}, еще одним в этом списке!",
        "Я ужас, летящий на крыльях ночи! Я жвачка, прилипшая к вашей подошве! Я... Короче, {name}, сейчас я тебя буду убивать!",
        "Я страх, трепещущий в ночи! Я хитроумный замок от подвала правосудия! Я любимец удачи! Я Чёрный Гвард!",
        "Ух ты, моя будущая жертва. Это я к тебе обращаюсь, {name}! Не делай вид что ты не при делах!",
        "Ура! За родину, за всех моих собратьев! Готовься к смерти, {name}!",
        "{name}, кошелек или жизнь?",
        "{name}, просто умри, не осложняй мне жизнь!",
        "{name}, как ты предпочитаешь умереть? Быстро и легко или же медленно и мучительно?",
        "{name}, пвп или засцал?",
        "{name}, я убью тебя нежно.",
        "{name}, я тебя порву как Тузик грелку!",
        "Готовься к смерти, {name}!",
        "{name}, ты дерешся как девчонка!",
        "{name}, помолись перед смертью! Хотя... уже не успеешь!" };

    // Фразы, которые может произнести гвард, адресуя их проходящим мимо игрокам мужского пола
    private static final String[] _normalTextM = {
        "{name}, есть чо?",
        "{name}, превед!",
        "{name}, привет!",
        "{name}, привет пративный.",
        "{name}, дай оружие на минутку, хочу скрин сделать.",
        "{name}, удачной охоты.",
        "{name}, в чем сила, брат?",
        "{name}, больше фрагов тебе.",
        "{name}, ты мне в кошмарах снился.",
        "{name}, я тебя знаю - тебя давно разыскивают за убийства невинных монстров.",
        "{name}, пвп или засцал?",
        "{name}, у тебя кошелек выпал.",
        "{name}, не пойду я с тобой на свидание, даже не проси.",
        "Всем чмоке в этом чате." };

    // Фразы, которые может произнести гвард, адресуя их проходящим мимо игрокам женского пола
    private static final String[] _normalTextF = {
        "{name}, привет красавица.",
        "{name}, ух ты, какие у тебя... э... глаза.",
        "{name}, не хочешь погулять с настоящим мачо?",
        "{name}, привет!",
        "{name}, дай потрогать... э... ну вобщем дай чего нибудь потрогать.",
        "{name}, не женское это дело - врагов убивать.",
        "{name}, у тебя верх порвался, не свети... глазками.",
        "{name}, ах какие булочки...",
        "{name}, ах какие ножки...",
        "{name}, да ты красотка однако.",
        "{name}, вах, какая женщина, мне бы такую.",
        "{name}, а что вы делаете сегодня вечером?",
        "{name}, вы согласны что с точки зрения банальной эрудиции, не всякий локально селектированный индивидуум способен игнорировать тенденции потенциальных эмоций и паритетно аллоцировать амбивалентные кванты логистики, экстрагируемой с учетом антропоморфности эвристического генезиса?",
        "{name}, предлагаю руку и сердце. И кошелек после свадьбы." };

    private boolean _chattyGuard;
    private long _lastAggroSay;
    private long _lastNormalSay;

    public ChattyGuard(L2NpcInstance actor)
    {
        super(actor);

        _chattyGuard = false;
        _lastAggroSay = 0;
        _lastNormalSay = 0;
    }

    @Override
    protected void onEvtSpawn()
    {
        _lastAggroSay = 0;
        _lastNormalSay = 0;
        _chattyGuard = Rnd.chance(_chattyChance) ? true : false;

        super.onEvtSpawn();
    }

    @Override
    public void checkAggression(L2Character target)
    {
        if (_chattyGuard && target.getPlayer() != null)
        {
            L2NpcInstance actor = getActor();
            L2Player player = target.getPlayer();

            if (actor == null || actor.isDead())
                return;

            if (player.getKarma() == 0)
            {
                if (Rnd.chance(_sayNormalChance) && _lastNormalSay + _sayNormalPeriod < System.currentTimeMillis() && actor.isInRange(player, 250L))
                {
                    Functions.npcSay(actor, player.getSex() == 0 ? _normalTextM[Rnd.get(_normalTextM.length)].replace("{name}", player.getName()) : _normalTextF[Rnd.get(_normalTextF.length)].replace("{name}", player.getName()));
                    _lastNormalSay = System.currentTimeMillis();
                }
            }
            else if (player.getKarma() > 0)//if (super.checkAggression(target) != 0)
            {
                if (_lastAggroSay + _sayAggroPeriod < System.currentTimeMillis())
                {
                    Functions.npcSay(actor, _aggroText[Rnd.get(_aggroText.length)].replace("{name}", player.getName()));
                    _lastAggroSay = System.currentTimeMillis();
                }
            }
        }

        super.checkAggression(target);
    }
}
 
хоть бы копирайты указывал что ли :-)
это аи, которое я писал и расшаривал в свое время на шмакси и на ЗГ.
 
Последнее редактирование:
хоть бы копирайты указывал что ли :-)
это аи, которое я писал и расшаривал в свое время на шмакси и на ЗГ.
Сорь кто шарил я не знал- было скачано на диске. Тут на глаза попалось вот и решил вставить в сборку.
 
Ребят извените что не в тему.
Кто знает 5 БАФОВ и их ID для ивента Нового Года или Рождество.
Там Ученик Санты- может дать 5 бафов на выбор- у всех в сборках это пропущено, а я вот решил прикрутить все на свои места.
Код:
<br><a action="bypass -h menu_select?ask=998&reply=11">"Легкие Шаги! Я хочу беззаботно бегать быстро, как ветер!"</a>
<br><a action="bypass -h menu_select?ask=998&reply=12">"Ускорение! Я хочу нападать с такой скоростью, с какой летит Северный олень!"</a>
<br><a action="bypass -h menu_select?ask=998&reply=13">"Благо! Я хочу быть сильным, как Дед Мороз!"</a>
<br><a action="bypass -h menu_select?ask=998&reply=14">"Могущество! О, великий Дед Мороз, пожалуйста, даруйте мне умение стремительно нападать!"</a>
<br><a action="bypass -h menu_select?ask=998&reply=15">"Щит! Увеличьте мою Защиту, чтобы праздники запомнились!"</a>
 
Код:
/***************************************************************************
*                                Change Log
*                            ------------------
*   08.10.2015
*   Script Decompiled by SauDecompiler build 102306.2 [Modified by Gaikotsu]
*
***************************************************************************/

class event_santa : citizen
{
parameter:

handler:
    EventHandler MENU_SELECTED(talker, ask, reply)
    {
        if( reply == 1 )
        {
            myself::ShowPage(talker, "event_wannabe_santa1_q0998_01.htm");
        }
        else if( reply == 2 )
        {
            if( gg::OwnItemCount(talker, 57) >= 1000 )
            {
                myself::ShowPage(talker, "event_wannabe_santa1_q0998_01a.htm");
                myself::GiveItem1(talker, 5555, 1);
                myself::DeleteItem1(talker, 57, 1000);
            }
            else
            {
                myself::ShowPage(talker, "event_wannabe_santa1_q0998_01b.htm");
            }
        }
        else if( reply == 3 )
        {
            myself::ShowPage(talker, "event_wannabe_santa1_q0998_02.htm");
        }
        else if( reply == 4 )
        {
            if( gg::OwnItemCount(talker, 5556) >= 4 && gg::OwnItemCount(talker, 5557) >= 4 && gg::OwnItemCount(talker, 5558) >= 10 && gg::OwnItemCount(talker, 5559) >= 1 )
            {
                myself::ShowPage(talker, "event_wannabe_santa1_q0998_03.htm");
                myself::DeleteItem1(talker, 5556, 4);
                myself::DeleteItem1(talker, 5557, 4);
                myself::DeleteItem1(talker, 5558, 10);
                myself::DeleteItem1(talker, 5559, 1);
                myself::GiveItem1(talker, 5560, 1);
            }
            else
            {
                myself::ShowPage(talker, "event_wannabe_santa1_q0998_03a.htm");
            }
        }
        else if( reply == 5 )
        {
            if( gg::OwnItemCount(talker, 5560) >= 10 )
            {
                myself::DeleteItem1(talker, 5560, 10);
                myself::GiveItem1(talker, 5561, 1);
                myself::ShowPage(talker, "event_wannabe_santa1_q0998_04.htm");
            }
            else
            {
                myself::ShowPage(talker, "event_wannabe_santa1_q0998_04a.htm");
            }
        }
        else if( reply == 6 )
        {
            myself::ShowPage(talker, "event_wannabe_santa1_q0998_05.htm");
        }
        else if( reply == 11 )
        {
            myself::CastBuffForQuestReward(talker, 279314434);
            myself::ShowPage(talker, "event_wannabe_santa1_q0998_06.htm");
        }
        else if( reply == 12 )
        {
            myself::CastBuffForQuestReward(talker, 279379969);
            myself::ShowPage(talker, "event_wannabe_santa1_q0998_07.htm");
        }
        else if( reply == 13 )
        {
            myself::CastBuffForQuestReward(talker, 279445505);
            myself::ShowPage(talker, "event_wannabe_santa1_q0998_08.htm");
        }
        else if( reply == 14 )
        {
            myself::CastBuffForQuestReward(talker, 279511043);
            myself::ShowPage(talker, "event_wannabe_santa1_q0998_09.htm");
        }
        else if( reply == 15 )
        {
            myself::CastBuffForQuestReward(talker, 279576579);
            myself::ShowPage(talker, "event_wannabe_santa1_q0998_10.htm");
        }
        else if( reply == 21 )
        {
            myself::ShowPage(talker, "event_wannabe_santa1_q0998_11.htm");
        }
        else if( reply == 22 )
        {
            if( gg::OwnItemCount(talker, 5560) >= 10 )
            {
                myself::DeleteItem1(talker, 5560, 10);
                myself::GiveItem1(talker, 10606, 1);
                myself::ShowPage(talker, "event_wannabe_santa1_q0998_12.htm");
            }
            else
            {
                myself::ShowPage(talker, "event_wannabe_santa1_q0998_13.htm");
            }
        }
    }

}
Код:
[s_npc_wind_walk2]	=	279314434 // 4262-2
[s_npc_haste1]	=	279379969 // 4263-1
[s_npc_empower1]	=	279445505 // 4264-1
[s_npc_might3]	=	279511043 // 4265-3
[s_npc_shield3]	=	279576579 // 4266-3
 
Код:
/***************************************************************************
*                                Change Log
*                            ------------------
*   08.10.2015
*   Script Decompiled by SauDecompiler build 102306.2 [Modified by Gaikotsu]
*
***************************************************************************/

class event_santa : citizen
{
parameter:

handler:
    EventHandler MENU_SELECTED(talker, ask, reply)
    {
        if( reply == 1 )
        {
            myself::ShowPage(talker, "event_wannabe_santa1_q0998_01.htm");
        }
        else if( reply == 2 )
        {
            if( gg::OwnItemCount(talker, 57) >= 1000 )
            {
                myself::ShowPage(talker, "event_wannabe_santa1_q0998_01a.htm");
                myself::GiveItem1(talker, 5555, 1);
                myself::DeleteItem1(talker, 57, 1000);
            }
            else
            {
                myself::ShowPage(talker, "event_wannabe_santa1_q0998_01b.htm");
            }
        }
        else if( reply == 3 )
        {
            myself::ShowPage(talker, "event_wannabe_santa1_q0998_02.htm");
        }
        else if( reply == 4 )
        {
            if( gg::OwnItemCount(talker, 5556) >= 4 && gg::OwnItemCount(talker, 5557) >= 4 && gg::OwnItemCount(talker, 5558) >= 10 && gg::OwnItemCount(talker, 5559) >= 1 )
            {
                myself::ShowPage(talker, "event_wannabe_santa1_q0998_03.htm");
                myself::DeleteItem1(talker, 5556, 4);
                myself::DeleteItem1(talker, 5557, 4);
                myself::DeleteItem1(talker, 5558, 10);
                myself::DeleteItem1(talker, 5559, 1);
                myself::GiveItem1(talker, 5560, 1);
            }
            else
            {
                myself::ShowPage(talker, "event_wannabe_santa1_q0998_03a.htm");
            }
        }
        else if( reply == 5 )
        {
            if( gg::OwnItemCount(talker, 5560) >= 10 )
            {
                myself::DeleteItem1(talker, 5560, 10);
                myself::GiveItem1(talker, 5561, 1);
                myself::ShowPage(talker, "event_wannabe_santa1_q0998_04.htm");
            }
            else
            {
                myself::ShowPage(talker, "event_wannabe_santa1_q0998_04a.htm");
            }
        }
        else if( reply == 6 )
        {
            myself::ShowPage(talker, "event_wannabe_santa1_q0998_05.htm");
        }
        else if( reply == 11 )
        {
            myself::CastBuffForQuestReward(talker, 279314434);
            myself::ShowPage(talker, "event_wannabe_santa1_q0998_06.htm");
        }
        else if( reply == 12 )
        {
            myself::CastBuffForQuestReward(talker, 279379969);
            myself::ShowPage(talker, "event_wannabe_santa1_q0998_07.htm");
        }
        else if( reply == 13 )
        {
            myself::CastBuffForQuestReward(talker, 279445505);
            myself::ShowPage(talker, "event_wannabe_santa1_q0998_08.htm");
        }
        else if( reply == 14 )
        {
            myself::CastBuffForQuestReward(talker, 279511043);
            myself::ShowPage(talker, "event_wannabe_santa1_q0998_09.htm");
        }
        else if( reply == 15 )
        {
            myself::CastBuffForQuestReward(talker, 279576579);
            myself::ShowPage(talker, "event_wannabe_santa1_q0998_10.htm");
        }
        else if( reply == 21 )
        {
            myself::ShowPage(talker, "event_wannabe_santa1_q0998_11.htm");
        }
        else if( reply == 22 )
        {
            if( gg::OwnItemCount(talker, 5560) >= 10 )
            {
                myself::DeleteItem1(talker, 5560, 10);
                myself::GiveItem1(talker, 10606, 1);
                myself::ShowPage(talker, "event_wannabe_santa1_q0998_12.htm");
            }
            else
            {
                myself::ShowPage(talker, "event_wannabe_santa1_q0998_13.htm");
            }
        }
    }

}
Код:
[s_npc_wind_walk2]    =    279314434 // 4262-2
[s_npc_haste1]    =    279379969 // 4263-1
[s_npc_empower1]    =    279445505 // 4264-1
[s_npc_might3]    =    279511043 // 4265-3
[s_npc_shield3]    =    279576579 // 4266-3
Вот СПС буду теперь все это дело прикручивать.
Сорь за вопрос но каким методом каст бафов в Фениках прописывать?
Спросил сразу чтобы не парить мозг. Пока еще не все изучил в сборке. Можно сделать как в бафере в комунке, но там просто баф вешается -без анимации.
 
Вот СПС буду теперь все это дело прикручивать.
Сорь за вопрос но каким методом каст бафов в Фениках прописывать?
Спросил сразу чтобы не парить мозг. Пока еще не все изучил в сборке. Можно сделать как в бафере в комунке, но там просто баф вешается -без анимации.
Смотрите в сторону котов(есть конфиг на включение котов у ГК, которые предоставляют баф).
 
Один вопрос одна тема. Тема закрыта
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху Снизу