安装调试过程中,发现此外挂有BUG
BUG如下:
新增了m_npc==2的商贩,无论如何,都无法读取到这个商贩,导致这个功能在最关键的地方掉链子。
我逐步的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." 值的写法问题