符合中小企业对网站设计、功能常规化式的企业展示型网站建设
本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...
商城网站建设因基本功能的需求不同费用上面也有很大的差别...
手机微信网站开发、微信官网、微信商城网站...
宏定义多条语句可以用如下的形式进行定义:
让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:空间域名、虚拟主机、营销软件、网站建设、潜山网站维护、网站推广。
#define swap(a,b) { a = a + b; b = a - b; a = a - b; }
// 如果分行写,可以写成如下形式
#define swap(a,b) { a = a + b;\
b = a - b;\
a = a - b;}
宏定义一般分为带参宏定义和不带参宏定义。
带参宏定义,也即带参数的宏定义,如:
#define MAX(a,b) ((a)(b) ? (a) : (b)) // 求最大值
不带参宏定义,也即不带参数的宏定义,如:
#define PI 3.14159 // 定义圆周率pi的值
/cast 技能(等级)
中间有空格的,意思是施放某一项技能,如果这种技能有等级的话在括号里注明等级。
例如:
/cast 嘲讽
/Y 对着%T大喊:孙子!
第一句话的意思是施放嘲讽技能,然后会继续执行下一个语句,即你看到的提示,你对(你当前的目标的名字)大喊;孙子!
这个宏写好了之后找个图标,然后把他替换掉你原来的嘲讽图标,以后你嘲讽怪物就会有这个效果了。
//vc工具中添加E:\WAMP\BIN\MYSQL\MYSQL5.5.8\LIB 路径
//在工程设置-》链接》库模块中添加 libmysql.lib
#include stdio.h
#include time.h
#include string.h
#include winsock.h
#include "E:\wamp\bin\mysql\mysql5.5.8\include\mysql.h"
void main(){
MYSQL *conn;
MYSQL_RES *res;
MYSQL_ROW row;
char *server ="localhost";
char *user ="root";
char *password="";
char *database="test";
char sql[1024]="select * from chinaren";
conn=mysql_init(NULL);
if(!mysql_real_connect(conn,server,user,password,database,0,NULL,0)){
fprintf(stderr,"%s\n",mysql_error(conn));
exit(1);
}
if(mysql_query(conn,sql)){
fprintf(stderr,"%s\n",mysql_error(conn));
exit(1);
}
res=mysql_use_result(conn);
while((row = mysql_fetch_row(res))!=NULL){
printf("%s\n",row[2]);
}
mysql_free_result(res);
mysql_close(conn);
}
===============================
#if defined(_WIN32) || defined(_WIN64) //为了支持windows平台上的编译
#include windows.h
#endif
#include stdio.h
#include stdlib.h
#include "mysql.h"
//定义数据库操作的宏,也可以不定义留着后面直接写进代码
#define SELECT_QUERY "show tables;"
int main(int argc, char **argv) //char **argv 相当于 char *argv[]
{
MYSQL mysql,*handle; //定义数据库连接的句柄,它被用于几乎所有的MySQL函数
MYSQL_RES *result; //查询结果集,结构类型
MYSQL_FIELD *field ; //包含字段信息的结构
MYSQL_ROW row ; //存放一行查询结果的字符串数组
char querysql[160]; //存放查询sql语句字符串
//初始化
mysql_init(mysql);
//连接数据库
if (!(handle = mysql_real_connect(mysql,"localhost","user","pwd","dbname",0,NULL,0))) {
fprintf(stderr,"Couldn't connect to engine!\n%s\n\n",mysql_error(mysql));
}
sprintf(querysql,SELECT_QUERY,atoi(argv[1]));
//查询数据库
if(mysql_query(handle,querysql)) {
fprintf(stderr,"Query failed (%s)\n",mysql_error(handle));
}
//存储结果集
if (!(result=mysql_store_result(handle))) {
fprintf(stderr,"Couldn't get result from %s\n", mysql_error(handle));
}
printf("number of fields returned: %d\n",mysql_num_fields(result));
//读取结果集的内容
while (row = mysql_fetch_row(result)) {
printf("table: %s\n",(((row[0]==NULL)(!strlen(row[0]))) ? "NULL" : row[0]) ) ;
}
//释放结果集
mysql_free_result(result);
//关闭数据库连接
mysql_close(handle);
system("PAUSE");
//为了兼容大部分的编译器加入此行
return 0;
}
授人以鱼不如授人以渔。混宏区也有一段时间了,突然决定把自己写宏的经验写出来,希望对想学习写宏德朋友们有点帮助。虽然我相信那些无视搜索功能无视日经贴开口就问的小白们不会看得。但是如果对任何人能有点帮忙我就满足了??\x0d\x0a\x0d\x0a首先,我们应该明白一些宏最基本的特点\x0d\x0a1) 宏命令区分大小写。对于简单的/cast,/s之类的貌似无关紧要,但是对于/script的宏,一定要注意大小写!\x0d\x0a2) 宏都是英文的??虽然貌似不懂英文也可以写,但是稍微懂一点还是有助于理解宏的。\x0d\x0a3) 宏不是外挂。不要想着例如自动冰箭之类的宏,这是不可能的。\x0d\x0a4) 宏命令是同时执行但是又分先后。所以触发公共CD的技能后面不能跟其他技能。\x0d\x0a5) 宏命令的符号请使用半角。例如,.”不能用“,。\x0d\x0a6) 对于有多个返回的命令,需要用例如a,b,c=GetActionCooldown(x),那么a就是开始,b是长度,c是enable。如果不想要后 面的,例如b和c,那么a=GetActionCooldown(x)就可以,如果不想要前面的,例如a,可以用_,b,c= GetActionCooldown(x)\x0d\x0a7) 每一个if和do后面都要跟一个end\x0d\x0a暂时先想这几个??\x0d\x0a\x0d\x0a然后看看怎么写\x0d\x0a宏的结构很简单,if判断,然后then执行。单纯的执行命令,例如\x0d\x0a/script UseAction(x)\x0d\x0a相当于在任何情况下都执行。\x0d\x0a例如\x0d\x0a[/quote]/script if UnitName(“楼主”)==“ZealotMtg” then SendChatMessage(“此贴被评分,最近评分记录 威望:10(奇迹)”)[/quote]\x0d\x0a那么,要想写出一个宏,首先就必须明白想要做什么。想象当你自己执行这个动作的时候,你的是如何判断的,然后用宏命令来执行即可。\x0d\x0a\x0d\x0a举例来说,经常有人问,盗贼切割宏。想想如果你要放切割,那么怎么做呢?首先是判断有没有切割buff,如果有就继续砍没有就切割\x0d\x0a/script if [检查切割的buff] then CastSpellByName(“邪恶攻击”) else CastSpellByName(“切割”) end\x0d\x0a然后怎么判断有没有切割buff呢?试想如果是你,怎么判断?看一眼有没有切割的图标。人可以一眼看过去,电脑呢?全部看一遍咯,也就是说\x0d\x0alocal qg; for i=1,16,1 do b=UnitBuff(“player”,i); if b and string.find(b,”SliceDice”) then qg=1 break; end; end\x0d\x0a然后合起来就可以咯\x0d\x0a/script local qg; for i=1,16,1 do b=UnitBuff(“player”,i); if b and string.find(b,”SliceDice”) then qg=1 break; end; end; if qg==1 then CastSpellByName(“邪恶攻击”) else CastSpellByName(“切割”) end\x0d\x0a\x0d\x0a写一个很简单,不是么?\x0d\x0a\x0d\x0a了解最基本的方法以后,如何去提高呢?\x0d\x0a\x0d\x0a1/ 看已经有的宏,学习前辈们的经验\x0d\x0a\x0d\x0a2/ 多看看宏命令。不要求背下来(这也不现实),但是大约了解一下有那些命令是可以通过宏做到的。一些常用的,例如SendChatMessage, UseAction, CastSpellByName(““)之类的,如果能背下来将大大提高写宏效率。\x0d\x0a\x0d\x0a3/ 长度优化:虽然有SuperMacro(强烈推荐)可以大大加大宏的长度,但是大道理不说,写那么长的宏不累么?\x0d\x0a这是一个我很久以前写的1键换装宏,那个时候什么都不懂。\x0d\x0a/script UseContainerItem(4,1); UseContainerItem(4,2); UseContainerItem(4,3); UseContainerItem(4,4); UseContainerItem(4,5); UseContainerItem(4,6); UseContainerItem(4,7); UseContainerItem(4,8); UseContainerItem(4,9); UseContainerItem(4,10)\x0d\x0a很累不是么?如果现在写,我会写成\x0d\x0a/script for i=1,10,1 do UseContainerItem(4,i) end\x0d\x0a长度优化的方法有哪些:\x0d\x0ai) 循环语句。For k=a,b,c do ? end\x0d\x0a以k=a为起始,k=b结束,每一步的间隔为c每次执行do后面的命令。K为任意变量\x0d\x0a举例来说,下马宏\x0d\x0a/script for k=1,16,1 do if string.find(UnitBuff(“player”,k),”mount”) then CancelBuff(k); break; end; end\x0d\x0a注意一个是b-a要整除c,一个是do里面尽量不要干涉变量k(或你选择的随便什么东西),否则容易造成死循环。例如\x0d\x0a/script for i=1,3,1 do i=1; SendChatMessage(“1”); end\x0d\x0a每次do都会重置i到1,那么i永远到不了3,就会形成一个无限循环。你的WOW会马上失去响应??\x0d\x0a另外,虽然一般见到的do里面都回含有k这个变量,例如我的例子里面就用了UnitBuff(“player”,k),但是这不是必须的。例如以下例子就不含有k\x0d\x0a/script for k=1,100,1 do SendChatMessage(“大家一起鄙视我吧”) end\x0d\x0aii) 对某个需要经常出现的命令赋值:例如还是我之前那个换装宏,如果我不用for do end,那么我可以通过以下方法实现:\x0d\x0a/script UCI=UseContainerItem; UCI(4,1); UCI(4,2) ??\x0d\x0aiii) 集合:有时候需要比较多个量,那么通过集合+循环可以减少长度,例如\x0d\x0a/script local n,s,k,j,d,f={"Abomi","Sarge","Immol"},{"腐蚀术","痛苦诅咒","献祭"};for k=1,3 do f=nil;for j=1,16 do d=UnitDebuff("target",j);if d and strfind(d,n[k]) then f=1;break;end;end;if not f then CastSpellByName(s[k]);break;end;end; \x0d\x0aBy Oblind\x0d\x0a有兴趣的可以试一下一个一个写会有多长??\x0d\x0aiv) 插件:有些插件可以把一些很麻烦的命令简化,例如isBuffActive之类的。一般判断buff需要的是\x0d\x0a/script for i=1,16,1 do b=UnitBuff(“target”,i); if b and string.find(b,”xx”) then yy; break; end; end\x0d\x0a但是通过这个插件之需要\x0d\x0a/script if isBuffActive(xxxx) then yyyy end\x0d\x0av) fuction命令简化:通过function命令可以达到类似于上面的效果,不过每次要载入比较麻烦。可以写到任意插件的LUA文件里面简化。\x0d\x0avi) 有时候很长的一个命令可以通过其他一个命令实现。例如我上次见到有人施放技能用\x0d\x0a/script ActionButtonDown(x); ActionButtonUp(x)\x0d\x0a汗??一个UscAction就好了嘛??\x0d\x0a\x0d\x0a4/ 可读性优化。这就是个人习惯问题了。例如本人缩写一般\x0d\x0aUCI=UseContainerItem; CSB=CastSpellByName; SSC=SpellStopCasting()\x0d\x0a这样写的好处就是就算加入了大量的缩写,我仍然能够看懂我写了什么东西。一旦有什么变化也方便修改。\x0d\x0a\x0d\x0a5/ 适用性。使得这个宏用起来更加舒服也是非常重要的。举例来说,我的牧师当初有个宏提醒别人我在复活谁\x0d\x0a/s 我正在复活%t\x0d\x0a/script CastSpellByName(“复活术”)\x0d\x0a但是有个问题,有时候我因为在战斗中点到制造噪音,怎么办呢?我就改为了\x0d\x0a/script if (not UnitAffectingCombat(“player”)) then CastSpellByName(“复活术”); SendChatMessage(“我正在复活”..UnitName(“target”)) end\x0d\x0a但是有时候仍然会制造噪音,只要我的目标不是我复活的人那么就会乱说话,那么我要当前目标是死人\x0d\x0a/script if (not UnitAffectingCombat(“player”)) then if (UnitName(“target”)~=nil) and (UnitHealth(“target”)==0)) then CastSpellByName(“复活术”); SendChatMessage(“我正在复活”..UnitName(“target”) end; end\x0d\x0a好吧,又有问题就是,如果我不选目标那么我不能放复活术了。继续\x0d\x0a/script if (not UnitAffectingCombat(“player”)) then CastSpellByName(“复活术”); if ((UnitName(“target”)~=nil) and (UnitHealth(“target”))) then SendChatMessage(“我正在复活”..UnitName(“target”) end; end\x0d\x0a至此这个宏才算写完。\x0d\x0a\x0d\x0a先写这么多了,吃饭去也~\x0d\x0a\x0d\x0a如果有错误或者补充,欢迎跟贴。另外加上WoWwiki的宏命令翻译,先翻译一部分,有时间再翻译剩下的。另外我的表达不太好,谁有兴趣吧我说的翻译成人话很欢迎 _
回答于 2022-11-16