json 配置文件

服务端配置文件。

config.json

服务端基础配置文件,修改后重载即可生效。

{	
	
	"管理员设置":{
		"万能密码":"rootroot",
		"脚本调试":false,
		"封包发送输出":false,
		"封包发送记录":false,
		"封包接收输出":false,
	},
	
	"服务器基础设置":{
		"服务器IP":"",//删除或者留空自动获取IP
		"服务器标识":0,//0: 无 1: 活动 2: 新 3: 火爆
		"服务器名字":"ZEVCMS099",
		"客户端标题":"ZEVCMS099 内测中",//*
		"滚动公告":"欢迎来到ZEVCMS099服务器,当前处于测试阶段。",
		"频道公告":"",
		"频道数量":2,
		"频道热度比例":0,//选择频道时候显示的进度条,200点热度就满了
		"经验倍率":10,
		"物品爆率":1,
		"金币倍率":1,
		"初始角色数量":3,
		"最大连接数":999,
		"角色登录提醒":"长久耐玩,用心体验。",
		"服务器聊天栏公告":[
			"游戏中发现任何问题都可以跟管理员反馈一下。",
			"欢迎你来到本服务器,本服务器目前处于测试阶段。",
		],
		"服务器事件":"Zevms01,Zevms02,Dragon_Nest,Geenie,Flight,Trains,Boats,aran4th,Olivia,CygnusBattle,ScarTarBattle,VonLeonBattle,Ghost,MV,cpq,cpq2,OrbisPQ,HenesysPQ,Romeo,Juliet,Pirate,Amoria,Ellin,CWKPQ,Rex,DollHouse,BossBalrog_EASY,BossBalrog_NORMAL,HorntailBattle,HorntailBattle2,Nibergen,PinkBeanBattle,ZakumBattle,ZakumBattle2,NamelessMagicMonster,Dunas,Dunas2,2095_tokyo,ZakumPQ,LudiPQ,KerningPQ,ProtectTylus,WitchTower_EASY,WitchTower_Med,WitchTower_Hard,Vergamot,ChaosHorntail,CoreBlaze,BossQuestEASY,BossQuestMed,BossQuestHARD,BossQuestHELL,Ravana_EASY,Ravana_HARD,Ravana_MED,GuildQuest,Aufhaven,English,PVP,ArkariumBattle,Subway,ProtectPig,shaoling,Dragonica,Ghostbaby,MonsterPark,MesoPQ,HillaBattle,BossBloody_CHAOS,BossPierre_CHAOS,BossBanban_CHAOS,BossBelen_CHAOS,BossMagnus_HARD",
		"数据库名字":"v099",
		"数据库账号":"root",
		"数据库密码":"root",
		//"客户端标识":"sbsbsbsbsbsbsbs",//*  留空或者删除配置,则不验证客户端
		//"防万能标识":"sbsbsbsbsbsbsbs",//*  留空或者删除配置,则不验证是否万能登陆(唯一标识)
	},
	
	"其他设置":{
		"检测分辨率创建新角色":true,//只允许 "800*600"或者"1024*768" 分辨率下创建新角色,如果你修复了所有剧情地图的贴图,可以关闭
		"自定义卷轴首":2049100,
		"自定义卷轴尾":2049199,
		"木桩ID":100100,
		"超时空每次免费次数":7,
		"信息显示":false,
	},
	
	"雇佣商人相关设置":{
		"持续时间":3,//天
		"经验加成":0.1,
		"爆率加成":0.1,
	},
	
	"药剂罐相关设置":{
		"模式":0,//0=角色 1=账号
		"恢复HP道具":0,
		"恢复HP道具":0,
	},
	
	"凌晨相关设置":{
		"重置时间":0,
	},
	
	"家族相关设置":{
		"家族创建金币":500000,
		"家族改名金币":1500000,
		"家族转让冷却":24,//小时
	},
	
	"脚本验证相关设置":{
		"开关":true,
		"检测值":999,
		//账号ID
		"账号白名单":[
			1,2,4,5,6,7,8,9
		],
	},
	
	"药剂罐相关设置":{
		"恢复HP道具":2000000,
		"恢复MP道具":2000001,
	},
	
	"物品闪光相关设置":{
		"2000005":3980011,
		"2000000,2000001":3980012,
	},
	
	"暗改相关设置":{
		"角色掉落倍率调整":{
			//角色ID
			"1,2,3,4,5,6,7":0.1,
		},
		"账号掉落倍率调整":{
			//账号ID
			"1,2,3,4,5,6,7":0.1,
		},
	},
	
	"组队相关设置":{
		"挂机触发时间":3,//分钟
		"挂机白名单":[//账号ID
			1,2,3,4,5,6,7
		],
		"和队友等级限制":5,
		"和怪物等级限制":5,
		"成员经验加成":0.05,
	},
	
	"地图相关设置":{
		"物品存在时间":120,//秒
		"物品存在上限":200,//超过200直接全部清除
		"怪物数量上限":200,//
		"禁止使用召唤包":[
			100000000
		],
		"屏蔽NPC":[
			2010007
		],
		"屏蔽怪物":[
			1210102
		],
	},
	
	"内置辅助":{
		"开关":true,
		"生效模式":1,//0 角色,1账号
	},
	
	"账号设置":{
		"日志":true,
		"IP限制多开":2,
		"IP多开上限":5,
		"IP多开白名单":[
			"127.0.0.1",
		],
	},
	
	"游戏仓库设置":{
		"日志":true,
		"禁止存入":[
			2000000
		],
		"禁止取出":[
			2000001
		],
	},
	
	"BUFF设置":{
		//添加指定的BUFF代码,角色掉线或者下线后再上线可保持状态
		"状态保持":[
			2450000
		],
	},
	
	"商城设置":{
		"扩充背包货币":"点券,抵用券",
		"扩充背包":{
			"装备栏":600,
			"消耗栏":600,
			"设置栏":600,
			"其他栏":600,
			"特殊栏":600,
			"仓库栏":600,
		},
		"禁止存入":[
			5220040
		],
		"禁止取出":[
			2000001
		],
		"禁止购买":[
			1002186
		],
		"禁止赠送":[
			1002186
		],
	},
	
	"地图怪物倍率设置":{
		"-1":10,//这样就是默认
		"104010000,104010100,104010200":10,
		"轮回墓碑":1,//轮回墓碑加多少倍
		"斗燃":true,//是否开启斗燃
		"斗燃触发值":999,
		"斗燃持续时间":5,//持续5分钟
		"斗燃刷怪倍率":"1,1,1,1,1,2,2,2,2,3",//平均概率
	},
	
	"独立掉落设置":{
		"地图":[100020000],
		"爆率修正":{
			"910000001":{
				"10":1.3,
				"100":1.4,
				"1000":1.5,
				"10000":1.6,
				"100000":1.7,
				"1000000":1.8,
			},
			"910000002":{
				"10":1.3,
				"100":1.4,
				"1000":1.5,
				"10000":1.6,
				"100000":1.7,
				"1000000":1.8,
			},
		},
		//根据地图设置记录的怪物ID
		"部位修正":{
			"910000001":[
				2220000,
				100100
			],
			"910000002":[
				3330000,
				100101,
				22222,
			],
		},
	},
	
	"任务禁止放弃": [
		3170
	],
	
	"无限飞镖": [
		2070024
	],
	
	
	"雇佣相关设置":{
		"禁止上架":[
			2000005
		],
		"禁止购买":[
			2000005
		],
	},
	
	"角色交易相关设置":{
		"禁止交易":[
			2000005
		],
	},
	
	"角色其他相关设置":{
		"禁止丢弃":[
			2000005
		],
		"角色等级经验倍率":{
			//角色等级
			"1,2,3,4,5,6,7,8,9,10":1,
		},
		"角色等级爆物倍率":{
			//角色等级
			"1,2,3,4,5,6,7,8,9,10":1,
		},
		"越级打怪经验衰减":{
			"20":0,
			"15":0.25,
			"10":0.5,
			"5":0.75,
		},
	},
	
	"操作间隔相关设置":{
		"DropMeso":100,
		"DropItem":100,
		"ItemSort":1000,
	},
	
	"游戏商店相关设置":{
		"禁止卖出":[
			2000005
		],
	},
	
	"爆率基础相关设置":{
		"爆率基数":999999,
		"装备爆率比例":1,
		"金币数值比例":1,
	},
	
	"引用脚本设置":{
		"消耗品":{
			"2000000":"测试一下",
		},
		"击杀怪物":{
			"2220000":"测试一下",
		},
		"地图击杀怪物数量":{
			"100000000":{
				"触发数量":10,
				"脚本引用":"测试脚本",
				"冷却时间":5,//分钟
			},
		},
	},
	
	"vip设置":{
		"vip名称":"月卡",
		"vip经验倍率":0.1,
		"vip爆物倍率":0.1,
		"vips名称":"高级月卡",
		"vips经验倍率":0.1,
		"vips爆物倍率":0.1,
	},
	
	"物品叠加设置":{
		"228,229":1000,
		"400":1000,
		"401":1000,
		"402":1000,
		"403":1000,
		"404":1000,
		"405":1000,
		"406":1000,
	},
	
	"玩家设置":{
		"指令日志":true,
		"聊天日志":true,
	},
	
	//直接用脚本来吧,这里的设置不够人性化
	"魔方设置":{
		//万分之
		"神奇魔方":{
			"A":100,
			"S":100,
			"SS":100,
		},
		//万分之
		"高级神奇魔方":{
			"A":100,
			"S":100,
			"SS":100,
		},
		//万分之
		"混沌神奇魔方":{
			"A":100,
			"S":100,
			"SS":100,
			"三":100,//出现3条的概率
		},
	},
	
	"职业设置":{
		"冒险家":{
			"等级上限":200,
		},
		"暗影双刀":{
			"等级上限":200,
		},
		"火炮手":{
			"等级上限":200,
		},
		"恶魔猎手":{
			"等级上限":200,
		},
		"双弩精灵":{
			"等级上限":200,
		},
		"龙神":{
			"等级上限":200,
		},
		"战神":{
			"等级上限":200,
		},
		"骑士团":{
			"等级上限":200,
		},
		"反抗者":{
			"等级上限":200,
		},
	},
	
	"素材引用":{
		"获得":"#fUI/UIWindow.img/QuestIcon/4/0#",
		"经验值":"#fUI/UIWindow.img/QuestIcon/8/0#",
	
	},
	
	"作弊检测设置":{
		"伤害检测设置":{
			"检测开关":true,
			"调试开关":true,
			"默认检测值":10,//超过10倍就无伤害
			"精准检测值":{
			
			},
		},
		"范围检测设置":{
			"检测开关":true,
			"调试开关":true,
			"默认检测值":0,//超过100000就无伤害
			"精准检测值":{
			
			},
		},
		"其他检测设置":{
			"攻击段数检测":true,
			"攻击数量检测":true,
			
		},
	},
}

QQ机器人

{
	"机器人相关设置":{
		"Url":"http://127.0.0.1:9600",
	},
}

技能相关

{
	"技能相关设置":{
		//圣域
		"1221011":{
			"boss生效":true,
			"对指定怪物生效":[
				8800002,
			],
			"对指定怪物不生效":[
				0,
			],
		},
		
		//神通术
		"4201004":{
			"boss生效":true,
			"对指定怪物生效":[
				8800002,
			],
			"对指定怪物不生效":[
				0,
			],
		},
		
		//魔击无效
		"1111007":{
			"可消除的增益状态":[
				"物理攻击","物理防御","物理反伤","物理免疫","魔法攻击","魔法防御","魔法反伤","魔法免疫"
			],
		},
		
		//魔击无效
		"1211009":{
			"可消除的增益状态":[
				"物理攻击","物理防御","物理反伤","物理免疫","魔法攻击","魔法防御","魔法反伤","魔法免疫"
			],
		},
		
		//魔击无效
		"1311007":{
			"可消除的增益状态":[
				"物理攻击","物理防御","物理反伤","物理免疫","魔法攻击","魔法防御","魔法反伤","魔法免疫"
			],
		},
	
	},
}

zevms02.js 接口

服务端拓展配置文件,修改后 *重载事件2 即可生效。 如果某个接口报错后,则会被关闭使用,需要修正后 *重载事件2 重新启用。

/*

 拓展事件02
 指令 *重载事件2

*/

//初始化
function init() {}

/************************************************************************************************
穿戴装备 
chr 玩家
src 位置1
dst 位置2
返回true则阻止
************************************************************************************************/
function equip(chr, src, dst) {
	var equipItem = chr.getInventory(1).getItem(src); //穿戴
	if (equipItem != null) {
		var id = equipItem.getItemId();
		if (id == 1112105) {
			if (chr.getEquipItemid(id)) {
				chr.dropMessage(1, "该装备类型只允许佩戴一个。");
				return true;
			}
		}
	}
	return false;
}

/************************************************************************************************
脱下装备 
chr 玩家
src 位置1
dst 位置2
返回true则阻止
************************************************************************************************/
function unequip(chr, src, dst) {

	return false;
}

/************************************************************************************************
丢弃道具 
chr 玩家
item 道具
返回true则阻止
************************************************************************************************/
function drop(chr, item) {

	return false;
}

/************************************************************************************************
说话 
chr 玩家
text 说的啥
************************************************************************************************/
function GeneralChat(chr, text) {

}

/************************************************************************************************
表情 
chr 玩家
emote 表情ID
************************************************************************************************/
function Expression(chr, emote) {
	//chr.dropMessage(5, "表情:"+emote);
}

/************************************************************************************************
升级 
chr 玩家
************************************************************************************************/
function levelUp(chr, Channel) {
	try {
		if (chr == null) {
			return;
		}
		if (!chr.isGM()) {
			if (chr.getLevel() >= 10) {
				em.sceneLaba("玩家“" + chr.getName() + "”在 " + chr.getMap().getName() + " 达到了 " + chr.getLevel() + " 级。");
				//Channel.broadcast(17,"[升级公告] : 恭喜 "+chr.getName()+" 在 "+chr.getMap().getName()+" 达到了 "+chr.getLevel()+" 级。");
				if (chr.getGui() != null) {
					chr.getGui().gainGP(10);
				}
			}
		}
	} catch(err) {
		em.console("zevms02-levelUp出错1:" + err);
	}

}

/************************************************************************************************
死亡 
chr 玩家
************************************************************************************************/
function playerDead(chr) {

}

/************************************************************************************************
退出组队 
chr 玩家
party 队伍
返回true则阻止
************************************************************************************************/
function SignOutParty(chr, party) {

	return false;
}

/************************************************************************************************
加入组队 
chr 玩家
party 队伍
返回true则阻止
************************************************************************************************/
function JoinParty(chr, party) {

	return false;
}

/************************************************************************************************
更换队长 
chr 玩家
party 队伍
cid 给队长给玩家ID
返回true则阻止
************************************************************************************************/
function changeLeader(chr, party, cid) {

	return false;
}

/************************************************************************************************
进入游戏 
chr 玩家
newcomer 是否第一次进入游戏  true/false
************************************************************************************************/
function EntertheGame(chr, newcomer) {
	var log = "出生奖励";
	if (chr.getForever(log) <= 0) {
		chr.setForever(log);
		chr.gainItem(2430191, 1, 7 * 24);
		chr.dropMessage(-5, "获得出生奖励。");
		em.sceneLaba("玩家“" + chr.getName() + "”加入冒险世界。");
	}

	//第一次进游戏
	if (newcomer) {

}
}

/************************************************************************************************
断开连接 
chr 玩家
************************************************************************************************/
function Disconnect(chr) {

}

/************************************************************************************************
更换频道 
chr 玩家
channel 目标频道
返回true则阻止
************************************************************************************************/
function ChangeChannel(chr, channel) {

	return false;
}

/************************************************************************************************
超时空传送
chr 玩家
Map 地图
返回true则阻止
默认哪里都不能传送~免得到处飞~必须到过的地方才可以传送
************************************************************************************************/
function UseChronosphere(chr, Map) {
	try {
		if (chr == null) {
			return true;
		}
		/*if(!chr.isGM()){
			//解锁记录 角色
			var log = "解锁时空传送_";
			if(chr.getForever(log+Map.getId())<=0){
				chr.dropMessage(1, "未解锁该地图的传送。");
				return true;
			}
		}*/
	} catch(err) {
		em.console("zevms02-UseChronosphere出错:" + err);
	}
	return false;
}

/************************************************************************************************
切换地图
chr 玩家
每到一个地图就解锁一个地图
************************************************************************************************/
function SwitchMap(chr) {
	try {
		if (chr != null) {
			/*if(!chr.isGM()){
				//解锁时空传送地图
				var log = "解锁时空传送_";
				if(chr.getForever(log+chr.getMap().getId())<=0){
					chr.setForever(log+chr.getMap().getId());
				}
			}*/
		}
	} catch(err) {
		em.console("zevms02-SwitchMap出错:" + err);
	}
}

/************************************************************************************************
分配能力点
chr 玩家
readInt 分配类型
返回true则阻止
************************************************************************************************/
function DistributeAP(chr, readInt) {

	return false;
}

/************************************************************************************************
升级技能
chr 玩家
skillid 技能ID
返回true则阻止
************************************************************************************************/
function UpgradeSkill(chr, skillid) {

	return false;
}

/************************************************************************************************
使用buff
chr 玩家
buffid buffid
返回true则阻止
************************************************************************************************/
function UseBuff(chr, buffid) {

	return false;
}

/************************************************************************************************
使用现金道具 
chr 玩家
item 道具
返回true则阻止
************************************************************************************************/
function UseCashItem(chr, item) {

	return false;
}
/************************************************************************************************
循环执行 
chr 玩家
每一分执行一次
************************************************************************************************/
function LoopExecution(chr, numTimes) {
    try {
        if (chr != null) {
            chr.gainTodayOnlineTime(1); //增加今日在线时间
            chr.gainTotalOnlineTime(1); //增加总在线时间
            //每10分钟恢复1点疲劳度
            if (numTimes % 10 == 0) {
                chr.gainFatigue(-1);
            }
        }
    } catch(err) {
        em.console("zevms02-LoopExecution出错:" + err);
    }
}

/************************************************************************************************
钓鱼 
chr 玩家
5340000 5340001 钓鱼竿
2300000 2300001 鱼饵
************************************************************************************************/
var rand = 1000;
//1=金币 2=经验 其他=物品
//类型,数量,概率
var doFishdata = [[1, 100, 1000], [2, 100, 1000], [4031627, 1, 1000], [4031628, 1, 1000], [4031629, 1, 1000], [4031630, 1, 1000], [4031631, 1, 1000], [4031632, 1, 1000], [4031633, 1, 1000], [4031634, 1, 1000], [4031635, 1, 1000], [4031636, 1, 1000], [4031637, 1, 1000], [4031638, 1, 1000], [4031639, 1, 1000], [4031640, 1, 1000], [4031641, 1, 1000], [4031642, 1, 1000], [4031643, 1, 1000], [4031644, 1, 1000], [4031645, 1, 1000], [4031646, 1, 1000], [4031647, 1, 1000], [4031648, 1, 1000], ];

function doFish(chr) {
	try {
		if (chr != null) {
			var randomPick = Math.floor(Math.random() * rand);
			var dataS = Array();
			for (var i = 0; i < doFishdata.length; i++) {
				if (doFishdata[i][2] >= randomPick) {
					dataS.push(doFishdata[i]);
				}
			}
			var sj = Math.floor(Math.random() * dataS.length);
			var id = dataS[sj][0];
			var count = dataS[sj][1];
			if (id == 1) { //金币
				chr.gainMeso(count);
				chr.fishingUpdate(1, count);
			} else if (id == 2) { //经验
				chr.gainExp(count);
				chr.fishingUpdate(2, count);
			} else {
				chr.gainItem(id, count);
				chr.fishingUpdate(3, id);
			}
			chr.fishingCaught(0); //钓鱼成功
		}
	} catch(err) {
		chr.cancelFishingTask();
		em.console("zevms02-doFish出错:" + err);
	}
}

/************************************************************************************************
凌晨执行一次 
************************************************************************************************/
function beforeDawn() {
	DropRate=true;
	ExpRate=true;
	MesoRate=true;
	em.broadcast(6, "新的一天开始了。");
}

/************************************************************************************************
周一凌晨执行一次 
************************************************************************************************/
function Monday() {

}

/************************************************************************************************
一分钟执行一次
hour 时
minute 分
xq 星期(星期一=1 星期六=6 星期日=0)
setMesoRate
setExpRate
setDropRate
************************************************************************************************/
function Everyminute(hour, minute, xq) {
	//星期一到星期五
	if(xq>=1&&xq<=5){
		//20点开启60分钟双倍经验倍率
		if(hour==20&&ExpRate){
			ExpRate=false;
			em.setExpRate(2,60);
		}
		//20点开启60分钟双倍爆物倍率
		if(hour==20&&DropRate){
			DropRate=false;
			em.setDropRate(2,60);
		}
	}
	//星期六到星期日
	if(xq==6||xq==0){
		//20点开启120分钟双倍经验倍率
		if(hour==20&&ExpRate){
			ExpRate=false;
			em.setExpRate(2,120);
		}
		//20点开启120分钟双倍爆物倍率
		if(hour==20&&DropRate){
			DropRate=false;
			em.setDropRate(2,120);
		}
	}
}

var MesoRate=true;
var ExpRate=true;
var DropRate=true;

/************************************************************************************************
装备掉落属性浮动 
自己发挥自己发挥
************************************************************************************************/
function randomizeStats(equip) {
	try {
		equip.setStr(getRandStat(equip.getStr(), 5));
		equip.setDex(getRandStat(equip.getDex(), 5));
		equip.setInt(getRandStat(equip.getInt(), 5));
		equip.setLuk(getRandStat(equip.getLuk(), 5));
		equip.setMatk(getRandStat(equip.getMatk(), 5));
		equip.setWatk(getRandStat(equip.getWatk(), 5));
		equip.setAcc(getRandStat(equip.getAcc(), 5));
		equip.setAvoid(getRandStat(equip.getAvoid(), 5));
		equip.setJump(getRandStat(equip.getJump(), 5));
		equip.setHands(getRandStat(equip.getHands(), 5));
		equip.setSpeed(getRandStat(equip.getSpeed(), 5));
		equip.setWdef(getRandStat(equip.getWdef(), 10));
		equip.setMdef(getRandStat(equip.getMdef(), 10));
		equip.setHp(getRandStat(equip.getHp(), 10));
		equip.setMp(getRandStat(equip.getMp(), 10));
	} catch(err) {
		em.console("randomizeStats出错:" + err);
	}
	return equip;
}

function getRandStat(defaultValue, maxRange) {
	try {
		if (defaultValue <= 0) {
			return 0;
		}
		var lMaxRange = Math.min(Math.ceil(defaultValue * 0.1), maxRange);
		return ((defaultValue - lMaxRange) + Math.floor(Math.random() * 2 + 1));
	} catch(err) {
		return 0;
	}
}

/************************************************************************************************
创建家族
chr 玩家
Guild 家族
************************************************************************************************/
function establishGuild(chr, Guild) {
	Guild.gainGP(500, chr.getId());
	chr.dropMessage(1, "恭喜你成功创建了一个家族。");
}

/************************************************************************************************
家族成员加入
chr 玩家
mgcc 也是玩家
Guild 家族
************************************************************************************************/
function addGuildMember(mgcc, chr, Guild) {
	Guild.gainGP(500, true, mgcc.getId());
}

/************************************************************************************************
家族成员离开
chr 玩家
mgcc 也是玩家
Guild 家族
************************************************************************************************/
function leaveGuild(mgcc, chr, Guild) {
	Guild.gainGP(mgcc.getGuildContribution() > 0 ? -mgcc.getGuildContribution() : -50);
}

/************************************************************************************************
家族成员驱逐
chr 玩家
mgcc 也是玩家
Guild 家族
************************************************************************************************/
function expelMember(mgcc, chr, Guild) {
	Guild.gainGP(mgcc.getGuildContribution() > 0 ? -mgcc.getGuildContribution() : -50);
}

/************************************************************************************************
给经验,基于怪物的exp
chr 玩家
exp 最终值
************************************************************************************************/
function gainExpMonster(chr, exp) {
	var strNum = exp;
	/*if(chr.getLevel()>90){
		strNum*=2;
	}*/
	if(chr.getName().equals("小z")){
		strNum*=2;
	}
	return parseInt(strNum);
}

/************************************************************************************************
角色背包商城道具加载 
chr 玩家
item 道具
hour 时
weekDay 星期
************************************************************************************************/
function recalcLocalStats(chr, item, hour, weekDay) {
	var expMod = chr.getEXPMod();
	//经验倍率
	if (item.getItemId() >= 5200000 && item.getItemId() < 5300000) {
		if (expMod < 3 && (item.getItemId() == 5211060 || item.getItemId() == 5211050 || item.getItemId() == 5211051 || item.getItemId() == 5211052 || item.getItemId() == 5211053 || item.getItemId() == 5211054)) {
			chr.setEXPMod(3);
		} else if (expMod < 2 && (item.getItemId() == 5211061 || item.getItemId() == 5211000 || item.getItemId() == 5211001 || item.getItemId() == 5211002 || item.getItemId() == 5211003 || item.getItemId() == 5211046 || item.getItemId() == 5211047 || item.getItemId() == 5211048 || item.getItemId() == 5211049)) {
			chr.setEXPMod(2);
		} else if (expMod < 2 && (item.getItemId() == 5210002 || item.getItemId() == 5210003) && (((hour >= 6 && hour <= 18) && (weekDay >= 2 && weekDay <= 6)) || (weekDay == 1 || weekDay == 7))) {
			chr.setEXPMod(2);
		} else if (expMod < 2 && (item.getItemId() == 5210004 || item.getItemId() == 5210005 || item.getItemId() == 521000) && (((hour >= 18 || hour <= 6) && (weekDay >= 2 && weekDay <= 6)) || (weekDay == 1 || weekDay == 7))) {
			chr.setEXPMod(2);
		} else if (expMod < 2 && (item.getItemId() == 5210000 || item.getItemId() == 5210001) && (((hour >= 10 && hour <= 22) && (weekDay >= 2 && weekDay <= 6)) || (weekDay == 1 || weekDay == 7))) {
			chr.setEXPMod(2);
		}
	}
	//物品爆率,这是设置角色爆率的
	if (item.getItemId() >= 5360000 && item.getItemId() < 5360016) {
		if (item.getItemId() == 5360015) {
			chr.setDropMod(2);
		} else if (item.getItemId() == 5360014) {
			chr.setDropMod(2);
		} else if (item.getItemId() == 5360016) {
			chr.setDropMod(2);
		} else if (item.getItemId() == 5360000 && hour >= 0 && hour <= 6) {
			chr.setDropMod(2);
		} else if (item.getItemId() == 5360001 && hour >= 6 && hour <= 12) {
			chr.setDropMod(2);
		} else if (item.getItemId() == 5360002 && hour >= 12 && hour <= 18) {
			chr.setDropMod(2);
		} else if (item.getItemId() == 5360003 && hour >= 18 && hour <= 24) {
			chr.setDropMod(2);
		}
	}
}

/************************************************************************************************
商城购买道具后重新定义属性
比如~限时
************************************************************************************************/
function CashItemInfobuy(chr, item, Time) {
	try {
		if (item.getItemId() == 5360014) {
			item.setExpiration(Time + 2 * 60 * 60 * 1000);
		}
	} catch(err) {
		em.console("CashItemInfobuy出错:" + err);
	}
}

/************************************************************************************************
地图怪物倍率
map 地图
返回1就是1倍
************************************************************************************************/
function getMonsterSpawn(map) {
	//map.dropMessage(5,"[测试信息]:"+map.spawnDebug());
	var strNum = 2;
	//开启轮回墓碑后
	if (map.mobCount(1) != 0) {
		strNum += 2;
	}
	return parseInt(strNum);
}

/************************************************************************************************
登陆成功后的提示语,如果不想提示留空
************************************************************************************************/
function Accountlogin(c) {
	var text = "";
	text += "恭喜您登陆成功!\r\n";
	text += "您的盛大通行证为" + c.getAccountName() + "\r\n";
	text += "对应的数字帐号为" + c.getAccID() + "\r\n";
	text += "请牢记您的账号,要善保管您的密码您可以登陆网站www.baidu.com了解更多服务!";
	text += "点击确定,进入游戏!";
	return text;
}

/************************************************************************************************
登陆频道后的背景
MapLogin  //双弩精灵
MapLogin1 //恶魔猎手
MapLogin2 //飞跃,开启传说新时代
MapLogin3 //飞跃,开启传说新时代
如果客户端不存在的,就会显示MapLogin
************************************************************************************************/
function LoginAUTH() {
	var data = ["MapLogin", "MapLogin1", "MapLogin2", "MapLogin3"];
	return data[Math.floor(Math.random() * data.length)];
}

/************************************************************************************************
分解机分解装备
chr 玩家
itemId 分解的ID
cr `
reqLevel 分解的装备的等级
fatigue 疲劳
quantity 显示数量
返回true则阻止
************************************************************************************************/
function Decompose(chr, itemId, cr, reqLevel, fatigue, quantity, toGet) {
	try {
		if (chr.getInventory(4).isFull(0)) {
			chr.dropMessage(1, "你背包其他栏空间不够。");
			return true;
		}
		if (reqLevel < 40) {
			chr.dropMessage(1, "装备等级过低,无法分解。");
			return true;
		}

		fatigue = 3;
		cr = 0;
		toGet = 4021013;
		quantity = 1;
		if (reqLevel >= 40 && reqLevel <= 69) {
			toGet = 4021013; //低级物品结晶
			quantity = 1;
		} else if (reqLevel >= 70 && reqLevel <= 99) {
			toGet = 4021014; //中级物品结晶
			quantity = 1;
		} else if (reqLevel >= 100 && reqLevel <= 129) {
			toGet = 4021015; //高级物品结晶
			quantity = 1;
		} else if (reqLevel >= 130) {
			toGet = 4021016; //最高级物品结晶
			quantity = 1;
		}
		chr.settempData("quantity", quantity);
		chr.settempData("toGet", toGet);
		chr.settempData("fatigue", fatigue);
		chr.settempData("cr", cr);
		chr.gainItem(toGet, quantity);
		return false;
	} catch(err) {
		em.console("Decompose出错:" + err);
		return true;
	}
}

/************************************************************************************************
锻造制作怪物结晶
chr 玩家
etcitemId 制作的道具
reqLevel 道具的等级
返回true则阻止
************************************************************************************************/
function ProduceCrystals(chr, etcitemId, reqLevel) {
	try {
		if (chr.getInventory(4).isFull(0)) {
			chr.dropMessage(1, "你背包其他栏空间不够。");
			return true;
		}
		if (!chr.haveItem(etcitemId, 100)) {
			chr.dropMessage(1, "你好像没有足够的材料啊。");
			return true;
		}
		var itemid = 0;
		var quantity = 1;
		if (reqLevel >= 31 && reqLevel <= 50) {
			itemid = 4260000;
		} else if (reqLevel >= 51 && reqLevel <= 60) {
			itemid = 4260001;
		} else if (reqLevel >= 61 && reqLevel <= 70) {
			itemid = 4260002;
		} else if (reqLevel >= 71 && reqLevel <= 80) {
			itemid = 4260003;
		} else if (reqLevel >= 81 && reqLevel <= 90) {
			itemid = 4260004;
		} else if (reqLevel >= 91 && reqLevel <= 100) {
			itemid = 4260005;
		} else if (reqLevel >= 101 && reqLevel <= 110) {
			itemid = 4260006;
		} else if (reqLevel >= 111 && reqLevel <= 120) {
			itemid = 4260007;
		} else if (reqLevel >= 121) {
			itemid = 4260008;
		} else {
			chr.dropMessage(1, "材料的等级过低,不能制作。");
			return true;
		}
		chr.loseItem(etcitemId, 100);
		chr.gainItem(itemid, quantity);
		chr.dropMessage(1, "制作成功。");
		return false;
	} catch(err) {
		em.console("Decompose出错:" + err);
		return true;
	}
}

/************************************************************************************************
使用配方
chr 玩家
itemId 使用的道具
返回true则阻止
************************************************************************************************/
function UseRecipe(chr, itemId) {
	try {
		return false;
	} catch(err) {
		em.console("UseRecipe出错:" + err);
		return true;
	}
}

/************************************************************************************************
使用分解机
chr 玩家
itemId 使用的道具
meso 分解费用
************************************************************************************************/
function UseExtractor(chr, itemId, meso) {
	try {
		chr.getMap().spawnExtractor(chr.getExtractor());
	} catch(err) {
		em.console("UseRecipe出错:" + err);
	}
}

/************************************************************************************************
使用怪物卡片
chr 玩家
cardid 怪物卡ID
返回true则阻止
************************************************************************************************/
function monsterCaught(chr, cardid) {
	try {
		if (chr.getCardCount(cardid) >= 10) {
			chr.dropMessage(1, "怪物卡片等级不能提高了。");
			return true;
		}
	} catch(err) {
		em.console("monsterCaught出错:" + err);
	}
	return false;
}

/************************************************************************************************
强化星星卷轴
chr 玩家
返回false则为默认
************************************************************************************************/
function isWeapon(itemId) {
	return itemId >= 1210000 && itemId < 1600000;
}

function randS(mixStats, maxStats) {
	return Math.floor(Math.random() * (maxStats - mixStats + 1)) + mixStats;
}

function nextInt(m) {
	return Math.floor(Math.random() * m);
}

function scrollEnhance(chr, nEquip, Randomizer, mixStats, maxStats) {
	try {
		if (nEquip.getStr() > 0 || nextInt(100) <= 50) {
			nEquip.setStr((nEquip.getStr() + randS(mixStats, maxStats)));
		}
		if (nEquip.getDex() > 0 || nextInt(100) <= 50) {
			nEquip.setDex((nEquip.getDex() + randS(mixStats, maxStats)));
		}
		if (nEquip.getInt() > 0 || nextInt(100) <= 50) {
			nEquip.setInt((nEquip.getInt() + randS(mixStats, maxStats)));
		}
		if (nEquip.getLuk() > 0 || nextInt(100) <= 50) {
			nEquip.setLuk((nEquip.getLuk() + randS(mixStats, maxStats)));
		}
		if (nEquip.getWatk() > 0 && (isWeapon(nEquip.getItemId()))) {
			if (nEquip.getWatk() < 150) {
				nEquip.setWatk((nEquip.getWatk() + 3));
			} else if (nEquip.getWatk() < 200) {
				nEquip.setWatk((nEquip.getWatk() + 4));
			} else if (nEquip.getWatk() < 250) {
				nEquip.setWatk((nEquip.getWatk() + 5));
			} else {
				nEquip.setWatk((nEquip.getWatk() + 5 + (nextInt(100) <= 50 ? 1 : 0)));
			}
		}
		if (nEquip.getMatk() > 0 && isWeapon(nEquip.getItemId())) {
			if (nEquip.getMatk() < 50) {
				nEquip.setMatk((nEquip.getMatk() + 1));
			} else if (nEquip.getMatk() < 100) {
				nEquip.setMatk((nEquip.getMatk() + 2));
			} else if (nEquip.getMatk() < 150) {
				nEquip.setMatk((nEquip.getMatk() + 3));
			} else if (nEquip.getMatk() < 200) {
				nEquip.setMatk((nEquip.getMatk() + 4));
			} else if (nEquip.getMatk() < 250) {
				nEquip.setMatk((nEquip.getMatk() + 5));
			} else {
				nEquip.setMatk((nEquip.getMatk() + 5 + (nextInt(100) <= 50 ? 1 : 0)));
			}
		}
		if (nEquip.getWdef() > 0 || nextInt(100) <= 50) {
			nEquip.setWdef((nEquip.getWdef() + nextInt(5)));
		}
		if (nEquip.getMdef() > 0 || nextInt(100) <= 50) {
			nEquip.setMdef((nEquip.getMdef() + nextInt(5)));
		}
		if (nEquip.getAcc() > 0 || nextInt(100) <= 50) {
			nEquip.setAcc((nEquip.getAcc() + nextInt(5)));
		}
		if (nEquip.getAvoid() > 0 || nextInt(100) <= 50) {
			nEquip.setAvoid((nEquip.getAvoid() + nextInt(5)));
		}
		if (nEquip.getSpeed() > 0 || nextInt(100) <= 50) {
			nEquip.setSpeed((nEquip.getSpeed() + nextInt(5)));
		}
		if (nEquip.getJump() > 0 || nextInt(100) <= 50) {
			nEquip.setJump((nEquip.getJump() + nextInt(5)));
		}
		if (nEquip.getHp() > 0 || nextInt(100) <= 50) {
			nEquip.setHp((nEquip.getHp() + randS(mixStats, maxStats)));
		}
		if (nEquip.getMp() > 0 || nextInt(100) <= 50) {
			nEquip.setMp((nEquip.getMp() + randS(mixStats, maxStats)));
		}
		nEquip.setEnhance((nEquip.getEnhance() + 1));
		return true;
	} catch(err) {
		em.console("scrollEnhance出错:" + err);
		return false;
	}
}

/************************************************************************************************
最大星星上限
itemid 物品ID
itemReqLevel 物品等级
isSuperiorEquip
不过客户端貌似有限制最多15星星哦~~
************************************************************************************************/
function getEnchantSstarts(itemReqLevel, isSuperiorEquip) {
	/*if (itemReqLevel >= 0 && itemReqLevel <= 94) {
        return isSuperiorEquip ? 3 : 5;
    } else if (itemReqLevel > 94 && itemReqLevel <= 107) {
        return isSuperiorEquip ? 5 : 8;
    } else if (itemReqLevel > 107 && itemReqLevel <= 117) {
        return isSuperiorEquip ? 8 : 10;
    } else if (itemReqLevel > 117 && itemReqLevel <= 127) {
        return isSuperiorEquip ? 10 : 15;
    } else if (itemReqLevel > 127 && itemReqLevel <= 137) {
        return isSuperiorEquip ? 12 : 20;
    } else if (itemReqLevel > 137 && itemReqLevel <= 147) {
        return isSuperiorEquip ? 15 : 25;
    } else if (itemReqLevel > 147) {
        return isSuperiorEquip ? 15 : 25;
    }*/
	return 100;
}

/************************************************************************************************
角色战力值计算
这里写战力计算公式
chr.setDisplaytext("");//则关闭战力显示
************************************************************************************************/
function combatEffectiveness(chr) {
	var Str = chr.getStat().getTotalStr(); //力量
	var Dex = chr.getStat().getTotalDex(); //敏捷
	var Int = chr.getStat().getTotalInt(); //智力
	var Luk = chr.getStat().getTotalLuk(); //运气
	var Magic = chr.getStat().getTotalMagic(); //魔法力
	var Watk = chr.getStat().getTotalWatk(); //攻击力
	var Hp = chr.getStat().getMaxHp(); //血量
	var Mp = chr.getStat().getMaxMp(); //魔量
	var data = (Str * 10) + (Dex * 10) + (Int * 10) + (Luk * 10) + (Magic * 100) + (Watk * 50) + (Hp * 1) + (Mp * 1);
	chr.setCombatEffectiveness(data);
	chr.setDisplaytext("战力:");
}

/************************************************************************************************
转生
chr.setDisplaytext2("");//则关闭转生显示
************************************************************************************************/
function reincarnation(chr) {
	chr.setDisplaytext2("转生:");
}

/************************************************************************************************
拜师
p 自己
chr 目标
收徒上限在脚本中设置
************************************************************************************************/
function baishi(p, chr) {
	if (chr == null) {
		return;
	}
	if (p.getMasterId() != 0) {
		p.dropMessage(1, "你已经有师傅了。");
		return;
	}
	if (chr.isGM()) {
		return;
	}
	if (p.getLevel() > 15) {
		p.dropMessage(1, "你的等级高于15级后,无法拜师。");
		return;
	}
	if (chr.getLevel() < 70) {
		p.dropMessage(1, "目前等级低于70级无法收徒。");
		return;
	}
	p.dropMessage(5, "已经发送拜师申请。");
	chr.addMasterApprenticeList(p.getId());
	chr.dropMessage(5, "收到来自“" + p.getName() + "”的拜师申请。");
}

/************************************************************************************************
砸卷 
chr 玩家
scrollid 卷轴ID
legendarySpirit 技能
Equipid 装备
返回true则阻止
************************************************************************************************/
function UseUpgradeScroll(chr, scrollid, legendarySpirit, Equipid) {

	return false;
}

/************************************************************************************************
放大镜
chr 玩家
Equipid 装备
Itemid 放大镜
返回true则阻止
************************************************************************************************/
function UseMagnify(chr, Equipid, Itemid) {

	return false;
}

/************************************************************************************************
花生机
chr 玩家
itemId 道具ID
************************************************************************************************/
function Peanuts(chr, itemId) {
	var sj1 = Math.floor(Math.random() * PeanutsData.length);
	var sj2 = Math.floor(Math.random() * PeanutsData.length);
	var item1id = PeanutsData[sj1][0];
	var item1count = PeanutsData[sj1][1];
	var item2id = PeanutsData[sj2][0];
	var item2count = PeanutsData[sj2][1];
	chr.sendPeanutResult(item1id, item1count, item2id, item2count, itemId);
}

//奖励随机
var PeanutsData = [[2000000, 1], [2000001, 2], [2000002, 2], [2000003, 2], [2000004, 2], ];

//不能删
function cancelSchedule() {}