当我们奖赏、招人、耕地、治水、供给等,军师都会给出建议。有的很靠谱,每次都对,比如诸葛亮;有的不靠谱,出错概率随机。游戏内的机制,我在ida中逆向后,python代码可以简化为:
tmp = ((228-Data.DSBUF[advisor_offset+0x04])<<1)&0xFF
tmp = Data.compare_value_with_random100(tmp)
偏移04是智力,为什么用228减掉它呢?因为后面有一个乘以2的操作,所以第一行会变成456-智力*2。
我们知道诸葛亮智力最高,是100,所以这个值会变成256。而游戏中按照8位来计算的,所以这个值就会变成0。庞统智力99,那么这个值会变成258,按照8位取,则是2。以此类推,智力50的人,这个值会变成100;智力49的人,这个值会变成102。
这是第一行的推演。第二行就有意思了,系统自动生成一个100以内的随机值。如果这个值小于第一行算出来的,那么就返回1,否则返回0。
从上面我们知道,智力50及更低的时候,tmp会变成大于等于100,那么下边100内随机数与它比较时,则永远小于它。
第二行只返回1或者0,而不是一个梯度值。所以,智力99的庞统,和智力50的某人,在军师这个角色上,不靠谱程度上,是一致的。