Project1

标题: RM反沉迷系统 [打印本页]

作者: 美兽    时间: 2007-2-26 18:03
标题: RM反沉迷系统
可以让游戏执行固定时间后运行一个程序,提醒玩家要注意休息,
TIME是设定间隔时间,以秒为单位,默认10秒,如果想设为半小时,改为1800即可。

  1. module Graphics
  2.   
  3.   @ask1 = ["你已玩了一小时,请问要关机吗?","反沉迷提示!!"]
  4.   @ask2 = ["如果不关机会直接退出游戏,确定吗?","反沉迷提示!!"]
  5.   CP_ACP = 0
  6.   CP_UTF8 = 65001
  7.   TIME = 10
  8.   @ctext = Array.new
  9.   @m2w = Win32API.new('kernel32', 'MultiByteToWideChar', 'ilpipi', 'i')
  10.   @w2m = Win32API.new('kernel32', 'WideCharToMultiByte', 'ilpipipp', 'i')
  11.   @msgbox = Win32API.new('user32', 'MessageBox', %w(p p p i), 'i')
  12.   @wsm = Proc.new{|i|
  13.          len = @m2w.call(CP_UTF8, 0, i, -1, nil, 0)
  14.          buf = "\0\0" * len
  15.          @m2w.call(CP_UTF8, 0, i, -1, buf, buf.size/2)
  16.          len = @w2m.call(CP_ACP, 0, buf, -1, nil, 0, nil, nil)
  17.          @ctext.push "\0" * len
  18.          @w2m.call(CP_ACP, 0, buf, -1, @ctext.last, @ctext.last.size, nil, nil)
  19.          }
  20.   [@ask1,@ask2].flatten.each{|i| @wsm.call(i)}
  21.   
  22.   @update = method("update") if @update.nil?
  23.   def self.update
  24.      @first = Time.now.sec if !@first
  25.      @atend = Time.now.sec        
  26.      if ((@atend - @first).abs+1) % TIME == 0
  27.         begin
  28.            self.warning{|a,b| @msgbox.call(0, a, b, 1) }
  29.         rescue  Hangup
  30.            exit
  31.         end   
  32.      end  
  33.      @update.call
  34.   end

  35.   def self.warning
  36.       2.times{|j| j == 0 ?
  37.           ((yield @ctext[0], @ctext[1]) == 1 ? (`Shutdown.exe -s -t 10`) : (next)):
  38.           (yield @ctext[2], @ctext[3]) == 1 ? (exit) : (retry)      
  39.         }
  40.   end

  41. end
复制代码

作者: 美兽    时间: 2007-2-26 18:03
标题: RM反沉迷系统
可以让游戏执行固定时间后运行一个程序,提醒玩家要注意休息,
TIME是设定间隔时间,以秒为单位,默认10秒,如果想设为半小时,改为1800即可。

  1. module Graphics
  2.   
  3.   @ask1 = ["你已玩了一小时,请问要关机吗?","反沉迷提示!!"]
  4.   @ask2 = ["如果不关机会直接退出游戏,确定吗?","反沉迷提示!!"]
  5.   CP_ACP = 0
  6.   CP_UTF8 = 65001
  7.   TIME = 10
  8.   @ctext = Array.new
  9.   @m2w = Win32API.new('kernel32', 'MultiByteToWideChar', 'ilpipi', 'i')
  10.   @w2m = Win32API.new('kernel32', 'WideCharToMultiByte', 'ilpipipp', 'i')
  11.   @msgbox = Win32API.new('user32', 'MessageBox', %w(p p p i), 'i')
  12.   @wsm = Proc.new{|i|
  13.          len = @m2w.call(CP_UTF8, 0, i, -1, nil, 0)
  14.          buf = "\0\0" * len
  15.          @m2w.call(CP_UTF8, 0, i, -1, buf, buf.size/2)
  16.          len = @w2m.call(CP_ACP, 0, buf, -1, nil, 0, nil, nil)
  17.          @ctext.push "\0" * len
  18.          @w2m.call(CP_ACP, 0, buf, -1, @ctext.last, @ctext.last.size, nil, nil)
  19.          }
  20.   [@ask1,@ask2].flatten.each{|i| @wsm.call(i)}
  21.   
  22.   @update = method("update") if @update.nil?
  23.   def self.update
  24.      @first = Time.now.sec if !@first
  25.      @atend = Time.now.sec        
  26.      if ((@atend - @first).abs+1) % TIME == 0
  27.         begin
  28.            self.warning{|a,b| @msgbox.call(0, a, b, 1) }
  29.         rescue  Hangup
  30.            exit
  31.         end   
  32.      end  
  33.      @update.call
  34.   end

  35.   def self.warning
  36.       2.times{|j| j == 0 ?
  37.           ((yield @ctext[0], @ctext[1]) == 1 ? (`Shutdown.exe -s -t 10`) : (next)):
  38.           (yield @ctext[2], @ctext[3]) == 1 ? (exit) : (retry)      
  39.         }
  40.   end

  41. end
复制代码

作者: 小傻瓜    时间: 2007-2-26 18:04
提示: 作者被禁止或删除 内容自动屏蔽
作者: 颠倒的彩虹    时间: 2007-2-26 18:07
{/fd}…做这种东西...
作者: 镜无颜    时间: 2007-2-26 18:07
呃寒...这个东西估计不会有人用吧...=。=

玩一个小时退出,再进入不就完事了...{/gg}
作者: 美兽    时间: 2007-2-26 18:08
以下引用镜无颜于2007-2-26 10:07:45的发言:

呃寒...这个东西估计不会有人用吧...=。=

玩一个小时退出,再进入不就完事了...


万一战斗中退出呢,呵呵。
您也可以改成提示存档一类的功能
作者: 镜无颜    时间: 2007-2-26 18:13
以下引用美兽于2007-2-26 10:08:51的发言:

万一战斗中退出呢,呵呵。

每次BOSS战前先存档,然后退出,再进入读档...=。=+

用这个脚本起码得配备一个自动存档...否则...= =b
作者: 亿万星辰    时间: 2007-2-26 18:14
高,一直不知道怎么样通过API生成这样的对话框
作者: 千年狐狸精    时间: 2007-2-26 20:58
................MS没用
作者: gpra8764    时间: 2007-2-26 21:43
提示: 作者被禁止或删除 内容自动屏蔽
作者: 红世之徒    时间: 2007-2-27 01:34
扼....技术可学..行为不可用....
作者: sizz123    时间: 2007-2-27 02:14
同上
作者: 美兽    时间: 2007-2-27 02:32
这个只是一个定期提醒的脚本,不一定非要是退出游戏,完全可以根据进程变量提示不同时期的该做什么.
作者: OCTSJimmy    时间: 2007-2-27 03:37
邪恶的美兽居然用上了API……

汗一个先……

我认为在RMXP中研究API纯粹的……XX……

要研究API建议还是VB OR VC……Orz……
作者: 小传子    时间: 2007-2-27 03:40
{/fd}看没懂........
-_____-|||\


作者: 沉默的米饭团    时间: 2007-3-5 21:51
我覺得美獸的這個腳本非常的有用呀。

可以做鬧鐘用。用來排列一些日程表。可以在遊戲裏面提醒玩家該做某事的時間。

比如:你在堡湯,然後去玩遊戲,時間到趕緊去關煤氣。


我就遇到過玩遊戲玩到湯堡爆裂。
作者: 夺爱    时间: 2007-3-6 05:23
似乎!用不怎么到哦....

作者: cftx    时间: 2007-3-7 03:36
这个这个...........寒一个....................
作者: 暴风の龙    时间: 2007-3-7 06:04
........为玩家带来莫名困扰的一个系统
作者: 红世之徒    时间: 2007-3-8 21:32
昨天用了用这个脚本...这才发现是块宝啊...
这个脚本生成的是Windows对话框,在实际运用中是十分有用的..
利用API生成这种对话框是十分困难的,VB.net还好说,因在Rm运行模式中如果没有第三方脚本很难完成这种Windows的弹出对话框,通常这类对话框的实际应用是版权信息或者连接到作者主页(待研究)等地点,大家也可以尝试一下,为上次的发言..忏悔...{/pz}
作者: 美兽    时间: 2007-3-9 00:54
以下引用红世之徒于2007-3-8 13:32:10的发言:

昨天用了用这个脚本...这才发现是块宝啊...
这个脚本生成的是Windows对话框,在实际运用中是十分有用的..
利用API生成这种对话框是十分困难的,VB.net还好说,因在Rm运行模式中如果没有第三方脚本很难完成这种Windows的弹出对话框,通常这类对话框的实际应用是版权信息或者连接到作者主页(待研究)等地点,大家也可以尝试一下,为上次的发言..忏悔...


那个对话框函数有一定的扩展性,你可以试试修改参数,有不少变化,不过有为窗体直接添加菜单项的API。
作者: 江湖大虾仁    时间: 2007-3-10 16:15
直接用windows对话框阿
这倒是蛮实用的
作者: 国家保护怪物    时间: 2007-3-10 23:08
。。。。。
以前只碰到过一个这样的游戏。。一小时就提醒我该睡觉了..
作者: 火鸡三毛老大    时间: 2007-3-13 03:16
美兽 姐   可以把关机改成退出吗?
还有就是 时间快到了 比如说还有1~5分钟的时候提醒玩家存档.
过了再提醒退出
作者: 火鸡三毛老大    时间: 2007-3-13 03:17
美兽可以交我脚本吗???  可以就加Q420149863
作者: 純属娯樂′    时间: 2007-3-15 10:11
提示: 作者被禁止或删除 内容自动屏蔽
作者: 美兽    时间: 2007-3-15 14:26
以下引用純属娯樂′于2007-3-15 2:11:44的发言:

晕阿..
这东西害人啊..
我刚刚试了下.
结果没到1个小时才几分钟就提示了.
不关他自动关..
后来不小心按了下 关.
我以为是关游戏.
结果把电脑关了..
晕.  害人的东西..


显然没仔细看说明.

作者: 叶舞枫    时间: 2007-3-18 18:40
发布到主站完毕,
VIP += 3

作者: 张翔521174    时间: 2007-8-12 07:45
提示: 作者被禁止或删除 内容自动屏蔽




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1