控制台——doFile,自定义命令

录入:EvilP 作者:yorkane 翻译:
录入时间:2009-11-12 02:06:13 最后修改时间:2009-11-20 23:56:54

是否觉得控制台命令很好,但是命令难记难输入,控制台又不支持复制粘贴,这时自定义命令就能很好的发挥作用了。

实现原理:利用 @doFile() 函数

使用方法:写好lua文件后,进入游戏载入地图后在控制台里输入 @doFile("路径/文件名.lua")

然后就可以使用自己定义的命令了。不过每次新游戏都需要doFile一次,但是有一点好处,可以在运行游戏时切换出去改动lua文件然后进游戏 doFile,修改的内容会立刻生效。

如果不想每次都doFile可以把scriptsadvmap-startup.lua解压出来,在其中加一行doFile("***.lua"),不需@,且文件在DATA目录下。不在DATA下要加上相应的目录路径。


lua文件的写法:打开记事本,输入下面的内容(输入完后建议保存在data文件夹下,这样doFile时就可以省去路径了,保存格式为任意名.lua,当然要用英文或者数字文件名比如a.lua或者1.lua。)

首先,需要定义一些变量:

CP=1      --默认第一玩家有效,其实还可以用CP=GetCurrentPlayer()
P1=nil     --用来存储玩家的所有英雄的名字
H0='hero'    --用来存储玩家的第一个英雄的名字
P1=GetPlayerHeroes(PLAYER_1) --如果你是第二个玩家请在这里改为PLAYER_2
H0=P1[0]

接下来是格式:

function 任意名(参数) 
 游戏本身具有的函数及语法组成
end
  • 任意=任意的字母或者数字组合,只要不与游戏本身有的命令相同,当然,为了好记,可以弄成只有一个字母或者数字。
  • 参数=有些编号和数字之类,可留空。
  • 游戏本身具有的函数=那些游戏本身存在的函数。

举些例子如下: 

function ae(hn,n)
 GiveExp(P1[hn],n)
end

--用法:@ae(0,5000)
--作用:给你的第一个英雄加5000点经验值,给第二个英雄加10000经验就是:@ae(1,10000) 依次类推

   
function ac(hn,creature,n)
 AddHeroCreatures(P1[hn], creature,n,1)
end

--用法:@ac(0,CREATURE_HELL_HOUND,1000)
--作用:给你的第一个英雄增加1000只地狱犬(默认已经升级),给第二个英雄就是:@ac(1,CREATURE_H ELL_HOUND,1000) 依次类推
--你可以用数字编号代替"CREATURE_HELL_HOUND"
function sr(n)
 SetPlayerResource(CP,0,n)
 SetPlayerResource(CP,1,n)
 SetPlayerResource(CP,2,n)
 SetPlayerResource(CP,3,n)
 SetPlayerResource(CP,4,n)
 SetPlayerResource(CP,5,n)
 SetPlayerResource(CP,6,n*1000)
end

--用法:@sr(5)
--作用:设定玩家的所有资源数量为5, 金钱数量为5*1000=5000 输入@sr(100) 即为所有资源100金钱100000
--此方法将直接将玩家的资源设定为指定数字
function ap(hn,n)
 ChangeHeroStat( P1[hn],1,n)
 ChangeHeroStat( P1[hn],2,n)
 ChangeHeroStat( P1[hn],3,n)
 ChangeHeroStat( P1[hn],4,n)
end

--用法:@ap(0,5)
--作用:将第一个英雄的所有技能点加5(攻击力,防御力,咒力,知识)( @ap(0,-5) 将技能点减5)
function m()
 OpenCircleFog (0, 0, 0, 9999,CP)
 OpenCircleFog (0, 0, 1, 9999,CP)
end

--用法:@m()
--作用:为玩家打开所有地图,如果你是第二个玩家请将CP=0改为CP=1,依次类推
function ama(hn,n)
 ChangeHeroStat(P1[hn],8,n)
end

--用法:@ama(0,50)
--作用:为第一个英雄加50的魔法值(@ama(1,100) :为第二个英雄加100点魔法值)
function am(hn)
 ChangeHeroStat(P1[hn],7,500000)
end

--用法:@am(0)
--作用:将第一个英雄的移动力加满(@_addMove(1) :将第二个英雄的移动力加满)
function ga(hn,item)
 GiveArtifact(P1[hn],item)
end

--用法:@ga(0,4)
--作用:给第一个英雄一个独角兽角弓
--给第二个英雄:@ga(1,4)
function gk(hn,n)
 GiveHeroSkill(P1[hn],n)
end

--用法:@gk(0,1)
--作用:教给第一个英雄后勤术
--教给第二个英雄:@gk(1,1)

如果你格式能写对,就可以做到输入一个命令,可以达到原本需要输入10次或者100次才能做到的(比如添加全部技能)

其实保存成txt或者其它后缀也可以,doFile时的相应后缀也改成这样就是了。


另附一段无限移动脚本
function rem(x,y)
if a == 1 then
ChangeHeroStat(GetPlayerHeroes(x)[y], 7, 3000);
sleep(7);
rem(x,y);
end;
end

function stop()
a = 2;
end

function move(x,y)
a = 1;
rem(x,y);
end

a = 1;
保存成move.lua到data文件夹下

进游戏后,用控制台,表弄错大小写哦,

@doFile("move.lua")
@move(x, y)

停止用@stop

其中x为玩家编号..比如第一个玩家为红色,是1,第二是蓝色是2,以此类推至8……
y为英雄序号,初始英雄为0,第一个招募的(嗯..地图有初始英雄的..)为1,第2个招募的为2类推……
习惯只用到红色的初始英雄的可以在end下一行加move(1, 0),这样就可以免去输入move(x, y)

代码还可改为:这样只输一个数字也就是英雄的序号就够了。

function rem(y)
if a == 1 then
ChangeHeroStat(GetCurrentPlayer()[y], 7, 3000);
sleep(7);
rem(y);
end;
end

function stop()
a = 2;
end

function move(y)
a = 1;
rem(y);
end

a = 1;