LUACN论坛

 找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
热搜: YJWOW MagicStone BoL
查看: 8002|回复: 0

泰坦API GH for 军团再临

[复制链接]
发表于 2017-2-14 12:01:22 | 显示全部楼层 |阅读模式
简介
在浏览器里查看本说明

该库默认命名空间:GH。函数名称继续沿用老版本基于Firehack的GodHand/BadBoy的函数名称,在之前效率和内容上进行了改进/优化,力求带给开发者和使用者最完备的体验。

对于PVP的各种特定技巧也给出了很多接口函数。由于Titan具有强大的独立命名空间,本库也为很多常用函数增加了简称,便于大家编写脚本。

库函数说明
部分常用函数有简称,见斜杠后的简短名称。函数使用时需要带上命名空间GH. 如:

    GH.csi("target",110)
    GH.csl("target",123)
部分示例中,如果没有命名空间声明,请自行加上自用的命名空间名称,默认是“GH.” 。
施法类函数
一般用于释放各种技能/宏,为了避免客户端技能翻译问题,采用唯一对应的技能id施法。

快捷施法
castInsta(unit,spellid)/csi(unit,spellid)
对unit释放spellid的顺发法术/近战攻击技能。

GH.csi("target",123)
对当前目标释放法术id为123的顺发法术的技能。

castLong(unit,spellid)/csl(unit,spellid)
对unit释放spellid的读条法术,需要站在原地不动才会放。

GH.csl("target",2233)
对当前目标释放法术id为2233的读条法术。

castSp(unit,spell)
对unit释放spellid的技能,无视任何判断。

rm(macro)
释放宏macro。

如:

GH.rm("/cast 寒冰箭")
castGround(Unit,SpellID,maxDistance[,MovementCheck])
cg(Unit,SpellID,maxDistance[,MovementCheck])
对Unit释放aoe绿圈SpellID的技能,最大距离为maxDistance。MovementCheck缺省为false,true的时候只判断需要站定读条的aoe技能。

GH.cg("target",1000,30)
对当前目标释放法术id是1000的aoe技能,这个技能最大射程为30码,移动时候也会施法。

castGroundBetween(u1,u2,distancefromu1,SpellID,maxDistance,MovementCheck,SpamAllowed,KnownSkip)
对距离u1,u2之间distancefromu1的位置释放SpellID,maxDistance的绿圈技能。

castSpell(Unit,SpellID[,FacingCheck,MovementCheck,SpamAllowed,KnownSkip,DeadCheck,DistanceSkip,usableSkip])
cs(Unit,SpellID[,FacingCheck,MovementCheck,SpamAllowed,KnownSkip,DeadCheck,DistanceSkip,usableSkip])
对Unit释放SpellID的技能。它需要满足以下条件才会释放:

FacingCheck,面对检查,如果为true,无需面向unit就可以放技能。默认为false。

MovementCheck,移动检查,如果为true,必须站定才能施法。默认为false。

SpamAllowed,连续施法,如果为true,会无延迟尝试释放这个技能。默认为true。如果是false,技能会内置1秒的延迟才会接受下次释放。

KnownSkip,技能书掌握检查,如果为true会无视这个检查,一般用默认false。

DeadCheck,unit死亡检查,默认为false。如果是复活术之类的技能请写成true。

DistanceSkip,距离检查跳过,默认为false,会自动检查是不是目标在射程内,写成true会跳过这个检查,一般用不到。如果是宝宝的恶魔掌握这种内含技能或者是牧师的虚空箭,需要写为true。

usableSkip,技能是否可用检查,一般用不到。如果是宝宝的恶魔掌握这种内含技能或者是牧师的虚空箭,需要写为true。

GH.cs("target",30108,true,true)
对目标释放痛苦无常,目标在你背后也会施法,必须是站定状态。

castSpellID(Unit,SpellID[,FacingCheck,MovementCheck,SpamAllowed,KnownSkip,DeadCheck,DistanceSkip,usableSkip])
csid(Unit,SpellID[,FacingCheck,MovementCheck,SpamAllowed,KnownSkip,DeadCheck,DistanceSkip,usableSkip])
部分法术需要采用法术id施法模式,恶魔ss的pvp打断天赋产生的“召唤地狱猎犬”和自己的召唤宠物重名,需要用这个函数施法。

noLos();
调用此函数会关闭LoS视线检测,等同于令DistanceSkip为true。 会使你脚本里的所有施法全部无视距离和视野判断。

--无视脚本内的距离检测,慎用可能会导致卡技能
GH.noLos()
GH.cs("target",123,false,false)
castHeal(spellid,percent[,maxRange,MovementCheck])
ch(spellid,percent[,maxRange,MovementCheck])
对自己周围少于percent的目标施放spellid的治疗技能。最大范围maxRange默认是40,MovementCheck同castSpell,默认false。

GH.ch(17,85,40,false)
对自己周围血量低于85%的目标施放真言术盾。最大范围40码,移动中也会丢。

castCursor(spellid)
在鼠标位置释放spellid的绿圈技能。

castForm(num)
释放第num个(德鲁伊/圣骑士圣印)形态。

--释放第三个形态
GH.castForm(3)
cancelForm()
--取消形态
GH.cancelForm()
取消当前的形态。

cancelBuff(buffid)
取消自己身上buffid的buff。

--取消自己身上的115号buff
GH.cancelBuff(115)
get类函数
一般用于获取各种数值,或者判断某个天赋/雕纹/buff/debuff。

数值类
getHP(Unit)
获取Unit的生命百分比。 0到100,百分之50是50。

--如果自己血量不足30% 就开剑在人在
if GH.getHP("player") <= 30 then
    GH.csi("player",118038)
end
getMana(Unit)
获取Unit的魔法值(蓝)百分比。 0到100,百分之50是50。

--如果自己蓝量不足30% 就喝蓝瓶
if GH.getMana("player") <= 30 then
    GH.rm("/use 破碎法力药水")
end
getRage()
获取自己的怒气,数值。 可以是15、110等等。

--怒气判断丢技能,50怒气以上对目标丢猛击
local rage = GH.getRage()
if rage > 50 then
    csi("target",1464)
end
getCombo()
获取自己的连击点数。

getRunes()
获取自己的符文个数(DK)。

getRunicPower()
获取自己的符文能量(DK)。

getSoulShards()
获取自己的灵魂碎片数量(SS)。

getFocus()
获取自己的集中值(猎人)。

getEnergy()
获取自己的能量(猎人/野德/武僧)。

getLunarPower()
获取自己的咕咕能量(咕咕)。

getChi()
获取自己的真气点数数量(武僧)。

getHolyPower()
获取自己的神圣能量(惩戒骑)。

getInsanity()
获取自己的狂乱值(暗牧)。

getMaelstorm()
获取自己的漩涡值(元素/增强萨满)。

getArcanePower()
获取自己的奥术能量(奥法)。

getFury()
获取自己的狂怒值(浩劫恶魔猎手)。

getPain()
获取自己的痛苦值(复仇恶魔猎手)。

getPosition(unit)
返回unit的x,y,z坐标。

getPositionBetweenPositions (X1, Y1, Z1, X2, Y2, Z2, d1)
获取距离xyz1和xyz2之间距离为d1的一个位置xyz。

getDistance(Unit1,Unit2)
di(u1,u2)
获取Unit1与Unit2之间的距离。

getCharges(spellID)
获取spellid的充能层数,如:2层cd的冲锋。

getSpellCD(SpellID)
获取spellid技能的冷却时间,包含公共冷却时间。

getRealCD(SpellID)
获取spellid技能的冷却时间,除去了公共冷却时间。

getNumInSpell(spellid)
获取spellid的说明内数字。

getSpellID(spellname)
获取spellname对应的法术id

getSpellCastingTime(spellname)
获取spellname对应的法术的施法时间。



天赋判断类
getTalent(Row,Column)
判断第Row行,第Column列的天赋是不是启用了,启用了返回true,否则返回false。

getPvpTalent(Row,Column)
getTalentp(Row,Column)
判断第Row行,第Column列的PVP天赋是不是启用了,启用了返回true,否则返回false。

buff/debuff相关判断
getBuffDuration(Unit,BuffID[,Source])
返回Unit 身上存在的由source释放的BuffID的总持续时间。

getBuffRemain(Unit,BuffID[,Source])
be(Unit,BuffID,Source)
返回Unit身上存在的由source释放的BuffID的剩余时间。不存在为0,永久buff为小于0的值。

getBuffStacks(unit,BuffID[,Source])
bs(unit,BuffID[,Source])
返回Unit身上存在的由source释放的BuffID的层数。不存在为0。

getDebuffDuration(Unit,DebuffID[,Source])
返回Unit身上存在的由source释放的DebuffID的总持续时间。

getDebuffRemain(Unit,DebuffID[,Source])
de(Unit,BuffID,Source)
返回Unit身上存在的由source释放的DebuffID的剩余时间。不存在为0,永久buff为小于0的值。

getDebuffStacks(unit,DebuffID[,Source])
ds(unit,BuffID[,Source])
返回Unit身上存在的由source释放的DebuffID的层数。不存在为0。

getNumInDebuff(Unit,debuffid[,source])
返回Unit身上存在的由source释放的DebuffID的文字信息内的所有数字,存在返回的table里,无数字为-1。

getDebuffCount(Unit,DebuffID,Source)
返回Unit身上存在的由source释放的DebuffID的个数。专门为某个dot数量特别多,但是经常垫底的职业设计。

--获取目标身上痛苦无常的个数
local tc = GH.getDebuffCount("target",30108,"player")
if tc >= 2 then
print("我有两层大无常啦!")
end
getLastSpell()
获取自己上一次释放法术的法术id。

getLastCSSpell()
获取自己上一次由脚本循环,释放法术的法术id。

getTargetLastSpell()
获取目标上一次释放法术的法术id。

getLastTarget()
获取上一次释放法术的unit。

getGCD()
getGcd()
获取自己的公共冷却时间间隔。

getGCDRemain()
获取自己的公共冷却时间冷却时间。

--判断是不是在公共冷却中
if getGCDRemain() < getGCD() then
print("我处在公共冷却中。")
end
getTimeToDie(unit)
获取目标的预估死亡时间。

getCombatTime()
获取自己进入战斗的时间。

getPetNum()
SS专用,判断当前激活的宠物类别,返回值为:1对应小鬼,2对应虚空行者,3对应狗,4对应魅魔,5对应恶魔卫士(恶魔专精),6对应永久末日守卫,7对应永久地狱火,0为无bb或者不能识别。

can类函数
一般用于能够类别判断。

判断类
canAttack(Unit1,Unit2)
ca(u1,u2)
如果Unit1可以攻击Unit2,返回true。

canInterrupt(Unit,Interrupt[,Time])
amac(Unit,Interrupt[,Time])
获得Unit正在施放的法术名称,Interrupt为非0,只返回可以打断的技能。Time为施法延迟,默认为0.4。

canCast(SpellID[,KnownSkip,MovementCheck])
如果可以释放SpellID的法术,返回true,参数意义同castSpell。

canPD(unit)
如果敌对目标身上有可供驱散的魔法buff,返回true。

is类函数
一般用于单体各种判断。

判断类
各种各样的判断,一般不死true就是false。

isLooting()
如果自己在拾取物品的状态,返回true。

isAlive(Unit)
如果Unit是活着的,返回true。

isPlayer(Unit)
如果Unit是玩家,返回true。

isEnemy(Unit)
如果Unit是敌对的,返回true。

isBoss(Unit)
如果Unit是副本Boss/假人Boss,返回true。

isDummy(Unit)
如果Unit是假人Boss,返回true。

isInCombat(Unit)
如果Unit在战斗状态,返回true。

isMoving(Unit)
如果Unit在移动,返回true。

isOnBus()
如果自己在坐骑上,返回true。

isLongTimeCCed(Unit)
如果Unit被群体控制技能控制,返回true。

isSlow(Unit)
如果Unit被减速返回true和剩余时间。仅pvp生效。

isStun(Unit)
如果Unit被昏迷返回true和剩余时间。仅pvp生效。

isLock(Unit)
如果Unit被定身返回true和剩余时间。仅pvp生效。

isUnitStunned(unit)
如果unit被昏迷返回true。所有情形都生效。

isUnitConfused(unit)
如果unit被迷惑/混乱返回true。所有情形都生效。

isUnitSilenced(unit)
如果unit被沉默返回true。所有情形都生效。

isUnitDisarmed(unit)
如果unit被缴械返回true。所有情形都生效。

isInvincible(Unit)
isInv(Unit)
如果目标免疫物理攻击返回true。仅pvp生效。

isMagicinv(Unit)
如果目标免疫魔法攻击返回true。仅pvp生效。

isHealer(unit)
如果目标是治疗职业,返回true。仅pvp生效。

isMelee(unit)
如果目标是近战职业,返回true。仅pvp生效。

isTotem(unit)
如果目标是图腾,返回true。

isTyping()
如果自己在输入状态(有活跃的聊天窗口),返回true。

buff表判断
isBuffed(UnitID,{BuffID}[,TimeLeft,Filter])/ib(UnitID,{BuffID}[,TimeLeft,Filter])
如果unit身上有{BuffID}内的某个buff超过Timeleft存在,返回true。Timeleft默认为0。

isDeBuffed(UnitID,{DebuffID},TimeLeft,Filter)/id(UnitID,{DebuffID},TimeLeft,Filter)
如果unit身上有{DebuffID}内的某个buff超过Timeleft存在,返回true。Timeleft默认为0。

治疗列表
ht表
所有队友存储在一个名为ht的表内,老版本GodHand/BadBoy的nNova结构也兼容。

用ht[i].unit 访问每个队友。

getLowestAllies([radius,filterfunc])
获取radius范围内,一个最低血量的队友(包括自己)和他的hp百分比。filterfunc是过滤函数。 radius默认为40码。 lowAllies,lowp = getLowestAllies()

getLowestOther([radius])
获取radius范围内,一个最低血量的其他队友(除去自己)和他的hp百分比。 radius默认为40码。 lowAllies,lowp = getLowestOther()

getLowestTank([radius])
获取radius范围内,一个最低血量的Tank玩家和他的hp百分比,一般情况这个都是当前T。 radius默认为40码。 lowT,tankp = getLowestTank()

--获取一个血最少的t和他的血量百分比,如果他血量低于50%就给他释放12345的技能
local mt,mtp = GH.getLowestTank([radius])
if mtp <= 50 then
  csi(mt,12345)
end
getFocusHeal([radius,tradius])
获取radius范围内,一个周围tradius范围内掉血最严重的目标、他们的失血总百分比和队友个数。radius默认为40,tradius默认为10。 focuslow,totalloss = getFocusHeal(40,10)

--获取一个血最少集中位置,如果他们血量一共丢失了300单位并且多于3个人,就给最中间的那个人释放12345的技能(治疗法术)
local focuslow,totalloss,count = GH.getFocusHeal(40,10)
if totalloss > 300 and count >= 3 then
  csi(focuslow,12345)
end
getMainTank()
getMT()
获取当前团队里抗boss的mt。仅在boss激活时生效。

getOffTank()
getFT()
获取当前团队里没有抗boss的ft。仅在boss激活时生效。

getLowestMelee([radius])
获取radius(默认40码)内的最低血量近战dps队友和他的hp百分比。

getLowestCaster([radius])
获取radius(默认40码)内的最低血量远程dps队友和他的hp百分比。

getLowestHealer([radius])
获取radius(默认40码)内的最低血量治疗队友和他的hp百分比。

高级函数
获取类
GetEnemy([center,]radius[,fliter])
返回center周围radius内的敌对目标表。center不写就是自己为中心。可以自行引入过滤函数filter。

getEnemy(radius)
返回自己radius周围的敌对目标表。例如:local tgtable = getEnemy(40)

getOneEnemy(radius,filterfunction)
返回自己radius周围且满足filterfunction(unit)返回true的一个敌对目标。

--获取一个filter函数是isPlayer(unit)的附近敌对目标
local thistarget = getOneEnemy(40,isPlayer)
getFriend(radius)
返回自己radius周围的友好目标表。

getEnemyAround(unit,radius)
返回unit周围radius周围的敌对目标表。

getNumProjectile(unit,radius)
返回radius范围内的目标是unit的飞行物体个数。

getGameObject(radius,filterfunc)
返回自己radius周围且满足filterfunction(unit)返回true的游戏模型物体table(佩佩,某某水晶,etc)。

getNumEnemies(Unit,Radius)
获取Unit周围Radius内的敌对目标个数,去掉了图腾的干扰,返回数量。一般用在aoe判断里。

getNumEnemiesp(Unit,Radius)
获取Unit周围Radius内的敌对玩家个数,去掉了图腾的干扰,返回数量。一般用在aoe判断里。 仅PVP生效。

shouldAoe([center])
等同于getNumEnemies(center,8) >= 3; 默认是自己为中心。

getNumFriendInFront([radius,angle,percent])
获取位于自己面前左右angle角度、半径radius的扇形范围的血量低于percent的数量、最低血量的队友目标。 默认radius=20,angle=60,percent=80。

    --获取自己面前20码,60度内扇形内的不足80%血的队友个数,和这个区域内的最少血队友
local numt ,lowtm = getNumFriendInFront(20,60,80)
敌对列表相关
使用以下函数前需要先调用makeEnemiesTable([radius])进行初始化,减少内存使用,提高效率。

makeEnemiesTable([radius])
mk([radius])
创建一个敌对表,内涵周围radius范围的所有敌对目标,按照血量百分比由小到大排序,方便进行选取。通过enemiesTable/et访问里边的每个unit。 例如:et[3].unit就是自己周围血量第三少的unit。

enemiesTable
getET()
getET() = {{name,isCC,facing,threat,unit,distance,hp},...,{name,isCC,facing,threat,unit,distance,hp}}

getHT()
返回团队框架。

local ht = GH.getHT()
for i = 1,#ht do
--挨个打印团队内每个玩家的名字
print(UnitName(ht[i].unit))
end
AutoTaunt(spellid,radius)
自动用spellid的嘲讽技能,嘲讽自己radius范围内的小怪。

WiseAoe(spellid,maxcount,radius,nearbyradius)
只能aoe施法最大化,spellid是技能id,maxcount是满足周边的目标个数,radius是技能的范围,nearbyradius是周边玩家的个数。 仅PVP生效。

getEnemyHealer(radius)
返回一个附近radius范围内敌对治疗的表。 仅PVP生效。

getEnemyMelee(radius)
返回一个附近radius范围内敌对近战的表。 仅PVP生效。

getEnemiesAngle(radius,angle)
返回自己面前angel角度内,radius范围内的扇形区域敌对目标个数。

getEnemiesAnglep(radius,angle)
返回自己面前angel角度内,radius范围内的扇形区域敌对玩家个数。 仅PVP生效。

getNumTargeting(unit,radius)
返回radius范围内,目标是unit的敌对玩家个数。 仅PVP生效。

强化API判断
UnitTarget(unit)
返回unit的目标。 (unit类型)

UnitCreator(unit)
返回unit的创造者。 (unit类型)

UnitBoundingRadius(unit)
返回unit的模型半径。

UnitCombatReach(unit)
返回unit的战斗半径。

UnitHeight(unit)
返回unit的模型高度。

ObjectPointer(unit)
获取unit的unit类型指针/unitid。

面对类
FaceUnit(unit)
面对unit。

getFacing(Unit1,Unit2,Degrees)
如果Unit1在Unit2面前的左右Degrees角度内,返回true。

移动类
MoveTo(pos)
自己移动到位置pos。

moveAlongPositions(ptable)
按照ptable的顺序依次移动到各个位置。

>
local list = {{100,100,1},{150,100,1},{200,100,1}}
--于list内依次移动到位置
moveAlongPositions(list)
petMoveTo(pos)
宠物移动到位置pos。

其他类函数
自动驱散类
MagicDispel(spellid)
用spellid单体技能驱散团队成员身上的魔法。

DiseaseDispel(spellid)
用spellid单体技能驱散团队成员身上的疾病。

CurseDispel(spellid)
用spellid单体技能驱散团队成员身上的诅咒。

PoisonDispel(spellid)
用spellid单体技能驱散团队成员身上的中毒。

has类函数
hasPet()
如果玩家有宠物,返回true。

hasEquiped(itemid)
如果玩家身上装备有itemid的装备,返回true。

hasBurst([unit])
如果unit身上有嗜血类效果,返回true。 unit默认是玩家自己。

hasItem(itemid)
如果玩家背包内有itemid的物品,返回true,和物品个数。

local hasi,icount = hasItem(12345)
--hasi为true表示包里有12345号物品,icount是他的个数,不存在为0.
hasPerk(spellID)
当前神器中存在spellID的特质返回true。不是PowerID是spellID,6位数。由于效率问题,升级/切天赋需要重载生效。

hasItemEnchant(itemID)
如果自己的武器有itemID的附魔效果,返回true。

hasEmptySlots()
返回自己包裹的空格数量。

getNumEmptySlots()
获取自己包裹内的空格总数。

hasCasted(Unit,Interrupt)
获得Unit正在施放的法术名称和已经读条的时间,Interrupt为非0,只返回可以打断的技能。。

hasThreat([unit,playerUnit])
返回对于unit,playerunit的仇恨值。 unit默认为"target" playerunit默认为自己。

AntiAfk()
重置afk计时器,不会因为挂机掉线。

useItem(itemID)
使用itemID的物品。现在支持slotid(小于19)。

--使用第一个装备位置的饰品
if GH.useItem(13) then
return
end
--使用背包里的123号物品
  if GH.useItem(123) then
return
end
destroyItem(itemID)
摧毁itemID的物品。

autoCastCursor()
自动将所有未使用castGround/cg的aoe技能丢在鼠标位置。

goFish()
自动钓鱼。

getLoot([radius])
自动拾取radius距离内的尸体物品,默认是20码。

showTreasure(radius)
显示radius范围内的所有宝箱/矿物/草药名称。

sellGreys()
卖掉包里的所有灰色装备。

getMyStatue([radius])
获取一个radius范围内的武僧T的玄牛雕像unit指针,radius默认40码,只对自己的雕像有作用。

    --对存在的我的玄牛雕像丢嘲讽
local mst = GH.getMyStatue()
if UnitExists(mst) then
GH.cs(mst,115546)
end
isInGame()
如果在游戏内并且没有读蓝条,返回true。

兼容类
getNumTempPet()
获取激活的临时宠物/图腾的个数。用于恶魔ss的临时宠物计数。

setV(Name,Value)
设置一个名称为Name,值为Value的全局变量。

getV(Name)
获取之前函数setV(Name,Value)中设定好的Name的值。

isInTime(str,time)
str自定义时间标签,在time之后返回true,再过一小段时间重置。

--delay在两秒后返回true,可用于条件中,支持多标签。
local delay1 = GH.isInTime("stop1",2)
--delay2在5秒后返回true
local delay2 = GH.isInTime("stop2",5)
getDBMBarTimeRemain(barname)
获取DBM中名称为barname的计时条的剩余时间。不存在返回-1.

isTellMeWhenIconShown(groupN,iconN)
获取TMW中groupN组,iconN个图标的情况。发光返回true。

castOvale(num)
释放Ovale插件内第num个图标内的技能。

castDecursive(Break)
一键驱散自动施法,Break为true会中断当前读条释放驱散法术。

getDisorientCD(unit)
获取Gladius中,unit对应的混乱/恐惧效果的递减时间。小于等于0为可以满控。仅限存在Gladius框体。

getStunCD(unit)
获取Gladius中,unit对应的昏迷效果的递减时间。小于等于0为可以满控。仅限存在Gladius框体。

getRootCD(unit)
获取Gladius中,unit对应的定身效果的递减时间。小于等于0为可以满控。仅限存在Gladius框体。

getIncapacitateCD(unit)
获取Gladius中,unit对应的变形效果的递减时间。小于等于0为可以满控。仅限存在Gladius框体。

getSilenceCD(unit)
获取Gladius中,unit对应的沉默效果的递减时间。小于等于0为可以满控。仅限存在Gladius框体。

getNumOmniCD()
返回OmniBar中,周围目标pvp打断/昏迷技能的cd个数。
Omnibar.jpeg

readFile(filename)
同titan接口,返回读取到的filename的文本内容

writeFile(fileName, fileContent)
同titan接口,直接清空filename然后写入fileContent

appendFile(fileName, fileContent)
同titan接口,用Append方式写入filename的文本内容fileContent

脚本写作提示
快速教学
这里会给出一些脚本写作的简单方法。

最简单的施法
GH.csi("target",123)
这样就会对目标释放技能id为123的技能。

优先级下的施法
GH.csi("target",1)

GH.csi("target",2)

GH.csi("target",3)
如果技能优先级是1 > 2 > 3,这样写就会按照优先1然后2最后3的顺序,分别对目标卡cd丢1,2,3技能了。

AOE技能
GH.mk(40); --初始化敌对列表,使得计数函数工作。

if GH.getNumEnemies("target",8)>=4 then

  GH.cg("target",1234,30)

end
这样写就会对30码范围内的目标丢1234的绿圈技能了。

进阶技巧
自己存在某buff才丢某个技能
if GH.be("player",某buffid) > 0 then

GH.csi("target",某个技能id)

end
目标有自己的某个debuff,我才对他丢某个技能
if GH.de("target",某debuffid,"player") > 0 then

GH.csi("target",某个技能id)

end
循环简介
local tl = getEnemy(40)
for i = 1,#tl do
    local t1 = tl[i]
    if GH.di(t1,"player") < 6 and GH.getHP(t1)< 20 then
    csi(t1,1234)
    end
end
以上可以实现对周围40码范围内的少血20%目标丢1234技能。

脚本结构优化
lua效率优化参考 lua代码优化参考2

使用局部变量local
避免将函数体定义作为其他函数的参数来使用
避免使用table.insert()
常见问题Q&A
我写了个读条技能老是要连着释放两次才执行下一个这怎么解决
--判断上一个法术是不是同一个法术,进行排除
local lastspell = GH.getLastSpell()
if lastspell~= 1234 and GH.de("target",某某debufid,"player") < 3 then
cs("target",1234)
end
如何使用高级函数里的filter?
--获取进战斗的敌对unit列表
local inctable = GH.getEnemy(40,GH.isInCombat)
如何获取最密集掉血的治疗目标?
--获取最密集掉血的治疗目标和总失血百分比最小阈值,周围掉血目标个数
local ftm,totalloss,count = GH.getFocusHeal(40,10)
if count >= 3 and totalloss > 200 then
GH.cs(ftm,治疗群加id)
end
如何插入技能?
首先从界面右侧“按键绑定”里,“新增按键绑定”,会多出一个Binding1变量。这个变量对应的快捷键也在里边设置好。

--按下Binding1的快捷键释放123456
if Binding1 then
csi("target",123456)
end
某个技能需要延迟3秒才接受下次施法?
--首先定义一个计时的临时变量
if _t==nil then   --只有t不存在时才允许赋值运算
    _t=GetTime();
end

--技能释放环节
if  dot持续时间判定这里省略 and GetTime()>= _t then  --这里t还是刚才的初始时间
        if castSpell("target",xxx读条dot技能法术id,false,true,true) then
            _t=GetTime()+延长时间;  --这里t已经变成了现在时间+自行赋值的延长值
            return;
        end
end
起手式写法?
--释放你安排好顺序的技能1,2,3,4,5

if GH.castSpell("target",1,false,false) then
setgo = 1
return;
end
if setgo == 1 then
if GH.castSpell("target",2,false,false) then
setgo = 2
return
end
end
--...类推
--必须是共享同gcd的技能,如果是怒火聚焦这种单独计算gcd的技能,要单独写在外边。
要判定A,B,C,D四个(更多的也可以)增益buff2个以上触发丢xxx技能又要怎么办呢?
local a,b,c,d=0,0,0,0
--然后你需要找出ABCD对应的buffid对应abcd条件如下
if UnitBuffID("player",A的法术id) then  --这里用getBuffRemain("player",a的id) > 3 也可以,适用于对爆发技能释放掌控时机更苛刻要求的人
  a=1
end
if UnitBuffID("player",B的法术id) then
  b=1

end
if UnitBuffID("player",C的法术id) then
  c=1

end


if UnitBuffID("player",D的法术id) then
   d=1

end

--以上buff如果存在对应的变量就会被赋值为1.这时重要的一步如下
if a+b+c+d>=2 then  
  if castSpell("player",触发时候放的技能id,true,false) then
        return;   
    end
end
脚本实例
惩戒骑简单输出脚本
local zj = "player" --自己的引用
local tg = "target" --目标的引用
local fz = "focus" --焦点目标的引用
local cs = GH.castSpell;  --施法函数的引用
local de = GH.getDebuffRemain --debuff剩余时间
local be = GH.getBuffRemain --buff剩余时间
local ho = GH.getHolyPower() --圣能个数
local tgstg = GH.UnitTarget; --目标的目标
local di = GH.getDistance --距离函数
local insi = GH.InLineOfSight --视野判断 可以无视
local mk = GH.makeEnemiesTable --创建敌对框体函数的引用
local am = GH.canInterrupt; --是否在读条
local et = GH.enemiesTable; --敌对单位表的引用
local nNova = GH.ht; --治疗单位表的引用
----------------------------------------------------------
mk(40);  --创建敌对框体
GH.AnitAfk(); --重置afk计时器,防止掉线
GH.goFish();     --钓鱼函数 不是钓鱼环境请删掉或注解掉
local slow,slowtime = GH.isSlow(zj) --自己减速与否,时间的判断
if GH.isInCombat(zj) and GH.canAttack(tg,zj) and not GH.isInv(tg) then
    if not GH.isSlow(tg) and di(tg,zj) > 12 and GH.isPlayer(tg) then--如果目标没有被减速并且目标是玩家 就给他上减速
        if cs(tg,183218,false,false) then
            return
        end
    end
    --自由
    if GH.isLock(zj) or (slowtime and slowtime > 4 )then
        if cs(zj,1044) then
            return
        end
    end

    --打断
    if am(tg,1) then
        if cs(tg,62124,false,false) then
            return;
        end
        end
    --审判
        if cs(tg,20271,false,false) then
            return;
        end
    if ho >= 3 then
        --tc
        if cs(tg,213757,false,false) then
            return;
        end
    end
    -- 五豆的情况
    if ho == 5 then
        if GH.getHP(zj) < 50 then  --血量低于50%
        --奶打
            if cs(tg,215661,false,false) then
                return;
            end

        else
            --裁决
            if cs(tg,85256,false,false) then
                return;
            end
        end
    end
    if ho < 5 then

        if ho < 3 then
            --愤怒之剑
            if cs(tg,184575,false,false) then
                return;
            end

        end
        --十字军打击
        if cs(tg,35395,false,false) then
            return;
        end
        -----
        --裁决填充
        if cs(tg,85256,false,false) then
            return;
        end

    end
end
本脚本可以实现一些简单的卡cd单体输出,日常钓鱼等等、仅供测试。自行删减需要的部分。

附录
更新日志
1.0正式版
2017-1-25 治疗引擎优化,加入getMT(),getFT(),getLowest三个职业判断函数。

2017-1-24 加入getPetNum()、getNumOmniCD()、isUnitStunned(unit)等等函数。检测函数支持7.15新buffid。

2017-1-17 getNumInSpell(spellid) 现在支持小数格式的数字了。

2017-1-10 新增getTargetLastSpell().

2017-1-4 新增isInGame(),根据作者 佳阑人散 反馈,修复几个老的治疗函数错误。

2016-12-21 新增moveAlongPositions(list)

2016-12-17 支持Gladius递减判断。

2016-12-12 useItem支持itemid,完善了部分判断函数。

2016-12-04 修复了几个小bug,完善了距离判断。

0.8公测版V22
2016-11-14 加入getNumFriendInFront([radius,angle,percent])。加入载入版本号提示。修复Ovale插件支持,提高部分函数效率。

0.8公测版V11
2016-11-7 加入getDebuffCount。

0.8公测版V2
2016-11-5 修复诸多小问题,完善治疗函数。引入坦克判断。

公测版V18
2016-9-28 修复castForm(num)。

公测版V28
2016-10-10 修复自动拾取,更名为getLoot()。 修复isInPvP(),判断是否在战场/竞技场内。

公测版V18
2016-9-27 修复诸多测试中反馈的问题,解决掉帧问题。

V24
2016-9-19 修复目标的目标相关的函数问题。

V23
2016-9-13 修复若干小bug,整合部分函数。

v12
2016-9-11 修复诸多LoS的bug。

v5
2016-9-7 补充了遗漏的isBoss判断。

v4
2016-9-7 修改海拉释这种空中/水中boss,对它放法术卡技能卡距离的bug。

Lua5.1手册
lua 5.1 手册

插件中剔除的函数
Keyin(Key/asciinum)
由于循环脚本可以自定义插入技能,去掉了原有插件里的按键判断。

鸣谢
插件启发
l0l1dk for Firehack,CuteOne for BadBoy.

Titan支持
Titan制作团队.

个人感谢
稻草

Etox

有时右逝

Seven

你看的见我么

萨隆尼

墨水

Luacn.net 论坛的大力支持.


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

小黑屋|手机版|Archiver|LUACN论坛

GMT+8, 2024-4-20 10:04 PM , Processed in 0.039244 second(s), 14 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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