|
本帖最后由 托托 于 2016-2-5 20:47 编辑
新鲜出炉 欢迎测试反馈问题 后续会维护
才做出1分钟,早上有事 先放出来大家试用下!!!
面对怪群,如何让AOE技能得到最大收益(A到最多的怪),就是这个函数的作用
算法:枚举两个点,确定过这两个点的两个圆的的圆心,循环N个点看有多少个点在这个圆里
时间复杂度:O(n^3)
使用方法:
1.用记事本打开Interface\AddOns\GC\wowamfunctions.lua
2.翻到最后另起一行
3.粘贴
4.MY_AUTOCastAOE(SpellName,RANGE,r) SpellName=技能名 RANGE=技能施放距离 r=技能半径
如MY_AUTOCastAOE("圣光之锤",30,10)
- function dis(x1,y1,x2,y2)
- return math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
- end
- function center(x1,y1,x2,y2,r,tar)
- local px,py;
- px=x1-x2;
- py=y1-y2;
- local midx,midy;
- midx=(x1+x2)/2.0;
- midy=(y1+y2)/2.0;
- local d=dis(midx,midy,x1,y1);
- local gao=math.sqrt(r*r-d*d);
- if (math.abs(py)<1e-8) then
- if (tar) then
- return midx,midy+gao
-
- else
- return midx,midy-gao
- end
- else
- local jiao=math.atan(-px/py);
- if (tar) then
- return midx+gao*math.cos(jiao),midy+gao*math.sin(jiao)
- else
- return midx-gao*math.cos(jiao),midy-gao*math.sin(jiao)
- end
- end
- end
- function check(rx,ry,r,Table)
- local ans=0;
- for i=1,#Table do
- if (dis(rx,ry,Table[i].x,Table[i].y)<r+.001) then ans=ans+1 end
- end
- return ans
- end
- function MY_GetAOEPosition(r,Table)
- local ans=1;
- local rex,rey;
- for i=1,#Table do
- for j=i+1,#Table do
- if (dis(Table[i].x,Table[i].y,Table[j].x,Table[j].y)>r*2) then break end
- local rx,ry=center(Table[i].x,Table[i].y,Table[j].x,Table[j].y,r,true);
- local tt=check(rx,ry,r,Table);
- if (tt>ans) then ans=tt rex=rx rey=ry end
- if (ans>=#Table) then break end
- end
- end
- return rex,rey
- end
- function MY_AUTOCastAOE(SpellName,RANGE,r)
- local PointTable={}
- for i = 1, #FHenemiesTable do
- local thisUnit = FHenemiesTable[i].unit
- if FHObjectDistance("player",thisUnit)<RANGE then
- local x,y,_=ObjectPosition(thisUnit)
- table.insert(PointTable,{x=x,y=y})
- end
- end
- local _,_,_,_,_,_,spellID = GetSpellInfo(SpellName)
- local X,Y,_=MY_GetAOEPosition(r,PointTable)
- local _,_,Z=ObjectPosition("player")
- if X~=nil and Y~=nil and Z~=nil and amSpellCooldown(spellID) == 0 then
- CastSpellByName(SpellName,"player");
- if IsAoEPending() then
- ClickPosition(X,Y,Z,true);
- return true;
- end
- end
- return false;
- end
复制代码
|
评分
-
查看全部评分
|