脚本函数应用

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("举个例子:控制台打印该条信息。");
}