郁金香灬老师 游戏安全  驱动 逆向调试 C/C++编程  脚本 UE4/UE5

找回密码
立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
发新帖
课程大纲和价格
官方联系方式2024在线课大纲QQ咨询

1906

积分

1

好友

2

主题
发表于 2024-7-20 23:15:51 | 查看: 879| 回复: 0
  1. --获取配置文件中....本场景自动寻路数据的起始与结束位置....
  2. --参考 048-遍历传送点和NPC - test.lua
  3. local print=myprint
  4. local g_TabListDataTablePtr={}
  5.          --MenuName 任务名
  6.     function SelectNpcMenu(MenuName)
  7.           local strType,strState,strScriptId,strExtra,strTemp
  8.           --NPC对话框内 项的数量
  9.           local nEventListNum = DataPool:GetNPCEventList_Num();
  10.            print("数量",nEventListNum)
  11.        for i=1, nEventListNum do
  12.                  strType,strState,strScriptId,strExtra,strTemp = DataPool:GetNPCEventList_Item(i-1);
  13.                  print(i,"NPC对话列表",strType,strState,strScriptId,strExtra,strTemp )
  14.                    if strType=='id' and MenuName == strTemp then
  15.                     print("选择",MenuName,tonumber(-1),tonumber(strScriptId),tonumber(strExtra))
  16.                     QuestFrameOptionClicked(tonumber(-1),tonumber(strScriptId),tonumber(strExtra))
  17.                     break;
  18.                    end        
  19.            end
  20.           return strScriptId,strExtra,strTemp
  21.         end
  22.        
  23. -- 城市   --1 全部,2功能,3商店,4任务
  24. function GetPosForNpc(NpcName)
  25.    
  26.         local tabIndex=1 --全部
  27.    
  28.    print("开始遍历++++++++++++++")   
  29.         local curTabType = TabIndex2TabType(tabIndex);
  30.             local nStart, nEnd = DataPool:GetAutoSearchSceneStartEnd( GetSceneID() )
  31.             print('nStart=',nStart,'nEnd=',nEnd)
  32.                 if nStart == -1 then        return false;        end
  33.                
  34.                 --填充本场景自动寻路数据的ID和优先级到表格....


  35.         local tblPriority = {};
  36.                 local nCount = nEnd - nStart + 1;
  37.                 local k = 1;
  38.       
  39.            for i=nStart, nEnd do
  40.                 --print(i)
  41.                     tblPriority[k] = {};
  42.                         tblPriority[k].id = i;
  43.                         tblPriority[k].pri = DataPool:GetAutoSearchPriority(i);
  44.                         k = k + 1;
  45.            end


  46.                
  47.                 --按优先级对表格进行排序....

  48.                 --算法有点不好理解....策划要求权值相同的排序后相对位置不能改变....就先这么写了....

  49.                 local temp1,temp2;

  50.                 for m=nCount, 1, -1 do

  51.                         for n=m-1, 1, -1 do

  52.                                 if tblPriority[m].pri >= tblPriority[n].pri then

  53.                                         temp1 = tblPriority[m].id;

  54.                                         temp2 = tblPriority[m].pri;

  55.                                         tblPriority[m].id = tblPriority[n].id;

  56.                                         tblPriority[m].pri = tblPriority[n].pri;

  57.                                         tblPriority[n].id = temp1;

  58.                                         tblPriority[n].pri = temp2;

  59.                                 end

  60.                         end

  61.                 end



  62.                 --按排序后的ID顺序将自动寻路的数据加到本Tab页的自动寻路数据表中....

  63.                 local curTabType = TabIndex2TabType(tabIndex);

  64.                 local x, y, name, tooltips, info, tabtype;

  65.                 k = 1;

  66.                 for i=1, nCount do

  67.                         x, y, name, tooltips, info, tabtype = DataPool:GetAutoSearch( tblPriority[nCount-i+1].id );

  68.                         if 0 == curTabType or curTabType == tabtype then

  69.                                 g_TabListDataTablePtr[k] = {};

  70.                                 g_TabListDataTablePtr[k].ID = tblPriority[nCount-i+1].id;

  71.                                 g_TabListDataTablePtr[k].nPosX = x;

  72.                                 g_TabListDataTablePtr[k].nPosY = y;

  73.                                 g_TabListDataTablePtr[k].strName = name;

  74.                                 g_TabListDataTablePtr[k].strToolTips = tooltips;

  75.                                 g_TabListDataTablePtr[k].strInfo = info;

  76.                                 --g_TabListDataTablePtr[k].strInfo = tostring(tblPriority[nCount-i+1].pri)..","..tostring(tblPriority[nCount-i+1].id);

  77.                                 k = k + 1;

  78.                         end

  79.                 end



  80.         --end --end of (if not g_TabListDataTablePtr then)


  81.           local nTabListCount = table.getn( g_TabListDataTablePtr );
  82.         ----PushDebugMessage("count ="..tostring(nTabListCount) )
  83.     --print("nTabListCount=",nTabListCount)
  84.         for i=1, nTabListCount do

  85.                 --AutoSearch_List:AddNewItem( g_TabListDataTablePtr[i].strName, 0, i-1 );
  86.                 --AutoSearch_List:AddNewItem( g_TabListDataTablePtr[i].strInfo, 1, i-1 );
  87.                 --AutoSearch_List:SetRowTooltip( i-1, g_TabListDataTablePtr[i].strToolTips );
  88.                 --g_TabListDataTablePtr[k].nPosX
  89.                 local items=g_TabListDataTablePtr
  90.                
  91.                 if(NpcName==items[i].strName or  NpcName==items[i].strInfo  or NpcName==items[i].strToolTips  ) then
  92.                
  93.                   print(tostring(i),items[i].strName,items[i].strInfo,items[i].strToolTips,items[i].nPosX,items[i].nPosY)
  94.                   
  95.                   return items[i].nPosX,items[i].nPosY
  96.                 end

  97.         end
  98.        
  99. --]]
  100. print("完成遍历++++++++++++++>>>")
  101.                 return nil,nil ;       

  102. end --function

  103. function NpcDialogIsShow()
  104. return Quest_Env.this:IsVisible()
  105. end

  106. function AutoRunToNpc(name)

  107. local x,y=GetPosForNpc(name)

  108.         --自动移动到指定位置
  109.      print("AutoRunToNpc 自动移动到指定位置",name,x,y)
  110.      SetAutoRunTargetNPCName(name)--如 SetAutoRunTargetNPCName"干光豪")
  111.          local ret = AutoRunToTarget( x, y );

  112.         if ret == 0 then
  113.                 PushDebugMessage("自动寻路无法到达目标点") --无法移动到指定位置 自动寻路无法到达目标点
  114.         end
  115.        
  116.         return NpcDialogIsShow; --非0表示可以到达
  117. end

  118. --local isok=AutoRunToNpc("干光豪")
  119.   SelectNpcMenu("蜂毒")
  120. print("OK+++++++++++++++++")
复制代码


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

QQ咨询

QQ|Archiver|手机版|小黑屋|郁金香游戏技术

GMT+8, 2024-11-23 01:49 , Processed in 0.085914 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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