CGHang

{
  版本信息:
    脚本名称:坎那贝拉村西门(战士烧技能)
    作者:CGHang
    最后更新日期:2004/11/7

  运行起点:
    1、坎那贝拉村医院外面的路上,纵坐标在 47~49 之间。
    2、任意。此时须人物40级以上,登入点在阿凯鲁法村,并开了坎那贝拉村的传送。

  挂机地点:
    坎那贝拉村西门外树区

  安全血魔说明:
    SafeHP:   回村补给的人的血下限
    SafeMP:   回村补给的人的魔下限
    PetSafeHP:回村补给的宠的血下限
    PetSafeMP:回村补给的宠的魔下限

  速度说明:
    StartSpeed:坎那贝拉村内的速度,建议500
    MoveSpeed: 阿凯鲁法村内的速度,建议500
    WarSpeed:  随机路线循环遇敌时的速度,建议300

  补充说明:
    1、提供详细的消耗统计。
       此脚本非常费钱,请务必带够。

    2、战斗技能由脚本控制。战斗设置第一、三行各三个技能,第二行不启用。具体技能在函数 GetSkillInfo 内修改。
       没卡时或技能全部烧完就关闭游戏。需要其他处理方式在函数 SetSkill 内修改。

    3、没钱补魔则关闭游戏。
       需要其他处理方式需修改函数 Rest。

    4、人或宠受伤,会自动找NPC医生治疗。
       不需要治疗的,打开附加战斗设置中的人、宠受伤检查。

    5、循环遇敌时只检查人的血魔量。不检查宠的血魔量。
       务必使用生存能力强的、高级宠,否则须增加对宠的检查。

    6、结束循环遇敌后自动逃跑
       建议启用技能MP下限逃跑、100%逃跑。
}


//函数:给定技能信息
        //作用对象列表:1 默认,2 敌人,3 人物,4 宠
        //作用范围列表:1 单体,2 四体,3 全体,4 回力,5 小刀,6 全部
var
        SkillName11,SkillName12,SkillName13,SkillName31,SkillName32,SkillName33:String;
        SKillAim11,SkillAim12,SkillAim13,SkillAim31,SkillAim32,SkillAim33:Integer;
        SKillRange11,SKillRange12,SKillRange13,SKillRange31,SKillRange32,SKillRange33:Integer;
        SkillLimit11,SkillLimit12,SkillLimit13,SkillLimit31,SkillLimit32,SkillLimit33:Integer;
Procedure GetSkillInfo();
begin
        SkillName11:=\'反击\';    //战斗设置第一行在用技能名字
        SkillAim11:=3;          //战斗设置第一行在用技能作用对象
        SKillRange11:=1;        //战斗设置第一行在用技能作用范围
        SkillLimit11:=8;        //战斗设置第一行在用技能等级限制

        SkillName12:=\'护卫\';    //战斗设置第一行备用技能名字
        SkillAim12:=4;          //战斗设置第一行备用技能作用对象
        SKillRange12:=1;        //战斗设置第一行备用技能作用范围
        SkillLimit12:=8;        //战斗设置第一行备用技能等级限制

        SkillName13:=\'诸刃\';    //战斗设置第一行第二备用技能名字
        SkillAim13:=2;          //战斗设置第一行第二备用技能作用对象
        SKillRange13:=1;        //战斗设置第一行第二备用技能作用范围
        SkillLimit13:=8;        //战斗设置第一行第二备用技能等级限制


        SkillName31:=\'乾坤一掷\';//战斗设置第三行在用技能名字
        SkillAim31:=2;          //战斗设置第三行在用技能作用对象
        SKillRange31:=1;        //战斗设置第三行在用技能作用范围
        SkillLimit31:=8;        //战斗设置第三行在用技能等级限制

        SkillName32:=\'诸刃\';    //战斗设置第三行备用技能名字
        SkillAim32:=2;          //战斗设置第三行备用技能作用对象
        SKillRange32:=1;        //战斗设置第三行备用技能作用范围
        SkillLimit32:=8;        //战斗设置第三行备用技能等级限制

        SkillName33:=\'护卫\';    //战斗设置第三行第二备用技能名字
        SkillAim33:=4;          //战斗设置第三行第二备用技能作用对象
        SKillRange33:=1;        //战斗设置第三行第二备用技能作用范围
        SkillLimit33:=8;        //战斗设置第三行第二备用技能等级限制

        //检查技能的有效性
        if (GetSkillLv(SkillName11)<1) or (GetSkillLv(SkillName12)<1) or (GetSkillLv(SkillName13)<1) or (GetSkillLv(SkillName31)<1) or (GetSkillLv(SkillName32)<1) or (GetSkillLv(SkillName33)<1) then
        begin
                OutPutMes(\'脚本中使用了没学习的技能\');
                OutPutMes(\'请检查函数 GetSkillInfo 中赋值的有效性\');
                QuitScript;
        end;
end;

//函数:设置技能
Procedure SetSkill();
begin
        if (Get(\'CardTime\')<1) or ((GetSkillLv(SkillName11)>=SkillLimit11) and (GetSkillLv(SkillName12)>=SkillLimit12) and (GetSkillLv(SkillName13)>=SkillLimit13) and (GetSkillLv(SkillName31)>=SkillLimit31) and (GetSkillLv(SkillName32)>=SkillLimit32) and (GetSkillLv(SkillName33)>=SkillLimit33)) then ExitGame;   //没卡时,或技能全部烧完,就关闭游戏

        if GetSkillLv(SkillName11)>=SkillLimit11 then
        begin
                if GetSkillLv(SkillName12)>=SkillLimit12 then
                begin
                        ChangeSkillEx(SkillName13,GetSkillLv(SkillName13),SkillAim13,SkillRange13);
                end
                else ChangeSkillEx(SkillName12,GetSkillLv(SkillName12),SkillAim12,SkillRange12);
        end
        else ChangeSkillEx(SkillName11,GetSkillLv(SkillName11),SkillAim11,SkillRange11);

        if GetSkillLv(SkillName31)>=SkillLimit31 then
        begin
                if GetSkillLv(SkillName32)>=SkillLimit32 then
                begin
                        ChangeSkill3Ex(SkillName33,GetSkillLv(SkillName33),SkillAim33,SkillRange33);
                end
                else ChangeSkill3Ex(SkillName32,GetSkillLv(SkillName32),SkillAim32,SkillRange32);
        end
        else ChangeSkill3Ex(SkillName31,GetSkillLv(SkillName31),SkillAim31,SkillRange31);
end;

//函数:过图
Procedure MyReMap(nMapID,nX,nY:Integer);
begin
        sp(GetH(\'H_SHUNYI\')+\' a 0 \'+C10TO62(nX)+\' \'+C10TO62(nY)+\' -1\');
        while Get(\'MapNo\')<>nMapID do Sleep(100);
end;

//函数:传送
Procedure Transfer(nMapNO:Integer);
begin
        if (Get(\'LV\')<40) or (Get(\'Money\')<400) then
        begin
                OutPutMes(\'无法传送到坎那贝拉村\');
                OutPutMes(\'请检查人物等级、金币数\');
                QuitScript;
        end;

        NPCEx(326,4,\'\' );
        while Get(\'MapNo\')<>nMapNO do Sleep(100);
end;

//函数:补血
Procedure Rest();
begin
        if (Get(\'Money\')+Get(\'MP\'))<Get(\'MaxMP\') then ExitGame; //没钱补魔则关闭游戏

        if Get(\'MP\')<Get(\'MaxMP\') then
        begin
                NPCEx(328,0,\'1\');
                NPCEx(329,4,\'\' );
                NPCEx(330,1,\'\' );
        end;
        if Get(\'HP\')<Get(\'MaxHP\') then
        begin
                NPCEx(328,0,\'3\');
                NPCEx(331,4,\'\' );
                NPCEx(330,1,\'\' );
        end;
        if (Get(\'PetHP\')<Get(\'PetMaxHP\')) or (Get(\'PetMP\')<Get(\'PetMaxMP\')) then
        begin
                NPCEx(328,0,\'5\');
                NPCEx(332,4,\'\' );
        end;
end;

//函数:打卡
Procedure Card();
begin
        NPCEx(347,4,\'\');
end;

//函数:卖石头
Procedure Sell();
begin
        NPCEx(333,0,\'2\');
        NPCEx(334,0,\'8\');
end;

//函数:NPC医生疗伤
Procedure Cure();
begin
        NPCEx(336,0,\'7\');
end;

//函数:消耗统计
var
        OldMoney,OldTime,AllMoney,AllTime,CycNum:Integer;
procedure ShowEfficiency();
var
        tempMoney,tempTime,NowTime:Integer;
begin
        if CycNum>0 then
        begin
                NowTime:=Get(\'CurrentTime\');
                tempTime:=3600*(NowTime/10000-OldTime/10000)+60*((NowTime mod 10000)/100-(OldTime mod 10000)/100)+(NowTime mod 100)-(OldTime mod 100);
                if tempTime<0 then tempTime:=tempTime+86400;
                AllTime:=AllTime+tempTime;

                tempMoney:=OldMoney-Get(\'Money\')-GetItemNum(\'魔石\',1)*259;
                AllMoney:=AllMoney+tempMoney;

                OutPutMes(\'  用时:\'+IntToStr(tempTime/60)+\'分\'+IntToStr(tempTime mod 60)+\'秒\');
                OutPutMes(\'  烧钱:\'+IntToStr(tempMoney)+\' G\');

                OutPutMes(\'平均一次循环\');
                OutPutMes(\'  用时:\'+IntToStr(AllTime/CycNum/60)+\'分\'+IntToStr((AllTime/CycNum) mod 60)+\'秒\');
                OutPutMes(\'  烧钱:\'+IntToStr(AllMoney/CycNum)+\' G\');

                OutPutMes(\'平均一小时\');
                OutPutMes(\'  烧钱:\'+IntToStr(3600*AllMoney/AllTime)+\' G\');
        end;
        OldTime:=Get(\'CurrentTime\');
        OldMoney:=Get(\'Money\')+GetItemNum(\'魔石\',1)*259;
        CycNum:=CycNum+1;

        OutPutMes(\'\');
        OutPutMes(\'第\'+IntToStr(CycNum)+\'次循环\');
end;


begin
        SetDropItem(\'/卡片/水晶碎片/\');

        GetSkillInfo();

        //到坎那贝拉村医院外面
        MoveNear(Get(\'PosX\'),Get(\'PosY\'));
        if (Get(\'MapNO\')<>33500) or (Get(\'POSY\')>49) or (Get(\'POSY\')<47)then
        begin
                Sleep(1000);
                HoldPoint(0);
                if Get(\'MapNO\')<>33200 then
                begin
                        OutPutMes(\'登入点不在阿凯鲁法村\');
                        OutPutMes(\'无法到达坎那贝拉村\');
                        QuitScript;
                end;

                SetSpeed(530);
                MoveNear(98,165);
                MoveNear(96,167);
                MoveNear(96,173);

                SetSpeed(Get(\'MoveSpeed\'));
                MoveNear(115,173);
                MoveNear(121,167);
                MoveNear(126,167);
                MoveNear(128,169);
                MoveNear(162,169);

                //打卡
                if (Get(\'CanCard\')=1) and (Get(\'CardTime\')>0) then
                begin
                        MoveNear(179,186);
                        MoveNear(179,211);
                        MoveNear(190,211);
                        MoveNear(192,209);
                        MoveNear(192,208);
                        MyReMap(33207,192,208);

                        MoveNear(4,21);
                        MoveNear(10,15);
                        MoveNear(10,13);

                        WayTo(1);
                        Card();

                        MoveNear(10,15);
                        MoveNear(4,21);
                        MoveNear(4,23);
                        MyReMap(33200,4,23);

                        MoveNear(192,209);
                        MoveNear(190,211);
                        MoveNear(179,211);
                        MoveNear(179,186);
                        MoveNear(169,176);
                end;

                MoveNear(169,162);
                MoveNear(179,152);
                MoveNear(179,121);
                MoveNear(180,115);
                MoveNear(178,115);
                MoveNear(175,112);
                MoveNear(171,108);
                MoveNear(168,108);

                WayTo(7);
                Transfer(33500);

                MoveNear(25,31);
                MoveNear(29,31);
                MoveNear(29,41);
                MoveNear(35,47);
        end;

        //开始挂机
        while True do
        begin
                SetSpeed(Get(\'StartSpeed\'));
                MoveNear(35,48);

                //加血
                if (Get(\'MP\')<Get(\'MaxMP\')) or (Get(\'HP\')<Get(\'MaxHP\')) or (Get(\'PetHP\')<Get(\'PetMaxHP\')) or (Get(\'PetMP\')<Get(\'PetMaxMP\')) then
                begin
                        MoveNear(38,45);
                        MoveNear(38,44);
                        MyReMap(33516,38,44);

                        MoveNear(15,22);
                        MoveNear(20,17);

                        WayTo(2);
                        Rest();

                        if (Get(\'Health\')>0) or (Get(\'PetHealth\')>0) then       //人宠受伤,则找NPC治疗
                        begin
                                MoveNear(19,16);
                                MoveNear(19,13);
                                MoveNear(22,10);
                                MoveNear(22,7);

                                WayTo(1);
                                Cure();

                                MoveNear(22,10);
                                MoveNear(15,17);
                        end
                        else MoveNear(15,22);

                        MoveNear(15,25);
                        MyReMap(33500,15,25);

                        MoveNear(38,45);
                end;

                //卖石头
                if (Get(\'Item\')>17) and (GetItemPos(\'魔石\')>1) then
                begin
                        MoveNear(41,48);
                        MoveNear(53,48);
                        MoveNear(58,53);
                        MoveNear(58,72);
                        MoveNear(60,74);
                        MoveNear(61,74);
                        MyReMap(33511,61,74);

                        MoveNear(8,9);
                        MoveNear(9,10);

                        WayTo(3);
                        Sell();

                        MoveNear(8,9);
                        MoveNear(2,9);
                        MyReMap(33500,2,9);

                        MoveNear(60,74);
                        MoveNear(58,72);
                        MoveNear(58,53);
                        MoveNear(53,48);
                end
                else MoveNear(35,48);

                ShowEfficiency();
                SetSkill();

                //出村,到挂机点
                MoveNear(13,48);
                MyReMap(33000,13,48);

                SetSpeed(Get(\'WarSpeed\'));
                MoveNear(620,305);

                //循环遇敌
                //while (Get(\'Item\')<20) and (Get(\'MP\')>=Get(\'SafeMP\')) and (Get(\'HP\')>=Get(\'SafeHP\')) and (Get(\'PetHP\')>=Get(\'PetSafeHP\')) and (Get(\'PetMP\')>=Get(\'PetSafeMP\')) do
                while (Get(\'MP\')>=Get(\'SafeMP\')) and (Get(\'HP\')>=Get(\'SafeHP\')) do
                begin
                        MoveNear(616+random(3),302+Random(8));
                        if (Get(\'MP\')>=Get(\'SafeMP\')) and (Get(\'HP\')>=Get(\'SafeHP\')) then MoveNear(623-random(3),302+Random(8));
                end;

                //回村
                ChangeSkill(\'Escape\',0);
                ChangeSkill3(\'Escape\',0);

                MoveNear(623,305);
                MoveNear(627,305);
                MyReMap(33500,627,305);
        end;
end.

分类:

技术点:

相关文章:

  • 2021-09-02
  • 2021-05-16
  • 2021-12-06
  • 2021-08-04
  • 2021-12-30
猜你喜欢
  • 2018-04-29
  • 2021-10-24
  • 2021-12-21
  • 2021-09-14
相关资源
相似解决方案