전사팩 자동물약기능

전사팩 자동물약기능

홈 > 개발존 > 개발 팁/정보
개발 팁/정보
GW5yBT2.png

전사팩 자동물약기능

1 소스왕 0 3937

몇일간 소스뜯어보다가 자동물약 구현해봤습니다.

 

커맨드를 통해 자동물약 퍼센트를 설정하면

 

해당 퍼센트 이하로 현재피가 내려가면 자동으로 물약을 사용하는 소스입니다.

/// 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);
   }

  }

 }


0 댓글