随手写的RO台服炼金炼药外挂(OpenKore适用)

#用其他角色pm煉金,格式為  要練的藥名:要練的數量

#做藥水之前身上要帶夠開倉庫數次的錢

#最好把所有與煉藥有關的東西都放倉庫(藥水說明書除外)

#自行把煉金開到卡普拉附近並設定倉庫NPC座標


#初始化程序——————————————————————————————————————————————————————

automacro chushihua {

    exclusive 1

    connection 您已经进入游戏

    run-once 1

    call {

          #設定倉庫NPC座標

          $npcxy = 29 207

          #設定坐下時恢復多少SP後站起

          $maxspup = 800

          stop

    }

}


#程序入口,接受命令——————————————————————————————————————————————

automacro jieshou {

    pm /(.*):(.*)/

    run-once 1

    call {

          #提取字符串到2個函數

          $zhonglei = $.lastpmMsg

          $shuliang = $.lastpmMsg

          do eval $::Macro::Data::varStack{zhonglei} = $` if $::Macro::Data::varStack{zhonglei} =~ /:/;

          do eval $::Macro::Data::varStack{shuliang} = $' if $::Macro::Data::varStack{shuliang} =~ /:/;


          #統計變量

          $tongji = 0

          $cuncangtongji = 0

          #次數變量

          $cishu = 0

          $cishu2 = 0

          $qucang = 0

          #歡迎詞

          do pm $.lastpm ————————

          do pm $.lastpm 歡迎使用人工智能煉藥系統!

          #若身上有存貨,先存進倉庫

          call qingcang

          #計算可用重量

          do eval $::Macro::Data::varStack{keyong} = int($::char->{'weight_max'} * 0.5 - $::char->{'weight'});

          if ($keyong <= 0) goto chaozhong

          if ($.sp < $maxspup) call huifusp

          #做藥開始

          do pm $.lastpm 開始嘗試煉製$zhonglei $shuliang次

          do pm $.lastpm ......

          if ($zhonglei == 酒精) call zuojiujing

          if ($zhonglei == 火煙瓶) call zuohuoyanping

          if ($zhonglei == 鹽酸瓶) call zuoyansuanping

          call lianyaotongji

          release cangkukong

          release jieshou

          stop

          :chaozhong

            do pm $.lastpm 你負重超50%了,請移除不必要的物品!

            release jieshou

            stop

    }

}

#取倉失敗時跳出——————————————————————————————————————————————————

automacro cangkukong {

    console /仓库道具(.*)不存在(.*)/

    run-once 1

    call {

          $cishu2 = @eval($shuliang + 1)

          stop

         }

}

#手動停止煉藥————————————————————————————————————————————————————

macro tingzhilianyao {

    $cishu2 = @eval($shuliang + 1)

    stop

}

#煉製酒精————————————————————————————————————————————————————————

macro zuojiujing {

    if (@invamount (酒精製作說明書) < 1) goto lowjj

    #計算可用重量內可以帶多少組材料

    do eval $::Macro::Data::varStack{yizushu} = int($::Macro::Data::varStack{keyong} / 15);

    while ($cishu2 < $shuliang) as loop

        call xjiujing

    end loop

    stop


    :lowjj

      do pm $.lastpm 年輕人,你沒有【酒精製作說明書】

      release jieshou

      stop

}

macro xjiujing {

    if ($.sp < 5) call huifusp

    if (@invamount (空瓶) < 1 || @invamount (空試管) < 1 || @invamount (植物梗) < 5 || @invamount (毒魔菇芽孢) < 5 || @invamount (藥缽) < 1) {

            call kaicang

            call zidongcuncang

            do storage get @Storage(空瓶) $yizushu

            pause 1

            do storage get @Storage(空試管) $yizushu

            pause 1

            do storage get @Storage(植物梗) @eval($yizushu * 5)

            pause 1

            do storage get @Storage(毒魔菇芽孢) @eval($yizushu * 5)

            pause 1

            do storage get @Storage(藥缽) $yizushu

            pause 1

            call guancang

            do pm $.lastpm 第$cuncangtongji次存倉完畢!

    }

    do ss 配藥

    #列表選擇,數字轉16進制,比如白色藥水是編號504轉成16進制為01 F8 倒寫

    do send 8E 01 CA 03 00 00 00 00 00 00

    $cishu++

    $cishu2++

    stop

}

#煉製火煙瓶——————————————————————————————————————————————————————

macro zuohuoyanping {

    if (@invamount (火煙瓶製作說明書) < 1) goto lowhyp

    do eval $::Macro::Data::varStack{yizushu} = int($::Macro::Data::varStack{keyong} / 8);

    while ($cishu2 < $shuliang) as loop

        call xhuoyanping

    end loop

    stop


    :lowhyp

      do pm $.lastpm 年輕人,你沒有【火煙瓶製作說明書】

      release jieshou

      stop

}

macro xhuoyanping {

    if ($.sp < 5) call huifusp

    if (@invamount (酒精) < 1 || @invamount (透明之布) < 1 || @invamount (空瓶) < 1 || @invamount (藥缽) < 1) {

            call kaicang

            call zidongcuncang

            do storage get @Storage(空瓶) $yizushu

            pause 1

            do storage get @Storage(酒精) $yizushu

            pause 1

            do storage get @Storage(透明之布) $yizushu

            pause 1

            do storage get @Storage(藥缽) $yizushu

            pause 1

            call guancang

            do pm $.lastpm 第$cuncangtongji次存倉完畢!

    }

    do ss 配藥

    do send 8E 01 DF 1B 00 00 00 00 00 00

    $cishu++

    $cishu2++

    stop

}

#煉製鹽酸瓶——————————————————————————————————————————————————————

macro zuoyansuanping {

    if (@invamount (鹽酸瓶製作說明書) < 1) goto lowysp

    do eval $::Macro::Data::varStack{yizushu} = int($::Macro::Data::varStack{keyong} / 5);

    while ($cishu2 < $shuliang) as loop

        call xyansuanping

    end loop

    stop


    :lowysp

      do pm $.lastpm 年輕人,你沒有【鹽酸瓶製作說明書】

      release jieshou

      stop

}

macro xyansuanping {

    if ($.sp < 5) call huifusp

    if (@invamount (空瓶) < 1 || @invamount (不死心臟) < 1 || @invamount (藥缽) < 1) {

            call kaicang

            call zidongcuncang

            do storage get @Storage(空瓶) $yizushu

            pause 1

            do storage get @Storage(不死心臟) $yizushu

            pause 1

            do storage get @Storage(藥缽) $yizushu

            pause 1

            call guancang

            do pm $.lastpm 第$cuncangtongji次存倉完畢!

    }

    do ss 配藥

    do send 8E 01 E0 1B 00 00 00 00 00 00

    $cishu++

    $cishu2++

    stop

}

#倉庫存取————————————————————————————————————————————————————————

macro kaicang {

    pause 1

    do talk @npc ($npcxy)

    pause 1

    do talk cont

    pause 1

    do talk resp 1

    pause 2

    stop

}

macro zidongcuncang {

    $tongji = @eval($tongji + @invamount ($zhonglei))

    if (@Inventory ($zhonglei) > 0) {

        do storage add @Inventory($zhonglei)

    }

    $cuncangtongji++

    pause 1

    stop

}

macro guancang {

    pause 1

    do storage close

    stop

}

macro qingcang {

    do pm $.lastpm 正在將身上物品存入倉庫。

    call kaicang

    if (@Inventory(藥缽) > 0) {

        do storage add @Inventory(藥缽)

        pause 1

    }

    if (@Inventory(空試管) > 0) {

        do storage add @Inventory(空試管)

        pause 1

    }

    if (@Inventory(植物梗) > 0) {

        do storage add @Inventory(植物梗)

        pause 1

    }

    if (@Inventory(毒魔菇芽孢) > 0) {

        do storage add @Inventory(毒魔菇芽孢)

        pause 1

    }

    if (@Inventory(透明之布) > 0) {

        do storage add @Inventory(透明之布)

        pause 1

    }

    if (@Inventory(不死心臟) > 0) {

        do storage add @Inventory(不死心臟)

        pause 1

    }

    if (@Inventory(酒精) > 0) {

        do storage add @Inventory(酒精)

        pause 1

    }

    if (@Inventory(火煙瓶) > 0) {

        do storage add @Inventory(火煙瓶)

        pause 1

    }

    if (@Inventory(鹽酸瓶) > 0) {

        do storage add @Inventory(鹽酸瓶)

        pause 1

    }

    call guancang

    stop

}

#恢復SP——————————————————————————————————————————————————————————

macro huifusp {

    do sit

    do pm $.lastpm 由於SP不足,開始坐下恢復SP...

    while ($.sp < $maxspup) as loop

        pause 10

    end loop

    do stand

    stop

}

#煉藥統計————————————————————————————————————————————————————————

macro lianyaotongji {

    $tongji = @eval($tongji + @invamount ($zhonglei))

    $chenggonglv = @eval($tongji / $cishu)

    do eval $::Macro::Data::varStack{chenggonglv} = sprintf("%.1f",$::Macro::Data::varStack{chenggonglv} * 100) . '%';

    do pm $.lastpm 完成!

    do pm $.lastpm 做$zhonglei共$cishu次,成功率$chenggonglv。

    do pm $.lastpm ————————

    stop

}


评论
一只放羊的村中土喵