马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
一、服务端读写sql语句教学,可通过脚本添加功能
1、数据添加(就是在game1库中,你可以自己建一个表,通过脚本写入数据,用于记录积分等)
#ACT
mov A8 %username
FormatStr "'%s',%s,%s" %A8 1 0
;;;;解释:%s是数据库中的参数,你想写几个数据,就写几个%s,sql会按顺序写,%A8是指变量A8,1就是一个值,字符串要加 ‘ ’
;;;;formatstr的作用,有一个默认变量A9,就是把后边的字符串更新到A9,再通过%A9读取
mov A7 %A9 ;;;为了下面还能用A9这个变量,把A9换到A7去
FormatStr "FLD_SINUSERNAME='%s'" %A8 ;;;这是写入条件,其实没什么用
mov A6 %A9 ;;;;这句意思同上面的
WriteValueSql "TBL_SinGiSunQuest" %A6 "FLD_SINUSERNAME,FLD_SINMAINSTEP,FLD_SINSTEP_READY" %A7
;;;写入数据解释:向某库(测game1可以,k库和h库没试,一个库就够用)的TBL_SinGiSunQuest表中,%A6("FLD_SINUSERNAME='%s'" )
;;就是添加字段FLD_SINUSERNAME= 用户名 的FLD_SINUSERNAME=用户名,FLD_SINMAINSTEP=1,FLD_SINSTEP_READY=0
2、更新数据库
FormatStr "FLD_SabukUserName='%s'" %A8
Mov A6 %A9
UpdateValueSQL "TBL_SabukGuildQuest" "FLD_SabukQuest='SabukQuest'" %A6
;更新TBL_SabukGuildQuest表,"FLD_SabukQuest='SabukQuest'"这是条件,自己定义
;;;%A6("FLD_SabukUserName='%s'" %A8)变更FLD_SabukUserName的值为%A8(内容参照mov)
3、读取数据库并传递
[@SearchingUser_SinGiSun]
#IF
#ACT
FormatStr "FLD_SINUSERNAME='%s'" %A8
Mov A6 %A9
ReadValueSql "TBL_SinGiSunQuest" %A6 "FLD_SINUSERNAME,FLD_SINMAINSTEP,FLD_SINSTEP_READY" [@SearchingUser_SinGiSun_0]
;;读取TBL_SinGiSunQuest表中,符合"FLD_SINUSERNAME='%s'" %A8条件的"FLD_SINUSERNAME,FLD_SINMAINSTEP,FLD_SINSTEP_READY"传递给
;; [@SearchingUser_SinGiSun_0]
[@SearchingUser_SinGiSun_0()] ;后边加了(),就是带参数的
#IF
#ACT
Mov A1 %ARG(1)
Mov D1 %ARG(2)
Mov D2 %ARG(3)
;3个参数分别给A1、D1、D2
;下边这些数据干什么用,自己思考吧
二、脚本命令读写文本文件,可以存储一些数据
1、文本的读取,首先你要在服务端有这个文件
LoadValue A0 "GM_Def\QT_TODAY\200Reward.txt" [201] [Reward_Race_1_Type1_1]
意义解释:读取文件夹d:\Mud3\Envir\下,GM_Def\QT_Today\200reward.txt里面的数据
数据格式:
;;200Reward.txt 第一行,脚本是读不到的,所有的txt文件第一行都会是注释
[201]
Reward_Race_1_Type1_1 = 银蛇
Reward_Amount_1_Type1_1 = 1
那么上边的读取,就得到“银蛇”,赋值给A0了
give %A0 1 就是给你一个银蛇的脚本
2、文本的写入,也是要先建一个文件,而且文件里面要根据上边的格式
写入脚本:
mov A9 "屠龙"
SAVEVALUE "GM_Def\QT_TODAY\200Reward.txt" [201] [Reward_Race_1_Type1_1] %A9
意思解释:
先给a9(这个可以挑A0~A9)
然后在 "GM_Def\QT_TODAY\200Reward.txt" 下面[201]列表下的[Reward_Race_1_Type1_1]的值改为"屠龙"
三、如何定时刷npc的脚本,可以修复影魅之刃任务
首先,要研究沙巴克开战的npc移动,要会移动npc
[@CastleWarStart]
{
#ACT
ResetMapAttr "3"
lineMsg [Grobal] " 沙巴克攻城战开始了。"
lineMsg [Grobal] " 沙巴克的部分商人已经到毒蛇山谷或道馆避难了。"
movenpc "3,195,183,老胡" 2 350 219
movenpc "3,229,150,双喜" 2 343 234
movenpc "3,204,196,晶晶" 2 335 223
movenpc "3,229,168,园老板" 2 362 226
movenpc "3,211,183,多多" 2 350 233
movenpc "3,289,513,敏贞" Z011 10 7
movenpc "3,75,516,在奎" Z011 10 8
movenpc "3,83,140,完美" Z011 10 9
movenpc "3,198,180,啊翔" Z011 10 10
;;movenpc "3,210,130,怪物租赁商" Z011 10 11
movenpc "3,203,197,俞公" Z011 10 12
movenpc "3,165,190,沙巴克旗帜(左上)" Z011 9 7
movenpc "3,170,195,沙巴克旗帜(左下)" Z011 9 8
movenpc "3,233,196,沙巴克旗帜(正左)" Z011 9 9
movenpc "3,238,190,沙巴克旗帜(正右)" Z011 9 10
movenpc "3,240,123,沙巴克旗帜(右下)" Z011 9 11
movenpc "3,236,119,沙巴克旗帜(右上)" Z011 9 12
}
以上是沙巴克攻城时候,移动npc的代码;
那么,你如果想在某个地图在规定的时间刷npc,就先新建一个地图,属于gm才能进入的,其他玩家无法进入的地方,比如z010
在00Default.txt中,有一个天气变更的代码:goto @weather_control_sabuk
内容是:
[@Weather]
{
#ACT
goto @ConfirmWeather_Bichon
;变更比奇天气
[@ConfirmWeather_Bichon]
#IF
!DayTime Day
#ACT
movr P0 20
Inc P0 1
#ELSEACT
Delaygoto [Grobal] 3600 @ConfirmWeather_Bichon
break
#IF
Equal P0 1
#ACT
ChangeMapAttr "0,01,02" "Rain"
Delaygoto [Grobal] 3600 @ConfirmWeather_Bichon
break
#IF
Equal P0 2
#ACT
ChangeMapAttr "0,01,02" "Fog"
Delaygoto [Grobal] 3600 @ConfirmWeather_Bichon
break
#IF
#ACT
ChangeMapAttr "0,01,02" "Clean"
Delaygoto [Grobal] 10800 @ConfirmWeather_Bichon
;这是一个循环,用于控制比奇天气,如果是白天晴天,就10800秒后变更
;如果是雨,3600秒后变更,看movr P0 20,是随机出现一个数1~20之间,Equal P0 2如果随机值是2,执行.....
以上脚本看懂以后,可以加一句
#IF
HOUR 20 20
min 55 59
DAYOFWEEK FRI
#ACT
移动npc到指定地图
delaygoto [grobal] 10 @循环
#else
#act
移动npc到gm地图
这样,系统10秒钟判断一次,如果是星期五的20:55~59之间,npc出现,如果不是,npc就不在
另外,再学习添加一个变量,如果这个值是1,就移动npc到指定地图,到了时间,npc移动到gm地图后,这个值再变为0,这样就不用10秒刷一次npc了,具体的执行,可以添加文本读写脚本,写一个值
提醒:npc移动过去了,一定要写个脚本再移回来,不然下次就没得移了
|