Last updated on

石器时代LNS野外游走BOSS_LUA脚本

游戏石器时代#石器时代#lua脚本

脚本名称:石器时代LNS野外游走BOSS_LUA脚本 功能描述:在特定时间内,野外出现BOSS,击败后获得奖品 脚本来源:9292石器时代研究中心


function WalkingBoss_Init( _MeIndex ) 
        --战斗索引全域变数
        iBattle[_MeIndex] = 0; 
         --初始位置全域变数
        iX[_MeIndex] = 0; 
        iY[_MeIndex] = 0; 
        Timer[_MeIndex] = 1;

        --设置踩踏回应事件
        if (Char.SetPostOverEvent(nil, "WalkingBoss_Covered", _MeIndex) < 0) then 
                print("WalkingBoss_Covered注册事件失败。"); 
                return false; 
        end 

        if (Char.SetPreOverEvent(nil, "WalkingBoss_Covered", _MeIndex) < 0) then 
                print("WalkingBoss_Covered注册事件失败。"); 
                return false; 
        end 
        --设置对话回应事件
        if (Char.SetTalkedEvent(nil, "WalkingBoss_Talked", _MeIndex) < 0) then 
                print("WalkingBoss_Talked注册事件失败。"); 
                return false; 
        end 
        --设置回圈事件
        if (Char.SetLoopEvent(nil, "WalkingBoss_Walk", _MeIndex,1000) < 0) then 
                print("WalkingBoss_Walk注册事件失败。"); 
                return false; 
        end 
        --更新
        NLG.UpChar(_MeIndex); 
        return true; 
end 

function WalkingBoss_Walk( _MeIndex) 

        --设置动作为走路
        local walk = 1; 
        NLG.SetAction(_MeIndex,walk); 
        --随机よ
        local TM_DIR = math.floor(math.random(0, 7)); 
        --限定范围
        if ( Char.GetData( _MeIndex, %对象_X%) >= iX[_MeIndex]+math.floor(math.random(3, 7))) then 
                TM_DIR = 6; 
        elseif ( Char.GetData( _MeIndex, %对象_X%) <= iX[_MeIndex]-math.floor(math.random(3, 7))) then 
                TM_DIR = 2; 
        elseif ( Char.GetData( _MeIndex, %对象_Y%) <= iY[_MeIndex]-math.floor(math.random(3, 7))) then 
                TM_DIR = 4; 
        elseif ( Char.GetData( _MeIndex, %对象_Y%) >= iY[_MeIndex]+math.floor(math.random(3, 7))) then 
                TM_DIR = 0; 
        end 
        --走路
        if(NLG.WalkMove(_MeIndex,TM_DIR) ~= 0) then 
                NLG.WalkMove(_MeIndex,math.floor(math.random(0, 7))); 
        end 
        --设置よ
        NLG.CharLook(_MeIndex,TM_DIR); 
        if Timer[_MeIndex] <= 300 then
                Timer[_MeIndex] = Timer[_MeIndex] + 1;
        else
                local TM_Buff = "[全服通告]" .. Char.GetData(_MeIndex,%对象_原名%) .."在"..TM_MapName[iRdSlMap[_MeIndex]].."作乱,坐标为"..Char.GetData(_MeIndex,%对象_X%)..","..Char.GetData(_MeIndex,%对象_Y%).."。"; 
                NLG.TalkToCli(-1, TM_Buff, %红色%, 0, -1); 
                Timer[_MeIndex] = 1;
        end
        return ; 
end 

function WalkingBoss_Covered( _MeIndex, _PlayerIndex ) 
--判断踩中了什么
        if( Char.GetData(_PlayerIndex,%对象_脸%) == 0)then 
                return; 
        else 
                --设置站立动作
                NLG.SetAction(_MeIndex,0); 
                NLG.TalkToCli(_PlayerIndex, "呼噜呼噜呼噜噜…………", %黄色%, 0, _MeIndex) 

                 --敌人阵列信息
                local TM_EnemyIdAr = iBossList;

                local TMP_level = iBossRs[_MeIndex][1];
                local TMP_slt = iBossRs[_MeIndex][2];

                --保存战斗索引
                iBattle[_MeIndex] = NLG.CreateBattle( _PlayerIndex, _MeIndex, nil, TM_EnemyIdAr[TMP_level][TMP_slt]); 

                --设置战斗胜利事件
                Battle.SetWinEvent("data/npc/lua/walkingboss/walkingboss.lua","WalkingBoss_BattleOver",iBattle[_MeIndex]); 
                --取消踩踏回应事件
                Char.SetPreOverEvent(nil, nil, _MeIndex); 
                Char.SetPostOverEvent(nil, nil, _MeIndex); 
                --取消对话回应事件并设置新对话回应事件
                Char.SetTalkedEvent(nil, nil, _MeIndex); 
                Char.SetTalkedEvent(nil, "WalkingBoss_Talked2", _MeIndex); 
                --取消回圈事件并设置新回圈事件(用作检查战斗是否结束) 
                Char.SetLoopEvent(nil, nil, _MeIndex,100); 
                Char.SetLoopEvent(nil, "WalkingBoss_Check", _MeIndex,500); 
                --更新
                NLG.UpChar(_MeIndex); 
        end 
        return ; 

end 

function WalkingBoss_BattleOver( _BattleIndex, _CreateIndex) 
        --取消检查战斗是否结束的回圈事件
        Char.SetLoopEvent(nil, nil, _CreateIndex,1000); 
        --减少统计只数
        iCounter = iCounter - 1; 
        local PlayerIndex = {-1,-1,-1,-1,-1}; 
        local count = 1; 

        local i = 0; 

        local TMP_level = iBossRs[_CreateIndex][1];

        local Tmp_Int; 
        --获得战斗中的玩家索引
        while (count < 6) do 
                PlayerIndex[count] = Battle.GetPlayIndex(_BattleIndex,0,count-1); 
                if(PlayerIndex[count] >= 0) then 
                randoma=math.floor(math.random(1, 5000)) 
                randomb=math.floor(math.random(1, 100)) 
                if(randoma == 3888)then
                iPrizeList[TMP_level]={22624,22624,22624,22624,22624,22624,22624,22624};
                end
                if(randoma == 1666)then
                iPrizeList[TMP_level]={22624,22624,22624,22624,22624,22624,22624,22624};
                end
                if(randomb == 30)then
                iPrizeList[TMP_level]={22624,22624,22624,22624,22624,22624,22624,22624};
                end
                        i = i + 1; 
                        Tmp_Int = math.floor(math.random(1,8)) 
                        if( iPrizeList[TMP_level][Tmp_Int] >= 0) then 
                                if(NLG.GiveItem( PlayerIndex[count] , iPrizeList[TMP_level][Tmp_Int]) <= 0)then 
                                         NLG.TalkToCli(PlayerIndex[count], "道具栏位不足!", %黄色%, 0, -1);
                                end 
                         end 
                        NLG.TalkToCli(PlayerIndex[count], "呼噜噜噜噜噜…………(似乎是打输了很不甘愿的样子…)", %黄色%, 0, _CreateIndex); 
                else 
                        print(NL.GetErrorStr()); 
                end 
                count = count + 1 ; 
        end 
        --删除NPC 
        local Tmp_Buff; 
        if( i == 1) then 
                Tmp_Buff = "[全服通告]≮勇士≯"..Char.GetData(PlayerIndex[1],%对象_原名%).."打倒了"..Char.GetData(_CreateIndex, %对象_原名%).. ",还有暴走的宠物"..iCounter.."个。"; 
                NLG.TalkToCli(-1,Tmp_Buff , %绿色%, 0, -1); 
        elseif( i == 2) then 
                Tmp_Buff = "[全服通告]≮勇士≯"..Char.GetData(PlayerIndex[1],%对象_原名%).."、"..Char.GetData(PlayerIndex[2],%对象_原名%) .."打倒了"..Char.GetData(_CreateIndex, %对象_原名%).. ",还有暴走的宠物"..iCounter.."个。"; 
                NLG.TalkToCli(-1,Tmp_Buff , %红色%, 0, -1); 
        elseif( i == 3) then 
                Tmp_Buff = "[全服通告]≮勇士≯"..Char.GetData(PlayerIndex[1],%对象_原名%).."、"..Char.GetData(PlayerIndex[2],%对象_原名%) .."、"..Char.GetData(PlayerIndex[3],%对象_原名%).."打倒了"..Char.GetData(_CreateIndex, %对象_原名%).. ",还有暴走的宠物"..iCounter.."个。"; 

                 NLG.TalkToCli(-1, Tmp_Buff, %红色%, 0, -1); 
        elseif( i == 4) then 
                Tmp_Buff = "[全服通告]≮勇士≯"..Char.GetData(PlayerIndex[1],%对象_原名%).."、"..Char.GetData(PlayerIndex[2],%对象_原名%) .."、"..Char.GetData(PlayerIndex[3],%对象_原名%).."、"..Char.GetData(PlayerIndex[4],%对象_原名%).."打倒了"..Char.GetData(_CreateIndex, %对象_原名%).. ",还有暴走的宠物"..iCounter.."个。"; 
                NLG.TalkToCli(-1, Tmp_Buff, %红色%, 0, -1); 
        elseif( i == 5) then 
                Tmp_Buff = "[全服通告]≮勇士≯"..Char.GetData(PlayerIndex[1],%对象_原名%).."、"..Char.GetData(PlayerIndex[2],%对象_原名%) .."、"..Char.GetData(PlayerIndex[3],%对象_原名%).."、"..Char.GetData(PlayerIndex[4],%对象_原名%).."、 "..Char.GetData(PlayerIndex[5],%对象_原名%).."打倒了"..Char.GetData(_CreateIndex, %对象_原名%).. ",还有暴走的宠物"..iCounter.."个。"; 

                NLG.TalkToCli(-1, Tmp_Buff, %红色%, 0, -1); 
        end 
        NL.DelNpc(_CreateIndex); 
        return; 
end 

function WalkingBoss_Talked( _MeIndex, _PlayerIndex, _Msg, _Color, _Channel) 
        --检查玩家是否站在NPC面前
        if(NLG.CheckInFront(_PlayerIndex, _MeIndex, 2) == false) then 
                return ; 
        end 
        --面向玩家
        local i; 
        i = Char.GetData(_PlayerIndex, %对象_方向%); 
        if i >= 4 then 
                i = i - 4; 
        else 
                i = i + 4; 
        end 
        Char.SetData(_MeIndex, %对象_方向%,i); 
        NLG.UpChar( _MeIndex); 

        --设置站立动作
        NLG.SetAction(_MeIndex,0); 
        NLG.TalkToCli(_PlayerIndex, "呼噜呼噜噜…………", %黄色%, 0, _MeIndex); 

         --敌人阵列信息
        local TM_EnemyIdAr = iBossList;

        local TMP_level = iBossRs[_MeIndex][1];
        local TMP_slt = iBossRs[_MeIndex][2];
        --保存战斗索引
        iBattle[_MeIndex] = NLG.CreateBattle( _PlayerIndex, _MeIndex, nil, TM_EnemyIdAr[TMP_level][TMP_slt]); 

        --设置战斗胜利事件
        Battle.SetWinEvent("data/npc/lua/walkingboss/walkingboss.lua","WalkingBoss_BattleOver",iBattle[_MeIndex]); 
        --取消踩踏回应事件
        Char.SetPreOverEvent(nil, nil, _MeIndex); 
        Char.SetPostOverEvent(nil, nil, _MeIndex); 
        --取消对话回应事件并设置新对话回应事件
        Char.SetTalkedEvent(nil, nil, _MeIndex); 
        Char.SetTalkedEvent(nil, "WalkingBoss_Talked2", _MeIndex); 
        --取消回圈事件并设置新回圈事件(用作检查战斗是否结束) 
        Char.SetLoopEvent(nil, nil, _MeIndex,100); 
        Char.SetLoopEvent(nil, "WalkingBoss_Check", _MeIndex,500); 
        --更新
        NLG.UpChar(_MeIndex); 
        return; 
end 

function WalkingBoss_Talked2( _MeIndex, _PlayerIndex, _Msg, _Color, _Channel) 
        --检查玩家是否站在NPC面前
        if(NLG.CheckInFront(_PlayerIndex, _MeIndex, 1) == false) then 
                return ; 
        end 
        --正在战斗中的对话事件
        NLG.TalkToCli(_PlayerIndex, "呼噜噜噜~~~!", %黄色%, 0, _MeIndex); 
        NLG.TalkToCli(_PlayerIndex, Char.GetData( _PlayerIndex,%对象_原名%) .. ":(似乎已经有人在战斗了,我想我还是去看看有没有其他的宠物在作乱吧。)", _Color, 0); 
        return ; 
end 

function WalkingBoss_Check( _MeIndex) 
        --此为检查战斗是否结束的函数
        -- print("ING"); 
        local PlayerIndex = {-1,-1,-1,-1,-1}; 
        local count = 1; 
        --获取战斗中玩家索引
        while (count < 6) do 
                 PlayerIndex[count] = Battle.GetPlayIndex(iBattle[_MeIndex],0,count-1); 
                count = count + 1 ; 
        end 
         --如玩家索引不全为零则战斗尚未结束
        --否则判定战斗结束
        --因为如果战斗胜利
        --战斗胜利事件中取消了此回圈事件
        --所以在此可判定战斗失败
        if(PlayerIndex[1] ~=-1 or PlayerIndex[2] ~=-1 or PlayerIndex[3] ~=-1 or PlayerIndex[4] ~=-1 or PlayerIndex[5] ~=-1) then 
                   --战斗中
                return; 
        else 
                --战斗失败重设踩踏回应事件
                Char.SetPreOverEvent(nil, nil, _MeIndex); 
                Char.SetPreOverEvent(nil, "WalkingBoss_Covered", _MeIndex); 
                Char.SetPostOverEvent(nil, nil, _MeIndex); 
                Char.SetPostOverEvent(nil, "WalkingBoss_Covered", _MeIndex); 
                --战斗失败重设对话回应事件
                Char.SetTalkedEvent(nil, nil, _MeIndex); 
                Char.SetTalkedEvent(nil, "WalkingBoss_Talked", _MeIndex); 
                --战斗失败重设回圈事件
                Char.SetLoopEvent(nil, nil, _MeIndex,1500); 
                Char.SetLoopEvent(nil, "WalkingBoss_Walk", _MeIndex,1000); 
                --更新
                NLG.UpChar(_MeIndex); 
                return; 
        end 
end