0924006254 發表於 2018-4-11 11:16:15

關於會員系統自動計時問題



程式碼有點攏長,直接上傳檔案上來。

這是我爬文時找到的會員系統腳本,裡面功能很符合我的需求
唯獨增減會員部分,必須全手動新增跟移除

我想要能夠在新增時可以設定時間,時間到時系統會自動移除會員。
有參考了一些文章跟有設定計時的腳本,但是似乎那些語法都在開機端重啟後,就會重新計時,沒辦法維持原本的計時。

想請問各位大大,該如何去修改此腳本,達到我的需求。

z0202520 發表於 2018-4-11 11:34:07

本帖最後由 z0202520 於 2018-4-11 11:37 AM 編輯

有兩種方法
第一種使用資料庫將 member_list 表,增加時間欄位
在每次會員登入時啟用計時器綁定玩家,計時時間到就移除會員資格
記得登出事件也要寫,在登出時抓取當下時間去更新 member_list 的時間欄位

第二種使用遊戲內角色變數,跟上述做法差不多
只差在不用去動到表格的結構

計時器語法addtimer <ticks>,"NPC::OnLabel";對了,若你是由GM新增會員的話,要用上述計時器語法時
要先映射到該玩家才能使用,配合下列語法使用isloggedin(<account id>{,<char id>})attachrid(<account ID>)

0924006254 發表於 2018-4-11 11:36:57

z0202520 發表於 2018-4-11 11:34 AM static/image/common/back.gif
有兩種方法
第一種使用資料庫將 member_list 表,增加時間欄位
在每次會員登入時啟用計時器綁定玩家,計時 ...
感謝解答!

我比較傾向資料庫的做法,這樣日後也方便統計會員數量。

增加欄位以後如何去跟NPC做連結,煩請大神指點

z0202520 發表於 2018-4-11 11:43:58

本帖最後由 z0202520 於 2018-4-11 11:45 AM 編輯

0924006254 發表於 2018-4-11 11:36 AM static/image/common/back.gif
感謝解答!

我比較傾向資料庫的做法,這樣日後也方便統計會員數量。

在資料表增加 expiration_time 然後用這語法撈就可以了
query_sql("SELECT `expiration_time` FROM `member_list` WHERE `account_id`= "+getcharid(3),.@expiration_time);

重點要看你要怎麼設計,時間要用純日期格式存?還是Unix Time?

0924006254 發表於 2018-4-11 11:58:28

本帖最後由 0924006254 於 2018-4-11 12:12 PM 編輯

z0202520 發表於 2018-4-11 11:43 AM static/image/common/back.gif
在資料表增加 expiration_time 然後用這語法撈就可以了
query_sql("SELECT `expiration_time` FROM `mem ...
我想要修改的

新增會員功能

目前是
選擇 帳號
或AID
       新增


想改成

   選擇帳號
   或   AID
next
設定   時間YYYY/MM/DD
   或   多少天

查詢會員名單

目前
顯示AID帳號

想改成
顯示AID帳號到期日YYYY/MM/DD 剩餘 ?? 日

以上是GM設置時想要修改的


------------------------------------------------------------------------------------------


以下是玩家部分

點選NPC時顯示會員到期日YYYY/MM/DD    剩餘 ?? 日



-------------------------------------------------------------------------------------------

在資料表增加 expiration_time 然後用這語法撈就可以了
query_sql("SELECT `expiration_time` FROM `member_list` WHERE `account_id`= "+getcharid(3),.@expiration_time);

這段語法是讓NPC抓取SQL的時間嗎?那後面運用上是直接讓NPC判斷 @expiration_time這個就可以嗎?


純日期格式存,Unix Time 差別在哪裡?

抱歉~ 新手上路,很多不懂的,煩請大神多多包涵,正在努力學習中!!

z0202520 發表於 2018-4-11 12:48:37

本帖最後由 z0202520 於 2018-4-11 04:51 PM 編輯

0924006254 發表於 2018-4-11 11:58 AM static/image/common/back.gif
我想要修改的

新增會員功能

建議先去搞懂SQL語法的使用吧,沒有很難的說。
另外因為你沒有給我資料表格的結構
所以我從腳本裡面推測,你最後一個欄位應該是 state
若不是的話再自己改一下 AFTER 後的資料欄位名稱

如果你資料庫名稱是用 ragnarok 的話,執行下面SQL語法可以新增欄位ALTER TABLE `ragnarok`.`member_list`
ADD COLUMN `expiration_time` TIMESTAMP NOT NULL AFTER `state`;然後在你輸入完玩家的時間設定後,這邊預設是分鐘為單位,存入的變數是 .@minutequery_sql "INSERT INTO `member_list` VALUES ("+getcharid(3)+", 1, 0, NOW() + INTERVAL "+.@mintue+" MINUTE)";顯示的時候就可以用下列方式撈資料query_sql("SELECT `expiration_time` FROM `member_list` WHERE `account_id`= "+getcharid(3),.@expiration_time);然後再將秒數換算成天數/小時/分鐘來做顯示

另外你剛剛說的是存入 @expiration_time 就可以嗎?
請注意好變數的型態 .@ 跟 @ 又不太一樣了
這個型態不搞清楚的話會有很多問題的

0924006254 發表於 2018-4-11 14:04:53

z0202520 發表於 2018-4-11 12:48 PM static/image/common/back.gif
建議先去搞懂SQL語法的使用吧,沒有很難的說。
另外因為你沒有給我資料表格的結構
所以我從腳本裡面推測 ...

好的!!!非常感謝大神指導,有什麼問題我再問你~~我先來去試試看

z0202520 發表於 2018-4-11 16:54:00

0924006254 發表於 2018-4-11 02:04 PM static/image/common/back.gif
好的!!!非常感謝大神指導,有什麼問題我再問你~~我先來去試試看
對了,使用 TIMESTAMP 的話,它是以現在的時間換算成秒數
所以你會有一個很大的數字,那是代表從 1970 年到現在為止的秒數
可以配合 gettimetick(2) 來取得目前遊戲伺服器的 unix time 然後相減給 addtimer 語法用
頁: [1]
查看完整版本: 關於會員系統自動計時問題