改名的失败原因分得很细,四种情况各有各的 code,做提示的时候可以根据 model 给玩家不同的提示 ——"名字包含敏感词"" 这个名字已经被占用了 ",比统一提示" 改名失败 " 体验好很多。
六、几个实际使用中的心得
把行会系统过完,结合实际开发场景,总结几个心得。
第一,Before 触发里做扣减要小心。 比如创建行会需要消耗 100 万金币,你在 OnBeforeCreateGuild 里判断金币够,然后扣掉,再 return true。但要注意,如果扣完金币之后、行会创建之前发生了异常(虽然概率很低),金币扣了行会没建成,玩家就亏了。更安全的做法是在 Before 里只判断不扣减,在 After 里扣减。但 After 里扣减又有个问题 ——After 的时候行会已经建好了,如果扣减失败(比如玩家在这一瞬间把金币交易走了),就会出现 "行会建了但没扣钱"。所以这个时序问题要根据实际情况权衡,大部分版本在 Before 里扣减是可以接受的,因为创建行会是瞬时操作,中间出问题的概率极低。
第二,GetMyGuild 的返回值要判空。 没有行会的时候返回字符串 "0",不是 nil 也不是 false。判断的时候要写 if guild and guild ~= "0" then,不能只写 if guild then,因为字符串 "0" 在 Lua 里是真值,会通过判断。这个坑不注意的话,没行会的玩家也会走进行会逻辑,然后报错。