[分享] 個人狀態 (兩種版本)

WOG設定安裝教學

版主: 涅魂, 簫哥

頭像
齋月
 
文章: 557
註冊時間: 2006-02-27 7:54 am

[分享] 個人狀態 (兩種版本)

文章齋月 » 2007-03-05 3:54 pm

以解決 寫:這外掛(!?),說修改好了0_0

這修改,是從yahoo即時通得來的靈感 @_@
再參考 涅哥哥的公會訊息外掛 做出來的

目前有三個問題~
1。無法像 公會訊息 一樣,使用換行。(測試後整個玩家列表會掛掉)
2。無法在修改完狀態後,馬上更新玩家列表。
3。從 mysql 預覽wog_status資料 時,有些資料的刪除格會變成問號。如下圖
                                  http://i11.tinypic.com/2cmsxsl.jpg
1&2不是什麼大問題,但還是希望有高手可以指教。
3的話,不曉得會不會使整個系統出錯,因此希望有高手可以解釋該狀況。


裝完後的畫面
http://i10.tinypic.com/40cy7nc.gif
圖片可能會有點看不懂,
左邊是讓您輸入您想要的狀態,
右邊顯示的黃色框框,就是您的狀態。

出現黃色框框的辦法,就是 將滑鼠游標 往旁邊在線列表的帳號上一擺,
莫約一秒鐘,即會出現。

而原本那位置,是出現PK所需金額的,改完後
PK所需金額,改至 將滑鼠遊標 往PK Y/N 一擺,
莫約一秒鐘,即會出現。


顯示在PK設定的修改方式
http://www.2233.idv.tw/viewtopic.php?p=3916133#3916133


顯示在情報中心的修改方式
由於要下載原版v3 再慢慢PO出修改.....
(非常麻煩.....因為一堆程式碼和我現在的不一樣 =.=)
可能會有漏掉,若裝完後,無法執行,請回覆告知

增加個人狀態 寫:
輸入SQL語法 寫:ALTER TABLE `wog_player` ADD `p_status` VARCHAR( 100 ) CHARACTER SET big5 NOT NULL ;

開啟 wog.js 寫:尋找
代碼: 選擇全部
/*=====================================================
 Copyright (C) ETERNAL<iqstar.tw@gmail.com>
 Modify : 2005/09/17
 URL : http://www.2233.idv.tw

 This program is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation; either version 2 of the License, or
 (at your option) any later version.
===================================================== */
下面,加上
代碼: 選擇全部
var p_status="";


IN function system_view(s)尋找
代碼: 選擇全部
var view_name=parent.wog_view;
下面,加上
代碼: 選擇全部
   view_name.document.write(temp_table1);
   view_name.document.write('<tr><td bgcolor="#4B689E">更改狀態</td></tr>');
   view_name.document.write('<form action="wog_act.php" method="post" name="f3" target="mission">');
   view_name.document.write('<tr><td><input type="text" name="p_status" size="80" maxlength="100" value="'+p_status+'"> <input type="button" value="改變狀態" onClick="parent.act_click(\'store\',\'status_save\',p_status.value)"></td></tr>');
   view_name.document.write('</form>');
   view_name.document.write(temp_table2);
   view_name.document.write(hr);


尋找
代碼: 選擇全部
function system_view(s)
{
..........
..........
..........
}
下面,加上
代碼: 選擇全部
function system_view2(s)
{
   message_cls();
   var view_name=parent.wog_view;
   view_name.document.write(temp_table1);
   view_name.document.write('<tr><td>內容</td><td>發生時間</td></tr>');
   if(s!="")
   {
      var s1=s.split(";");
      for(var i=0;i<s1.length;i++)
      {   
         var s2=s1[i].split(",");
         view_name.document.write('<tr><td>'+s2[0]+'</td><td>'+s2[1]+'</td></tr>');
      }
   }else
   {
      view_name.document.write('<tr><td colspan="8" >尚未發生任何事件</td></tr>');   
   }
   view_name.document.write(temp_table2);
}


尋找
代碼: 選擇全部
f.write('<tr><td ><a href=javascript:parent.yesname("'+s2[0]+'") target="foot" title="'+s2[4]+'"><b><font color="'+fcolor+'">'+s2[0]+'</font></b></a></td><td >'+s2[2]+'</td><td >'+s2[3]+'</td></tr>');
覆蓋為
代碼: 選擇全部
f.write('<tr><td ><a href=javascript:parent.yesname("'+s2[0]+'") target="foot" [color=red]title="'+s2[6]+'"[/color]><b><font color="'+fcolor+'">'+s2[0]+'</font></b></a></td><td >'+s2[2]+'</td><td >[color=red]<a title="'+s2[4]+'">[/color]'+s2[3]+'[color=red]</a>[/color]</td></tr>');


開啟 wog_act.php 寫:尋找
代碼: 選擇全部
         case "sex":
            alertWindowMsg("此功能關閉");
            $wog_act_class->p_sex($HTTP_COOKIE_VARS["wog_cookie"]);
         break;
下面,加上
代碼: 選擇全部
         case "status_save":
            $wog_act_class->p_status_save($HTTP_COOKIE_VARS["wog_cookie"]);
         break;

開啟 /class/wog_act_chara.php 寫:IN login()

尋找
代碼: 選擇全部
$p=$DB_site->query_first("select p_id,p_name,p_lock,p_bbsid,p_st,p_lock_time from wog_player where p_name='".$_POST["id"]."' and p_password='".$_POST["pass"]."' ");
覆蓋為
代碼: 選擇全部
$p=$DB_site->query_first("select p_id,p_name,p_lock,p_bbsid,p_st,p_lock_time[color=red],p_status[/color] from wog_player where p_name='".$_POST["id"]."' and p_password='".$_POST["pass"]."' ");


尋找
代碼: 選擇全部
showscript("parent.peolist.document.location.reload()");
覆蓋為
代碼: 選擇全部
showscript("[color=red]parent.p_status='".$p['p_status']."';[/color]parent.peolist.document.location.reload()");

開啟 /class/wog_act_store.php 寫:尋找
代碼: 選擇全部
}
?>
上面,加上
代碼: 選擇全部
   function p_status_save($user_id)
   {
      global $DB_site,$_POST,$lang;
      $temp=htmlspecialchars($_POST["temp_id"]);
      if(strlen($temp) > 200)
      {
         alertWindowMsg($lang['wog_act_chara_status_long']);
      }
      $DB_site->query("update wog_player set p_status='".$temp."' where p_id=".$user_id); 
      showscript("parent.p_status='".$_POST['temp_id']."';parent.job_end(11);parent.peolist.document.location.reload()");
   }


開啟 /class/wog_act_group.php 寫:尋找
代碼: 選擇全部
showscript("parent.system_view('$s')");
覆蓋為
代碼: 選擇全部
showscript("[color=red]parent.system_view2('$s')[/color]");


開啟 /class/wog_etc_peo.php 寫:尋找
代碼: 選擇全部
$online=$DB_site->query("select p_name,p_sex,p_lv,p_pk_s,p_pk_money,p_place from wog_player where p_online_time > $datecut and p_lock=0 order by p_lv desc");
覆蓋為
代碼: 選擇全部
$online=$DB_site->query("select p_name,p_sex,p_lv,p_pk_s,p_pk_money,p_place[color=red],p_status[/color] from wog_player where p_online_time > $datecut and p_lock=0 order by p_lv desc");


尋找
代碼: 選擇全部
$temp_s.=";".$onlines[0].",".$onlines[1].",".$onlines[2].",".$onlines[3].",".$onlines[4].",".$onlines[5];
覆蓋為
代碼: 選擇全部
         $temp_s.=";".$onlines[0].",".$onlines[1].",".$onlines[2].",".$onlines[3].",".$onlines[4].",".$onlines[5][color=red].",".$onlines[6][/color];


開啟 /language/wog_act_traditional_chinese.php 寫:尋找
代碼: 選擇全部
//--------------buy----------
上面,加上
代碼: 選擇全部
$lang['wog_act_chara_status_long'] = '狀態太長了喔';


儲存關閉所有檔案(完)



多謝涅哥哥的指教 :face5:[quote="涅魂"]<u>積分 +5</u>

新功能分享,還不錯用 :)

at 2007-03-06 07:17 pm[/point]


最後由 齋月 於 2007-03-08 8:45 am 編輯,總共編輯了 8 次。


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

文章涅魂 » 2007-03-05 8:03 pm

唔,看過程式碼一遍後,覺得…可以換別的寫法會比較好 ^^"

因為這項功能每位玩家可能都會用到,所以將p_status加在wog_player中會比較好,且如此也可省去在wog_etc_peo.php中再次取值的資源消耗(線上有100位玩家就代表100位玩家同時更新onlinepeo時資料庫會增加10000次的查詢=口=)

而問題一是因為換行符號沒有置換,所以會出現錯誤

問題二只要在玩家更新status後重整onlinepeo頁面即可

問題三…不太清楚為何會出現這種錯誤,但可能跟您的墜設定有關?輸入月的SQL語法後p_status的內容可以為null而非您的SQL語法中描述的not null

下面列出我的改法,我把修改的部分移至PK設定裡,且不傳入設定值(少點輸出…= =+)

在您的資料庫中輸入下列語法 寫:ALTER TABLE `wog_player` ADD `p_status` VARCHAR( 100 ) CHARACTER SET big5 NOT NULL ;

開啟檔案wog/class/wog_act_store.php 寫:尋找
代碼: 選擇全部
}
?>

之前,加上
代碼: 選擇全部
   function p_status_save($user_id)
   {
      global $DB_site,$_POST,$lang;
      $temp=htmlspecialchars($_POST["temp_id"]);
      if(strlen($temp) > 200)
      {
         alertWindowMsg('狀態長度過長');
      }
      $DB_site->query("update wog_player set p_status='".$temp."' where p_id=".$user_id); 
      showscript("parent.job_end(11);parent.peolist.document.location.reload()");
   }


開啟檔案wog/class/wog_etc_peo.php 寫:尋找
代碼: 選擇全部
      $online=$DB_site->query("select p_name,p_sex,p_lv,p_pk_s,p_pk_money,p_place from wog_player where p_online_time > $datecut and p_lock=0 order by p_lv desc");
      $temp_s="";

      while($onlines=$DB_site->fetch_array($online))
      {
         $temp_s.=";".$onlines[0].",".$onlines[1].",".$onlines[2].",".$onlines[3].",".$onlines[4].",".$onlines[5];
      }

覆蓋成
代碼: 選擇全部
      $online=$DB_site->query("select p_name,p_sex,p_lv,p_pk_s,p_pk_money,p_place[color=red],p_status[/color] from wog_player where p_online_time > $datecut and p_lock=0 order by p_lv desc");
      $temp_s="";

      while($onlines=$DB_site->fetch_array($online))
      {
         $temp_s.=";".$onlines[0].",".$onlines[1].",".$onlines[2].",".$onlines[3].",".$onlines[4].",".$onlines[5][color=red].",".$onlines[6][/color];
      }

開啟檔案wog/wog.js 寫:In pk_view()

尋找
代碼: 選擇全部
   f.write('<form action="wog_act.php" method="post" target="mission">');
   f.write(temp_table1);
   f.write('<tr><td >參加PK</td><td >PK金額</td></tr>');
   f.write('<tr><td ><input type="radio" name="pk_setup" value="1" '+pk_yes+'>YES <input type="radio" name="pk_setup" value="0" '+pk_no+'>NO </td><td ><input type="text" name="pk_money" value="'+money+'" size="7" maxlength="7"></td></tr>');
   f.write('<tr><td colspan="2" ><input type="submit" value="確定"></td></tr>');
   f.write('<tr><td colspan="2" >PK戰果紀錄 : WIN '+win+' / LOST '+lost+'</td></tr>');
   f.write('<tr><td colspan="2" >PK金額設定最高100000最低1000,身上現金低於最低金額不能參加PK,系統會自動設定不參加PK賽</td></tr>');
   f.write(temp_table2);
   f.write('<input type="hidden" name="f" value="pk">');   
   f.write('<input type="hidden" name="act" value="setup">');
   f.write('</form>');

下面,加上
代碼: 選擇全部
   f.write(hr+temp_table1);
   f.write('<tr bgcolor="#4B689E"><td>更改狀態</td></tr>');
   f.write('<tr><td><input type="text" name="p_status" value="" size="60"> <input type="button" value="改變狀態" onclick="parent.act_click(\'store\',\'status_save\',p_status.value)"></td></tr>');
   f.write('<tr><td><font color="red"><b>請勿輸入不雅文字,經查證將在【沒有警告】的情況下刪除該帳號</b></font></td></tr>');
   f.write(temp_table2);


In onlinelist()


尋找
代碼: 選擇全部
               f.write('<tr><td ><a href=javascript:parent.yesname("'+s2[0]+'") target="foot" title="'+s2[4]+'"><b><font color="'+fcolor+'">'+s2[0]+'</font></b></a></td><td >'+s2[2]+'</td><td >'+s2[3]+'</td></tr>');

覆蓋成
代碼: 選擇全部
               [color=red]if(s2[6] == "")s2[6]="沒有輸入";[/color]
               f.write('<tr><td ><a href=javascript:parent.yesname("'+s2[0]+'") target="foot" title="'+[color=red]s2[6][/color]+'"><b><font color="'+fcolor+'">'+s2[0]+'</font></b></a></td><td >'+s2[2]+'</td><td >'+s2[3]+'</td></tr>');

開啟檔案wog/wog_act.php 寫:尋找
代碼: 選擇全部
         case "sex":
            alertWindowMsg("此功能關閉");
            $wog_act_class->p_sex($HTTP_COOKIE_VARS["wog_cookie"]);
         break;

下面,加上
代碼: 選擇全部
         case "status_save":
            $wog_act_class->p_status_save($HTTP_COOKIE_VARS["wog_cookie"]);
         break;
儲存,關閉所有檔案

大概就這些了,我覺得這樣應該可以提升些效率,也不用再修改system_view()了^^

另外,上面缺少了$lang['wog_act_chara_status_long']的修改… :roll:

以上僅供參考


最後由 涅魂 於 2007-03-06 7:31 pm 編輯,總共編輯了 1 次。
圖檔


回到 精華區

誰在線上

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

cron