标题: 光荣三国志2 - 命令9/10/12
性别:未知-离线 juqiang
(方枪枪)

Rank: 1
组别 百姓
级别 在野武将
功绩 0
帖子 18
编号 546898
注册 2024-7-23


发表于 2025-11-29 16:17 资料 短消息 看全部作者
光荣三国志2 - 命令9/10/12

这三个命令都类似,不同武将执行时的效果不同。
关键代码如下:

    def calculate_cmd910_result_by_officer(officer_offset,gold,current_value):
        inte = Data.DSBUF[officer_offset + 0x04] # 智力
        war = Data.DSBUF[officer_offset + 0x05] # 战力
        chm = Data.DSBUF[officer_offset+0x06] # 号召

        var_2 = ((chm>>1)+inte)&0xFF # 00023E26
        gold = Data.math_num1_multiple_num2_then_divide_by_100(gold,100-(current_value>>1)) # 00023E3C
        cx = int(math.sqrt(var_2*gold)) # 00023E50

        game_diff = Data.DSBUF[0x33B3]
        var_2 = int(math.sqrt(cx // ((game_diff+1)>>1))) # 00023E6E
        var_2 = var_2 - min(var_2,game_diff)

        return var_2

意思就是,执行效果,与武将的智力、武将的号召,黄金的数量,当前地价/治水,游戏难度这几个变量有关。

对于命令12,提高民忠,则算法不同。

    def calculate_cmd12_result_by_officer(province_offset,officer_offset, food):
        governor_offset = Data.GetWordFromOffset(Data.DSBUF,province_offset+0x02)
        governor_chm = Data.DSBUF[governor_offset+0x06]
        chm = Data.DSBUF[officer_offset+0x06]

        var_4 = (governor_chm+chm)>>1
        var_2 = int(math.sqrt(food))

        polution = Data.GetWordFromOffset(Data.DSBUF,province_offset+0x0E)
        ax = int(math.sqrt(polution))
        game_diff = Data.DSBUF[0x33B3]
        ax *=(6+game_diff)

        ret = Data.math_divice_to_int(var_4,var_2,ax)

        return ret

太守的号召也会参与计算,粮食做开方,人口做开方,也结合游戏难度。最后的那个函数math_device_to_int意思是arg1*arg2除以arg3。而ax作为arg3,我们能看到,它和人口数、游戏难度有关。所以人口越多、游戏难度越大,它作为分母,被除后得到的新忠诚度就越小。

[ 本帖最后由 juqiang 于 2025-11-29 17:24 编辑 ]


顶部

正在浏览此帖的会员 - 共 1 人在线




当前时区 GMT+8, 现在时间是 2025-12-1 21:07
京ICP备2023018092号 轩辕春秋 2003-2023 www.xycq.org.cn

Powered by Discuz! 5.0.0 2001-2006 Comsenz Inc.
Processed in 0.008345 second(s), 9 queries , Gzip enabled

清除 Cookies - 联系我们 - 轩辕春秋 - Archiver - WAP