查看: 2963|回复: 6

[已经过期] 如何添加开关

[复制链接]
梦石
0
星屑
3850
在线时间
1899 小时
注册时间
2010-6-19
回帖
917
发表于 2014-7-12 11:49:54 | 显示全部楼层 |阅读模式

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

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

×
如何给下面的脚本添加个开关,当7号开关打开的时候,运行该脚本
  1. if $myfirst == nil

  2.   $myfirst = 'myGod'  
  3.   宽度=640+300
  4.   高度=480
  5.   游戏ini名=".\\Game.ini"
  6.   val = "\0"*256
  7.   gps = Win32API.new('kernel32', 'GetPrivateProfileString','pppplp', 'l')
  8.   gps.call("Game", "Title", "", val, 256, 游戏ini名)
  9.   val.delete!("\0")
  10.   title = val
  11.   fw = Win32API.new('user32', 'FindWindow', 'pp', 'i')
  12.   hWnd = fw.call("RGSS Player", title)
  13.   swp = Win32API.new('user32', 'SetWindowPos', 'lliiiii', 'i')

  14.   pointwds = [0,0,0,0].pack('llll')
  15.   pointcet = [0, 0].pack('ll')

  16.   wdsrect = Win32API.new('user32.dll', 'GetWindowRect', 'lp', 'l')
  17.   client_screen = Win32API.new("user32", "ClientToScreen", 'ip', 'i')

  18.   wdsrect.call(hWnd,pointwds)
  19.   client_screen.call(hWnd, pointcet)

  20.   wds = pointwds.unpack('llll')
  21.   cet = pointcet.unpack('ll')

  22.   addw =  wds[2] - wds[0] - 640
  23.   addh =  wds[3] - wds[1] - 480

  24.   x = wds[0] - (宽度 - 640) / 2
  25.   y = wds[1] - (高度 - 480) / 2

  26.   swp.call(hWnd, 0, x, y, 宽度 + addw, 高度 + addh, 0x20)
  27.   
  28. end
复制代码
梦石
0
星屑
2826
在线时间
2634 小时
注册时间
2013-1-16
回帖
5453

贵宾

发表于 2014-7-12 22:15:39 | 显示全部楼层
本帖最后由 myownroc 于 2014-7-13 10:14 编辑

在最前面加上if $game_switches[7] == true
在最后面相应的加上一个end
如下
[pre lang="ruby" line="1"]if $game_switches[7] == true
if $myfirst == nil


  $myfirst = 'myGod'  

  宽度=640+300

  高度=480

  游戏ini名=".\\Game.ini"

  val = "\0"*256

  gps = Win32API.new('kernel32', 'GetPrivateProfileString','pppplp', 'l')

  gps.call("Game", "Title", "", val, 256, 游戏ini名)

  val.delete!("\0")

  title = val

  fw = Win32API.new('user32', 'FindWindow', 'pp', 'i')

  hWnd = fw.call("RGSS Player", title)

  swp = Win32API.new('user32', 'SetWindowPos', 'lliiiii', 'i')


  pointwds = [0,0,0,0].pack('llll')

  pointcet = [0, 0].pack('ll')


  wdsrect = Win32API.new('user32.dll', 'GetWindowRect', 'lp', 'l')

  client_screen = Win32API.new("user32", "ClientToScreen", 'ip', 'i')


  wdsrect.call(hWnd,pointwds)

  client_screen.call(hWnd, pointcet)


  wds = pointwds.unpack('llll')

  cet = pointcet.unpack('ll')


  addw =  wds[2] - wds[0] - 640

  addh =  wds[3] - wds[1] - 480


  x = wds[0] - (宽度 - 640) / 2

  y = wds[1] - (高度 - 480) / 2


  swp.call(hWnd, 0, x, y, 宽度 + addw, 高度 + addh, 0x20)
  

end
end[/pre]


@RyanBern 能不能帮忙先看一下……正在改卷中……

点评

现在开关还不是数组诶,没有[]一说。。。  发表于 2014-7-14 09:20
(Created by @喵kano)


施工现场:hotege.github.io
回复

使用道具 举报

梦石
0
星屑
3850
在线时间
1899 小时
注册时间
2010-6-19
回帖
917
 楼主| 发表于 2014-7-13 08:24:40 | 显示全部楼层
myownroc 发表于 2014-7-12 22:15
在最前面加上if $game_switches[7] == true
在最后面相应的加上一个end
如下

貌似放游戏里还是不行

点评

最好上传你的工程,这样可以让回答者知道这段脚本起作用的位置,以便能更快解决问题。  发表于 2014-7-13 08:51
回复

使用道具 举报

梦石
0
星屑
3850
在线时间
1899 小时
注册时间
2010-6-19
回帖
917
 楼主| 发表于 2014-7-13 09:55:44 | 显示全部楼层
myownroc 发表于 2014-7-12 22:15
在最前面加上if $game_switches[7] == true
在最后面相应的加上一个end
如下

范例
Project1.rar (187.85 KB, 下载次数: 26)
回复

使用道具 举报

梦石
0
星屑
9557
在线时间
5074 小时
注册时间
2013-6-21
回帖
3459

开拓者贵宾剧作品鉴家

发表于 2014-7-13 10:22:26 | 显示全部楼层
黑米馒头 发表于 2014-7-13 09:55
范例

这个调节分辨率的脚本没有办法用开关控制的。因为这个是游戏一开始就要运行的脚本,那时候的开关$game_switches都不存在的。LZ要想实现什么效果?是用一个开关来切换两个分辨率么?
回复

使用道具 举报

梦石
0
星屑
3850
在线时间
1899 小时
注册时间
2010-6-19
回帖
917
 楼主| 发表于 2014-7-13 12:36:30 | 显示全部楼层
RyanBern 发表于 2014-7-13 10:22
这个调节分辨率的脚本没有办法用开关控制的。因为这个是游戏一开始就要运行的脚本,那时候的开关$game_sw ...

是的。。。。。

点评

知道了,我再想想效果  发表于 2014-7-13 14:43
回复

使用道具 举报

梦石
0
星屑
175
在线时间
332 小时
注册时间
2013-7-6
回帖
316
发表于 2014-7-14 09:18:46 | 显示全部楼层
经测试没办法变回原来的分辨率,对Win32API不太熟,看不太懂脚本,只能改变一次分辨率。二次改变没有效果。这是改完的脚本。。。游戏中调用alex = Fenbianlv.new(800,600)就能改变分辨率,不过只能改一次。
  1. class Fenbianlv
  2. def initialize(a,b)
  3.   
  4.   宽度=a
  5.   高度=b
  6.   
  7.   游戏ini名=".\\Game.ini"
  8.   
  9.   val = "\0"*256
  10.   gps = Win32API.new('kernel32', 'GetPrivateProfileString','pppplp', 'l')
  11.   gps.call("Game", "Title", "", val, 256, 游戏ini名)
  12.   val.delete!("\0")
  13.   title = val
  14.   fw = Win32API.new('user32', 'FindWindow', 'pp', 'i')
  15.   hWnd = fw.call("RGSS Player", title)
  16.   swp = Win32API.new('user32', 'SetWindowPos', 'lliiiii', 'i')

  17.   pointwds = [0,0,0,0].pack('llll')
  18.   pointcet = [0, 0].pack('ll')

  19.   wdsrect = Win32API.new('user32.dll', 'GetWindowRect', 'lp', 'l')
  20.   client_screen = Win32API.new("user32", "ClientToScreen", 'ip', 'i')

  21.   wdsrect.call(hWnd,pointwds)
  22.   client_screen.call(hWnd, pointcet)

  23.   wds = pointwds.unpack('llll')
  24.   cet = pointcet.unpack('ll')
  25. p wds
  26. p cet
  27.   addw =  wds[2] - wds[0] - 640
  28.   addh =  wds[3] - wds[1] - 480

  29.   x = wds[0] - (宽度 - 640) / 2
  30.   y = wds[1] - (高度 - 480) / 2

  31.   swp.call(hWnd, 0, x, y, 宽度 + addw, 高度 + addh, 0x20)
  32.   
  33. end
  34. end
复制代码
偶是熬夜学编程的傻子
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部