몇일간 소스뜯어보다가 자동물약 구현해봤습니다.
커맨드를 통해 자동물약 퍼센트를 설정하면
해당 퍼센트 이하로 현재피가 내려가면 자동으로 물약을 사용하는 소스입니다.
/// CommandController.java 추가
static public boolean toCommand(object o, String cmd){
.
.
.
// 자동물약 }else if(key.equalsIgnoreCase("-자동물약")){ try{ toAutoPotion(o,st); }catch(Exception e){ if(o!=null) ChattingController.toChatting(o, "-자동물약 켬 95 : 농축 강력 체력 회복제를 자동으로 사용합니다.", Lineage.CHATTING_MODE_MESSAGE); ChattingController.toChatting(o, "-자동물약 끔 : 자동물약을 종료합니다.", Lineage.CHATTING_MODE_MESSAGE); } return true; }
.
.
.
}
static private void toAutoPotion(object o, StringTokenizer st) throws Exception{ String onoff = st.nextToken(); PcInstance pc = (PcInstance) o; if ("켬".equals(onoff)) { int rate = Integer.valueOf(st.nextToken()); pc.setIsAutoPotion(true); pc.setAutoPotionPercent(rate); ChattingController.toChatting(o, new StringBuilder().append("현재 HP가 ").append(rate).append("% 이하이면 농축 강력 체력 회복제를 자동으로 사용합니다.").toString(), Lineage.CHATTING_MODE_MESSAGE); } else if ("끔".equals(onoff)){ pc.setIsAutoPotion(false); pc.setAutoPotionPercent(0); ChattingController.toChatting(o, new StringBuilder().append("자동물약을 비활성화 합니다.").toString(), Lineage.CHATTING_MODE_MESSAGE); }else { throw new Exception(); } }
/// Character.java
public class Character extends object {
.
.
.
// 종료처리
@Override public void close(){ super.close(); level = nowHp = maxHp = dynamicHp = nowMp = maxMp = dynamicMp = ac = dynamicAc = Str = Con = Dex = Wis = Int = Cha = dynamicInt = dynamicStr = dynamicCon = dynamicDex = dynamicWis = dynamicCha = dynamicTicHp = dynamicTicMp = lvStr = lvCon = lvDex = lvWis = lvInt = lvCha = dynamicSp = dynamicMr = food = dynamicEarthress = dynamicWaterress = dynamicFireress = dynamicWindress = earthress = waterress = fireress = windress = dynamicAddDmg = 0; itemWeight = exp = setitemHp = setitemMp = setitemInt = setitemStr = setitemCon = setitemDex = setitemWis = setitemCha = setitemMr = setitemSp = setitemTicHp = setitemTicMp = setitemEarthress = setitemWaterress = setitemFireress = setitemWindress = dynamicAddDmgBow = dynamicAddHit = dynamicAddHitBow = setitemAc = reduction = dynamicReduction = dynamicEr = dynamicDg = dynamicStunlevel=dynamicStunmr = stunlevel = stunmr = autoPotionPercent = 0; hpMove = mpMove = hpFight = mpFight = isAutoPotion = false; delay_magic = 0;
TimeHpTic = getHpTime(); TimeMpTic = getMpTime(); }
// 자동물약 변수 추가 private boolean isAutoAttack; private boolean isAutoPotion;
// 자동물약 getter/setter public boolean getIsAutoPotion() { return isAutoPotion; }
public void setIsAutoPotion(boolean isAutoPotion) { this.isAutoPotion = isAutoPotion; }
// CharacterController.java
static public void toTimer(long time){ // 처리할 객체 순회. for(object o : getList()){
// 자연회복 처리. try { if(!o.isDead()){ if(o instanceof Character){ Character cha = (Character)o; ItemInstance item = null; int tic_hp = cha.isHpTic() ? cha.hpTic() : 0; int tic_mp = cha.isMpTic() ? cha.mpTic() : 0; // 사용자일때 확인하기. if(cha instanceof PcInstance){ // 인벤토리 무게오바일때 if(cha.getInventory()!=null && cha.getInventory().isWeightPercent(50)==false){ // 여관맵이라면 피 차게해야됨. // 엑조틱 바이탈라이즈 시전중일때 차게 해야됨. // 여관맵이 아닐때. if(!InnController.isInnMap(cha) && !cha.isBuffExoticVitalize() && !cha.isBuffAdditionalFire()) { tic_hp = tic_mp = 0; // 요정족 망토를 착용중이라면 피차게 해야됨. item = cha.getInventory().getSlot(Lineage.SLOT_CLOAK); if( item!=null && item instanceof ElvenCloak ) tic_hp = 1; } } try { //자동물약 if(cha.getIsAutoPotion() && cha.getHpPercent() < cha.getAutoPotionPercent() && cha.getInventory()!=null) { ItemInstance ii = cha.getInventory().findDbNameId(1253); if(ii != null&& ii.isClick((PcInstance) o)) { ii.toClick(cha, null); } } }catch(Exception e) { e.printStackTrace(); } } // 버서커상태 무시. if(o.isBuffBerserks()) tic_hp = tic_mp = 0; // 틱 처리. if(tic_hp>0 && cha.getTotalHp()!=cha.getNowHp()) cha.setNowHp(cha.getNowHp() + tic_hp); if(tic_mp>0 && cha.getTotalMp()!=cha.getNowMp()) cha.setNowMp(cha.getNowMp() + tic_mp); } } } catch (Exception e) { lineage.share.System.println("자연회복 처리."); lineage.share.System.println(" : "+o.toString()); lineage.share.System.println(e); }
// 주기적으로 호출에 사용. try { o.toTimer(time); } catch (Exception e) { lineage.share.System.println("주기적으로 호출에 사용."); lineage.share.System.println(" : "+o.toString()); lineage.share.System.println(e); }
}
}
굿굿굿