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

Project1

 找回密码
 注册会员
搜索
12
返回列表 发新帖
楼主: adswyc
打印 上一主题 下一主题

求人写一下脚本vx的仿网游即时消息……

 关闭 [复制链接]

Lv2.观梦者

傻♂逼

梦石
0
星屑
374
在线时间
1606 小时
注册时间
2007-3-13
帖子
6562

烫烫烫开拓者

11
发表于 2008-6-9 17:56:52 | 只看该作者
以下引用Beside于2008-6-9 9:47:16的发言:

完成了……

脚本如下 直接覆盖掉原来输入法那个
锻炼脚本能力……算法不当请指出

被抢先了。T_T


[本贴由作者于 2008-6-9 9:48:50 最后编辑]

瞄~~
我们的效果差不多地说


你居然..
我直接绑定输入法T_T

显示提示信息直接$message.push([$n+$time,get_text])



  1. def mk_message
  2.   $time = 200
  3.   $message = [] #生成消息队列
  4. #  $old = []
  5.   $mewin = Sprite.new #消息视口
  6.   $mewin.bitmap = Bitmap.new(6*32,220)
  7.   $mewin.y = 387-(6*32)
  8.   $mewin.x = 30
  9.   #$mewin.bitmap.fill_rect(0, 0, 4*32, 4*32, Color.new(255,0,0))
  10.   $n = 0
  11. end
  12. def message_update
  13.   $n +=1
  14.   #if $message != $old
  15.     for i in 0...$message.size
  16.       if $message[i] != nil
  17.         if $message[i][0] <= $n
  18.           $message[i] = nil
  19.       #    p "A"
  20.         end
  21.       end
  22.     end
  23.     $mewin.bitmap.clear
  24.     n = 0
  25.     for i in 0...$message.size
  26.       if ($message[i] != nil) and (n < 5)
  27.        # p "a"
  28.       n += 1
  29.         w = $mewin.bitmap.text_size($message[i][1])
  30.         $mewin.bitmap.draw_text(16, n*32, w.width, 32, $message[i][1])
  31.       end
  32.     end
  33.     $old = $message
  34.   #end
  35. end
  36. #def message_push(message)
  37.   
  38. #end
  39. def end1
  40.   $mewin.bitmap.dispose
  41.   $mewin.dispose
  42. end

  43. =begin

  44.   脚本:【完美输入法修正】
  45.   
  46.   功能:输入法。
  47.   
  48.   说明: 直接用Type_Field创建输入域即可进行输入,在此可根据Type_Field域对象
  49.   
  50.         的活动标记active来自定义刷新等,在Type_Field中需要自己处理特殊按键
  51.         
  52.         的处理方法。具体不明白之处请参考范例工程。

  53.   作者:灼眼的夏娜
  54.   
  55.   补充: 至于以前那个版本也许很多人都注意到那个烦人的问题了吧,按Enter和Tab那
  56.   
  57.         些会出现不爽的声音,这个版本解决了那个问题,并简化添加了Type_Field类
  58.         
  59.         来方便创建输入域。

  60. =end

  61. #==============================================================================
  62. # ■ RInput
  63. #------------------------------------------------------------------------------
  64. #  全键盘处理的模块。
  65. #==============================================================================
  66. module RInput
  67.   
  68.   #--------------------------------------------------------------------------
  69.   # ● 常量定义
  70.   #--------------------------------------------------------------------------
  71.   ENTER             = 0x0D
  72.   SPACE             = 0x20
  73.   UP                = 0x26
  74.   DOWN              = 0x28
  75.   LEFT              = 0x25
  76.   RIGHT             = 0x27
  77.   
  78.   LCTRL             = 0xA2
  79.   LALT              = 0xA4

  80.   #--------------------------------------------------------------------------
  81.   # ● 临时Hash
  82.   #--------------------------------------------------------------------------
  83.   @R_Key_Hash = {}
  84.   @R_Key_Repeat = {}
  85.   
  86.   #--------------------------------------------------------------------------
  87.   # ● 唯一API
  88.   #--------------------------------------------------------------------------
  89.   GetKeyState = Win32API.new("user32","GetAsyncKeyState",['I'],'I')

  90.   #--------------------------------------------------------------------------
  91.   # ● 单键处理
  92.   #--------------------------------------------------------------------------
  93.   def self.trigger?(rkey)
  94.     result = GetKeyState.call(rkey)
  95.     if @R_Key_Hash[rkey] == 1 and result != 0
  96.       return false
  97.     end
  98.     if result != 0
  99.       @R_Key_Hash[rkey] = 1
  100.       return true
  101.     else
  102.       @R_Key_Hash[rkey] = 0
  103.       return false
  104.     end
  105.   end

  106. end

  107. #==============================================================================
  108. # ■ EasyConv
  109. #------------------------------------------------------------------------------
  110. #  转码模块。
  111. #==============================================================================
  112. module EasyConv

  113.   #--------------------------------------------------------------------------
  114.   # ● 常量定义
  115.   #--------------------------------------------------------------------------
  116.   CP_ACP = 0
  117.   CP_UTF8 = 65001

  118.   #--------------------------------------------------------------------------
  119.   # ● 模块函数
  120.   #--------------------------------------------------------------------------
  121.   module_function
  122.   
  123.   #--------------------------------------------------------------------------
  124.   # ● 转码
  125.   #--------------------------------------------------------------------------
  126.   def s2u(text)

  127.     m2w = Win32API.new('kernel32', 'MultiByteToWideChar', 'ilpipi', 'i')
  128.     w2m = Win32API.new('kernel32', 'WideCharToMultiByte', 'ilpipipp', 'i')

  129.     len = m2w.call(CP_ACP, 0, text, -1, nil, 0)
  130.     buf = "\0" * (len*2)
  131.     m2w.call(CP_ACP, 0, text, -1, buf, buf.size/2)

  132.     len = w2m.call(CP_UTF8, 0, buf, -1, nil, 0, nil, nil)
  133.     ret = "\0" * len
  134.     w2m.call(CP_UTF8, 0, buf, -1, ret, ret.size, nil, nil)
  135.     ret[-1] = ""
  136.    
  137.     return ret
  138.   end

  139.   #--------------------------------------------------------------------------
  140.   # ● 转码
  141.   #--------------------------------------------------------------------------
  142.   def u2s(text)
  143.    
  144.     m2w = Win32API.new('kernel32', 'MultiByteToWideChar', 'ilpipi', 'i')
  145.     w2m = Win32API.new('kernel32', 'WideCharToMultiByte', 'ilpipipp', 'i')

  146.     len = m2w.call(CP_UTF8, 0, text, -1, nil, 0)
  147.     buf = "\0" * (len*2)
  148.     m2w.call(CP_UTF8, 0, text, -1, buf, buf.size/2)

  149.     len = w2m.call(CP_ACP, 0, buf, -1, nil, 0, nil, nil)
  150.     ret = "\0" * len
  151.     w2m.call(CP_ACP, 0, buf, -1, ret, ret.size, nil, nil)
  152.    
  153.     return ret
  154.   end

  155. end

  156. #==============================================================================
  157. # ■ TypeAPI
  158. #------------------------------------------------------------------------------
  159. #  输入法相关API模块。
  160. #==============================================================================
  161. module TypeAPI
  162.   
  163.   #--------------------------------------------------------------------------
  164.   # ● API定义
  165.   #--------------------------------------------------------------------------
  166.   GPPS         = Win32API.new("kernel32","GetPrivateProfileString",'pppplp','l')
  167.   FindWindow   = Win32API.new("user32", "FindWindow", 'pp', 'i')
  168.   CreateWindow = Win32API.new("NetGame","CreatWnd",'l','l')
  169.   SetHK        = Win32API.new("NetGame","SetHK",'v','v')
  170.   GetText      = Win32API.new("NetGame","GetWndText",'l','p')
  171.   SetFocus     = Win32API.new("user32","SetFocus",'l','l')
  172.   IfBack       = Win32API.new("NetGame","If_Back",'v','i')
  173.   StartType    = Win32API.new("NetGame","StartType",'v','v')
  174.   EndType      = Win32API.new("NetGame","EndType",'v','v')
  175.   GetKeyInfos  = Win32API.new("NetGame","GetKeyInfo",'v','i')
  176.   
  177.   #--------------------------------------------------------------------------
  178.   # ● 模块函数
  179.   #--------------------------------------------------------------------------
  180.   module_function
  181.   
  182.   #--------------------------------------------------------------------------
  183.   # ● 获取参数
  184.   #--------------------------------------------------------------------------
  185.   def getParam
  186.     val = "\0" * 256
  187.     GPPS.call("Game","Title","",val,256,"./Game.ini")
  188.     val.delete!("\0")
  189.     return val
  190.   end
  191.   
  192.   #--------------------------------------------------------------------------
  193.   # ● 获取窗口
  194.   #--------------------------------------------------------------------------
  195.   def findWindow
  196.     return FindWindow.call("RGSS Player",self.getParam)
  197.   end
  198.   
  199.   #--------------------------------------------------------------------------
  200.   # ● 创建窗口
  201.   #--------------------------------------------------------------------------
  202.   def createWindow(hwnd)
  203.     return CreateWindow.call(hwnd)
  204.   end
  205.   
  206.   #--------------------------------------------------------------------------
  207.   # ● 设置HK
  208.   #--------------------------------------------------------------------------
  209.   def setHK
  210.     SetHK.call
  211.   end
  212.   
  213.   #--------------------------------------------------------------------------
  214.   # ● 获取文字
  215.   #--------------------------------------------------------------------------
  216.   def getText
  217.     return EasyConv.s2u(GetText.call(@subhwnd))
  218.   end
  219.   
  220.   #--------------------------------------------------------------------------
  221.   # ● 设置焦点
  222.   #--------------------------------------------------------------------------
  223.   def setFocus
  224.     SetFocus.call(@subhwnd)
  225.   end
  226.   
  227.   #--------------------------------------------------------------------------
  228.   # ● 转换焦点
  229.   #--------------------------------------------------------------------------
  230.   def lostFocus
  231.     SetFocus.call(@hwnd)
  232.   end
  233.   
  234.   #--------------------------------------------------------------------------
  235.   # ● 退格判定
  236.   #--------------------------------------------------------------------------
  237.   def ifBack
  238.     return IfBack.call
  239.   end
  240.   
  241.   #--------------------------------------------------------------------------
  242.   # ● 开始输入
  243.   #--------------------------------------------------------------------------
  244.   def startType
  245.     StartType.call
  246.   end
  247.   
  248.   #--------------------------------------------------------------------------
  249.   # ● 结束输入
  250.   #--------------------------------------------------------------------------
  251.   def endType
  252.     EndType.call
  253.   end
  254.   
  255.   #--------------------------------------------------------------------------
  256.   # ● 输入中特殊按键处理
  257.   #--------------------------------------------------------------------------
  258.   def getKeyInfos
  259.     return GetKeyInfos.call
  260.   end
  261.   
  262.   #--------------------------------------------------------------------------
  263.   # ● 获取句柄
  264.   #--------------------------------------------------------------------------
  265.   @hwnd    = self.findWindow
  266.   
  267.   @subhwnd = self.createWindow(@hwnd)

  268.   #--------------------------------------------------------------------------
  269.   # ● 设置HK应用
  270.   #--------------------------------------------------------------------------
  271.   self.setHK
  272.   
  273. end

  274. #==============================================================================
  275. # ■ Type_Field
  276. #------------------------------------------------------------------------------
  277. #  处理输入域的类。
  278. #==============================================================================
  279. class Type_Field
  280.   
  281.   #--------------------------------------------------------------------------
  282.   # ● 定义实例变量
  283.   #--------------------------------------------------------------------------
  284.   attr(:active)
  285.   
  286.   #--------------------------------------------------------------------------
  287.   # ● 初始化
  288.   #--------------------------------------------------------------------------
  289.   def initialize(v,default_text = "",default_careth = nil,default_fonts = 16,    default_fontc = Color.new(255,255,255,255))
  290.     mk_message
  291.     # active
  292.     @active = true
  293.     # 视口
  294.     rect = v.rect
  295.     @v = Viewport.new(rect.x,rect.y,rect.width,rect.height)
  296.     @beijing= Sprite.new(@v)
  297.     @beijing.bitmap = Cache.system("1081-1")#Cache.("Title")picture icon
  298.     @w = rect.width
  299.     @h = rect.height
  300.     # 属性
  301.     @caret_h = default_careth.nil? ? @h : [@h,default_careth].min
  302.     @caret_y = rect.y + (@h - @caret_h) / 2
  303.     @font_size = [default_fonts,@h].min
  304.     # 描绘contents
  305.     @cts = Sprite.new(@v)
  306.     @cts.bitmap = Bitmap.new(@w - 3,@h)
  307.     @cts.bitmap.font.size = @font_size
  308.     @cts.bitmap.font.color = default_fontc
  309.     # 辅助属性
  310.     @bk_count = 0
  311.     @text = default_text.scan(/./)
  312.     @max_width = @w - 3
  313.     @caret_pos = @text.size
  314.     @save_pos = @caret_pos
  315.     # 光标Caret
  316.     @v1 = Viewport.new(rect.x,@caret_y,@w + 3,@caret_h)
  317.     @caret_sp = Sprite.new(@v1)
  318.     @caret_bitmap = Bitmap.new(3,@caret_h)
  319.     @caret_bitmap.fill_rect(3,0,1,@caret_h,Color.new(0,0,0,180))
  320.     @caret_bitmap.fill_rect(2,0,1,@caret_h,Color.new(0,0,0))
  321.     @caret_bitmap.fill_rect(2,0,1,@caret_h,Color.new(255,255,255))
  322.     @caret_sp.bitmap = @caret_bitmap
  323.     @caret_sp.x = self.get_width(@text[0,@caret_pos].to_s)
  324.     @caret_sp.y = 0
  325.     @caret_sp.visible = false
  326.     @caret_flash_count = 0
  327.     # 刷新
  328.     refresh
  329.     # 设置焦点
  330.     TypeAPI.setFocus
  331.     # 开始输入
  332.     TypeAPI.startType
  333.   end
  334.   
  335.   #--------------------------------------------------------------------------
  336.   # ● 设置活动标记
  337.   #--------------------------------------------------------------------------
  338.   def active=(value)
  339.     if value != true and value != false
  340.       return
  341.     end
  342.     @active = value
  343.     @caret_sp.visible = @active
  344.   end
  345.   
  346.   #--------------------------------------------------------------------------
  347.   # ● 释放
  348.   #--------------------------------------------------------------------------
  349.   def dispose
  350.     @caret_bitmap.dispose
  351.     @caret_sp.bitmap.dispose
  352.     @caret_sp.dispose
  353.     @cts.bitmap.dispose
  354.     @cts.dispose
  355.     @v.dispose
  356.     @v1.dispose
  357.     end1
  358.   end

  359.   #--------------------------------------------------------------------------
  360.   # ● 刷新
  361.   #--------------------------------------------------------------------------
  362.   def refresh
  363.     @cts.bitmap.clear
  364.     @cts.bitmap.draw_text(0,0,@w,@h,@text.to_s)
  365.   end

  366.   #--------------------------------------------------------------------------
  367.   # ● 获取文字
  368.   #--------------------------------------------------------------------------
  369.   def get_text
  370.     return @text.to_s
  371.   end

  372.   #--------------------------------------------------------------------------
  373.   # ● 取得字符宽度
  374.   #--------------------------------------------------------------------------
  375.   def get_width(str)
  376.     return @cts.bitmap.text_size(str).width
  377.   end
  378.   
  379.   #--------------------------------------------------------------------------
  380.   # ● 更新
  381.   #--------------------------------------------------------------------------
  382.   def update
  383.     # 非激活状态则返回
  384.     unless @active
  385.       return
  386.     end
  387.     message_update
  388.     # 获取按键信息
  389.     key_info = TypeAPI.getKeyInfos
  390.     case key_info
  391.     when 0x09 # Tab
  392.       # 按下 Tab 键的情况自己定义怎么处理
  393.       return
  394.     when 0x0d # Enter
  395.       # 按下 Enter 键的情况自己定义怎么处理
  396.       #message_push(get_text) if get_text != nil
  397.       $message.push([$n+$time,get_text])
  398.    #   @text = [] if get_text != nil
  399.       return
  400.     when 0x1B # Esc
  401.       # 按下 Esc 键的情况自己定义怎么处理
  402.       return
  403.     end
  404.     self.update_text
  405.     self.update_lrb
  406.     self.update_back
  407.     self.update_caret
  408.   end

  409.   #--------------------------------------------------------------------------
  410.   # ● 更新文字
  411.   #--------------------------------------------------------------------------
  412.   def update_text
  413.     # 文字刷新
  414.     TypeAPI.setFocus
  415.     text = TypeAPI.getText
  416.     if text != ""
  417.       for char in text.scan(/./)
  418.         if self.get_width(@text.to_s + char) <= @max_width
  419.           @text[@caret_pos,0] = char
  420.           @caret_pos += 1
  421.         else
  422.           break
  423.         end
  424.       end
  425.       refresh
  426.     end
  427.   end
  428.   
  429.   #--------------------------------------------------------------------------
  430.   # ● 更新左右按键
  431.   #--------------------------------------------------------------------------
  432.   def update_lrb
  433.     if RInput.trigger?(RInput::LEFT) and @caret_pos > 0
  434.       @caret_pos -= 1
  435.       return
  436.     end
  437.     if RInput.trigger?(RInput::RIGHT) and @caret_pos < @text.size
  438.       @caret_pos += 1
  439.       return
  440.     end
  441.   end
  442.   
  443.   #--------------------------------------------------------------------------
  444.   # ● 更新退格
  445.   #--------------------------------------------------------------------------
  446.   def update_back
  447.     # 前退格处理
  448.     @bk_count += TypeAPI.ifBack
  449.     if @bk_count > 0
  450.       @bk_count -= 1
  451.       if @caret_pos > 0
  452.         @text.delete_at(@caret_pos - 1);@caret_pos -= 1;refresh
  453.       end
  454.     end
  455.   end
  456.   
  457.   #--------------------------------------------------------------------------
  458.   # ● 更新光标闪烁
  459.   #--------------------------------------------------------------------------
  460.   def update_caret
  461.     # 闪烁计时
  462.     @caret_flash_count += 1
  463.     if @caret_flash_count == 20
  464.       @caret_sp.visible = !@caret_sp.visible
  465.       @caret_flash_count = 0
  466.     end
  467.     # Caret位置刷新
  468.     if @save_pos != @caret_pos
  469.       @save_pos = @caret_pos
  470.       @caret_sp.x = self.get_width(@text[0,@save_pos].to_s)
  471.     end
  472.   end
  473.   
  474. end
  475.   
  476.   
复制代码
哎呀,蛋疼什么的最有爱了
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
12 小时
注册时间
2006-5-21
帖子
773
12
发表于 2008-6-9 18:05:55 | 只看该作者
您这个比我的强大多了{/hx}
MadniMStudio|Beside
回复 支持 反对

使用道具 举报

Lv2.观梦者

傻♂逼

梦石
0
星屑
374
在线时间
1606 小时
注册时间
2007-3-13
帖子
6562

烫烫烫开拓者

13
发表于 2008-6-9 18:14:50 | 只看该作者
以下引用Beside于2008-6-9 10:05:55的发言:

您这个比我的强大多了

还是您的比较强大 {/hx}
哎呀,蛋疼什么的最有爱了
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-5-24
帖子
335
14
发表于 2008-6-9 19:01:58 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv2.观梦者

傻♂逼

梦石
0
星屑
374
在线时间
1606 小时
注册时间
2007-3-13
帖子
6562

烫烫烫开拓者

15
发表于 2008-6-9 19:59:56 | 只看该作者
发Beside的吧,我的很勉强
哪年被GC吃了都不懂
哎呀,蛋疼什么的最有爱了
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-25 09:48

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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