Рейтинг темы:
  • 1 Голос(ов) - 1 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
[share] Crazy Guards
#1
Откопал у себя маленькое AI для гвардов на воротах населенных пунктов, которое писал давно чисто приколу ради и использовал некоторое время.

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

PHP код:
<?php 
package ai
;

import l2p.extensions.scripts.Functions;
import l2p.gameserver.ai.CtrlIntention;
import l2p.gameserver.ai.Guard;
import l2p.gameserver.model.L2Character;
import l2p.gameserver.model.L2Playable;
import l2p.gameserver.model.L2Player;
import l2p.gameserver.model.instances.L2NpcInstance;
import l2p.gameserver.geodata.GeoEngine;
import l2p.util.Rnd;

public class
CrazyGuard extends Guard implements Runnable
{
private
boolean _crazyState;
private
long _lastAggroSay;
private
long _lastNormalSay;
private static final
int _crazyChance = 50; // Шанс того, что гвард после его респавна будет чуток "двинутым" (произносить разные фразы)
private static final int _sayNormalChance = 5; // Шанс произнесения фразы адресуемой проходящим мимо игрокам
private static final long _sayNormalPeriod = 120000; // Минимальный период (в мс), с которым гвард произносит фразы, адресуемые проходящим мимо игрокам
private static final long _sayAggroPeriod = 10000; // Минимальный период (в мс), с которым гвард произносит фразы, при начале атаки пк

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

public
CrazyGuard(L2Character actor)
{
super(actor);
MAX_Z_AGGRO_RANGE = 500;
_crazyState = false;
_lastAggroSay = 0;
_lastNormalSay = 0;
}

@
Override
protected void onEvtSpawn()
{
_lastAggroSay = 0;
_lastNormalSay = 0;
_crazyState = Rnd.chance(_crazyChance) ? true : false;
super.onEvtSpawn();
}

@
Override
public void checkAggression(L2Character target)
{
if (
_crazyState)
{
L2NpcInstance actor = getActor();

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

if (
target.getPlayer().isGM())
return;

if (
Rnd.chance(_sayNormalChance))
{
if (
target.isPlayer() && target.getKarma() <= 0 && (_lastNormalSay + _sayNormalPeriod < System.currentTimeMillis()) && actor.isInRange(target, 250L))
{
Functions.npcSay(actor, target.getPlayer().getSex() == 0 ? _sayNormalTextM[Rnd.get(_sayNormalTextM.length)].replace("{name}", target.getName()) : _sayNormalTextF[Rnd.get(_sayNormalTextF.length)].replace("{name}", target.getName()));
_lastNormalSay = System.currentTimeMillis();
}
}

if (
target.getKarma() <= 0)
return;

if (
getIntention() != CtrlIntention.AI_INTENTION_ACTIVE)
return;

if (
_globalAggro < 0L)
return;

if (
target.getHateList().get(actor) == null && !actor.isInRange(target, 600L))
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);

if (
_lastAggroSay + _sayAggroPeriod < System.currentTimeMillis())
{
Functions.npcSay(actor, _sayAggroText[Rnd.get(_sayAggroText.length)].replace("{name}", target.getPlayer().getName()));
_lastAggroSay = System.currentTimeMillis();
}

setIntention(CtrlIntention.AI_INTENTION_ATTACK, target);
}
else
{
super.checkAggression(target);
}
}

}
Ответ
#2
Фразы ржачные Big Grin
Ответ
#3
Цитата:"{name}, я убью тебя нежно.",
Heart:cl:
Ответ
#4
Цитата:"{name}, дай оружие на минутку, хочу скрин сделать.",
xDDDDDDDDDDD
Ответ
#5
Еще стоит добавить "Есть +16 пушка позвонить?" :redlol:
Ответ
#6
Добавь Мама Люба шатай,шатай))))
Smile
Ответ
#7
мне не дал, а в шару выложил... бяка ))
Ответ


Возможно похожие темы ...
Тема Автор Ответы Просмотры Последний пост
  [Share] PTS Vanganth - Classic Interlude P110 zoumhs 0 1,770 05-13-2023, 05:04 PM
Последний пост: zoumhs
  Share Gracia Final Off Euro Deazer 424 264,821 07-10-2022, 07:20 PM
Последний пост: JIecTap
  [share] lin][info 2.3 [Lindvior] Gaikotsu 0 1,959 09-22-2017, 08:40 PM
Последний пост: Gaikotsu
  [share] Родильная Комната (Nursery) Gaikotsu 6 3,267 03-23-2017, 11:39 AM
Последний пост: Gaikotsu
  [Share] Silentium Interlude (Last source) Dеmon 77 21,682 12-10-2014, 01:01 AM
Последний пост: kingzor
  [EPIC SHARE] BBS Advanced Buffer OneThunder 9 3,896 04-28-2014, 11:35 AM
Последний пост: OneThunder
  Lf fandc share iRevive 0 1,316 02-16-2014, 07:19 AM
Последний пост: iRevive
  [Share] Storm Inside - R60 (13/07/2013) Masone 12 3,957 07-16-2013, 08:30 PM
Последний пост: Hotaka
  [Share] Silentium Interlude R57 (20.01.2013) Dеmon 3 1,987 01-20-2013, 06:55 PM
Последний пост: gorodetskiy
  [Share] Interlude - Silentium от 25.08.2012 Dеmon 4 2,765 08-25-2012, 09:07 PM
Последний пост: Dеmon

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


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