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() {}