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

 找回密码
 立即注册
查看: 40033|回复: 578

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

[复制链接]

升级   1.33%

发表于 2011-4-17 10:14:13 | 显示全部楼层 |阅读模式
由于都是网上搜集,难免与坛内资料重复,不要责怪我。。。方便大家是我的目的
【教程】脚本基础知识介绍-part01
声明:
1、本教程是吾从网上搜集并整理的;
2、本教程只是基础教程;
3、本教程只属于基础知识介绍,大虾们不喜勿喷;
4、吾只玩过刀版的单机版仙境传说,因此本教程会以刀版里面的脚本位置等为例;
5、吾是freshman,如有错误,愿不吝赐教。
________________________________________
游客,如果您要查看本帖隐藏内容请回复

评分

1

查看全部评分

温馨提示:
1. 本站模拟器源于网络,经 99Max.mE 二次开发,仅供个人学习娱乐使用,切勿用于商业用途,否则后果自负!
2. 如需更好体验游戏内容,请前往官方游戏!不具备合法的运营模式,都是强盗,请勿擅自搭建私服!
3. 如本站内容有侵犯您的权益,请发送信息至QQ:372607220 或 EMAIL:372607220@qq.com ,我们会及时删除。

升级   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:        人物进行其他攻击后执行的事件

升级   100%

发表于 2011-4-19 00:04:19 | 显示全部楼层
好东西啊 = =。。。

升级   23%

发表于 2011-4-30 17:21:45 | 显示全部楼层
对小白来说太有用,收藏了~~~~

升级   32%

发表于 2011-5-2 19:19:08 | 显示全部楼层
学习用好东西啊

升级   0%

发表于 2011-9-4 00:24:31 | 显示全部楼层
太有用的教程,谢谢

升级   20.4%

发表于 2011-9-9 19:44:41 | 显示全部楼层
谢谢 对我这样的新手 太有帮助了

升级   15.6%

发表于 2011-12-7 10:58:03 | 显示全部楼层
这个是好久的东西了,不知道现在改变了没有啊!

升级   6.3%

发表于 2011-12-12 13:56:05 | 显示全部楼层
很詳細的解說 寫腳本正好需要

升级   96%

发表于 2012-1-23 07:47:47 | 显示全部楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-22 13:45 , Processed in 0.411344 second(s), 34 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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