インクリの処理

元のプログラム

qUseItem1001808

quest
qUseItem1001808() // タホナゥクウニョ スコナゥキム
{
  object item;

  if (!NormalItemCanBeUsed()) return;

  item = controller.getObjectArgumentAt(0);

  //アイテムが使用可能な場所かを判定
   if (item.isCashItem())
   {
       trigger.message(TEXT_CASHITEM_NOT_USE, MSG_TYPE__SYSTEM);
       return;
   }

  //ユーザー商店に登録されたアイテムかを判定
   if (item.isLocked()) {
       trigger.message(TEXT_USABLEITEM_CANT_LOCKED, MSG_TYPE__SYSTEM);
       return;
   }
   //ターゲットがモンスターではなく装備品であるかを判定
   if (!trigger.isMonster() && item && item.isEquippable()) {
       if (item.getTEIP(TEIP__ENDURANCE) <= 1) { //耐久値が1以下じゃないかを判定
           trigger.message(TEXT_USABLEITEM_CANT_ENDURANCE, MSG_TYPE__SYSTEM);
           return;
       } else if (item.getManufactureCnt() <= 1) { //合成回数が1以下じゃないかを判定
           trigger.message(TEXT_USABLEITEM_CANT_DECOUNT, MSG_TYPE__SYSTEM);
           return;
       }
       if (!checkDeCount(item)) return; //成功したかを判定

      item.setManufactureCnt(item.getManufactureCnt() - 1); //合成回数を1減らす?

      trigger.message(TEXT_USABLEITEM_DECOUNT, MSG_TYPE__SYSTEM);

      // send using effect
       controller.effectBy(trigger);

      // decrease number
       if (controller.canBeExhausted())
           controller.decreaseNumber(1); //使用したインクリスクロールを1個減らす?
   }
}

checkDeCount

function boolean
checkDeCount(object item) // セニタフナロ ヌユシコネクシ・ーィシメ テウクョ ー・テ テシナゥソ・ヌヤシ・by stsoul
{
  integer randcnt = Util.random(0, 99);
   integer mapChk = trigger.getWorld().getNumber();

  if (!item.canBeUnequippedBy(trigger)) return false;

  if (item.getManufactureCnt() > 3) //合成回数MAXならrandcnt+50
       randcnt = randcnt + 50;
   else if (item.getManufactureCnt() > 2) //合成回数3ならrandcnt+40
       randcnt = randcnt + 40;
   else if (item.getManufactureCnt() > 1) //合成回数2ならrandcnt+30
       randcnt = randcnt + 30;

  if (mapChk == 7 | | mapChk == 114) //ビアヌ神殿と海の谷ならrandcnt-5
       randcnt = randcnt - 5;
   else if (mapChk == 47 | | mapChk == 50 | | mapChk == 303 | | mapChk == 317)
       randcnt = randcnt - 4;
   //使用キャラ?がルシアンかティチエルならrandcnt-3
   if (trigger.getCharacterType() == CHAR_TYPE0 | | trigger.getCharacterType() == CHAR_TYPE8) {
       randcnt = randcnt - 3;
   }
   //randcntが60より上ならインクリ対象を壊す
   if (randcnt > 60) {
       trigger.message(TEXT_USABLEITEM_ENDURANCE_MESSAGE_ITEM , MSG_TYPE__SYSTEM);
       item.sweep();

      if (controller.canBeExhausted())
           controller.decreaseNumber(1); //使用したインクリを減らす?
       return false;
   } else
       return true;
}


上記のプログラムを見てわかるようにrandcntが増えれば増えるほどインクリは失敗しやすくなる。パッと見てインクリの成功率がわからなかったので筆者流にプログラムをアレンジしてみた。

アレンジ例

qUseItem1001808

quest
qUseItem1001808() //インクリスクロール
{
  object item;
   integer prob = 10;//合成回数MAXのインクリ成功確率(%)

  if (!NormalItemCanBeUsed()) return;

  item = controller.getObjectArgumentAt(0);

  // タッキ眄ニタフナロソ。 サ鄙・メー。
   if (item.isCashItem())
   {
       trigger.message(TEXT_CASHITEM_NOT_USE, MSG_TYPE__SYSTEM);
       return;
   }

  // タッタ忞。 ソテカ」 セニタフナロタホチ・テシナゥ
   if (item.isLocked()) {
       trigger.message(TEXT_USABLEITEM_CANT_LOCKED, MSG_TYPE__SYSTEM);
       return;
   }
   if (!trigger.isMonster() && item && item.isEquippable()) {
       if (item.getTEIP(TEIP__ENDURANCE) <= 1) { 
           trigger.message(TEXT_USABLEITEM_CANT_ENDURANCE, MSG_TYPE__SYSTEM);
           return;
       } else if (item.getManufactureCnt() <= 1) { //合成回数1以下なら減らせない
           trigger.message(TEXT_USABLEITEM_CANT_DECOUNT, MSG_TYPE__SYSTEM);
           return;
       }
       if (!checkDeCount(item,prob)) return; //判定に失敗したら処理終了

      item.setManufactureCnt(item.getManufactureCnt() - 1);//合成回数減らす

      trigger.message(TEXT_USABLEITEM_DECOUNT, MSG_TYPE__SYSTEM);

      // send using effect
       controller.effectBy(trigger);

      // decrease number
       if (controller.canBeExhausted())
           controller.decreaseNumber(1);
   }
}


checkDeCount

function boolean
checkDeCount(object item ,integer success) // セニタフナロ ヌユシコネクシ・ーィシメ テウクョ ー・テ テシナゥソ・ヌヤシ・by stsoul
{
  integer randcnt = Util.random(0, 99);
   integer mapChk = trigger.getWorld().getNumber();

  if (!item.canBeUnequippedBy(trigger)) return false;

  if (item.getManufactureCnt() > 3)
       randcnt = randcnt;
   else if (item.getManufactureCnt() > 2)
       randcnt = randcnt + 10;
   else if (item.getManufactureCnt() > 1)
       randcnt = randcnt + 20;

  if (mapChk == 7 | | mapChk == 114)success = success + 100;//試験的にビアヌ神殿と海の谷で使用したら100%成功させるように
   if (trigger.getCharacterType() == CHAR_TYPE0 | | trigger.getCharacterType() == CHAR_TYPE8) {
       success = success + 100;//ルシアンとティチエルは試験的に100%成功させるように
   }

  if (randcnt < (100 - success)){ //randcntが100-successより上ならアイテムを壊す
       trigger.message(TEXT_USABLEITEM_ENDURANCE_MESSAGE_ITEM , MSG_TYPE__SYSTEM);
       item.sweep();
       if (controller.canBeExhausted())
           controller.decreaseNumber(1);
       return false;
   } else{
       return true;
   }
}

赤字で変更した箇所を書こうとしたけどそのまま表示されてできなかったorz
ただこのままだとコンパイルしてもエラーが出るのでhファイルにcheckDeCount(object item ,integer success)と変更する必要がある。
これを応用すれば成功率が違うインクリ、合成回数を一気に減らせるインクリなどが実装できます。

  • 最終更新:2016-08-09 18:27:14

このWIKIを編集するにはパスワード入力が必要です

認証パスワード