[core]Модификации Java серверов - Страница 2 - Форум администраторов игровых серверов
Форум администраторов игровых серверов StormWall - Защита от DDos атак
Регистрация Мнения Справка Сообщество Календарь
Вернуться   Форум администраторов игровых серверов > MMO > Lineage II > Тех-документация

Тех-документация Статьи по редактированию, компиляции и настройки ява серверов Lineage 2
Описание темы:свиснуто с базы

Ответ
Опции темы
Непрочитано 06.02.2011, 08:02   #11
Аватар для Ro_0TT
Супергерой

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

Делал для шайтановской сборки, а подходит для любой феневской сборки. Мелочи жизни, но приятные .

Что и с чем едят смотрим на скрине.

./data/html/admin/itemcreation.htm:
Свернуть ↑Развернуть ↓


data\scripts\commands\admin\AdminCreateItem.java:
Свернуть ↑Развернуть ↓


Добавлено через 6 минут
Делал для Фреи, тоже Феникса, потом переделал под сборку шайтана, подходит под любой Эпилог феникса.



.\data\html\admin\attribute.htm:
Свернуть ↑Развернуть ↓

.\data\scripts\commands\admin\AdminAttribute.java:
Свернуть ↑Развернуть ↓
__________________
Ищу работу: Java-разработчик Skype: ro_0tt

Последний раз редактировалось Ro_0TT; 06.02.2011 в 08:08. Причина: Добавлено сообщение
Ro_0TT вне форума Отправить сообщение для Ro_0TT с помощью ICQ Отправить сообщение для Ro_0TT с помощью Skype™ Ответить с цитированием
Сказали спасибо:
Непрочитано 06.02.2011, 09:21   #12
Аватар для weTr1k
Пользователь

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

Shutdown.java
На фениксах
Мб по нубски, но зато красивее чем было...!

Код HTML:
public void abort(L2Player activeChar)
	{
		_log.warning("GM: " + activeChar.getName() + "(" + activeChar.getObjectId() + ") issued shutdown ABORT. " + _modeText[shutdownMode] + " has been stopped!");
		if(this.shutdownMode == 1)
		{
		  announce("Выключение сервера прервано!", 10000, ScreenMessageAlign.TOP_CENTER);
		}
		if(this.shutdownMode == 2)
		{
		  	announce("Перезагрузка сервера прервана!", 10000, ScreenMessageAlign.TOP_CENTER);
		}
		if(_counterInstance != null)
		{
			_counterInstance._abort();
		}
	}
Код HTML:
private void countdown()
	{
	   if (this.shutdownMode == 1)
	 {
		while(secondsShut > 0)
			try
			{
				switch(secondsShut)
				{
					
					case 120:
						announce("Внимание!!!Сервер будет выключен через 2 минуты!Покиньте игру!", 10000, ScreenMessageAlign.BOTTOM_RIGHT);
						break;
					case 60:
						System.out.println(l2p.gameserver.model.L2ObjectsStorage.getStats());
						System.out.println();
						System.out.println(l2p.gameserver.geodata.PathFindBuffers.getStats());
						System.out.println();
						if(Config.PROTECT_ENABLE && Config.PROTECT_COMPRESSION > 0)
						{
							System.out.println(SelectorThread.getStats());
							System.out.println();
						}

						announce("Внимание!!!Сервер будет выключен через 1 минуту!Покиньте игру!", 10000, ScreenMessageAlign.TOP_CENTER);
						if(!Config.DONTLOADSPAWN)
							try
							{
								L2World.deleteVisibleNpcSpawns();
							}
							catch(Throwable t)
							{
								System.out.println("Error while unspawn Npcs!");
								t.printStackTrace();
							}
						break;
					case 30:
						announce("Внимание!!!Сервер будет выключен через 30 секунд!Покиньте игру!", 10000, ScreenMessageAlign.TOP_CENTER);
						break;
					case 15:
                        announce("Сервер будет выключен через 15 секунд!", 10000, ExShowScreenMessage.ScreenMessageAlign.TOP_CENTER);
                        break;
					case 10:
                        announce("Сервер будет выключен через 10 секунд!", 10000, ExShowScreenMessage.ScreenMessageAlign.TOP_CENTER);
                        break;
					case 5:
                        announce("Сервер будет выключен через 5 секунд!", 10000, ExShowScreenMessage.ScreenMessageAlign.TOP_CENTER);
                        break;
					case 4:
                        announce("Сервер будет выключен через 4 секунды!", 10000, ExShowScreenMessage.ScreenMessageAlign.TOP_CENTER);
                        break;
					case 3:
                        announce("Сервер будет выключен через 3 секунды!", 10000, ExShowScreenMessage.ScreenMessageAlign.TOP_CENTER);
                        break;
					case 2:
                        announce("Сервер будет выключен через 2 секунды!", 10000, ExShowScreenMessage.ScreenMessageAlign.TOP_CENTER);
                        break;
					case 1:
                        announce("Сервер будет выключен через 1 секунду!", 10000, ExShowScreenMessage.ScreenMessageAlign.TOP_CENTER);
                        break;
                }

                    this.secondsShut -= 1;
                    int delay = 1000;
                    Thread.sleep(delay);
                    if (this.shutdownMode == 3)
                        {
                          return;
                        }
      }
      catch (Exception e)
      {
         e.printStackTrace();
      }
     }
	  	   if (this.shutdownMode == 2)
	 {
		while(secondsShut > 0)
			try
			{
				switch(secondsShut)
				{
					
					case 120:
						announce("Внимание!!!Перезагрузка сервера начнется через 2 минуты!Покиньте игру!", 10000, ScreenMessageAlign.BOTTOM_RIGHT);
						break;
					case 60:
						System.out.println(l2p.gameserver.model.L2ObjectsStorage.getStats());
						System.out.println();
						System.out.println(l2p.gameserver.geodata.PathFindBuffers.getStats());
						System.out.println();
						if(Config.PROTECT_ENABLE && Config.PROTECT_COMPRESSION > 0)
						{
							System.out.println(SelectorThread.getStats());
							System.out.println();
						}

						announce("Внимание!!!Перезагрузка сервера начнется через 1 минуту!Покиньте игру!", 10000, ScreenMessageAlign.TOP_CENTER);
						if(!Config.DONTLOADSPAWN)
							try
							{
								L2World.deleteVisibleNpcSpawns();
							}
							catch(Throwable t)
							{
								System.out.println("Error while unspawn Npcs!");
								t.printStackTrace();
							}
						break;
					case 30:
						announce("Внимание!!!Перезагрузка сервера начнется через 30 секунд!Покиньте игру!", 10000, ScreenMessageAlign.TOP_CENTER);
						break;
					case 15:
                        announce("Сервер будет перезагружен через 15 секунд!", 10000, ExShowScreenMessage.ScreenMessageAlign.TOP_CENTER);
                        break;
					case 10:
                        announce("Сервер будет перезагружен через 10 секунд!", 10000, ExShowScreenMessage.ScreenMessageAlign.TOP_CENTER);
                        break;
					case 5:
                        announce("Сервер будет перезагружен через 5 секунд!", 10000, ExShowScreenMessage.ScreenMessageAlign.TOP_CENTER);
                        break;
					case 4:
                        announce("Сервер будет перезагружен через 4 секунды!", 10000, ExShowScreenMessage.ScreenMessageAlign.TOP_CENTER);
                        break;
					case 3:
                        announce("Сервер будет перезагружен через 3 секунды!", 10000, ExShowScreenMessage.ScreenMessageAlign.TOP_CENTER);
                        break;
					case 2:
                        announce("Сервер будет перезагружен через 2 секунды!", 10000, ExShowScreenMessage.ScreenMessageAlign.TOP_CENTER);
                        break;
					case 1:
                        announce("Сервер будет перезагружен через 1 секунду!", 10000, ExShowScreenMessage.ScreenMessageAlign.TOP_CENTER);
                        break;
                }

                    this.secondsShut -= 1;
                    int delay = 1000;
                    Thread.sleep(delay);
                    if (this.shutdownMode == 3)
                        {
                          return;
                        }
      }
      catch (Exception e)
      {
         e.printStackTrace();
      }
     }
    }
weTr1k вне форума Отправить сообщение для weTr1k с помощью ICQ Отправить сообщение для weTr1k с помощью Skype™ Ответить с цитированием
Непрочитано 06.02.2011, 09:41   #13
Аватар для Ro_0TT
Супергерой

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

Цитата:
Сообщение от weTr1k Посмотреть сообщение
Shutdown.java
На фениксах
Мб по нубски, но зато красивее чем было...!

Код HTML:
public void abort(L2Player activeChar)
	{
		_log.warning("GM: " + activeChar.getName() + "(" + activeChar.getObjectId() + ") issued shutdown ABORT. " + _modeText[shutdownMode] + " has been stopped!");
		if(this.shutdownMode == 1)
		{
		  announce("Выключение сервера прервано!", 10000, ScreenMessageAlign.TOP_CENTER);
		}
		if(this.shutdownMode == 2)
		{
		  	announce("Перезагрузка сервера прервана!", 10000, ScreenMessageAlign.TOP_CENTER);
		}
		if(_counterInstance != null)
		{
			_counterInstance._abort();
		}
	}
Код HTML:
private void countdown()
	{
	   if (this.shutdownMode == 1)
	 {
		while(secondsShut > 0)
			try
			{
				switch(secondsShut)
				{
					
					case 120:
						announce("Внимание!!!Сервер будет выключен через 2 минуты!Покиньте игру!", 10000, ScreenMessageAlign.BOTTOM_RIGHT);
						break;
					case 60:
						System.out.println(l2p.gameserver.model.L2ObjectsStorage.getStats());
						System.out.println();
						System.out.println(l2p.gameserver.geodata.PathFindBuffers.getStats());
						System.out.println();
						if(Config.PROTECT_ENABLE && Config.PROTECT_COMPRESSION > 0)
						{
							System.out.println(SelectorThread.getStats());
							System.out.println();
						}

						announce("Внимание!!!Сервер будет выключен через 1 минуту!Покиньте игру!", 10000, ScreenMessageAlign.TOP_CENTER);
						if(!Config.DONTLOADSPAWN)
							try
							{
								L2World.deleteVisibleNpcSpawns();
							}
							catch(Throwable t)
							{
								System.out.println("Error while unspawn Npcs!");
								t.printStackTrace();
							}
						break;
					case 30:
						announce("Внимание!!!Сервер будет выключен через 30 секунд!Покиньте игру!", 10000, ScreenMessageAlign.TOP_CENTER);
						break;
					case 15:
                        announce("Сервер будет выключен через 15 секунд!", 10000, ExShowScreenMessage.ScreenMessageAlign.TOP_CENTER);
                        break;
					case 10:
                        announce("Сервер будет выключен через 10 секунд!", 10000, ExShowScreenMessage.ScreenMessageAlign.TOP_CENTER);
                        break;
					case 5:
                        announce("Сервер будет выключен через 5 секунд!", 10000, ExShowScreenMessage.ScreenMessageAlign.TOP_CENTER);
                        break;
					case 4:
                        announce("Сервер будет выключен через 4 секунды!", 10000, ExShowScreenMessage.ScreenMessageAlign.TOP_CENTER);
                        break;
					case 3:
                        announce("Сервер будет выключен через 3 секунды!", 10000, ExShowScreenMessage.ScreenMessageAlign.TOP_CENTER);
                        break;
					case 2:
                        announce("Сервер будет выключен через 2 секунды!", 10000, ExShowScreenMessage.ScreenMessageAlign.TOP_CENTER);
                        break;
					case 1:
                        announce("Сервер будет выключен через 1 секунду!", 10000, ExShowScreenMessage.ScreenMessageAlign.TOP_CENTER);
                        break;
                }

                    this.secondsShut -= 1;
                    int delay = 1000;
                    Thread.sleep(delay);
                    if (this.shutdownMode == 3)
                        {
                          return;
                        }
      }
      catch (Exception e)
      {
         e.printStackTrace();
      }
     }
	  	   if (this.shutdownMode == 2)
	 {
		while(secondsShut > 0)
			try
			{
				switch(secondsShut)
				{
					
					case 120:
						announce("Внимание!!!Перезагрузка сервера начнется через 2 минуты!Покиньте игру!", 10000, ScreenMessageAlign.BOTTOM_RIGHT);
						break;
					case 60:
						System.out.println(l2p.gameserver.model.L2ObjectsStorage.getStats());
						System.out.println();
						System.out.println(l2p.gameserver.geodata.PathFindBuffers.getStats());
						System.out.println();
						if(Config.PROTECT_ENABLE && Config.PROTECT_COMPRESSION > 0)
						{
							System.out.println(SelectorThread.getStats());
							System.out.println();
						}

						announce("Внимание!!!Перезагрузка сервера начнется через 1 минуту!Покиньте игру!", 10000, ScreenMessageAlign.TOP_CENTER);
						if(!Config.DONTLOADSPAWN)
							try
							{
								L2World.deleteVisibleNpcSpawns();
							}
							catch(Throwable t)
							{
								System.out.println("Error while unspawn Npcs!");
								t.printStackTrace();
							}
						break;
					case 30:
						announce("Внимание!!!Перезагрузка сервера начнется через 30 секунд!Покиньте игру!", 10000, ScreenMessageAlign.TOP_CENTER);
						break;
					case 15:
                        announce("Сервер будет перезагружен через 15 секунд!", 10000, ExShowScreenMessage.ScreenMessageAlign.TOP_CENTER);
                        break;
					case 10:
                        announce("Сервер будет перезагружен через 10 секунд!", 10000, ExShowScreenMessage.ScreenMessageAlign.TOP_CENTER);
                        break;
					case 5:
                        announce("Сервер будет перезагружен через 5 секунд!", 10000, ExShowScreenMessage.ScreenMessageAlign.TOP_CENTER);
                        break;
					case 4:
                        announce("Сервер будет перезагружен через 4 секунды!", 10000, ExShowScreenMessage.ScreenMessageAlign.TOP_CENTER);
                        break;
					case 3:
                        announce("Сервер будет перезагружен через 3 секунды!", 10000, ExShowScreenMessage.ScreenMessageAlign.TOP_CENTER);
                        break;
					case 2:
                        announce("Сервер будет перезагружен через 2 секунды!", 10000, ExShowScreenMessage.ScreenMessageAlign.TOP_CENTER);
                        break;
					case 1:
                        announce("Сервер будет перезагружен через 1 секунду!", 10000, ExShowScreenMessage.ScreenMessageAlign.TOP_CENTER);
                        break;
                }

                    this.secondsShut -= 1;
                    int delay = 1000;
                    Thread.sleep(delay);
                    if (this.shutdownMode == 3)
                        {
                          return;
                        }
      }
      catch (Exception e)
      {
         e.printStackTrace();
      }
     }
    }
Вот тебе что-то вроде наброска, доработай чтобы были правильные окончания (секунд/минут, минута/секунда) и т.п. Будет и правильно и вкусно, да и полезно для тебя.

Код:
if (secondsShut / 60 > 0) text = "Сервер будет выключен через " + (int) (secondsShut / 60) + " минут.";
else if (secondsShut > 0) text = "Сервер будет выключен через " + secondsShut + " секунд.";
else text = "Сервер отключен.";

announce(text, 10000, ScreenMessageAlign.TOP_CENTER);
__________________
Ищу работу: Java-разработчик Skype: ro_0tt
Ro_0TT вне форума Отправить сообщение для Ro_0TT с помощью ICQ Отправить сообщение для Ro_0TT с помощью Skype™ Ответить с цитированием
Сказали спасибо:
Непрочитано 24.02.2011, 12:42   #14
Аватар для Amorph1s
Пользователь

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

Дайте плиз фикс 2.22... и баг с ВХ на фениксе, кому не в лом, а то чет лень напрягатся
Amorph1s вне форума Отправить сообщение для Amorph1s с помощью ICQ Отправить сообщение для Amorph1s с помощью Skype™ Ответить с цитированием
Непрочитано 24.02.2011, 13:19   #15
Пользователь

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

с 2,22 наверно к ним
tolik5190 вне форума Отправить сообщение для tolik5190 с помощью ICQ Ответить с цитированием
Непрочитано 24.02.2011, 13:21   #16
Аватар для Ro_0TT
Супергерой

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

Цитата:
Сообщение от Amorph1s Посмотреть сообщение
а то чет лень напрягатся
оффтоп:
Свернуть ↑Развернуть ↓
Ro_0TT вне форума Отправить сообщение для Ro_0TT с помощью ICQ Отправить сообщение для Ro_0TT с помощью Skype™ Ответить с цитированием
Непрочитано 24.02.2011, 19:48   #17
Аватар для Amorph1s
Пользователь

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

нынче не дешевое это занятие, программистов нанимать
Подскажи плиз почему твои наработки не пахают?
Я просто начинающий копипастер как бэ


Uploaded with ImageShack.us
Amorph1s вне форума Отправить сообщение для Amorph1s с помощью ICQ Отправить сообщение для Amorph1s с помощью Skype™ Ответить с цитированием
Непрочитано 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™ Ответить с цитированием
Непрочитано 24.02.2011, 22:41   #19
Аватар для Amorph1s
Пользователь

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

Кто сможет вот в это
Код:
package l2p.gameserver.clientpackets;

import java.util.logging.Logger;

import l2p.Config;
import l2p.extensions.multilang.CustomMessage;
import l2p.gameserver.cache.Msg;
import l2p.gameserver.model.L2Player;
import l2p.gameserver.model.items.L2ItemInstance;
import l2p.gameserver.model.items.PcInventory;
import l2p.gameserver.serverpackets.EnchantResult;
import l2p.gameserver.serverpackets.InventoryUpdate;
import l2p.gameserver.serverpackets.SystemMessage;
import l2p.gameserver.tables.ItemTable;
import l2p.gameserver.tables.SkillTable;
import l2p.gameserver.templates.L2Item;
import l2p.util.Log;
import l2p.util.Rnd;

public class RequestEnchantItem extends L2GameClientPacket
{
	protected static Logger _log = Logger.getLogger(RequestEnchantItem.class.getName());

	// Format: cd
	private int _objectId, _catalystObjId;

	@Override
	public void readImpl()
	{
		_objectId = readD();
		_catalystObjId = readD();
	}

	@Override
	public void runImpl()
	{
		L2Player activeChar = getClient().getActiveChar();
		if(activeChar == null)
			return;

		if(activeChar.isOutOfControl() || activeChar.isActionsDisabled())
		{
			activeChar.sendActionFailed();
			return;
		}

		PcInventory inventory = activeChar.getInventory();
		L2ItemInstance itemToEnchant = inventory.getItemByObjectId(_objectId);
		L2ItemInstance catalyst = _catalystObjId > 0 ? inventory.getItemByObjectId(_catalystObjId) : null;
		L2ItemInstance scroll = activeChar.getEnchantScroll();
		activeChar.setEnchantScroll(null);

		if(itemToEnchant == null || scroll == null)
		{
			activeChar.sendActionFailed();
			return;
		}

		// Затычка, ибо клиент криво обрабатывает RequestExTryToPutEnchantSupportItem
		if(!RequestExTryToPutEnchantSupportItem.checkCatalyst(itemToEnchant, catalyst))
			catalyst = null;

		// С помощью Master Yogi's Scroll: Enchant Weapon можно точить только Staff of Master Yogi
		if(scroll.getItemId() == 13540 && itemToEnchant.getItemId() != 13539 || itemToEnchant.getItemId() == 13539 && scroll.getItemId() != 13540)
		{
			activeChar.sendPacket(EnchantResult.CANCEL);
			activeChar.sendPacket(Msg.INAPPROPRIATE_ENCHANT_CONDITIONS);
			activeChar.sendActionFailed();
			return;
		}

		Log.add(activeChar.getName() + "|Trying to enchant|" + itemToEnchant.getItemId() + "|+" + itemToEnchant.getEnchantLevel() + "|" + itemToEnchant.getObjectId(), "enchants");

		// Затычка, разрешающая точить Staff of Master Yogi
		if(!itemToEnchant.canBeEnchanted() && !isYogiStaffEnchanting(scroll, itemToEnchant))
		{
			activeChar.sendPacket(EnchantResult.CANCEL);
			activeChar.sendPacket(Msg.INAPPROPRIATE_ENCHANT_CONDITIONS);
			activeChar.sendActionFailed();
			return;
		}

		if(itemToEnchant.getLocation() != L2ItemInstance.ItemLocation.INVENTORY && itemToEnchant.getLocation() != L2ItemInstance.ItemLocation.PAPERDOLL)
		{
			activeChar.sendPacket(EnchantResult.CANCEL);
			activeChar.sendPacket(Msg.INAPPROPRIATE_ENCHANT_CONDITIONS);
			activeChar.sendActionFailed();
			return;
		}

		if(activeChar.getPrivateStoreType() != L2Player.STORE_PRIVATE_NONE)
		{
			activeChar.sendPacket(EnchantResult.CANCEL);
			activeChar.sendPacket(Msg.YOU_CANNOT_PRACTICE_ENCHANTING_WHILE_OPERATING_A_PRIVATE_STORE_OR_PRIVATE_MANUFACTURING_WORKSHOP);
			activeChar.sendActionFailed();
			return;
		}

		if(itemToEnchant.isStackable() || (scroll = inventory.getItemByObjectId(scroll.getObjectId())) == null)
		{
			activeChar.sendPacket(EnchantResult.CANCEL);
			activeChar.sendActionFailed();
			return;
		}

		int crystalId = itemToEnchant.getEnchantCrystalId(scroll, catalyst);

		// Затычка, разрешающая точить Staff of Master Yogi
		if(crystalId == 0 && !isYogiStaffEnchanting(scroll, itemToEnchant))
		{
			activeChar.sendPacket(EnchantResult.CANCEL);
			activeChar.sendPacket(Msg.INAPPROPRIATE_ENCHANT_CONDITIONS);
			activeChar.sendActionFailed();
			return;
		}

		// Staff of Master Yogi можно точить до 23
		if(!isYogiStaffEnchanting(scroll, itemToEnchant) && itemToEnchant.getEnchantLevel() >= Config.ENCHANT_MAX || isYogiStaffEnchanting(scroll, itemToEnchant) && itemToEnchant.getEnchantLevel() >= 23)
		{
			activeChar.sendPacket(EnchantResult.CANCEL);
			activeChar.sendMessage(new CustomMessage("l2p.gameserver.clientpackets.RequestEnchantItem.MaxLevel", activeChar));
			activeChar.sendActionFailed();
			return;
		}

		// Запрет на заточку чужих вещей, баг может вылезти на серверных лагах
		if(itemToEnchant.getOwnerId() != activeChar.getObjectId())
		{
			activeChar.sendPacket(EnchantResult.CANCEL);
			activeChar.sendPacket(Msg.INAPPROPRIATE_ENCHANT_CONDITIONS);
			activeChar.sendActionFailed();
			return;
		}

		L2ItemInstance removedScroll, removedCatalyst = null;
		synchronized (inventory)
		{
			removedScroll = inventory.destroyItem(scroll.getObjectId(), 1, true);
			if(catalyst != null)
				removedCatalyst = inventory.destroyItem(catalyst.getObjectId(), 1, true);
		}

		//tries enchant without scrolls
		if(removedScroll == null || catalyst != null && removedCatalyst == null)
		{
			activeChar.sendPacket(EnchantResult.CANCEL);
			activeChar.sendActionFailed();
			return;
		}

		int itemType = itemToEnchant.getItem().getType2();
		int safeEnchantLevel = itemToEnchant.getItem().getBodyPart() == L2Item.SLOT_FULL_ARMOR ? Config.SAFE_ENCHANT_FULL_BODY : Config.SAFE_ENCHANT_COMMON;

		double chance;
		if(itemToEnchant.getEnchantLevel() < safeEnchantLevel)
			chance = 100;
		else if(itemType == L2Item.TYPE2_WEAPON)
			chance = removedScroll.isCrystallEnchantScroll() ? Config.ENCHANT_CHANCE_CRYSTAL_WEAPON : Config.ENCHANT_CHANCE_WEAPON;
		else if(itemType == L2Item.TYPE2_SHIELD_ARMOR)
			chance = removedScroll.isCrystallEnchantScroll() ? Config.ENCHANT_CHANCE_CRYSTAL_ARMOR : Config.ENCHANT_CHANCE_ARMOR;
		else if(itemType == L2Item.TYPE2_ACCESSORY)
			chance = removedScroll.isCrystallEnchantScroll() ? Config.ENCHANT_CHANCE_CRYSTAL_ACCESSORY : Config.ENCHANT_CHANCE_ACCESSORY;
		else
		{
			System.out.println("WTF? Request to enchant " + itemToEnchant.getItemId());
			activeChar.sendPacket(EnchantResult.CANCEL);
			activeChar.sendActionFailed();
			activeChar.sendPacket(Msg.SYSTEM_ERROR);
			inventory.addItem(removedScroll);
			return;
		}

		if(scroll.isDivineEnchantScroll()) // Item Mall divine
			chance = 100;
		else if(scroll.isItemMallEnchantScroll()) // Item Mall normal/ancient
			chance += 10;

		if(removedCatalyst != null)
			chance += removedCatalyst.getCatalystPower();

		if(Rnd.chance(chance))
		{
			itemToEnchant.setEnchantLevel(itemToEnchant.getEnchantLevel() + 1);
			itemToEnchant.updateDatabase();

			activeChar.sendPacket(new InventoryUpdate().addModifiedItem(itemToEnchant));

			Log.add(activeChar.getName() + "|Successfully enchanted|" + itemToEnchant.getItemId() + "|to+" + itemToEnchant.getEnchantLevel() + "|" + chance, "enchants");
			Log.LogItem(activeChar, Log.EnchantItem, itemToEnchant);
			activeChar.sendPacket(EnchantResult.SUCESS);

			if(itemToEnchant.getEnchantLevel() >= (itemType == L2Item.TYPE2_WEAPON ? 6 : 5))
			{
				activeChar.altUseSkill(SkillTable.getInstance().getInfo(21006, 1), activeChar);
				activeChar.broadcastPacket(new SystemMessage(SystemMessage.C1_HAS_SUCCESSFULY_ENCHANTED_A__S2_S3).addName(activeChar).addNumber(itemToEnchant.getEnchantLevel()).addItemName(itemToEnchant.getItemId()));
			}
		}
		else
		{
			Log.add(activeChar.getName() + "|Failed to enchant|" + itemToEnchant.getItemId() + "|+" + itemToEnchant.getEnchantLevel() + "|" + chance, "enchants");

			if(scroll.isBlessedEnchantScroll()) // фейл, но заточка блесед
			{
				itemToEnchant.setEnchantLevel(0);
				activeChar.sendPacket(new InventoryUpdate().addModifiedItem(itemToEnchant));
				activeChar.sendPacket(Msg.FAILED_IN_BLESSED_ENCHANT_THE_ENCHANT_VALUE_OF_THE_ITEM_BECAME_0);
				activeChar.sendPacket(EnchantResult.BLESSED_FAILED);
			}
			else if(scroll.isAncientEnchantScroll()) // фейл, но заточка ancient
				activeChar.sendPacket(EnchantResult.ANCIENT_FAILED);
			else
			// фейл, разбиваем вещь
			{
				if(itemToEnchant.isEquipped())
					inventory.unEquipItemInSlot(itemToEnchant.getEquipSlot());

				L2ItemInstance destroyedItem = inventory.destroyItem(itemToEnchant.getObjectId(), 1, true);
				if(destroyedItem == null)
				{
					_log.warning("failed to destroy " + itemToEnchant.getObjectId() + " after unsuccessful enchant attempt by char " + activeChar.getName());
					activeChar.sendActionFailed();
					return;
				}

				Log.LogItem(activeChar, Log.EnchantItemFail, itemToEnchant);

				if(crystalId > 0)
				{
					L2ItemInstance crystalsToAdd = ItemTable.getInstance().createItem(crystalId);

					int count = (int) (itemToEnchant.getItem().getCrystalCount() * 0.87);
					if(destroyedItem.getEnchantLevel() > 3)
						count += itemToEnchant.getItem().getCrystalCount() * 0.25 * (destroyedItem.getEnchantLevel() - 3);
					if(count < 1)
						count = 1;
					crystalsToAdd.setCount(count);

					inventory.addItem(crystalsToAdd);
					Log.LogItem(activeChar, Log.Sys_GetItem, crystalsToAdd);

					activeChar.sendPacket(new EnchantResult(1, crystalsToAdd.getItemId(), count), SystemMessage.obtainItems(crystalId, count, 0));
				}
				else
					activeChar.sendPacket(EnchantResult.FAILED_NO_CRYSTALS);

				activeChar.refreshExpertisePenalty();
			}
		}

		activeChar.refreshOverloaded();
		activeChar.setEnchantScroll(null);
		activeChar.sendChanges();
	}

	private static boolean isYogiStaffEnchanting(L2ItemInstance scroll, L2ItemInstance itemToEnchant)
	{
		if(scroll.getItemId() == 13540 && itemToEnchant.getItemId() == 13539)
			return true;
		return false;
	}
}
влить вот это
Код:
private static boolean checkEnchant(L2ItemInstance itemToEnchant)
{
int itemType = itemToEnchant.getItem().getType2();
int maxWep = 0, maxArmJew = 0; // инициализация(оружие,арм/бижа)
switch(itemToEnchant.getCrystalType())
{
case C:
maxWep = 25;
maxArmJew = 15;
break;
case B:
maxWep = 20;
maxArmJew = 10;
break;
case A:
maxWep = 16;
maxArmJew = 8;
break;
case S:
maxWep = 13;
break;
case S80:
maxWep = 8;
break;
case S84:
maxWep = 7;
break;
default:
maxArmJew = 6;
break;
}
if(itemType == L2Item.TYPE2_WEAPON && itemToEnchant.getEnchantLevel() >= maxWep)
return true;
else if((itemType == L2Item.TYPE1_SHIELD_ARMOR || itemType == L2Item.TYPE2_ACCESSORY) && itemToEnchant.getEnchantLevel() >= maxArmJew)
return true;
return false;
}
да так что бы пахало.
Суть в том, что этот код ставит ограничение заточек по грейду, через клиентпакет.

Добавлено через 13 часов 20 минут
Цитата:
Сообщение от KilRoy Посмотреть сообщение

P.S СОХРАНЯТЬ ВСЁ В UTF-8 БЕЗ BOM
собственно так и делаю. в том то и трабл.

Последний раз редактировалось Amorph1s; 25.02.2011 в 12:01. Причина: Добавлено сообщение
Amorph1s вне форума Отправить сообщение для Amorph1s с помощью ICQ Отправить сообщение для Amorph1s с помощью Skype™ Ответить с цитированием
Непрочитано 25.02.2011, 12:20   #20
Пользователь

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

Цитата:
собственно так и делаю. в том то и трабл.
а на картинке текст в cp1251
tolik5190 вне форума Отправить сообщение для tolik5190 с помощью ICQ Ответить с цитированием
Ответ


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

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
SVN ссылки Java серверов. PROGRAMMATOR Lineage II 284 19.11.2020 20:50
Компилятор java серверов Lineage 2 PROGRAMMATOR Инструменты 102 08.02.2011 22:34
[help]Модификации Java сервера RuleZzz Lineage II 4 09.10.2009 18:58


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

Вверх