Top Banner
任任任任任任任任任
43

任务部脚本程序培训

Mar 15, 2016

Download

Documents

dylan-franks

任务部脚本程序培训. 第一节 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] ’ ; 如果要求显示全部字段则写为: - PowerPoint PPT Presentation
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: 任务部脚本程序培训

任务部脚本程序培训

Page 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]’ ;

Page 3: 任务部脚本程序培训

练习:• 将 cq_generator 表中所有怪物类型( npctype )为 900的记录找出来并按照 id 从大到小的顺序排列。

• Select * from cq_generator where npctype = 900 order by id desc

Page 4: 任务部脚本程序培训

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

Delete from cq_itemtype where name like ‘% 剑 %’;

二、删除语句 (delete) :

Page 5: 任务部脚本程序培训

• 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);

三、插入语句 (insert) :

Page 6: 任务部脚本程序培训

练习:• 往 cq_task 表的 id,id_next,money,sex,team,metempsych

osis 字段中插入数值 1000,1001,0,999,999,0

• Insert into cq_task (`id`,`id_next`,`money`,`sex`,`team`,`metempsychosis`) values (1000,1001,0,999,999,0);

Page 7: 任务部脚本程序培训

• Update语句主要用于更新一条数据库中已经存在的表记录的数据 update table_name set column1=XXX(,column2=XXX) where condition; 例如:将数据库 cq_npc 表中,所有 type 为 2 的 npc , mapid 都改成 1000,lookface 都改成 1002Update 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;

四、更新语句( update ):

Page 8: 任务部脚本程序培训

常用运算符说明

Page 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 的记录,返回值为 1

001 。• 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 开头的记录。

Page 10: 任务部脚本程序培训

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

Page 11: 任务部脚本程序培训

相应的 action 对应如下:

Page 12: 任务部脚本程序培训

下面我们来一步一步看下具体每部分的作用:• ( 1 ) 101 // 菜单文本。 data: 显示行数 ( 缺省为 0), param=“text”

( 可选 ): 显示文本,此类型可包含空格,也可为空行。效果如下:

• 一句 101 最多只能正常显示 127 字节内容,超出的部分会显示乱码,如下:

Page 13: 任务部脚本程序培训

( 2 ) 102 // 菜单超链接。 "text task_id align": align( 可选 ): 对齐模式( 缺省 /0: 左对齐 ; 5: 居中 ; 9: 右对齐 ; a(1-9)b(2-8): 不换行 , 从 a/b 行宽处开始显示 ,9 为右对齐 )

102 参数中的空格前部分,程序默认为要显示的文字,空格后部分,程序默认为点击所执行的 taskid

像征服这种的选项,不能超过8 个,否则客户端会崩溃。

Page 14: 任务部脚本程序培训

( 3 ) 103 // 菜单输入框。 "len task_id text": len: 可输入的长度;text( 可选 ) :显示的文字, align :对齐模式 ( 缺省:文字在左,正整数:输入框嵌入在文字的第几字符处 ) 。★说明:如有多个输入框,由界面用圆按钮区分,每次只上传一个。

• Len没有太大字数限制,适当就好 • Task_id 为点击“答”后所执行的 taskid

• “ 我只想”为 text 内容,可选,最多只能 32 字节 • 对齐模式暂不支持,一段对话只能显示一条 103

Page 15: 任务部脚本程序培训

( 4 ) 104 // 菜单图片。 "x y pic_id task_id" : task_id( 可选 ) :表示图片可以“按”。图片所在区域不显示文本。

• 如果不写 104 ,则效果入下图:

Page 16: 任务部脚本程序培训

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

Page 17: 任务部脚本程序培训

其它一些使对话框不显示对话的错误:

• NPC 开始的对话没有接相应的 task ,而是直接从 action 开始。• 错误

• 正确

• Task 所接的 action_id和 action 不一致

Page 18: 任务部脚本程序培训

( 6 ) 122 // 随机 Action “action0 action1... action7”共 8 个,随机挑一个执行。

( 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时,系统便会执行规定时间内的任务 。

●参数一定要写满 8 个,如果不够 8 个参数,可以重复 id 或者写 0充数

Page 19: 任务部脚本程序培训

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

• 该条只对 dynanpc有效 • 征服中可以指定 npcid

Page 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会回到原始坐标。

Page 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指的是地图上活着的人,鬼魂除外

Page 22: 任务部脚本程序培训

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

Page 23: 任务部脚本程序培训

( 11 ) 314 // 放焰火 param 不带参数。这条 action放的是系统默认的普通焰火。

( 12 ) 315 //放文字焰火,文字信息在 param 中,最大不超过 8个字节。 只支持四个汉字。

Page 24: 任务部脚本程序培训
Page 25: 任务部脚本程序培训
Page 26: 任务部脚本程序培训

( 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');

Page 27: 任务部脚本程序培训

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

Page 28: 任务部脚本程序培训

( 16 ) 506 // 删除多种物品 , param 为 "idType0 idType1 num" ,即删除 num 个 idType0-idType1 的物品。

( 17 ) 507 // 检测多种物品 , param 为 "idType0 idType1 num" ,即检测 num 个 idType0-idType1 的物品。

Page 29: 任务部脚本程序培训

注意:

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

Page 30: 任务部脚本程序培训

( 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’);

Page 31: 任务部脚本程序培训

( 19 ) = 1001 // 玩家属性的修改和检查。 "attr opt data" 。 attr 可选择

• “life”(+=,==,<)——玩家生命• “mana”(+=,==,<)——玩家魔法• “money”(+=,==,<)——玩家游戏币• “e_money”(+=,==,<)——玩家魔石• “exp”(+=,==,<)——玩家经验• “pk”(+=,==,<)——玩家 PK 值• “profession”(==, set, >=, <=)——玩家职业• “level” 、 (+=,==,<)——玩家等级

Page 32: 任务部脚本程序培训

( 20 ) 1002 // 将玩家的属性加满。 "attr" 。 attr 可选 "life","mana"

( 21 ) 1003 // 切地图 param "idMap nPosX nPosY bPrisonChk", bPrisonChk 为可选参数,缺省不可以出监狱,设置为 1 可以出

( 22 ) 1004 // 存记录点 param "idMap nMapX nMapY"

Page 33: 任务部脚本程序培训

( 23 ) 1010 // 向玩家发MSGTALK消息。 param 中为消息内容 , data 为频道( 24 ) 125 // 全服务器广播文字消息, data 为频道, para 为内容

• 2002// 动作• 2003// 队伍• 2005// 系统• 2007// 交谈• 2011// GM频道• 2105// 打开 URL

Page 34: 任务部脚本程序培训

( 25 ) 1025 // 婚姻检查 , 已婚返回 id_next ,未婚返回 id_nextfail

( 26 ) 1026 // 性别检查 , 男返回 id_next ,女返回 id_nextfail

Page 35: 任务部脚本程序培训

( 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');

Page 36: 任务部脚本程序培训

( 28 ) 1071 // 设置定时器,倒数记时完成后触发指定的 ACTION , 参数为 "delay_time idAction", delay_time 单位为秒

( 29 ) 126 // 设置定时器,倒数记时完成后触发指定的 ACTION , 参数为 "delay_time idAction", delay_time 单位为秒

• 注意:• 126 是针对服务器的,一个服务器只能同时触发一条; 1071 是针对玩家的,每个玩家同时只能触发一条。• 延时同时只能存在一个,如果在延时执行的时候再次触发延时,时间会被重置。

Page 37: 任务部脚本程序培训

( 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 为整数值

Page 38: 任务部脚本程序培训

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

Page 39: 任务部脚本程序培训

任务统计: 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

Page 40: 任务部脚本程序培训

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

在 npcA 处每个玩家每小时可以领取 20魔石。

Page 41: 任务部脚本程序培训

( 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

Page 42: 任务部脚本程序培训

( 32 ) 2007 // 创建一个 NPC 。 param="name type sort lookface ownertype ownerid mapid posx posy life base linkid task0 task1 ... task

7 data0 data1 data2 data3 datastr" 。至少 9 个参数。• 注意:• 创建出来的 npc 是动态 npc ,写入 cq_dynanpc 表(项目不同有所区别);• 动态 npc 的 data 字段是可以进行赋值跟检测操作的;• 动态 npc 不可移动,只能被创建删除

Page 43: 任务部脚本程序培训

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