| 发帖: 138
|
粉丝: 0
|
| 铜币: 110 |
龙鳞: 138 |
能量: 0
耐力: 49
经验: Lv3
精灵:
|
|
|
该隐藏帖已经发布超过60天,已自动取消隐藏功能,无需回复即可查看!由于刚才发错,三楼才是连接 Z"8cGN' 服务端修改文字教程 :95_W/l 1、[079咖啡端]添加打开一个没有JS的NPC出现对话框 X/D9%[{& 打开scr/net/s(和谐)f/odinms/scripting/npc/NPCScriptManager.java ]$k
m
sBG(CpQ 找到 Qz90 mb public void start(MapleClient c, int npc) { Rn^N+3o'M try { #[rFep NPCConversationManager cm = new NPCConversationManager(c, npc); !~DkA7i 55 if (cms.containsKey(c)) { ,T>2zSk return; ON=ley } ;."{0gq cms.put(c, cm); si4=C Invocable iv = getInvocable("npc/" + npc + ".js", c); w5G34[v if (iv == null || NPCScriptManager.getInstance() == null) { w9?wy#YI cm.dispose(); 8i
'jkyInT return; '`VO@a } k
5\
zGsol engine.put("cm", cm); T//+&Sk[ NPCScript ns = iv.getInterface(NPCScript.class); $R}iL scripts.put(c, ns); FQ&VM
6_ ns.start(); 8{^GC(W{] } catch (Exception e) { H_$f
v_ log.error("Error executing NPC script " + npc, e); )uJ`E8>- dispose(c); |vE#unA cms.remove(c); ,UJPLj^ } )W7H{# } *m Tc4&* x-k/rZ 全选替换掉 O*"wQ50Ou 将下面一段代码替换进去 KD<`-b)7< public void start(MapleClient c, int npc) pv.),Iv-68 { 5N
}|VGN try { IaqN@IlWb if (c.getPlayer().isGM()) R_&V.\e
_ c.getPlayer().dropMessage("[系统提示]您已经建立与NPC:" + npc + "的对话。"); |"&4"nwa $f-pLF+x NPCConversationManager cm = new NPCConversationManager(c, npc); TgG)btQ if (this.cms.containsKey(c)) H0Xda.Y( return; uPD_s
[ ~9 nrS9) this.cms.put(c, cm); yq^$H^_O
p Invocable iv = getInvocable("npc/" + npc + ".js", c);
jS)-COk if ((iv == null) || (getInstance() == null)) { RR {9 cm.sendOk("对不起,我并没有被管理员设置可使用,如果你觉得我应该工作的,那就请你汇报给管理员.\r\n我的ID编号: #r" + npc + "#k."); Ho
{?m^ cm.dispose(); E*]L]vR return; \FX3=WW } Tfs9<k>G# this.engine.put("cm", cm); z>#$#:Z4 NPCScript ns = (NPCScript)iv.getInterface(NPCScript.class);
]@
0V this.scripts.put(c, ns); 9K_HcLO%y ns.start(); ag4^y& } catch (Exception e) { d`*vJ#$>2 log.error("Error executing NPC script " + npc, e); 3]82gZGG dispose(c); KUV{]?' this.cms.remove(c); (
I~X
wP& } JugQ +0 } V^H47O;VC 2、[079咖啡端]修复怪物打不死 m/c~2?-;
1.打开源码找到net\s(和谐)f\odinms\net\channel\handler\AbstractDealDamageHandler.java `l@t3/ SQCuY<mD 找到这个函数parseDamage() 然后用下面的代码替换 注意替换前先备份! eh=bClk 4h@
of' --------------------------------------------------------------------------------- ^8t*WphZC z@LP9+?dE public AttackInfo parseDamage(MapleCharacter c, LittleEndianAccessor lea, boolean ranged) { u9%:2$[ AttackInfo ret = new AttackInfo(); 438>)= lea.readByte(); C8SNSeg lea.skip(8); Xc<9[@
ret.numAttackedAndDamage = lea.readByte(); |-?b)yuAz lea.skip(8); g)Uh
ret.numAttacked = (ret.numAttackedAndDamage >>> 4 & 0xF); gU$3Y#R ret.numDamage = (ret.numAttackedAndDamage & 0xF); Yhdt8[ 2 ret.allDamage = new ArrayList(); g4932_tC ret.skill = lea.readInt(); ? 7dDQI7^( lea.skip(8); Wsz9X; if ((ret.skill == 2121001) || (ret.skill == 2221001) || (ret.skill == 2321001) || (ret.skill == N1+]3kt ~ V3nv5/6 5201002) || (ret.skill == 14111006) || (ret.skill == 5101004) || (ret.skill == 15101003)) wn.0U ret.charge = lea.readInt(); _dY}86{ else { gC:E38u ret.charge = 0; jF0BWPL } XX+rf
*Fs^T^ ?r if (ret.skill == 1221011) 0;`PHNBq ret.isHH = true; +DDvM;31w RozsRt;i lea.readInt(); D7oV&vXg ret.aresCombo = lea.readByte(); S!c@6&XJm? int sourceid = ret.skill; .h }D%Qa if ((sourceid == 21100004) || (sourceid == 21100005) || (sourceid == 21110003) || (sourceid == B9 {DO cA^7}}?e 21110004) || (sourceid == 21120006) || (sourceid == 21120007)) iTyApLV c.setCombo(1); x@x@0k`
A2 $a]dxRkz ret.pos = lea.readByte(); p#
I1l2nE ret.stance = lea.readByte(); D{}\7qe *gKr1}M if (ret.skill == 4211006) { L
3Iz]D3s return parseMesoExplosion(lea, ret); e6/} M3B } VdrF=V&] O l0,O4k2 ' if (ranged) { mQ)l`wGh lea.readByte(); G]4+Qr? ret.speed = lea.readByte(); &0blHDMj{# lea.readByte(); =sJHnWL[ ret.direction = lea.readByte(); %iML??S lea.skip(7); N{@eV][Q if ((ret.skill == 3121004) || (ret.skill == 3221001) || (ret.skill == 5221004) || (ret.skill == }gt~{9?c Y
f9L~K 13111002)) B) iJH lea.skip(4); "R]K!GU
U } jV8><5C else { nhxl#
lea.readByte(); d":{a6D*d ret.speed = lea.readByte(); l#:Q V: lea.skip(4); ot6Pq} } a_x6 v* 3Pq)RD|hn for (int i = 0; i < ret.numAttacked; ++i) { m/h0J03'T int oid = lea.readInt(); r-uIFhV
^ Ku# _ lea.skip(14); m]vr|:{6/ b s*Z{R List allDamageNumbers = new ArrayList(); L*38T\ for (int j = 0; j < ret.numDamage; ++j) { (/BkwbJyE int damage = lea.readInt(); =ye}IpC*M [!$>:_Vq/ MapleStatEffect effect = null; "*WXr$ if (ret.skill != 0) \/G Y0s effect = SkillFactory.getSkill(ret.skill).getEffect(c.getSkillLevel(SkillFactory.getSkill <>GyG-q [O'p&
j@ (ret.skill))); x F
#)T* #,pLVt< if ((damage != 0) && (effect != null) && (effect.getFixedDamage() != 0)) 8t"DQ Y-R damage = effect.getFixedDamage(); `_
L|Is=n r3)t5P*_ allDamageNumbers.add(Integer.valueOf(damage)); \FM- FQK } U3QnWPt}> if (ret.skill != 5221004) j_g9RmZT lea.skip(4); F!<x;h( W>49,A,q ret.allDamage.add(new Pair(Integer.valueOf(oid), allDamageNumbers)); %;gWl1&5 } S^.=j
oI &c!-C_L 2 return ret; EtG)2) } e4P.G4 }9dgm[C[b Plv+ mb --------------------------------------------------------------------------------- f#+ h_1# O@$i 2.接着找到net\s(和谐)f\odinms\client\MapleCharacter.java .YlM'E*X ;U4X
U 查找 AE Jm/8,T //战神Combo ' ga2C\) private int combo = 0; 4
]R3*F private int comboCount = 0; M>j)6?n`_ C,rZ}- 将其修改为 )}8%Gs4C //战神Combo mUw,q;{ private int combo = 0; r~t7Z+PXF private int comboCounter = 0; pq`MO
.R `VbG%y&I 此时应再查找comboCount 将其修改为comboCounter(不然原变量将不可用 导致变量未定义) CSs6Vm!= 应该也可以重新定义comboCounter这个变量 没实验 _!D$Aj >aK&T"
然后在下面适当处增加两个函数 N"{o3QmA $P~ a public int getCombo() { :'=C/AL return this.comboCounter; AJ}Q,E } W525:h52{ 03y<'n public int setCombo(int combo) { 4#uoPkLK return (this.comboCounter = combo); CaMG$X&O } wOP}SMn cR} =3|t 代码就修改完毕了 编译后 怪物就应该能掉血了! b"V-!.02 [8n4lE[)" TjdY Ck]' 大概原因分析: R&A.F+Zgt 攻击封包数据改变,原来处理封包的方式已经不能适用了 所以应当修改原来的处理结构! Ab)7hCUW 3、[079咖啡端]修复双击人物客户端自动退出问题 ySZ)yT 双击人物不管是自己还是他人都需要查看角色信息,原先我以为是加入的有家族的原因。 换了个没家族的号还是那样, S7*:eo 结果我就感觉应该是处理封包的问题了。 说明白点就是 MaplePacketCreator.java 有问题,然后我又仔细比较了下 楚天和咖啡端的 MaplePacketCreator.java 6P8X)3CE<T j.*}W4`Q_ 发现charinfo 处理有出入。 咖啡端似乎少了一些东西, 就是椅子列表显示那部分。 于是我对照两者的代码修复了下。 $+j) 也不算是修复。 因为这样弄过以后不会显示你有椅子。 抱歉。 我JAVA不太行。 大家原谅下了。 G Kr
L 8Sa<I.l 处理方法: ^S@b* <Th.}= 打开 src\net\s(和谐)f\cherry\tools\MaplePacketCreator.java Z$@Nzza- (或者是src\net\s(和谐)f\odinms\tools\MaplePacketCreator.java) &~EO
M NgKNT}JDv #e[5O|V~ 找到 %qhaVM$] 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")); !k)
?H*
^@ 4{=Em5`HbO Nt?B(.G o^_am>h ZhU2z*qN# 替换成 ^EZoP:x(oE mplew.writeInt(0); 8?!Vr1x mplew.writeShort(0); AmHIG_' MapleInventory iv = chr.getInventory(MapleInventoryType.SETUP);
W:G*t4i List<Item> chairItems = new ArrayList(); L\5n!(,0 for (IItem item : iv.list() ) { 1^mO"nX if ((item.getItemId() >= 3010000) && (item.getItemId() <= 3020001)) { ijfT!W //chairItems.add(item); v>6r
|{ } XR(kR{yo } c2QC`h(Wb mplew.writeInt(chairItems.size()); YDJc@*D for (IItem item : chairItems ) { `7`iCYiTy mplew.writeInt(item.getItemId()); n@f@-d$m\< } #<:khs6 mplew.writeInt(0); |{(ynZ]R 4、修复咖啡端不消耗飞镖 TaH9Nu RangedAttackHandler.java !xSGZD=AD S6uBk"V! 找到 FrS>.!OFn //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)) { ek<U2C_
u# MapleInventoryManipulator.removeById(c, MapleInventoryType.USE, projectile, bulletConsume, false, true); Bb6_['y // } 3$TpI5A (msJ:SG 按上面方式处理 0FBifK 5、修复黑龙项链带不了的BUG D
KOdqTW 先解释一下为什么国服的黑龙项链带不上。 用1.5deMSwZ.exe 打开string.wz得到这样的结果 Om*Dy} A'T! og|5 Eqp.Ring.1112904.name 彩虹星环绕戒指 [2095484]
I`7[0jA~ Eqp.Ring.1112904.desc 五彩斑斓的星星和心围绕着角色旋转。 [2095507] Sk xaSJ" Eqp.Ring.1112905.name 超大心环绕戒指 [2095572] *!r8HV/< Eqp.Ring.1112905.desc 可爱的大心心在角色周围以心形模样旋转。 [2095595] FK>rc3 q Eqp.Ring.1112906.name 心心祝福戒指 [2095664] 9j/B3CjW Eqp.Ring.1112906.desc 可爱的心心在角色头顶画出心形模样旋转。 [2095685] !Iqyt. . Eqp.Ring.1112907.name 小鱼戒指 [2095754] tfO
_b5g Eqp.Ring.1112907.desc 装备时,会产生泡泡的效果。有时间限制。 [2095771] (Y%}N
(Jg Eqp.Ring.1112916.name 寂寞单身戒指 [2095840] {.AFg/Z Eqp.Ring.1112916.desc 单身贵族的独立宣言,玩得就是“寂寞”!最IN的单身标记,高调不怕围观。 [2095861] q :gH`5N Eqp.Ring.1122000.name 黑龙项环 [2095962] rHznXME$wZ Eqp.Ring.1122007.name 休彼德蔓的项链 [2096001] a[!':-R`s /$E1!9J 再来看下其他项链在哪个位置 rBaK$Ut PeOgXg)L`z q-H]Hxv Eqp.Accessory.1122029.name 苏醒的冒险之心 [1897757] rz(DZ
V Eqp.Accessory.1122030.name 苏醒的冒险之心 [1897802] vhKD_}}aP Eqp.Accessory.1122031.name 苏醒的冒险之心 [1897836] xM( Eqp.Accessory.1122032.name 苏醒的冒险之心 [1897870] g_`8K,6ln Eqp.Accessory.1122033.name 苏醒的冒险之心 [1897904] H3JWf
MlW Eqp.Accessory.1122034.name 觉醒的冒险之心 [1897938] '`n\YO.N Eqp.Accessory.1122035.name 觉醒的冒险之心 [1897983] G 7u85cie Eqp.Accessory.1122036.name 觉醒的冒险之心 [1898017] :gmVX} Eqp.Accessory.1122037.name 觉醒的冒险之心 [1898051] =6'A8d Eqp.Accessory.1122038.name 觉醒的冒险之心 [1898085] |"arVde Eqp.Accessory.1122058.name 休彼德蔓的混沌项链 [1898119] zPn8>J<.0Q Z=ho7i TAP
/gN' *ZHk^d: 很明显盛大把 黑龙项链 和 休彼德蔓的项链 故意或者无意放错了地方,放到了(戒指组里) y3vOb , 4 ry:tL0;;e# 现在要做的是把这两个物体重新搬到 Accessory组里。 iVA_a8} / wEr>[8S z[B7k%} 解决办法: fE >FT9c ~dv
C$ Z"A:^jZ<s 找到服务端目录 wz\String.wz\Eqp.img.xml ,+XQ!y% r~X6qC 类似这样的结构 >PTq5pk (5SI!1N <?xml version="1.0" encoding="UTF-8" standalone="yes"?> i^yQ;
2- <imgdir name="Eqp.img"> )<+Z,6 <imgdir name="Eqp"> |e!Sm{#! <imgdir name="Accessory"> ?U&onGy <imgdir name="1010000"> lw7wvZD <string name="name" value="褐色落腮胡"/> }wn GO
r </imgdir>
) s M}BY <imgdir name="1010001"> q^gd1K<N <string name="name" value="黑胡子"/> 'n\ZmG{ </imgdir> jd#{66: <imgdir name="1010002"> 4JucNGv <string name="name" value="忍者口罩"/> K/altyj` </imgdir> lPjgBp{/ <imgdir name="1010003"> >%{h_5 <string name="name" value="刮脸痕迹"/> v+Hu=RZE Q-AN~k8+)[ ]C_6I\Z#=W 查找 name="Ring" 再查找 1122000 (黑龙项环代码) 0=~Ji_5mB :t(}h!7 类似这样 H&I0\upd xZ .:H&0G <imgdir name="1112906"> -k'=s{iy <string name="name" value="心心祝福戒指"/> I3$v-OiL <string name="desc" value="可爱的心心在角色头顶画出心形模样旋转。"/> NWFZ:h@v </imgdir>
!9-dS=:Y <imgdir name="1112907"> *fl1
=Rfr <string name="name" value="小鱼戒指"/> %"o4IYV# <string name="desc" value="装备时,会产生泡泡的效果。有时间限制。"/> rkVZP!7! </imgdir> }a8N!g <imgdir name="1112916"> +:D0tYk2B <string name="name" value="寂寞单身戒指"/> 27)$;1MT: <string name="desc" value="单身贵族的独立宣言,玩得就是“寂寞”!最IN的单身标记,高调不怕围观。"/> &_ber ad </imgdir> ]RV6(|U4_ <imgdir name="1122000"> C0e<
_6p= <string name="name" value="黑龙项环"/> ]:F]VRPT </imgdir> >t.I,Zn <imgdir name="1122007"> .S[5CO^ <string name="name" value="休彼德蔓的项链"/> FG?B:Zl%T </imgdir> u4%-e)$X >LLFe~9`g 把这段代码剪切出来 /#
blXI UJO+7h' <imgdir name="1122000"> n{M!l\1 <string name="name" value="黑龙项环"/> % 30&6 " </imgdir> VXC_Y <imgdir name="1122007"> ]F,5Oh :OY <string name="name" value="休彼德蔓的项链"/> 7p|Pv;wp| </imgdir> :[Fwc XBBsdldZ 放到<imgdir name="Accessory"> 组里。 I\":L o +&/ N-t 最后类似这样的结构 h.PY$W< |3s-BKbN4 <?xml version="1.0" encoding="UTF-8" standalone="yes"?> =r`>tWs <imgdir name="Eqp.img"> WKP=[o^ <imgdir name="Eqp"> a&j
H9 <imgdir name="Accessory"> {jbOcx$t <imgdir name="1122000"> ]ko>vQ4]3 <string name="name" value="黑龙项环"/> Dp>/lkk. </imgdir> =5+:<e,& <imgdir name="1122007"> VPK)HzPG, <string name="name" value="休彼德蔓的项链"/> L,n'G% </imgdir> 5<9}{X+@o <imgdir name="1010000"> o;}o"-s <string name="name" value="褐色落腮胡"/> u)%J5TR .Y </imgdir> H`kfI"u8 <imgdir name="1010001"> wqJ
H <string name="name" value="黑胡子"/> w}+jfO9 </imgdir> (Ys0|I3 <imgdir name="1010002"> n{|~x":9V <string name="name" value="忍者口罩"/> ~zi&u46 </imgdir> s3oK[:/ ; R}:2 y/E%W/3 然后重启服务端就OK。 装备上黑龙项链把。 不用源代码即可修复。 B\BP:;" 6、修复PB掉线问题 >[NNu Y~
-----------新建文档 复制以下代码 将文件重命名为8820009.img.xml 放到服务端WZ中对应的xml下-- eR?`o !@y RxcX\: @qI^xs=Z <?xml version="1.0" encoding="UTF-8" standalone="yes"?> GDhg
VOW( <imgdir name="8820009.img"> NU81 V0:jG <imgdir name="info"> iielAj*b <int name="bodyAttack" value="0"/> L ej3? k <int name="level" value="1"/> %G>*Pez% <int name="maxHP" value="200000"/> =ayl~"bW <int name="maxMP" value="0"/> Y'58
.8hl <int name="speed" value="0"/> fAXF_wj <int name="PADamage" value="0"/> 0D=6-P?^
W <int name="PDDamage" value="0"/> C4ge_u# <int name="MADamage" value="0"/> ~r+;i,,X <int name="MDDamage" value="0"/> *&!&Y*Jzg <int name="acc" value="0"/> 64Q{Yu
I <int name="eva" value="0"/> ?z p$Wz;k <int name="exp" value="0"/> pLNv\M+ <int name="undead" value="0"/> zGA#7W2?0 <int name="pushed" value="1"/> GkVV%0;&J1 <float name="fs" value="10.0"/> 6~j6M4* <int name="removeAfter" value="5"/> o[aRG7C <int name="summonType" value="12"/> aR+vY1d" <int name="hideName" value="1"/> 90(JP- <imgdir name="revive"> [8![UcMq <int name="0" value="8820001"/> tK1P7pbC8r <int name="1" value="8820003"/> pFhznH{0 <int name="2" value="8820005"/> ;=aj)lemCr <int name="3" value="8820006"/> G8H=xr# <int name="4" value="8820004"/> 3(jI <int name="5" value="8820002"/>
y3kXfSe </imgdir> Z+JPxe#7 <int name="noFlip" value="1"/> ]v$VZ' </imgdir> ("ql//SL <imgdir name="stand"> EQ\/I(
=l <canvas name="0" width="4" height="4"> QrDI$p7;' <vector name="origin" x="36" y="53"/> p v%`aQ]o{ <int name="delay" value="30"/> uK1DC i <vector name="head" x="1" y="-1500"/> ?$%#y u#. </canvas> 6ID@ 0 </imgdir> #Mrof9 <imgdir name="hit1"> w_PnEJa9 <canvas name="0" width="4" height="4"> rdSkGb <vector name="origin" x="36" y="53"/> 5V8WSnO <int name="delay" value="30"/> /GqW1tcO <vector name="head" x="1" y="-1500"/> 1)w^.8f </canvas> fn;`V it# </imgdir> ??)IPRv?yF <imgdir name="die1"> }mz@oEB#vF <canvas name="0" width="213" height="450"> WQK ~;GV- <vector name="origin" x="774" y="495"/> 0.qnbDw_ <int name="delay" value="180"/> ~}+F$& <vector name="head" x="1" y="-1500"/> DOyYy~Q <int name="a0" value="255"/> ?`lIsd <int name="a1" value="255"/> lh{U@,/ </canvas> $zKf>[K <canvas name="1" width="227" height="493"> 22(7rUkI <vector name="origin" x="778" y="534"/> AKu]c- <int name="delay" value="180"/> XC%u`UG <vector name="head" x="1" y="-1500"/> [<rV
"g </canvas>
~p<w>C9 <canvas name="2" width="232" height="497"> c
h!/k <vector name="origin" x="783" y="533"/> h:[%' htz <int name="delay" value="180"/>
YH@p\#Y <vector name="head" x="1" y="-1500"/> ^|gD;OED7O </canvas> w`x4i fZ0q <canvas name="3" width="237" height="497"> Onz@A" <vector name="origin" x="787" y="529"/> 8\P!47'q <int name="delay" value="180"/> ,'Zs")Ydp <vector name="head" x="1" y="-1500"/>
L3pNna </canvas> 6C7|e00v <canvas name="4" width="239" height="494">
Z0
@P1 <vector name="origin" x="788" y="525"/> &C6Z-bS" <int name="delay" value="180"/> v*U OD'tk <vector name="head" x="1" y="-1500"/> "MOM@4\ </canvas> 7a\at)q/y <canvas name="5" width="241" height="496"> 16Cd0[h? <vector name="origin" x="789" y="526"/> 2Jm#3zFYz3 <int name="delay" value="180"/> bW-9YXj% <vector name="head" x="1" y="-1500"/> \2#7B8 </canvas> ~x4]^XS <canvas name="6" width="243" height="494"> f:bUM/Ud <vector name="origin" x="790" y="523"/> k>SPtiAs <int name="delay" value="180"/> }fU"s" <vector name="head" x="1" y="-1500"/> t}w<xe </canvas> wO.T"x%X <canvas name="7" width="243" height="491"> Y,n&g45m <vector name="origin" x="790" y="520"/> b8@?fC+tm <int name="delay" value="180"/> |ZC@l^a7 <vector name="head" x="1" y="-1500"/> [3o^06V8j </canvas> K!g!tA$ <canvas name="8" width="241" height="483"> k nTCX <vector name="origin" x="789" y="513"/> C;>!SRCp <int name="delay" value="180"/> &P' d&B1
<vector name="head" x="1" y="-1500"/> N3"O#C </canvas> K+|G9 <canvas name="9" width="239" height="479"> TuG%oV} <vector name="origin" x="788" y="510"/> z>}H[0[# <int name="delay" value="180"/> %m )vQ\Vtx <vector name="head" x="1" y="-1500"/> wNMf-~ </canvas> 1 UdET#\ <canvas name="10" width="237" height="476"> #\1)Tu%- <vector name="origin" x="787" y="508"/> UXgeL2`; <int name="delay" value="180"/> 2D;2QdO <vector name="head" x="1" y="-1500"/> Z}$wvd </canvas> J;wDvt]]1 <canvas name="11" width="230" height="485"> @?e+;Sx <vector name="origin" x="784" y="521"/> @` 5P^H7 <int name="delay" value="180"/> E?v:7p< <vector name="head" x="1" y="-1500"/> ld </canvas> ;#)sV2F\& <canvas name="12" width="235" height="490"> ecvQEK2L <vector name="origin" x="779" y="535"/> _D.4=2@|l8 <int name="delay" value="180"/> C( wZjO?N <vector name="head" x="1" y="-1500"/> `8M{13fv </canvas> ON [F <canvas name="13" width="275" height="495"> t[}&*2"$/ <vector name="origin" x="797" y="540"/> As"%
u <int name="delay" value="180"/> 1#}}: <vector name="head" x="1" y="-1500"/> D6N32q@ </canvas> rJtpTV@. <canvas name="14" width="284" height="495"> o@2Y98~Q} <vector name="origin" x="797" y="540"/> (_IP z)F <int name="delay" value="180"/> ~'lY Q[7 <vector name="head" x="1" y="-1500"/> cb82k[L6 </canvas> 0Sx$6:-~ <canvas name="15" width="249" height="493"> 7G':h0i8 <vector name="origin" x="786" y="538"/> JIL(\d <int name="delay" value="180"/> SJ*qgI?}T <vector name="head" x="1" y="-1500"/> D qu?mg;L </canvas> uSQRI9/ir2 <canvas name="16" width="218" height="464"> l\tg.O~ <vector name="origin" x="774" y="509"/> vLI'Z)\ <int name="delay" value="180"/> @5}(Y( @ <vector name="head" x="1" y="-1500"/> $/J4?Wik </canvas> f0M5^ <canvas name="17" width="213" height="480"> f9$8$O <vector name="origin" x="774" y="525"/> H'a6]
]2 <int name="delay" value="180"/> 5LaF'>1yY <vector name="head" x="1" y="-1500"/> Be;l!]i </canvas> ;r?s7b/> <canvas name="18" width="213" height="488"> ,B 2p
\ <vector name="origin" x="774" y="533"/> ++\s0A(e <int name="delay" value="180"/> *jC Hv <vector name="head" x="1" y="-1500"/> Q{=DLm` </canvas> C:r3z50 <canvas name="19" width="214" height="491"> e5
N$+P" <vector name="origin" x="775" y="536"/> F,}7rhY(U^ <int name="delay" value="180"/> MMU>55+- <vector name="head" x="1" y="-1500"/> s'B$/qCkR </canvas> OjWg>v\v <canvas name="20" width="216" height="489"> kltorlH <vector name="origin" x="776" y="534"/> Fe L !%z <int name="delay" value="180"/> /`s{!t#Y <vector name="head" x="1" y="-1500"/> fD3>g{ </canvas> <P@ "VwUX <canvas name="21" width="213" height="450">
bt'lT <vector name="origin" x="774" y="495"/> <5O:jd <int name="delay" value="600"/> {&TP&_|H <vector name="head" x="1" y="-1500"/> jI/#NCKE </canvas> Fe1^9ja </imgdir> xcE2hK/+ </imgdir> .C|dGE?, 7、锁定某些地图不能进 =C#22xqQ. 打开MapleGenericPortal.java VW\xuP 搜索 changed = true; <g$b M;6% 在上面加入以下语句 SDu%rr7sQ if (getTargetMapId() >= 910000003 && getTargetMapId() <= 910000022) { weH;,e*r c.getSession().write(MaplePacketCreator.enableActions()); >1BDt:G36 player.getClient().getSession().write(MaplePacketCreator.serverNotice(5, "[任务公告:请通过npc进入任务房间!")); 'r'+$D7 } else { >c)-o}bd^ c.getPlayer().changeMap(to, pto); -[}Ah NYK } 0JE*| CtK HC!5AJ&+}v 编译,OK ^Ycn&`s 8、lockmap(锁定地图) W#9A6ir> /* AB+HyZ*// 地图锁写脚本 0d/
f4
演示NPC程序 B,b^_4XX$ 只供学习参考 Lky T4HC8n */ *JArR1J %6Y\4Fe X"!tx importPackage(net.s(和谐)f.cherry.scripting); ^]k=*>{
R var Itemid = 4001126; //设置需要的道具ID o%E-K=a var Itemsl = 10; //设置数量 h^v+d*R
N X? 7s
function start(ms) { O^Y@&S RrQ if (! AbstractPlayerInteraction(ms.getPlayer().getClient()).haveItem(Itemid, Itemsl)){ b
Bkg/p] AbstractPlayerInteraction(ms.getPlayer().getClient()).warp(910000000,0); w!r.MWE AbstractPlayerInteraction(ms.getPlayer().getClient()).showInstruction("此地图已被GM限制进入,系统已将你返回", 250, 20); ;iA$
yw: }else{ +!/pzoWpE AbstractPlayerInteraction(ms.getPlayer().getClient()).showInstruction("通过验证", 250, 20); xey?.2K1A } v8U&{pD, } h9Tst)iRi 解锁地图 w&eq
*q /* T
s9go 地图锁写脚本 +8}8b_bgH 演示NPC程序 -&h<t/U 只供学习参考 ]|QA`5=$ */ M~U>"kX ~Dbu;cqR@ $Zn>W@\ var Maps = Array(910000001,910000002,922000021,922010504,240010900); 1VA%xOURh var status = 0; _ |G') 9 var MapString = "" +2#pP function start() { a|-B# S status = -1; %Y=
action(1, 0, 0); Pd+Wb3 } /u~L3Cp( L"L a| function action(mode, type, selection) { t=IM"ZgfL if (mode < 1) { <YAs0 cm.dispose();
R
i/D>[ } else { D\Fu4Eg if (mode == 1) N
Qx>u status++; ;"2(e7ir else R^6]v`j; status--; @NYlVk2 if (status == 0) { uoq|l for(i = 0; i < Maps.length; i++){ F;ELsg var NextMap = cm.getC().getChannelServer().getMapFactory().getMap(Maps<i>);
Iuve~ugO var MapName = NextMap.getMapName(); E?h'OR@_ L var MapFy = NextMap.getOnUserEnter(); ]#;u] if (MapFy != "lockmap"){
0zpA<"S MapString = MapString + "#L" + i + "##b锁定地图#k---" + MapName + "#b(未锁定)#k\r\n"; a;f A0_ }else{ zB8J|uG MapString = MapString + "#L" + i + "##r解锁地图#k---" + MapName + "#r(已锁定)#k\r\n"; LIRL`xU7 } ^f] 9^U{ } !DBaC%TGC cm.sendSimple(MapString); PNpH)'C| ^Sc48iDc } else if (status == 1) { ?
@- t.N var MapStats = cm.getC().getChannelServer().getMapFactory().getMap(Maps[selection]).getOnUserEnter(); u}-)ywX if(MapStats != "lockmap"){ N&G;` cm.getC().getChannelServer().getMapFactory().getMap(Maps[selection]).setOnUserEnter("lockmap") chur(@Af
cm.sendOk("锁定地图成功"); EouI S2e;a cm.dispose(); xJ^pqb }else{ s+9b. cm.getC().getChannelServer().getMapFactory().getMap(Maps[selection]).setOnUserEnter("") RY}:&vWDk cm.sendOk("解锁地图成功"); .-:@+=( cm.dispose(); m!WDXt } i\zN1T_ } NchEay;` } |!cM_& } 2Uy}#n|)r 9、上线自动穿装备 NKYHJf2?x src\net\s(和谐)f\odinms\net\login\handler Z8:'_#^@a[ ]t-B-(D CreateCharHandler.java ;y.<I& @4wN-T+1 ~>uu1[/ 搜索 MapleInventory equip = newchar.getInventory(MapleInventoryType.EQUIPPED); Lpk`qJ G(hzW%P 在下面添加以下语句,即可编译,装备ID自己换吧 6'|NALW IItem eq_top = MapleItemInformationProvider.getInstance().getEquipById(1052081); ^o(C\\>{& eq_top.setPosition((byte) -5); 6C- !^8[
f equip.addFromDB(eq_top); ^ux"<? IItem eq_bottom = MapleItemInformationProvider.getInstance().getEquipById(bottom); ]GiDfYs7% eq_bottom.setPosition((byte) -6); YR.f
`-<Z equip.addFromDB(eq_bottom); s;,ulME
IItem eq_shoes = MapleItemInformationProvider.getInstance().getEquipById(shoes); Lf+3nN eq_shoes.setPosition((byte) -7); vPsf{[Kr equip.addFromDB(eq_shoes); 'ALe>\WO IItem eq_weapon = MapleItemInformationProvider.getInstance().getEquipById(weapon); SJO^.[ eq_weapon.setPosition((byte) -11); yHmNO*(
equip.addFromDB(eq_weapon); ui&^ m, IItem pHat = MapleItemInformationProvider.getInstance().getEquipById(1002562); b`^mpB*6R pHat.setPosition((byte) -101); a;v;% rs equip.addFromDB(pHat); -^,wQW:o) IItem pWeap = MapleItemInformationProvider.getInstance().getEquipById(1702174); b/UjKNf@ pWeap.setPosition((byte) -111); U=N]XwjVK< equip.addFromDB(pWeap); X?SLYm@v 10、结婚修复法
w/wU~~ /* d[&Ah~, ====================================== L8cPNgZ
小权改端技术 !}J19]\ ====================================== xL|4'8 */ 84c[ Z 首先,找到NPCConversationManager.java d=a$Gd_$ TnLblkX 在合适的位置上插入以下代码(请直接复制,本人亲自测试,无错..所有端均可通过): m8 Ti{w( (*G'~gSX public boolean createMarriage(String partner_) { //声明变量 R]y9>5 'U MapleCharacter partner = getCharByName(partner_); //名字 h5ZxxtGU if (partner == null) { tVHQ$jJY% return false; v]m#+E } -hKtd3WbT partner.setMarried(true); S %(R9N| getPlayer().setMarried(true); pJ_>^i= partner.setPartnerId(getPlayer().getId()); +\66; 7]s getPlayer().setPartnerId(partner.getId()); trg&^{D< if (partner.getGender() > 0) { |dqvv Marriage.createMarriage(getPlayer(), partner); 9|2LuHQu+ } else { u\@L|rh Marriage.createMarriage(partner, getPlayer()); HE*P0Yf= } 8_uh2`+Bvb return true; 9S{?@*V } 7WN$ rl5/ ^ =RSoR public boolean createEngagement(String partner_) { m@y_Wt MapleCharacter partner = getCharByName(partner_); ]*\<k if (partner == null) { i; 3qMBVY~ return false; baib_-$ } .GuZV' if (partner.getGender() > 0) { % ^&D, Marriage.createEngagement(getPlayer(), partner); l`vr({A } else { 6'JP%~QlS Marriage.createEngagement(partner, getPlayer()); &$. x1$% } lPn&,\9@~ return true; 0zqTX< A } MJ~)CiKgN qR8 BS4q_p public void divorceMarriage() { //增加至XXXX )}SiM
{g getPlayer().setPartnerId(0); 5YgUk[J getPlayer().setMarried(false); fZt3cE\ Marriage.divorceMarriage(getPlayer()); ///结束至XXXX o88Dz}a } !Nno@SP@ )q'~<QxI\ 先别着急这编译..请继续看下去 }9>X M z<s4-GJ)? 打开 src\net\s(和谐)f\odinms\scripting\npc 这个文件夹新建--文本文档--复制以下代码进去: q^+Z> EhHW` /* !@@rO--& * @丶小_路. f2FGod<CzN */ 1a;&&!X AK5$>Pkvk package net.s(和谐)f.odinms.scripting.npc; $:<G= bn8?- import java.sql.Connection; R,ddH[3 import java.sql.PreparedStatement; Tp%4{U/0` import java.sql.ResultSet; et :v4^*f import java.sql.SQLException; dW
hF[q" -O>*`
O>M import net.s(和谐)f.odinms.client.MapleCharacter; P8;f^3V(+/ <=&7*8u0+ import net.s(和谐)f.odinms.database.DatabaseConnection; }NETiJ"6 f n'N^ public class Marriage { l|K`'YS!<{ private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(Marriage.class); <>K@#|%Y& 21G:!t4/?n public static void createMarriage(MapleCharacter player, MapleCharacter partner) { 0%5x&vx'S try { ?mW;%d~] Connection con = DatabaseConnection.getConnection(); eZ
+uW0 PreparedStatement ps = con.prepareStatement("INSERT INTO marriages (husbandid, wifeid) VALUES (?, ?)"); TkV$h(#!f& ps.setInt(1, player.getId()); nwAx47>{ ps.setInt(2, partner.getId()); gb@ |\n ps.executeUpdate(); p$&6E\#7 ps.close(); me/ae{ } catch (SQLException ex) { V39)[FH} log.warn("结婚: " + player.getName() + " 和 " + partner.getName(), ex); s`"ALn8m } o)IcAqN$H } O7\)C]A x_|: 3I public static void createEngagement(MapleCharacter player, MapleCharacter partner) { &<%U7?{~ try { w\3'wD! Connection con = DatabaseConnection.getConnection(); 7`6JK
PreparedStatement ps = con.prepareStatement("INSERT INTO engagements (husbandid, wifeid) VALUES (?, ?)"); IXmO1*o@ ps.setInt(1, player.getId()); ti9cfv> ps.setInt(2, partner.getId()); _\2^s&iJh ps.executeUpdate(); }lt]]094, } catch (SQLException ex) { [8C6%n{W log.warn("宣布与参与 " + player.getName() + " 和" + partner.getName(), ex);
js8\" } %]@K}!)2 } .j 0]
hn] @DYkWivLu public static void divorceEngagement(MapleCharacter player, MapleCharacter partner) { =v]eQIp try { <jRs/?1R Connection con = DatabaseConnection.getConnection(); 05m/iQ int pid = 0;
LYX\# if (player.getGender() == 0) { =AJ I3'x pid = player.getId(); L8j#lu } else { fO{E65uA pid = partner.getId(); _G5MQ%z } &tw
PreparedStatement get = con.prepareStatement("SELECT FROM engagements WHERE husbandid = ?"); hDs.4MZC` get.setInt(1, pid); Gg9NG`e6I ResultSet rs = get.executeQuery(); me`(J y< PreparedStatement ps = con.prepareStatement("DELETE FROM engagements WHERE husbandid = ?"); QZ54Osdl if (rs.next()) { ?W"9G0hTqM ps.setInt(1, pid); #%g~fh } else { "RJf2~(ZX return; MF^I] 7_ } Q{Lsr, ps.executeUpdate(); IRQ3> 4hI PreparedStatement ps1 = con.prepareStatement("UPDATE characters SET marriagequest = 0 WHERE id = ?, and WHERE id = ?"); dSBW&-p ps1.setInt(1, player.getId()); a4M`Bk;mb ps1.setInt(2, partner.getId()); CfnRcnms ps1.executeUpdate(); v]HiG_C } catch (SQLException ex) { c~UYs\ log.warn("宣布与参与 " + player.getName() + " 和 " + partner.getName(), ex); $W;IW$ } 8M;G@ Q80 } 84*Fal~Som <ArP_!
`3 public static void divorceMarriage(MapleCharacter player, MapleCharacter partner) { 0IEFCDeCO try { '((Ll Connection con = DatabaseConnection.getConnection(); c{t[iXDG int pid = 0; D?_#6i;DJ if (player.getGender() == 0) { u!DSyHR
' pid = player.getId(); #Rdq^TGMi; } else { 20f):A6 pid = partner.getId();
]=g|e } s(I7}oRWsL PreparedStatement get = con.prepareStatement("SELECT partnerid FROM characters WHERE id = ?"); W[3)B(Vq<E get.setInt(1, player.getId()); q>q@ztt ResultSet rs = get.executeQuery(); `N"fs
E ma if (rs.next()) { <ST#<
$% PreparedStatement ps = con.prepareStatement("DELETE FROM marriages WHERE husbandid = ?"); d/ OIc){tD ps.setInt(1, pid); {G%!M+n< ps.executeUpdate(); '2%/h4jY PreparedStatement ps1 = con.prepareStatement("UPDATE characters SET married = 0 WHERE id = ?, and WHERE id = ?"); i>[1^~; ps1.setInt(1, player.getId()); -j_J1P0, ps1.setInt(2, partner.getId()); gaJIc^O ps1.executeUpdate(); \$h LhYz- ps.close(); 3f:I<S7 ps1.close(); #YSUPO%F } else { B$ )6X return; %.R_[.W } HSOdqjR* get.close(); R`:NUGR } catch (SQLException ex) { 2;`"B|-T log.warn("离婚:" + player.getName() + " 和 " + partner.getName(), ex); Th%1eLQ } ; (+r)r_ } a;`-LOO5& } <`q|6XWL U{>e
E8l 复制完毕后关闭并保存把文件命名为: Marriage.java 保存文件.必须在这个文件夹 c#e_Fs src\net\s(和谐)f\odinms\scripting\npc 8EPV\M1% bMD'teJ 复制以下NPC脚本.结婚的教堂里的哪位人物都行.复制如下代码加入NPC脚本中!!! VQvl
,'z wQ,RZO3 B"I>mw /* 9c=_p'G3Fw *@丶小_路.
S!n
9A */ , &HZvU& var status = 0; E#FyL>:.h var otherChar; 3EcmNwr var Char; c])b?dJ* SJ-g2aAT importPackage(net.s(和谐)f.odinms.client); %d9UW Q importPackage(net.s(和谐)f.odinms.server); O/\jkF q'?:{k$% function start(character3) { %zyM
WC status = -1; TUEEwDK- action(1, 0, 0); soZw""|v otherChar = character3; QWf)5S } p\8cl/~ puv*p%E function action(mode, type, selection) { t?]6>J_V if (mode == -1) { va8V{q@t' otherChar.getClient().getSession().write OR^Wd (net.s(和谐)f.odinms.tools.MaplePacketCreator.serverNotice(1, "您的伴侣拒绝您的请求!")); r Q'tab.,] cm.dispose(); 8P!dk5,,O } else { q$`:/ ehw if (mode == 0 && status == 0) { !DCJ2h%E[_ otherChar.getClient().getSession().write ~&~%q u (net.s(和谐)f.odinms.tools.MaplePacketCreator.serverNotice(1, "您的伴侣拒绝您的请求..")); %1]2+_6 cm.dispose(); `R^g[0 w' return; \wNn c" } 43-%")bH if (mode == 1) { 9hT^Y,c0 status++; y+?tUSPP } else { -i'T!Qg1 status--; /)de`k" } 7Yxy2[ if (status == 0) { !
o4xI? cm.sendNext("有人想向您发送内容!."); fT8Id\6js } else if (status == 1) { @WU_GQas3 var t = otherChar.getName(); @U:T}5)wc cm.sendYesNo("你想不想参与 " + t + "的婚礼?") ; ZZE } else if (status == 2) { $YSD%/c otherChar.getClient().getSession().write %`}CbD6 (net.s(和谐)f.odinms.tools.MaplePacketCreator.serverNotice(1, "您的伴侣接受了您的请求!")); &bj :,$@ otherChar.setMarriageQuestLevel(50); >UJ&noUD#: cm.getPlayer().setMarriageQuestLevel(50); ;?2vW8{p< cm.createEngagement(cm.getPlayer().getId(), otherChar.getId()); vO{ijHKE if (otherChar.countItem(2240000) > 0) { :*&wnQMKR MapleInventoryManipulator.removeById(otherChar.getClient(), NI(`o8fN MapleInventoryType.USE, 2240000, 1, false, false); =O)JPo&iwY MapleInventoryManipulator.addById(otherChar.getClient(), 4031358, 1, "shit!"); _'H<zZo MapleInventoryManipulator.addById(cm.getPlayer().getClient(), 4031358, 0mj=\ j 1, "shit!"); 4_N)1u ! MapleInventoryManipulator.addById(otherChar.getClient(), 4031357, 1, "shit!"); "\BP+AF } else if (otherChar.countItem(2240001) > 0) { 6DJ,/J2F MapleInventoryManipulator.removeById(otherChar.getClient(), P+3G*M=} MapleInventoryType.USE, 2240001, 1, false, false); 0m`7|80#P MapleInventoryManipulator.addById(otherChar.getClient(), 4031360, 1, "shit!"); '{cN~A2b4 MapleInventoryManipulator.addById(cm.getPlayer().getClient(), 4031360, X{#@ :z$ 1, "shit!"); =pcj{B{qa MapleInventoryManipulator.addById(otherChar.getClient(), 4031359, /@RnCjc' 1, "shit!"); _T5~B"* } else if (otherChar.countItem(2240002) > 0) { ;^DUtr
; MapleInventoryManipulator.removeById(otherChar.getClient(), MapleInventoryType.USE, 2240002, 1, false, false); i?AZ|Ha[ MapleInventoryManipulator.addById(otherChar.getClient(), 4031362, 1, "shit!"); B
d O$ MapleInventoryManipulator.addById(cm.getPlayer(), 4031362, 1, "shit!"); |-_5ouN. MapleInventoryManipulator.addById(otherChar.getClient(), 4031361, 1, "shit!"); dY\"'LtF } else if (otherChar.countItem(2240003) > 0) { >W'SG3Hmc MapleInventoryManipulator.removeById(otherChar.getClient(), 54J<ZXCs
MapleInventoryType.USE, 2240003, 1, false, false); ! qcu-d5b MapleInventoryManipulator.addById(otherChar.getClient(), 4031364, 1, "shit!"); d0 V>;Q MapleInventoryManipulator.addById(cm.getPlayer(), 4031364, 1, "shit!"); @?Y^=0 MapleInventoryManipulator.addById(otherChar.getClient(), 4031363, RC (v#G 1, "shit!"); Hs=!.tZ, } Ip4NkUI3T cm.dispose(); 6ddkUPTF } g@Ni!U"_c } 4&ea*w
} 0dkM72p 11、购物商城添加新物品和点数商品 Sc6wC H 首先打開ETC.WZ sD{b0mZT 找到Commodity.img.xml R[&lk~a{= 這個是有分代碼到多少~~那個東西延續就在哪裡 `6mHt6"h 我是以前面主頁的推薦物品新物品那邊新增的 @?B=8VHR 今天摸索來的我去找推薦物品那邊 \ @N> 38M V62的這個是到6226 (<imgdir name="6226">) UWn}0:6t 所以你要添加就重6227開始添加 [k'Ph
33c 這個是位置的代碼(這個是在推薦物品那邊添加物品添加的物品會在推薦物品那行出現(<int name="SN" value="10001930"/>) iW"L
!t#\| 如果要再推薦物品就重10001931開始加 Xe+&/J5b <int name="ItemId" value="你要添加的物品代碼"/>(這個是要添加的物品代碼不用說了吧?) I9F[b#'Pn <int name="Count" value="1"/>(這個沒試過這個都填1)
}aNiO85 <int name="Price" value="價錢"/>(這個是添加你要的點數價位) P1)
80<t <int name="Period" value="90"/>(道具到限日期90就代表90天(這應該沒用@@)) FYcMvY <int name="Priority" value="9"/>(這行的位置不要動看它上面是多少下面就填多少) D hZtiqL#_ <int name="Gender" value="2"/>(這個是性別2代表男女都可以用0代表男生1代表女生) <int name="OnSale" value="1"/>這個1代表NEW或者HOT.....(最好依照前面來改..) Xq>e]#gR <int name="Class" value="0"/>(看前面代碼有沒有來添加不知道是啥東西....) `8dE8:#Y 如果要初學者最好先依照10001931開始加 3^Yk?kFE 把物品列在推薦物品那邊 g=Qga09 如果你熟了再加入其他行例如武器列戒指列添加 fSqbGoIQ 如果想把推薦物品那4個換掉找到那4個代碼 _f3A6ER` 搜尋第一個物品代碼把它換掉你要的物品代碼 >>$IHz4Z" 第2個是在其他欄例如我要把推薦物品那邊的帽子弄掉 w ^<Y5K 找到的第一個帽子代碼是推薦物品的第2個則是帽子欄那邊的 oLr"8R\d>t 想在帽子欄那邊添加物品建議找到帽子欄最後一個物品代碼 50DPzn 繼續添加代碼物品~~~ 8nnkv,wa 5h:SH]tn8] 首先打開ETC.WZ 9x?;;qC"m9 找到modity.img.xml cZ!s/^o
?f 這個是有分代碼到多少~~那個東西延續就在哪裡 ~2H7_+.# 我是以前面主頁的推薦物品新物品那邊新增的 (uG4W|?p 今天摸索來的我去找推薦物品那邊 WQ5sC[& V62的這個是到6226 (<imgdir name="6226">) {my=Li< |