铁血丹心

 找回密码
 我要成为铁血侠客
搜索
查看: 1051|回复: 7

请教高手一个问题

[复制链接]
发表于 2012-8-20 15:39 | 显示全部楼层 |阅读模式

马上注册,结交更多侠友!

您需要 登录 才可以下载或查看,没有账号?我要成为铁血侠客

x
  不知道有没有人注意过,在LDCR中War_AutoFight()函数中有一个神秘的unnamed()函数。此函数并没有在LDCR中被定义,请问有没有人知道它是在哪里被定义的?
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2012-8-20 15:53 | 显示全部楼层
本帖最后由 ivansz 于 2012-8-20 15:53 编辑

在 AI.lua文件里  未开源

点评

你咋发现是在AI里面的,求推理过程  发表于 2012-8-20 22:17
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2012-8-21 18:24 | 显示全部楼层
谢谢答复,但是在script中没找到这个文件。和二宫兄同样的问题。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2012-8-21 18:29 | 显示全部楼层
真相只有一个——别人告诉我的
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2012-8-22 11:09 | 显示全部楼层
是在AI.lua文件里。 源码换电脑之后不知道丢哪里去了

【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2012-8-22 11:28 | 显示全部楼层
027大大发给我的源码,论坛应该吃掉了一部分,仅作参考。。。
  1. function unnamed(kfid)
  2. local pid=WAR.Person[WAR.CurID][人物编号]
  3. local kungfuid=JY.Person[pid][武功..kfid]
  4. local kungfulv=JY.Person[pid][武功等级 .. kfid];
  5. if kungfulv==999 then
  6. kungfulv=11
  7. else
  8. kungfulv=math.modf(kungfulv/100)+1
  9. end
  10. --local kungfulv=math.modf(JY.Person[pid][武功等级..kfid]/100)+1
  11. local m1,m2,a1,a2,a3,a4,a5= refw(kungfuid,kungfulv)
  12. local mfw={m1,m2}
  13. local atkfw={a1,a2,a3,a4,a5}
  14. if kungfulv==11 then kungfulv=10 end
  15. local kungfuatk=JY.Wugong[kungfuid][攻击力..kungfulv]--GetAtk(pid,kungfuid,kungfulv) --武功攻击力
  16. --local fanwei=JY.Wugong[kungfuid][范围][math.modf(kungfulv/3)+1] --实际武功范围
  17. local atkarray={}
  18. local num=0

  19. CleanWarMap(4,-1); --用level 4地图表示该位置可以攻击的数目
  20. -- -1表示此点还没计算
  21. local movearray=War_CalMoveStep(WAR.CurID,WAR.Person[WAR.CurID][移动步数],0) --移动表
  22. --WarDrawMap(1)
  23. --ShowScreen()
  24. local starttime=lib.GetTime();
  25. --lib.Delay(400)
  26. for i=0,WAR.Person[WAR.CurID][移动步数] do
  27. local step_num=movearray[i].num ;
  28. if step_num==nil or step_num==0 then
  29. break;
  30. end

  31. for j=1,step_num do
  32. local xx=movearray[i].x[j]
  33. local yy=movearray[i].y[j]
  34. num=num+1
  35. atkarray[num]={}
  36. atkarray[num].x,atkarray[num].y=xx,yy
  37. atkarray[num].p,atkarray[num].ax,atkarray[num].ay=GetAtkNum(xx,yy,mfw,atkfw,kungfuatk)
  38. atkarray[num].p=atkarray[num].p*5/(3+math.max(i,2))
  39. end

  40. end

  41. --排序
  42. for i=1,num-1 do
  43. for j=i+1,num do
  44. if atkarray[i].patkarray[j].p then
  45. atkarray[i],atkarray[j]=atkarray[j],atkarray[i]
  46. end
  47. end
  48. end
  49. --[[
  50. for i=1,num do
  51. lib.Debug(JY.Person[pid][姓名]..'|'..JY.Wugong[kungfuid][名称]..'|'..atkarray[i].x..','..atkarray[i].y..'|'..atkarray[i].ax..','..atkarray[i].ay..'|'..atkarray[i].p)
  52. end
  53. ]]--
  54. if atkarray[1].p0 then
  55. for i=1,num do
  56. if atkarray[i].p==0 or atkarray[i].patkarray[1].p/2 then
  57. num=i-1
  58. break;
  59. end
  60. end
  61. for i=1,num do
  62. atkarray[i].p=atkarray[i].p+GetMovePoint(atkarray[i].x,atkarray[i].y)--string.format(%s,mxy:%d,%d|axy:%d,%d|point:%d)
  63. end
  64. for i=1,num-1 do
  65. for j=i+1,num do
  66. if atkarray[i].patkarray[j].p then
  67. atkarray[i],atkarray[j]=atkarray[j],atkarray[i]
  68. elseif atkarray[i].p==atkarray[j].p then
  69. if math.random(2)==1 then
  70. atkarray[i],atkarray[j]=atkarray[j],atkarray[i]
  71. end
  72. end
  73. end
  74. end
  75. for i=2,num do
  76. if atkarray[i].patkarray[1].p-15 then
  77. num=i-1
  78. break;
  79. end
  80. end
  81. if num6 then
  82. for i=num,6 do
  83. if atkarray[i].patkarray[1].p-50 then
  84. num=i-1
  85. break
  86. end
  87. end
  88. end
  89. local endtime=starttime+100-lib.GetTime()
  90. if endtime0 then
  91. lib.Delay(endtime)
  92. end
  93. local select
  94. --if num3 then num=3 end
  95. select=1--math.random(num)
  96. War_CalMoveStep(WAR.CurID,WAR.Person[WAR.CurID][移动步数],0)
  97. War_MovePerson(atkarray[select].x,atkarray[select].y)
  98. WAR.Person[WAR.CurID][Action]={'atk',kfid,atkarray[select].ax-atkarray[select].x,atkarray[select].ay-atkarray[select].y}
  99. War_Fight_Sub(WAR.CurID,kfid,atkarray[select].ax,atkarray[select].ay)
  100. else
  101. local endtime=starttime+100-lib.GetTime()
  102. if endtime0 then
  103. lib.Delay(endtime)
  104. end
  105. local jl,nx,ny=War_realjl()
  106. if jl==-1 then
  107. AutoMove()
  108. else
  109. local vv
  110. vv=GetWarMap(nx+1,ny,2)
  111. if vv-1 and WAR.Person[vv][我方]~=WAR.Person[WAR.CurID][我方] then

  112. else
  113. vv=GetWarMap(nx-1,ny,2)
  114. if vv-1 and WAR.Person[vv][我方]~=WAR.Person[WAR.CurID][我方] then

  115. else
  116. vv=GetWarMap(nx,ny+1,2)
  117. if vv-1 and WAR.Person[vv][我方]~=WAR.Person[WAR.CurID][我方] then

  118. else
  119. vv=GetWarMap(nx,ny-1,2)
  120. end
  121. end
  122. end
  123. local array={}
  124. local an=0
  125. local movearray=War_CalMoveStep(WAR.CurID,WAR.Person[WAR.CurID][移动步数],0)
  126. --MY_CalMoveStep(nx,ny,jl,0)
  127. War_CalMoveStep(vv,jl,0)
  128. for i=1,WAR.Person[WAR.CurID][移动步数] do
  129. local step_num=movearray[i].num ;
  130. if step_num==nil or step_num==0 then
  131. break;
  132. end
  133. for j=1,step_num do
  134. local xx=movearray[i].x[j]
  135. local yy=movearray[i].y[j]
  136. local Dest=GetWarMap(xx,yy,3)
  137. if Dest255 then
  138. an=an+1
  139. array[an]={}
  140. array[an].x=xx
  141. array[an].y=yy
  142. array[an].p=jl-Dest
  143. --lib.Debug(an..','..array[an].p)
  144. end
  145. end
  146. end
  147. for i=1,an-1 do
  148. for j=i+1,an do
  149. if array[i].parray[j].p then
  150. array[i],array[j]=array[j],array[i]
  151. end
  152. end
  153. end
  154. for i=2,an do
  155. if array[i].parray[1].p/2 then
  156. an=i-1
  157. break
  158. end
  159. end
  160. for i=1,an do
  161. array[i].p=array[i].p+GetMovePoint(array[i].x,array[i].y)
  162. end
  163. for i=1,an-1 do
  164. for j=i+1,an do
  165. if array[i].parray[j].p then
  166. array[i],array[j]=array[j],array[i]
  167. end
  168. end
  169. end
  170. --if jl==-1 then
  171. -- AutoMove()
  172. --else
  173. if an0 then
  174. War_CalMoveStep(WAR.CurID,WAR.Person[WAR.CurID][移动步数],0)
  175. War_MovePerson(array[1].x,array[1].y)
  176. else
  177. AutoMove()
  178. end
  179. --end
  180. --AutoMove()
  181. end
  182. War_RestMenu();
  183. end
  184. return
  185. end

  186. function GetAtkNum(x,y,movfw,atkfw,atk)
  187. local point={} --记录可以攻击的点
  188. local num=0 --记录点的个数
  189. local kind,len=movfw[1],movfw[2]
  190. --kind,len1,len2=fenjie(JY.Wugong[kfnum][范围..math.modf((lv+2)/3)])


  191. --攻击范围类型 0菱形1方块2十字3八向

  192. if kind==0 then
  193. local array=MY_CalMoveStep(x,y,len,1);
  194. for i=0,len do
  195. local step_num=array[i].num ;
  196. if step_num==nil or step_num==0 then
  197. break;
  198. end
  199. for j=1,step_num do
  200. num=num+1
  201. point[num]={array[i].x[j],array[i].y[j]}
  202. end
  203. end
  204. elseif kind==1 then
  205. local array=MY_CalMoveStep(x,y,len*2,1);
  206. for r=1,len*2 do
  207. for i=0,r do
  208. local j=r-i
  209. if ilen or jlen then
  210. SetWarMap(x+i,y+j,3,255)
  211. SetWarMap(x+i,y-j,3,255)
  212. SetWarMap(x-i,y+j,3,255)
  213. SetWarMap(x-i,y-j,3,255)
  214. end
  215. end
  216. end
  217. for i=0,len do
  218. local step_num=array[i].num ;
  219. if step_num==nil or step_num==0 then
  220. break;
  221. end
  222. for j=1,step_num do
  223. if GetWarMap(array[i].x[j],array[i].y[j],3)128 then
  224. num=num+1
  225. point[num]={array[i].x[j],array[i].y[j]}
  226. end
  227. end
  228. end
  229. elseif kind==2 then
  230. --四向
  231. len=len or 1
  232. for i=1,len do
  233. if x+iCC.WarWidth-1 and GetWarMap(x+i,y,1)0 and CC.WarWater[GetWarMap(x+i,y,0)]==nil then break end
  234. num=num+1
  235. point[num]={x+i,y}
  236. end
  237. for i=1,len do
  238. if x-i0 and GetWarMap(x-i,y,1)0 and CC.WarWater[GetWarMap(x-i,y,0)]==nil then break end
  239. num=num+1
  240. point[num]={x-i,y}
  241. end
  242. for i=1,len do
  243. if y+iCC.WarHeight-1 and GetWarMap(x,y+i,1)0 and CC.WarWater[GetWarMap(x,y+i,0)]==nil then break end
  244. num=num+1
  245. point[num]={x,y+i}
  246. end
  247. for i=1,len do
  248. if y-i0 and GetWarMap(x,y-i,1)0 and CC.WarWater[GetWarMap(x,y-i,0)]==nil then break end
  249. num=num+1
  250. point[num]={x,y-i}
  251. end
  252. elseif kind==3 then
  253. --八向(方块)
  254. if x+1CC.WarWidth-1 and GetWarMap(x+1,y,1)==0 and CC.WarWater[GetWarMap(x+1,y,0)]==nil then
  255. num=num+1
  256. point[num]={x+1,y}
  257. end
  258. if x-10 and GetWarMap(x-1,y,1)==0 and CC.WarWater[GetWarMap(x-1,y,0)]==nil then
  259. num=num+1
  260. point[num]={x-1,y}
  261. end
  262. if y+1CC.WarHeight-1 and GetWarMap(x,y+1,1)==0 and CC.WarWater[GetWarMap(x,y+1,0)]==nil then
  263. num=num+1
  264. point[num]={x,y+1}
  265. end
  266. if y-10 and GetWarMap(x,y-1,1)==0 and CC.WarWater[GetWarMap(x,y-1,0)]==nil then
  267. num=num+1
  268. point[num]={x,y-1}
  269. end
  270. if x+1CC.WarWidth-1 and y+1CC.WarHeight-1 and GetWarMap(x+1,y+1,1)==0 and CC.WarWater[GetWarMap(x+1,y+1,0)]==nil then
  271. num=num+1
  272. point[num]={x+1,y+1}
  273. end
  274. ifx-10 and y+1CC.WarHeight-1 and GetWarMap(x-1,y+1,1)==0 and CC.WarWater[GetWarMap(x-1,y+1,0)]==nil then
  275. num=num+1
  276. point[num]={x-1,y+1}
  277. end
  278. if x+1CC.WarWidth-1 and y-10 and GetWarMap(x+1,y-1,1)==0 and CC.WarWater[GetWarMap(x+1,y-1,0)]==nil then
  279. num=num+1
  280. point[num]={x+1,y-1}
  281. end
  282. ifx-10 andy-10 and GetWarMap(x-1,y-1,1)==0 and CC.WarWater[GetWarMap(x-1,y-1,0)]==nil then
  283. num=num+1
  284. point[num]={x-1,y-1}
  285. end
  286. end
  287. --从第一个点开始,分别获取该点攻击敌人的数目,并保存最大点的坐标,攻击数目
  288. local maxx,maxy,maxnum,atknum=0,0,0,0
  289. for i=1,num do
  290. atknum=GetWarMap(point[i][1],point[i][2],4) --取第四层数据,若为-1,则调用函数计算
  291. if atknum==-1 or atkfw[1]9 then --如果不是定点类,则必须重复计算
  292. atknum=WarDrawAtt(point[i][1],point[i][2],atkfw,2,x,y,atk)
  293. if atknum0 then
  294. atknum=atknum+i;
  295. end
  296. SetWarMap(point[i][1],point[i][2],4,atknum)
  297. end
  298. if atknummaxnum then
  299. maxnum,maxx,maxy=atknum,point[i][1],point[i][2]
  300. end
  301. end
  302. --SetWarMap(x,y,4,maxnum);
  303. return maxnum,maxx,maxy;

  304. end

  305. function AutoMove()
  306. local x,y;
  307. local minDest=math.huge;
  308. local enemyid=War_AutoSelectEnemy() --选择最近敌人
  309. War_CalMoveStep(WAR.CurID,100,0); --计算移动步数 假设最大100步
  310. for i=0,CC.WarWidth-1 do
  311. for j=0,CC.WarHeight-1 do
  312. local dest=GetWarMap(i,j,3);
  313. if dest 128 then
  314. local dx=math.abs(i-WAR.Person[enemyid][坐标X])
  315. local dy=math.abs(j-WAR.Person[enemyid][坐标Y])
  316. if minDest(dx+dy) then --此时x,y是距离敌人的最短路径,虽然可能被围住
  317. minDest=dx+dy;
  318. x=i;
  319. y=j;
  320. elseif minDest==(dx+dy) then
  321. if Rnd(2)==0 then
  322. x=i;
  323. y=j;
  324. end
  325. end
  326. end
  327. end
  328. end
  329. if minDestmath.huge then --有路可走
  330. while true do --从目的位置反着找到可以移动的位置,作为移动的次序
  331. local i=GetWarMap(x,y,3);
  332. if i=WAR.Person[WAR.CurID][移动步数] then
  333. break;
  334. end

  335. if GetWarMap(x-1,y,3)==i-1 then
  336. x=x-1;
  337. elseif GetWarMap(x+1,y,3)==i-1 then
  338. x=x+1;
  339. elseif GetWarMap(x,y-1,3)==i-1 then
  340. y=y-1;
  341. elseif GetWarMap(x,y+1,3)==i-1 then
  342. y=y+1;
  343. end
  344. end
  345. War_MovePerson(x,y); --移动到相应的位置
  346. end
  347. end

  348. function AutoMove11()
  349. local movearray=War_CalMoveStep(WAR.CurID,WAR.Person[WAR.CurID][移动步数],0)
  350. local p,tx,ty=-999,0,0
  351. for i=1,WAR.Person[WAR.CurID][移动步数] do
  352. local step_num=movearray[i].num ;
  353. if step_num==nil or step_num==0 then
  354. break;
  355. end
  356. for j=1,step_num do
  357. local xx=movearray[i].x[j]
  358. local yy=movearray[i].y[j]
  359. local len=-2*War_realjl()+GetMovePoint(xx,yy)
  360. if lenp then
  361. p=len
  362. tx=xx
  363. ty=yy
  364. end
  365. end
  366. end
  367. War_CalMoveStep(WAR.CurID,WAR.Person[WAR.CurID][移动步数],0)
  368. War_MovePerson(tx,ty); --移动到相应的位置
  369. end

  370. function GetMovePoint(x,y,flag)
  371. local point=0
  372. local wofang=WAR.Person[WAR.CurID][我方]
  373. local movearray=MY_CalMoveStep(x,y,9,1)
  374. for i=1,9 do
  375. local step_num=movearray[i].num;
  376. if step_num==nil or step_num==0 then
  377. break;
  378. end
  379. for j=1,step_num do
  380. local xx=movearray[i].x[j]
  381. local yy=movearray[i].y[j]
  382. local v=GetWarMap(xx,yy,2)
  383. if v==-1 or v==WAR.CurID then
  384. --point=point+10
  385. elseif WAR.Person[v][我方]==wofang then
  386. point=point+i*2-19
  387. elseif WAR.Person[v][我方]~=wofang then
  388. --local qg=math.modf(WAR.PersonNum/2)-WAR.CurID
  389. if flag~=nil then
  390. point=point+i-10
  391. else
  392. if not inteam(WAR.Person[WAR.CurID][人物编号]) then--WAR.Person[WAR.CudID][我方] then
  393. point=point+10-i--+i-10
  394. else
  395. point=point+10-i
  396. end
  397. --point=point+8
  398. end
  399. end
  400. end
  401. end
  402. return point
  403. end
  404. function MY_CalMoveStep(x,y,stepmax,flag)
  405. CleanWarMap(3,255); --第三层坐标用来设置移动,先都设为255,
  406. local steparray={}; --用数组保存第n步的坐标。
  407. for i=0,stepmax do
  408. steparray[i]={};
  409. steparray[i].bushu={};
  410. steparray[i].x={};
  411. steparray[i].y={};
  412. end
  413. SetWarMap(x,y,3,0);
  414. steparray[0].num=1;
  415. steparray[0].bushu[1]=stepmax; --还能移动的步数
  416. steparray[0].x[1]=x;
  417. steparray[0].y[1]=y;
  418. War_FindNextStep(steparray,0,flag);
  419. return steparray;
  420. end

  421. function MY_realjl(ida,idb)
  422. if ida==nil then
  423. ida=WAR.CurID
  424. end
  425. local num
  426. local movearray=War_CalMoveStep(ida,255,0)
  427. for i=1,255 do
  428. num=i
  429. lib.Debug(i)
  430. local step_num=movearray[i].num ;
  431. if step_num==nil or step_num==0 then
  432. break;
  433. end
  434. for j=1,step_num do
  435. local xx=movearray[i].x[j]
  436. local yy=movearray[i].y[j]
  437. local v=GetWarMap(xx,yy,2)
  438. --lib.Debug(xx..','..yy..'|'..v)
  439. if idb==nil then
  440. if v~=-1 then
  441. if WAR.Person[v][我方]~=WAR.Person[ida][我方] then
  442. --lib.Debug(i..','..xx..','..yy)
  443. return v,num--,xx,yy
  444. end
  445. end
  446. else
  447. if v==idb then
  448. return v,num--,xx,yy
  449. end
  450. end
  451. end
  452. end

  453. end
复制代码
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2012-8-22 11:34 | 显示全部楼层
回复 btxdex 的帖子

好东西。。。。收下啦 谢谢
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2012-8-22 18:11 | 显示全部楼层
多谢两位前辈指点。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。

本版积分规则

小黑屋|手机版|铁血丹心

GMT+8, 2024-11-23 20:34

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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