脚本宏定义
⑴ 什么是脚本
最简单的一些脚本
用写字板打开你的config.cfg(cstrike目录下).把console""""0.000000""""
这行改为console""""1"""".
然后在cstrike快捷方式里的程序地址后面添加
-console-zone4096-dev
如:C:SierraHalf-Lifehl.exe-console-zone4096-dev
什么是alias(宏)?
可以说脚本就是在一个个宏的基础上组建起来的,这也是我们必须了解的第一个问题
宏的大致格式是这样的:
alias[alias-name]""""[command1];[command2];[command#]....""""
我们可以看出,宏实际上就是一系列指令的集合,所以,任何一个宏也可以应用到其他的宏中。
脚本中最常用的一些指令
menuselect#-#为1至9的一个数字.这个指令表示选择菜单中的第#个选项.如:
例:aliasjoinct""""chooseteam;menuselect2""""
引号中的内容即表示选择team菜单的第2项,即CT这边
bindKEYCOMMAND-
把某个特定的指令定义到某个键上.注意:'COMMAND'也可为一个宏.
如:bind""""k""""""""kill""""
把kill这个指令定义到k上,这样你按k时就自杀了
又如:bind""""k""""""""joinct""""
则你按k就会加入CT这边.
execname.cfg-
导入某个cfg文件.HL每次进入游戏时会自动导入config.cfg和autoexec.cfg文件.
wait-
停滞一小会.脚本中的wait是为了让前指令执行完.使用多少wait要根据不同的电脑和网络情况而定,太多的wait就会引起lag,太少则可能使下一个指令来不及执行.
简单的宏
让我们先看一些最简单的宏来熟悉一下
打开autoexec.cfg,写入以下行:
aliashello""""sayWelcometoCsChina.net!;wait;wait;kill;wait;
wait;say_teamWelcometoCsChina.net!""""
让我们看看这个宏的结构:
引号中为一个指令集,其中say这个指令的作用是对游戏中所有人说话,say_team则是对所有队友说话
注意:单个指令之间用分号;隔开
这个指令集被定义为一个名为hello的宏
别急,你还必须把刚刚制作的宏定义到某个键位上才能使用,进入游戏,在控制面版中敲入
bind""""k""""""""hello""""
好了,现在让我们按K看看效果吧,hoho~~
宏的类型及简单脚本制作
脚本制作的基本概念我们已经比较清楚了,现在一起看一看宏的几种类型并将其应该到简单的脚本制作中
+/-aliases
其意义为当按住某个键时执行一个指令集,而松开此键时则执行另外一个指令集(注:这两个指令集可以相同也可以好不相干)
例:
alias+sayreload""""+reload;say_teamCovermewhileIreload!""""
alias-sayreload""""-reload""""
+/-
aliases,可以使你原本简单的动作更加多样化,如扩展开就是更复杂但更有效的meta
binds(
metabinds
metaBinds实际上就是一种+/-alias,但不同的是,meta
binds在松开定义键之后对该键重新做了定义(←Archangel注:此行用红色字体.)一定要注意这个区别,这将非常有助于理解这两种宏的类型。
让我们来看一个常见的制作快速买抢脚本的例子:
Example:
aliaspreset1""""buy;menuselect4;menuselect6;buy;menuselect6;buyequip;
menuselect2""""
//购买AWM、子弹以及防弹衣
aliaspreset2""""buy;menuselect3;menuselect1;buy;menuselect6;buyequip;
menuselect1;""""
//购买MP5、子弹以及防弹衣
aliaspreset3""""buy;menuselect2;menuselect1;buy;menuselect1;
menuselect5;buy;menuselect6;buy;menuselect7;buyequip;menuselect2""""
//购买M3,beretta,子弹,带头盔的防弹衣
aliaspreset4""""buy;menuselect1;menuselect3;buy;menuselect7""""
//购买手雷和子弹
aliaspreset5""""developer1;echoPresetnotset!;developer0""""
//在屏幕左上角显示该组合键未定义----Presetnotset!
注:echo这个指令的意义为在屏幕左上角显示你所定义的信息
aliaspreset6""""developer1;echoPresetnotset!;developer0""""
aliaspreset7""""developer1;echoPresetnotset!;developer0""""
aliaspreset8""""developer1;echoPresetnotset!;developer0""""
aliaspreset9""""developer1;echoPresetnotset!;developer0""""
aliaspreset10""""developer1;echoPresetnotset!;developer0""""
//同上
alias+toggle""""bind1preset1;bind2preset2;bind3preset3;bind4
preset4;bind5preset5;bind6preset6;bind7preset7;bind8preset8;
bind9preset9;bind0preset10""""
alias-toggle""""bind1slot1;bind2slot2;bind3slot3;bind4slot4;bind
5slot5;bind6slot6;bind7slot7;bind8slot8;bind9slot9;bind0
slot0""""
bindalt""""+toggle""""
这个脚本子后三行是关键所在,其意义为,当按住alt和某数字键时,执行脚本前半部定义的购枪指令集,而当松开alt键时,数字键则恢复为原功能,即切换枪支,这就是meta
binds的意义所在!
其作用也是显而易见的:可以节省不少键位,并可以在常用键位上定义更多的指令集
Toggles
Toggles(开关)最典型的例子就是开关探照灯和夜视仪。让我们制作一个开关netgraph(状态显示,如FPS)的Toggle来熟悉和研究一下
Example:
aliasngon""""developer1;echoNetGraphon;developer0;net_graph3;bindn
ngoff""""
aliasngoff""""developer1;echoNetGraphoff;developer0;net_graph0;bind
nngon""""
bindn""""ngon""""
这个脚本的作用即为用n键来开关netgraph,注意Toggle的特点,在第一个宏的末尾将n键定义到下一个宏,这实际上就形成了一种循环(cycling),但这个脚本显然并不能令人满意,因为它不能添加到键盘设置菜单中以便更快捷的调整,因为:请注意!该键被定义(bind)了两次。如何解决这个问题呢,稍稍改动即可。
Toggles(complex)
即为改进后的Toggles,其好处在于只需设定一个键位,仍然以netgraph开关为例
Example:
aliasngon""""developer1;echoNetGraphon;developer0;net_graph3;alias
ngngoff""""
aliasngoff""""developer1;echoNetGraphoff;developer0;net_graph0;
aliasngngon""""
aliasng""""ngon""""
bindn""""ng""""
大家可以看到:两个宏的尾部都由原来的bind改为alias,在第三行把键单独定义,非常巧妙,不是吗?hoho~~
现在我们可以在键盘设置栏直接定义该键了,更重要的是:理解了这个技巧,我们就可以进入下一课-----循环
Cyclealiases
前面的toggle仅仅是两种情况的选择,即开和关,当我们面临更多种选择时怎么办呢?这就需要Cycle
aliases,还是看netgraph的例子,但这一次,我们要用n键选择不同的netgraph显示形式.
Example:
aliasng1""""developer1;echoNetGraphon,setting1;developer0;net_graph
1;aliasngng2""""
aliasng2""""developer1;echoNetGraphon,setting2;developer0;net_graph
2;aliasngng3""""
aliasng3""""developer1;echoNetGraphon,setting3;developer0;net_graph
3;aliasngng4""""
aliasng4""""developer1;echoNetGraphoff;developer0;net_graph0;alias
ngng1""""
aliasng""""ng1""""
bindn""""ng""""
我们可以看到,在每一行的末尾都将键定义到下一个宏上,这就形成了循环.
制作自己的键位设置菜单
在前一章中我们提到键位设置菜单中添加自己的选项
这就是最后一节中我们将详细讲解的内容
csnation.counter-strike.net/content/csinfo/images/scripting/controls2-small.jpg
打开你的half-lifecstrike目录下的gfx文件夹,用写字板打开其中的kb_act.lst文件,你可以看到这样一些内容:
""""buyammo1""""""""BuyPrimaryAmmo(Optional)""""
""""buyammo2""""""""BuySecondaryAmmo(Optional)""""
""""buyequip""""""""BuyEquipmentMenu(Optional)""""
……………………
左边就是宏的名称,而右边则是你希望玩家在菜单中所看到的对这个宏的解释
好,现在我们有这么一个脚本
aliasfloat_t""""float_on""""
aliasfloat_on""""aliasfloat_tfloat_off;+moveup""""
aliasfloat_off""""aliasfloat_tfloat_on;-moveup""""
已经比较熟悉脚本制作的大家应该看的出来,这是一个一键游泳的toggle
怎样在菜单中也加上这个toggle的一栏呢?想必你也看出来了,对,只要在kb_act.lst的下面加上这么一行""""float_t""""""""FloatingToggler""""
就一切搞定,就是这么简单,呵呵
一样,你还可以在菜单为你的脚本加个商标,加入下面行:
""""blank""""""""""""
进入游戏后你就可以看见你的大名也烙在了CS,帅:>
另外kb_act.lst这个文件是有大小限制的,不过估计谁也写不了那么多,hohoho~~
转sina
⑵ shell脚本中怎么定义通用的路径宏
可以这样用,我怀疑你的错误应该不是路径变量导致的,如有疑问,请把你的报错信息发出来!
⑶ c语言不属于脚本语言可是能不能用来写脚本呢
不行的,脚本是一种文本,可以用记事本编写,是十进制,不需要编译器编译成计算机能识别的二进制。而c语言用编译器来编写,将十进制转换为二进制。况且脚本语法和c语言不同,但脚本和vb有关联,如果你要学脚本,先去理解下vb语法
⑷ 如何使用脚本在xcode工程中添加宏定义
iphone sdk从2.2开始就不能很方便的加入预处理宏了
2.2之后的方法是在GCC编译选项组下面,手工添加一个字段GCC_PREPROCESSOR_DEFINITIONS,然后对应的value填上你的预处理define即可
⑸ C++里如何使用宏定义或其它技巧使用FOR循环简化代码。
1. 宏定义并没有提供这样的功能。
2. 使用for循环是不可能的,这表示要在运行时把一个字符串转成变量,而程序经过编译之后已经变成了汇编语言,变量已经变成了一个个内存地址,他不可能认识这个变量名了。
建议在定义指针时使用指针数组,这样就可以循环调用了。比如:
CA* p[100];
for ( int i = 0; i < 100; i++ )
{
p[i] = new CA();
p[i]->close();
}
⑹ 什么情况用宏定义而不用一般定义
当一个程序由多个文件组成,特别是有多个头文件组成时一定要用宏,目的是避免互相嵌入造成重复定义,给编译器一个清晰的程序结构。
例如所有的MFC VC++ 的头文件都有这个宏
#if !defined(AFX_....
#define AFX_....
...
#endif
调用动态联结库要用宏 #pragma....
定义替代字符要用宏,例如
#define SHUZU_DAXIAO 2000
...
float a[SHUZU_DAXIAO],b[SHUZU_DAXIAO];
编译前编译器会用2000替代所有字符SHUZU_DAXIAO。
如果是一般变量,就不能用宏,例如:
int i,j,k;
void main(int n, char *argv[]) { }
这是标准的C的主程序写法。
用void 表示主程序运行终了没有返回值送回操作系统。
如果是
int main(int n, char *argv[]) { ....
return 0;
}
主程序运行终了有返回值送回操作系统,主程序内要有return语句。
⑺ 键盘上的宏定义是什么意思
嗯就是相当于组合键,你玩过魔兽没有那个有宏的,其实就是偷懒的方法,如一个宏里上下左右上上下下这么几个按键顺序,你用宏就会这么的自己在电脑里上下左右上上下下,你录制宏ASDASDASDASD,设定开启为A,开启宏,按下A触发宏,电脑里就反复的asdasdasdasd,当然也能是组合多功能键复制粘贴之类的就是省的你一个一个的按了,按一个键就搞定了,这样的键盘200以上吧,机械的就大几百了,常见的有黑寡妇和杜兰朵终极,因为有内存在键盘里所以贵,另外用软件可以做到宏的效果
⑻ Makefile中的宏定义必须采用 和 么
八 环境变量
8.1 查看环境变量
$ env 显示所有的环境变量设置
$ echo $ENV_VARIABLE 显示指定环境变量的设置
例:
$ echo $PATH
/bin:/etc:/usr/bin:/tcb/bin
8.2 设定环境变量
$ ENV_VARIABLE=XXX;export ENV_VARIABLE
例:
$ PATH=$PATH:$INFORMIXDIR/bin;export PATH 将环境变量PATH设定为原PATH值+$INFORMIXDIR/bin
8.3 取消环境变量设置
$ unset $ENV_VARIABLE
例:
$ set GZJ=gzj;export GZJ 设置环境变量GZJ
$ echo $GZJ
gzj 显示环境变量值
$ unset $GZJ 取消环境变量GZJ的设置
$ echo $GZJ
已取消
一 makefile规则
makefile是一个make的规则描述脚本文件,包括四种类型行:目标行、命令行、宏定义行和make伪指令行(如“include”)。makefile文件中注释以“#”开头。当一行写不下时,可以用续行符“\”转入下一行。
1.1 目标行
目标行告诉make建立什么。它由一个目标名表后面跟冒号“:”,再跟一个依赖性表组成。
例:
example: depfile deptarget
该目标行指出目标example与depfile和deptarget有依赖关系,如果depfile或deptarget有修改,则重新生成目标。
example1 example2 example3: deptarget1 deptarget2 depfile
该目标行指出目标名表中的example1、example2、example3这三个各自独立的目标是用相同的依赖列表和规则生成的。
clean:
空的依赖列表说明目标clean没有其他依赖关系。
目标行后续的以Tab 开始的行是指出目标的生成规则,该Tab字符不能以空格代替。例如:
example.o:example.c example.h
cc –c example.c
该例子指出目标example.o依赖于example.c和example.h。如果example.c或example.h其中之一改变了,就需要执行命令cc –c example.c重新生成目标example.o。
可以用文件名模式匹配来自动为目标生成依赖表,如:
prog: *.c
以下是一个简单的makefile的例子:
图 1 最简单的makefile例
make使用makefile文件时,从第一个目标开始扫描。上例中的第一个目标为all,所以目标clean不会自动被执行,可以通过命令make clean来生成目标。
1.2 命令行
命令行用来定义生成目标的动作。
在目标行中分号“;”后面的文件都认为是一个命令,或者一行以Tab制表符开始的也是命令。
如在上面的makefile例中,第三行以Tab字符开始的cc命令即是一个命令行,说明要生成hello应执行的命令。也可以写成:hello:hello.o;cc –c hello –L…
一般情况下,命令行的命令会在标准输出中回显出来,如对上面的makefile执行make时,标准输出如下:
cc -c hello.c
cc -o hello -L/usr/X11R6/lib -L/usr/lib -lXm -lXt -lX11 hello.o
cc -c hello1.c
cc -o hello1 -L/usr/X11R6/lib -L/usr/lib -lXm -lXt -lX11 hello1.o
如果不希望命令本身回显,可在命令前加@字符,如在上例中不希望回显cc –c hello.c和cc –c hello1.c,可修改makefile文件如下:
图 2 抑制回显的makefile例
对该makefile文件执行make时,标准输出如下:
cc -o hello -L/usr/X11R6/lib -L/usr/lib -lXm -lXt -lX11 hello.o
cc -o hello1 -L/usr/X11R6/lib -L/usr/lib -lXm -lXt -lX11 hello1.o
可以看出,命令行前有@字符的不回显。
1.3 宏定义行
在makefile中,可以使用宏定义减少用户的输入,例如上例中对hello和hello1的编译选项均为“-L/usr/X11R6/lib -L/usr/lib -lXm -lXt -lX11”,此时可以用宏来代替,如:
图 3 使用宏定义的makefile例
宏定义的基本语法是:
name=value
在定义宏时,次序不重要。宏不需要在使用前定义。如果一个宏定义多次,则使用最后一次的定义值。
可以使用“$”字符和“()”或“{}”来引用宏,例如:
cc –o hello.o $(CCFLAGS) hello.o
也可以将一个宏赋值给另一个宏,但这样的定义不能循环嵌套,如:
A=value1
B=value2
C=$(A) $(B)等价于C=value1 value2
1.4 伪指令
makefile大部分由宏定义行、命令行和目标行组成。第四种类型是make伪指令行。make伪指令没有标准化,不同的make可能支持不同的伪指令集,使得makefile有一定的不兼容性。如果要考虑移植性问题,则要避免使用make伪指令。但有一些伪指令,如include,由于使用比较多,很多不同make都提供该伪指令。
1.4.1 伪指令include
该伪指令类似C语言中的#include,它允许一次编写常用的定义并包括它。include伪指令必须在一行中,第一个元素必须是include,并且跟一个要包含的文件名,如:
include default.mk
1.4.2 伪指令“#”
“#”字符也是make的伪指令,它指出“#”后面的文件是注释,如:
PROGNAME=test # define macro
#don't modify this
⑼ 宏设置 是什么
关于宏
如果在 Microsoft Word 中反复执行某项任务,可以使用宏自动执行该任务。宏是一系列 Word 命令和指令,这些命令和指令组合在一起,形成了一个单独的命令,以实现任务执行的自动化。
以下是宏的一些典型应用:
加速日常编辑和格式设置
组合多个命令,例如插入具有指定尺寸和边框、指定行数和列数的表格
使对话框中的选项更易于访问
自动执行一系列复杂的任务
Word 提供两种方法来创建宏:宏记录器和 Visual Basic 编辑器。
如果要方便快捷地运行宏,可以将其指定到工具栏、菜单或快捷键。这样,运行宏就和单击工具栏按钮或菜单命令,或者按快捷键一样简单。
如果为一个新的宏指定与现有内置 Word 命令相同的名称,新的宏操作将代替现有的操作。例如,如果录制一个新的宏并将之命名为“FileClose”,它将与“关闭”命令相关联。当选择“关闭”命令时,Word 将执行新录制的操作。
录制宏
宏录制器可以帮助您开始创建宏。Word 将宏录制为一系列 Visual Basic for Applications 中的 Word 命令。在录制宏的过程中可以暂停录制,随后从暂停时的位置继续录制。
录制一个宏时,可以使用鼠标单击命令和选项,但是宏录制器不能录制鼠标在文档窗口中的移动。必须用键盘来记录这些动作。
关于录制宏的提示
在录制或书写宏之前,请计划好需要宏执行的步骤和命令。
如果在录制宏的过程中进行了错误操作,更正错误的操作也将被录制。录制结束后,您可以编辑宏并删除录制的不必要的操作。
尽量预测任何 Word 可能显示的信息,在宏运行时,这些信息可能使宏操作停止或造成混淆。
如果宏包含“编辑”菜单中的“查找”或“替换”命令,请单击“查找”或“替换”选项卡上的“高级”按钮,然后单击“搜索范围”框中的“全部”选项。如果宏仅向上或向下进行搜索,Word 会在达到文档开头或结尾时停止运行宏,并显示提示信息询问是否继续搜索。
如果要在其他文档中使用正在录制的宏,请确认该宏与当前文档的内容无关。
如果经常用某个宏,可将其指定给工具栏按钮、菜单或快捷键。这样,就可以直接运行该宏而不必打开“宏”对话框。
从头开始创建宏
可以使用“Visual Basic 编辑器”来创建非常灵活、功能强大的宏,其中包含无法录制的 Visual Basic 指令。
使用“Visual Basic 编辑器”时,可以获取附加的帮助,例如关于对象和属性的参考信息。
保存宏
可以将宏保存在模板或文档中。在默认情况下,Word 将宏保存在 Normal 模板中。这样所有 Word 文档都可使用宏。如果需在单独的文档中使用宏,可以将宏保存在该文档中。文档中单独的宏保存在宏方案中,可以将该宏从文档中复制到其他文档。
在 Web 页中自动执行任务
在以 Web 页保存并发布的 Word 文档中,使用脚本标记和“Microsoft 脚本编辑器”,而不是使用宏来自动执行任务。
脚本标记用来标记 Word 文档中存储脚本的位置。双击 Word 文档中的脚本标记会启动“Microsoft 脚本编辑器”,这时就可以开始编辑脚本。在 Web 浏览器中显示 Web 页时,将会运行脚本。