[分享]解決裝備卸下能力滿值bug

WOG設定安裝教學

版主: 涅魂, 簫哥

stu6707
 
文章: 162
註冊時間: 2008-10-26 1:00 pm

[分享]解決裝備卸下能力滿值bug

文章stu6707 » 2010-11-21 5:16 pm

在這篇文章中的問題
bug-t29218.html
mysql 5會出現能力滿值的bug
如果扣數值扣到負數,資料庫因為unsigned關係所以會記錄成滿值 :shock:

有安裝
[分享](3.0)卸下裝備功能 3-0-t36343.html
如果裝備所加的能力比玩家自身能力還高,能力滿值得bug就會出現.. =.=

這裡提供一個解決辦法,不過覺有點冗長.. 希望有大大能提供更加簡潔的寫法 :)

開class/wog_act_arm.php

代碼: 選擇全部
      $DB_site->query("UPDATE wog_player SET ".$_POST['pay_id']."='',p_at=p_at-".$eq['d_at'].",p_mat=p_mat-".$eq['d_mat'].",p_df=p_df-".$eq['d_df'].",p_mdf=p_mdf-".$eq['d_mdf'].",p_agl=p_agl-".$eq['d_agl'].",p_bag=p_bag-".$eq['d_g_bag']." WHERE p_id=".$user_id);

取代
代碼: 選擇全部
      $pv=$DB_site->query_first("SELECT p_at,p_mat,p_df,p_mdf,p_agl,p_bag FROM wog_player WHERE p_id=".$user_id);
      $pv['p_at']=($pv['p_at']-$eq['d_at'] < 0)?0:$pv['p_at']-$eq['d_at'];
      $pv['p_mat']=($pv['p_mat']-$eq['d_mat'] < 0)?0:$pv['p_mat']-$eq['d_mat'];
      $pv['p_df']=($pv['p_df']-$eq['d_df'] < 0)?0:$pv['p_df']-$eq['d_df'];
      $pv['p_mdf']=($pv['p_mdf']-$eq['d_mdf'] < 0)?0:$pv['p_mdf']-$eq['d_mdf'];
      $pv['p_agl']=($pv['p_agl']-$eq['d_agl'] < 0)?0:$pv['p_agl']-$eq['d_agl'];
      $pv['p_bag']=($pv['p_bag']-$eq['d_g_bag'] < 0)?0:$pv['p_bag']-$eq['d_g_bag'];
      $DB_site->query("UPDATE wog_player SET ".$_POST['pay_id']."='',p_at=".$pv['p_at'].",p_mat=".$pv['p_mat'].",p_df=".$pv['p_df'].",p_mdf=".$pv['p_mdf'].",p_agl=".$pv['p_agl'].",p_bag=".$pv['p_bag']." WHERE p_id=".$user_id);

儲存/關閉文件

測試過沒有問題,不過很奇怪的是如果裝備能力大於玩家能力,卸下完裝備後物攻會變成13... 找不出問題 orz..
不過也不是大問題 @@ 總比能力滿值好吧 XD

雖然這bug可以新增能力比玩家當前等級所能達到的能力低的裝備來解決,不過以後不小心出新裝備沒注意到能力..... 那......... :?:

這方法也可以套用到寵物、銀行等等其它可以把數值扣到負數的功能上~



----2010/12/4----
修改一些錯誤 :oops:
解決物攻變成13,原來是我忘了把bag改成at.. OTL



stu6707
 
文章: 162
註冊時間: 2008-10-26 1:00 pm

Re: [分享]解決裝備卸下能力滿值bug

文章stu6707 » 2011-02-13 8:23 am

----2011/2/13----
新增寫法

代碼: 選擇全部
   $pv=$DB_site->query_first("SELECT p_at,p_mat,p_df,p_mdf,p_agl,p_bag FROM wog_player WHERE p_id=".$user_id);
   for($i=0;$i<6;$i++)
      {
         $pv[$i]=$pv[$i]-$eq[$i]<0?0:$pv[$i]-$eq[$i];
      }
   $DB_site->query("UPDATE wog_player SET ".$_POST['pay_id']."='',p_at=".$pv[0].",p_mat=".$pv[1].",p_df=".$pv['2].",p_mdf=".$pv[3].",p_agl=".$pv['4].",p_bag=".$pv[5]." WHERE p_id=".$user_id);


有任何錯誤請告知~ 謝謝~

----2011/2/14----
簡化


最後由 stu6707 於 2011-02-14 5:19 am 編輯,總共編輯了 1 次。


涅魂
 
文章: 4463
註冊時間: 2004-01-04 11:17 am
來自: Taiwan
性別: 男生

Re: [分享]解決裝備卸下能力滿值bug

文章涅魂 » 2011-02-13 10:13 pm

這BUG一般來說只會在直接對資料庫做修改時才會出現,不然按照正常程序來修改應是沒這問題的

而這強制歸零的作法會衍生出洗能力的問題,如17 --(-20)--> 0 --(+20)-->20,會出現這種能力不一致的問題,這也會有公平性的問題

我的作法比較傾向是跳個錯誤,拒絕他把裝備卸下,並在資料庫留存紀錄,由管理員處理 0.0


圖檔

stu6707
 
文章: 162
註冊時間: 2008-10-26 1:00 pm

Re: [分享]解決裝備卸下能力滿值bug

文章stu6707 » 2011-02-14 5:25 am

代碼: 選擇全部
$pv=$DB_site->query_first("SELECT p_at,p_mat,p_df,p_mdf,p_agl,p_bag from wog_player where p_id=".$user_id);
      for($i=0;$i<6;$i++)
      {
         $pv[$i]=$pv[$i]-$eq[$i];
      }
      $DB_site->query("UPDATE wog_player SET ".$_POST['pay_id']."='',p_at=".$pv[0].",p_mat=".$pv[1].",p_df=".$pv[2].",p_mdf=".$pv[3].",p_agl=".$pv[4].",p_bag=".$pv[5]." WHERE p_id=".$user_id);


果然只有直接對資料庫做修改才會溢位 @@ 處理好在update小於0會直接為0

不過只要出現負值能力就通知管理員,管理員也會很辛苦吧.. 而且拒絕卸下裝備會讓玩家困擾的 @@ 還要等管理員處理
要嘛就記下能力虛加了多少,固定時間扣除 :twisted:




涅魂
 
文章: 4463
註冊時間: 2004-01-04 11:17 am
來自: Taiwan
性別: 男生

Re: [分享]解決裝備卸下能力滿值bug

文章涅魂 » 2011-02-14 12:35 pm

管理員不做管理工作還要做什麼呢 呵呵

裝備在當下雖然會卸不下,但日後升級讓能力提升後還是能卸下的,比起方便性我比較重視公正性


圖檔

stu6707
 
文章: 162
註冊時間: 2008-10-26 1:00 pm

Re: [分享]解決裝備卸下能力滿值bug

文章stu6707 » 2011-02-14 1:30 pm

更方便的方法是alert能力不足以卸下裝備,這樣就不用提醒管理員了 @@

玩家不能卸下裝備,管理員好像也不能做什麼..




涅魂
 
文章: 4463
註冊時間: 2004-01-04 11:17 am
來自: Taiwan
性別: 男生

Re: [分享]解決裝備卸下能力滿值bug

文章涅魂 » 2011-02-16 12:04 am

這就是我先前說的禁止玩家卸下裝備的方法囉

管理員能做的就是在卸下裝備的地方加個程式碼,讓有這種問題出現時能寫個LOG,讓管理員知道有這件事情發生,並去做處理


圖檔


回到 精華區

誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 1 位訪客

cron