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

Форум администраторов игровых серверов (https://forum.zone-game.info/TT.php)
-   Lineage II (https://forum.zone-game.info/forumdisplay.php?f=34)
-   -   написать в пм NPC, проверка времени (https://forum.zone-game.info/showthread.php?t=21359)

mego4el 18.07.2012 16:18

написать в пм NPC, проверка времени
 
Парочка вопросов. Очень хочу разобраться:

1. Немного покопав ядро L2jFrozen, нашел такую фишку, как пм игроку при старте. после - увидел эти строчки в конфиге. И меня заинтересовало - реально ли сделать наоборот. Вот допустим не существующий, или существующий нпц, имеет свой ник(имя) - и что бы игрок просто мог написать ему в ПМ, что угодно. пусть для начала - без ответа. просто написать в пм. Если возможно, то как это примерно реализовать? Собираю один интересный эвент, обязательно поделюсь на форуме. очень надо помогите!

2. У меня в ГСе вшито примерно такое:

Код:

ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(HappyEvent.getInstance(), 90000, getRandomTime());
где getRandomTime - случайное время, из заранее подготовленных значений (допустим 1с, 2с, 3с и тд, список примерно до 10с).

это что-то вроде викторины, где каждое случайное время - нпц пишет в чат вопросы. я думаю, очевидно почему случайное - что бы никто не мог ожидать когда будут вопросы.

в общем то с этим все нормально работает. но меня интересует вот что:

днем и ночью, этот эвент бомбит вопросами в по одинаковым, случайным значениям времени. но ночью - игроков практически нет (ну до 10-15 в лучшем случае), а кол-во вопросов из стандартного рандомтайма - достаточно большое, и задержка между вопросами - маленькая.

нужно написать функцию чека времени сервера, например каждые 3 часа. и что бы если на сервере было больше 00:00 (12 ночи), и до 7 утра - сообщения в чат выводились, так скажем по второй функции getRandomTime2(), в которой будут другие значения времени (более большая задержка вопросов).
ну а с 7 утра и до 12 ночи - все выводилось с первой ф-й задержки getRandomTime().

Заранее примного вам благодарен!

mego4el 26.07.2012 09:19

Re: написать в пм NPC, проверка времени
 
со вторым вопросом разобрался. пожалуйста подскажите насчет первого. значит написал я что-то вроде:

в SAY2.java
Код:

//проверяем на совпадение имен, если совпало - отправляем ПМ не существующему игроку с введенным именем

if (_target == MyClass55.getFakeName())
{
activeChar.sendPacket(new CreatureSay(activeChar.getObjectId(), _type, "->" + _target, _text));
}

//если введенное имя игрока, не совпало с подготовленным списком, выполняем стандарт действия:

else
{
SystemMessage sm = new SystemMessage(SystemMessageId.S1_IS_NOT_ONLINE);
sm.addString(_target);
activeChar.sendPacket(sm);
sm = null;
}
break;

т.е. мы добавляем еще одну проверку, ДО окончательного элса, в котором отсылается сист. меседж, что игрок оффлайн.

После "попытки" написать в пм, из списка по getFakeName(), получаю эррор в ГСе:
Код:

java.lang.ArrayIndexOutOfBoundsException: 514
...

наверное я что-то не правильно написал в самом получении значения из массива ников:

Код:

private static final String[] pnames =
{
                "xxSMEGOLxx",
                "BadHabito",
                "MAFIOSI",
                "Kelt",
                "HuGpUToSHa",
                "Bloodkiller",
                "HuKaDuM",
                "MrCrazyTH"
};

...

// и получение имен, для сравнения с _target:

public static String getFakeName()
{
        return pnames[pnames.length];
}

растолкуйте пожалуйста, что я делаю не так =\


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

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