单机墨香吧 关注:1,620贴子:26,338
  • 6回复贴,共1

墨香经典bug 卡分制符咒的原因,及代码层修复方法 !

只看楼主收藏回复

找到了,就是下面的内容。
声明:纯搬家!
经典帖子 只发一次 !!
今天有人找我帮他修补卡分制符咒的bug, 半天了 ,我没有搞懂到底是怎么卡的,
感谢 LV夏天 [url]http://@LV夏天[/url] , 我知道怎么操作了!
卡符咒操作: 买3张同样的符咒 ,分制符咒, 然后分开 成 2个和1个 !
此时 ,你把2个的其中一个使用掉,然后把2个的另外一个丢弃,然后在使用之前
分出来的那一个, 你会惊奇的发现, 居然成功使用了。按游戏规则,相同符咒不能同时
使用2张的,可这明显是使用了2张, 然后重新登陆或者过地图后失效 !!
于是我想了一下, 这个发生在删除那张符咒之后,那么,出现这个bug,肯定是删除这
张符咒的过程中发生的!!于是我调试了下MapServer
结果让我瞠目结舌 !
// 下面这句代码是丢弃物品过程使用到的函数
int CItemManager::DiscardItem(CPlayer* pPlayer, POSTYPE whatPos, WORD whatItemIdx, DURTYPE whatItemNum)
//它里面有个 if else 分支 !
if(IsDupItem(pItemBase->wIconIdx) && (pItemBase->Durability > whatItemNum))
{
//如果删除的物品是叠加的 ,况且被分开的两部分的叠加数目有大小之分执行这里
//todo ....
}
else
{
//如果删除的物品是单个一张,而被分开的另一部分也是一张执行这里
//todo 然后致命的bug就出现在下面
//pPlayer->GetShopItemManager()->DeleteUsingShopItem( whatItemIdx );
//liuwei 2014-06-27 卡符咒解决!
//DeleteUsingShopItem( whatItemIdx ); 这里是从正在使用的符咒内存表中删除该物
//此时他已经从正在使用的内存表中把该符咒删除了,然后,当第二次使用这个物品的 时候, 此时已经检测不到该物品已经被使用了,自然就被第二次使用了!如下
//SHOPITEMWITHTIME* pShopItem = m_UsingItemTable.GetData( ItemIdx );
//这也就解释了为何重新登陆或者过地图回恢复,因为重新获取CPlayer 对象了!
//从数据库表中重新填充了该符咒使用列表,自然在无法重复吃了!!
}
这就是卡符咒造成的根本原因, 这是一个很隐蔽,也难发现的bug,
毕竟在老墨, 新墨, 谁会傻到把符咒删除了在吃!!
我想这个函数当时eya的技术写的时候,应该为了方便,把丢弃物品统统一个函数处理
了! 这个函数用来处理已经穿在身上的百宝,到期后自动删除是必要的,但是用它来
处理删除符咒, 这个就画蛇添足了!! 当时估计没有想到这一点!!
解决方法:
此处公布解决方法:同时鄙视下这个2B -> jottxi , Jaeng 这两个人
这2人的水平不知道杂样,但是一点职业道德都没有!!
解决代码:
if(pItemInfo->ItemType==10)
{
//若是符咒类物品,删除后清理释放站用的POS就可以了!
//初步估计,卡兔子也是在这里,加上物品类型判断就好了!我没测试!
pPlayer->GetShopItemManager()->DeleteDupParam(pItemInfo);
}
else
{
//其他时效类物品,删除执行原来的方法!
pPlayer->GetShopItemManager()->DeleteUsingShopItem( whatItemIdx ); //liuwei 2014-06-27 卡符咒解决!
}
然后 符咒就无法重复使用了,(之前看到有人用的是禁止删除和重叠解决的)
现在不用那么复杂,几句代码搞定!
上张图 :



IP属地:福建1楼2014-10-23 15:31回复


    来自Android客户端2楼2014-10-23 19:14
    回复
      抓到大水牛一只。。


      IP属地:广西来自Android客户端3楼2014-10-23 20:05
      回复
        好像在墨香吧看过这个帖子!
           --患者朋友你好!我是北京精神疾病健康研究中心的主治医生,主攻脑残呆的研究与治疗!我院领导看到你发表的内容后高度重视你的情况,特派我来帮助你摆脱病魔的困扰!希望你相信医生,配合我们工作,精神疾病可防可控可治,你要树立起坚强的信心,我们一定会使你走出阴影,过上正常人的生活!


        来自Android客户端4楼2014-10-23 22:00
        回复


          IP属地:陕西5楼2014-10-24 00:46
          回复
            只有一个字能表达我此时此刻的心情:屌!


            6楼2014-10-24 06:05
            回复
              看这段的态度挺诚恳的
              不过为何总是听别人说熊二就是个骗子
              话也说回来,熊二公布的这些,是个C++程序员都能解决
                  ------来自 诺基亚 Lumia 1520


              IP属地:浙江7楼2014-10-31 16:13
              回复