рандом сообщения в шаут\трейд - Форум администраторов игровых серверов
Форум администраторов игровых серверов StormWall - Защита от DDos атак
Регистрация Мнения Справка Сообщество Календарь
Вернуться   Форум администраторов игровых серверов > MMO > Lineage II > Работа со скриптами

Работа со скриптами Помощь в редактировании и написании квестов к Java серверам, а так же эвентов.
Описание темы:эффект псевдо-игрока

Ответ
Опции темы
Непрочитано 18.04.2012, 12:42   #1
Пользователь

Автор темы (Топик Стартер) рандом сообщения в шаут\трейд

Доброго дня ув. форумчане.
Пожалуйста помогите с маленьким ява (или питоновским) скриптом.

Существует такой скрипт, как авто-аннонсы на 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, и много урезать мусора..

Очень надеюсь на вашу помощь! спасибо всем заранее.
__________________
mego4el вне форума Ответить с цитированием
Непрочитано 18.04.2012, 13:20   #2
Аватар для rage
Герой

По умолчанию Re: рандом сообщения в шаут\трейд

А шоут и трейд у вас на весь мир?
rage вне форума Ответить с цитированием
Непрочитано 18.04.2012, 13:32   #3
Аватар для ANZO
Разработчик BDO Emu

По умолчанию Re: рандом сообщения в шаут\трейд

Для анонсов нпц не требуется. Для CreatureSay (который вам и нужен) в пакете обязательно наличие objectId персонажа, который эту фразу говорит. Т.е. вам нужно броадкастить CreatureSay от какого-то действующего персонажа в мире. Смотрите как реализован AutoChat.
ANZO вне форума Отправить сообщение для ANZO с помощью ICQ Отправить сообщение для ANZO с помощью Skype™ Ответить с цитированием
Непрочитано 18.04.2012, 13:36   #4
Пользователь

Автор темы (Топик Стартер) Re: рандом сообщения в шаут\трейд

Цитата:
А шоут и трейд у вас на весь мир?
да.

Цитата:
Смотрите как реализован AutoChat.
а где это можно глянуть??? у меня сборка фрозенов ИЛ
__________________
mego4el вне форума Ответить с цитированием
Непрочитано 18.04.2012, 20:46   #5
Аватар для rage
Герой

По умолчанию Re: рандом сообщения в шаут\трейд

Цитата:
Сообщение от ANZO Посмотреть сообщение
Для анонсов нпц не требуется. Для CreatureSay (который вам и нужен) в пакете обязательно наличие objectId персонажа, который эту фразу говорит. Т.е. вам нужно броадкастить CreatureSay от какого-то действующего персонажа в мире. Смотрите как реализован AutoChat.
Не обязательно, можно и с 0'ым objectId рассылать.
rage вне форума Ответить с цитированием
Непрочитано 18.04.2012, 21:51   #6
Пользователь

Автор темы (Топик Стартер) Re: рандом сообщения в шаут\трейд

в общем познания в яве очень плохие(, помогите разобраться и правильно дописать:

Код:
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 минуты. через две минуты цикл заканчивается, и начинается заново. и каждый раз мы получаем рандом значения из массивов (ник и текст), без всяких проверок на предыдущее и тп.

Очень прошу помощи! Заранее очень вам благодарен!
__________________
mego4el вне форума Ответить с цитированием
Непрочитано 18.04.2012, 22:37   #7
Аватар для Azagthtot
Эксперт

По умолчанию Re: рандом сообщения в шаут\трейд

ТС! Перестаньте смешить народ. После просмотра вашего "кода" с трудом вылезается из-под стола. Сделайте перерыв в работе на полгодика, выучите Java!
Azagthtot вне форума Отправить сообщение для Azagthtot с помощью ICQ Отправить сообщение для Azagthtot с помощью Skype™ Ответить с цитированием
Непрочитано 20.04.2012, 06:21   #8
Пользователь

Автор темы (Топик Стартер) Re: рандом сообщения в шаут\трейд

Цитата:
ТС! Перестаньте смешить народ. После просмотра вашего "кода" с трудом вылезается из-под стола. Сделайте перерыв в работе на полгодика, выучите Java!
я счастлив. я не прошу написать ОСь на яве, это всего лишь маленький скрипт. если кто-то разбирается в этом и для него это дело плевое, почему так сложно написать пару строчек и подсказать хотя бы в чем -то? к сожалению нет времени полноценно выучить язык, но частями - я способен понять, просто надеюсь на хороших людей, которые подскажут.

offtop:
Свернуть ↑Развернуть ↓
__________________
mego4el вне форума Ответить с цитированием
Непрочитано 25.04.2012, 00:55   #9
Аватар для Ro_0TT
Супергерой

По умолчанию Re: рандом сообщения в шаут\трейд

Цитата:
Сообщение от mego4el Посмотреть сообщение
я счастлив. я не прошу написать ОСь на яве, это всего лишь маленький скрипт. если кто-то разбирается в этом и для него это дело плевое, почему так сложно написать пару строчек и подсказать хотя бы в чем -то? к сожалению нет времени полноценно выучить язык, но частями - я способен понять, просто надеюсь на хороших людей, которые подскажут.

offtop:
Свернуть ↑Развернуть ↓
Нет времени выучить язык? Идите в раздел рынок.

Здесь с удовольствием помогут, только если увидят, что вы стараетесь и думаете.

 
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);
}
 
Code: Java
Бесконечный цикл говорит о том, что вы вообще не думаете.

Во вторых вам не нужно создавать дочерний класс от квеста, достаточно просто использовать интерфейс Runnable и инициализировать его из того-же GameServer (при запуске сервера).

Примерно так
 
//Инициализиурет метод run() в классе TradeChat каждые 60000 миллисекунд (60 секунд).
ThreadPoolManager.getInstance().scheduleAtFixedDelay(new TradeChat, 0, 60000);
 
Code: Java
В теле метода run() совершайте отправку сообщений
 
    @Override
    public void run() 
    {
       //По нику или ObjId получайте инстанс персонажа..
       L2PcInstance player = L2World.getPlayer("NAME");
       // .. ну и отправляйте пакет.
    }
 
Code: Java
пф.. ужас.. дальше я коментировать отказываюсь, ибо вы такую хрень написали..
__________________
Ищу работу: Java-разработчик Skype: ro_0tt
Ro_0TT вне форума Отправить сообщение для Ro_0TT с помощью ICQ Отправить сообщение для Ro_0TT с помощью Skype™ Ответить с цитированием
Непрочитано 05.05.2012, 10:02   #10
Пользователь

Автор темы (Топик Стартер) Re: рандом сообщения в шаут\трейд

Ro_0TT, спасибо большое.

а как можно реализовать рандом-выборку ников\сообщений и возможно ли это вообще? (как я написал на примере массивов)

Добавлено через 19 минут
Цитата:
В теле метода run() совершайте отправку сообщений
маленький вопрос.. а где должен находится tradechat.java внутри с этим методом, что бы ThreadPoolManager мог его правильно прогрузить?
__________________

Последний раз редактировалось mego4el; 05.05.2012 в 10:21. Причина: Добавлено сообщение
mego4el вне форума Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не работает шаут (чат) InTerior Lineage II 2 22.01.2011 01:08
Функция рандом vitlav Java 5 17.01.2011 12:18
2 Вопроса: Aion-Top + Мои сообщения. ViAl О форуме / About Zone-Game 4 03.03.2010 13:40
Рандом спавн мобов в L2Emu SWnet Lineage II 3 29.05.2009 23:52
Двойной клик по итему - выпадает рандом итем Nytrex Lineage II 19 27.07.2008 02:34


© 2007–2024 «Форум администраторов игровых серверов»
Защита сайта от DDoS атак — StormWall
Работает на Булке неизвестной версии с переводом от zCarot
Текущее время: 12:01. Часовой пояс GMT +3.

Вверх