Показать сообщение отдельно
Непрочитано 24.02.2011, 20:54   #18
Забанен за кидаловo/обман/развод

По умолчанию Re: [core]Модификации Java серверов

Amorph1s м.б надо сохранять всё в utf-8 ? )))
----
Ну раз пошло про фениксов, то кину свою горе наработку (в буквальном смысле слова )
Войс команда на вызов хтмля с инфой по ХБ (Траст поинты и доступность)
----
Для начала ходим в scripts/services/Caravan.java
Код:
private static long getConfidence()
Меняем приват на паблик
Код:
public static long getConfidence()
Далее в scripts/command/voiced мутим файлище HellBound.java с содержанием:
Код:
package commands.voiced;

import services.Caravan;
import l2p.Config;
import l2p.extensions.scripts.Functions;
import l2p.extensions.scripts.ScriptFile;
import l2p.gameserver.handler.IVoicedCommandHandler;
import l2p.gameserver.handler.VoicedCommandHandler;
import l2p.gameserver.model.L2Player;
import l2p.util.Files;

/**
 * User: KilRoy
 * Команда .hellbound
 * Выводит инфу о доступности острова и уровне доверия
 */
public class HellBound extends Functions implements IVoicedCommandHandler, ScriptFile {


	private String[] _commandList = new String[]{"hellbound"};

	public boolean useVoicedCommand(String command, L2Player activeChar, String args) {

		if (command.equals("hellbound")){

			
			Long Trust = Caravan.getConfidence();
			long curr = Caravan.getConfidence();

			String dialog = Files.read("data/scripts/commands/voiced/hellbound.htm", activeChar);
			String status = "";
			if (curr >= 1)
				status = "Open.";
			else
				status = "Closed.";
			dialog = dialog.replaceFirst("%status%", status);
			dialog = dialog.replaceFirst("%trust%", Trust.toString());
			show(dialog, activeChar);
			return true;

		}
		return true;
	}

	public String[] getVoicedCommandList(){
		return _commandList;
	}

	public void onLoad(){
			VoicedCommandHandler.getInstance().registerVoicedCommandHandler(this);
	}

	public void onReload()
	{}

	public void onShutdown()
	{}
}
На этом же уровне стряпаем хтм (hellbound.htm) для этого дела:
Код:
<html>
<body>HellBound Status<br><br>
<table>
<tr>
<td width=5></td>
<td width=100>State: <font color="LEVEL">%status%</font></td>
</tr>
<tr>
<td width=5></td>
<td width=100>Current Trust-level:</td>
<td width=30><font color="LEVEL">%trust%</font></td>
</tr>
</table>
</body></html>
================================================== ======================

Ну до кучи ещё с камаель ребы вам подарочек "ClassMaster Spawn/UnSpawn"
Для любителей делать всё кагнаоффе
Следовательно фишка работает через евент (вкл\выкл через админку, удобно, практично )
Первое что делаем, это делетим нахер классмастеров из базы спавн-листа (spawnlist)
ID 31860 Ищем всех и выносим их оттуда (их там 17шт)
Ну и далее начинаем копипастить
scripts/events/ClassMaster/ClassMaster.java ( Ясен бок папку и файл создаём )
Код:
package events.ClassMaster;

import l2p.Config;
import l2p.gameserver.cache.Msg;
import l2p.extensions.scripts.Functions;
import l2p.extensions.scripts.ScriptFile;
import l2p.extensions.multilang.CustomMessage;
import l2p.gameserver.Announcements;
import l2p.gameserver.model.L2ObjectsStorage;
import l2p.gameserver.model.L2Player;
import l2p.gameserver.model.L2Spawn;
import l2p.gameserver.model.instances.L2NpcInstance;
import l2p.util.Files;
import l2p.util.GArray;
import l2p.util.Util;

// User: KilRoy
// Спавн Class Master по основным городам ( Предварительно включать
// Класс Мастера в настройках сервера (events.properties) 
// Удобно для так называемого "всё как на оффе" :)
public class ClassMaster extends Functions implements ScriptFile
{

	private static int EVENT_MANAGER_ID = 31860;
	private static GArray<L2Spawn> _spawns = new GArray<L2Spawn>();
	private static boolean _active = false;

	/**
	 * Спавнит эвент менеджеров
	 */
	private void spawnEventManagers()
	{
		final int EVENT_MANAGERS[][] = {
				{ -84522, 243213, -3731, 21481 }, // Talking Island Village
				{ 45911, 49912, -3086, 6626 }, // Elven Village
				{ 11862, 17641, -4576, 43758 }, // Dark Elven Village
				{ 115634, -178033, -914, 39597 }, // Dwarven Village
				{ -44801, -113031, -241, 15800 }, // Orc Village
				{ -116592, 44984, 341, 16277 }, // Kamael Village
				{ -14022, 123829, -3118, 39678 }, // 1 (Unknow)
				{ -81637, 150251, -3130, 16277 }, // 2 (Unknow)
				{ 82651, 54338, -1551, 10558 }, // Oren
				{ 18012, 145166, -3075, 64469 }, // Dion
				{ 83199, 147870, -3495, 37217 }, // Giran
				{ 111705, 219449, -3697, 10970 }, // Heine
				{ 116236, 76957, -2752, 337 }, // Hunter Village
				{ 147866, 26615, -2231, 16167 }, // Aden
				{ 148923, -55829, -2807, 39721 }, // Goddard
				{ 86161, -142903, -1368, 7038 }, // Schuttgart
				{ 44251, -47640, -823, 49152 } // Rune
		};

		SpawnNPCs(EVENT_MANAGER_ID, EVENT_MANAGERS, _spawns);
	}

	/**
	 * Удаляет спавн эвент менеджеров
	 */
	private void unSpawnEventManagers()
	{
		deSpawnNPCs(_spawns);
	}

	/**
	 * Читает статус эвента из базы.
	 * @return
	 */
	private static boolean isActive()
	{
		return IsActive("ClassMaster");
	}
	/**
	* Запускает эвент
	*/
	public void startEvent()
	{
		L2Player player = (L2Player) getSelf();
		if(!player.getPlayerAccess().IsEventGm)
		{
			return;
		}
		if(SetActive("ClassMaster", true))
		{
			spawnEventManagers();
			System.out.println("EventCMS: ClassMaster spawned.");
			Announcements.getInstance().announceByCustomMessage("scripts.events.ClassMaster.AnnounceEventStarted", null);
		}
		else
		{
			player.sendMessage("EventCMS 'ClassMaster' already spawned.");
		}
		_active = true;
		show(Files.read("data/html/admin/events/events.htm", player), player);
	}

	/**
	* Останавливает эвент
	*/
	public void stopEvent()
	{
		L2Player player = (L2Player) getSelf();
		if(!player.getPlayerAccess().IsEventGm)
		{
			return;
		}
		if(SetActive("ClassMaster", false))
		{
			unSpawnEventManagers();
			System.out.println("EventCMS: ClassMaster unspawned.");
			Announcements.getInstance().announceByCustomMessage("scripts.events.ClassMaster.AnnounceEventStoped", null);
		}
		else
		{
			player.sendMessage("EventCMS 'ClassMaster' not spawned.");
		}
		_active = false;
		show(Files.read("data/html/admin/events/events.htm", player), player);
	}

	public void onLoad()
	{
		if(isActive())
		{
			_active = true;
			spawnEventManagers();
			System.out.println("Loaded EventCMS: ClassMaster [state: spawned]");
		}
		else
		{
			System.out.println("Loaded EventCMS: ClassMaster [state: unspawned]");
		}
	}

	public void onReload()
	{
		unSpawnEventManagers();
	}

	public void onShutdown()
	{
		unSpawnEventManagers();
	}
	

	public static void OnPlayerEnter(int objectId)
	{
		if(_active)
		{
			L2Player player = L2ObjectsStorage.getPlayer(objectId);
			Announcements.getInstance().announceToPlayerByCustomMessage(player, "scripts.events.ClassMaster.AnnounceEventStarted", null);
		}
	}

}
Далее ползем в оформление мессаджей (data/localization) и в оба файла вписуем
Код:
scripts.events.ClassMaster.AnnounceEventStarted=The event 'Class Master' started. Class Master spawned to town.
scripts.events.ClassMaster.AnnounceEventStoped=The event 'Class Master' stopped. Class Master unspawned.
Осталось дело за малым Лезем в data/html/admin/events/events.htm и в любое удобное вам место суём
Код:
<td width=140>Class Master S/UnS</td>
<td width=45><button value="Spawn" action="bypass -h scripts_events.ClassMaster.ClassMaster:startEvent" width=40 height=20 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
<td width=45><button value="UnSpawn" action="bypass -h scripts_events.ClassMaster.ClassMaster:stopEvent" width=40 height=20 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
<td width=45></td>
</tr><tr>
P.S СОХРАНЯТЬ ВСЁ В UTF-8 БЕЗ BOM
KilRoy вне форума Отправить сообщение для KilRoy с помощью ICQ Отправить сообщение для KilRoy с помощью Skype™ Ответить с цитированием