Сообщений: 300
Тем: 92
Зарегистрирован: Oct 2010
Репутация:
-132
Доброго дня ув. форумчане.
Пожалуйста помогите с маленьким ява (или питоновским) скриптом.
Существует такой скрипт, как авто-аннонсы на python:
Код: import sys
from net.sf.l2j.gameserver import Announcements
from net.sf.l2j.gameserver import ThreadPoolManager
from java.lang import Runnable
print "Auto Announce running."
# Ставим интервал в минутах.
INTERVAL = 10
# Наше сообщение
ANNOUNCEMENTS= ["announce #1", \
"announce #2", \
"announce #3" ]
class myTask( Runnable ):
def __init__( self ):
self.name = "autoAnnouncer"
def run( self ):
for ann in ANNOUNCEMENTS:
Announcements.getInstance().announceToAll(ann )
startInstance = myTask()
ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(startInstance,INTERVAL*60000,INTERVAL*60000)
мы заносим строчки в массив ANNOUNCEMENTS, и выводим их потом последовательно, через определенный промежуток времени.
помогите модифицировать этот скрипт, с определенными условиями:
1) сообщение выводилось не от Announcements - а в трейд чат или шаут(от какого-нибудь имени, которое можно указать заранее), как бы псевдо-игрок.
2) собственно что бы можно было выводить это сообщение на русском (желательно, если возможно).
3) что бы вывод был не последовательным, а рандомным - т.е. к примеру общей конфигурации - каждые 15 секунд, в трейд чат выводится сообщение от определенного имени(псевдо-игрока), где сам текст и имя - внесены и берутся рандомно из массива в котором хранятся эти строчки (как в массиве ANNOUNCEMENTS, правда там нет имени, т.к. сообщение выводится от announcements), напр. как результат, такое в трейд чате: "Votebot: Голосуйте за сервер!".
Перекопал исходники, думал сделать по принципу Passenger Boat Info. но там совсем иначе и намного запутаннее.. через csv, и много урезать мусора..
Очень надеюсь на вашу помощь! спасибо всем заранее.
Сообщений: 177
Тем: 2
Зарегистрирован: Feb 2012
Репутация:
2,588
А шоут и трейд у вас на весь мир?
Сообщений: 2,303
Тем: 24
Зарегистрирован: Sep 2010
Репутация:
5,617
Для анонсов нпц не требуется. Для CreatureSay (который вам и нужен) в пакете обязательно наличие objectId персонажа, который эту фразу говорит. Т.е. вам нужно броадкастить CreatureSay от какого-то действующего персонажа в мире. Смотрите как реализован AutoChat.
Сообщений: 300
Тем: 92
Зарегистрирован: Oct 2010
Репутация:
-132
Цитата:А шоут и трейд у вас на весь мир?
да.
Цитата:Смотрите как реализован AutoChat.
а где это можно глянуть??? у меня сборка фрозенов ИЛ
Сообщений: 177
Тем: 2
Зарегистрирован: Feb 2012
Репутация:
2,588
ANZO Написал:Для анонсов нпц не требуется. Для CreatureSay (который вам и нужен) в пакете обязательно наличие objectId персонажа, который эту фразу говорит. Т.е. вам нужно броадкастить CreatureSay от какого-то действующего персонажа в мире. Смотрите как реализован AutoChat. Не обязательно, можно и с 0'ым objectId рассылать.
Сообщений: 300
Тем: 92
Зарегистрирован: Oct 2010
Репутация:
-132
в общем познания в яве очень плохие(, помогите разобраться и правильно дописать:
Код: package com.l2jfrozen.gameserver.ai.special;
import com.l2jfrozen.gameserver.model.actor.instance.L2NpcInstance;
import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
import com.l2jfrozen.gameserver.model.quest.Quest;
import com.l2jfrozen.gameserver.thread.ThreadPoolManager;
import com.l2jfrozen.gameserver.network.clientpackets.Say2;
import com.l2jfrozen.gameserver.network.serverpackets.CreatureSay;
import com.l2jfrozen.util.random.Rnd;
public class TradeChat extends Quest implements Runnable
{
private static final String[] TR_TEXT =
{
"Testchat1",
"Testchat2",
"TestChat3",
"TestChat4",
"TestChat5"
};
private static final String[] TR_NICK =
{
"MrOne",
"MrTwo",
"MrThree",
"MrFour",
"MrFive"
};
public TradeChat(int questId, String name, String descr)
{
super(questId, name, descr);
private void ShowChat()
{
while(1)
{
if(Rnd.get(TR_TEXT))
if(Rnd.get(TR_NICK))
CreatureSay cs = new CreatureSay(0, тип чата, "ник от которого шлется сообщение", "сообщение");
activeChar.sendPacket(cs);
//startQuestTimer("Start", 10000, npc, null);
Wait(500);
}
}
@Override
public void run() {}
}
набросал кусками из разных мест, не судите строго.
просто не знаю как лучше сделать, до этого делал все подобные скрипты - через Quest.
может быть существует более простой способ.. просветите)
В общем смысл таков, что есть бесконечный цикл, в нем "рандомно" выбирается из заданных массивов ник + текст, и через CreatureSay выводится уже как сообщение чата. после того как сообщение выведется, стартует таймер (или просто чтото типа Wait/Sleep), например 2 минуты. через две минуты цикл заканчивается, и начинается заново. и каждый раз мы получаем рандом значения из массивов (ник и текст), без всяких проверок на предыдущее и тп.
Очень прошу помощи! Заранее очень вам благодарен!
Сообщений: 1,326
Тем: 10
Зарегистрирован: Apr 2010
Репутация:
2,078
ТС! Перестаньте смешить народ. После просмотра вашего "кода" с трудом вылезается из-под стола. Сделайте перерыв в работе на полгодика, выучите Java!
Сообщений: 300
Тем: 92
Зарегистрирован: Oct 2010
Репутация:
-132
Цитата:ТС! Перестаньте смешить народ. После просмотра вашего "кода" с трудом вылезается из-под стола. Сделайте перерыв в работе на полгодика, выучите Java!
я счастлив. я не прошу написать ОСь на яве, это всего лишь маленький скрипт. если кто-то разбирается в этом и для него это дело плевое, почему так сложно написать пару строчек и подсказать хотя бы в чем -то? к сожалению нет времени полноценно выучить язык, но частями - я способен понять, просто надеюсь на хороших людей, которые подскажут.
offtop
а ответы "прочитайте книгу", "выучите то да сё", очевидны, и не могут не наталкивать на мысли связанные с тупой набивкой постов и показа своего великого Я. в этом мало смысла, не хотите помочь - лучше не пишите.
Сообщений: 3,968
Тем: 90
Зарегистрирован: Nov 2010
Репутация:
15,337
mego4el Написал:я счастлив. я не прошу написать ОСь на яве, это всего лишь маленький скрипт. если кто-то разбирается в этом и для него это дело плевое, почему так сложно написать пару строчек и подсказать хотя бы в чем -то? к сожалению нет времени полноценно выучить язык, но частями - я способен понять, просто надеюсь на хороших людей, которые подскажут.
offtop
а ответы "прочитайте книгу", "выучите то да сё", очевидны, и не могут не наталкивать на мысли связанные с тупой набивкой постов и показа своего великого Я. в этом мало смысла, не хотите помочь - лучше не пишите.
Нет времени выучить язык? Идите в раздел рынок.
Здесь с удовольствием помогут, только если увидят, что вы стараетесь и думаете.
[src=java]
while(1)
{
if(Rnd.get(TR_TEXT))
if(Rnd.get(TR_NICK))
CreatureSay cs = new CreatureSay(0, тип чата, "ник от которого шлется сообщение", "сообщение");
activeChar.sendPacket(cs);
//startQuestTimer("Start", 10000, npc, null);
Wait(500);
}
[/src]
Бесконечный цикл говорит о том, что вы вообще не думаете.
Во вторых вам не нужно создавать дочерний класс от квеста, достаточно просто использовать интерфейс Runnable и инициализировать его из того-же GameServer (при запуске сервера).
Примерно так [src=java]
//Инициализиурет метод run() в классе TradeChat каждые 60000 миллисекунд (60 секунд).
ThreadPoolManager.getInstance().scheduleAtFixedDelay(new TradeChat, 0, 60000);
[/src]
В теле метода run() совершайте отправку сообщений[src=java]
@Override
public void run()
{
//По нику или ObjId получайте инстанс персонажа..
L2PcInstance player = L2World.getPlayer("NAME");
// .. ну и отправляйте пакет.
}
[/src]
пф.. ужас.. дальше я коментировать отказываюсь, ибо вы такую хрень написали..
Сообщений: 300
Тем: 92
Зарегистрирован: Oct 2010
Репутация:
-132
05-05-2012, 10:02 AM
(Сообщение последний раз редактировалось: 05-05-2012, 10:21 AM mego4el.)
Ro_0TT, спасибо большое.
а как можно реализовать рандом-выборку ников\сообщений и возможно ли это вообще? (как я написал на примере массивов)
Добавлено через 19 минут
Цитата:В теле метода run() совершайте отправку сообщений
маленький вопрос.. а где должен находится tradechat.java внутри с этим методом, что бы ThreadPoolManager мог его правильно прогрузить?
|