设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 8017|回复: 28
打印 上一主题 下一主题

RM反沉迷系统

 关闭 [复制链接]

Lv1.梦旅人

月下可怜人

梦石
0
星屑
50
在线时间
10 小时
注册时间
2005-11-23
帖子
4085

第1届短篇游戏比赛亚军

跳转到指定楼层
1
发表于 2007-2-26 18:03:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
可以让游戏执行固定时间后运行一个程序,提醒玩家要注意休息,
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
复制代码
纵然千里外,我等雁归来。

Lv1.梦旅人

月下可怜人

梦石
0
星屑
50
在线时间
10 小时
注册时间
2005-11-23
帖子
4085

第1届短篇游戏比赛亚军

2
 楼主| 发表于 2007-2-26 18:03:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
可以让游戏执行固定时间后运行一个程序,提醒玩家要注意休息,
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
复制代码
纵然千里外,我等雁归来。
头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
1 小时
注册时间
2006-7-21
帖子
714
3
发表于 2007-2-26 18:04:42 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

大火烧了毛毛虫

梦石
0
星屑
205
在线时间
288 小时
注册时间
2006-3-18
帖子
2335
4
发表于 2007-2-26 18:07:04 | 只看该作者
{/fd}…做这种东西...
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
12 小时
注册时间
2007-1-10
帖子
44
5
发表于 2007-2-26 18:07:45 | 只看该作者
呃寒...这个东西估计不会有人用吧...=。=

玩一个小时退出,再进入不就完事了...{/gg}
[line]3,#ffffff[/line]
回复 支持 反对

使用道具 举报

Lv1.梦旅人

月下可怜人

梦石
0
星屑
50
在线时间
10 小时
注册时间
2005-11-23
帖子
4085

第1届短篇游戏比赛亚军

6
 楼主| 发表于 2007-2-26 18:08:51 | 只看该作者
以下引用镜无颜于2007-2-26 10:07:45的发言:

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

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


万一战斗中退出呢,呵呵。
您也可以改成提示存档一类的功能
纵然千里外,我等雁归来。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
12 小时
注册时间
2007-1-10
帖子
44
7
发表于 2007-2-26 18:13:51 | 只看该作者
以下引用美兽于2007-2-26 10:08:51的发言:

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

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

用这个脚本起码得配备一个自动存档...否则...= =b
[line]3,#ffffff[/line]
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
275
在线时间
1373 小时
注册时间
2005-10-16
帖子
5113

贵宾

8
发表于 2007-2-26 18:14:30 | 只看该作者
高,一直不知道怎么样通过API生成这样的对话框
我只个搬答案的
叔叔我已经当爹了~
婚后闪人了……
回复 支持 反对

使用道具 举报

Lv1.梦旅人

太后老佛爷

梦石
0
星屑
90
在线时间
297 小时
注册时间
2007-1-13
帖子
1912
9
发表于 2007-2-26 20:58:25 | 只看该作者
................MS没用
[
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

苹果梨

梦石
0
星屑
43
在线时间
6 小时
注册时间
2007-2-14
帖子
720
10
发表于 2007-2-26 21:43:35 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-17 00:24

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表