Перейти к содержанию
Авторизация  
Focus

Переделать скрипт

Рекомендуемые сообщения

Под фрозен кто сможет переделать?

 

package events.FarmZones;

import java.util.logging.Logger;

import fpr.common.ThreadPoolManager;
import fpr.extensions.listeners.L2ZoneEnterLeaveListener;
import fpr.gameserver.instancemanager.ZoneManager;
import fpr.gameserver.model.L2Character;
import fpr.gameserver.model.L2Object;
import fpr.gameserver.model.L2Player;
import fpr.gameserver.model.L2Summon;
import fpr.gameserver.model.L2Zone;
import fpr.gameserver.model.L2Zone.ZoneType;
import fpr.gameserver.model.items.L2ItemInstance;
import fpr.gameserver.templates.L2Item;

/**
* @author Calypso
*/

public class FarmZone {

private static Logger _log = Logger.getLogger(FarmZone.class.getName());

// Вкл/Выкл скрипт
private boolean enable = false;

// Максимально возможный уровень заточки для Армора/Бижутерии/Оружия
private int maxEnchArmor = 10;
private int maxEnchAccessory = 10;
private int maxEnchWeapon = 10;

// Грейд вещей, который запрещен в данной зоне. NG - NONE
private String [] nonAllowedGradeArmor = {"S84", "S80"};
private String [] nonAllowedGradeAccessory = {"S84", "S80"};
private String [] nonAllowedGradeWeapon = {"S84", "S80"};

// Список ID предметов, которые будут запрещены в этой зоне
private int [] notAllowedItems = {6578, 6577};

// Через сколько секунд, после входа в зону, телепортировать в город игрока, который не прошел проверку
private int tpDelay = 5;

// Здесь указывается зона, сейчас это колизей
private static L2Zone _Zone = ZoneManager.getInstance().getZoneByIndex(ZoneType.battle_zone, 4, true);

L2Item.Grade cryType;
ZoneListener _ZoneListener = new ZoneListener();

public void onLoad()
{
if(enable)
{
_Zone.getListenerEngine().addMethodInvokedListener(_ZoneListener);
_log.info("Loaded Script-Event: 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))
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.canBeEnchanted())
{
cryType = item.getItem().getCrystalType();

// Если это броня
if(item.isArmor())
{
if(item.getEnchantLevel() > maxEnchArmor)
{
NotifyPlayer(player, item, 1, 1, cryType);
return false;
}
for(String abort : nonAllowedGradeArmor)
{
if(cryType.toString() == abort)
{
NotifyPlayer(player, item, 1, 2, cryType);
return false;
}
}
}
// Если это оружие
else if(item.isWeapon())
{
if(item.getEnchantLevel() > maxEnchWeapon)
{
NotifyPlayer(player, item, 2, 1, cryType);
return false;
}
for(String abort : nonAllowedGradeWeapon)
{
if(cryType.toString() == abort)
{
NotifyPlayer(player, item, 2, 2, cryType);
return false;
}
}
}
// Если это бижутерия
else if(item.getItem().getType2() == L2Item.TYPE2_ACCESSORY || cryType.equals(nonAllowedGradeAccessory))
{
if(item.getEnchantLevel() > maxEnchAccessory)
{
NotifyPlayer(player, item, 3, 1, cryType);
return false;
}
for(String abort : nonAllowedGradeAccessory)
{
if(cryType.toString() == abort)
{
NotifyPlayer(player, item, 3, 2, cryType);
return false;
}
}
}
}
if(notAllowedItems.length > 1)
for(int id : notAllowedItems)
{
if(item.getItemId() == id)
{
NotifyPlayer(player, item, 0, 3, L2Item.Grade.NONE);
return false;
}
}
}

L2Summon pet = player.getPet();

if(pet != null)
{
L2ItemInstance[] petInv = pet.getInventory().getItems();
for (L2ItemInstance item : petInv)
{
if(item.canBeEnchanted())
{
L2Item.Grade cryType = item.getItem().getCrystalType();

// Если это броня
if(item.isArmor())
{
if(item.getEnchantLevel() > maxEnchArmor)
{
NotifyPlayer(player, item, 1, 1, cryType);
return false;
}
for(String abort : nonAllowedGradeArmor)
{
if(cryType.toString() == abort)
{
NotifyPlayer(player, item, 1, 2, cryType);
return false;
}
}
}
// Если это оружие
else if(item.isWeapon())
{
if(item.getEnchantLevel() > maxEnchWeapon)
{
NotifyPlayer(player, item, 2, 1, cryType);
return false;
}
for(String abort : nonAllowedGradeWeapon)
{
if(cryType.toString() == abort)
{
NotifyPlayer(player, item, 2, 2, cryType);
return false;
}
}
}
// Если это бижутерия
else if(item.getItem().getType2() == L2Item.TYPE2_ACCESSORY || cryType.equals(nonAllowedGradeAccessory))
{
if(item.getEnchantLevel() > maxEnchAccessory)
{
NotifyPlayer(player, item, 3, 1, cryType);
return false;
}
for(String abort : nonAllowedGradeAccessory)
{
if(cryType.toString() == abort)
{
NotifyPlayer(player, item, 3, 2, cryType);
return false;
}
}
}
}

if(notAllowedItems.length > 1)
for(int id : notAllowedItems)
{
if(item.getItemId() == id)
{
NotifyPlayer(player, item, 0, 3, L2Item.Grade.NONE);
return false;
}
}
}
}

return true;
}

private class TeleToTown implements Runnable {
L2Character target;
/**
* Телепорт игрока в ближайший город
*
* @param target - игрок, который будет телепортирован
*
*/
public TeleToTown(L2Character target) {
this.target = target;
}

public void run() {
target.teleToClosestTown();
}
}

/**
* Отсылает уведомление игроку о том, какая вещь не прошла проверку
*
* @param player
* @param item
* @param equipType: 1 - броня, 2 - оружие, 3 - бижутерия
* @param failType: 1 - не подходит по заточке, 2 - по грейду, 3 - запрещенный предмет
* @param grade
*/
private void NotifyPlayer (L2Player player, L2ItemInstance item, int equipType, int failType, L2Item.Grade grade)
{
if(equipType == 1 && failType == 1)
player.sendMessage("Уровень заточки предмета " + item.getName() + " (+" + item.getEnchantLevel() + ") превышает максимально допустимый для этой зоны. Допустимый уровень заточки брони: +" + maxEnchArmor);

if(equipType == 2 && failType == 1)
player.sendMessage("Уровень заточки предмета " + item.getName() + " (+" + item.getEnchantLevel() + ") превышает максимально допустимый для этой зоны. Допустимый уровень заточки оружия: +" + maxEnchWeapon);

if(equipType == 3 && failType == 1)
player.sendMessage("Уровень заточки предмета " + item.getName() + " (+" + item.getEnchantLevel() + ") превышает максимально допустимый для этой зоны. Допустимый уровень заточки бижутерии: +" + maxEnchAccessory);

if(failType == 2)
player.sendMessage("Предметы, с таким грейдом как " + item.getName() + " (" + grade.toString() + "), запрщены в этой зоне!");

if(failType == 3)
player.sendMessage("Предмет " + item.getName() + " запрщен в этой зоне!");
}
}

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...