脚本函数应用
NPC对话框
函数 | 说明 | - |
---|
cm.sendAskMenu(文本); | 带【选项】的对话框,展示的是NPC形象 | |
cm.sendAskMenu(文本,2); | 带【选项】的对话框,展示的是玩家形象 | |
cm.sendSimple(文本); | 带【选项】的对话框,展示的是NPC形象 | |
cm.sendSimple(文本,2); | 带【选项】的对话框,展示的是玩家形象 | |
cm.sendOk(文本); | 带【确定】的对话框,展示的是NPC形象 | |
cm.sendOk(文本,2); | 带【确定】的对话框,展示的是玩家形象 | |
cm.sendYesNo(文本); | 带【是/不是】的对话框,展示的是NPC形象 | |
cm.sendYesNo(文本,2); | 带【是/不是】的对话框,展示的是玩家形象 | |
cm.sendAcceptDecline(文本); | 带【接受/拒绝】的对话框,展示的是NPC形象 | |
cm.sendAcceptDecline(文本,2); | 带【接受/拒绝】的对话框,展示的是玩家形象 | |
cm.sendNext(文本); | 带【下项】的对话框,展示的是NPC形象 | |
cm.sendNext(文本,2); | 带【下项】的对话框,展示的是玩家形象 | |
cm.sendPrev(文本); | 带【上项】的对话框,展示的是NPC形象 | |
cm.sendPrev(文本,2); | 带【上项】的对话框,展示的是玩家形象 | |
cm.sendNextPrev(文本); | 带【上项/下项】的对话框,展示的是NPC形象 | |
cm.sendNextPrev(文本,2); | 带【上项/下项】的对话框,展示的是玩家形象 | |
cm.sendAskText(文本); | 文本输入框 | |
cm.sendGetText(文本); | 文本输入框 | |
cm.sendAskNumber(文本,默认数字,最小数字,最大数字); | 数字输入框 | |
NPC应用
函数 | 说明 | - |
---|
cm.dispose(); | 对话结束 | 一般用于脚本结束或者对话结束 |
cm.openShopNPC(商店ID); | 打开商店 | |
cm.openNpc("脚本名字"); | 打开指定脚本 | 路径:scripts\world0\npc |
cm.openNpc(2000); | 打开指定脚本 | 路径:scripts\world0\npc |
cm.openNpc(2000,"脚本名字"); | 打开指定脚本 | 路径:scripts\world0\npc |
cm.getNpc(); | int | 获取NPCID |
cm.getObjectId(); | int | 获取对象obcID |
cm.getScriptName(); | string | 获取脚本名字 |
cm.isItemScript(); | boolean | 是否道具脚本 |
情景喇叭
函数 | 对象 | 说明 |
---|
cm.getMap().laba("这是一条测试信息。",5120000); | 地图 | |
cm.getChannel().laba("这是一条测试信息。",5120000); | 频道 | |
cm.getWorld().laba("这是一条测试信息。",5120000); | 全服 | |
5120000情景喇叭ID
cm.getMap().laba("这是一条测试信息。",5120000,10*1000); 这样可以定义情景喇叭存在的时间,单位为秒。
小纸条
函数 | 对象 | 说明 |
---|
cm.sendNote(目标名字,发送人名字,内容); | 个人 | 向指定人发送小纸条信息 |
道具喇叭
函数 | 对象 | 说明 |
---|
cm.Itemlaba(1,text); | 全服 | 展示装备栏第一格位置装备 |
cm.Itemlaba(2,1,text); | 全服 | 展示消耗栏第一格位置道具 |
cm.Itemlaba(Item,text); | 全服 | 展示Item对象物品 |
cm.Itemlaba(Item,text);
cm.gainItem(物品ID,数量,是否属性浮动,是否显示获取信息);
var Item = cm.gainItem(1302000,1,true,true);
cm.Itemlaba(Item,"[测试信息] : 试试啊");
var Item = cm.gainItem(2000000,1,true,true);
cm.Itemlaba(Item,"[测试信息] : 试试啊");
提示语
函数 | 对象 | 说明 |
---|
cm.getPlayer().dropMessage(1,"提示语"); | 个人 | 发送文本信息 |
cm.getMap().dropMessage(1,"提示语"); | 地图 | 发送文本信息 |
cm.getChannel().dropMessage(1,"提示语"); | 频道 | 发送文本信息 |
cm.getWorld().dropMessage(1,"提示语"); | 全服 | 发送文本信息 |
提示语编号 1
提示语编号 2
提示语编号 3
提示语编号 4
提示语编号 5
提示语编号 6
提示语编号 7
提示语编号 8
函数 | 对象 | 说明 |
---|
cm.getPlayer().showHint("测试一下"); | 个人 | 发送文本信息 |
个人设置预设
cm.getPlayer().getSetup(1);
cm.getPlayer().setSetup(1,1);
编号 | 说明 |
---|
1 | 信息面板开关 |
2 | 护肩显示 |
3 | 世界等级 |
4 | 每小时经验和金币 |
5 | 每小时治疗量 |
6 | 地图归属 |
7 | 地图人数 |
8 | 地图斗燃 |
9 | 当前时间 |
10 | 开始服务器信息输出 |
11 | 时均,显示总 |
12 | 伤害 |
13 | 伤害综合 |
14 | 组队血条 |
15 | 武装耐久度显示 |
16 | 数据流 |
17 | 角色吸物 |
18 | 无限背包 |
100 | 形象 |
101 | 屏蔽宠物移动 |
102 | 屏蔽玩家说话 |
103 | 屏蔽椅子 |
200 | 天赋 |
300 | 冒险宇宙自动登陆 |
10000 | 瞬移石头开关 |
BGM/点播
函数 | 对象 | 说明 |
---|
cm.getPlayer().Bgm("路径"); | 个人 | |
cm.getMap().Bgm("路径"); | 地图 | |
cm.getChannel().Bgm("路径"); | 频道 | |
cm.getWorld().Bgm("路径"); | 全服 | |
查询
玩家活跃查询
函数 | 类型 | 说明 |
---|
cm.getPlayerActiveData("SELECT * FROM characters WHERE gm = 0;",3 * 24 * 60 * 60 * 1000); | int | 返回指定多少天内上线的玩家数量。 |
脚本符号#
#b 蓝色字体
#r 红色字体
#k 黑色字体
#g 绿色字体
#d 褐色字体
#e 字体加粗
#n 正常字体
#y 任务名字
#u 任务状态
#w NPC文本速显
#c[道具 ID]# 显示玩家背包中有多少
#h # - 显示玩家名称
#m[地图 ID]# - 显示地图名称
#o[怪物 ID]# - 显示怪物名称
#p[NPC ID]# - 显示NPC名称
#q[技能 ID]# - 显示技能名称
#s[技能 ID]# - 显示技能图片
#t[道具 ID]# - 显示道具名称
#i[道具 ID]# - 显示道具图片
#z[道具 ID]# - 显示道具名称
#v[道具 ID]# - 显示道具图片
#B[%]# - 显示进度条
#f[图片地址]# - 显示WZ档案中的图片
#F[图片地址]# - 显示WZ档案中的图片
#L[编号]# 选项开始
#l - 选项结束
数据库sql语句
切记严格按照格式来写,不然会造成数据库错误。
function gaindata(a) {
var con = cm.getMysql();
var ps = null;
try {
ps = con.prepareStatement("UPDATE zevms_world_data SET exp = exp + 1 WHERE id = ?;");
ps.setInt(1,a);
ps.executeUpdate();
ps.close();
con.close();
} catch(err) {
console.log(err);
}finally{
if(ps!=null){
ps.close();
}
con.close();
}
}
function getdata(a) {
var con = cm.getMysql();
var ps = null;
var rs = null;
var x = 0;
try {
ps = con.prepareStatement("SELECT * FROM accounts WHERE id = ?;");
ps.setInt(1, a);
rs = ps.executeQuery();
if (rs.next()) {
x= rs.getInt("nxCredit");
}
ps.close();
rs.close();
con.close();
return x;
} catch(err) {
console.log(err);
}finally{
if(rs!=null){
rs.close();
}
if(ps!=null){
ps.close();
}
con.close();
}
}
function insertdata(cid,name) {
var con = cm.getMysql();
var ps = null;
try {
ps = con.prepareStatement("insert into bossdaylog (characterid,bossid) values (?, ?);");
ps.setInt(1,cid);
ps.setString(2,name);
ps.executeUpdate();
ps.close();
con.close();
} catch (err) {
console.log(err);
}finally{
if(ps!=null){
ps.close();
}
con.close();
}
}
日志
常用的日志函数都在一起方便大家查看。
函数 | 说明 |
---|
cm.logToFile("日志/我的日志.txt","牛牛太坏了\r\n"); | 一般用于放在脚本中,输出记录日志,输出的日志在服务端根目录。 |
cm.getTime(); | 时间文本 |
cm.getPlayer().getName(); | 玩家名字 |
cm.getPlayer().getId(); | 玩家数字ID |
任务
函数 | 类型 | 说明 |
---|
cm.getQuestName(2000); | String | 获取指定任务名字,#y2000#也可以获取。 |
cm.isQuestCompleted(4000); | boolean | 判断任务是否完成 |
cm.isQuestStarted(4000); | boolean | 判断任务是否正在进行 |
cm.getQuestStatus(4000); | int | 获取任务状态,0=未接,1=正在进行,2=已经完成。 |
cm.QuestStart(4000); | void | 开始任务 |
cm.QuestComplete(4000); | void | 完成任务 |
cm.QuestReset(4000); | void | 重置任务 |
副本耗时
函数 | 类型 | 说明 |
---|
cm.zevms().getQuestEx(1201,"min"); | int | 废弃任务完成时间 分 |
cm.zevms().getQuestEx(1201,"sec"); | int | 废弃任务完成时间 秒 |
cm.zevms().getQuestEx(1201,"data"); | int | 废弃任务完成时间 日期 |
其他
函数 | 类型 | 说明 |
---|
cm.getNumberUtils(100000000); | string | 将伤害转化为带单位的文本 |
var ca = java.util.Calendar.getInstance();
var year = ca.get(java.util.Calendar.YEAR);
var month = ca.get(java.util.Calendar.MONTH) + 1;
var day = ca.get(java.util.Calendar.DATE);
var hour = ca.get(java.util.Calendar.HOUR_OF_DAY);
var minute = ca.get(java.util.Calendar.MINUTE);
var second = ca.get(java.util.Calendar.SECOND);
var weekday = ca.get(java.util.Calendar.DAY_OF_WEEK);
function getTime(a) {
var timestamp = a;
var date = new Date(timestamp);
var year = date.getFullYear();
var month = date.getMonth() + 1;
var day = date.getDate();
var hour = date.getHours();
var minute = date.getMinutes();
var second = date.getSeconds();
var formattedDate = `${year}-${month}-${day} ${hour}:${minute}:${second}`;
return formattedDate;
}
isTimeInRange('08:00','24:00')
function isTimeInRange(startTime:any, endTime:any) {
const now = new Date();
const currentTime = now.getTime();
const start = new Date();
const end = new Date();
start.setHours(startTime.substring(0, 2), startTime.substring(3, 5), 0);
end.setHours(endTime.substring(0, 2), endTime.substring(3, 5), 0);
const startTimeMillis = start.getTime();
const endTimeMillis = end.getTime();
return currentTime >= startTimeMillis && currentTime <= endTimeMillis;
}
cm.getTimeText(long);
cm.getcurrentTimeMillis();
cm.getTime();
cm.getServerName();
isNaN(numValue)
parseInt(txt);
function fixZeroStart(str, n) {
return (Array(n).join(0) + str).slice(-n);
}
function fixZeroEnd(str, n) {
return (str + Array(n).join(0)).slice(0, n);
}
sb.toFixed(0);
Math.floor(Math.random() * v);
实例
传送点
function enter(pi) {
pi.dropMessage(5, "举个例子!");
return true;
}
任务
var status = -1;
function start(mode, type, selection) {
if (mode == -1) {
qm.dispose();
} else {
if (mode == 0 && type > 0) {
qm.dispose();
return;
}
if (mode == 1){
status++;
} else {
status--;
}
switch(status){
case 0:
qm.sendAcceptDecline("举个例子,接受任务?");
break;
case 1:
qm.forceStartQuest();
qm.dispose();
break;
default:
qm.dispose();
break;
}
}
}
function end(mode, type, selection) {
if (mode == -1) {
qm.dispose();
} else {
if (mode == 0 && type > 0) {
qm.dispose();
return;
}
if (mode == 1){
status++;
} else {
status--;
}
switch(status){
case 0:
qm.dispose();
break;
default:
qm.dispose();
break;
}
}
}
事件
const minPlayers = 1;
const entryMap = 1000000;
const exitMap = 2000000;
const clearMap = 4000000;
const minMapId = 1000001;
const maxMapId = 1000003;
const eventTime = 10 * 60 * 1000;
function init() {
}
function setup(difficulty, lobbyId) {
}
function afterSetup(eim) {
eim.startEventTimer(eventTime);
}
function playerEntry(eim, player) {
player.changeMap(entryMap, 0);
}
function playerUnregistered(eim, player) {
}
function playerExit(eim, player) {
}
function scheduledTimeout(eim) {
}
function changedMap(eim, player, mapId) {
}
function afterChangedMap(eim, player, mapId) {
}
function changedLeader(eim, leader) {
}
function monsterKilled(mob, eim, player) {
}
function allMonstersDead(eim, player) {
}
function friendlyKilled(mob, eim, player) {
}
function friendlyDamaged(eim, mob) {
}
function friendlyItemDrop(eim, mob) {
}
function playerDead(eim, player) {
}
function playerRevive(eim, player) {
}
function playerDisconnected(eim, player) {
}
function monsterValue(eim, mobId) {
return 1;
}
function leftParty(eim, player) {
}
function disbandParty(eim) {
}
function cancelSchedule(eim) {
}
function dispose(obj) {
}
function moveMap(eim, player) {
}
function monsterRevive(eim, mob) {
}
function clearPQ(eim) {
}
物品
var status;
function start() {
status = -1;
action(1, 0, 0);
}
function action(mode, type, selection) {
if (mode == -1) {
im.dispose();
} else {
if (mode == 0 && type > 0) {
im.dispose();
return;
}
if (mode == 1){
status++;
} else {
status--;
}
switch(status){
case 0:
im.sendOk("举个例子!");
break;
default:
im.dispose();
break;
}
}
}
地图
function start(ms) {
ms.dropMessage(5, "举个例子!");
}
NPC
var status = -1;
function start() {
action(1, 0, 0);
}
function action(mode, type, selection) {
if (mode == -1) {
cm.dispose();
} else {
if (mode == 0 && type > 0) {
cm.dispose();
return;
}
if (mode == 1){
status++;
} else {
status--;
}
switch(status){
case 0:
cm.sendOk("举个例子!");
break;
default:
cm.dispose();
break;
}
}
}
反应堆
function hit() {
rm.dropMessage(5, "举个例子!卧槽,被打了一下。");
}
function act() {
rm.dropMessage(5, "举个例子!卧槽,被打死了。");
}