99Max综合娱乐网站(旧版)

 找回密码
 立即注册
楼主: xcc233

【教程】脚本基础知识介绍

[复制链接]

升级   100%

发表于 2016-7-13 13:13:50 | 显示全部楼层
感谢楼主分享

升级   100%

发表于 2016-7-14 18:53:56 | 显示全部楼层
到哪里都是好帖子,感谢楼主教学

升级   62%

发表于 2016-7-15 08:46:09 | 显示全部楼层
自学成才呀呵呵哈哈哈

升级   44%

发表于 2016-7-15 15:33:05 | 显示全部楼层
虚心学习,谢谢楼主

升级   100%

发表于 2016-7-25 23:50:02 | 显示全部楼层
留言来看看咩~

升级   15.45%

发表于 2016-7-26 00:37:27 | 显示全部楼层
继续。。。
【教程】脚本基础知识介绍--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:        人物进行其他攻击后执行的事件

升级   75.67%

发表于 2016-7-29 23:52:10 | 显示全部楼层
学习研究下
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|99Max综合娱乐网站(旧版) ( 沪ICP备11024206号-1 )

GMT+8, 2025-1-19 22:18 , Processed in 0.258769 second(s), 24 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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