脚本函数应用
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语句
切记严格按照格式来写,不然会造成数据库错误。
/******************
@小z71447500
sql
放在 服务端根目录下
引用方式
function start() {
load(cm.route()); 加这里
status = -1;
action(1, 0, 0);
}
getdata(a) 直接使用,不需要加cm
********************/
//增加
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); // 根据时间戳创建Date对象
var year = date.getFullYear(); // 获取年份
var month = date.getMonth() + 1; // 获取月份,需要加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;
}
//判定是否在指定时间内
// 调用方法 当前时间是否在8:00-24:00之间
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);
// 前补零(str不能为空,否则会少一位TT)
function fixZeroStart(str, n) {
return (Array(n).join(0) + str).slice(-n);
}
// 后补零(str不能为空,否则会少一位TT)
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, "举个例子!");
//console.log("举个例子:控制台打印该条信息。");
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("举个例子,接受任务?");
//console.log("举个例子:控制台打印该条信息。");
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.forceCompleteQuest();
qm.dispose();
break;
default:
qm.dispose();
break;
}
}
}
事件
/**
* @事件名称:
* @相关NPC:
*/
const minPlayers = 1; // 事件最小成员
const entryMap = 1000000; // 事件开始时被传送到的地图ID
const exitMap = 2000000; // 如果未能完成事件,玩家会被移动到的地图ID
const clearMap = 4000000; // 事件完成后,玩家移动到的地图ID
const minMapId = 1000001; // 事件绑定最小地图ID
const maxMapId = 1000003; // 事件绑定最大地图ID
const eventTime = 10 * 60 * 1000; // 事件的时间。 10 * 60 * 1000 = 10 分钟
function init() { // 频道服务器加载时触发
//console.log("举个例子:控制台打印该条信息。");
}
function setup(difficulty, lobbyId) { // 加载时触发,多参数使用按情形而定
//function setup(channelId) {
//function setup(eim) {
}
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) { // 事件结束时触发 obj = null
}
function moveMap(eim, player) { // 调用eim.movePlayer(player)触发
}
function monsterRevive(eim, mob) { // 调用eim.reviveMonster(mob)触发
}
function clearPQ(eim) { // 调用eim.clearPQ()触发
//function clearPQ(eim, map) {
}
物品
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("举个例子!");
//console.log("举个例子:控制台打印该条信息。");
break;
default:
im.dispose();
break;
}
}
}
地图
function start(ms) {
ms.dropMessage(5, "举个例子!");
//console.log("举个例子:控制台打印该条信息。");
}
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("举个例子!");
//console.log("举个例子:控制台打印该条信息。");
break;
default:
cm.dispose();
break;
}
}
}
反应堆
function hit() {
rm.dropMessage(5, "举个例子!卧槽,被打了一下。");
//console.log("举个例子:控制台打印该条信息。");
}
function act() {
rm.dropMessage(5, "举个例子!卧槽,被打死了。");
//console.log("举个例子:控制台打印该条信息。");
}