铁血丹心

 找回密码
 我要成为铁血侠客
搜索
查看: 1972|回复: 7

LUA复刻等待命令BUG分析并求解决方法

[复制链接]
发表于 2009-10-7 12:07 | 显示全部楼层 |阅读模式

马上注册,结交更多侠友!

您需要 登录 才可以下载或查看,没有账号?我要成为铁血侠客

x
大家都遇到过吧?等待命令是错误的。分析好久没看出来问题,发网上大家帮忙看看

以下是战斗中等待命令调用的代码:

--等待,把当前战斗人调到队尾
function War_WaitMenu()            --等待,把当前战斗人调到队尾

    for i =WAR.CurID, WAR.PersonNum-2 do
        local tmp=WAR.Person[i+1];
        WAR.Person[i+1]=WAR.Person;
        WAR.Person=tmp;
        --调换人物
    end

    WarSetPerson();     --设置战斗人物位置

    for i=0,WAR.PersonNum-1 do
        WAR.Person["贴图"]=WarCalPersonPic(i);
    end

    return 1;

end


下面是战斗初始轻功排序的代码:



function WarPersonSort()               --战斗人物按轻功排序
    for i=0,WAR.PersonNum-1 do                ---计算各人的轻功,包括装备加成
        local id=WAR.Person["人物编号"];
        local add=0;
        if JY.Person[id]["武器"]>-1 then
            add=add+JY.Thing[JY.Person[id]["武器"]]["加轻功"];
        end
        if JY.Person[id]["防具"]>-1 then
            add=add+JY.Thing[JY.Person[id]["防具"]]["加轻功"];
        end
        WAR.Person["轻功"]=JY.Person[id]["轻功"]+add;
        local move=math.modf(WAR.Person["轻功"]/15)-math.modf(JY.Person[id]["受伤程度"]/40);
        if move<0 then
            move=0;
        end
        WAR.Person["移动步数"]=move;
    end

    --按轻功排序,用比较笨的方法
    for i=0,WAR.PersonNum-2 do
        local maxid=i;
        for j=i,WAR.PersonNum-1 do
            if WAR.Person[j]["轻功"]>WAR.Person[maxid]["轻功"] then
                maxid=j;
            end
        end
        WAR.Person[maxid],WAR.Person=WAR.Person,WAR.Person[maxid];
    end
end


其中的排序代码没看懂
        WAR.Person[maxid],WAR.Person=WAR.Person,WAR.Person[maxid];
谁能解释下这个语句是啥意思?或者有有空的大侠没事帮忙看下如何能修改这个BUG就更好了~~


等待以后的效果:
1.人物轻功排序永远变成战场最后一名(原游戏为等待之后行动后轻功排序正常,也就是可以连续打两次)
2.人物攻击图像变成其他人(代码初步分析是轻功排序最后一人)
初步错误分析
这里就是把执行等待命令的人物与后面的人物排序交换了下,但是没交换回来,贴图是只交换了战场人物贴图,没有交换攻击贴图
初步修改办法
1.战斗中重排序(这是我能想到的最方便的办法。。。。。。可惜我分析代码主要目的是简化代码 我是想手机玩 重排序太浪费资源了 )
2.建立个复原函数,检测一次全体成员完成行动后复原轻功排序。(我不懂LUA啊。。。。 还不知道WAR啊JY啊等等的数据结构,要我写一个这样的函数太困难了 [s:07] )
算了,我还是去参照PASCAL版吧。关闭问题咯

[ 本帖最后由 孤魂野鬼 于 2009-10-7 14:29 编辑 ]
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2009-10-7 12:17 | 显示全部楼层
你能把,哪里是错的地说一下吗? 没用过等待

[发帖际遇]: 假修改器当选为年度“赏善罚恶”大使,路过荆州城,罚凌退思获得银两21。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2009-10-7 13:37 | 显示全部楼层
楼上的,我重编辑帖子了,帮忙看下
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2009-10-7 14:08 | 显示全部楼层
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2009-10-7 14:14 | 显示全部楼层
参考pascal复刻吧,那里的等待比较正常

至少可以正常地打两遍,多个人物使用等待时,排序也是正常的

[发帖际遇]: winson7891帮张无忌翻译小昭写的情书,得到辛苦费银两19.
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2009-10-7 14:23 | 显示全部楼层
哇,weyl老大。。。。。
不要等待好多地方不好打啊。。。。。。 而且你的PASCAL复刻版里不是也没抛弃等待命令么
说起来我人生学的第一个语言也是PASCAL呢。。。。只是现在忘得一点不剩了
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2009-10-7 14:36 | 显示全部楼层
等待要重排人物战场编号,而且每个人地图的位置也要重新标记,很麻烦的
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2009-10-7 15:04 | 显示全部楼层

回复 七当家 的帖子

呵呵。。。想到一个办法,在战斗主循环每回合战斗之前添加一个判断,判断是否有人执行过等待,判断为是可以给那人多加一次行动次序!~~您看看成不??

[发帖际遇]: 孤魂野鬼在老顽童处骗取《养蜂秘法》,翻印成《如何饲养文化型蜜蜂》出版后获利银两19.
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。

本版积分规则

小黑屋|手机版|铁血丹心

GMT+8, 2024-11-16 01:27

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表