一、问题现象
热心群友反馈:《肥羊的圣诞礼物》在更新1.50后,当地图开始刷怪时直接闪退无法游戏
二、问题跟踪
使用JASS崩溃追踪工具对问题进行定位,得到以下信息:
解读:
当弹出这个告警窗口时,就说明问题是由触发引起的闪退。问题函数是Exp_Plus,问题点在ConvertedPlayer。
三、war3map.j定位
function Exp_Plus takes nothing returns nothing
local integer n = GetPlayerId(GetEnumPlayer())
set ExpGo[n] = ExpGo[n] + 1
call DzAPI_Map_StoreInteger(ConvertedPlayer(n), "jifen", ExpGo[n])
endfunction
DzAPI_Map_StoreInteger这条动作是KK平台的服务器整数存档,ConvertedPlayer是转换玩家ID为玩家,最小值1,最大值是16.
而n是作者定义的局部整数变量,通过GetPlayerId(玩家ID-1),最小值是0,最大值是15.
所以两者冲突了!
四、解决办法
ConvertedPlayer(n)改成ConvertedPlayer(n + 1)即可,完整如下:
function Exp_Plus takes nothing returns nothing
local integer n = GetPlayerId(GetEnumPlayer())
set ExpGo[n] = ExpGo[n] + 1
call DzAPI_Map_StoreInteger(ConvertedPlayer(n + 1), "jifen", ExpGo[n])
endfunction
五、测试效果
积分存档恢复正常!
六、总结
魔兽地图崩溃主要有三种情况
1、触发错误,即没有遵守jass语法。我们今天就是遇到这种情况。
2、误删jass标点。常见于对war3map.j汉化或直接修改的情形。
3、排泄不当造成内存崩溃。案例《肥羊的新年之旅》