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

Project1

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

[转载发布] 发个战斗前截取当前地图当背景的脚本

[复制链接]

Lv2.观梦者

梦石
0
星屑
910
在线时间
94 小时
注册时间
2005-10-22
帖子
397
跳转到指定楼层
1
发表于 2013-12-13 10:25:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 ikki 于 2013-12-13 10:32 编辑

随便发着玩。。。不需要神马精华啥的了,毕竟都是古董了。。。国外的东东。。。附件内是调用的dll
RUBY 代码复制
  1. #===============================================================================
  2. #
  3. # Screenshot V2
  4. #
  5. # Screenshot Script v1 & screenshot.dll v1            created by: Andreas21
  6. # Screenshot Script v2                                created/edit by: cybersam
  7. # the autor is found on a german board...
  8. # the comments are added by me...
  9. # since the autor didnt want to add any comment...
  10. # so thats it from here...
  11. # have fund with it... ^-^
  12. #
  13. # oh yea.. the needed command line is found in "Scene_Map" in "def update"
  14. #
  15. #===============================================================================
  16. module Screen  
  17.   @screen = Win32API.new 'screenshot', 'Screenshot', %w(l l l l p l l), ''
  18.   @readini = Win32API.new 'kernel32', 'GetPrivateProfileStringA', %w(p p p p l p), 'l'
  19.   @findwindow = Win32API.new 'user32', 'FindWindowA', %w(p p), 'l'
  20.   module_function
  21.   #-----------------------------------------------------------------------------
  22.   # here comes the stuff...
  23.   # i add here the stuff for automatic change of the number for the screenshot
  24.   # so it wont overrite the old one...
  25.   # if you want to change so stuff change them in this line below
  26.   # or you can change them in your command line... like
  27.   # Screen::shot("screenshot", 2)
  28.   # this change the name and the type of the screenshot
  29.   # (0 = bmp, 1 = jpg and 2 = png)
  30.   # ----------------------------------------------------------------------------
  31.   def shot(file = "screenshot", typ = 1)
  32.     # to add the right extension...
  33.     if typ == 0
  34.       typname = ".bmp"
  35.     elsif typ == 1
  36.       typname = ".jpg"
  37.     elsif typ == 2
  38.       typname = ".png"
  39.     end   
  40.     file_index = 0   
  41.     dir = "Graphics/Battlebacks/"   
  42.     # make the filename....
  43.     file_name = dir + file.to_s + typname.to_s   
  44.     # make the screenshot.... Attention dont change anything from here on....
  45.     @screen.call(0,0,640,480,file_name,handel,typ)
  46.   end
  47.   # find the game window...
  48.   def handel
  49.     game_name = "\0" * 256
  50.     @readini.call('Game','Title','',game_name,255,".\\Game.ini")
  51.     game_name.delete!("\0")
  52.     return @findwindow.call('RGSS Player',game_name)
  53.   end
  54. end

screenshot.7z (44.06 KB, 下载次数: 80)
做脚本先从修改脚本做起,我只修改自己觉得能用到的东西。
以后的任何作品都将不会进行分享。
Bilibili:https://space.bilibili.com/288814521

Lv1.梦旅人

梦石
0
星屑
76
在线时间
1379 小时
注册时间
2012-7-5
帖子
1698

开拓者

2
发表于 2013-12-13 12:55:10 | 只看该作者
本帖最后由 kuerlulu 于 2013-12-13 12:56 编辑

截图脚本我以前玩过【雾。。
夏娜大大加了个防止多个RM一起运行导致获取窗口句柄出错的方法。【这句和上面一句没有必然联系
  1. #==============================================================================
  2. # ■ Kernel
  3. #------------------------------------------------------------------------------
  4. #  该模块中定义了可供所有类使用的方法。Object 类中包含了该模块。
  5. #==============================================================================
  6. module Kernel
  7.   #--------------------------------------------------------------------------
  8.   # ● 需要的 Windows API 函数
  9.   #--------------------------------------------------------------------------
  10.   GetWindowThreadProcessId = Win32API.new("user32", "GetWindowThreadProcessId", "LP", "L")
  11.   GetWindow = Win32API.new("user32", "GetWindow", "LL", "L")
  12.   GetClassName = Win32API.new("user32", "GetClassName", "LPL", "L")
  13.   GetCurrentThreadId = Win32API.new("kernel32", "GetCurrentThreadId", "V", "L")
  14.   GetForegroundWindow = Win32API.new("user32", "GetForegroundWindow", "V", "L")
  15.   #--------------------------------------------------------------------------
  16.   # ● 获取窗口句柄
  17.   #--------------------------------------------------------------------------
  18.   def get_hWnd
  19.     # 获取调用线程(RM 的主线程)的进程标识
  20.     threadID = GetCurrentThreadId.call
  21.     # 获取 Z 次序中最靠前的窗口
  22.     hWnd = GetWindow.call(GetForegroundWindow.call, 0)
  23.     # 枚举所有窗口
  24.     while hWnd != 0
  25.       # 如果创建该窗口的线程标识匹配本线程标识
  26.       if threadID == GetWindowThreadProcessId.call(hWnd, 0)
  27.         # 分配一个 11 个字节的缓冲区
  28.         className = " " * 11
  29.         # 获取该窗口的类名
  30.         GetClassName.call(hWnd, className, 12)
  31.         # 如果匹配 RGSS Player 则跳出循环
  32.         break if className == "RGSS Player"
  33.       end
  34.       # 获取下一个窗口
  35.       hWnd = GetWindow.call(hWnd, 2)
  36.     end
  37.     return hWnd
  38.   end
  39. end
  40. #===============================================================================
  41. #===============================================================================
  42. # ■设置存放截图文件夹
  43. DIR = "Screenshot"
  44. Dir.mkdir("./#{DIR}") unless FileTest.exist?(DIR + "/")
  45.   # 主模块 Screen API ★方法:Screen::shot★
  46. module Screen
  47.   @i = 1 # 又要玩迭代了
  48.   @screen = Win32API.new 'screenshot', 'Screenshot', %w(l l l l p l l), ''
  49.   @readini = Win32API.new 'kernel32', 'GetPrivateProfileStringA', %w(p p p p l p), 'l'
  50.   @findwindow = Win32API.new 'user32', 'FindWindowA', %w(p p), 'l'
  51.   module_function
  52.   def shot(file = "shot", typ = 1) # Screen::shot("save", 1)
  53.     if typ == 0
  54.       typname = ".bmp"
  55.     elsif typ == 1
  56.       typname = ".jpg"
  57.     elsif typ == 2
  58.       typname = ".png"
  59.     end
  60.     dir = DIR + "/"
  61.     @i += 1 while FileTest.exist?(dir + file.to_s  + @i.to_s + typname.to_s)
  62.     file_name = dir + file.to_s  + @i.to_s + typname.to_s # 生成带路径的文件名
  63.     @screen.call(0,0,640,480, file_name, get_hWnd, typ) # call出截图
  64.   end
  65. #  def handel
  66. #    game_name = "\0" * 256
  67. #    @readini.call('Game','Title','',game_name,255,".\\Game.ini")
  68. #    game_name.delete!("\0")
  69. #    return @findwindow.call('RGSS Player',game_name)
  70. #  end
  71. end
复制代码

  -fk: -azogi:
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
910
在线时间
94 小时
注册时间
2005-10-22
帖子
397
3
 楼主| 发表于 2013-12-13 14:06:32 | 只看该作者
kuerlulu 发表于 2013-12-13 12:55
截图脚本我以前玩过【雾。。
夏娜大大加了个防止多个RM一起运行导致获取窗口句柄出错的方法。【这句和上面 ...

{:2_265:}我发的只是初版。。。话说。。。其实我可以不截图直接用地图的。。。
做脚本先从修改脚本做起,我只修改自己觉得能用到的东西。
以后的任何作品都将不会进行分享。
Bilibili:https://space.bilibili.com/288814521
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
910
在线时间
94 小时
注册时间
2005-10-22
帖子
397
4
 楼主| 发表于 2013-12-13 14:50:57 | 只看该作者
这个脚本是很强大的,也带作者的哦,主要现在我都找不到这些发在主页的哪里了。。。
RUBY 代码复制
  1. #===============================================================
  2. # 本脚本来自[url]www.66rpg.com[/url]
  3. # 功能:对于没有设置战斗背景的地图,直接用地图做战斗背景
  4. #===============================================================
  5. class Spriteset_Map
  6. #--------------------------------------------------------------------------
  7. # ● 初始化对像
  8. #--------------------------------------------------------------------------
  9. def initialize(flag = false)
  10.    # 生成显示端口
  11.    @viewport1 = Viewport.new(0, 0, 640, 480)
  12.    @viewport2 = Viewport.new(0, 0, 640, 480)
  13.    @viewport3 = Viewport.new(0, 0, 640, 480)
  14.    @viewport2.z = 200
  15.    @viewport3.z = 5000
  16.    # 生成元件地图
  17.    @tilemap = Tilemap.new(@viewport1)
  18.    @tilemap.tileset = RPG::Cache.tileset($game_map.tileset_name)
  19.    for i in 0..6
  20.      autotile_name = $game_map.autotile_names[i]
  21.      @tilemap.autotiles[i] = RPG::Cache.autotile(autotile_name)
  22.    end
  23.    @tilemap.map_data = $game_map.data
  24.    @tilemap.priorities = $game_map.priorities
  25.    # 生成远景平面
  26.    @panorama = Plane.new(@viewport1)
  27.    @panorama.z = -1000
  28.    # 生成雾平面
  29.    [url=home.php?mod=space&uid=14217]@fog[/url] = Plane.new(@viewport1)
  30.    @fog.z = 3000
  31.    unless flag
  32.      # 生成角色活动块
  33.      @character_sprites = []
  34.      for i in $game_map.events.keys.sort
  35.        sprite = Sprite_Character.new(@viewport1, $game_map.events[i])
  36.        @character_sprites.push(sprite)
  37.      end
  38.      @character_sprites.push(Sprite_Character.new(@viewport1, $game_player))
  39.    end
  40.    # 生成天气
  41.    @weather = RPG::Weather.new(@viewport1)
  42.    # 生成图片
  43.    @picture_sprites = []
  44.    for i in 1..50
  45.      @picture_sprites.push(Sprite_Picture.new(@viewport2,
  46.        $game_screen.pictures[i]))
  47.      @viewport2.z = 9999
  48.    end
  49.    # 生成计时器块
  50.    @timer_sprite = Sprite_Timer.new
  51.    # 刷新画面
  52.    update# unless flag
  53. end
  54. #--------------------------------------------------------------------------
  55. # ● 释放
  56. #--------------------------------------------------------------------------
  57. def dispose(flag = false)
  58.    # 释放元件地图
  59.    @tilemap.tileset.dispose
  60.    for i in 0..6
  61.      @tilemap.autotiles[i].dispose
  62.    end
  63.    @tilemap.dispose
  64.    # 释放远景平面
  65.    @panorama.dispose
  66.    # 释放雾平面
  67.    @fog.dispose
  68.    unless flag
  69.      # 释放角色活动块
  70.      for sprite in @character_sprites
  71.        sprite.dispose
  72.      end
  73.    end
  74.    # 释放天候
  75.    @weather.dispose
  76.    # 释放图片
  77.    for sprite in @picture_sprites
  78.      sprite.dispose
  79.    end
  80.    # 释放计时器块
  81.    @timer_sprite.dispose
  82.    # 释放显示端口
  83.    @viewport1.dispose
  84.    @viewport2.dispose
  85.    @viewport3.dispose
  86. end
  87. end
  88.  
  89. class Scene_Battle
  90. alias battleback_map_main main
  91. def main
  92.   @battleback_sprite = Spriteset_Map.new(true)
  93.   battleback_map_main
  94.   @battleback_sprite.dispose(true)
  95. end
  96. end
  97. #===============================================================
  98. # 申请者:张永;脚本作者:bluefool 改善人:亿万星辰
  99. #===============================================================
做脚本先从修改脚本做起,我只修改自己觉得能用到的东西。
以后的任何作品都将不会进行分享。
Bilibili:https://space.bilibili.com/288814521
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-4-23 20:19

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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