UID9498
阅读权限30
威望 点
积分204
注册时间2011-4-13
最后登录1970-1-1
听众
收听
升级
1.33%
|
楼主 |
发表于 2011-4-17 10:15:17
|
显示全部楼层
继续。。。
【教程】脚本基础知识介绍--part2
附加参考材料:
一、类C语言语法:
if-else if-else结构
作用:条件判断
格式: if( <cond> ) <cmd_1> [ [else if(<cond_n>) <cmd_n> ]* else <cmd_z>]
说明: 如果<cond>为真则执行<cmd_1>部分的代码,并结束if结构。
否则如果后面带有"else if(<cond_n>)"的话,则从上至下依此判断,如果为真则执行<cmd_n>,并结束if结构。
最后,如果之前的条件都不满足的话,则执行"else"后面的代码(如果有的话)。
<cmd_n>能用{ , }组成语句块。
<例>
// 如果@input变量为0,则跳到HOGE标签继续执行。
if(@input == 0) goto HOGE;
// 如果@input变量为0,则跳到HOGE标签继续执行,否则跳到FUGA标签继续执行。
if(@input == 0) goto HOGE; else goto FUGA;
if(@input == 0)
mes "zero";
else if(@input == 1)
mes "one";
else if(@input == 2) {
mes "two";
} else {
mes "??unknown";
mes "请输入0,1,2这3个值的其中一个。";
}
如果if后没有括号,则只执行紧接其后的语句;如果有括号块,则执行块中的所有语句。
if(@temp <= 1) if(@temp <= 0) mes "<= 0"; else mes "1"; else mes ">= 2";
和
if(@temp <= 1) { if(@temp <= 0) mes "<= 0"; else mes "1"; } else mes ">= 2";
以相同的方法处理。
________________________________________
for循环
作用:循环执行代码
格式: for(initialization;test;action)
statement;
说明: initialization语句是用来初始化counter的值,或是为循环作好准备。
test语句可以是任何表达式,在每次进入循环时都要对它进行测试。
如果test为真,就执行for循环体,然后执行action语句(通常是对counter进行自增运算)。
<例>
for(set @i,0;@i < 5;set @i,@i+1) mes @i;
for(set @i,0;@i < 5;set @i,@i+1) {
mes @i;
next;
}
________________________________________
do-while结构
作用:循环执行代码
格式: do <cmd> while(<val>);
说明: 和"<cmd> while(<val>) <cmd>;"的语法相同,但是do...while会先执行一次<cmd>的代码。
当<val>为真则继续执行<cmd>。
________________________________________
switch-case结构
作用:多值判断
格式: switch(<val_1>) { [case <val_n>: ....] [ default: ...] }
说明: 判断<val_1>的值,如果和<val_n>一致,则跳到case <val_n>的地方执行;如果都没有匹配,则执行default后的代码。
跳到case <val_n>执行完代码后并不会退出switch块,要退出switch块请使用break;命令。
<例>
switch(@temp) {
default: mes("unknown FALLTHRU"); // 因为没有"break",所以会继续执行代码
case 0: mes("零"); break;
case 1: mes("一"); break;
case 2: mes("二 FALLTHRU"); // 因为没有"break",所以会继续执行代码
case 3: mes("三"); break;
case 4: mes("四"); break;
case 5: mes("五"); break;
}
________________________________________
break命令
作用:退出循环
格式: break;
说明: 强制退出for , while , switch , do - while循环。
________________________________________
continue命令
作用:终止本次循环
格式: continue;
说明: 终止for , while , do - while的本次循环,进入下一次循环。
________________________________________
function命令
作用:在同一脚本内声明/定义函数
格式: function hoge; // 函数声明
function hoge { // 函数定义
mes getarg(0);
}
hoge "fuga"; // 调用函数
说明: 调用未声明的函数将出错
二、事件/特殊标签一览表
事件/特殊标签 格式 说明
OnInit OnInit: 当脚本加载后执行(包括reload)
OnInterIfInit OnInterIfInit: Map连接到Char服务器时执行的事件
OnInterIfInitOnce OnInterIfInitOnce: Map连接到Char服务器时执行的事件 (只执行一次,Map重连到Char服务器时不执行)
OnSecond OnSecondSS: 每分钟的SS秒执行的事件
OnMinute OnMinuteMM: 每小时的MM分钟执行的事件
OnClock OnClockHHMM: 每天的HH时MM分执行的事件
OnHour OnHourHH: 每天的HH时执行的事件
OnWeekTime或On OnWeekTimeDDHHMM:或OnDDHHMM: 星期DD(00-日、01-一…06-六)的HH时MM分执行的事件
OnDateTime OnDateTimeMMDDHHMM: MM月DD日HH时MM分执行的事件
OnDayTime OnDayTimeDDHHMM: DD日HH时MM分执行的事件
OnDay OnDayMMDD: MM月DD日执行的事件
OnTimer OnTimerX: NPC计时器经过X毫秒时执行的事件
OnAgitInit OnAgitInit: 在服务器请求公会城堡的相关信息时执行的事件。用于初始化与公会城堡相关的NPC。
OnAgitStart OnAgitStart: 公会战开始时执行的事件
OnAgitEnd OnAgitEnd: 公会战结束时执行的事件
OnAgitStart2 OnAgitStart2: 公会战SE开始时执行的事件
OnAgitEnd2 OnAgitEnd2: 公会战SE结束时执行的事件
OnAgitInit2 OnAgitInit2: 在服务器请求公会城堡SE的相关信息时执行的事件。用于初始化与公会城堡SE相关的NPC。
OnTouch OnTouch: 进入范围NPC的有效范围内时执行的事件。设置OnTouch的NPC名字必须在服务器内唯一。
OnPCDieEvent OnPCDieEvent: 人物死亡时执行的事件。死亡玩家的PC_DIE_COUNTER会增加1;并且会把杀人者(不限于PC)的unit_id放在killerrid变量中。
OnPCKillEvent OnPCKillEvent: 玩家PK时,杀人者执行的事件。并且把被杀者的unit_id放在killedrid变量中。
OnPCMoveMap OnPCMoveMap: 玩家过图时执行的事件
OnPCLoginEvent OnPCLoginEvent: 玩家登陆时执行的事件
OnPCLogoutEvent OnPCLogoutEvent: 玩家登出时执行的事件
OnPCBaseLvUpEvent OnPCBaseLvUpEvent: 人物Base等级提升时执行的事件
OnPCJobLvUpEvent OnPCJobLvUpEvent: 人物Job等级提升时执行的事件
OnNPCKillEvent OnNPCKillEvent: 人物杀死怪物时执行的事件
OnPCLoadMapEvent OnPCLoadMapEvent: 当人物踏入地图时并且mapflag包含loadevent时执行的事件。
On On<事件名>: 这种用法主要用于怪物死亡事件。例如:
monster "prontera",123,42,"Poringz0rd",2341,23,"Master::OnThisMobDeath";
amatsu,13,152,4 script Master 767,{
mes "Hi there";
close;
OnThisMobDeath:
announce "Hey, "+strcharinfo(0)+" just killed a Poringz0rd!",bc_blue|bc_all;
end;
}
当每次杀死Poringz0rd怪物时,就会自动执行公告。
OnPCSave OnPCSave: 自动储存人物数据时执行的事件
OnPCAfterWeaponAtk OnPCAfterWeaponAtk: 人物进行物理攻击后执行的事件
OnPCAfterMagicAtk OnPCAfterMagicAtk: 人物进行魔法攻击后执行的事件
OnPCAfterMiscAtk OnPCAfterMiscAtk: 人物进行其他攻击后执行的事件
|
|