曾经玩过一个海盗王的服,它里面有个随身NPC交易的功能。
一般正常情况下,是在城里或者野外,来到一个NPC旁边,点击打开交易功能,才能进行物品的购买和出售。随身NPC可以在身边没有NPC的情况下,通过工坊的按钮,直接打开一个跟售卖NPC一样的窗口,在里面可以购买到常用的物品,当然也可以把背包的物品出售换成海盗币。
这个功能非常的方便。
具体他们是怎么实现的,我也没看过他们的代码,不过听说可以被某些人利用来复制物品。这显然是不可接受的。
一直以来,也想自己实现这个功能。
研究了一段时间相关的代码后,发现那个交易的NPC代码是绑定到具体NPC的,交易的时候调用了NPC的对话功能,然后才弹出窗口交易窗口,交易时会进行物品列表校验的。那个服可能是改了这些代码,删除了校验功能来实现随身售卖功能。
本来也想修改下来实现的,但是想了想,这样做还是不安全,不如重新写一套逻辑来处理,这样可以避免被人利用来复制物品。
想重新做一个仿照商城的UI,但是那样的话,要耗费很多精力写很多代码,能不能复用它原来的交易窗口呢?
对客户端交易窗口的代码又仔细研究了一番,发现通过一些取巧的方法,可以复用的。然后动手修改了部分代码,添加新的功能进去。服务端当然也要做相应消息处理的。这样的话,别人根本感觉不到跟正常NPC交易的不同,其实实现逻辑完成不同的。
经过实践,既保留原有的NPC交易功能,有增加了随身NPC交易功能,完美实现了这个功能。
他们还有一个随身银行的功能,实现应该也类似的。不过,这个觉得不是十分必要,所以没去弄了。