1 / 43

任务部脚本程序培训

任务部脚本程序培训. 第一节 SQL 常用数据库操作语言. 一、查询语句 (select) : Select 语句主要被用来对数据库进行查询并返回符合用户 查询标准的结果数据。 select column1 [, column2,etc] from tablename where condition; ( [ ] 表示可选项) 例如:查询 cq_user 表中所有 PM 号,只显示 id 跟 name 字段: Select id,name from cq_user where name like ‘ %[PM] ’ ; 如果要求显示全部字段则写为:

Télécharger la présentation

任务部脚本程序培训

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 任务部脚本程序培训

  2. 第一节 SQL常用数据库操作语言 • 一、查询语句(select): Select语句主要被用来对数据库进行查询并返回符合用户 查询标准的结果数据。 select column1 [, column2,etc] from tablename where condition; ([ ]表示可选项) • 例如:查询cq_user表中所有PM号,只显示id跟name字段: Select id,name from cq_user where name like ‘%[PM]’ ; 如果要求显示全部字段则写为: Select * from cq_user where name like ‘%[PM]’ ;

  3. 练习: • 将cq_generator表中所有怪物类型(npctype)为900的记录找出来并按照id从大到小的顺序排列。 • Select * from cq_generator where npctype = 900 order by id desc

  4. 二、删除语句(delete): • delete语句主要被用来删除符合条件的数据库记录 deletefrom tablename where condition; 例如:删除所有cq_action表中type为502的记录: Delete from cq_action where type=502; 练习: 将cq_itemtype表中,名字带“剑”字的物品全部删除。 Delete from cq_itemtype where name like ‘%剑%’;

  5. 三、插入语句(insert): • Insert插入语句主要是用于在数据库某一张表内插入新记录 insert into table_name(column1,column2,….) values (value1,value2,….); 例如:在cq_passway表中插入一条记录: Insert into cq_passway (id,mapid,passway_idx,passway_mapid,passway_mapportal) values (0013,1006,0000,1002,0005); 如果不需要匹配字段插入,上面一句可写为: Insert into cq_passway values (0013,1005,0000,1002,0005);

  6. 练习: • 往cq_task表的id,id_next,money,sex,team,metempsychosis字段中插入数值1000,1001,0,999,999,0 • Insert into cq_task (`id`,`id_next`,`money`,`sex`,`team`,`metempsychosis`) values (1000,1001,0,999,999,0);

  7. 四、更新语句(update): • Update语句主要用于更新一条数据库中已经存在的表记录的数据 update table_name set column1=XXX(,column2=XXX) where condition; 例如:将数据库cq_npc表中,所有type为2的npc,mapid都改成1000,lookface都改成1002 Update cq_npc set mapid=1000,lookface=1002 where type=2 练习:将数据库cq_itemtype表中所有名字带“剑”字,req_sex为1的物品,price改成0,weight改成0: Update cq_itemtype set weight=0,price=0 where name like ‘%剑%’ and req_sex=1;

  8. 常用运算符说明

  9. 以select语句为例,通常条件有如下几个: • 我们经常用的condition条件有以下几个: • Select * from cq_action where id=1000; • 查询cq_action表中id为1000的记录。 • Select * from cq_action where id=1000 or id=1002; • 查询cq_action表中id为1000或者id为1002的记录 • Select * from cq_action where id>1000 and id<1002; • 查询cq_action表中id大于1000并且小于1002的记录,返回值为1001。 • Select * from cq_action where id>=1000 and id<=1002; • 查询cq_action表中id大于等于1000并且小于等于1002的记录,返回1000,1001,1002三个值。 • Select * from cq_action where id in (1000,1005,2004); • 查询cq_action表中id在1000,1005,2004范围内的记录,返回1000,1005,2004。通常用于不连贯少量记录查询。 • Select * from cq_action where id like ‘100%’; • 查询cq_action表中id以100开头的记录。

  10. 第二节 基础actiontype讲解 • 我们先来看一下一段正常的npc对白是什么样子的:

  11. 相应的action对应如下:

  12. 下面我们来一步一步看下具体每部分的作用: • (1)101 // 菜单文本。data:显示行数(缺省为0), param=“text”(可选): 显示文本,此类型可包含空格,也可为空行。效果如下: • 一句101最多只能正常显示127字节内容,超出的部分会显示乱码,如下:

  13. (2)102 //菜单超链接。"text task_id align": align(可选): 对齐模式(缺省/0:左对齐; 5:居中; 9:右对齐; a(1-9)b(2-8):不换行,从a/b行宽处开始显示,9为右对齐) 102参数中的空格前部分,程序默认为要显示的文字,空格后部分,程序默认为点击所执行的taskid 像征服这种的选项,不能超过8个,否则客户端会崩溃。

  14. (3)103 // 菜单输入框。"len task_id text": len:可输入的长度;text(可选):显示的文字,align:对齐模式(缺省:文字在左,正整数:输入框嵌入在文字的第几字符处)。★说明:如有多个输入框,由界面用圆按钮区分,每次只上传一个。 • Len没有太大字数限制,适当就好 • Task_id为点击“答”后所执行的 taskid • “我只想”为text内容,可选,最多只能32字节 • 对齐模式暂不支持,一段对话只能显示一条103

  15. (4)104 // 菜单图片。"x y pic_id task_id":task_id(可选):表示图片可以“按”。图片所在区域不显示文本。 • 如果不写104,则效果入下图:

  16. (5)120 // 菜单创建。"cancel_task_id"(可选): 强行关闭菜单时触发的TASK。 • 每段对话都必须以120为结束,它代表的意义是创建了一个完整对话菜单。如果对话后不接120,则对话框无法出现,玩家看到的是就是任务中断或者NPC不对话。如下图的错误范例:

  17. 其它一些使对话框不显示对话的错误: • NPC开始的对话没有接相应的task,而是直接从action开始。 • 错误 • 正确 • Task所接的action_id和action不一致

  18. (6)122 // 随机Action “action0 action1... action7”共8个,随机挑一个执行。 ●参数一定要写满8个,如果不够8个参数,可以重复id或者写0充数 (7)123// data为时间类型 0-检查当前服务器详细时间 "%d-%d-%d %d:%d %d-%d-%d %d:%d"; 1-检查年某天时间"%d-%d %d:%d %d-%d %d:%d", 2-检查月某天时间"%d %d:%d %d %d:%d", 3-检查周某天时间"%d %d:%d %d %d:%d", 4-检查日时间"%d:%d %d:%d", 5-检查小时时间"%d %d"(每个小时的第几分到底几分) 系统自动检测时间介绍: 用2030000—2030199(征服)(2000000—2000199魔域)这个范围的ID来做起始。系统会每分钟检测一次有没有处于这个ID段内的action,如果是检测时间,当返回的值为true时,系统便会执行规定时间内的任务 。

  19. (8)201// 修改或检测任务NPC的属性。"attr opt data npc_id",至少3个参数。如果指定npc_id,该NPC必须在本地图组中。attr可选择"ownerid"(=,==)、"ownertype"(=,==)、"lookface"(=,==)、"data?"(=,+=,==,<,<=,>,>=. )、"datastr"(=,==)、"life"(=)、"maxlife"(=) • 该条只对dynanpc有效 • 征服中可以指定npcid

  20. (9)301// 把npc移动到指定的地图、位置(仅用于固定NPC),data 为指定的npc的ID, param为 "idMap nPosX nPosY" 例子:insert into cq_action values (3513395,3513396,3513396,301,4408,’5000 47 90’); 注意:该语句只能用于固定npc的移动(固定npc指cq_npc表里面的记录),不能用于移动动态npc(动态npc指cq_dynanpc表里面的记录) 修改的npc的坐标不会修改数据库里面的坐标值,服务器重启后npc会回到原始坐标。

  21. (10)、302 //判断指定地图中的用户人数 data 为指定地图ID, param为 “cmd opt data”,// cmd支持“map_user”和“alive_user”, opt可以为“==, <=, >=”,data为数量 ◆ data的mapid可以是mapid,也可以是dynamap的id,但不能进行取值数的填写,如%user_home_id. ◆map_user指的是地图上的总人数(包括鬼魂),alive_user指的是地图上活着的人,鬼魂除外

  22. 例如: • 玩家PK赛结束前去地图中的领奖npc处领奖,npc判断地图1000内是否只有一个玩家,如果是则给玩家奖励并且将玩家传送到地图1001,如果不是则提示玩家PK赛还没有结束。

  23. (11)314 // 放焰火param不带参数。这条action放的是系统默认的普通焰火。 (12)315 //放文字焰火,文字信息在param中,最大不超过8个字节。 只支持四个汉字。

  24. (13)501 // 添加物品。data=itemtype_id, param="amount amount_limit ident gem1 gem2 magic1 magic2 magic3 reduce_dmg add_life anti_monster color" • param可省略,所有缺省值为0(表示不修改) • data不能为0,若为0则执行失败,服务器产生log • 若要修改属性,则要将参数按顺序填写,但只需要改到哪个参数写到哪个参数为止。其中不修改的填0 • 例如:给玩家添加一件一洞极品的玄武神箍。 • INSERT INTO cq_action VALUES (7500185,0,0,501,112989,'0 0 0 255');

  25. (14)502 // 删除物品。data=itemtype_id, 或者param为物品名 (15)503 // 检测物品。data=itemtype_id, 或者param为物品名

  26. (16)506 // 删除多种物品, param为 "idType0 idType1 num",即删除num个idType0-idType1的物品。 (17)507 // 检测多种物品, param为 "idType0 idType1 num",即检测num个idType0-idType1的物品。

  27. 注意: “720001 720010 5”的解释: ①id不需要连贯; ②可以检测同一种物品是否有多个; ③前面一个id一定要比后面一个小

  28. (18)801 // monster被杀死后掉物品或者钱, param "dropitem itemtype"或者"dropmoney money" • Insert into cq_monstertype values (0001,’叫天鸡’,0001,0104,33,00,0006,0005,0000,0000,0036,0000,0000,0000,0000,0001,0006,0000,1000,0500,0001,3,0006,0000,0000,7596900,0500,099,099,099,099,099,099,099,1000000,1001000,0000,0000,0000,0000,10000,01,0,0,100,0); • Insert into cq_action values (7596900,0,0,801,’dropitem 1088000’);

  29. (19)= 1001 // 玩家属性的修改和检查。"attr opt data"。attr可选择 • “life”(+=,==,<)——玩家生命 • “mana”(+=,==,<)——玩家魔法 • “money”(+=,==,<)——玩家游戏币 • “e_money”(+=,==,<)——玩家魔石 • “exp”(+=,==,<)——玩家经验 • “pk”(+=,==,<)——玩家PK值 • “profession”(==, set, >=, <=)——玩家职业 • “level”、(+=,==,<)——玩家等级

  30. (20)1002 // 将玩家的属性加满。"attr"。attr可选"life","mana" (21)1003 // 切地图 param "idMap nPosX nPosY bPrisonChk", bPrisonChk为可选参数,缺省不可以出监狱,设置为1可以出 (22)1004 // 存记录点 param "idMap nMapX nMapY"

  31. (23)1010 // 向玩家发MSGTALK消息。param中为消息内容, data为频道 (24)125 // 全服务器广播文字消息,data为频道,para为内容 • 2002// 动作 • 2003// 队伍 • 2005// 系统 • 2007// 交谈 • 2011// GM频道 • 2105// 打开URL

  32. (25)1025 // 婚姻检查, 已婚返回id_next,未婚返回id_nextfail (26)1026 // 性别检查, 男返回id_next,女返回id_nextfail

  33. (27)1027 // 触发action的人物附加或删除指定特效 • param为“obj effect opt”, obj支持“self”, “couple”, “team”, effect为特效名称, opt支持“add”, “del“(省略) • INSERT INTO cq_action VALUES (7506851,7506860,0000,1027,0,’self firework-2love');

  34. (28)1071 // 设置定时器,倒数记时完成后触发指定的ACTION, 参数为 "delay_time idAction", delay_time单位为秒 (29)126 // 设置定时器,倒数记时完成后触发指定的ACTION, 参数为 "delay_time idAction", delay_time单位为秒 • 注意: • 126是针对服务器的,一个服务器只能同时触发一条;1071是针对玩家的,每个玩家同时只能触发一条。 • 延时同时只能存在一个,如果在延时执行的时候再次触发延时,时间会被重置。

  35. (30)任务统计:1073、1074、1080、1081(征服) • 1073 // 用户统计数据检测,param="stc(event,type) opt data", • // event是统计事件类型,type是统计数据类型, • // opt 支持 " >, >=, == ", data为整数值。 • 1074 // 用户统计数据设置,param="stc(event,type) opt data save",对任务编号进行操作的时候不会影响到stc表的时间,所以如果要对任务时间进行操作请一定用1080和1081来进行。 • // event是统计事件类型, • // type是统计数据类型, • // opt 支持 "+=, = ", • // data为整数值。 • // save为整数,如果不为 0 则存入数据库 • 1080 // 用户统计数据时间戳操作, param = "timestamp(event,type) opr data" • // event是统计事件类型, • // type是统计数据类型, • // opr 支持 "==, >, >=, +=, set", • // data为整数值。如果为0,且操作为(==, >, >=, set),则数据自动替换成当前时间(秒) • 1081 // 用户统计数据时间戳操作, param = "interval(event,type,sort) opr data" • // event是统计事件类型, • // type是统计数据类型, • // sort是时间间隔类型,0为秒,1为天(注意天间隔是决对时间,而不是真实时间差值) • // opr 支持 "==, >, >=", • // data为整数值

  36. 例子: 在npcA处每个玩家每天可以领取一次龙珠。例子: 在npcA处每个玩家每天可以领取一次龙珠。

  37. 任务统计:1080、1081、1082、1086(魔域) • 1080 //data:任务编号, • //param: 'new' (为创建新记录) • //'delete' (删除记录) • // 'isexit' (任务是否存在) • 1081 //data: 任务编号, 若data == -1 ,则下面的操作是针对 findnext 进行的 • //param: 'ope opt data', data(值) • // ope(phase) opt(>=, ==, +=,=) 对任务阶段操作 • //ope(completenum) opt(>=, ==, +=,=) 对任务完成次数操作 • // ope(begintime) opt(>=, ==, +=,=,reset) 对任务开始时间操作, 对于 += 时 以秒为参数;对于“>=,==,=”时以“yyyy-mm-dd hh:mm:ss”为格式。reset表示 将任务的开始时间设置为当前时间 • 1082 //data: 任务编号, • //param: ‘秒数’ , 当前时间与任务开始时间比较的action;若当前时间与任务的开始时间之差 大于 param ,则返回true.否则返回false • 1086 //data: 任务编号, • //param: ‘天数’, 当前时间与任务开始时间比较的action;若当前时间与任务的开始时间之差 大于 param ,则返回true.否则返回false

  38. 例子:在npcA处每个玩家每天可以领取20魔石。 在npcA处每个玩家每小时可以领取20魔石。

  39. (31)2006 // 创建一个MONSTER。param="nOwnerType idOwner idMap nPosX nPosY idGen idType nData szName", 至少7个参数 • // nOwnerType; • // idOwner一般用替代变量设置, 为0时,不存盘; • // idType 为 MONSTER 类型,指向cq_monstertype表的id; • // idMap, nPosX, nPosY 为MONSTER生成的地点; • // generator用于控制怪物活动范围, 即设定基于出生点的范围,指向cq_generator表的id; • // name 为 MONSTER 名字, 如有 accept 则改名; • // nData 为匹配类型, 用于标识某些MONSTER

  40. (32)2007 // 创建一个NPC。param="name type sort lookface ownertype ownerid mapid posx posy life base linkid task0 task1 ... task7 data0 data1 data2 data3 datastr"。至少9个参数。 • 注意: • 创建出来的npc是动态npc,写入cq_dynanpc表(项目不同有所区别); • 动态npc的data字段是可以进行赋值跟检测操作的; • 动态npc不可移动,只能被创建删除

  41. 本次内容到此结束 下次培训内容: • 数据库字段解释; • 如何写脚本; • 脚本编写注意事项。

More Related