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