藏宝游

 找回密码
 立即注册
查看: 2567|回复: 1

[单机wy] 天晴魔域脚本程序员培训文档

[复制链接]

 成长值: 740

  • TA的每日心情
    开心
    2024-3-24 02:35
  • 签到天数: 5 天

    [LV.2]圆转纯熟

    灌水成绩
    47583
    8
    248166
    主题
    帖子
    积分

    等级头衔

    ID : 2

    超级版主

    积分成就 威望 : 1
    贡献 : 0
    杰币 : 105399
    在线时间 : 165 小时
    注册时间 : 2022-1-8
    最后登录 : 2024-4-17

    荣誉勋章
    最佳新人热心会员大富翁龙年大吉
    发表于 2022-3-26 15:18:40 | 显示全部楼层 |阅读模式
    本帖最后由 那爱 于 2022-3-26 15:57 编辑

    第一节  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]’ ;

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


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

    二、删除语句(delete):
    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 ‘%剑%’;

    三、插入语句(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);

    练习:
    往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);

    四、更新语句(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;

    常用运算符说明
    图片1.png
    图片2.png
    以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开头的记录。

    第二节    基础actiontype讲解
    我们先来看一下一段正常的npc对白是什么样子的:
    图片3.png
    图片4.png
    相应的action对应如下:
    图片5.png
    下面我们来一步一步看下具体每部分的作用:
    (1)101 // 菜单文本。data:显示行数(缺省为0), param=“text”(可选): 显示文本,此类型可包含空格,也可为空行。效果如下:
    图片6.png
    一句101最多只能正常显示127字节内容,超出的部分会显示乱码,如下:
    图片7.png
    (2)102 //菜单超链接。"text task_id align": align(可选): 对齐模式(缺省/0:左对齐; 5:居中; 9:右对齐; a(1-9)b(2-8):不换行,从a/b行宽处开始显示,9为右对齐)
    图片8.png
    102参数中的空格前部分,程序默认为要显示的文字,空格后部分,程序默认为点击所执行的taskid
    像征服这种的选项,不能超过8个,否则客户端会崩溃。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    (23)1010        // 向玩家发MSGTALK消息。param中为消息内容, data为频道
    (24)125        // 全服务器广播文字消息,data为频道,para为内容
    2002// 动作
    2003// 队伍
    2005// 系统
    2007// 交谈
    2011// GM频道
    2105// 打开URL
    (25)1025        // 婚姻检查, 已婚返回id_next,未婚返回id_nextfail
    (26)1026        // 性别检查, 男返回id_next,女返回id_nextfail
    (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');
    图片20.png
    (28)1071        // 设置定时器,倒数记时完成后触发指定的ACTION, 参数为 "delay_time idAction", delay_time单位为秒
    (29)126        // 设置定时器,倒数记时完成后触发指定的ACTION, 参数为 "delay_time idAction", delay_time单位为秒
    注意:
    126是针对服务器的,一个服务器只能同时触发一条;1071是针对玩家的,每个玩家同时只能触发一条。
    延时同时只能存在一个,如果在延时执行的时候再次触发延时,时间会被重置。
    (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为整数值

    例子:在npcA处每个玩家每天可以领取一次龙珠。
    图片21.png
    图片22.png
    任务统计: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

    例子:在npcA处每个玩家每天可以领取20魔石。
    图片23.png
    在npcA处每个玩家每小时可以领取20魔石。
    图片24.png

    (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

    (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不可移动,只能被创建删除
  • TA的每日心情

    2022-8-4 12:33
  • 签到天数: 29 天

    [LV.4]渐入佳境

    灌水成绩
    0
    74
    318
    主题
    帖子
    积分

    等级头衔

    ID : 575

    中级会员

    积分成就 威望 : 0
    贡献 : 0
    杰币 : 244
    在线时间 : 6 小时
    注册时间 : 2022-6-11
    最后登录 : 2022-8-4

    荣誉勋章
    发表于 2022-6-13 09:44:37 | 显示全部楼层
    这个可是好东西,存钱来买
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    小黑屋|手机版|Archiver|RSS|藏宝游 ( 豫ICP备2021017492号 )|网站地图

    GMT+8, 2024-5-18 12:17 , Processed in 0.059210 second(s), 14 queries , Redis On.

    Powered by Discuz! X3.4

    本站不储存任何资源,所有资源均来自用户分享的网盘链接。
    本站为非盈利性站点,不会收取任何费用,所有内容不作为商业行为。

    快速回复 返回顶部 返回列表