關於會員系統自動計時問題
程式碼有點攏長,直接上傳檔案上來。
這是我爬文時找到的會員系統腳本,裡面功能很符合我的需求
唯獨增減會員部分,必須全手動新增跟移除
我想要能夠在新增時可以設定時間,時間到時系統會自動移除會員。
有參考了一些文章跟有設定計時的腳本,但是似乎那些語法都在開機端重啟後,就會重新計時,沒辦法維持原本的計時。
想請問各位大大,該如何去修改此腳本,達到我的需求。
本帖最後由 z0202520 於 2018-4-11 11:37 AM 編輯
有兩種方法
第一種使用資料庫將 member_list 表,增加時間欄位
在每次會員登入時啟用計時器綁定玩家,計時時間到就移除會員資格
記得登出事件也要寫,在登出時抓取當下時間去更新 member_list 的時間欄位
第二種使用遊戲內角色變數,跟上述做法差不多
只差在不用去動到表格的結構
計時器語法addtimer <ticks>,"NPC::OnLabel";對了,若你是由GM新增會員的話,要用上述計時器語法時
要先映射到該玩家才能使用,配合下列語法使用isloggedin(<account id>{,<char id>})attachrid(<account ID>) z0202520 發表於 2018-4-11 11:34 AM static/image/common/back.gif
有兩種方法
第一種使用資料庫將 member_list 表,增加時間欄位
在每次會員登入時啟用計時器綁定玩家,計時 ...
感謝解答!
我比較傾向資料庫的做法,這樣日後也方便統計會員數量。
增加欄位以後如何去跟NPC做連結,煩請大神指點
本帖最後由 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 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 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 就可以嗎?
請注意好變數的型態 .@ 跟 @ 又不太一樣了
這個型態不搞清楚的話會有很多問題的
z0202520 發表於 2018-4-11 12:48 PM static/image/common/back.gif
建議先去搞懂SQL語法的使用吧,沒有很難的說。
另外因為你沒有給我資料表格的結構
所以我從腳本裡面推測 ...
好的!!!非常感謝大神指導,有什麼問題我再問你~~我先來去試試看
0924006254 發表於 2018-4-11 02:04 PM static/image/common/back.gif
好的!!!非常感謝大神指導,有什麼問題我再問你~~我先來去試試看
對了,使用 TIMESTAMP 的話,它是以現在的時間換算成秒數
所以你會有一個很大的數字,那是代表從 1970 年到現在為止的秒數
可以配合 gettimetick(2) 來取得目前遊戲伺服器的 unix time 然後相減給 addtimer 語法用
頁:
[1]