[WOG4.5][外掛] 隱藏商店之不完美DEBUG

提供WOG各方面的技術問題,並提供最新path更新。

版主: 涅魂, 簫哥, 10度C~

左慈
 
文章: 108
註冊時間: 2008-03-03 1:42 pm

[WOG4.5][外掛] 隱藏商店之不完美DEBUG

文章左慈 » 2011-06-28 4:43 pm

额,刚才在原帖无法回复,所以只能新开

安装调试过程中,发现此外挂有BUG

BUG如下:
新增了m_npc==2的商贩,无论如何,都无法读取到这个商贩,导致这个功能在最关键的地方掉链子。 :roll:

我逐步的DEBUG找源头,终于发现问题来源
引用魂大原文
開啟檔案:class/wog_fight_select.php

IN fire() function

尋找
代碼: 選擇全部
if($m["m_npc"]==1)
{
...
}else
{
改成
代碼: 選擇全部
if($m["m_npc"]==1)
{
...
}elseif($m['m_npc'] == 2) {
$DB_site->query('DELETE FROM wog_monster_shop_log WHERE p_id='.$user_id);
//取得商品列表
$query = $DB_site->query('
SELECT a.ms_id, a.d_id, a.item_num, a.ms_money, b.d_name
FROM wog_monster_shop a
LEFT JOIN wog_df b ON b.d_id=a.d_id
WHERE a.m_id='.$m['m_id'].' AND a.ms_rate <= '.rand(1, 100).'
ORDER BY RAND()
LIMIT 7
');
$list = array();
$data = array();
while($d = $DB_site->fetch_array($query)) {
$list[] = $d['ms_id'];
$data[] = $d['ms_id'].','.$d['d_name'].'*'.$d['item_num'].','.$d['ms_money'];
}
if(count($list) > 0) {
$list = implode(',', $list);
$data = implode(';', $data);
$DB_site->query('INSERT INTO wog_monster_shop_log(p_id, m_id, ms_list)VALUES('.$user_id.', '.$m['m_id'].', "'.$list.'")');
$m['m_npc_message']=str_replace("\r\n","&n",$m['m_npc_message']);
echo 'parent.mshop_view("'.$m['m_name'].'", "'.$m['m_img'].'", "'.$m['m_npc_message'].'", "'.$data.'");';
}
}else
{


实际上这个代码是毫无问题的
来源还在前面
代碼: 選擇全部
$sql="select * from wog_monster where ".$place_str." and m_meet <= ".rand(0,100)." ".$mission_str." ORDER BY RAND() LIMIT 1";

这个东西里面,$place_str的取值有问题
再往上面看
代碼: 選擇全部
$place_str='m_place in ('.$_POST['act'].',0)';
         if($_POST['subplace']){
            $checker=1 << (intval($_POST['subplace'])-1);
            $place_str='(m_place=0 or (m_place='.$_POST['act'].' and m_subplace & '.$checker.'='.$checker.'))';
         }

这里,虽然我暂时还没有判断出正确写法应该如何,但是肯定是这里和这个外挂不兼容了
我把$sql改成
代碼: 選擇全部
$sql="select * from wog_monster where m_place=".$_POST['act']." and m_meet <= ".rand(0,100)." ".$mission_str." ORDER BY RAND() LIMIT 1";

直接跳过了对".$place_str." 的判断,于是一切正常!


以上是不完美修改法,因为跳过".$place_str." 这个值,不知道会不会对以后的运行产生影响。
所以,在自己思考的同时,也希望高人能关注下这个问题,看如何从源头抓起,处理好这个".$place_str." 值的写法问题



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

Re: [WOG4.5][外掛] 隱藏商店之不完美DEBUG

文章stu6707 » 2011-06-28 5:40 pm

這樣你就遇不到m_place=0的怪了.. 0好像是全區域怪 (沒記錯的話

先檢查看看新增的怪(m_npc=2) 的 m_place

通常遇不到怪都是m_place 不符合sql query的查詢條件



左慈
 
文章: 108
註冊時間: 2008-03-03 1:42 pm

Re: [WOG4.5][外掛] 隱藏商店之不完美DEBUG

文章左慈 » 2011-06-28 6:13 pm

以上,肯定是m_place符合要求的

在DEBUG中,我发现它会直接跳出整个if ($m)这个判断句,直接取读取后面的东西

我就一步步的DEBUG了

后来发现不是来自SQL数据库里面的写法错误,我才开始寻找的代码问题啦

所以才会追根溯源了

对于全区域怪物 我自己有其他的设定 因此对我来说无所谓0区域怪物了

只是对 $place_str='m_place in ('.$_POST['act'].',0)';这个代码的意义理解不太清楚

所以无法写出正确的解决方案啦



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

Re: [WOG4.5][外掛] 隱藏商店之不完美DEBUG

文章stu6707 » 2011-06-28 6:22 pm

$place_str='m_place in ('.$_POST['act'].',0)';

這段的意思是找出m_place等於$_POST['act'] 或是等於0 的怪物

你的情況是跳出if($m),那就是沒有查詢出結果,可能是你的sql query有錯誤

方便的話請你提供代碼,不然實在很難猜出問題哪裡... 囧



左慈
 
文章: 108
註冊時間: 2008-03-03 1:42 pm

Re: [WOG4.5][外掛] 隱藏商店之不完美DEBUG

文章左慈 » 2011-06-28 9:05 pm

呵呵 我是使用的原版WOG4.5
这是修改的第一个外挂

所以,我才比较肯定的判断是外挂和程式有些许不兼容的地方

sql query 是ET的原语句
而外挂也是魂大的原代码

本身不可能错的两个代码 在一起了 就不兼容了

我自己找找原因吧 看究竟是这个代码的哪里出问题了

待有了结果 我会及时上报 供大家参考



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

Re: [WOG4.5][外掛] 隱藏商店之不完美DEBUG

文章stu6707 » 2011-06-29 6:03 am

找出問題了.....

因為wog_monster_shop是空的,所以直接跳過else if($m['m_npc'] == 2) 裡面的 if(count($list) > 0) ,沒有echo出function當然看不到商人...

你可以把之前刪掉的弄回去了 @@



左慈
 
文章: 108
註冊時間: 2008-03-03 1:42 pm

Re: [WOG4.5][外掛] 隱藏商店之不完美DEBUG

文章左慈 » 2011-06-29 3:04 pm

额,这样的
其一,wog_monster_shop我添加进去了数据的,不为空
其二,else if($m['m_npc'] == 2) 是对wog_monster表里面的键值判断的,判断通过再转入读取wog_monster_shop相关值进行判断
其三,采用这个外挂后,从我的DEBUG来看,它并不是绕过else if($m['m_npc'] == 2) 这个,而是跳过了整个IF ($m)
所以并不是因为shop为空,也并非跳过else if($m['m_npc'] == 2) 这个
而是跳过了整个包括判断m_npc==1 m_npc==2 else 这个大段的IF

所以问题是出在IF ($m)之前的



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

Re: [WOG4.5][外掛] 隱藏商店之不完美DEBUG

文章stu6707 » 2011-06-29 4:21 pm

請問會跳出
代碼: 選擇全部
alertWindowMsg($lang['wog_fight_no_date']);

嗎?

如果不會而且開始冒險按鈕有在倒數,那就是有進入
代碼: 選擇全部
if($m)


你可以試試看加入
代碼: 選擇全部
if($m['m_npc']==1){
   echo "alert(1);\n";
}
elseif($m['m_npc']==2){
   echo "alert(2);\n";
}else{
   echo "alert(3);\n";
}

看看是進入哪一個

還有把有商人的那一區其它怪的m_place改成其它值,只留商人,這樣比較好找問題




回到 Online FF Battle-WOG官方聯盟推廣處

誰在線上

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