石器时代LA官方

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 8487|回复: 0

[吉仔LNS] 石器时代LNS野外游走BOSS_LUA脚本

[复制链接]

1万

主题

491

回帖

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
35549
石币
24710
发表于 2013-8-12 10:12:07 | 显示全部楼层 |阅读模式
石器时代LNS野外游走BOSS_LUA脚本
  1. function WalkingBoss_Init( _MeIndex )
  2.         --战斗索引全域变数
  3.         iBattle[_MeIndex] = 0;
  4.          --初始位置全域变数
  5.         iX[_MeIndex] = 0;
  6.         iY[_MeIndex] = 0;
  7.         Timer[_MeIndex] = 1;

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

  13.         if (Char.SetPreOverEvent(nil, "WalkingBoss_Covered", _MeIndex) < 0) then
  14.                 print("WalkingBoss_Covered注册事件失败。");
  15.                 return false;
  16.         end
  17.         --设置对话回应事件
  18.         if (Char.SetTalkedEvent(nil, "WalkingBoss_Talked", _MeIndex) < 0) then
  19.                 print("WalkingBoss_Talked注册事件失败。");
  20.                 return false;
  21.         end
  22.         --设置回圈事件
  23.         if (Char.SetLoopEvent(nil, "WalkingBoss_Walk", _MeIndex,1000) < 0) then
  24.                 print("WalkingBoss_Walk注册事件失败。");
  25.                 return false;
  26.         end
  27.         --更新
  28.         NLG.UpChar(_MeIndex);
  29.         return true;
  30. end

  31. function WalkingBoss_Walk( _MeIndex)

  32.         --设置动作为走路
  33.         local walk = 1;
  34.         NLG.SetAction(_MeIndex,walk);
  35.         --随机よ
  36.         local TM_DIR = math.floor(math.random(0, 7));
  37.         --限定范围
  38.         if ( Char.GetData( _MeIndex, %对象_X%) >= iX[_MeIndex]+math.floor(math.random(3, 7))) then
  39.                 TM_DIR = 6;
  40.         elseif ( Char.GetData( _MeIndex, %对象_X%) <= iX[_MeIndex]-math.floor(math.random(3, 7))) then
  41.                 TM_DIR = 2;
  42.         elseif ( Char.GetData( _MeIndex, %对象_Y%) <= iY[_MeIndex]-math.floor(math.random(3, 7))) then
  43.                 TM_DIR = 4;
  44.         elseif ( Char.GetData( _MeIndex, %对象_Y%) >= iY[_MeIndex]+math.floor(math.random(3, 7))) then
  45.                 TM_DIR = 0;
  46.         end
  47.         --走路
  48.         if(NLG.WalkMove(_MeIndex,TM_DIR) ~= 0) then
  49.                 NLG.WalkMove(_MeIndex,math.floor(math.random(0, 7)));
  50.         end
  51.         --设置よ
  52.         NLG.CharLook(_MeIndex,TM_DIR);
  53.         if Timer[_MeIndex] <= 300 then
  54.                 Timer[_MeIndex] = Timer[_MeIndex] + 1;
  55.         else
  56.                 local TM_Buff = "[全服通告]" .. Char.GetData(_MeIndex,%对象_原名%) .."在"..TM_MapName[iRdSlMap[_MeIndex]].."作乱,坐标为"..Char.GetData(_MeIndex,%对象_X%)..","..Char.GetData(_MeIndex,%对象_Y%).."。";
  57.                 NLG.TalkToCli(-1, TM_Buff, %红色%, 0, -1);
  58.                 Timer[_MeIndex] = 1;
  59.         end
  60.         return ;
  61. end

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

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

  72.                 local TMP_level = iBossRs[_MeIndex][1];
  73.                 local TMP_slt = iBossRs[_MeIndex][2];

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

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

  91. end

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

  99.         local i = 0;

  100.         local TMP_level = iBossRs[_CreateIndex][1];

  101.         local Tmp_Int;
  102.         --获得战斗中的玩家索引
  103.         while (count < 6) do
  104.                 PlayerIndex[count] = Battle.GetPlayIndex(_BattleIndex,0,count-1);
  105.                 if(PlayerIndex[count] >= 0) then
  106.                 randoma=math.floor(math.random(1, 5000))
  107.                 randomb=math.floor(math.random(1, 100))
  108.                 if(randoma == 3888)then
  109.                 iPrizeList[TMP_level]={22624,22624,22624,22624,22624,22624,22624,22624};
  110.                 end
  111.                 if(randoma == 1666)then
  112.                 iPrizeList[TMP_level]={22624,22624,22624,22624,22624,22624,22624,22624};
  113.                 end
  114.                 if(randomb == 30)then
  115.                 iPrizeList[TMP_level]={22624,22624,22624,22624,22624,22624,22624,22624};
  116.                 end
  117.                         i = i + 1;
  118.                         Tmp_Int = math.floor(math.random(1,8))
  119.                         if( iPrizeList[TMP_level][Tmp_Int] >= 0) then
  120.                                 if(NLG.GiveItem( PlayerIndex[count] , iPrizeList[TMP_level][Tmp_Int]) <= 0)then
  121.                                          NLG.TalkToCli(PlayerIndex[count], "道具栏位不足!", %黄色%, 0, -1);
  122.                                 end
  123.                          end
  124.                         NLG.TalkToCli(PlayerIndex[count], "呼噜噜噜噜噜…………(似乎是打输了很不甘愿的样子…)", %黄色%, 0, _CreateIndex);
  125.                 else
  126.                         print(NL.GetErrorStr());
  127.                 end
  128.                 count = count + 1 ;
  129.         end
  130.         --删除NPC
  131.         local Tmp_Buff;
  132.         if( i == 1) then
  133.                 Tmp_Buff = "[全服通告]≮勇士≯"..Char.GetData(PlayerIndex[1],%对象_原名%).."打倒了"..Char.GetData(_CreateIndex, %对象_原名%).. ",还有暴走的宠物"..iCounter.."个。";
  134.                 NLG.TalkToCli(-1,Tmp_Buff , %绿色%, 0, -1);
  135.         elseif( i == 2) then
  136.                 Tmp_Buff = "[全服通告]≮勇士≯"..Char.GetData(PlayerIndex[1],%对象_原名%).."、"..Char.GetData(PlayerIndex[2],%对象_原名%) .."打倒了"..Char.GetData(_CreateIndex, %对象_原名%).. ",还有暴走的宠物"..iCounter.."个。";
  137.                 NLG.TalkToCli(-1,Tmp_Buff , %红色%, 0, -1);
  138.         elseif( i == 3) then
  139.                 Tmp_Buff = "[全服通告]≮勇士≯"..Char.GetData(PlayerIndex[1],%对象_原名%).."、"..Char.GetData(PlayerIndex[2],%对象_原名%) .."、"..Char.GetData(PlayerIndex[3],%对象_原名%).."打倒了"..Char.GetData(_CreateIndex, %对象_原名%).. ",还有暴走的宠物"..iCounter.."个。";

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

  146.                 NLG.TalkToCli(-1, Tmp_Buff, %红色%, 0, -1);
  147.         end
  148.         NL.DelNpc(_CreateIndex);
  149.         return;
  150. end

  151. function WalkingBoss_Talked( _MeIndex, _PlayerIndex, _Msg, _Color, _Channel)
  152.         --检查玩家是否站在NPC面前
  153.         if(NLG.CheckInFront(_PlayerIndex, _MeIndex, 2) == false) then
  154.                 return ;
  155.         end
  156.         --面向玩家
  157.         local i;
  158.         i = Char.GetData(_PlayerIndex, %对象_方向%);
  159.         if i >= 4 then
  160.                 i = i - 4;
  161.         else
  162.                 i = i + 4;
  163.         end
  164.         Char.SetData(_MeIndex, %对象_方向%,i);
  165.         NLG.UpChar( _MeIndex);

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

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

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

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

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

  200. function WalkingBoss_Check( _MeIndex)
  201.         --此为检查战斗是否结束的函数
  202.         -- print("ING");
  203.         local PlayerIndex = {-1,-1,-1,-1,-1};
  204.         local count = 1;
  205.         --获取战斗中玩家索引
  206.         while (count < 6) do
  207.                  PlayerIndex[count] = Battle.GetPlayIndex(iBattle[_MeIndex],0,count-1);
  208.                 count = count + 1 ;
  209.         end
  210.          --如玩家索引不全为零则战斗尚未结束
  211.         --否则判定战斗结束
  212.         --因为如果战斗胜利
  213.         --战斗胜利事件中取消了此回圈事件
  214.         --所以在此可判定战斗失败
  215.         if(PlayerIndex[1] ~=-1 or PlayerIndex[2] ~=-1 or PlayerIndex[3] ~=-1 or PlayerIndex[4] ~=-1 or PlayerIndex[5] ~=-1) then
  216.                    --战斗中
  217.                 return;
  218.         else
  219.                 --战斗失败重设踩踏回应事件
  220.                 Char.SetPreOverEvent(nil, nil, _MeIndex);
  221.                 Char.SetPreOverEvent(nil, "WalkingBoss_Covered", _MeIndex);
  222.                 Char.SetPostOverEvent(nil, nil, _MeIndex);
  223.                 Char.SetPostOverEvent(nil, "WalkingBoss_Covered", _MeIndex);
  224.                 --战斗失败重设对话回应事件
  225.                 Char.SetTalkedEvent(nil, nil, _MeIndex);
  226.                 Char.SetTalkedEvent(nil, "WalkingBoss_Talked", _MeIndex);
  227.                 --战斗失败重设回圈事件
  228.                 Char.SetLoopEvent(nil, nil, _MeIndex,1500);
  229.                 Char.SetLoopEvent(nil, "WalkingBoss_Walk", _MeIndex,1000);
  230.                 --更新
  231.                 NLG.UpChar(_MeIndex);
  232.                 return;
  233.         end
  234. end
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|石器时代LA官方

GMT+8, 2024-5-5 16:07 , Processed in 0.106277 second(s), 25 queries .

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表