1.12魔兽怀旧服宏命令基础教学

来源:互联网 编辑:wan玩得好手游小编更新:2024-11-08 05:54:20 人气:


  

Lua基础语法
切入正题,本节开始正式讨论Lua语法。以宏常用的数据类型、变量、循环、流控制运算符几个点分别讲解。



数据类型
常见宏命令中的数据类型:
数据类型 描述
nil 仅此一值,表示无效值(在条件表达式中相当于false)。
boolean 包含两个值:false和true,非正即负。
number 表示双精度类型的实浮点数,简单理解数字。如:1、2、3、4等。
string 字符串,有双引号或单引号表示。如:“魔兽世界”,’魔兽争霸’。
function 函数,这里即WOW-API。如:IsUsableAction()。
还有一种数据类型,即:数组,是值相同数据类型的元素按一定顺序排列的集合,可以是一维数组和多维数组。如:{“魔兽世界”,“魔兽争霸”},表示2个字符串类型的数组。
另关于字符串的详细定义使用及转义字符,请自行搜索学习。

变量
变量在使用前,必须在代码中进行声明,即创建该变量。编译程序执行代码之前编译器需要知道如何给语句变量开辟存储区,用于存储变量的值。
Lua 变量有三种类型:全局变量、局部变量、表中的域。Lua 中的变量全是全局变量,那怕是语句块或是函数里,除非用 local 显式声明为局部变量。
局部变量的作用域为从声明位置开始到所在语句块结束。变量的默认值均为 nil。
而在宏命令中,最常见是局部变量,开头以local定义,后面一串即为所声明的变量与其赋值。
上面代码中,分别定义5个局部变量。其中a,b分别为2个数组,a表示数字类型的数组;b表示字符串类型数组。C表示字符串。i和j则为赋值,即默认值nil。

循环
一组被重复执行的语句称之为循环体,能否继续重复,决定循环的终止条件。
循环结构是在一定条件下反复执行某段程序的流程结构,被反复执行的程序被称为循环体。循环语句是由循环体及循环的终止条件两部分组成的。

常见循环类型
循环类型 描述
while 在条件为 true 时,让程序重复地执行某些语句。执行语句前会先检查条件是否为 true
for 重复执行指定语句,重复次数可在 for 语句中控制。

循环控制
循环控制语句用于控制程序的流程, 以实现程序的各种结构方式。
控制语句 描述
break 退出当前循环或语句,并开始脚本执行紧接着的语句。

语法实例:
for i=$初始次数,$循环次数,$增长次数 do

end


 流控制
流程控制语句通过程序设定一个或多个条件语句来设定。在条件为 true 时执行指定程序代码,在条件为 false 时执行其他指定代码。

常见流程控制语句
语句 表述
if if 语句 由一个布尔表达式作为条件判断,其后紧跟其他语句组成。
if……else if 语句 可以与 else 语句搭配使用, 在 if 条件表达式为 false 时执行 else 语句代码

语法实例,结合循环控制语句与运算符:


运算符
运算符,大家并不陌生。不同语言之间大同小异。主要分4类:算术运算符、关系运算符、逻辑运算符、其他运算符。
操作运算符:
运算符 描述 实例
+ 加
- 减、负号
* 乘
/ 除
% 取余 11%10=1
^ 乘幂 10^2=100

关系运算符:
运算符 描述 实例
== 等于,检测两个值是否相等,相等返回 true,否则返回 false 10==20为false
~= 不等于,检测两个值是否相等,相等返回 false,否则返回 true 10~=20为true
> 大于,如果左边的值大于右边的值,返回 true,否则返回 false 10>20为false

>= 大于等于,如果左边的值大于等于右边的值,返回 true,否则返回 false 10>=20为false


逻辑运算符:
运算符 描述 实例
and 逻辑与操作符。 若 A 为 false,则返回 A,否则返回 B。 True and false 为false
or 逻辑或操作符。 若 A 为 true,则返回 A,否则返回 B。 True or false 为true
not 逻辑非操作符。与逻辑运算结果相反,如果条件为 true,逻辑非为 false。 Not(True and false) 为false

其他运算符
运算符 描述 实例
.. 连接两个字符串 a..b ,其中 a 为 "Hello " , b 为 "World", 输出结果为 "Hello World"。
# 一元运算符,返回字符串长度 #"Hello" 返回 5

运算符优先级
^
not - (unary)
* /
+ -
..
= ~= ==
and
or
从高到低顺序。


 函数
函数,绝大多数指的是玻璃渣给wow提供的API接口。因能力有限,本教程仅提供下面几种API常用接口,并简单描述其所需传参及返回值:动作条(Action)、Buff/Debuff、宠物技能(Pet)、法术(Spell)、单位(Unit)、目标(Targeting)清单.
另外有些函数前有“Protected”标识,其标识受庇护,主要定义为API或插件函数不可调用。
先将一些传参定义解释下,便于更好的理解相关的API含义。
动作条
slots即动作条id。[/b]从1.11开始,魔兽世界允许120个动作条ID,编号从1-120。 ID 1-72用于六个默认栏(见下面的按钮范围)。某些特殊姿态使用ID 73-120。
默认动作条id:
主动作条 1:1 - 12
主动作条 2:13 - 24
右动作条 1:25 - 36
右动作条 2:37 - 48
右下动作条:49 - 60
左下动作条:61 - 72

战士姿态动作条
战斗姿态动作条:73 - 84
防御姿态动作条:85 - 96
狂暴姿态动作条:97 - 108

德鲁伊姿态动作条
猫形态:73 - 84
潜行形态:85 - 96
熊形态:97 - 108
咕咕卖萌:109 - 120

盗贼姿态动作条
潜行形态:73 - 84

牧师姿态动作条
阴影形态:73 - 84

目标拥有的动作条
ActionBar page 1 Possess: slots 121-132

姿态索引
在CastShapeshiftForm函数中使用,定义不同职业的姿态或光环。
战士:1战斗姿态、2防御姿态、3狂暴姿态。
德鲁伊:1熊形态、2海狗形态、3猫形态、4旅行形态、5咕咕形态、6树形态。
盗贼:1潜行状态。
神圣牧师:
圣骑士:1牺牲光环、2惩戒光环、3虔诚光环、4阴影抗光环、5冰抗光环、6火抗光环、7十字军光环。


人物装备界面定义
人物界面解释 索引名称(中文参数暂无) 索引编号
弹药栏 AmmoSlot(大灾变移除) 0
头部 HeadSlot 1
项链 NeckSlot 2
肩膀 ShoulderSlot 3
衬衫 ShirtSlot 4
胸甲 ChestSlot 5
腰带 WaistSlot 6
腿部 LegsSlot 7
脚 FeetSlot 8
护腕 WristSlot 9
手套 HandsSlot 10
戒指0(不知道为什么从0开始) Finger0Slot 11
戒指1 Finger1Slot 12
饰品0(不知道为什么从0开始) Trinket0Slot 13
饰品1(不知道为什么从0开始) Trinket1Slot 14
背部 BackSlot 15
主手武器 MainHandSlot 16
副手武器 SecondaryHandSlot 17
远程武器(投掷武器)/魔杖 RangedSlot(大灾变移除) 18
战袍 TabardSlot 19
第一个背包(背包栏最右位,通常为初始背包) Bag0Slot 20
第二个背包 Bag1Slot 21
第三个背包 Bag2Slot 22
第四个背包(背包栏最左位) Bag3Slot 23
注:背包栏编号和后续背包编号易混淆,后续再背包的函数定义中详细解释。


动作条
ActionHasRange(slot)
传参:动作条id,单数字或数字数组。
返回:布尔类型“是“或”否”
作用:确定指定的操作是否是范围限制。
备注:

GetActionCooldown(slot)
传参:动作条id,单数字或数字数组。
返回:返回指定动作栏冷却时间。
作用:判断动作条中技能是否已冷却(等于0)。
备注:

IsActionInRange(slot,[unit])
传参:第一位参数为动作条id,单数字或数字数组;第二位参数为单位。
返回:1 =是,0 =否,nil =不适用。
作用:判断动作条技能是否在使用范围内。
备注:

IsAttackAction(slot)
传参:动作条id,单数字或数字数组。
返回:是返回1,否返回0,nil为不适用。
作用:判断动作条技能是不是攻击技能。
备注:

IsUsableAction(slot)
传参:动作条id,单数字或数字数组。
返回:1或0。1表示可用,0表示不可用或没有足够蓝。
作用:判断动作条中技能是否可用。
备注:

PetHasActionBar()
传参: 
返回: 
作用:确定玩家是否拥有带有动作栏的宠物。
备注:

StopAttack()
传参: 
返回: 
作用:如果当前处于攻击状态,则关闭自动攻击。
备注:

IsCurrentAction(actionSlot)
传参:动作条id
返回:1标志正在释放,否则nil。
作用:确认某个动作条正在运行。
备注:


增益Buff/减益Debuff 
UnitAura("unit", index or "buffName" [,filter]) - Returns information about a buff/debuff of a certain unit. 返回关于某个单位的buff / debuff的信息。
传参:第一位参数为目标(字符串类型),如“player”或“target” ;第二位参数代表需要游历的数(数字类型),最大40;第三位为过滤条件,这个可以是“HELPFUL”,“HARMFUL”,“PLAYER”,“RAID”,“CANCELABLE”,“NOT_CANCELABLE”中的任何一个。也可以指定由|分隔的多个过滤器或空格字符链接多个过滤器(例如“有益的RAID”或“有益的RAID”==有用的增益,你可以在你的RAID上施放)。默认情况下UnitAura具有“HELPFUL”作为一个隐式过滤器你不能同时返回有用和有害的。对于UnitBuff / UnitDebuff,“HELPFUL”或“HARMFUL”都没有意义,将被忽略。
返回:返回的类型很多,如“技能名”、“法术效果等级”、“建议效果次数”、“持续时间”、“debuff”类型等
作用:查询单位增益和减益情况。

UnitBuff("unit", index or "buffName" [,castable]) 
传参:同上。
返回:同上。
作用:同上。
备注:

UnitDebuff("unit", index or "buffName" [,removable])
传参:同上。多一个若玩家可移除debuff返回1。
返回:同上。
作用:同上。
备注:


宠物
PROTECTED CastPetAction(index,[unitid]) 
传参:宠物技能id索引值,unitid表示可选的宠物id
返回:
作用:施放相应的宠物技能。
备注:《U r not perpare》版本可用。

GetPetActionCooldown(index) 
传参:与玩家冷却函数一致。
返回:与玩家冷却函数一致。
作用:在指定的宠物动作条插槽中返回宠物动作的冷却时间信息。
备注:《U r not perpare》版本可用。

PROTECTED PetAggressiveMode()
传参: 
返回: 
作用:设置你的宠物为“进攻”模式。
备注:《U r not perpare》版本可用。

PROTECTED PetAttack()
传参: 
返回: 
作用: 使你的宝宝攻击目标。
备注:

IsPetAttackActive() - Returns true if the pet is currently attacking. 如果宠物目前正在攻击,则返回true。
传参: 
返回:攻击状态true,否则false
作用:判断宠物当前是否正在攻击。
备注:

PetStopAttack() - Stop the attack of the pet. 停止宠物的攻击。
传参: 
返回: 
作用: 使你的宝宝停止攻击。
备注: 

PROTECTED PetDefensiveMode()
传参: 
返回: 
作用:设置你的宠物为“防御”模式。
备注:《U r not perpare》版本可用。

PROTECTED PetPassiveMode()
传参:
返回:
作用:设置你的宠物为“被动”模式。
备注:《U r not perpare》版本可用。


法术技能
“spellID”是技能书中的一个索引id。从上到下依次递增,然后从左到右,然后是类别之间。 当玩家学习新的“技能”和“专业”时,法术ID将会改变。

GetShapeshiftFormInfo(index) 
传参:姿态值,参见姿态定义。
返回:根据参数按顺序返回:
icon(图标位置和名称)——用于该按钮的图标的位置和名称
name(名称)——返回“姿态或光环”的名称(可选)
active(激活状态)——如果此“姿态或光环”当前处于活动状态,则返回1,否则返回0(可选)。
castable(可释放)——确定如果可释放。
spellId(法术ID)——法术/光环的id。
上面5个返回不同的结果,具体依据其表述作用。
作用:检索当前职业姿态或光环信息。
备注:见下图例子


PROTECTED CastShapeshiftForm(index)
传参:姿态参数。
返回:
作用:切换职业姿态。
备注:《U r not perpare》版本可用。

PROTECTED CastSpell(spellID, "bookType") 
传参:spellID即法术ID。bookType技能书类型。
返回:
作用:制定某一类型技能数下的某一法术释放。
备注:《U r not perpare》版本可用。

PROTECTED CastSpellByName("name"[, onSelf])
传参:法术名称,不加等级默认最高等级;第2位定义目标,自己、友方、敌方;
返回:
作用:对定义目标释放制定法术。
备注:文档标注TBC可用,但实测1.12兼容。

GetSpellBookItemInfo(spellID, "bookType")
传参:可以单传参法术名(字符串类型),也可以是双传参:技能书索引号,目标;
返回:法术类型(字符串类型,已知值:“SPELL”,“PETACTION”,“FUTURESPELL”,“FLYOUT”);或者法术id。无效则为nil。
作用:返回玩家法术书中法术类型和法术ID。
备注:

GetSpellBookItemName(spellID, "bookType")
传参:可以单传参法术id(与上一条区别,数字类型),也可以是双传参:技能书索引号,目标;
返回:法术类型(字符串类型,已知值:“SPELL”,“PETACTION”,“FUTURESPELL”,“FLYOUT”);或者法术id。无效则为nil。
作用:返回玩家法术书中的法术名称和法术等级。
备注:

GetSpellCooldown(spellName | spellID, "bookType")
传参:可以是字符串类型的“法术名”;可以是数字类型的“法术id”或“技能栏编号”;也可以是法术类型,支持数组传参。
返回:数字类型“开始时间(以秒为单位)”或“持续时间”; 0则表示法术可用;
作用:判断法术是否可用。
备注:

GetTotemInfo(slot)
传参:数字类型的图腾编号:火=1、土=2、水=3、气=4。
返回:是否包中有图腾试剂;当前激活的图腾名称;图腾开始时间;图腾持续时间;
作用:判断关于图腾的信息。
备注:

IsAttackSpell(spell)
传参:法术名称
返回:1为攻击法术
作用:判断是否是攻击法术
备注:

IsPassiveSpell(spellID, "bookType")
传参:法术书索引号,从1开始递增;法术书类型。
返回:1位被动,否则为0
作用:判断法术书中的技能是否是被动技能。
备注:

IsSpellInRange("spellName", [unit]) 
传参:法术id;法术类型;法术名;目标;
返回:0不再射程内;1射程内;nil为无效目标;
作用:判断目标是否有效,且是否在射程内。
备注:

IsUsableSpell(spell)
传参:法术id;法术类型;法术名;目标;
返回:1为可用;否则为0,法术未学、无法力、未达到条件等均为0;布尔值,法力值过低无法释放为1,否则为0.
作用:法术是否可用。
备注:

UI QueryCastSequence("sequence")
传参:字符串类型,法术、物品的id或索引号。如:reset=1 技能1,技能2,技能3;
返回:
作用:按限定时间,并顺序释放制定法术。等同于CastSequence。
备注:

SpellHasRange()
传参:法术id,法术名。
返回:
作用:判断目标是否在法术范围内。
备注:未验证。

SpellIsTargeting()
传参:
返回:布尔值,如果法术已对指定目标使用,为true,否则为false。
作用:判断技能是否已对制定目标使用。
备注:TBC2.0.1以后不可用。

PROTECTED SpellStopCasting()
传参:
返回:nil未不操作;1表示停止施法。
作用:停止当前施法。
备注:不适用有施法时间技能。


Unit单位
这些是对一个或多个目标单位起作用的功能。 单位由UnitIds标识。

PROTECTED AssistUnit("unit")
传参:目标,即:“player”或“target”。可以使用任何定义的UnitId值。也可以使用AssistUnit(pet)来协助宠物。
返回:nil
作用:指示你的角色帮忙指定的单位。
备注:

PROTECTED FocusUnit("unit")
传参:
返回:
作用:设置目标为焦点。
备注:已关闭,但可/RunMacroText("/focus")仍可使用。

PROTECTED ClearFocus()消除您可能设置的任何焦点。
传参:
返回:
作用:消除您可能设置的任何焦点。
备注:已关闭,但/ clearfocus仍然有效。

SpellCanTargetUnit("unit")
传参:目标,即:“player”或“target”。
返回:布尔值
作用:判断法术是否可以对目标释放。可以返回true,否则为否。
备注:同时监控距离,超出则无效。


PROTECTED SpellTargetUnit("unit") - Casts the spell awaiting target selection on the specified unit. 在指定单位施放等待目标选择的法术。
传参:目标,即:“player”或“target”。
返回:
作用:
备注:


PROTECTED TargetUnit("unit")
传参:目标,即:“player”或“target”。
返回:nil
作用:选择指定的单位作为当前目标。
备注:

UnitCanAttack("unit", "otherUnit")
传参:第一个单位unit为发起攻击方,第二个单位otherUnit为被攻击方。
返回:布尔值true为可攻击,否则为false。
作用:判断2单位之间能否攻击。
备注:

UnitCanCooperate("unit", "otherUnit")
传参:第一个单位unit为发起攻击方,第二个单位otherUnit为被攻击方。
返回:布尔值true为可合作,否则为false。
作用:判断2单位是否可合作。
备注:

UnitClass("unit")
传参:目标,即:“player”或“target”。
返回:根据客户端语言返回职业名称。或者发挥职业索引值(数字与含义):0空、1战士、2圣骑、3猎人、4盗贼、5牧师、6死骑、7萨满、8法师、9术士、10武僧、11德鲁伊、12恶魔猎手。
作用:判断指定目标职业。
备注:请根据版本判断。

UnitClassification("unit") 
传参:目标,即:“player”或“target”。
返回:字符串,世界boss、稀有精英、精英、稀有、普通等
作用:判断指定目标性质。
备注:

UnitCreatureFamily("unit") 
传参:目标,即:“player”或“target”。
返回:字符串,如熊、狼、蜘蛛等。
作用:判断目标类型。
备注:

UnitCreatureType("unit")
传参:目标,即:“player”或“target”。
返回:字符串,如人形、龙、野兽等。
作用:判断目标属性。
备注:

UnitExists("unit")
传参:目标,即:“player”或“target”。
返回:布尔类型,返回1则存在;否则为nil
作用:判断目标是否存在。
备注:

UnitHealth("unit")
传参:目标,即:“player”或“target”。
返回:数字类型,制定目标当前生命值;若为0则表示不存在。
作用:返回指定单位的当前生命值(以分为单位)。
备注:

UnitHealthMax("unit") 
传参:目标,即:“player”或“target”。
返回:数字类型,制定目标最大生命值;若为0则表示不存在。
作用:返回指定单位的最大生命值(以分为单位)。
备注:

UnitIsDead("unit")
传参:目标,即:“player”或“target”。
返回:布尔值,单位死亡返回1;否则为0
作用:判断目标是否死亡。
备注:与UnitIsDeadOrGhost("unit")类似。

UnitIsEnemy("unit", "otherUnit")
传参:第一位制定目标,第二位进行比较单位,如(player,target)比较玩家与目标是否敌对。
返回:布尔值。
作用:判断指定的单位是否是敌人,是返回true;否返回false。
备注:

UnitMana("unit")
传参:目标,即:“player”或“target”。
返回:当前目标当前法力/能量/愤怒值。
作用:判断目标当前法力/能量/愤怒值。
备注:3.0.2版本后弃用,由UnitPower取代

UnitManaMax("unit")
传参:目标,即:“player”或“target”。
返回:当前目标最大法力/能量/愤怒值。
作用:判断目标最大法力/能量/愤怒值。
备注:3.0.2版本后弃用,由UnitPowerMax取代

UnitSex("unit") - Returns a code indicating the gender of the specified unit, if known. (1=unknown, 2=male, 3=female) (updated 1.11) 如果已知,则返回指示指定单位的性别的代码。 (1 =未知,2 =男,3 =女)(更新1.11)
传参:目标,即:“player”或“target”。
返回:
作用:
备注:


Targeting 针对目标 
PROTECTED AssistUnit("unit")
传参:目标。
返回:nil
作用:协助制定单位或目标。
备注:

PROTECTED AttackTarget()
传参:
返回:
作用:不在近战攻击状态则自动攻击;否则停止攻击。
备注:猎人自动远程攻击使用“/startattack”。

PROTECTED ClearTarget()
传参:
返回:
作用:取消当前选定的目标。
备注:

PROTECTED TargetLastEnemy()
传参:
返回:
作用:选择最后一个目标敌人作为当前目标。
备注:

PROTECTED TargetLastTarget()
传参:
返回:
作用:选择最后一个目标作为当前目标。
备注:

PROTECTED TargetNearestEnemy([reverseFlag]) 
传参:
返回:
作用:选择最近的敌人作为当前目标。
备注:可理解为“tab”键。

PROTECTED TargetNearestEnemyPlayer([reverseFlag]) 
传参:
返回:
作用:选择最近的敌方玩家作为当前目标。
备注:

PROTECTED TargetNearestFriend([reverseFlag])
传参:
返回:
作用:选择最近的友军单位作为当前目标。
备注:

PROTECTED TargetNearestFriendPlayer([reverseFlag]) 
传参:
返回:
作用:选择最近的友方玩家作为当前目标。
备注:

PROTECTED TargetNearestPartyMember()
传参:
返回:
作用:选择最近的公会员作为当前目标。
备注:

PROTECTED TargetNearestRaidMember()
传参:
返回:
作用:选择最近的Raid成员作为当前目标。
备注:


装备
GetInventorySlotInfo(invSlotName)
传参:装备栏索引名称,详见“人物装备界面定义”。
返回:装备栏索引号,纹理名称。
作用:获得指定装备栏信息。
备注:slotId, textureName = GetInventorySlotInfo("slotName")

PickupInventoryItem(invSlot)
传参:装备栏编号,详见“人物装备界面定义”。
返回: 
作用:将物品放于人物装备x位置中。
备注:以下实例展示主副手武器互换。
/ script PickupInventoryItem(GetInventorySlotInfo(“MainHandSlot”))
/ script PickupInventoryItem(GetInventorySlotInfo(“SecondaryHandSlot”))

UseInventoryItem(invSlot)
传参:装备栏编号,详见“人物装备界面定义”。
返回:
作用:使用装备栏中指定装备
备注:以下实例展示主使用饰品1号(待确认1.6版本后,无法再没有按键图标情况下激活?)。
/script UseInventoryItem( GetInventorySlotInfo("Trinket0Slot") );

GetInventoryItemLink("unit", slotId)
传参:第一个为目标,如“player”;第二个为装备栏编号。
返回:装备栏物品链接,无装备则返回空。
作用:获得指定装备物品链接。
备注:即按住Shift键并单击“物品”时的itemLink,用以判断装备物品名称、类型、图标、等级等。可以通过GetItemInfo打印。

AutoEquipCursorItem()
传参:
返回:
作用:自动使用光标指定物品。
备注:以下实例展示,使用背包中第一件物品。背包中解释PickupContainerItem。
PickupContainerItem(0,1);
AutoEquipCursorItem();


背包
GetContainerItemLink(bagID, slot) 
传参:第一为背包编号,第二为背包格编号。
返回:背包中物品链接
作用:获得背包x中x格物品链接。
备注:类似GetInventoryItemLink

PickupContainerItem(bagID,slot)
传参:第一为背包编号,第二为背包格编号。
返回:
作用:
备注:该函数的行为具体取决于当前在光标上的内容,并有所不同
1)如果当前光标没有任何东西,从背包中拾取一个物品来调用。
2)如果当前光标包含一个物品(使用CursorHasItem()进行检查),则将把当前光标处的物品放入指定的背包槽中。如果背包槽中已经有物品,则交换两个物品。(战士、盗贼自动更换武器)
3)如果光标设置为某种法术或技能(通常是附魔或毒药,请使用SpellIsTargeting()进行检查),则对该背包槽中的物品释放指定的法术或技能。(盗贼自动上毒、猎人自动喂宝宝等)

UseContainerItem(bagId,slot [,onSelf])
传参:第一参数背包id,第二参数背包编号,第三参数布尔值,1表示对自身使用,默认false。
返回:
作用:使用背包中的物品,当购物npc对话框打开时则出售物品(包含**、邮箱、拍卖行)。书本或任务则打开,容器则打开,装备栏装备,
备注:背包格编号从起始为1,从左至右,从上到下。


写在最后

最后大家可以在网上找一些现成的宏,然后汇总网上的一些宏加以注释,并根据9种职业分别记录有针对性的宏,然后拆开网上的宏并结合上面文章内容所学的东西,进行分析研究尝试修护网上的残宏.以上是提供大家一些思路和见解由简更深入的了解宏命令的运作和编写。

欢迎玩家到【wan玩得好手游】查看最新变态版手游攻略,只需要在百度输入【wan玩得好手游】就可以浏览最新上线送满vip的变态手游攻略了,更多有关BT手游的攻略和资讯,敬请关注玩得好手游!

更多...

热门推荐

更多...

相关文章