Skip to content

L1J Project

L1J 연구소

[EvaPackUI5] Client Html Action 대응 관련

by CroitzK posted Mar 30, 2020 Views 2 Likes 0 Replies 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

#샘플 코드

package l1j.server.server.clientpackets;


public class C_AGMServer extends ClientBasePacket {
	
	private static final String C_AGMSERVER = "[C] C_AGMServer";	
	private static Logger _log = Logger.getLogger(C_AGMServer.class.getName());
	private static Random _random = new Random(System.nanoTime());
	
	public C_AGMServer(byte abyte0[], LineageClient client) throws Exception {
		super(abyte0);
		int objid = readD();
		String s = readS();
		
		L1PcInstance pc = client.getActiveChar();
		L1PcInstance target;
		L1Object obj = L1World.getInstance().findObject(objid);

		if (obj != null) {
			if (obj instanceof L1PcInstance) {
				target = (L1PcInstance) obj;
				if(s.equals("test")){
					pc.sendPackets(new S_SystemMessage("[SYSTEN] HTML Action 테스트 확인 메세지입니다."));
				}
			return;
		}
	}
	@Override
	public String getType() {
		return C_AGMSERVER;
	}

}


?

[EvaPackUI5] ShiledIcon 버그 관련

by CroitzK posted Mar 30, 2020 Views 2 Likes 0 Replies 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

#샘플 코드

  public static final int S_OPCODE_OWNCHARATTRDEF   = 0x37; // AC 및 속성방어 갱신 0x14
  public static final int S_OPCODE_SKILLICONSHIELD   = 0x14; // 실드 0x37



두개가 서로 뒤바뀜.



?

[EvaPackUI5] 초록색 메시지 띄우기 관련

by CroitzK posted Mar 30, 2020 Views 2 Likes 0 Replies 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

#샘플 코드


/** 초록색 메세지 */
	public static final int GREEN_MSG = 84;

	public S_PacketBox(int subCode, String name) {
		writeC(Opcodes.S_OPCODE_PACKETBOX);
		writeC(subCode);

		switch (subCode) {
		case ADD_EXCLUDE:
		case REM_EXCLUDE:
		case MSG_TOWN_LEADER:
		case PLEDGE_UNION:
			writeS(name);
			break;
		case GREEN_MSG: //테스트
			writeC(2);
			writeS(name);
		default:
			break;
		}
	}


색상코드도 사용 가능.

?

[참고용] 자동사냥 시스템 소스

by CroitzK posted Mar 21, 2020 Views 4 Likes 0 Replies 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
package l1j.server.GameSystem; 

import static l1j.server.server.model.skill.L1SkillId.ABSOLUTE_BARRIER; 
import static l1j.server.server.model.skill.L1SkillId.BLESS_WEAPON; 
import static l1j.server.server.model.skill.L1SkillId.COUNTER_BARRIER; 
import static l1j.server.server.model.skill.L1SkillId.DANCING_BLADES; 
import static l1j.server.server.model.skill.L1SkillId.DARKNESS; 
import static l1j.server.server.model.skill.L1SkillId.DECAY_POTION; 
import static l1j.server.server.model.skill.L1SkillId.DETECTION; 
import static l1j.server.server.model.skill.L1SkillId.DISEASE; 
import static l1j.server.server.model.skill.L1SkillId.ENCHANT_WEAPON; 
import static l1j.server.server.model.skill.L1SkillId.ENTANGLE; 
import static l1j.server.server.model.skill.L1SkillId.EXTRA_HEAL; 
import static l1j.server.server.model.skill.L1SkillId.FREEZING_BLIZZARD; 
import static l1j.server.server.model.skill.L1SkillId.GREATER_HASTE; 
import static l1j.server.server.model.skill.L1SkillId.GREATER_SLOW; 
import static l1j.server.server.model.skill.L1SkillId.HASTE; 
import static l1j.server.server.model.skill.L1SkillId.HEAL; 
import static l1j.server.server.model.skill.L1SkillId.HOLY_WALK; 
import static l1j.server.server.model.skill.L1SkillId.HOLY_WEAPON; 
import static l1j.server.server.model.skill.L1SkillId.MEDITATION; 
import static l1j.server.server.model.skill.L1SkillId.MOVING_ACCELERATION; 
import static l1j.server.server.model.skill.L1SkillId.PHYSICAL_ENCHANT_DEX; 
import static l1j.server.server.model.skill.L1SkillId.PHYSICAL_ENCHANT_STR; 
import static l1j.server.server.model.skill.L1SkillId.SHOCK_STUN; 
import static l1j.server.server.model.skill.L1SkillId.SLOW; 
import static l1j.server.server.model.skill.L1SkillId.STALAC; 
import static l1j.server.server.model.skill.L1SkillId.STATUS_BLUE_POTION; 
import static l1j.server.server.model.skill.L1SkillId.STATUS_BRAVE; 
import static l1j.server.server.model.skill.L1SkillId.STATUS_ELFBRAVE; 
import static l1j.server.server.model.skill.L1SkillId.STATUS_FRUIT; 
import static l1j.server.server.model.skill.L1SkillId.STATUS_HASTE; 
import static l1j.server.server.model.skill.L1SkillId.STATUS_WISDOM_POTION; 
import static l1j.server.server.model.skill.L1SkillId.WEAK_ELEMENTAL; 
import static l1j.server.server.model.skill.L1SkillId.WIND_WALK; 

import java.util.ArrayList; 
import java.util.LinkedList; 
import java.util.Random; 
import java.util.logging.Level; 
import java.util.logging.Logger; 

import l1j.server.server.GeneralThreadPool; 
import l1j.server.server.SkillCheck; 
import l1j.server.server.datatables.ShopTable; 
import l1j.server.server.datatables.SkillsTable; 
import l1j.server.server.model.AcceleratorChecker; 
import l1j.server.server.model.Broadcaster; 
import l1j.server.server.model.Getback; 
import l1j.server.server.model.L1Character; 
import l1j.server.server.model.L1ItemDelay; 
import l1j.server.server.model.L1Location; 
import l1j.server.server.model.L1Object; 
import l1j.server.server.model.L1PcInventory; 
import l1j.server.server.model.L1PolyMorph; 
import l1j.server.server.model.L1TownLocation; 
import l1j.server.server.model.L1World; 
import l1j.server.server.model.Instance.L1ItemInstance; 
import l1j.server.server.model.Instance.L1MonsterInstance; 
import l1j.server.server.model.Instance.L1NpcInstance; 
import l1j.server.server.model.Instance.L1PcInstance; 
import l1j.server.server.model.item.L1ItemId; 
import l1j.server.server.model.item.function.L1HealingPotion; 
import l1j.server.server.model.map.L1Map; 
import l1j.server.server.model.map.L1WorldMap; 
import l1j.server.server.model.shop.L1Shop; 
import l1j.server.server.model.skill.L1SkillId; 
import l1j.server.server.model.skill.L1SkillUse; 
import l1j.server.server.model.trap.L1WorldTraps; 
import l1j.server.server.serverpackets.S_CharVisualUpdate; 
import l1j.server.server.serverpackets.S_ChatPacket; 
import l1j.server.server.serverpackets.S_DoActionGFX; 
import l1j.server.server.serverpackets.S_MapID; 
import l1j.server.server.serverpackets.S_MoveCharPacket; 
import l1j.server.server.serverpackets.S_OtherCharPacks; 
import l1j.server.server.serverpackets.S_OwnCharPack; 
import l1j.server.server.serverpackets.S_PacketBox; 
import l1j.server.server.serverpackets.S_Paralysis; 
import l1j.server.server.serverpackets.S_RemoveObject; 
import l1j.server.server.serverpackets.S_ServerMessage; 
import l1j.server.server.serverpackets.S_SkillBrave; 
import l1j.server.server.serverpackets.S_SkillHaste; 
import l1j.server.server.serverpackets.S_SkillIconGFX; 
import l1j.server.server.serverpackets.S_SkillIconWisdomPotion; 
import l1j.server.server.serverpackets.S_SkillSound; 
import l1j.server.server.serverpackets.S_SystemMessage; 
import l1j.server.server.serverpackets.S_TestPacket; 
import l1j.server.server.serverpackets.S_Weather; 
import l1j.server.server.templates.L1EtcItem; 
import l1j.server.server.templates.L1ShopItem; 
import l1j.server.server.templates.L1Skills; 
import l1j.server.server.types.Point; 
import l1j.server.server.utils.Message; 
import l1j.server.server.utils.Teleportation; 

public class AutoSystemController implements Runnable { 
private static Logger _log = Logger.getLogger(AutoSystemController.class.getName()); 
public static AutoSystemController _instance; 

private Random _rnd = new Random(System.nanoTime()); 

private final int _shopNpcId = 200006;// 로봇전용 상점 
private final long _sleepTime = 20L; 

public final int AUTO_STATUS_NONE = -1; 
public final int AUTO_STATUS_SETTING = 0; 
public final int AUTO_STATUS_WALK = 1; 
public final int AUTO_STATUS_ATTACK = 2; 
public final int AUTO_STATUS_DEAD = 3; 
public final int AUTO_STATUS_MOVE_SHOP = 4; 
public final int AUTO_STATUS_MPREGEON = 5; 

public static AutoSystemController getInstance() { 
if (_instance == null) { 
_instance = new AutoSystemController(); 
} 
return _instance; 
} 

public AutoSystemController() { 
} 

public void threadStart() { 
GeneralThreadPool.getInstance().execute(this); 
} 

@Override 
public void run() { 
while (true) { 
try { 
for (int i = 0; i < _pcList.size(); i++) { 
getSource(_pcList.get(i)); 
} 
} catch (Exception e) { 
_log.log(Level.SEVERE, e.getLocalizedMessage(), e); 
} finally { 
try { 
Thread.sleep(_sleepTime); 
} catch (InterruptedException e) { 
e.printStackTrace(); 
} 
} 
} 
} 

private void getSource(L1PcInstance pc) { 
try { 
if (pc == null) { 
removeAuto(pc); 
return; 
} 
if (!pc.getInventory().checkItem(3000209) 
&& (!pc.getInventory().checkItem(3000213) && (!pc.getInventory().checkItem(3000214)))) { 
removeAuto(pc); 
return; 
} 
if (pc.getInventory().getWeight100() > 82) { 
removeAuto(pc); 
return; 
} 
if (pc.getMapId() != 4 && pc.getMapId() != pc.getAutoMapId()) { 
removeAuto(pc); 
return; 
} 
if (pc.waitAutoAuth()) { 
pc.resetAutoInfo(); 
pc.sendPackets(new S_SystemMessage("오토 방지 코드 자동인증.")); 
} 
if ((pc.getAutoStatus() != AUTO_STATUS_WALK && pc.getAutoStatus() != AUTO_STATUS_ATTACK) 
&& pc.getMapId() == pc.getAutoMapId()) { 
pc.setAutoStatus(AUTO_STATUS_WALK); 
} 
if ((pc.getAutoStatus() != AUTO_STATUS_MOVE_SHOP && pc.getAutoStatus() != AUTO_STATUS_SETTING) 
&& pc.getMapId() == 4) { 
pc.getAutoTargetList().clear(); 
pc.setAutoTarget(null); 
pc.setAutoStatus(AUTO_STATUS_MOVE_SHOP); 
} 
if (pc.getAutoStatus() == AUTO_STATUS_MOVE_SHOP) { 
if (pc.isWizard() || pc.isElf()) { 
if ((int) (((double) pc.getCurrentMp() / (double) pc.getMaxMp()) * 100) < 70) { 
pc.setAutoStatus(AUTO_STATUS_MPREGEON); 
} 
} 
} 
if (pc.isDead()) { 
restart(pc); 
return; 
} 
switch (pc.getAutoStatus()) { 
case AUTO_STATUS_MOVE_SHOP:  //-- 이동 및 샵 
toShopWalk(pc); 
break; 
case AUTO_STATUS_SETTING:  //-- 캐릭터에 대한 셋팅 처리 
toSettingBuyShop(pc); 
break; 
case AUTO_STATUS_WALK:  //-- 이동
if (pc.getAutoTarget() == null) { 
try {
toSearchTarget(pc); 
} catch (Exception e) { 
e.printStackTrace(); 
} finally { 
noTargetTeleport(pc);  
toRandomWalk(pc);
}
} 
else 
{ 
pc.setAutoStatus(AUTO_STATUS_ATTACK); 
} 
// searchTarget(pc);  //-- 타겟 찾기. 
/* 
if (pc.getAutoTargetList().toTargetArrayList().size() > 0) { 
pc.setAutoStatus(AUTO_STATUS_ATTACK); // ??????? 
} 
*/ 
// toReturnScroll(pc); 
break; 
case AUTO_STATUS_ATTACK:
if (pc.getAutoTarget() == null) { 
toUseScroll(pc, 40100); 
pc.setAutoStatus(AUTO_STATUS_WALK); 
} 
else 
{ 
if (pc.getAutoTarget() instanceof L1MonsterInstance) { 
L1MonsterInstance monster = (L1MonsterInstance) pc.getAutoTarget(); 
if (monster.isDead() || monster.getCurrentHp() <= 0) { 
pc.setAutoTarget(null); 
toSearchTarget(pc); 
} 
} 
} 
/* 
if (pc.getAutoTargetList().toTargetArrayList().size() == 0) { 
pc.getAutoTargetList().clear(); 
pc.setAutoTarget(null); 
this.toUseScroll(pc, 40100); 
pc.setAutoStatus(AUTO_STATUS_WALK); 
} 
*/ 
toAttackMonster(pc); 
toReturnScroll(pc); 
break; 
case AUTO_STATUS_MPREGEON: 
toMpRegeon(pc); 
break; 
default: 
break; 
} 
if (pc.isDead()) 
return; 
toUseItem(pc); 
toUseSkills(pc); 
toUseHealingMagic(pc); 
toPolyScroll(pc); 
} catch (Exception e) { 
e.printStackTrace(); 
} 
} 

private void toMpRegeon(L1PcInstance pc) { 
int p = (int) (((double) pc.getCurrentMp() / (double) pc.getMaxMp()) * 100); 
if (p >= 70) { 
pc.setAutoStatus(AUTO_STATUS_MOVE_SHOP); 
return; 
} 
L1Skills _skill; 
L1SkillUse _skilluse; 
if (pc.isWizard()) { 
_skill = SkillsTable.getInstance().getTemplate(L1SkillId.MEDITATION); 
if (!isHPMPConsume(pc, _skill, L1SkillId.MEDITATION) || !isItemConsume(pc, _skill)) { 
return; 
} 
if (!pc.hasSkillEffect(L1SkillId.MEDITATION)) { 
_skilluse = new L1SkillUse(); 
_skilluse.handleCommands(pc, L1SkillId.MEDITATION, pc.getId(), pc.getX(), pc.getY(), null, 0, 
L1SkillUse.TYPE_NORMAL); 
} 
if (p >= 70) { 
pc.removeSkillEffect(L1SkillId.MEDITATION); 
pc.setAutoStatus(AUTO_STATUS_MOVE_SHOP); 
} 
} else if (pc.isElf()) { 
_skill = SkillsTable.getInstance().getTemplate(L1SkillId.BLOODY_SOUL); 
if (pc.getAutoSkillDelay() > 0) { 
pc.setAutoSkillDelay(pc.getAutoSkillDelay() - 1); 
return; 
} 
if (!isHPMPConsume(pc, _skill, L1SkillId.BLOODY_SOUL)) { 
return; 
} 
_skilluse = new L1SkillUse(); 
_skilluse.handleCommands(pc, L1SkillId.BLOODY_SOUL, pc.getId(), pc.getX(), pc.getY(), null, 0, 
L1SkillUse.TYPE_NORMAL); 
pc.setAutoSkillDelay(_skill.getReuseDelay() / 1000 + 2); 
if (p >= 70) { 
pc.setAutoStatus(AUTO_STATUS_MOVE_SHOP); 
} 
} 
} 

private void toTripleArrow(L1PcInstance pc, L1Character target) { 
if (!SkillCheck.getInstance().CheckSkill(pc, L1SkillId.TRIPLE_ARROW)) 
return; 
L1Skills _skill = SkillsTable.getInstance().getTemplate(L1SkillId.TRIPLE_ARROW); 
if (pc.getAutoSkillDelay() > 0) { 
pc.setAutoSkillDelay(pc.getAutoSkillDelay() - 1); 
return; 
} 
if (!isHPMPConsume(pc, _skill, L1SkillId.TRIPLE_ARROW)) { 
if (pc.getAutoStatus() == AUTO_STATUS_WALK || pc.getAutoStatus() == AUTO_STATUS_ATTACK) { 
returnScroll(pc); 
} 
pc.setAutoStatus(AUTO_STATUS_MPREGEON); 
return; 
} 
L1SkillUse _skilluse = new L1SkillUse(); 
_skilluse.handleCommands(pc, L1SkillId.TRIPLE_ARROW, target.getId(), target.getX(), target.getY(), null, 0, 
L1SkillUse.TYPE_NORMAL); 
pc.setAutoSkillDelay(_skill.getReuseDelay() / 1000 + 2); 
} 

private void toUseSkills(L1PcInstance pc) {// 오토 스킬 
int[] skillIds = null; 
if (pc.isCrown()) { 
skillIds = new int[] { L1SkillId.GLOWING_AURA, L1SkillId.BRAVE_AURA, L1SkillId.SHINING_AURA, 
L1SkillId.SHIELD }; 
} else if (pc.isKnight()) { 
skillIds = new int[] { L1SkillId.SHIELD, L1SkillId.REDUCTION_ARMOR, L1SkillId.BOUNCE_ATTACK, 
L1SkillId.COUNTER_BARRIER }; 
} else if (pc.is전사()) { 
skillIds = new int[] { L1SkillId.GIGANTIC, L1SkillId.SHIELD }; 
} else if (pc.isDragonknight()) { 
skillIds = new int[] { L1SkillId.MORTAL_BODY, L1SkillId.DRAGON_SKIN, L1SkillId.BLOOD_LUST }; 
} else if (pc.isElf()) { 
if (pc.getWeapon() == null) { 
return; 
} 
if (pc.getWeapon().getItem().getType1() == 20) {// 활 
skillIds = new int[] { L1SkillId.PHYSICAL_ENCHANT_STR, L1SkillId.PHYSICAL_ENCHANT_DEX, L1SkillId.SHIELD, 
L1SkillId.BLESSED_ARMOR }; 
} else { 
skillIds = new int[] { L1SkillId.DANCING_BLADES, L1SkillId.BURNING_WEAPON, L1SkillId.ELEMENTAL_FIRE, 
L1SkillId.ADDITIONAL_FIRE, L1SkillId.SOUL_OF_FLAME, L1SkillId.PHYSICAL_ENCHANT_STR, 
L1SkillId.PHYSICAL_ENCHANT_DEX, L1SkillId.BLESS_WEAPON, L1SkillId.SHIELD, 
L1SkillId.BLESSED_ARMOR }; 
} 
} else if (pc.isDarkelf()) { 
skillIds = new int[] { L1SkillId.DRESS_MIGHTY, L1SkillId.SHADOW_ARMOR, L1SkillId.ENCHANT_VENOM, 
L1SkillId.MOVING_ACCELERATION, L1SkillId.DRESS_DEXTERITY, L1SkillId.BURNING_SPIRIT, 
L1SkillId.DOUBLE_BRAKE, L1SkillId.DRESS_EVASION, L1SkillId.SHADOW_FANG, L1SkillId.UNCANNY_DODGE }; 
} else if (pc.isBlackwizard()) { 
skillIds = new int[] { L1SkillId.MIRROR_IMAGE, L1SkillId.IllUSION_LICH, L1SkillId.CONCENTRATION, 
L1SkillId.PATIENCE, L1SkillId.IllUSION_DIAMONDGOLEM, L1SkillId.INSIGHT }; 
} else if (pc.isWizard()) { 
skillIds = new int[] { L1SkillId.HOLY_WALK, L1SkillId.SHIELD, L1SkillId.BLESSED_ARMOR, 
L1SkillId.BLESS_WEAPON, L1SkillId.PHYSICAL_ENCHANT_STR, L1SkillId.PHYSICAL_ENCHANT_DEX, 
L1SkillId.ADVANCE_SPIRIT }; 
} 

L1SkillUse _skilluse; 
L1Skills _skill; 
for (int i = 0; i < skillIds.length; i++) { 
try { 
if (pc.getAutoSkillDelay() > 0) { 
pc.setAutoSkillDelay(pc.getAutoSkillDelay() - 1); 
break; 
} 
if (!SkillCheck.getInstance().CheckSkill(pc, skillIds[i])) 
continue; 
if (pc.hasSkillEffect(skillIds[i])) 
continue; 
_skill = SkillsTable.getInstance().getTemplate(skillIds[i]); 
if (!isHPMPConsume(pc, _skill, skillIds[i])) { 
if (pc.isWizard() || pc.isElf()) {// 
if (pc.getAutoStatus() == AUTO_STATUS_WALK || pc.getAutoStatus() == AUTO_STATUS_ATTACK) { 
returnScroll(pc); 
pc.setAutoStatus(AUTO_STATUS_MPREGEON); 
} else { 
pc.setAutoStatus(AUTO_STATUS_MPREGEON); 
} 
} 
break; 
} else if (!isItemConsume(pc, _skill)) { 
if (pc.isWizard() || pc.isElf()) {// 
if (pc.getAutoStatus() == AUTO_STATUS_WALK || pc.getAutoStatus() == AUTO_STATUS_ATTACK) { 
returnScroll(pc); 
} else { 
pc.setAutoStatus(AUTO_STATUS_MOVE_SHOP); 
} 
} 
} 
if (skillIds[i] == L1SkillId.BLESSED_ARMOR) { 
getBlessedArmor(pc, _skill); 
continue; 
} 
if (skillIds[i] == L1SkillId.BLESS_WEAPON) { 
if (pc.getWeapon() == null) 
continue; 
if (pc.getWeapon().hasSkillEffectTimer(L1SkillId.BLESS_WEAPON)) 
continue; 
} 
if (skillIds[i] == L1SkillId.SHADOW_FANG) { 
if (pc.getWeapon() == null) 
continue; 
if (pc.getWeapon().hasSkillEffectTimer(L1SkillId.SHADOW_FANG)) 
continue; 
pc.getWeapon().setSkillWeaponEnchant(pc, L1SkillId.SHADOW_FANG, _skill.getBuffDuration() * 1000); 
pc.sendPackets( 
new S_PacketBox(S_PacketBox.BUFFICON, _skill.getBuffDuration(), _skill.getCastGfx(), 0)); 
S_DoActionGFX gfx = new S_DoActionGFX(pc.getId(), _skill.getActionId()); 
pc.sendPackets(gfx); 
pc.broadcastPacket(gfx); 
pc.sendPackets(new S_SkillSound(pc.getId(), _skill.getCastGfx())); 
pc.broadcastPacket(new S_SkillSound(pc.getId(), _skill.getCastGfx())); 
continue; 
} 
if (skillIds[i] == L1SkillId.DANCING_BLADES) { 
if (pc.getWeapon() == null) 
continue; 
if (pc.getWeapon().getItem().getType() != 1 && pc.getWeapon().getItem().getType() != 2) { 
continue; 
} 
} 
if (skillIds[i] == L1SkillId.COUNTER_BARRIER) { 
if (pc.getWeapon() == null || pc.getWeapon().getItem().getType() != 3) { 
continue; 
} 
} 
if (skillIds[i] == L1SkillId.HOLY_WALK) { 
if (pc.getAutoStatus() == AUTO_STATUS_MPREGEON) 
continue; 
} 
_skilluse = new L1SkillUse(); 
_skilluse.handleCommands(pc, skillIds[i], pc.getId(), pc.getX(), pc.getY(), null, 0, 
L1SkillUse.TYPE_NORMAL); 
pc.setAutoSkillDelay(_skill.getReuseDelay() / 1000 + 2); 
} catch (Exception e) { 
_log.log(Level.SEVERE, e.getLocalizedMessage(), e); 
break; 
} 
} 
} 

private void getBlessedArmor(L1PcInstance pc, L1Skills _skill) { 
ArrayList<L1ItemInstance> item = pc.getEquipSlot().getArmors(); 
L1ItemInstance armor = null; 
for (int i = 0; i < item.size(); i++) { 
if (item.get(i).getItem().getType() == 2) { 
armor = item.get(i); 
break; 
} 
} 
if (armor == null) 
return; 
if (armor != null) { 
if (armor.hasSkillEffectTimer(L1SkillId.BLESSED_ARMOR)) 
return; 
armor.setSkillArmorEnchant(pc, L1SkillId.BLESSED_ARMOR, _skill.getBuffDuration() * 1000); 
pc.sendPackets(new S_ServerMessage(161, String.valueOf(armor.getLogName()).trim(), "$245", "$247")); 
if (armor.isEquipped()) 
pc.sendPackets(new S_PacketBox(S_PacketBox.BUFFICON, _skill.getBuffDuration(), _skill.getCastGfx(), 0)); 
S_DoActionGFX gfx = new S_DoActionGFX(pc.getId(), _skill.getActionId()); 
pc.sendPackets(gfx); 
pc.broadcastPacket(gfx); 
pc.sendPackets(new S_SkillSound(pc.getId(), _skill.getCastGfx())); 
pc.broadcastPacket(new S_SkillSound(pc.getId(), _skill.getCastGfx())); 
pc.setAutoSkillDelay(_skill.getReuseDelay() / 1000 + 2); 
} 
} 

private boolean isItemConsume(L1PcInstance pc, L1Skills _skill) { 
int itemConsume = _skill.getItemConsumeId(); 
int itemConsumeCount = _skill.getItemConsumeCount(); 
if (itemConsume == 0) { 
return true; 
} 
if (itemConsume == 40318) { 
if (pc.getInventory().checkItem(30079, itemConsumeCount) && pc.getLevel() < 56) { 
return true; 
} 
} else if (itemConsume == 40321) { 
if (pc.getInventory().checkItem(30080, itemConsumeCount) && pc.getLevel() < 56) { 
return true; 
} 
} else if (itemConsume == 210035) { 
if (pc.getInventory().checkItem(30081, itemConsumeCount) && pc.getLevel() < 56) { 
return true; 
} 
} else if (itemConsume == 210038) { 
if (pc.getInventory().checkItem(30082, itemConsumeCount) && pc.getLevel() < 56) { 
return true; 
} 
} else if (itemConsume == 40319) { 
if (pc.getInventory().checkItem(30078, itemConsumeCount) && pc.getLevel() < 56) { 
return true; 
} 
} 
if (!pc.getInventory().checkItem(itemConsume, itemConsumeCount)) { 
return false; 
} 
return true; 
} 

private boolean isHPMPConsume(L1PcInstance pc, L1Skills _skill, int _skillId) { 
int _hpConsume; 
int _mpConsume; 
_mpConsume = _skill.getMpConsume(); 
_hpConsume = _skill.getHpConsume(); 
int currentMp = 0; 
int currentHp = 0; 

currentMp = pc.getCurrentMp(); 
currentHp = pc.getCurrentHp(); 

if (pc.getAbility().getTotalInt() > 12 && _skillId > HOLY_WEAPON && _skillId <= FREEZING_BLIZZARD) { 
_mpConsume--; 
} 
if (pc.getAbility().getTotalInt() > 13 && _skillId > STALAC && _skillId <= FREEZING_BLIZZARD) { 
_mpConsume--; 
} 
if (pc.getAbility().getTotalInt() > 14 && _skillId > WEAK_ELEMENTAL && _skillId <= FREEZING_BLIZZARD) { 
_mpConsume--; 
} 
if (pc.getAbility().getTotalInt() > 15 && _skillId > MEDITATION && _skillId <= FREEZING_BLIZZARD) { 
_mpConsume--; 
} 
if (pc.getAbility().getTotalInt() > 16 && _skillId > DARKNESS && _skillId <= FREEZING_BLIZZARD) { 
_mpConsume--; 
} 
if (pc.getAbility().getTotalInt() > 17 && _skillId > BLESS_WEAPON && _skillId <= FREEZING_BLIZZARD) { 
_mpConsume--; 
} 
if (pc.getAbility().getTotalInt() > 18 && _skillId > DISEASE && _skillId <= FREEZING_BLIZZARD) { 
_mpConsume--; 
} 

if (pc.getAbility().getTotalInt() > 12 && _skillId >= SHOCK_STUN && _skillId <= COUNTER_BARRIER) { 
_mpConsume -= (pc.getAbility().getTotalInt() - 12); 
} 
if (pc.isCrown()) { 
if (pc.getAbility().getBaseInt() >= 11) { 
_mpConsume--; 
} 
if (pc.getAbility().getBaseInt() >= 13) { 
_mpConsume--; 
} 
} else if (pc.isKnight()) { 
if (pc.getAbility().getBaseInt() >= 9) { 
_mpConsume--; 
} 
if (pc.getAbility().getBaseInt() >= 11) { 
_mpConsume--; 
} 
} else if (pc.isDarkelf()) { 
if (pc.getAbility().getBaseInt() >= 13) { 
_mpConsume--; 
} 
if (pc.getAbility().getBaseInt() >= 15) { 
_mpConsume--; 
} 
} else if (pc.isBlackwizard()) { 
if (pc.getAbility().getBaseInt() >= 14) { 
_mpConsume--; 
} 
if (pc.getAbility().getBaseInt() >= 15) { 
_mpConsume--; 
} 
} else if (pc.is전사()) { 
if (pc.getAbility().getBaseInt() >= 11) { 
_mpConsume--; 
} 
if (pc.getAbility().getBaseInt() >= 13) { 
_mpConsume--; 
} 
} 

if (_skillId == PHYSICAL_ENCHANT_DEX && pc.getInventory().checkEquipped(20013)) { 
_mpConsume /= 2; 
} 
if (_skillId == HASTE && pc.getInventory().checkEquipped(20013)) { 
_mpConsume /= 2; 
} 
if (_skillId == HEAL && pc.getInventory().checkEquipped(20014)) { 
_mpConsume /= 2; 
} 
if (_skillId == EXTRA_HEAL && pc.getInventory().checkEquipped(20014)) { 
_mpConsume /= 2; 
} 
if (_skillId == ENCHANT_WEAPON && pc.getInventory().checkEquipped(20015)) { 
_mpConsume /= 2; 
} 
if (_skillId == DETECTION && pc.getInventory().checkEquipped(20015)) { 
_mpConsume /= 2; 
} 
if (_skillId == PHYSICAL_ENCHANT_STR && pc.getInventory().checkEquipped(20015)) { 
_mpConsume /= 2; 
} 
if (_skillId == HASTE && pc.getInventory().checkEquipped(20008)) { 
_mpConsume /= 2; 
} 
if (_skillId == GREATER_HASTE && pc.getInventory().checkEquipped(20023)) { 
_mpConsume /= 2; 
} 

if (0 < _skill.getMpConsume()) { 
_mpConsume = Math.max(_mpConsume, 1); 
} 

if (currentHp < _hpConsume + 1) { 
return false; 
} else if (currentMp < _mpConsume) { 
return false; 
} 
return true; 
} 

private void toPolyScroll(L1PcInstance pc) { 
if (pc.getAutoPolyID() == 0) 
return; 
if (pc.getTempCharGfx() == pc.getAutoPolyID()) 
return; 
this.toUseScroll(pc, 40088); 
} 

private void toReturnScroll(L1PcInstance pc) { 
int percent = (int) Math.round(((double) pc.getCurrentHp() / (double) pc.getMaxHp()) * 100); 
if (percent <= 30) { 
returnScroll(pc); 
} 
} 

private void returnScroll(L1PcInstance pc) { 
toUseScroll(pc, 40081); 
pc.setAutoTarget(null); 
pc.getAutoTargetList().clear(); 
} 

private void toUseItem(L1PcInstance pc) { 
useHealPotion(pc); 
useGreenPotion(pc); 
if (pc.isCrown() || pc.isKnight() || pc.is전사()) { 
int itemId = 0; 
if (pc.isCrown()) 
itemId = 40031; 
else if (pc.isKnight()) 
itemId = 41415; 
else if (pc.is전사()) 
itemId = 41415; 
useBravePotion(pc, itemId); 
} else if (pc.isElf()) { 
if (pc.getWeapon() == null) { 
if (pc.getElfAttr() != 2) { 
useBravePotion(pc, 210110); 
} 
} else if (pc.getWeapon().getItem().getType1() == 20) { 
useBravePotion(pc, 210110); 
} 
} else if (pc.isWizard()) { 
useWisdomPotion(pc); 
useBluePotion(pc); 
} else if (pc.isBlackwizard()) { 
useWisdomPotion(pc); 
useFruit(pc); 
} 
} 

private boolean isUseCheck(L1PcInstance pc, L1ItemInstance item) { 
int delay_id = 0; 
if (item.getItem().getType2() == 0) { 
if (item.getItem() instanceof L1EtcItem) { 
delay_id = ((L1EtcItem) item.getItem()).get_delayid(); 
} 
} 
if (delay_id != 0) { 
if (pc.hasItemDelay(delay_id) == true) { 
return false; 
} 
} 
return true; 
} 

private void useHealPotion(L1PcInstance pc) { 
int itemId = pc.getAutoPotion(); 
L1ItemInstance item = pc.getInventory().findItemId(itemId); 
if (item == null) { 
if (pc.getAutoStatus() == AUTO_STATUS_WALK || pc.getAutoStatus() == AUTO_STATUS_ATTACK) { 
returnScroll(pc); 
} else { 
if (isFindShop(pc)) { 
pc.setAutoStatus(AUTO_STATUS_SETTING); 
} 
} 
return; 
} 
if (!isUseCheck(pc, item)) 
return; 
if (pc.getCurrentHp() == pc.getMaxHp()) { 
return; 
} 
L1HealingPotion healingPotion = L1HealingPotion.get(itemId); 
healingPotion.use(pc, item); 
L1ItemDelay.onItemUse(pc, item); 
} 

private void useGreenPotion(L1PcInstance pc) { 
L1ItemInstance item = pc.getInventory().findItemId(40018); 
if (pc.getMoveSpeed() != 0) 
return; 
if (item == null) { 
if (pc.getAutoStatus() == AUTO_STATUS_WALK || pc.getAutoStatus() == AUTO_STATUS_ATTACK) { 
returnScroll(pc); 
} else { 
if (isFindShop(pc)) { 
pc.setAutoStatus(AUTO_STATUS_SETTING); 
} 
} 
return; 
} 
if (!isUseCheck(pc, item)) 
return; 
if (pc.hasSkillEffect(71) == true) { 
return; 
} 
int time = 1800; 
pc.sendPackets(new S_SkillSound(pc.getId(), 191)); 
pc.broadcastPacket(new S_SkillSound(pc.getId(), 191)); 
if (pc.getHasteItemEquipped() > 0) { 
return; 
} 
pc.setDrink(false); 
if (pc.hasSkillEffect(HASTE)) { 
pc.killSkillEffectTimer(HASTE); 
pc.sendPackets(new S_SkillHaste(pc.getId(), 0, 0)); 
pc.broadcastPacket(new S_SkillHaste(pc.getId(), 0, 0)); 
pc.setMoveSpeed(0); 
} else if (pc.hasSkillEffect(GREATER_HASTE)) { 
pc.killSkillEffectTimer(GREATER_HASTE); 
pc.sendPackets(new S_SkillHaste(pc.getId(), 0, 0)); 
pc.broadcastPacket(new S_SkillHaste(pc.getId(), 0, 0)); 
pc.setMoveSpeed(0); 
} else if (pc.hasSkillEffect(STATUS_HASTE)) { 
pc.killSkillEffectTimer(STATUS_HASTE); 
pc.sendPackets(new S_SkillHaste(pc.getId(), 0, 0)); 
pc.broadcastPacket(new S_SkillHaste(pc.getId(), 0, 0)); 
pc.setMoveSpeed(0); 
} 
if (pc.hasSkillEffect(SLOW)) { 
pc.killSkillEffectTimer(SLOW); 
pc.sendPackets(new S_SkillHaste(pc.getId(), 0, 0)); 
pc.broadcastPacket(new S_SkillHaste(pc.getId(), 0, 0)); 
} else if (pc.hasSkillEffect(GREATER_SLOW)) { 
pc.killSkillEffectTimer(GREATER_SLOW); 
pc.sendPackets(new S_SkillHaste(pc.getId(), 0, 0)); 
pc.broadcastPacket(new S_SkillHaste(pc.getId(), 0, 0)); 
} else if (pc.hasSkillEffect(ENTANGLE)) { 
pc.killSkillEffectTimer(ENTANGLE); 
pc.sendPackets(new S_SkillHaste(pc.getId(), 0, 0)); 
pc.broadcastPacket(new S_SkillHaste(pc.getId(), 0, 0)); 
} else { 
pc.sendPackets(new S_SkillHaste(pc.getId(), 1, time)); 
pc.broadcastPacket(new S_SkillHaste(pc.getId(), 1, 0)); 
pc.setMoveSpeed(1); 
pc.setSkillEffect(STATUS_HASTE, time * 1000); 
} 
pc.getInventory().removeItem(item, 1); 
L1ItemDelay.onItemUse(pc, item); 
} 

private void useBravePotion(L1PcInstance pc, int item_id) { 
if (pc.getBraveSpeed() != 0) 
return; 
L1ItemInstance item = pc.getInventory().findItemId(item_id); 
if (item == null) { 
if (pc.getAutoStatus() == AUTO_STATUS_WALK || pc.getAutoStatus() == AUTO_STATUS_ATTACK) { 
returnScroll(pc); 
} else { 
if (isFindShop(pc)) { 
pc.setAutoStatus(AUTO_STATUS_SETTING); 
} 
} 
return; 
} 
if (!isUseCheck(pc, item)) 
return; 
if (pc.hasSkillEffect(71) == true) { 
return; 
} 
cancelAbsoluteBarrier(pc); 
int time = 0; 
if (item_id == L1ItemId.POTION_OF_EMOTION_BRAVERY || item_id == 30073) { 
time = 300; 
} else if (item_id == L1ItemId.B_POTION_OF_EMOTION_BRAVERY) { 
time = 350; 
} else if (item_id == 41415) { 
time = 1800; 
} else if (item_id == 40068 || item_id == 30076) { 
time = 480; 
if (pc.hasSkillEffect(STATUS_BRAVE)) { 
pc.killSkillEffectTimer(STATUS_BRAVE); 
pc.sendPackets(new S_SkillBrave(pc.getId(), 0, 0)); 
pc.broadcastPacket(new S_SkillBrave(pc.getId(), 0, 0)); 
pc.setBraveSpeed(0); 
} 
if (pc.hasSkillEffect(WIND_WALK)) { 
pc.killSkillEffectTimer(WIND_WALK); 
pc.sendPackets(new S_SkillBrave(pc.getId(), 0, 0)); 
pc.broadcastPacket(new S_SkillBrave(pc.getId(), 0, 0)); 
pc.setBraveSpeed(0); 
} 
if (pc.hasSkillEffect(DANCING_BLADES)) { 
pc.killSkillEffectTimer(DANCING_BLADES); 
pc.sendPackets(new S_SkillBrave(pc.getId(), 0, 0)); 
Broadcaster.broadcastPacket(pc, new S_SkillBrave(pc.getId(), 0, 0)); 
pc.setBraveSpeed(0); 
} 
} else if (item_id == 140068) { 
time = 700; 
if (pc.hasSkillEffect(STATUS_BRAVE)) { 
pc.killSkillEffectTimer(STATUS_BRAVE); 
pc.sendPackets(new S_SkillBrave(pc.getId(), 0, 0)); 
pc.broadcastPacket(new S_SkillBrave(pc.getId(), 0, 0)); 
pc.setBraveSpeed(0); 
} 
if (pc.hasSkillEffect(WIND_WALK)) { 
pc.killSkillEffectTimer(WIND_WALK); 
pc.sendPackets(new S_SkillBrave(pc.getId(), 0, 0)); 
pc.broadcastPacket(new S_SkillBrave(pc.getId(), 0, 0)); 
pc.setBraveSpeed(0); 
} 
if (pc.hasSkillEffect(DANCING_BLADES)) { 
pc.killSkillEffectTimer(DANCING_BLADES); 
pc.sendPackets(new S_SkillBrave(pc.getId(), 0, 0)); 
Broadcaster.broadcastPacket(pc, new S_SkillBrave(pc.getId(), 0, 0)); 
pc.setBraveSpeed(0); 
} 
} else if (item_id == 210110) { 
time = 1800; 
if (pc.hasSkillEffect(STATUS_BRAVE)) { 
pc.killSkillEffectTimer(STATUS_BRAVE); 
pc.sendPackets(new S_SkillBrave(pc.getId(), 0, 0)); 
pc.broadcastPacket(new S_SkillBrave(pc.getId(), 0, 0)); 
pc.setBraveSpeed(0); 
} 
if (pc.hasSkillEffect(WIND_WALK)) { 
pc.killSkillEffectTimer(WIND_WALK); 
pc.sendPackets(new S_SkillBrave(pc.getId(), 0, 0)); 
pc.broadcastPacket(new S_SkillBrave(pc.getId(), 0, 0)); 
pc.setBraveSpeed(0); 
} 
} else if (item_id == 40031 || item_id == 30075) { 
time = 600; 
} else if (item_id == 210115) { 
time = 1800; 
} else if (item_id == 40733) { 
time = 600; 
if (pc.hasSkillEffect(STATUS_ELFBRAVE)) { 
pc.killSkillEffectTimer(STATUS_ELFBRAVE); 
pc.sendPackets(new S_SkillBrave(pc.getId(), 0, 0)); 
pc.broadcastPacket(new S_SkillBrave(pc.getId(), 0, 0)); 
pc.setBraveSpeed(0); 
} 
if (pc.hasSkillEffect(HOLY_WALK)) { 
pc.killSkillEffectTimer(HOLY_WALK); 
pc.sendPackets(new S_SkillBrave(pc.getId(), 0, 0)); 
pc.broadcastPacket(new S_SkillBrave(pc.getId(), 0, 0)); 
pc.setBraveSpeed(0); 
} 
if (pc.hasSkillEffect(MOVING_ACCELERATION)) { 
pc.killSkillEffectTimer(MOVING_ACCELERATION); 
pc.sendPackets(new S_SkillBrave(pc.getId(), 0, 0)); 
pc.broadcastPacket(new S_SkillBrave(pc.getId(), 0, 0)); 
pc.setBraveSpeed(0); 
} 
if (pc.hasSkillEffect(WIND_WALK)) { 
pc.killSkillEffectTimer(WIND_WALK); 
pc.sendPackets(new S_SkillBrave(pc.getId(), 0, 0)); 
pc.broadcastPacket(new S_SkillBrave(pc.getId(), 0, 0)); 
pc.setBraveSpeed(0); 
} 
if (pc.hasSkillEffect(STATUS_FRUIT)) { 
pc.killSkillEffectTimer(STATUS_FRUIT); 
pc.setBraveSpeed(0); 
} 
} 
if (item_id == 40068 || item_id == 140068 || item_id == 210110 || item_id == 30076) { // 엘븐 
// 와퍼 
pc.sendPackets(new S_SkillBrave(pc.getId(), 3, time)); 
pc.broadcastPacket(new S_SkillBrave(pc.getId(), 3, 0)); 
pc.setSkillEffect(STATUS_ELFBRAVE, time * 1000); 
} else { 
pc.sendPackets(new S_SkillBrave(pc.getId(), 1, time)); 
pc.broadcastPacket(new S_SkillBrave(pc.getId(), 1, 0)); 
pc.setSkillEffect(STATUS_BRAVE, time * 1000); 
} 
pc.sendPackets(new S_SkillSound(pc.getId(), 751)); 
pc.broadcastPacket(new S_SkillSound(pc.getId(), 751)); 
pc.setBraveSpeed(1); 
pc.getInventory().removeItem(item, 1); 
L1ItemDelay.onItemUse(pc, item); 
} 

private void useWisdomPotion(L1PcInstance pc) { 
if (pc.hasSkillEffect(STATUS_WISDOM_POTION)) 
return; 
L1ItemInstance item = pc.getInventory().findItemId(210113); 
if (item == null) { 
if (pc.getAutoStatus() == AUTO_STATUS_WALK || pc.getAutoStatus() == AUTO_STATUS_ATTACK) { 
returnScroll(pc); 
} else { 
if (isFindShop(pc)) { 
pc.setAutoStatus(AUTO_STATUS_SETTING); 
} 
} 
return; 
} 
if (!isUseCheck(pc, item)) 
return; 
if (pc.hasSkillEffect(71) == true) { 
return; 
} 
cancelAbsoluteBarrier(pc); 
int time = 1000; 

if (!pc.hasSkillEffect(STATUS_WISDOM_POTION)) { 
pc.getAbility().addSp(2); 
pc.addMpr(2); 
} 
pc.sendPackets(new S_SkillIconWisdomPotion((time))); 
pc.sendPackets(new S_SkillSound(pc.getId(), 750)); 
pc.broadcastPacket(new S_SkillSound(pc.getId(), 750)); 
pc.setSkillEffect(STATUS_WISDOM_POTION, time * 1000); 
pc.getInventory().removeItem(item, 1); 
L1ItemDelay.onItemUse(pc, item); 
} 

private void useFruit(L1PcInstance pc) { 
if (pc.getBraveSpeed() == 4) { 
return; 
} 
L1ItemInstance item = pc.getInventory().findItemId(210036); 
if (item == null) { 
if (pc.getAutoStatus() == AUTO_STATUS_WALK || pc.getAutoStatus() == AUTO_STATUS_ATTACK) { 
returnScroll(pc); 
} else { 
if (isFindShop(pc)) { 
pc.setAutoStatus(AUTO_STATUS_SETTING); 
} 
} 
return; 
} 
if (pc.hasSkillEffect(DECAY_POTION) == true) { 
return; 
} 
cancelAbsoluteBarrier(pc); 
int time = 480; 
if (pc.hasSkillEffect(STATUS_BRAVE)) { 
pc.killSkillEffectTimer(STATUS_BRAVE); 
pc.sendPackets(new S_SkillBrave(pc.getId(), 0, 0)); 
pc.setBraveSpeed(0); 
} 

pc.setBraveSpeed(4); 
pc.sendPackets(new S_SkillBrave(pc.getId(), 4, time)); 
pc.sendPackets(new S_SkillSound(pc.getId(), 7110)); 
pc.broadcastPacket(new S_SkillSound(pc.getId(), 7110)); 
pc.setSkillEffect(STATUS_FRUIT, time * 1000); 
pc.getInventory().removeItem(item, 1); 
L1ItemDelay.onItemUse(pc, item); 
} 

private void useBluePotion(L1PcInstance pc) { 
if (pc.hasSkillEffect(STATUS_BLUE_POTION)) 
return; 
L1ItemInstance item = pc.getInventory().findItemId(210114); 
if (item == null) { 
if (pc.getAutoStatus() == AUTO_STATUS_WALK || pc.getAutoStatus() == AUTO_STATUS_ATTACK) { 
returnScroll(pc); 
} else { 
if (isFindShop(pc)) { 
pc.setAutoStatus(AUTO_STATUS_SETTING); 
} 
} 
return; 
} 
if (!isUseCheck(pc, item)) 
return; 
if (pc.hasSkillEffect(DECAY_POTION)) { 
return; 
} 
cancelAbsoluteBarrier(pc); 
int time = 1800; 

pc.sendPackets(new S_SkillIconGFX(34, time, true)); 
pc.sendPackets(new S_SkillSound(pc.getId(), 190)); 
pc.broadcastPacket(new S_SkillSound(pc.getId(), 190)); 
pc.setSkillEffect(STATUS_BLUE_POTION, time * 1000); 
pc.sendPackets(new S_ServerMessage(1007)); 
pc.getInventory().removeItem(item, 1); 
L1ItemDelay.onItemUse(pc, item); 
} 

private void toUseHealingMagic(L1PcInstance pc) { 
if (!pc.isWizard()) 
return; 
int _hp = (int) (((double) pc.getCurrentHp() / (double) pc.getMaxHp()) * 100); 
L1SkillUse _skilluse; 
L1Skills _skill; 
if (_hp <= 70) { 
int _mp = (int) (((double) pc.getCurrentMp() / (double) pc.getMaxMp()) * 100); 
if (_mp <= 30) 
return; 
if (!SkillCheck.getInstance().CheckSkill(pc, L1SkillId.GREATER_HEAL)) 
return; 
if (pc.getAutoSkillDelay() > 0) { 
pc.setAutoSkillDelay(pc.getAutoSkillDelay() - 1); 
return; 
} 
_skill = SkillsTable.getInstance().getTemplate(L1SkillId.GREATER_HEAL); 
_skilluse = new L1SkillUse(); 
_skilluse.handleCommands(pc, L1SkillId.GREATER_HEAL, pc.getId(), pc.getX(), pc.getY(), null, 0, 
L1SkillUse.TYPE_NORMAL); 
pc.setAutoSkillDelay(_skill.getReuseDelay() / 1000 + 2); 
} 
} 

private void toAttackMonster(L1PcInstance pc) { 
try { 
if (!isAutoAttackTime(pc)) { 
return; 
} 
L1Character target = pc.getAutoTarget(); 

if (pc.getAutoTarget() == null) { 
pc.setAutoStatus(AUTO_STATUS_WALK); 
return; 
} 

if (target != null && target.isDead()) { 
// pc.removeAutoTargetList(target);  // ??? 
pc.setAutoTarget(null); 
return; 
} 
/* 
if (pc.getAutoTarget() == null) { 
pc.setAutoTarget(getTarget(pc)); 
}*/ 

if (!isAttack(pc, target)) { 
// pc.removeAutoTargetList(target); 
pc.setAutoTarget(null); 
return; 
} 

boolean IsCheck = isDistance(pc.getX(), pc.getY(), pc.getMapId(), target.getX(), target.getY(), target.getMapId(), pc.getAutoRange()); 
System.out.println("CALL - 01 toAttack - " + IsCheck); 
if (isDistance(pc.getX(), pc.getY(), pc.getMapId(), target.getX(), target.getY(), target.getMapId(), (pc.getAutoRange() + 1))) { 
if (pc.glanceCheck(target.getX(), target.getY())) { 
toAttack(pc);
} else { 
toMoving(pc, target.getX(), target.getY(), 0, true); 
} 
} else { 
// System.out.println("CALL - 03 toMoving "); 
toMoving(pc, target.getX(), target.getY(), 0, true); 
} 
} catch (Exception e) { 
pc.removeAutoTargetList(pc.getAutoTarget()); 
pc.setAutoTarget(null); 
} 
} 

public boolean isAttack(L1PcInstance pc, L1Character cha) { 
try { 
if (cha == null) 
return false; 

if (cha.hasSkillEffect(L1SkillId.EARTH_BIND) || cha.hasSkillEffect(L1SkillId.ICE_LANCE)) { 
return false; 
} 
if (cha.getMap().isSafetyZone(cha.getLocation())) 
return false; 
if (cha.isDead()) 
return false; 
if (cha.isInvisble()) 
return false; 
if (!isDistance(pc.getX(), pc.getY(), pc.getMapId(), cha.getX(), cha.getY(), cha.getMapId(), 16)) 
return false; 
if (!pc.glanceCheck(cha.getX(), cha.getY())) 
return false; 

return true; 
} catch (Exception e) { 
return false; 
} 
} 

private void toAttack(L1PcInstance pc) { 
try { 
L1Character target = pc.getAutoTarget(); 
if (target == null) { 
pc.getAutoTargetList().clear(); 
pc.setAutoStatus(AUTO_STATUS_WALK); 
return; 
} 
if (pc.hasSkillEffect(L1SkillId.MEDITATION)) { 
pc.killSkillEffectTimer(L1SkillId.MEDITATION); 
} 
pc.delInvis(); 
if (pc.isElf() && pc.getWeapon().getItem().getType1() == 20) { 
if (!pc.getInventory().checkItem(3110168)) { 
returnScroll(pc); 
return; 
} 
int chance = _rnd.nextInt(100) + 1; 
if (chance <= 30) 
this.toTripleArrow(pc, target); 
else { 
target.onAction(pc); 
} 
} else { 
target.onAction(pc); 
} 
} catch (Exception e) { 
pc.setAutoTarget(null); 
pc.getAutoTargetList().clear(); 
} 
} 

private L1Character getTarget(L1PcInstance pc) { 
L1Character realTarget = null; 
try { 
for (int i = 0; i < pc.getAutoTargetList().toTargetArrayList().size(); i++) { 
L1Character target = pc.getAutoTargetList().toTargetArrayList().get(i); 
if (target.isDead()) { 
pc.removeAutoTargetList(target); 
pc.setAutoTarget(null); 
continue; 
} 
if (!pc.glanceCheck(target.getX(), target.getY())) { 
pc.removeAutoTargetList(target); 
pc.setAutoTarget(null); 
continue; 
} 
if (realTarget == null) { 
realTarget = target; 
} else if (!target.isDead() && getDistance(pc.getX(), pc.getY(), target.getX(), 
target.getY()) < getDistance(pc.getX(), pc.getY(), realTarget.getX(), realTarget.getY())) { 
realTarget = target; 
} 
} 
return realTarget; 
} catch (Exception e) { 
pc.getAutoTargetList().clear(); 
pc.setAutoTarget(null); 
return realTarget; 
} 
} 

private boolean isDistance(int x, int y, int m, int tx, int ty, int tm, int loc) { 
int distance = getDistance(x, y, tx, ty); 
if (loc < distance) 
return false; 
if (m != tm) 
return false; 
return true; 
} 

private int getDistance(int x, int y, int tx, int ty) { 
long dx = tx - x; 
long dy = ty - y; 
return (int) Math.sqrt(dx * dx + dy * dy); 
} 
 
private void toSearchTarget(L1PcInstance pc) { 
L1Object[] temp = pc.toScreenObject(); 
L1MonsterInstance target = null; 

for (int i = 0; i < temp.length; i++) { 
if (temp[i] == null) { 
continue; 
} 

if (temp[i] instanceof L1MonsterInstance) { 
L1MonsterInstance monster = (L1MonsterInstance) temp[i]; 
if (monster.isDead()) { 
continue; 
} else if (monster.getHiddenStatus() >= 1) { 
continue; 
} else if (!pc.glanceCheck(monster.getX(), monster.getY())) { 
continue; 
}
target = monster; 
} 
if (target != null) { 
pc.setAutoTarget(target); 
} 
} 
} 

/* 
private void searchTarget(L1PcInstance pc) { 
checkTarget(pc); 
for (L1Object obj : L1World.getInstance().getVisibleObjects(pc)) { 
if (obj == null) { 
continue; 
} 
if (obj instanceof L1MonsterInstance) { 
L1MonsterInstance mon = (L1MonsterInstance) obj; 
if (mon.isDead()) { 
continue; 
} 
if (mon.getHiddenStatus() >= 1) { 
continue; 
} 

if (!pc.glanceCheck(mon.getX(), mon.getY())) { 
continue; 
} 
pc.addAutoTargetList(mon); 
} 
} 
} 
*/ 
public void checkTarget(L1PcInstance pc) { 
try { 
L1Character target = pc.getAutoTarget(); 
if (target == null || target.getMapId() != pc.getMapId() || target.isDead() || target.getCurrentHp() <= 0 
|| (target.isInvisble() && !pc.getAutoTargetList().containsKey(target))) { 
if (target != null) { 
tagertClear(pc); 
} 

if (!pc.getAutoTargetList().isEmpty()) { 
pc.setAutoTarget(pc.getAutoTargetList().getMaxHateCharacter()); 
checkTarget(pc); 
} 
} 
} catch (Exception e) { 
} 
} 

public void tagertClear(L1PcInstance pc) { 
L1Character target = pc.getAutoTarget(); 
if (target == null) { 
return; 
} 
pc.getAutoTargetList().remove(target); 
pc.setAutoTarget(null); 
} 

public void setHate(L1PcInstance pc, L1Character cha, int hate) { 
if (cha != null && cha.getId() != pc.getId()) { 
if (!pc.getAutoTargetList().containsKey(cha)) { 
pc.getAutoTargetList().add(cha, hate); 
} 
if (pc.getAutoTarget() == null) { 
pc.setAutoTarget(pc.getAutoTargetList().getMaxHateCharacter()); 
} 
checkTarget(pc); 
} 
} 

private boolean isFindShop(L1PcInstance pc) { 
L1NpcInstance shop = null; 
for (L1NpcInstance npc : L1World.getInstance().getAllNpc()) { 
if (npc.getNpcId() == _shopNpcId && npc.getMapId() == 4) {// 로봇잡화상점 
// 맵 
shop = npc; 
break; 
} 
} 
if (isDistance(pc.getX(), pc.getY(), pc.getMapId(), shop.getX(), shop.getY(), shop.getMapId(), 3)) { 
return true; 
} 
return false; 
} 

private void toShopWalk(L1PcInstance pc) { 
if (!isAutoMoveTime(pc)) 
return; 
L1NpcInstance shop = null; 
for (L1NpcInstance npc : L1World.getInstance().getAllNpc()) { 
if (npc.getNpcId() == _shopNpcId && npc.getMapId() == 4) {// 로봇잡화상점 
// 맵 
shop = npc; 
break; 
} 
} 
int x = shop.getX(); 
int y = shop.getY(); 
int dir = moveDirection(pc, x, y); 
dir = checkObject(pc.getX(), pc.getY(), pc.getMapId(), dir); 
if (!isDistance(pc.getX(), pc.getY(), pc.getMapId(), x, y, shop.getMapId(), 3)) { 
if (pc.getAutoMoveCount() == 0) { 
toCharacterRefresh(pc); 
} 
pc.setAutoMoveCount(pc.getAutoMoveCount() + 1); 
if (pc.getAutoMoveCount() >= 7) { 
pc.setAutoMoveCount(0); 
} 
setDirectionMove(pc, dir); 
} else { 
pc.setAutoStatus(AUTO_STATUS_SETTING); 
} 
} 

private void toRandomWalk(L1PcInstance pc) { 
if (!isAutoMoveTime(pc)) 
return; 

if (pc.getAutoMoveCount() == 0) { 
int randomLocX = (int) ((Math.random() * 20) - 10); 
int randomLocY = (int) ((Math.random() * 20) - 10); 
int _locX = pc.getX() + randomLocX; 
int _locY = pc.getY() + randomLocY; 
pc.setAutoLocX(_locX); 
pc.setAutoLocY(_locY); 
} 
int dir = pc.targetDirection(pc.getAutoLocX(), pc.getAutoLocY()); 
toMoving(pc, pc.getAutoLocX(), pc.getAutoLocY(), dir, true); 
} 

private void toMoving(L1PcInstance pc, int x, int y, int h, boolean astar) { 
try { 
if (astar) { 
pc.getAutoAstar().ResetPath(); 
pc.setAutoTail(pc.getAutoAstar().FindPath(pc, x, y, pc.getMapId(), null)); 
if (pc.getAutoTail() != null) { 
pc._autoCurrentPath = -1; 
while (pc.getAutoTail() != null) { 
if (pc.getAutoTail().x == pc.getX() && pc.getAutoTail().y == pc.getY()) { 
break; 
} 
pc.getAutoPath()[++pc._autoCurrentPath][0] = pc.getAutoTail().x; 
pc.getAutoPath()[pc._autoCurrentPath][1] = pc.getAutoTail().y; 
pc.setAutoTail(pc.getAutoTail().prev); 
} 
if (pc._autoCurrentPath == -1) 
return; 
toMoving(pc, pc.getAutoPath()[pc._autoCurrentPath][0], pc.getAutoPath()[pc._autoCurrentPath][1], 
calcheading(pc.getX(), pc.getY(), pc.getAutoPath()[pc._autoCurrentPath][0], 
pc.getAutoPath()[pc._autoCurrentPath][1])); 

} else { 
} 
} else { 
toMoving(pc, x, y, h); 
} 
} catch (Exception e) { 

} 
} 

private void toMoving(L1PcInstance pc, final int x, final int y, final int h) { 
try { 
pc.getMap().setPassable(pc.getLocation(), true); 
pc.getLocation().set(x, y); 
pc.setHeading(h); 
L1WorldTraps.getInstance().onPlayerMoved(pc); 
pc.getMap().setPassable(pc.getLocation(), false); 
pc.sendPackets(new S_MoveCharPacket(pc)); 
Broadcaster.broadcastPacket(pc, new S_MoveCharPacket(pc)); 
pc.setAutoMoveCount(pc.getAutoMoveCount() + 1); 
if (pc.getAutoMoveCount() >= 7) { 
pc.setAutoMoveCount(0); 
toCharacterRefresh(pc); 
} 
} catch (Exception e) { 
// e.printStackTrace(); 
} 
} 

private int calcheading(int myx, int myy, int tx, int ty) { 
if (tx > myx && ty > myy) { 
return 3; 
} else if (tx < myx && ty < myy) { 
return 7; 
} else if (tx > myx && ty == myy) { 
return 2; 
} else if (tx < myx && ty == myy) { 
return 6; 
} else if (tx == myx && ty < myy) { 
return 0; 
} else if (tx == myx && ty > myy) { 
return 4; 
} else if (tx < myx && ty > myy) { 
return 5; 
} else { 
return 1; 
} 
} 

public int checkObject(int x, int y, short m, int d) { 
L1Map map = L1WorldMap.getInstance().getMap(m); 
switch (d) { 
case 1: 
if (map.isPassable(x, y, 1)) { 
return 1; 
} else if (map.isPassable(x, y, 0)) { 
return 0; 
} else if (map.isPassable(x, y, 2)) { 
return 2; 
} 
break; 
case 2: 
if (map.isPassable(x, y, 2)) { 
return 2; 
} else if (map.isPassable(x, y, 1)) { 
return 1; 
} else if (map.isPassable(x, y, 3)) { 
return 3; 
} 
break; 
case 3: 
if (map.isPassable(x, y, 3)) { 
return 3; 
} else if (map.isPassable(x, y, 2)) { 
return 2; 
} else if (map.isPassable(x, y, 4)) { 
return 4; 
} 
break; 
case 4: 
if (map.isPassable(x, y, 4)) { 
return 4; 
} else if (map.isPassable(x, y, 3)) { 
return 3; 
} else if (map.isPassable(x, y, 5)) { 
return 5; 
} 
break; 
case 5: 
if (map.isPassable(x, y, 5)) { 
return 5; 
} else if (map.isPassable(x, y, 4)) { 
return 4; 
} else if (map.isPassable(x, y, 6)) { 
return 6; 
} 
break; 
case 6: 
if (map.isPassable(x, y, 6)) { 
return 6; 
} else if (map.isPassable(x, y, 5)) { 
return 5; 
} else if (map.isPassable(x, y, 7)) { 
return 7; 
} 
break; 
case 7: 
if (map.isPassable(x, y, 7)) { 
return 7; 
} else if (map.isPassable(x, y, 6)) { 
return 6; 
} else if (map.isPassable(x, y, 0)) { 
return 0; 
} 
break; 
case 0: 
if (map.isPassable(x, y, 0)) { 
return 0; 
} else if (map.isPassable(x, y, 7)) { 
return 7; 
} else if (map.isPassable(x, y, 1)) { 
return 1; 
} 
break; 
default: 
break; 
} 
return -1; 
} 

private final byte HEADING_TABLE_X[] = { 0, 1, 1, 1, 0, -1, -1, -1 }; 
private final byte HEADING_TABLE_Y[] = { -1, -1, 0, 1, 1, 1, 0, -1 }; 

private void setDirectionMove(L1PcInstance pc, int dir) { 
if (dir >= 0) { 
int nx = 0; 
int ny = 0; 

int heading = 0; 
nx = HEADING_TABLE_X[dir]; 
ny = HEADING_TABLE_Y[dir]; 
heading = dir; 

pc.setHeading(heading); 
pc.getMap().setPassable(pc.getLocation(), true); 

int nnx = pc.getX() + nx; 
int nny = pc.getY() + ny; 
pc.setX(nnx); 
pc.setY(nny); 
L1WorldTraps.getInstance().onPlayerMoved(pc); 
pc.getMap().setPassable(pc.getLocation(), false); 

pc.sendPackets(new S_MoveCharPacket(pc)); 
Broadcaster.broadcastPacket(pc, new S_MoveCharPacket(pc)); 
} 
} 

public int moveDirection(L1PcInstance pc, int x, int y) { 
return moveDirection(pc, x, y, pc.getLocation().getLineDistance(new Point(x, y))); 
} 

public int moveDirection(L1PcInstance pc, int x, int y, double d) { 
int dir = 0; 
if (d > 25) { 
dir = pc.targetDirection(x, y); 
dir = checkObject(pc.getX(), pc.getY(), pc.getMapId(), dir); 
} else { 
dir = _serchCource(pc, x, y); 
if (dir == -1) { 
dir = pc.targetDirection(x, y); 
} 
} 
return dir; 
} 

private int _serchCource(L1PcInstance pc, int x, int y) { 
int i; 
int locCenter = 25 + 1; 
int diff_x = x - locCenter; 
int diff_y = y - locCenter; 
int[] locBace = { pc.getX() - diff_x, pc.getY() - diff_y, 0, 0 }; 
int[] locNext = new int[4]; 
int[] locCopy; 
int[] dirFront = new int[5]; 
boolean serchMap[][] = new boolean[locCenter * 2 + 1][locCenter * 2 + 1]; 
LinkedList<int[]> queueSerch = new LinkedList<int[]>(); 

for (int j = 25 * 2 + 1; j > 0; j--) { 
for (i = 25 - Math.abs(locCenter - j); i >= 0; i--) { 
serchMap[j][locCenter + i] = true; 
serchMap[j][locCenter - i] = true; 
} 
} 
int[] firstCource = { 2, 4, 6, 0, 1, 3, 5, 7 }; 
for (i = 0; i < 8; i++) { 
System.arraycopy(locBace, 0, locNext, 0, 4); 
_moveLocation(locNext, firstCource[i]); 
if (locNext[0] - locCenter == 0 && locNext[1] - locCenter == 0) { 
return firstCource[i]; 
} 
if (serchMap[locNext[0]][locNext[1]]) { 
int tmpX = locNext[0] + diff_x; 
int tmpY = locNext[1] + diff_y; 
boolean found = false; 
switch (i) { 
case 0: 
found = pc.getMap().isPassable(tmpX, tmpY + 1, i); 
break; 
case 1: 
found = pc.getMap().isPassable(tmpX - 1, tmpY + 1, i); 
break; 
case 2: 
found = pc.getMap().isPassable(tmpX - 1, tmpY, i); 
break; 
case 3: 
found = pc.getMap().isPassable(tmpX - 1, tmpY - 1, i); 
break; 
case 4: 
found = pc.getMap().isPassable(tmpX, tmpY - 1, i); 
break; 
case 5: 
found = pc.getMap().isPassable(tmpX + 1, tmpY - 1, i); 
break; 
case 6: 
found = pc.getMap().isPassable(tmpX + 1, tmpY, i); 
break; 
case 7: 
found = pc.getMap().isPassable(tmpX + 1, tmpY + 1, i); 
break; 
default: 
break; 
} 
if (found) { 
locCopy = new int[4]; 
System.arraycopy(locNext, 0, locCopy, 0, 4); 
locCopy[2] = firstCource[i]; 
locCopy[3] = firstCource[i]; 
queueSerch.add(locCopy); 
} 
serchMap[locNext[0]][locNext[1]] = false; 
} 
} 
locBace = null; 
while (queueSerch.size() > 0) { 
locBace = queueSerch.removeFirst(); 
_getFront(dirFront, locBace[2]); 
for (i = 4; i >= 0; i--) { 
System.arraycopy(locBace, 0, locNext, 0, 4); 
_moveLocation(locNext, dirFront[i]); 
if (locNext[0] - locCenter == 0 && locNext[1] - locCenter == 0) { 
return locNext[3]; 
} 
if (serchMap[locNext[0]][locNext[1]]) { 
int tmpX = locNext[0] + diff_x; 
int tmpY = locNext[1] + diff_y; 
boolean found = false; 
switch (i) { 
case 0: 
found = pc.getMap().isPassable(tmpX, tmpY + 1, i); 
break; 
case 1: 
found = pc.getMap().isPassable(tmpX - 1, tmpY + 1, i); 
break; 
case 2: 
found = pc.getMap().isPassable(tmpX - 1, tmpY, i); 
break; 
case 3: 
found = pc.getMap().isPassable(tmpX - 1, tmpY - 1, i); 
break; 
case 4: 
found = pc.getMap().isPassable(tmpX, tmpY - 1, i); 
break; 
default: 
break; 
} 
if (found) { 
locCopy = new int[4]; 
System.arraycopy(locNext, 0, locCopy, 0, 4); 
locCopy[2] = dirFront[i]; 
queueSerch.add(locCopy); 
} 
serchMap[locNext[0]][locNext[1]] = false; 
} 
} 
locBace = null; 
} 
return -1; 
} 

private void _getFront(int[] ary, int d) { 
switch (d) { 
case 1: 
ary[4] = 2; 
ary[3] = 0; 
ary[2] = 1; 
ary[1] = 3; 
ary[0] = 7; 
break; 
case 2: 
ary[4] = 2; 
ary[3] = 4; 
ary[2] = 0; 
ary[1] = 1; 
ary[0] = 3; 
break; 
case 3: 
ary[4] = 2; 
ary[3] = 4; 
ary[2] = 1; 
ary[1] = 3; 
ary[0] = 5; 
break; 
case 4: 
ary[4] = 2; 
ary[3] = 4; 
ary[2] = 6; 
ary[1] = 3; 
ary[0] = 5; 
break; 
case 5: 
ary[4] = 4; 
ary[3] = 6; 
ary[2] = 3; 
ary[1] = 5; 
ary[0] = 7; 
break; 
case 6: 
ary[4] = 4; 
ary[3] = 6; 
ary[2] = 0; 
ary[1] = 5; 
ary[0] = 7; 
break; 
case 7: 
ary[4] = 6; 
ary[3] = 0; 
ary[2] = 1; 
ary[1] = 5; 
ary[0] = 7; 
break; 
case 0: 
ary[4] = 2; 
ary[3] = 6; 
ary[2] = 0; 
ary[1] = 1; 
ary[0] = 7; 
break; 
default: 
break; 
} 
} 

private void _moveLocation(int[] ary, int d) { 
ary[0] = ary[0] + HEADING_TABLE_X[d]; 
ary[1] = ary[1] + HEADING_TABLE_Y[d]; 
ary[2] = d; 
} 

private void cancelAbsoluteBarrier(L1PcInstance pc) { 
if (pc.hasSkillEffect(ABSOLUTE_BARRIER)) { 
pc.killSkillEffectTimer(ABSOLUTE_BARRIER); 
pc.startHpMpRegeneration(); 
// pc.startMpRegeneration(); 
pc.startMpRegenerationByDoll(); 
} 
} 

private void toSettingBuyShop(L1PcInstance pc) { 
int healId = pc.getAutoPotion(); 
L1ShopItem shopItem; 
int price; 
L1Shop shop = ShopTable.getInstance().get(_shopNpcId); 
/** 통합적으로 사는 아이템 [로봇잡화상점에 있어야함] */ 
int[] allItemIds = { healId, 40018, 40100, 40081, 40088 }; 
int[] allCounts = { 500, 5, 300, 5, 20 }; 
int[] classItemId = null; 
int[] classItemCount = null; 
int currentCount; 
int needCount; 
L1PcInventory inv = pc.getInventory(); 

if (pc.isCrown()) { 
classItemId = new int[] { 40031 }; 
classItemCount = new int[] { 30 }; 
} else if (pc.isKnight()) { 
classItemId = new int[] { 41415 }; 
classItemCount = new int[] { 5 }; 
} else if (pc.is전사()) { 
classItemId = new int[] { 41415, 41246 }; 
classItemCount = new int[] { 5, 2000 }; 
} else if (pc.isDragonknight()) { 
classItemId = new int[] { 210035 }; 
classItemCount = new int[] { 100 }; 
} else if (pc.isElf()) { 
if (pc.getWeapon() == null) { 
if (pc.getElfAttr() == 2) {// 불마법 요정 
classItemId = new int[] { 40068, 40319 }; 
classItemCount = new int[] { 30, 20 }; 
} else { 
classItemId = new int[] { 210110, 3110168 }; 
classItemCount = new int[] { 5, 3000 }; 
} 
} else { 
if (pc.getWeapon().getItem().getType1() == 20) { 
classItemId = new int[] { 210110, 3110168 }; 
classItemCount = new int[] { 5, 3000 }; 
} else { 
if (pc.getElfAttr() == 2) {// 불마법 요정 
classItemId = new int[] { 40068, 40319 }; 
classItemCount = new int[] { 30, 20 }; 
} else { 
classItemId = new int[] { 210110, 3110168 }; 
classItemCount = new int[] { 5, 3000 }; 
} 
} 
} 
} else if (pc.isDarkelf()) { 
classItemId = new int[] { 40321 }; 
classItemCount = new int[] { 100 }; 
} else if (pc.isBlackwizard()) { 
classItemId = new int[] { 210036, 210113 }; 
classItemCount = new int[] { 30, 3 }; 
} else if (pc.isWizard()) { 
classItemId = new int[] { 210113, 210114, 40318 }; 
classItemCount = new int[] { 3, 3, 100 }; 
} 

if (pc.isAutoDead()) { 
// currentCount = inv.checkItemCount(210039); 
// if (currentCount < 2) { 
// needCount = 2 - currentCount; 
shopItem = shop.getSellingItem(210039); 
price = shopItem.getPrice(); 
// price *= needCount; 

if (inv.consumeItem(L1ItemId.ADENA, price)) { 
} else { 
this.removeAuto(pc); 
return; 
} 
// } 
for (int i = 0; i < 2; i++) { 
pc.set_food(pc.get_food() + 10); 
pc.set_food(pc.get_food() + 90); 
int foodvolume = (0 / 10); 
pc.add_food(foodvolume <= 0 ? 5 : foodvolume); 
pc.sendPackets(new S_PacketBox(S_PacketBox.FOOD, pc.get_food())); 
} 
pc.setAutoDead(false); 
} 

for (int i = 0; i < allItemIds.length; i++) { 
if (pc.getAutoPolyID() == 0 && allItemIds[i] == 40088) 
continue; 
// currentCount = inv.checkItemCount(allItemIds[i]); 
// if (currentCount < allCounts[i]) { 
// needCount = allCounts[i] - currentCount; 

shopItem = shop.getSellingItem(allItemIds[i]); 

if (shopItem == null) { 
// System.out.println("아이템이 발견 되지 않았습니다1 - " + allItemIds[i]); 
continue; 
} 
price = shopItem.getPrice(); 
// price *= needCount; 

if (inv.consumeItem(L1ItemId.ADENA, price)) { 
// inv.storeItem(allItemIds[i], needCount); 
} else { 
this.removeAuto(pc); 
return; 
} 
// } 
} 
for (int i = 0; i < classItemId.length; i++) { 
// currentCount = inv.checkItemCount(classItemId[i]); 
// if (currentCount < classItemCount[i]) { 
// needCount = classItemCount[i] - currentCount; 
shopItem = shop.getSellingItem(classItemId[i]); 

if (shopItem == null) { 
// System.out.println("아이템이 발견 되지 않았습니다2 - " + allItemIds[i]); 
continue; 
} 

price = shopItem.getPrice(); 
// price *= needCount; 

if (inv.consumeItem(L1ItemId.ADENA, price)) { 
// inv.storeItem(classItemId[i], needCount); 
} else { 
this.removeAuto(pc); 
return; 
} 
// } 
} 

int rx = _rnd.nextInt(3); 
int ry = _rnd.nextInt(3); 
int ux = 32742 + rx; 
int uy = 32857 + ry; 
teleport(pc, ux, uy, (short) pc.getAutoMapId()); 
// System.out.println("이동 좌표 '" + ux + "' / '" + uy + "' / " + pc.getAutoMapId() + " -> " + pc.getX() + " / " + pc.getY()); 
pc.sendPackets(new S_TestPacket(S_TestPacket.a, 6302, 2083, "00 ff ff"));// 현재사냥터는 // PK가불가능합니다. 
} 
private void toUseScroll(L1PcInstance pc, int itemId) { 
L1ItemInstance item = pc.getInventory().findItemId(itemId); 
if (item == null) { 
if (itemId == 40100 || itemId == 40088) { 
if (pc.getAutoStatus() == AUTO_STATUS_WALK || pc.getAutoStatus() == AUTO_STATUS_ATTACK) { 
returnScroll(pc); 
} else { 
if (isFindShop(pc)) { 
pc.setAutoStatus(AUTO_STATUS_SETTING); 
} 
} 
} 
return; 
} 
if (!isUseCheck(pc, item)) 
return; 
switch (itemId) { 
case 40081: 
if (pc.getMap().isEscapable() || pc.isGm()) { 
int[] loc = L1TownLocation.getGetBackLoc(L1TownLocation.TOWNID_GIRAN); 
// pc.start_teleport(loc[0], loc[1], loc[2], pc.getHeading(), 
// 169, true, true); 
teleport(pc, loc[0], loc[1], (short) loc[2]); 
pc.getInventory().removeItem(item, 1); 
cancelAbsoluteBarrier(pc); 
L1ItemDelay.onItemUse(pc, item); 
} 
break; 
case 40100: 
// Telbookitem.clickItem(pc, itemId, 0, 0, (short)0, item); 
L1Location newLocation = pc.getLocation().randomLocation(200, true); 
int newX = newLocation.getX(); 
int newY = newLocation.getY(); 
short mapId = (short) newLocation.getMapId(); 

this.teleport(pc, newX, newY, mapId); 
L1ItemDelay.onItemUse(pc, item); 
break; 
case 40088: 
L1PolyMorph.doPoly(pc, pc.getAutoPolyID(), 1800, L1PolyMorph.MORPH_BY_ITEMMAGIC); 
pc.getInventory().removeItem(item, 1); 
L1ItemDelay.onItemUse(pc, item); 
break; 
} 
} 

private boolean isAutoAttackTime(L1PcInstance pc) { 
long temp = System.currentTimeMillis() - pc.getAutoTimeAttack(); 
if (pc.hasSkillEffect(L1SkillId.EARTH_BIND) || pc.hasSkillEffect(L1SkillId.SHOCK_STUN) 
|| pc.hasSkillEffect(L1SkillId.ICE_LANCE) || pc.hasSkillEffect(L1SkillId.CURSE_PARALYZE) 
|| pc.hasSkillEffect(L1SkillId.THUNDER_GRAB) || pc.hasSkillEffect(L1SkillId.BONE_BREAK) 
|| pc.hasSkillEffect(L1SkillId.PHANTASM) || pc.hasSkillEffect(L1SkillId.STATUS_FREEZE)) { 
return false; 
} 
int interval = pc.getAcceleratorChecker().getRightInterval(AcceleratorChecker.ACT_TYPE.ATTACK); 
if (temp < interval) { 
return false; 
} 
if (temp >= interval) { 
pc.setAutoTimeAttack(System.currentTimeMillis()); 
return true; 
} 
return false; 
} 

private boolean isAutoMoveTime(L1PcInstance pc) { 
long temp = System.currentTimeMillis() - pc.getAutoTimeMove(); 
if (pc.hasSkillEffect(L1SkillId.EARTH_BIND) || pc.hasSkillEffect(L1SkillId.SHOCK_STUN) 
|| pc.hasSkillEffect(L1SkillId.ICE_LANCE) || pc.hasSkillEffect(L1SkillId.CURSE_PARALYZE) 
|| pc.hasSkillEffect(L1SkillId.THUNDER_GRAB) || pc.hasSkillEffect(L1SkillId.BONE_BREAK) 
|| pc.hasSkillEffect(L1SkillId.PHANTASM) || pc.hasSkillEffect(L1SkillId.STATUS_FREEZE)) { 
return false; 
} 
int interval = pc.getAcceleratorChecker().getRightInterval(AcceleratorChecker.ACT_TYPE.MOVE); 

if (temp < interval) { 
return false; 
} 
if (temp >= interval) { 
pc.setAutoTimeMove(System.currentTimeMillis()); 
return true; 
} 
return false; 
} 

private void restart(L1PcInstance pc) { 
if (pc == null) { 
return; 
} 
if (pc.getAutoDeadTime() < 500) { 
pc.setAutoDeadTime(pc.getAutoDeadTime() + 1); 
return; 
} 
if (!pc.isDead()) { 
return; 
} 
int[] loc; 
loc = Getback.GetBack_Restart(pc); 
if (pc.getHellTime() > 0) { 
loc = new int[3]; 
loc[0] = 32701; 
loc[1] = 32777; 
loc[2] = 666; 
} else { 
loc = Getback.GetBack_Location(pc, true); 
} 
pc.removeAllKnownObjects(); 
pc.broadcastPacket(new S_RemoveObject(pc)); 
pc.setCurrentHp(pc.getLevel()); 
pc.set_food(39); 
pc.setDead(false); 
pc.setAutoDead(true); 
pc.setStatus(0); 
L1World.getInstance().moveVisibleObject(pc, loc[2]); 
pc.setX(loc[0]); 
pc.setY(loc[1]); 
pc.setMap((short) loc[2]); 
pc.sendPackets(new S_MapID(pc.getMap().getBaseMapId(), pc.getMap().isUnderwater())); 
pc.broadcastPacket(new S_OtherCharPacks(pc)); 
pc.sendPackets(new S_OwnCharPack(pc)); 
pc.sendPackets(new S_CharVisualUpdate(pc)); 
pc.startHpMpRegeneration(); 
pc.sendPackets(new S_Weather(L1World.getInstance().getWeather())); 
pc.setAutoDeadTime(0); 
pc.setAutoStatus(AUTO_STATUS_MOVE_SHOP); 
} 

/** 자동 사냥 PC 리스트 */ 
private ArrayList<L1PcInstance> _pcList = new ArrayList<L1PcInstance>(); 

public void addAuto(L1PcInstance pc) { 
if (_pcList.contains(pc)) 
return; 
_pcList.add(pc); 
} 

public void removeAuto(L1PcInstance pc) { 
if (!_pcList.contains(pc)) 
return; 
_pcList.remove(pc); 
toCharacterRefresh(pc); 
if (pc != null) { 
resetAuto(pc); 
pc.sendPackets(new S_PacketBox(S_PacketBox.GREEN_MESSAGE, "\\aG귀하의 케릭터가 자동사냥을 종료 합니다.")); 
pc.sendPackets(new S_ChatPacket(pc, "귀하의 케릭터가 자동사냥을 종료 합니다.", 1));// 색상이특이하다.퍼런색 
Random random = new Random(System.nanoTime()); 
int locx = 33433 + random.nextInt(15); 
int locy = 32809 + random.nextInt(15); 
pc.start_teleport(locx, locy, 4, 5, 169, true, false); 
} 
} 

private void noTargetTeleport(L1PcInstance pc) { 
if (pc.getAutoAiTime() == 0) { 
pc.setAutoAiTime(System.currentTimeMillis()); 
} else { 
if (pc.getAutoTarget() == null 
//pc.getAutoTargetList().toTargetArrayList().size() == 0 
&& System.currentTimeMillis() >= pc.getAutoAiTime() + 3000) { 
toUseScroll(pc, 40100); 
pc.setAutoAiTime(System.currentTimeMillis()); 
} 
} 
} 

public void resetAuto(L1PcInstance pc) { 
pc.setAutoStatus(AUTO_STATUS_NONE); 
pc.setAutoDead(false); 
pc.setAutoDeadTime(0); 
pc.setAutoMoveCount(0); 
pc.setAutoSkillDelay(0); 
pc.setAutoTarget(null); 
pc.getAutoTargetList().clear(); 
pc.setAutoAiTime(0); 
} 

private void toCharacterRefresh(L1PcInstance pc) { 
pc.broadcastRemoveAllKnownObjects(); 
pc.removeAllKnownObjects(); 
pc.sendPackets(new S_OwnCharPack(pc)); 
pc.updateObject(); 
pc.sendPackets(new S_CharVisualUpdate(pc)); 
} 

class TeleportThread implements Runnable { 
L1PcInstance _pc; 

private TeleportThread(L1PcInstance pc) { 
_pc = pc; 
} 

public void begin() { 
GeneralThreadPool.getInstance().schedule(this, 20L); 
} 

@Override 
public void run() { 
try { 
_pc.setAutoStatus(AUTO_STATUS_WALK); 
} catch (Exception e) { 
} 
} 
} 

public void clearList() { 
L1PcInstance pc; 
for (int i = 0; i < _pcList.size(); i++) { 
pc = _pcList.get(i); 
if (pc.getMap().isEscapable() || pc.isGm()) { 
int[] loc = L1TownLocation.getGetBackLoc(L1TownLocation.TOWNID_GIRAN); 
teleport(pc, loc[0], loc[1], (short) loc[2]); 
Message.getInstance().get_system_message(pc, "[경고]: \\aG운영자권한으로 '자동사냥'이 중단되었습니다."); 
} 
} 
this._pcList.clear(); 
} 

public void teleport(L1PcInstance pc, int x, int y, short mapid) { 
pc.sendPackets(new S_Paralysis(S_Paralysis.TYPE_TELEPORT_UNLOCK, false)); 
S_SkillSound packet = new S_SkillSound(pc.getId(), 169); 
pc.broadcastPacket(packet); 
pc.sendPackets(packet); 
try { 
Thread.sleep(280); 
} catch (Exception e) { 
} 

/// pc.set_te
넷시아,소스자료실 - 린1 자동사냥 소스,http://gamezone.one/?mid=board_FKwG83&page=3&document_srl=4592017
?

[L1ItemInstance] 아이템 세부정보 원하는 값 출력하기

by CroitzK posted Mar 17, 2020 Views 5 Likes 0 Replies 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부

#샘플 코드

public byte[] getStatusBytes() {
		int itemType2 = getItem().getType2();
		int itemId = getItemId();
		BinaryOutputStream os = new BinaryOutputStream();
		if (itemType2 == 0) { // etcitem
			switch (getItem().getType()) {
			case 2: // light
				os.writeC(22); 
				os.writeH(getItem().getLightRange());
				break;
			case 7: // food
				os.writeC(21);
				os.writeH(getItem().getFoodVolume());
				break;
			case 0: // arrow
			case 15: // sting
				os.writeC(1); 
				os.writeC(getItem().getDmgSmall());
				os.writeC(getItem().getDmgLarge());
				break;
			case 9: // questitem
				os.writeC(39);
				os.writeS("[퀘스트 아이템]");
				break;
			default:
				os.writeC(23);
			break;
			}
			os.writeC(getItem().getMaterial());
			os.writeD(getWeight());
		}

/**
* //TODO 아이템 상태로부터 서버 패킷으로 이용하는 형식의 바이트열을 생성해, 돌려준다. 1: 타격치 , 2: 인챈트 레벨, 3:손상도,
* 4: 양손검, 5: 공격 성공, 6: 추가 타격 7: 왕자/공주 , 8: Str, 9: Dex, 10: Con, 11:z Wiz, 12:
* Int, 13: Cha, 14: Hp,Mp 15: Mr, 16: 마나흡수, 17: 주술력, 18: 헤이스트효과, 19: Ac, 20:
* 행운, 21: 영양, 22: 밝기, 23: 재질, 24: 활 명중치, 25: 종류[writeH], 26: 레벨[writeH], 27:
* 불속성 28: 물속성, 29: 바람속성, 30: 땅속성, 31: 최대Hp, 32: 최대Mp, 33: 내성, 34: 생명흡수, 35: 원거리
* 대미지, 36: exp 용dummy, 37: 체력회복률, 38: 마나회복률, 39: 스트링, 40: 마법명중, 41:경험치 %, 42:
* 레벨2 45:판도라티셔츠 47: 근거리 대미지, 48: 근거리 명중, 50: 마법 치명타, 56:추가방어력, 59:PVP대미지,
* 60:PvP대미지감소, 61:년월 이후삭제,63:대미지 감소, 64:대미지 감소확률, 65:물약회복량 % %, 68:소지 무게 증가
* ,69:대미지리덕 무시, 72:지원아이템사용기간(D), 74:발동 , 77:단계 79:사용레벨 , 87:절대획복 HP, 88:절대획복
* MP, 89:확률마법회피(D) 90:소지무게증가 + 표기 , 92: 추가 대미지 확률, 94: 관통효과, 95:추가대미지확률(:), 96:
* 회복악화 방어 , 97:대미지 리덕션무시 99:원거리 치명타(H), 100:근거리 치명타, 101:포우슬레이어대미지,
* 102:타이탄계열발동 103:확률적근거리대미지(H), 109:무기속성대미지, 111:제한Lv, 112:제한시간(D), 114:
* 언데드추타, 116:축복소모효율(H) (내성)117:기술 118:정령 119:용언 120:공포 121:전체 (적중)122:기술 123:정령
* 124:용언 125:공포 126:전체 131:비손상
*/


핵심은

os.writeC(39);
os.writeS("[원하는 내용 아무거나]");



덤으로 색상코드


20100327_213148.png



?

목록
Board Pagination Prev 1 Next
/ 1

Calender

2020.04
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30    

Time Info

Counter Info

방문자수

전체 : 41,540
오늘 : 18
어제 : 31

페이지뷰

전체 : 1,469,963
오늘 : 509
어제 : 1,320

COPYRIGHT 2009 by AGMServer.com

Powered by Xpress Engine / Designed by Sketchbook

sketchbook5, 스케치북5

sketchbook5, 스케치북5

나눔글꼴 설치 안내


이 PC에는 나눔글꼴이 설치되어 있지 않습니다.

이 사이트를 나눔글꼴로 보기 위해서는
나눔글꼴을 설치해야 합니다.

설치 취소