[算是原創]註冊系統(使用MySql儲存密碼)

Home Home
<< 1 2 >>
跳頁: (共 2 頁)
引用 | 編輯 slyh
2011-02-08 22:05
樓主
推文 x1

圖 1.
要有圖片......

【插件資訊】

插件來源:原創
使用指令:say /login
安裝路徑:把sma檔放進amxmodx\scripting自行編譯

【插件介紹】

請於amxx.cfg填入以下內容:

// 數據庫伺服器IP (大部份情況為localhost)
regsys_host "localhost"
// 數據庫用戶名
regsys_user ""
// 數據庫密碼
regsys_pass ""
// 數據庫名稱
regsys_dbname ""

插件功能:

1.管理員(踢權)未登入會暫時失去所有權限
   (這個功能只是為我朋友伺服器的環境而設的)
2.更改密碼
3.自動登入功能
   (只需輸入setinfo "_reg" "密碼"即可永久自動登入)

注意事項:

下載源碼後,請將第567行的_pw改為你所設置的密鑰

若出現任何管理員遺失權限的情況,請使用第二方案

請使用方案二壓縮包中的admin插件取代原版



經過初步測試後,應該沒有問題。

建議將此插件配合附件中的聊天系統使用。

有bug請回帖說明,本人不會為此插件添加任何功能,有需要者請自己修改。

轉帖的朋友請註明作者名(slyh),謝謝!

所參考的插件:
GunXPMod(sqlx部份)
admin.sma(sqlx部份)

獻花 x2
引用 | 編輯 slyh
2011-02-08 22:07
1樓
  
插件在這
不知道sma檔傳不上來,抱歉

本帖包含附件
檔名: zip regsys.zip   (2022-06-09 14:17 / 6 KB)   下載次數:330

本帖包含附件
檔名: zip regsys2.zip   (2022-06-09 14:17 / 12 KB)  
第二方案
下載次數:357


獻花 x0
引用 | 編輯 觀眾甲
2011-02-08 22:53
2樓
  
怎覺得好亂
什麼數據庫..不如拍一條影片吧...

獻花 x1
引用 | 編輯 slyh
2011-02-08 23:15
3樓
  
其實使用也很簡單,應該不需要影片吧 表情

獻花 x0
引用 | 編輯 tw8825252
2011-02-09 00:38
4樓
  
註冊系統是還不錯  不過感覺上有點麻煩就是  玩家有時還忘記密碼

獻花 x0
引用 | 編輯 樂哥x_x
2011-02-09 04:40
5樓
  
註冊左 在入場都係得註冊 冇得登錄


// 數據庫伺服器IP (大部份情況為localhost)
regsys_host "localhost"
// 數據庫用戶名
regsys_user ""
// 數據庫密碼
regsys_pass ""
// 數據庫名稱
regsys_dbname ""


不可登錄= =


在入場也是註冊

獻花 x0
引用 | 編輯 casper1315
2011-02-09 05:54
6樓
  
這種東西不是有很多嗎-.-?
但做得出來真的好厲害!!!
不像我-.-" SMA都不會寫><
我用看看^^

獻花 x0
引用 | 編輯 slyh
2011-02-09 10:03
7樓
  
下面是引用 樂哥x_x 於 2011-02-09 04:40 發表的 : 到引言文
註冊左 在入場都係得註冊 冇得登錄


// 數據庫伺服器IP (大部份情況為localhost)
regsys_host "localhost"
// 數據庫用戶名
regsys_user ""
// 數據庫密碼
regsys_pass ""
// 數據庫名稱
regsys_dbname ""


不可登錄= =


在入場也是註冊


你要填上MySql數據庫的資料才可正常使用

獻花 x0
引用 | 編輯 樂哥x_x
2011-02-09 12:41
8樓
  
MySql數據庫的資料
打你個個出來see下ok??

我唔識打\ - -

有冇得轉NVault  save = =

我冇MySQL

如果冇得轉NVault  save  可唔可以help我set MySQL

獻花 x0
引用 | 編輯 slyh
2011-02-09 12:53
9樓
  
轉用nvault save係管理上會比較煩

如果想架一個SQL Server,可以上google搵教學,keyword:mysql 伺服器 架設

獻花 x0
引用 | 編輯 HoJai
2011-02-09 21:30
10樓
  
如果我唔say login係唔係唔洗login?

獻花 x0
引用 | 編輯 slyh
2011-02-09 21:34
11樓
  
所以建議配搭附件中的聊天插件使用,

如果想加設強制登入等功能,自行修改sma吧 表情

獻花 x0
引用 | 編輯 itlct
2011-02-12 17:30
12樓
  
太棒了!!!!可惜現在沒用: )

獻花 x0
引用 | 編輯 ga2006262523
2011-02-13 16:33
13樓
  
這個註冊系統還真完善阿..
還有修改密碼= =

獻花 x0
引用 | 編輯 toretmods
2011-02-14 18:36
14樓
  
第一眼看到還以為是使用Mychat儲存密碼XDD

糗了~

獻花 x0
引用 | 編輯 hihihi321321
2011-02-22 09:17
15樓
  
緊急問題: 請問插件裹可否加入   登入有時間倒數
假如不能在指定時間中輸入密碼..將被踢出 請高手指示

獻花 x0
引用 | 編輯 slyh
2011-02-22 10:21
16樓
  
set_task(想要時間,"function",用戶的ID)

public function(id)
{
     if(user_status[id] != 3)
     {
           server_cmd("kick #%i ^"提示^"",get_user_userid(id))
     }
}

把set_task放進你想要的地方

獻花 x0
引用 | 編輯 lauliu
2011-02-22 15:32
17樓
  
很好用
有個進階問題
如何可以配合 論壇 的 MD5 password 加密?
如果可以修改 20行 的句子
這就可以同時於 論壇同時註冊 但我不懂SQL修改

獻花 x0
引用 | 編輯 肥貓貓
2011-02-22 16:25
18樓
  
總覺得跟國外 Phpbb相容的 Forum mod 一樣

給作者支持! 表情

獻花 x0
引用 | 編輯 slyh
2011-02-22 17:54
19樓
  
下面是引用 lauliu 於 2011-02-22 15:32 發表的 Re:[插件] [算是原創]註冊系統(使用MySql儲存密碼): 到引言文
很好用
有個進階問題
如何可以配合 論壇 的 MD5 password 加密?
如果可以修改 20行 的句子
這就可以同時於 論壇同時註冊 但我不懂SQL修改
剛才測試了一下discuz,他密碼加密的方法不是單純的MD5加密,這方面還需要研究一下

獻花 x0
引用 | 編輯 hihihi321321
2011-02-22 23:18
20樓
  
下面是引用 slyh 於 2011-02-22 10:21 發表的 : 到引言文
set_task(想要時間,"function",用戶的ID)

public function(id)
{
     if(user_status[id] != 3)
     {
           server_cmd("kick #%i ^"提示^"",get_user_userid(id))
     }
}

把set_task放進你想要的地方

多謝你~ 但我始終不明白SET_TASK加入那裡...
插件中沒有區分一個情況:


已註冊的A玩家名字為 ABC , 但當B玩家名字同樣為ABC 進入伺服器
這時B玩家因密碼不相同...需要登入系統 <== 希望加入時間倒數

希望大大能夠在幫助喔-3-"

獻花 x0
引用 | 編輯 slyh
2011-02-23 11:58
21樓
  
下面是引用 hihihi321321 於 2011-02-22 23:18 發表的 : 到引言文


多謝你~ 但我始終不明白SET_TASK加入那裡...
插件中沒有區分一個情況:


已註冊的A玩家名字為 ABC , 但當B玩家名字同樣為ABC 進入伺服器
這時B玩家因密碼不相同...需要登入系統 <== 希望加入時間倒數

希望大大能夠在幫助喔-3-"
set_task可加入到

複製程式
public client_putinserver(id)
{
       if( ( get_user_flags(id) & ADMIN_KICK ) && ( user_status[id] !=3 ) )
       {
              remove_user_flags(id)
       }
       set_task(1.0,"not_login",id)
}

之中的if( ( get_user_flags(id) & ADMIN_KICK ) && ( user_status[id] !=3 ) )以上或set_task(1.0,"not_login",id)以下

加入後,玩家完全進入伺服器後就會開始倒數,到了時間就會執行function內的內容,即是如果用戶尚未登入便踢除,

提示兩字可以更改,但請注意請勿刪除^"

至於上文所提及的例子,請問可以再提另一個例子嗎,因為本人不太明白表情

獻花 x0
引用 | 編輯 hihihi321321
2011-02-26 01:12
22樓
  
下面是引用 slyh 於 2011-02-23 11:58 發表的 : 到引言文

set_task可加入到
[code]public client_putinserver(id)
{
     if( ( get_user_flags(id) & ADMIN_KICK ) && ( user_status[id] !=3 ) )
.......

情況是這樣的:
當新玩家(名字為A)
進入伺服器
伺服器提示  可"選擇性" 進行註冊...

假如玩家(名字為A)  想註冊的話
側打開選單進行註冊...密碼為999999

萬一玩家(名字為A)註冊後,  相反其他玩家名稱也為A
這時伺服器檢查到這位玩家密碼不正確 <===(  加入20秒時間倒數, 提示玩家輸入密碼, 不正確或沒有輸入密碼並把其踢出)

獻花 x0
引用 | 編輯 slyh
2011-02-26 09:14
23樓
  
下面是引用 hihihi321321 於 2011-02-26 01:12 發表的 : 到引言文


情況是這樣的:
當新玩家(名字為A)
進入伺服器
伺服器提示  可"選擇性" 進行註冊...

假如玩家(名字為A)  想註冊的話
側打開選單進行註冊...密碼為999999

萬一玩家(名字為A)註冊後,  相反其他玩家名稱也為A
這時伺服器檢查到這位玩家密碼不正確 <===(  加入20秒時間倒數, 提示玩家輸入密碼, 不正確或沒有輸入密碼並把其踢出)
在源碼第15行最後加上複製程式
,user_rest[33]
再把
複製程式
                            if(equali(pw, password))
                            {
                                   user_status[id] = 3
                                   access_user(id)
                            }
替換成複製程式
                            if(equali(pw, password))
                            {
                                   user_status[id] = 3
                                   access_user(id)
                            }
                            else
                            {
                                   set_task(1.0, "force_login", id, _, _, "a", 20)
                                   set_task(20.0,"check_user",id)
                                   user_rest[id] = 20
                            }
再於源碼底部加上
複製程式
public force_login(id)
{
       if(user_status[id] != 3)
       {
              user_rest[id] -= 1
              set_hudmessage(255, 0, 0, -1.0, -1.0, 0, 0.0, 1.0, 0.0, 0.0)
              show_hudmessage(id,"你的暱稱已被使用,請登入或轉換另一個名字,否則你將會於 %i 秒後被踢除",user_rest[id]) //這行可以更改
              set_task(1.0,"force_login",id)
       }
}

public check_user(id)
{
     if(user_status[id] != 3)
     {
           server_cmd("kick #%i ^"對被踢者的提示^"",get_user_userid(id)) // 這行也是可以更改
     }
}


獻花 x0
引用 | 編輯 hihihi321321
2011-02-26 12:00
24樓
  
感謝你喔=3=   你能解決我的真正問題>3<
你是香港玩家嗎...我也是喔@_@"

獻花 x0
引用 | 編輯 hihihi321321
2011-02-26 12:53
25樓
  
下面是引用 slyh 於 2011-02-26 09:14 發表的 : 到引言文

在源碼第15行最後加上複製程式
,user_rest[33]
再把
[code]                        if(equali(pw, password))
.......

但是有一個小小的問題喔-_-"
是顯示倒數的問題....
倒數的顯示被顯示成 由1數到200 <==能否修改為由20 減至 1呢 -3-?

獻花 x0
引用 | 編輯 slyh
2011-02-26 13:39
26樓
  
抱歉,忘了設定數值,上文已經更新

獻花 x0
引用 | 編輯 hihihi321321
2011-02-27 10:13
27樓
  
感謝你-3-" 但是數值在遊戲中顯示的不是20秒= ="
反而多出了多百的數值- -" SMA的數值與遊戲中的不相同= ="

獻花 x0
引用 | 編輯 slyh
2011-02-27 11:56
28樓
  

圖 1.


但經本人測試,上述代碼能正常運作

獻花 x0
引用 | 編輯 hihihi321321
2011-02-28 01:15
29樓
  
下面是引用 slyh 於 2011-02-27 11:56 發表的 : 到引言文
但經本人測試,上述代碼能正常運作

先多謝你測試喔...

但你是不是只測試了你所修改的語法...

我把你所提供的語法加入後...便變成語法設定與遊戲內不相同喔...

複製程式
#include <amxmodx>
#include <fakemeta>
#include <sqlx>
#include <cstrike>
#include <amxmisc>
#include <fun>
#include <admin>
#define VERSION "1.0"
// 密碼最短長度
#define PASSWORD_MIN_LEN 6
#define MAX_LOGIN_ATTEMPTS 3
#define BAN_TIME 3
// user_activity 1 - 註冊中 2 - 登入中 3 - 輸入舊密碼 4 - 輸入新密碼
new user_status[33],user_activity[33],user_len[33],user_password[33][33],user_wrong[33],mysqlx_host,mysqlx_user,mysqlx_db,mysqlx_pass,gmsgScreenFade,user_rest[33]
new Handle:g_hTuple
new bool:user_connect[33]
new const szTables[][] = 
{
 "CREATE TABLE IF NOT EXISTS `register_system` ( `user_id` varchar(64) NOT NULL,`user_password` varchar(128) default NULL,`user_ip` varchar(32) default NULL,PRIMARY KEY (`user_id`) ) TYPE=MyISAM;"
}
public plugin_init()
{
 gmsgScreenFade = get_user_msgid("ScreenFade")
 register_plugin("註冊/登入系統", VERSION, "slyh")
 register_clcmd("say", "user_say", ADMIN_ALL)
 register_clcmd("say /login", "user_login", ADMIN_ALL)
 register_event("ScreenFade","Event_ScreenFade","b")
 register_forward(FM_ClientUserInfoChanged, "Fwd_ClientInfoChanged")
 mysqlx_host = register_cvar ("regsys_host", "")
 mysqlx_user = register_cvar ("regsys_user", "")
 mysqlx_pass = register_cvar ("regsys_pass", "")
 mysqlx_db = register_cvar ("regsys_dbname", "register_system")
 MySQLx_Init()
}
public user_say(id,level,cid)
{
 if( ( !cmd_access(id, level, cid, 2) ) || user_activity[id] == 0)
  return PLUGIN_CONTINUE
 new name[32],message[128]
 get_user_name(id,name,31)
 switch(user_activity[id])
 {
  case 1:
  {
   new arg_pass[32]
   read_argv(1, arg_pass, 31)
   new len = strlen(arg_pass);
   if(len < PASSWORD_MIN_LEN || len > 20)
   {
    format(message,127,"^x04[hk-fun.com提醒你] ^x01密碼長度最少需有 %d 位, 最多不可超過 20 位, 請輸入一個新的密碼.",PASSWORD_MIN_LEN)
    client_color(id,id,message)
    client_cmd(id,"messagemode")
    return PLUGIN_HANDLED
   }
   format(message,127,"^x04[hk-fun.com提醒你] ^x01你已成功註冊, 請謹記你的密碼: %s .",arg_pass)
   access_user(id)
   client_color(id,id,message)
   user_password[id] = arg_pass
   user_status[id] = 3
   user_activity[id] = 0
   set_task(2.5,"Reset_Screen",id)
   set_task(3.0,"chooseteam",id)
   set_task(1.1,"hud_finish",id)
   client_cmd(id,"setinfo ^"_reg^" ^"%s^"",arg_pass)
   new name[32],ip[32]
   get_user_name(id,name,31)
   get_user_ip(id,ip,31,1)
   static szQuery[128];
   formatex( szQuery, 127, "REPLACE INTO `register_system` (`user_id`, `user_password`, `user_ip`) VALUES ('%s', '%s', '%s');",name,arg_pass,ip)
   SQL_ThreadQuery( g_hTuple, "QuerySetData", szQuery);
   return PLUGIN_HANDLED
  }
  case 2:
  {
   new arg_pass[32]
   read_argv(1, arg_pass, 31)
   user_password[id] = arg_pass
   LoadData(id)
   return PLUGIN_HANDLED
  }
  case 3:
  {
   new arg_pass[32]
   read_argv(1, arg_pass, 31)
   user_password[id] = arg_pass
   LoadData(id)
   return PLUGIN_HANDLED
  }
  case 4:
  {
   new arg_pass[32]
   read_argv(1, arg_pass, 31)
   new len = strlen(arg_pass);
   if(len < PASSWORD_MIN_LEN || len > 20)
   {
    format(message,127,"^x04[hk-fun.com提醒你] ^x01密碼長度最少需有 %d 位, 最多不可超過 20 位, 請輸入一個新的密碼.",PASSWORD_MIN_LEN)
    client_color(id,id,message)
    client_cmd(id,"messagemode")
    return PLUGIN_HANDLED
   }
   format(message,127,"^x04[hk-fun.com提醒你] ^x01你已成功更換密碼, 請謹記你的密碼: %s .",arg_pass)
   client_color(id,id,message)
   user_password[id] = arg_pass
   user_status[id] = 3
   user_activity[id] = 0
   set_task(2.5,"Reset_Screen",id)
   set_task(3.0,"chooseteam",id)
   set_task(1.1,"hud_finish",id)
   new name[32],ip[32]
   get_user_name(id,name,31)
   get_user_ip(id,ip,31,1)
   static szQuery[128];
   formatex( szQuery, 127, "REPLACE INTO `register_system` (`user_id`, `user_password`, `user_ip`) VALUES ('%s', '%s', '%s');",name,arg_pass,ip)
   SQL_ThreadQuery( g_hTuple, "QuerySetData", szQuery);
   return PLUGIN_HANDLED
  }
 }
 return PLUGIN_CONTINUE
}
public QuerySelectData( iFailState, Handle:hQuery, szError[ ], iError, iData[ ], iDataSize, Float:fQueueTime ) 
{ 
 if( iFailState == TQUERY_CONNECT_FAILED 
 || iFailState == TQUERY_QUERY_FAILED ) 
 { 
  log_amx( "%s", szError );
  
  return;
 } 
 else 
 { 
  new id = iData[ 0 ];
  
  new password = SQL_FieldNameToNum(hQuery, "user_password") 
  new pw[44]
  while (SQL_MoreResults(hQuery)) 
  {
   new name[32],message[128]
   get_user_name(id,name,31)
   SQL_ReadResult(hQuery, password, pw, sizeof(pw)-1)
   if(user_connect[id])
   {
    new password[32]
    user_len[id] = strlen(pw)
    user_connect[id] = false
    get_user_info(id, "_reg", password, 31)
    if(equali(pw, password))
    {
    user_status[id] = 3
    access_user(id)
    }
    else
    {
    set_task(1.0, "force_login", id, _, _, "a", 20)
    set_task(20.0,"check_user",id)
    user_rest[id] = 20
    }
   }
   else
   {
    if(!equali(pw, user_password[id]))
    {
     format(message,127,"^x04[hk-fun.com提醒你] ^x01密碼錯誤, 你只有 %d 次機會.",MAX_LOGIN_ATTEMPTS)
     client_color(id,id,message)
     user_wrong[id] += 1
     client_cmd(id,"messagemode")
     if(user_wrong[id] >= MAX_LOGIN_ATTEMPTS)
     {
      format(message,127,"^x04[hk-fun.com提醒你] ^x01由於 ^x03%s^x01 輸入了 %d 次錯誤的密碼, 所以已被封禁 %d 分鐘.",name,MAX_LOGIN_ATTEMPTS,BAN_TIME)
      client_color(0,id,message)
      server_cmd("banid ^"%d^" ^"#%i^"",BAN_TIME,get_user_userid(id))
      server_cmd("kick #%i ^"由於你輸入了 %d 次錯誤的密碼, 所以已被封禁 %d 分鐘!^"",get_user_userid(id),MAX_LOGIN_ATTEMPTS,BAN_TIME);
     }
    }
    else
    {
     if(user_activity[id] == 3)
     {
      format(message,127,"^x04[hk-fun.com提醒你] ^x01已認證身份, 請輸入新密碼.")
      client_color(id,id,message)
      user_activity[id] = 4
      client_cmd(id,"messagemode")
     }
     else
     {
      format(message,127,"^x04[hk-fun.com提醒你] ^x01你已成功登入.")
      client_color(id,id,message)
      user_status[id] = 3
      user_activity[id] = 0
      set_task(2.5,"Reset_Screen",id)
      set_task(3.0,"chooseteam",id)
      set_task(1.1,"hud_finish",id)
      access_user(id)
     }
    }
   }
   SQL_NextRow(hQuery)
  }
 } 
}
public user_login(id)
{
 if(user_status[id] == 3)
 {
  new menu = menu_create("\y歡迎使用登記系統, 你現已登入:", "login_menu_handler")
  menu_additem(menu, "\d註冊", "1", 0)
  menu_additem(menu, "\d登錄", "2", 0)
  menu_additem(menu, "\w更改密碼", "3", 0)
  //menu_additem(menu, "\d設定(暫未開放)", "4", 0)
  menu_setprop(menu, MPROP_EXIT, MEXIT_ALL)
  menu_display(id, menu, 0)
  return PLUGIN_HANDLED
 }
 if(user_len[id] >= PASSWORD_MIN_LEN)
 {
  new menu = menu_create("\y歡迎使用登記系統, 請完成登入程序:", "login_menu_handler")
  menu_additem(menu, "\d註冊", "1", 0)
  menu_additem(menu, "\w登錄", "2", 0)
  menu_additem(menu, "\d更改密碼", "3", 0)
  menu_setprop(menu, MPROP_EXIT, MEXIT_ALL)
  menu_display(id, menu, 0)
  return PLUGIN_HANDLED
 }
 else
 {
  new menu = menu_create("\y歡迎使用登記系統, 請完成註冊程序:", "login_menu_handler")
  menu_additem(menu, "\w註冊", "1", 0)
  menu_additem(menu, "\d登錄", "2", 0)
  menu_additem(menu, "\d更改密碼", "3", 0)
  menu_setprop(menu, MPROP_EXIT, MEXIT_ALL)
  menu_display(id, menu, 0)
  return PLUGIN_HANDLED
 }
 return PLUGIN_HANDLED
}
public login_menu_handler(id, menu, item)
{
 if( item == MENU_EXIT )
 {
  menu_destroy(menu)
  return PLUGIN_HANDLED
 }
 new data[6], iName[64]
 new access, callback
 
 menu_item_getinfo(menu, item, access, data,5, iName, 63, callback)
 new key = str_to_num(data)
 switch(key)
 {
  case 1:
  {
   if(user_status[id] != 3 && user_len[id] < PASSWORD_MIN_LEN)
   {
    user_activity[id] = 1
    if(is_user_alive(id))
    {
     user_kill(id)
     cs_set_user_deaths(id, cs_get_user_deaths(id) - 1)
     set_user_frags(id, get_user_frags(id) + 1 )
    }
    cs_set_user_team(id,CS_TEAM_SPECTATOR)
    Fade_To_Black(id)
    client_cmd(id,"messagemode")
    hud(id)
   }
  }
  case 2:
  {
   if(user_status[id] != 3 && user_len[id] >= PASSWORD_MIN_LEN)
   {
    user_activity[id] = 2
    if(is_user_alive(id))
    {
     user_kill(id)
     cs_set_user_deaths(id, cs_get_user_deaths(id) - 1)
     set_user_frags(id, get_user_frags(id) + 1 )
    }
    cs_set_user_team(id,CS_TEAM_SPECTATOR)
    Fade_To_Black(id)
    client_cmd(id,"messagemode")
    hud(id)
   }
  }
  case 3:
  {
   if(user_status[id] == 3)
   {
    user_activity[id] = 3
    if(is_user_alive(id))
    {
     user_kill(id)
     cs_set_user_deaths(id, cs_get_user_deaths(id) - 1)
     set_user_frags(id, get_user_frags(id) + 1 )
    }
    cs_set_user_team(id,CS_TEAM_SPECTATOR)
    Fade_To_Black(id)
    client_cmd(id,"messagemode")
    hud(id)
   }
  }
  case 4:
  {
   //setting_menu(id)
  }
 }
 menu_destroy(menu)
 return PLUGIN_HANDLED
}
public setting_menu(id)
{
 new menu = menu_create("\y系統設定:", "setting_menu_handler")
 menu_additem(menu, "\w返回主目錄", "2", 0)
 menu_setprop(menu, MPROP_EXIT, MEXIT_NEVER)
 menu_display(id, menu, 0)
}
public setting_menu_handler(id, menu, item)
{
 if( item == MENU_EXIT )
 {
  menu_destroy(menu)
  return PLUGIN_HANDLED
 }
 new data[6], iName[64]
 new access, callback
 
 menu_item_getinfo(menu, item, access, data,5, iName, 63, callback)
 new key = str_to_num(data)
 switch(key)
 {
  case 2:
  {
   user_login(id)
  }
 }
 menu_destroy(menu)
 return PLUGIN_HANDLED
}
public hud(id)
{
 switch(user_activity[id])
 {
  case 1:
  {
   set_hudmessage(0, 0, 0, -1.0, -1.0, 2, 1.0, 1.0, 0.0, 0.0, -1)
   show_hudmessage(id, "你只要輸入密碼, 再按Enter, 即完成整個註冊過程!^n注意事項:^n1.密碼長度不得短於 %d 位^n2.密碼長度不得長於 20 位",PASSWORD_MIN_LEN)
   set_task(1.0,"hud",id)
  }
  case 2:
  {
   set_hudmessage(0, 0, 0, -1.0, -1.0, 2, 1.0, 1.0, 0.0, 0.0, -1)
   show_hudmessage(id, "你只要輸入密碼, 再按Enter, 即完成整個登入過程!^n注意事項:^n你只有 %d 次錯誤輸入密碼的機會,^n機會用盡後, 你將會被封禁 %d 分鐘!",MAX_LOGIN_ATTEMPTS,BAN_TIME)
   set_task(1.0,"hud",id)
  }
  case 3:
  {
   set_hudmessage(0, 0, 0, -1.0, -1.0, 2, 1.0, 1.0, 0.0, 0.0, -1)
   show_hudmessage(id, "請你輸入舊密碼以確認身份!")
   set_task(1.0,"hud",id)
  }
  case 4:
  {
   set_hudmessage(0, 0, 0, -1.0, -1.0, 2, 1.0, 1.0, 0.0, 0.0, -1)
   show_hudmessage(id, "你只要新輸入密碼, 再按Enter, 即完成整個密碼更換過程!^n注意事項:^n1.新密碼長度不得短於 %d 位^n2.新密碼長度不得長於 20 位",PASSWORD_MIN_LEN)
   set_task(1.0,"hud",id)
  }
 }
}
public Event_ScreenFade(id)
{
 if(user_activity[id] > 0)
 {
  Fade_To_Black(id)
 }
}
public Fade_To_Black(id)
{
 message_begin ( MSG_ONE_UNRELIABLE , gmsgScreenFade , _ , id ) ;
 write_short ( ( 1<<3 ) | ( 1<<8 ) | ( 1<<10 ) ) ;
 write_short ( ( 1<<3 ) | ( 1<<8 ) | ( 1<<10 ) ) ;
 write_short ( ( 1<<0 ) | ( 1<<2 ) ) ;
 write_byte ( 0 ) ;
 write_byte ( 0 ) ;
 write_byte ( 0 ) ;
 write_byte ( 255 ) ;
 message_end ( ) ;
}
public Reset_Screen(id)
{
 message_begin ( MSG_ONE_UNRELIABLE , gmsgScreenFade , _ , id ) ;
 write_short ( 1<<2 ) ;
 write_short ( 0 ) ;
 write_short ( 0 ) ;
 write_byte ( 0 ) ;
 write_byte ( 0 ) ;
 write_byte ( 0 ) ;
 write_byte ( 0 ) ;
 message_end ( ) ;
}
public MySQLx_Init()
{
 new szHost[64], szUser[32], szPass[32], szDB[128];
 get_pcvar_string( mysqlx_host, szHost, charsmax( szHost ) );
 get_pcvar_string( mysqlx_user, szUser, charsmax( szUser ) );
 get_pcvar_string( mysqlx_pass, szPass, charsmax( szPass ) );
 get_pcvar_string( mysqlx_db, szDB, charsmax( szDB ) );
 g_hTuple = SQL_MakeDbTuple( szHost, szUser, szPass, szDB );
 for ( new i = 0; i < sizeof szTables; i++ )
 {
  SQL_ThreadQuery( g_hTuple, "QueryCreateTable", szTables[i])
 }
}
public QueryCreateTable( iFailState, Handle:hQuery, szError[ ], iError, iData[ ], iDataSize, Float:fQueueTime ) 
{ 
 if( iFailState == TQUERY_CONNECT_FAILED 
 || iFailState == TQUERY_QUERY_FAILED ) 
 { 
  log_amx( "%s", szError ); 
  
  return;
 } 
}
public LoadData(id)
{
 new name[32]
 get_user_name(id,name,31)
 static szQuery[ 128 ], iData[ 1 ]; 
 formatex( szQuery, 127, "SELECT `user_password` FROM `register_system` WHERE ( `user_id` = '%s' );",name); 
 iData[ 0 ] = id;
 SQL_ThreadQuery( g_hTuple, "QuerySelectData", szQuery, iData, 1 );
}
public QuerySetData( iFailState, Handle:hQuery, szError[ ], iError, iData[ ], iDataSize, Float:fQueueTime ) 
{ 
 if( iFailState == TQUERY_CONNECT_FAILED 
 || iFailState == TQUERY_QUERY_FAILED ) 
 { 
  log_amx( "%s", szError ); 
  
  return;
 } 
}
public plugin_natives()
{
 register_native("get_user_status", "native_get_user_status", 1)
 register_native("get_user_pwlen", "native_get_user_pwlen", 1)
}
public hud_finish(id)
{
 set_hudmessage(0, 0, 0, -1.0, -1.0, 0, 0.0, 2.0, 0.0, 0.0, -1)
 show_hudmessage(id, "你已完成登入/註冊/更換密碼過程!")
}
public client_connect(id)
{
 user_activity[id] = 0
 user_wrong[id] = 0
 user_status[id] = 0
 user_len[id] = 0
 user_connect[id] = true
 remove_task(id)
 LoadData(id)
}
public client_putinserver(id)
{
 if( ( get_user_flags(id) & ADMIN_KICK ) && ( user_status[id] !=3 ) )
 {
  remove_user_flags(id)
 }
 set_task(1.0,"not_login",id)
}
public messengmode(id)
{
 client_cmd(id,"messagemode")
}
public client_disconnect(id)
{
 user_activity[id] = 0
 user_wrong[id] = 0
 user_status[id] = 0
 user_len[id] = 0
 remove_task(id)
 user_connect[id] = false
}
public Fwd_ClientInfoChanged(id, buffer)
{
 if (!is_user_connected(id))
  return FMRES_IGNORED;
 
 static name[32], val[32];
 get_user_name(id, name, sizeof name - 1)
 
 engfunc(EngFunc_InfoKeyValue, buffer, "name", val, sizeof val - 1);
 
 if(equal(val, name))
  return FMRES_IGNORED;
 
 engfunc(EngFunc_SetClientKeyValue, id, buffer, "name", name);
 
 client_cmd(id, "name ^"%s^"; setinfo name ^"%s^"", name, name);
 
 client_print(id, print_console, "遊戲中不允許更換名字.");
 
 return FMRES_SUPERCEDE;
}
public native_get_user_status(id)
{
 return user_status[id]
}
public native_get_user_pwlen(id)
{
 return user_len[id]
}
public chooseteam(id)
{
 client_cmd(id,"chooseteam")
}
public client_color(playerid, colorid, msg[]){
message_begin(playerid?MSG_ONE:MSG_ALL,get_user_msgid("SayText"),{0,0,0},playerid) 
write_byte(colorid)
write_string(msg)
message_end()
}
public not_login(id)
{
 if(user_status[id] != 3)
 {
  set_hudmessage(255, 0, 0, -1.0, 0.7, 0, 0.0, 0.1, 0.0, 0.0)
  show_hudmessage(id,"請說/login註冊/登錄, 否則你將受以下限制^n失去管理員權力")
  set_task(0.1,"not_login",id)
 }
}
public force_login(id)
{
       if(user_status[id] != 3)
       {
    user_rest[id] -= 1
    set_hudmessage(255, 0, 0, -1.0, -1.0, 0, 0.0, 1.0, 0.0, 0.0)
    show_hudmessage(id,"你的暱稱已被使用,請登入或轉換另一個名字,否則你將會於 %i 秒後被踢除",user_rest[id]) //這行可以更改
    set_task(1.0,"force_login",id)
       }
}
    
public check_user(id)
{     if(user_status[id] != 3)
     {
  server_cmd("kick #%i ^"對被踢者的提示^"",get_user_userid(id)) // 這行也是可以更改
     }
}


獻花 x0
<< 1 2 >>
跳頁: (共 2 頁)