|
主题:冒险岛资源下载整合帖【资源下载链接】【已编辑完成~】【转自无忧小雪】 作者:wby238 时间:2010-08-07 09:44 | ||
各位冒险岛的fans你们好,现在集合了冒险岛062,075,079,082,架设端,一键端给大家下载,只要1铜币,详细见三楼。 | ||
| 1楼:wby238(2010-08-07 09:46) | ||
由于刚才发错,三楼才是连接 服务端修改文字教程 1、[079咖啡端]添加打开一个没有JS的NPC出现对话框 打开scr/net/s(和谐)f/odinms/scripting/npc/NPCScriptManager.java 找到 public void start(MapleClient c, int npc) { try { NPCConversationManager cm = new NPCConversationManager(c, npc); if (cms.containsKey(c)) { return; } cms.put(c, cm); Invocable iv = getInvocable("npc/" + npc + ".js", c); if (iv == null || NPCScriptManager.getInstance() == null) { cm.dispose(); return; } engine.put("cm", cm); NPCScript ns = iv.getInterface(NPCScript.class); scripts.put(c, ns); ns.start(); } catch (Exception e) { log.error("Error executing NPC script " + npc, e); dispose(c); cms.remove(c); } } 全选替换掉 将下面一段代码替换进去 public void start(MapleClient c, int npc) { try { if (c.getPlayer().isGM()) c.getPlayer().dropMessage("[系统提示]您已经建立与NPC:" + npc + "的对话。"); NPCConversationManager cm = new NPCConversationManager(c, npc); if (this.cms.containsKey(c)) return; this.cms.put(c, cm); Invocable iv = getInvocable("npc/" + npc + ".js", c); if ((iv == null) || (getInstance() == null)) { cm.sendOk("对不起,我并没有被管理员设置可使用,如果你觉得我应该工作的,那就请你汇报给管理员.\r\n我的ID编号: #r" + npc + "#k."); cm.dispose(); return; } this.engine.put("cm", cm); NPCScript ns = (NPCScript)iv.getInterface(NPCScript.class); this.scripts.put(c, ns); ns.start(); } catch (Exception e) { log.error("Error executing NPC script " + npc, e); dispose(c); this.cms.remove(c); } } 2、[079咖啡端]修复怪物打不死 1.打开源码找到net\s(和谐)f\odinms\net\channel\handler\AbstractDealDamageHandler.java 找到这个函数parseDamage() 然后用下面的代码替换 注意替换前先备份! --------------------------------------------------------------------------------- public AttackInfo parseDamage(MapleCharacter c, LittleEndianAccessor lea, boolean ranged) { AttackInfo ret = new AttackInfo(); lea.readByte(); lea.skip(8); ret.numAttackedAndDamage = lea.readByte(); lea.skip(8); ret.numAttacked = (ret.numAttackedAndDamage >>> 4 & 0xF); ret.numDamage = (ret.numAttackedAndDamage & 0xF); ret.allDamage = new ArrayList(); ret.skill = lea.readInt(); lea.skip(8); if ((ret.skill == 2121001) || (ret.skill == 2221001) || (ret.skill == 2321001) || (ret.skill == 5201002) || (ret.skill == 14111006) || (ret.skill == 5101004) || (ret.skill == 15101003)) ret.charge = lea.readInt(); else { ret.charge = 0; } if (ret.skill == 1221011) ret.isHH = true; lea.readInt(); ret.aresCombo = lea.readByte(); int sourceid = ret.skill; if ((sourceid == 21100004) || (sourceid == 21100005) || (sourceid == 21110003) || (sourceid == 21110004) || (sourceid == 21120006) || (sourceid == 21120007)) c.setCombo(1); ret.pos = lea.readByte(); ret.stance = lea.readByte(); if (ret.skill == 4211006) { return parseMesoExplosion(lea, ret); } if (ranged) { lea.readByte(); ret.speed = lea.readByte(); lea.readByte(); ret.direction = lea.readByte(); lea.skip(7); if ((ret.skill == 3121004) || (ret.skill == 3221001) || (ret.skill == 5221004) || (ret.skill == 13111002)) lea.skip(4); } else { lea.readByte(); ret.speed = lea.readByte(); lea.skip(4); } for (int i = 0; i < ret.numAttacked; ++i) { int oid = lea.readInt(); lea.skip(14); List allDamageNumbers = new ArrayList(); for (int j = 0; j < ret.numDamage; ++j) { int damage = lea.readInt(); MapleStatEffect effect = null; if (ret.skill != 0) effect = SkillFactory.getSkill(ret.skill).getEffect(c.getSkillLevel(SkillFactory.getSkill (ret.skill))); if ((damage != 0) && (effect != null) && (effect.getFixedDamage() != 0)) damage = effect.getFixedDamage(); allDamageNumbers.add(Integer.valueOf(damage)); } if (ret.skill != 5221004) lea.skip(4); ret.allDamage.add(new Pair(Integer.valueOf(oid), allDamageNumbers)); } return ret; } --------------------------------------------------------------------------------- 2.接着找到net\s(和谐)f\odinms\client\MapleCharacter.java 查找 //战神Combo private int combo = 0; private int comboCount = 0; 将其修改为 //战神Combo private int combo = 0; private int comboCounter = 0; 此时应再查找comboCount 将其修改为comboCounter(不然原变量将不可用 导致变量未定义) 应该也可以重新定义comboCounter这个变量 没实验 然后在下面适当处增加两个函数 public int getCombo() { return this.comboCounter; } public int setCombo(int combo) { return (this.comboCounter = combo); } 代码就修改完毕了 编译后 怪物就应该能掉血了! 大概原因分析: 攻击封包数据改变,原来处理封包的方式已经不能适用了 所以应当修改原来的处理结构! 3、[079咖啡端]修复双击人物客户端自动退出问题 双击人物不管是自己还是他人都需要查看角色信息,原先我以为是加入的有家族的原因。 换了个没家族的号还是那样, 结果我就感觉应该是处理封包的问题了。 说明白点就是 MaplePacketCreator.java 有问题,然后我又仔细比较了下 楚天和咖啡端的 MaplePacketCreator.java 发现charinfo 处理有出入。 咖啡端似乎少了一些东西, 就是椅子列表显示那部分。 于是我对照两者的代码修复了下。 也不算是修复。 因为这样弄过以后不会显示你有椅子。 抱歉。 我JAVA不太行。 大家原谅下了。 处理方法: 打开 src\net\s(和谐)f\cherry\tools\MaplePacketCreator.java (或者是src\net\s(和谐)f\odinms\tools\MaplePacketCreator.java) 找到 mplew.write(HexTool.getByteArrayFromHexString("00 00 00 00 00 00 01 00 00 00 D0 ED 2D 00 0C 87 A5 16 B4 F0 B0 16 10 00 00 00 84 E3 C6 2A 36 15 CF 59 6C 24 3E 00 CD DB 43 00 10 00 00 00 02 00 00 00 67 34 00 00 7F 36 00 00 DD CD CF 2A 10 00 00 00 B4 8B BB 2A 00 00 00 00 00 00 00 00 01 00 CD 00 10 00 00 00 18 E6 C6 2A DE 26 93 07 FD DC AB 7B 45 08 08 08 10 00 00 00")); 替换成 mplew.writeInt(0); mplew.writeShort(0); MapleInventory iv = chr.getInventory(MapleInventoryType.SETUP); List<Item> chairItems = new ArrayList(); for (IItem item : iv.list() ) { if ((item.getItemId() >= 3010000) && (item.getItemId() <= 3020001)) { //chairItems.add(item); } } mplew.writeInt(chairItems.size()); for (IItem item : chairItems ) { mplew.writeInt(item.getItemId()); } mplew.writeInt(0); 4、修复咖啡端不消耗飞镖 RangedAttackHandler.java 找到 //if (player.getJob().isA(MapleJob.Ares_1) || player.getJob().isA(MapleJob.Ares_2) || player.getJob().isA(MapleJob.Ares_3) || player.getJob().isA(MapleJob.Ares_4)) { MapleInventoryManipulator.removeById(c, MapleInventoryType.USE, projectile, bulletConsume, false, true); // } 按上面方式处理 5、修复黑龙项链带不了的BUG 先解释一下为什么国服的黑龙项链带不上。 用1.5deMSwZ.exe 打开string.wz得到这样的结果 Eqp.Ring.1112904.name 彩虹星环绕戒指 [2095484] Eqp.Ring.1112904.desc 五彩斑斓的星星和心围绕着角色旋转。 [2095507] Eqp.Ring.1112905.name 超大心环绕戒指 [2095572] Eqp.Ring.1112905.desc 可爱的大心心在角色周围以心形模样旋转。 [2095595] Eqp.Ring.1112906.name 心心祝福戒指 [2095664] Eqp.Ring.1112906.desc 可爱的心心在角色头顶画出心形模样旋转。 [2095685] Eqp.Ring.1112907.name 小鱼戒指 [2095754] Eqp.Ring.1112907.desc 装备时,会产生泡泡的效果。有时间限制。 [2095771] Eqp.Ring.1112916.name 寂寞单身戒指 [2095840] Eqp.Ring.1112916.desc 单身贵族的独立宣言,玩得就是“寂寞”!最IN的单身标记,高调不怕围观。 [2095861] Eqp.Ring.1122000.name 黑龙项环 [2095962] Eqp.Ring.1122007.name 休彼德蔓的项链 [2096001] 再来看下其他项链在哪个位置 Eqp.Accessory.1122029.name 苏醒的冒险之心 [1897757] Eqp.Accessory.1122030.name 苏醒的冒险之心 [1897802] Eqp.Accessory.1122031.name 苏醒的冒险之心 [1897836] Eqp.Accessory.1122032.name 苏醒的冒险之心 [1897870] Eqp.Accessory.1122033.name 苏醒的冒险之心 [1897904] Eqp.Accessory.1122034.name 觉醒的冒险之心 [1897938] Eqp.Accessory.1122035.name 觉醒的冒险之心 [1897983] Eqp.Accessory.1122036.name 觉醒的冒险之心 [1898017] Eqp.Accessory.1122037.name 觉醒的冒险之心 [1898051] Eqp.Accessory.1122038.name 觉醒的冒险之心 [1898085] Eqp.Accessory.1122058.name 休彼德蔓的混沌项链 [1898119] 很明显盛大把 黑龙项链 和 休彼德蔓的项链 故意或者无意放错了地方,放到了(戒指组里) 现在要做的是把这两个物体重新搬到 Accessory组里。 解决办法: 找到服务端目录 wz\String.wz\Eqp.img.xml 类似这样的结构 <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <imgdir name="Eqp.img"> <imgdir name="Eqp"> <imgdir name="Accessory"> <imgdir name="1010000"> <string name="name" value="褐色落腮胡"/> </imgdir> <imgdir name="1010001"> <string name="name" value="黑胡子"/> </imgdir> <imgdir name="1010002"> <string name="name" value="忍者口罩"/> </imgdir> <imgdir name="1010003"> <string name="name" value="刮脸痕迹"/> 查找 name="Ring" 再查找 1122000 (黑龙项环代码) 类似这样 <imgdir name="1112906"> <string name="name" value="心心祝福戒指"/> <string name="desc" value="可爱的心心在角色头顶画出心形模样旋转。"/> </imgdir> <imgdir name="1112907"> <string name="name" value="小鱼戒指"/> <string name="desc" value="装备时,会产生泡泡的效果。有时间限制。"/> </imgdir> <imgdir name="1112916"> <string name="name" value="寂寞单身戒指"/> <string name="desc" value="单身贵族的独立宣言,玩得就是“寂寞”!最IN的单身标记,高调不怕围观。"/> </imgdir> <imgdir name="1122000"> <string name="name" value="黑龙项环"/> </imgdir> <imgdir name="1122007"> <string name="name" value="休彼德蔓的项链"/> </imgdir> 把这段代码剪切出来 <imgdir name="1122000"> <string name="name" value="黑龙项环"/> </imgdir> <imgdir name="1122007"> <string name="name" value="休彼德蔓的项链"/> </imgdir> 放到<imgdir name="Accessory"> 组里。 最后类似这样的结构 <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <imgdir name="Eqp.img"> <imgdir name="Eqp"> <imgdir name="Accessory"> <imgdir name="1122000"> <string name="name" value="黑龙项环"/> </imgdir> <imgdir name="1122007"> <string name="name" value="休彼德蔓的项链"/> </imgdir> <imgdir name="1010000"> <string name="name" value="褐色落腮胡"/> </imgdir> <imgdir name="1010001"> <string name="name" value="黑胡子"/> </imgdir> <imgdir name="1010002"> <string name="name" value="忍者口罩"/> </imgdir> 然后重启服务端就OK。 装备上黑龙项链把。 不用源代码即可修复。 6、修复PB掉线问题 -----------新建文档 复制以下代码 将文件重命名为8820009.img.xml 放到服务端WZ中对应的xml下-- <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <imgdir name="8820009.img"> <imgdir name="info"> <int name="bodyAttack" value="0"/> <int name="level" value="1"/> <int name="maxHP" value="200000"/> <int name="maxMP" value="0"/> <int name="speed" value="0"/> <int name="PADamage" value="0"/> <int name="PDDamage" value="0"/> <int name="MADamage" value="0"/> <int name="MDDamage" value="0"/> <int name="acc" value="0"/> <int name="eva" value="0"/> <int name="exp" value="0"/> <int name="undead" value="0"/> <int name="pushed" value="1"/> <float name="fs" value="10.0"/> <int name="removeAfter" value="5"/> <int name="summonType" value="12"/> <int name="hideName" value="1"/> <imgdir name="revive"> <int name="0" value="8820001"/> <int name="1" value="8820003"/> <int name="2" value="8820005"/> <int name="3" value="8820006"/> <int name="4" value="8820004"/> <int name="5" value="8820002"/> </imgdir> <int name="noFlip" value="1"/> </imgdir> <imgdir name="stand"> <canvas name="0" width="4" height="4"> <vector name="origin" x="36" y="53"/> <int name="delay" value="30"/> <vector name="head" x="1" y="-1500"/> </canvas> </imgdir> <imgdir name="hit1"> <canvas name="0" width="4" height="4"> <vector name="origin" x="36" y="53"/> <int name="delay" value="30"/> <vector name="head" x="1" y="-1500"/> </canvas> </imgdir> <imgdir name="die1"> <canvas name="0" width="213" height="450"> <vector name="origin" x="774" y="495"/> <int name="delay" value="180"/> <vector name="head" x="1" y="-1500"/> <int name="a0" value="255"/> <int name="a1" value="255"/> </canvas> <canvas name="1" width="227" height="493"> <vector name="origin" x="778" y="534"/> <int name="delay" value="180"/> <vector name="head" x="1" y="-1500"/> </canvas> <canvas name="2" width="232" height="497"> <vector name="origin" x="783" y="533"/> <int name="delay" value="180"/> <vector name="head" x="1" y="-1500"/> </canvas> <canvas name="3" width="237" height="497"> <vector name="origin" x="787" y="529"/> <int name="delay" value="180"/> <vector name="head" x="1" y="-1500"/> </canvas> <canvas name="4" width="239" height="494"> <vector name="origin" x="788" y="525"/> <int name="delay" value="180"/> <vector name="head" x="1" y="-1500"/> </canvas> <canvas name="5" width="241" height="496"> <vector name="origin" x="789" y="526"/> <int name="delay" value="180"/> <vector name="head" x="1" y="-1500"/> </canvas> <canvas name="6" width="243" height="494"> <vector name="origin" x="790" y="523"/> <int name="delay" value="180"/> <vector name="head" x="1" y="-1500"/> </canvas> <canvas name="7" width="243" height="491"> <vector name="origin" x="790" y="520"/> <int name="delay" value="180"/> <vector name="head" x="1" y="-1500"/> </canvas> <canvas name="8" width="241" height="483"> <vector name="origin" x="789" y="513"/> <int name="delay" value="180"/> <vector name="head" x="1" y="-1500"/> </canvas> <canvas name="9" width="239" height="479"> <vector name="origin" x="788" y="510"/> <int name="delay" value="180"/> <vector name="head" x="1" y="-1500"/> </canvas> <canvas name="10" width="237" height="476"> <vector name="origin" x="787" y="508"/> <int name="delay" value="180"/> <vector name="head" x="1" y="-1500"/> </canvas> <canvas name="11" width="230" height="485"> <vector name="origin" x="784" y="521"/> <int name="delay" value="180"/> <vector name="head" x="1" y="-1500"/> </canvas> <canvas name="12" width="235" height="490"> <vector name="origin" x="779" y="535"/> <int name="delay" value="180"/> <vector name="head" x="1" y="-1500"/> </canvas> <canvas name="13" width="275" height="495"> <vector name="origin" x="797" y="540"/> <int name="delay" value="180"/> <vector name="head" x="1" y="-1500"/> </canvas> <canvas name="14" width="284" height="495"> <vector name="origin" x="797" y="540"/> <int name="delay" value="180"/> <vector name="head" x="1" y="-1500"/> </canvas> <canvas name="15" width="249" height="493"> <vector name="origin" x="786" y="538"/> <int name="delay" value="180"/> <vector name="head" x="1" y="-1500"/> </canvas> <canvas name="16" width="218" height="464"> <vector name="origin" x="774" y="509"/> <int name="delay" value="180"/> <vector name="head" x="1" y="-1500"/> </canvas> <canvas name="17" width="213" height="480"> <vector name="origin" x="774" y="525"/> <int name="delay" value="180"/> <vector name="head" x="1" y="-1500"/> </canvas> <canvas name="18" width="213" height="488"> <vector name="origin" x="774" y="533"/> <int name="delay" value="180"/> <vector name="head" x="1" y="-1500"/> </canvas> <canvas name="19" width="214" height="491"> <vector name="origin" x="775" y="536"/> <int name="delay" value="180"/> <vector name="head" x="1" y="-1500"/> </canvas> <canvas name="20" width="216" height="489"> <vector name="origin" x="776" y="534"/> <int name="delay" value="180"/> <vector name="head" x="1" y="-1500"/> </canvas> <canvas name="21" width="213" height="450"> <vector name="origin" x="774" y="495"/> <int name="delay" value="600"/> <vector name="head" x="1" y="-1500"/> </canvas> </imgdir> </imgdir> 7、锁定某些地图不能进 打开MapleGenericPortal.java 搜索 changed = true; 在上面加入以下语句 if (getTargetMapId() >= 910000003 && getTargetMapId() <= 910000022) { c.getSession().write(MaplePacketCreator.enableActions()); player.getClient().getSession().write(MaplePacketCreator.serverNotice(5, "[任务公告:请通过npc进入任务房间!")); } else { c.getPlayer().changeMap(to, pto); } 编译,OK 8、lockmap(锁定地图) /* 地图锁写脚本 演示NPC程序 只供学习参考 */ importPackage(net.s(和谐)f.cherry.scripting); var Itemid = 4001126; //设置需要的道具ID var Itemsl = 10; //设置数量 function start(ms) { if (! AbstractPlayerInteraction(ms.getPlayer().getClient()).haveItem(Itemid, Itemsl)){ AbstractPlayerInteraction(ms.getPlayer().getClient()).warp(910000000,0); AbstractPlayerInteraction(ms.getPlayer().getClient()).showInstruction("此地图已被GM限制进入,系统已将你返回", 250, 20); }else{ AbstractPlayerInteraction(ms.getPlayer().getClient()).showInstruction("通过验证", 250, 20); } } 解锁地图 /* 地图锁写脚本 演示NPC程序 只供学习参考 */ var Maps = Array(910000001,910000002,922000021,922010504,240010900); var status = 0; var MapString = "" function start() { status = -1; action(1, 0, 0); } function action(mode, type, selection) { if (mode < 1) { cm.dispose(); } else { if (mode == 1) status++; else status--; if (status == 0) { for(i = 0; i < Maps.length; i++){ var NextMap = cm.getC().getChannelServer().getMapFactory().getMap(Maps<i>); var MapName = NextMap.getMapName(); var MapFy = NextMap.getOnUserEnter(); if (MapFy != "lockmap"){ MapString = MapString + "#L" + i + "##b锁定地图#k---" + MapName + "#b(未锁定)#k\r\n"; }else{ MapString = MapString + "#L" + i + "##r解锁地图#k---" + MapName + "#r(已锁定)#k\r\n"; } } cm.sendSimple(MapString); } else if (status == 1) { var MapStats = cm.getC().getChannelServer().getMapFactory().getMap(Maps[selection]).getOnUserEnter(); if(MapStats != "lockmap"){ cm.getC().getChannelServer().getMapFactory().getMap(Maps[selection]).setOnUserEnter("lockmap") cm.sendOk("锁定地图成功"); cm.dispose(); }else{ cm.getC().getChannelServer().getMapFactory().getMap(Maps[selection]).setOnUserEnter("") cm.sendOk("解锁地图成功"); cm.dispose(); } } } } 9、上线自动穿装备 src\net\s(和谐)f\odinms\net\login\handler CreateCharHandler.java 搜索 MapleInventory equip = newchar.getInventory(MapleInventoryType.EQUIPPED); 在下面添加以下语句,即可编译,装备ID自己换吧 IItem eq_top = MapleItemInformationProvider.getInstance().getEquipById(1052081); eq_top.setPosition((byte) -5); equip.addFromDB(eq_top); IItem eq_bottom = MapleItemInformationProvider.getInstance().getEquipById(bottom); eq_bottom.setPosition((byte) -6); equip.addFromDB(eq_bottom); IItem eq_shoes = MapleItemInformationProvider.getInstance().getEquipById(shoes); eq_shoes.setPosition((byte) -7); equip.addFromDB(eq_shoes); IItem eq_weapon = MapleItemInformationProvider.getInstance().getEquipById(weapon); eq_weapon.setPosition((byte) -11); equip.addFromDB(eq_weapon); IItem pHat = MapleItemInformationProvider.getInstance().getEquipById(1002562); pHat.setPosition((byte) -101); equip.addFromDB(pHat); IItem pWeap = MapleItemInformationProvider.getInstance().getEquipById(1702174); pWeap.setPosition((byte) -111); equip.addFromDB(pWeap); 10、结婚修复法 /* ====================================== 小权改端技术 ====================================== */ 首先,找到NPCConversationManager.java 在合适的位置上插入以下代码(请直接复制,本人亲自测试,无错..所有端均可通过): public boolean createMarriage(String partner_) { //声明变量 MapleCharacter partner = getCharByName(partner_); //名字 if (partner == null) { return false; } partner.setMarried(true); getPlayer().setMarried(true); partner.setPartnerId(getPlayer().getId()); getPlayer().setPartnerId(partner.getId()); if (partner.getGender() > 0) { Marriage.createMarriage(getPlayer(), partner); } else { Marriage.createMarriage(partner, getPlayer()); } return true; } public boolean createEngagement(String partner_) { MapleCharacter partner = getCharByName(partner_); if (partner == null) { return false; } if (partner.getGender() > 0) { Marriage.createEngagement(getPlayer(), partner); } else { Marriage.createEngagement(partner, getPlayer()); } return true; } public void divorceMarriage() { //增加至XXXX getPlayer().setPartnerId(0); getPlayer().setMarried(false); Marriage.divorceMarriage(getPlayer()); ///结束至XXXX } 先别着急这编译..请继续看下去 打开 src\net\s(和谐)f\odinms\scripting\npc 这个文件夹新建--文本文档--复制以下代码进去: /* * @丶小_路. */ package net.s(和谐)f.odinms.scripting.npc; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import net.s(和谐)f.odinms.client.MapleCharacter; import net.s(和谐)f.odinms.database.DatabaseConnection; public class Marriage { private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(Marriage.class); public static void createMarriage(MapleCharacter player, MapleCharacter partner) { try { Connection con = DatabaseConnection.getConnection(); PreparedStatement ps = con.prepareStatement("INSERT INTO marriages (husbandid, wifeid) VALUES (?, ?)"); ps.setInt(1, player.getId()); ps.setInt(2, partner.getId()); ps.executeUpdate(); ps.close(); } catch (SQLException ex) { log.warn("结婚: " + player.getName() + " 和 " + partner.getName(), ex); } } public static void createEngagement(MapleCharacter player, MapleCharacter partner) { try { Connection con = DatabaseConnection.getConnection(); PreparedStatement ps = con.prepareStatement("INSERT INTO engagements (husbandid, wifeid) VALUES (?, ?)"); ps.setInt(1, player.getId()); ps.setInt(2, partner.getId()); ps.executeUpdate(); } catch (SQLException ex) { log.warn("宣布与参与 " + player.getName() + " 和" + partner.getName(), ex); } } public static void divorceEngagement(MapleCharacter player, MapleCharacter partner) { try { Connection con = DatabaseConnection.getConnection(); int pid = 0; if (player.getGender() == 0) { pid = player.getId(); } else { pid = partner.getId(); } PreparedStatement get = con.prepareStatement("SELECT FROM engagements WHERE husbandid = ?"); get.setInt(1, pid); ResultSet rs = get.executeQuery(); PreparedStatement ps = con.prepareStatement("DELETE FROM engagements WHERE husbandid = ?"); if (rs.next()) { ps.setInt(1, pid); } else { return; } ps.executeUpdate(); PreparedStatement ps1 = con.prepareStatement("UPDATE characters SET marriagequest = 0 WHERE id = ?, and WHERE id = ?"); ps1.setInt(1, player.getId()); ps1.setInt(2, partner.getId()); ps1.executeUpdate(); } catch (SQLException ex) { log.warn("宣布与参与 " + player.getName() + " 和 " + partner.getName(), ex); } } public static void divorceMarriage(MapleCharacter player, MapleCharacter partner) { try { Connection con = DatabaseConnection.getConnection(); int pid = 0; if (player.getGender() == 0) { pid = player.getId(); } else { pid = partner.getId(); } PreparedStatement get = con.prepareStatement("SELECT partnerid FROM characters WHERE id = ?"); get.setInt(1, player.getId()); ResultSet rs = get.executeQuery(); if (rs.next()) { PreparedStatement ps = con.prepareStatement("DELETE FROM marriages WHERE husbandid = ?"); ps.setInt(1, pid); ps.executeUpdate(); PreparedStatement ps1 = con.prepareStatement("UPDATE characters SET married = 0 WHERE id = ?, and WHERE id = ?"); ps1.setInt(1, player.getId()); ps1.setInt(2, partner.getId()); ps1.executeUpdate(); ps.close(); ps1.close(); } else { return; } get.close(); } catch (SQLException ex) { log.warn("离婚:" + player.getName() + " 和 " + partner.getName(), ex); } } } 复制完毕后关闭并保存把文件命名为: Marriage.java 保存文件.必须在这个文件夹 src\net\s(和谐)f\odinms\scripting\npc 复制以下NPC脚本.结婚的教堂里的哪位人物都行.复制如下代码加入NPC脚本中!!! /* *@丶小_路. */ var status = 0; var otherChar; var Char; importPackage(net.s(和谐)f.odinms.client); importPackage(net.s(和谐)f.odinms.server); function start(character3) { status = -1; action(1, 0, 0); otherChar = character3; } function action(mode, type, selection) { if (mode == -1) { otherChar.getClient().getSession().write (net.s(和谐)f.odinms.tools.MaplePacketCreator.serverNotice(1, "您的伴侣拒绝您的请求!")); cm.dispose(); } else { if (mode == 0 && status == 0) { otherChar.getClient().getSession().write (net.s(和谐)f.odinms.tools.MaplePacketCreator.serverNotice(1, "您的伴侣拒绝您的请求..")); cm.dispose(); return; } if (mode == 1) { status++; } else { status--; } if (status == 0) { cm.sendNext("有人想向您发送内容!."); } else if (status == 1) { var t = otherChar.getName(); cm.sendYesNo("你想不想参与 " + t + "的婚礼?") ; } else if (status == 2) { otherChar.getClient().getSession().write (net.s(和谐)f.odinms.tools.MaplePacketCreator.serverNotice(1, "您的伴侣接受了您的请求!")); otherChar.setMarriageQuestLevel(50); cm.getPlayer().setMarriageQuestLevel(50); cm.createEngagement(cm.getPlayer().getId(), otherChar.getId()); if (otherChar.countItem(2240000) > 0) { MapleInventoryManipulator.removeById(otherChar.getClient(), MapleInventoryType.USE, 2240000, 1, false, false); MapleInventoryManipulator.addById(otherChar.getClient(), 4031358, 1, "shit!"); MapleInventoryManipulator.addById(cm.getPlayer().getClient(), 4031358, 1, "shit!"); MapleInventoryManipulator.addById(otherChar.getClient(), 4031357, 1, "shit!"); } else if (otherChar.countItem(2240001) > 0) { MapleInventoryManipulator.removeById(otherChar.getClient(), MapleInventoryType.USE, 2240001, 1, false, false); MapleInventoryManipulator.addById(otherChar.getClient(), 4031360, 1, "shit!"); MapleInventoryManipulator.addById(cm.getPlayer().getClient(), 4031360, 1, "shit!"); MapleInventoryManipulator.addById(otherChar.getClient(), 4031359, 1, "shit!"); } else if (otherChar.countItem(2240002) > 0) { MapleInventoryManipulator.removeById(otherChar.getClient(), MapleInventoryType.USE, 2240002, 1, false, false); MapleInventoryManipulator.addById(otherChar.getClient(), 4031362, 1, "shit!"); MapleInventoryManipulator.addById(cm.getPlayer(), 4031362, 1, "shit!"); MapleInventoryManipulator.addById(otherChar.getClient(), 4031361, 1, "shit!"); } else if (otherChar.countItem(2240003) > 0) { MapleInventoryManipulator.removeById(otherChar.getClient(), MapleInventoryType.USE, 2240003, 1, false, false); MapleInventoryManipulator.addById(otherChar.getClient(), 4031364, 1, "shit!"); MapleInventoryManipulator.addById(cm.getPlayer(), 4031364, 1, "shit!"); MapleInventoryManipulator.addById(otherChar.getClient(), 4031363, 1, "shit!"); } cm.dispose(); } } } 11、购物商城添加新物品和点数商品 首先打開ETC.WZ 找到Commodity.img.xml 這個是有分代碼到多少~~那個東西延續就在哪裡 我是以前面主頁的推薦物品新物品那邊新增的 今天摸索來的我去找推薦物品那邊 V62的這個是到6226 (<imgdir name="6226">) 所以你要添加就重6227開始添加 這個是位置的代碼(這個是在推薦物品那邊添加物品添加的物品會在推薦物品那行出現(<int name="SN" value="10001930"/>) 如果要再推薦物品就重10001931開始加 <int name="ItemId" value="你要添加的物品代碼"/>(這個是要添加的物品代碼不用說了吧?) <int name="Count" value="1"/>(這個沒試過這個都填1) <int name="Price" value="價錢"/>(這個是添加你要的點數價位) <int name="Period" value="90"/>(道具到限日期90就代表90天(這應該沒用@@)) <int name="Priority" value="9"/>(這行的位置不要動看它上面是多少下面就填多少) <int name="Gender" value="2"/>(這個是性別2代表男女都可以用0代表男生1代表女生) <int name="OnSale" value="1"/>這個1代表NEW或者HOT.....(最好依照前面來改..) <int name="Class" value="0"/>(看前面代碼有沒有來添加不知道是啥東西....) 如果要初學者最好先依照10001931開始加 把物品列在推薦物品那邊 如果你熟了再加入其他行例如武器列戒指列添加 如果想把推薦物品那4個換掉找到那4個代碼 |