07-31-2015, 07:59 PM
всем привет. Встретился с ситуацией с которой не могу до конца разобраться. Прошу Вашей помощи. У меня есть скрипт на проверку запрещенных предметов в определенной зоне. Но он никак не хочет запускаться на сборке ПВ софт.:confused:
вот сам скрипт
package ai;
import java.util.logging.Logger;
import net.sf.l2j.common.ThreadPoolManager;
import net.sf.l2j.extensions.listeners.L2ZoneEnterLeaveListener;
import net.sf.l2j.gameserver.instancemanager.ZoneManager;
import net.sf.l2j.gameserver.model.L2Character;
import net.sf.l2j.gameserver.model.L2Object;
import net.sf.l2j.gameserver.model.L2Player;
import net.sf.l2j.gameserver.model.L2Summon;
import net.sf.l2j.gameserver.model.L2Zone;
import net.sf.l2j.gameserver.model.L2Zone.ZoneType;
import net.sf.l2j.gameserver.model.items.L2ItemInstance;
import net.sf.l2j.util.Location;
/**
* @author Calypso
*/
public class FarmZone extends QuestJython
{
private static Logger _log = Logger.getLogger(FarmZone.class.getName());
// Вкл/Выкл скрипт
private boolean enable = true;
// Максимально возможный уровень заточки для Армора/Оружия
//Armor
private int maxEnchArmor = 6;
//Accessory
private int maxEnchAccessory = 6;
//Weapon
private int maxEnchWeapon = 15;
// Через сколько секунд, после входа в зону, телепортировать в город игрока, который не прошел проверку
private int tpDelay = 5;
// Здесь указывается зона, сейчас это колизей
private static L2Zone _Zone = ZoneManager.getInstance().getZoneByIndex(ZoneType.battle_zone, 4, true);
private final static int[] ForbiddenItems = {10232,};
ZoneListener _ZoneListener = new ZoneListener();
public void onLoad()
{
if(enable)
{
_Zone.getListenerEngine().addMethodInvokedListener(_ZoneListener);
_log.info("Loaded Script-Event: Farm-Zone with conditions.");
}
}
public void onReload()
{
if(enable)
{
_Zone.getListenerEngine().removeMethodInvokedListener(_ZoneListener);
_Zone.getListenerEngine().addMethodInvokedListener(_ZoneListener);
}
}
public void onShutdown()
{
if(enable)
_Zone.getListenerEngine().removeMethodInvokedListener(_ZoneListener);
}
private class ZoneListener extends L2ZoneEnterLeaveListener
{
@Override
public void objectEntered(L2Zone zone, L2Object object)
{
if(object == null || !object.isPlayer() || !enable)
return;
L2Player player = object.getPlayer();
if(!canEnterToZone(player))
{
player.sendMessage("Ваше снаряжение превышает максимально допустимые значения заточки для этой зоны!");
player.sendMessage("Разрешенные максимальные значения: Броня +" + maxEnchArmor + ", Оружие +" + maxEnchWeapon + ", Бижутерия +" + maxEnchAccessory);
ThreadPoolManager.getInstance().scheduleGeneral(new TeleToTown((L2Character) object), tpDelay * 1000);
}
}
@Override
public void objectLeaved(L2Zone zone, L2Object object)
{}
}
/**
* Определяет, может ли игрок войти в эту зону
* Так же проверяем инвентарь пета
*
* @param player
* @return true, если может
*/
private boolean canEnterToZone(L2Player player)
{
L2ItemInstance[] inv = player.getInventory().getItems();
for (L2ItemInstance item : inv)
{
if(item.isArmor())
{
if(item.getEnchantLevel() > maxEnchArmor)
return false;
}
else if(item.isWeapon())
{
if(item.getEnchantLevel() > maxEnchWeapon)
return false;
}
}
else if(item.isAccessory())
{
if(item.getEnchantLevel() > maxEnchAccessory)
return false;
}
}
else if(int fi : ForbiddenItems)
{
if(player.getInventory().getItemByItemId(fi) != null){
return false;
}
}
L2Summon pet = player.getPet();
if(pet != null)
{
L2ItemInstance[] petInv = pet.getInventory().getItems();
for (L2ItemInstance item : petInv)
{
if(item.isArmor())
{
if(item.getEnchantLevel() > maxEnchArmor)
return false;
}
else if(item.isWeapon())
{
if(item.getEnchantLevel() > maxEnchWeapon)
return false;
}
}
}
return true;
}
public class TeleToTown implements Runnable {
L2Character target;
public TeleToTown(L2Character target) {
this.target = target;
}
public void run() {
target.teleToClosestTown();
}
}
}
import java.util.logging.Logger;
import net.sf.l2j.common.ThreadPoolManager;
import net.sf.l2j.extensions.listeners.L2ZoneEnterLeaveListener;
import net.sf.l2j.gameserver.instancemanager.ZoneManager;
import net.sf.l2j.gameserver.model.L2Character;
import net.sf.l2j.gameserver.model.L2Object;
import net.sf.l2j.gameserver.model.L2Player;
import net.sf.l2j.gameserver.model.L2Summon;
import net.sf.l2j.gameserver.model.L2Zone;
import net.sf.l2j.gameserver.model.L2Zone.ZoneType;
import net.sf.l2j.gameserver.model.items.L2ItemInstance;
import net.sf.l2j.util.Location;
/**
* @author Calypso
*/
public class FarmZone extends QuestJython
{
private static Logger _log = Logger.getLogger(FarmZone.class.getName());
// Вкл/Выкл скрипт
private boolean enable = true;
// Максимально возможный уровень заточки для Армора/Оружия
//Armor
private int maxEnchArmor = 6;
//Accessory
private int maxEnchAccessory = 6;
//Weapon
private int maxEnchWeapon = 15;
// Через сколько секунд, после входа в зону, телепортировать в город игрока, который не прошел проверку
private int tpDelay = 5;
// Здесь указывается зона, сейчас это колизей
private static L2Zone _Zone = ZoneManager.getInstance().getZoneByIndex(ZoneType.battle_zone, 4, true);
private final static int[] ForbiddenItems = {10232,};
ZoneListener _ZoneListener = new ZoneListener();
public void onLoad()
{
if(enable)
{
_Zone.getListenerEngine().addMethodInvokedListener(_ZoneListener);
_log.info("Loaded Script-Event: Farm-Zone with conditions.");
}
}
public void onReload()
{
if(enable)
{
_Zone.getListenerEngine().removeMethodInvokedListener(_ZoneListener);
_Zone.getListenerEngine().addMethodInvokedListener(_ZoneListener);
}
}
public void onShutdown()
{
if(enable)
_Zone.getListenerEngine().removeMethodInvokedListener(_ZoneListener);
}
private class ZoneListener extends L2ZoneEnterLeaveListener
{
@Override
public void objectEntered(L2Zone zone, L2Object object)
{
if(object == null || !object.isPlayer() || !enable)
return;
L2Player player = object.getPlayer();
if(!canEnterToZone(player))
{
player.sendMessage("Ваше снаряжение превышает максимально допустимые значения заточки для этой зоны!");
player.sendMessage("Разрешенные максимальные значения: Броня +" + maxEnchArmor + ", Оружие +" + maxEnchWeapon + ", Бижутерия +" + maxEnchAccessory);
ThreadPoolManager.getInstance().scheduleGeneral(new TeleToTown((L2Character) object), tpDelay * 1000);
}
}
@Override
public void objectLeaved(L2Zone zone, L2Object object)
{}
}
/**
* Определяет, может ли игрок войти в эту зону
* Так же проверяем инвентарь пета
*
* @param player
* @return true, если может
*/
private boolean canEnterToZone(L2Player player)
{
L2ItemInstance[] inv = player.getInventory().getItems();
for (L2ItemInstance item : inv)
{
if(item.isArmor())
{
if(item.getEnchantLevel() > maxEnchArmor)
return false;
}
else if(item.isWeapon())
{
if(item.getEnchantLevel() > maxEnchWeapon)
return false;
}
}
else if(item.isAccessory())
{
if(item.getEnchantLevel() > maxEnchAccessory)
return false;
}
}
else if(int fi : ForbiddenItems)
{
if(player.getInventory().getItemByItemId(fi) != null){
return false;
}
}
L2Summon pet = player.getPet();
if(pet != null)
{
L2ItemInstance[] petInv = pet.getInventory().getItems();
for (L2ItemInstance item : petInv)
{
if(item.isArmor())
{
if(item.getEnchantLevel() > maxEnchArmor)
return false;
}
else if(item.isWeapon())
{
if(item.getEnchantLevel() > maxEnchWeapon)
return false;
}
}
}
return true;
}
public class TeleToTown implements Runnable {
L2Character target;
public TeleToTown(L2Character target) {
this.target = target;
}
public void run() {
target.teleToClosestTown();
}
}
}