产品导航:仙境传说制作 | 石器私服制作 | 服务器租用 | 发布网制作 | 网游单机版联机
  • 首 页
  • 仙境传说
  • 石器时代
  • 网络资料
  • 网站新闻
  • 机房介绍

RO私服 > 仙境传说 > 正文

RO脚本基础知识
发布时间:10/10/11 阅读次数: 出处/作者:admin 在线投稿

脚本基础知识1

一、如何添加自己制作的NPC
做一个脚本放到npc目录里面
如:商人.txt
然后在map_athena里面添加相对路径和文件名,相对路径是指以map-server.exe所在文件夹内的文件夹名称。

举例:
运行NPC脚本设置(不需要运行的脚本在npc前输入表示关闭)
npc: npc\商人.txt
npc: npc\npc1\商人1.txt
npc: npc\npc1\npc2\商人2.txt

二、如何设定NPC
基本格式:
地图名称,横坐标,纵坐标,面对方向     类型     名称     造型,

类型:     shop:商店。script:脚本
造型代码参考NPC造型图示,若造型代码为-1表示为事件,可以被其他命令调用
商店的造型不可为-1。
NPC面对方向的设定,以小地图方向为准
2 1 8
3 X 7
4 5 6


三、NPC类型举例
商店:
prontera.gat,167,204,6 shop 特惠店     96,501:20,502:30
上例NPC被点击后出现一个卖红,黄药水的商店。

脚本程序:
prontera.gat,167,204,6 script 测试脚本     96,{
mes "脚本例子";
close;
}
上例NPC被点击后出现一个内容为“脚本例子”的窗口。

范围内激活脚本程序:
prontera.gat,167,204,6 script 测试脚本     96,10,10,{
mes "脚本例子";
close;
}
上例NPC在玩家进入其坐标上下左右各10的范围内将出现一个内容为“脚本例子”的窗口。被点击也可执行,最大激活范围为20。

其他类型的NPC留意后面的帮助

四、脚本编制基础
脚本在定义完NPC后,写在{}内,参考上面的脚本范例
脚本程序主要由语句和标签组成。

语句用于执行各种命令,每执行完一行顺序执行下一行。
每一行语句以“;”结束。

标签用于脚本内某段开始执行,可以使用菜单或者条件判断语句进行跳转到标签。
标签名称后用“:”作为标记。注意,标签名称区分大小写!!

脚本程序中可对各种变量进行判断和操作,变量有服务端程序内置的系统变量以及规范化的自定义变量
系统变量可参考ATHENA的db文件夹中的CONST.TXT。

下面列举说明部分系统变量,使用自定义变量的时候必须注意不得与其冲突,因为系统变量具有绝对优先权。
StatusPoint     属性点数
BaseLevel     基本等级    
SkillPoint     技能点数
Class         职业
Zeny         金钱
Sex         性别
Weight         当前负重
MaxWeight     最大负重
JobLevel     职业等级
BaseExp         基本经验值
JobExp         职业经验值
NextBaseExp     基本等级升至下一级所需经验值
NextJobExp     职业等级升至下一级所需经验值
Hp         当前生命值HP
MaxHp         最大生命值HP
Sp         当前法力值SP
MaxSp    &nb判断语句后,也可以单独使用。

5、if 条件判断指令
if(@value==1) goto L_YES;
如果@value=1,跳转到L_YES,否则继续执行下一行。
用于判断的条件必须放置在()之中。
常用的比较符号
<:小于
>:大于
==:等于
!=:不等于
>=:大于或等于
<=:小于或等于
多个条件判断
||:或
&&:和

if (@value1==1 || @value2==1) goto L_YES;
如果@value1=1或者@value2=1满足其中一个条件跳转到L_YES

if (@value1==1 && @value2==1) goto L_YES;
需要@value1=1以及@value2=1同时满足条件跳转到L_YES

6、end 结束指令
end;
强制结束脚本运行

二、输入输出
1、mes 发送消息
mes "你好";
在NPC对话框中显示“你好”
mes @value;
在NPC对话框中显示“@value”的值
mes @value1+@value2;
在NPC对话框中显示“@value1+@value2”的值
mes @value+"你好";
在NPC对话框中显示“@value”的值后加上“你好”

2、input 输入命令
input @value;产生一个输入框让玩家输入,输入的内容赋值在@value变量中
变量可以是数字,也可以是字符,参考前面的变量定义

3、announce 广播命令
announce "你好",15;
在服务器内用黄色字体广播“你好”
广播命令,可以控制广播内容和广播颜色字符后的数值可以从0-31,具体参考下表
1 表示黄色字体,仅当前地图可见
2 表示黄色字体,人物周围范围可见,具体范围大小不明
3 表示黄色字体,仅本人可见
0,15 效果相同, 表示黄色字体,全服务器人可见
17 表示蓝色字体,仅当前地图可见
18 表示蓝色字体,人物周围范围可见,具体范围大小不明
19 表示蓝色字体,仅本人可见
16,31 效果相同,表示蓝色字体,全服务器可见

4、mapannounce 地图广播
mapannounce "prontera.gat","你好",15;
在普隆德拉地图内内用黄色字体广播“你好”

5、areaannounce 局部广播
areaannounce "prontera.gat",100,100,10,10,"你好",3;
在普隆德拉地图坐标X100Y100,X+-10,Y+-10的区域内内用黄色字体广播“你好”
区域广播,可以使得特定区域的玩家看到系统消息

三、注意事项
1、goto语句后的标签是区分大小写的,若出错则会使map-server死掉,且不会自动重启。
2、一行显示一般为37个字符,超出的话会自动滚屏增加一行。
3、^123456为色彩定义,用16进制表示,顺序为红绿蓝三原色,
每2个定义一种颜色,FF为最亮,00为最暗。色彩定义必须放置在""之中,
而且只能在mes 后的消息中使用。

请阅读以下范例,以加强对基本流程及mes语句使用方法的了解。
例1,发钱的hack
// 里面有几个命令是偶们还没有学过的,不过没有关系,很容易理解,
// delitem 2278,1; 表示删除2278号物品1个
// set Zeny,Zeny+200000; 表示增加200000块钱
// 特别需要注意的是你的Goto语句,如果出现错误可能会使服务器当机,特别要注意大小写
prontera.gat,155,174,4 script 发钱的hack 706,{
mes "[发钱的hack]";
mes "嘿嘿!哇呀呀!";
mes "我是^5577FF发钱的hack^000000。";
mes "我愿意拿钱和你换一些东西。";
next;
menu "询问 ^3355FF笑脸面具^000000 换钱的一些信息",Case1,"拿 ^3355FF笑脸面具^000000 换钱",Case2,"拿 ^3355FF兔耳发圈^000000 换钱",Case4,"取消",Case3;
Case1:
mes "[发钱的hack]";
mes "你有笑脸面具吗? ";
mes "我朋友^5577FF乖宝宝^000000想要几个面具来玩。";
mes "可是我没有材料去制作啊。";
mes "你有已经制成的面具吗?";
mes "我可以拿很多钱跟你换哦!";
next;
mes "[发钱的hack]";
mes "制作^3355FF笑脸面具^000000";
mes "需要搜集一些物品.";
mes "你如果能搜集到这些材料";
mes "就可以去找微笑小姐做成笑脸面具";
mes "下面是制作^3355FF笑脸面具^000000所需要的一些道具.";
next;
mes "[发钱的hack]";
mes "10个^3355FF杰比勒结晶^000000";
mes "10个^3355FF毛^000000";
mes "10个^3355FF三叶幸运草^000000";
next;
mes "[发钱的hack]";
mes "做好了拿来给我,我就给你大把大把的钱! ";
close;
Case2:
if(countitem(2278)<1) goto Case2NOT;
mes "[发钱的hack]";
mes "哈哈,^5577FF乖宝宝^000000一定会很高兴的~:)";
mes "那么^3355FF笑脸面具^000000。我拿走了!.";
next;
delitem 2278,1;
set Zeny,Zeny+200000;
mes "[发钱的hack]";
mes "拿好咯!";
mes "这里是答应你的^5577FF200000Z^000000";
mes "如果你还有笑脸面具,还可以拿过来和我换。";
mes "好东西我不嫌多!";
close;
Case2NOT:
mes "[发钱的hack]";
mes "我";
next;
mes "[发钱的hack]";
mes "要";
next;
mes "[发钱的hack]";
mes "笑";
next;
mes "[发钱的hack]";
mes "脸";
next;
mes "[发钱的hack]";
mes "面";
next;
mes "[发钱的hack]";
mes "具";
close;
//狸猫的猫耳发圈掉落率是2
Case4:
if(countitem(2214)<1) goto Case4NOT;
mes "[hack]";
mes "哈哈,高兴~:)";
mes "那么^3355FF兔耳发圈^000000。我拿走了!.";
next;
delitem 2214,1;
set Zeny,Zeny+20000000;
mes "[发钱的hack]";
mes "拿好咯!";
mes "这里是答应你的^5577FF20000000Z^000000";
mes "如果你还有兔耳发圈,还可以拿过来和我换。";
mes "好东西我不嫌多!";
close;
Case4NOT:
mes "[发钱的hack]";
mes "我";
next;
mes "[发钱的hack]";
mes "要";
next;
mes "[发钱的hack]";
mes "的";
next;
mes "[发钱的hack]";
mes "是";
next;
mes "[发钱的hack]";
mes "兔";
next;
mes "[发钱的hack]";
mes "耳";
next;
mes "[发钱的hack]";
mes "发";
next;
mes "[发钱的hack]";
mes "圈";
close;
Case3:
mes "[发钱的hack]";
mes "再见,再见";
next;
mes "[发钱的hack]";
mes "白白,白白";
close;
}

 

 

脚本基础知识3

属性相关指令

1、jobchange 职业变更
jobchange 0;
转职成初心者
职业代码表
0:初学者 7:骑士   14:十字军
1:剑士   8:牧师   15:武僧
2:法師   9:魔法师 16:贤者
3:弓箭手 10:铁匠 17:流氓
4:服士   11:猎人 18:炼金术士
5:商人   12:刺客 19:诗人
6:盗賊   13:骑士 20:舞者
21:十字军22.结婚造型 23.超级初心者

jobchange 0,1;
转职为进阶初学者
后面的1为附加职业代码,
0:普通职业
1:进阶职业
2:子嗣职业(被认养后的职业,尚未开放)

2、setlook 设置形象
设置发型、发色、衣服颜色命令
具体可以看一下现有脚本

3、set 赋值命令
set @value,1;将1赋值到@value
可以给自定义变量或系统变量赋值
变量的定义方式参考第一篇

4、cutin 绘图命令
cutin "kafra_02",2;
显示指定的图片在右下角
显示NPC的大图片,比如卡普拉那些漂亮MM
0、左下
1、中下
2、右下
3、未知.........
4、中间可移动和关闭
255、清除


5、heal 回复命令
heal 100,100;
回复100HP、100SP
按数值回复

6、percentheal 回复命令
percentheal 100,100;
回复HP100%、SP100%
按比例回复

7、checkweight 重量检查
if (checkweigh(502,100) > 1) goto L_YES;
具体用法不明
两个参数分别为:物品代码和数量,
命令作用是检查拿了这些物品后是否超重,
若超重则返回0,否则返回1

8、readparam 读取参数
支持的变量在const.txt中说明

9、strcharinfo 人物信息读取
strcharinfo(0),
返回值为人物名称
0、角色名
1、队伍名
2、工会名

9.5、getcharid() 人物ID读取
0、角色charid
1、队伍ID
2、工会ID

10、bonus 附加效果
bonus bVit,3;
附加VIT 3点
bonus2 bAddRace,6,50;
附加不死属性抗性+50%
bonus3 "iiii"
未知用法

11、skill 学习技能
参数为:技能代码,等级,(标识1)
例如:skill 140,1,0;
学习第140号技能,等级为1,技能代码参看skill_db

12、getskilllv 获取技能等级
例如:getskilllv(142)
返回142号技能的等级

13、basicskillcheck "*"
读取battle_athena.conf中basic_skill_check项的值,并返回
未知用法

14、setoption 设置状态
setoption 0;
回复普通,无任何特殊状态无手推车无鹰无骑鸟
设置状态,参数请参考GM命令@option的Z项
在实际使用中,需要注意的是,状态可以叠加
例如:setoption 3;3=1+2,于是结果就是火狩+隐匿
1 火狩
2 隱暱
4 隱身
8 手推車
16 带老鹰
32 骑鸟
64 隱身

15、sc_start "iii"
特殊状态开启
三个参数分别为:类型,参数1(技能等级),参数2(暂时未用)
例如

sc_start SC_FREEZE,1,0; //变成冰冻状态
支持的状态表另外再发,可以先参看skill_db,状态都是把_前面改成SC

16、sc_end "i"
特殊状态关闭

17、resetstatus
resetstatus;
重置所有属性点

18、resetskill
resetskill;
重置所有技能点

19、changebase "i"
改变人物显示的职业,但实际职业不变,可用于结婚系统
如:changebase 22; //变成结婚人物形象

20
statusup i
statusup2 ii
参数提升指令(str,vit,agi,dex,agi,luk)
statusup bStr; 参数提升1点
statusup bStr,10;参数提升10点
bStr,bAgi,bVit,bInt,bDex,bLuk其他可查看const.txt

例1:重置辅助人员(已包括在npc目录中)
//By GeisHa
prontera.gat,146,192,4 script 重置辅助人员 763,{
mes "[重置辅助人员]";
mes "我专门负责重置点数";
mes "你想重置什么呢?";
next;
menu "^FF3355技能点(费用50w)^000000",L1,"^FF3355属性点(费用50w)^000000",L2,"^FF3355技能点和属性点(费用80w)^000000",L3,"取消",LEnd;

L1:
if (Zeny<500000) goto NeedZenys;
mes "[重置辅助人员]";
mes "已经重置好了";
mes "^FF3355请好好分配^000000";
set Zeny,Zeny-500000;
resetskill;
close;
L2:
if (Zeny<500000) goto NeedZenys;
mes "[重置辅助人员]";
mes "已经重置好了";
mes "^FF3355请好好分配^000000";
set Zeny,Zeny-500000;
resetstatus;
close;
L3:
if (Zeny<800000) goto NeedZenys;
mes "[重置辅助人员]";
mes "已经重置好了";
mes "^FF3355请好好分配^000000";
set Zeny,Zeny-800000;
resetstatus;
resetskill;
close;
NeedZenys:
mes "[重置辅助人员]";
mes "穷人不要来凑热闹!影响我做生意";
close;
LEnd:
close;
}
 



关键字:
上一篇:仙境传说多用户玩家注册方法 下一篇:RO更新方法

业务咨询与投诉电话:



ro单机版


私服发布程序

Copyright 2008-2010 RO私服 All Rights Reserved
本站提供程序以及所有资料,仅供爱好者娱乐和研究,如使用非法用途,后果自负。