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

Project1

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

[已经解决] 如何用联机脚本判定1P2P

[复制链接]

Lv4.逐梦者

梦石
3
星屑
2774
在线时间
186 小时
注册时间
2015-8-18
帖子
51

开拓者

跳转到指定楼层
1
发表于 2015-11-11 13:00:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 1262917464 于 2015-11-11 18:32 编辑

{:2_276:}拿到这个脚本后正在疑惑如何判定1P2PQAQ

用 $RMlinkSZK.np == *                                  注:*是指第几个玩家,如1P *=1
  1. #==============================================================================
  2. # ■ RMlinkSZK v2.1
  3. #------------------------------------------------------------------------------
  4. #  RPG MKAER聯機腳本。支持RMXP、RMVX、RMVA(注意:在VA裏不能用事件的按下按鈕,
  5. #   VA中必須用腳本判斷按鈕。)
  6. #     將本腳本插入到Main之前,若為RMXP請在所有腳本之前插入Hangup 异常根除
  7. #   腳本,否則將可能導致“脚本已备份”的錯誤。
  8. #     獲取2P的按鍵輸入請传递np,例:檢測2P的C鍵位Input.press?(Input::C,2)
  9. #     獲取2P的方向輸入請傳遞np,例:檢測2P的C鍵位Input.dir4(2),同樣支持dir8
  10. #     獲取當前玩家是1P還是2P,例:$RMlinkSZK.np
  11. #     獲取當前遊戲人數,例:$RMlinkSZK.mnp
  12. #       在Game.ini中加入MaxNP=最多聯機人數,可以允許最多4P聯機。
  13. #     同時獲取任意一方的按鍵就传递0,例:Input.press?(num,0)
  14. #       交換身體請調用$RMlinkSZK.change_play
  15. #       判斷除方向鍵外任意鍵位是否被按下,例:Input.anykey?(np)或前一幀Input.anykey_?(np)
  16. #==============================================================================
  17. srand(368541734)#請不要在本脚本外調用srand否則將不同步!

  18. module Input
  19.   def Input.update()
  20.     $RMlinkSZK.update()
  21.   end
  22.   def Input.press?(num,np = 0)
  23.     if np == 0
  24.       for i in 1..$RMlinkSZK.mnp
  25.         return true if $RMlinkSZK.press?(num,i) != 0
  26.       end
  27.     end
  28.     return $RMlinkSZK.press?(num,np) != 0
  29.   end
  30.   def Input.trigger?(num,np = 0)
  31.     if np == 0
  32.       for i in 1..$RMlinkSZK.mnp
  33.         return true if $RMlinkSZK.trigger?(num,i)
  34.       end
  35.     end
  36.     return $RMlinkSZK.trigger?(num,np)
  37.   end
  38.   def Input.repeat?(num,np = 0)
  39.     if np == 0
  40.       for i in 1..$RMlinkSZK.mnp
  41.         return true if $RMlinkSZK.repeat?(num,i)
  42.       end
  43.     end
  44.     return $RMlinkSZK.repeat?(num,np)
  45.   end
  46.   def Input.dir4(np = 1)
  47.     if np == 0
  48.       for i in 1..$RMlinkSZK.mnp
  49.         s = $RMlinkSZK.dir4(i)
  50.         return $RMlinkSZK.dir4(i) if s != 0
  51.       end
  52.     end
  53.     return $RMlinkSZK.dir4(np)
  54.   end
  55.   def Input.dir8(np = 1)
  56.     if np == 0
  57.       for i in 1..$RMlinkSZK.mnp
  58.         s = $RMlinkSZK.dir8(i)
  59.         return $RMlinkSZK.dir8(i) if s != 0
  60.       end
  61.     end
  62.     return $RMlinkSZK.dir8(np)
  63.   end
  64.   def Input.anykey?(np = 0)
  65.     return $RMlinkSZK.anykey?($RMlinkSZK.key,np)
  66.   end
  67.   def Input.anykey_?(np = 0)
  68.     return $RMlinkSZK.anykey?($RMlinkSZK.key_,np)
  69.   end
  70. end


  71. class RMlinkSZK
  72.     UP = 0
  73.     LEFT = 0
  74.     DOWN = 65535
  75.     RIGHT = 65535
  76.    
  77.     NODIR = 32511
  78.     TONGSHI = 32767
  79.    
  80.   attr_accessor :np
  81.   attr_accessor :mnp
  82.   attr_accessor :exchange
  83.   attr_accessor :key
  84.   attr_accessor :key_
  85.   attr_accessor :dk
  86.   attr_accessor :dk_
  87.   #--------------------------------------------------------------------------
  88.   # ● 初始化
  89.   #--------------------------------------------------------------------------
  90.   def initialize
  91.     linkdll = "\0" * 260 * 2
  92.     @gpps = Win32API.new("kernel32.dll","GetPrivateProfileStringA","p p p p l p","l")
  93.     @gpps.call("Core","MainPath","",linkdll,linkdll.size,".\\NO$GBAlinkSZK.ini")
  94.     linkdll=linkdll[0,linkdll.index("\000")] + "NO$GBA_SZK.dll"
  95.     @ud = Win32API.new(linkdll,"RM_Update",[],"v")
  96.     @gk = Win32API.new(linkdll,"RM_GetKey",["l"],"l")
  97.     @gx = Win32API.new(linkdll,"RM_GetX",["l"],"l")
  98.     @gy = Win32API.new(linkdll,"RM_GetY",["l"],"l")
  99.     @gnp = Win32API.new(linkdll,"GetNP",[],"l")
  100.     @gmnp = Win32API.new(linkdll,"GetMaxNP",[],"l")
  101.     @gpn = Win32API.new(linkdll,"GetPlayerName",["l","p"],"l")
  102.     @gs = Win32API.new(linkdll,"GetSpeed",["l"],"l")
  103.     @skip_c = 0
  104.     @exchange = 0
  105.     @np = @gnp.call()
  106.     @mnp = @gmnp.call()
  107.     @key = [0,0,0,0]
  108.     @dir = [0,0,0,0]
  109.     @dir8 = [0,0,0,0]
  110.     @dk = [0,0,0,0]
  111.    
  112.     @key_ = [0,0,0,0]
  113.     @dk_ = [0,0,0,0]
  114.    
  115.     @seed = 386212
  116.     @set_seed = true
  117.   end
  118.   def change_play
  119.     @exchange += 1
  120.     @exchange = 0 if @exchange >= @mnp
  121.     @np = @np += 1
  122.     @np = 1 if @np > @mnp
  123.   end
  124.   def update
  125.     for i in 1..@mnp
  126.       @key_[i-1] = @key[i-1]
  127.       @dk_[i-1] = @dk[i-1]
  128.     end
  129.    
  130.     @ud.call()
  131.     for i in 1..@mnp
  132.       z = @exchange + i
  133.       z = 1 if z > @mnp
  134.       z -= 1
  135.       @key[z] = @gk.call(i)
  136.     #dir
  137.     r = 0
  138.     g = 0
  139.     d = @gx.call(i)
  140.     if d != NODIR
  141.       if d == RIGHT
  142.         g |= 1
  143.         r = 6
  144.       else
  145.         if d == TONGSHI
  146.           g |= 2 | 1
  147.         else
  148.           g |= 2
  149.         end
  150.         r = 4
  151.       end
  152.     end
  153.    
  154.       d = @gy.call(i)
  155.       if d != NODIR
  156.       if d == DOWN
  157.         g |= 4
  158.         r = 2
  159.       else
  160.         if d == TONGSHI
  161.           g |= 4 | 8
  162.         else
  163.           g |= 8
  164.         end
  165.         r = 8
  166.       end
  167.   end
  168.   @dir[z] = r
  169.   @dk[z] = g
  170.   end

  171.   @dir8[0] = -1
  172.   #第一次按C时重新设置一次种子从而解决每次启动随机函数都相同的问题
  173.     if @set_seed
  174.       @seed += 1
  175.       if Input.trigger?(Input::C,0)
  176.         @set_seed = false
  177.         srand(Input.trigger?(Input::C,1) ? @seed : -@seed)
  178.       end
  179.     end
  180. end
  181.   def press?(num,np)
  182.     return case_key(num,@key,@dk,np)
  183.   end
  184.   def case_key(num,k,dk,np)
  185.     np -= 1
  186.     case num
  187.     when Input::C
  188.       return k[np] & 1
  189.     when Input::B
  190.       return k[np] & 2
  191.     when Input::A
  192.       return k[np] & 4
  193.     when Input::Z
  194.       return k[np] & 8
  195.     when Input::L
  196.       return k[np] & 16
  197.     when Input::R
  198.       return k[np] & 32
  199.     when Input::X
  200.       return k[np] & 64
  201.     when Input::Y
  202.       return k[np] & 128
  203.     when Input::RIGHT
  204.       return dk[np] & 1
  205.     when Input::LEFT
  206.       return dk[np] & 2
  207.     when Input::DOWN
  208.       return dk[np] & 4
  209.     when Input::UP
  210.       return dk[np] & 8
  211.     end
  212.     return 0
  213.   end
  214.   def trigger?(num,np)
  215.     return case_key(num,@key,@dk,np) != 0 && case_key(num,@key_,@dk_,np) == 0
  216.   end
  217.   def repeat?(num,np)
  218.     return case_key(num,@key,@dk,np) != 0 && case_key(num,@key_,@dk_,np) == 0
  219.   end
  220.   def anykey?(k,np)
  221.     for i in 1..@mnp
  222.       return true if k[i-1] != 0
  223.     end
  224.     return k[np-1] != 0
  225.   end
  226.   
  227.   def dir4(np)
  228.     return @dir[np-1]
  229.   end
  230.   def get_dir8(np)
  231.     dk = @dk[np-1]
  232.     if dk & 1 != 0
  233.       if dk & 4 != 0
  234.         return 3
  235.       elsif dk & 8 != 0
  236.         return 9
  237.       end
  238.       return 6
  239.     end
  240.    
  241.     if dk & 2 != 0
  242.       if dk & 4 != 0
  243.         return 1
  244.       elsif dk & 8 != 0
  245.         return 7
  246.       end
  247.       return 4
  248.     end
  249.    
  250.     return 8 if dk & 8 != 0
  251.     return 2 if dk & 4 != 0
  252.    
  253.     return 0
  254.   end
  255.   def dir8(np)
  256.     if @dir8[0] == -1
  257.       for i in 1..@mnp
  258.         @dir8[i-1] = get_dir8(i)
  259.       end
  260.     end
  261.     return @dir8[np-1]
  262.   end
  263.   def get_player_name(np)
  264.     text = "\0"*260
  265.     @gpn.call(np|128,text)
  266.     return text[0,text.index("\000")]
  267.   end
  268.   def skip?
  269.     if @skip_c >= @gs.call(20)
  270.       @skip_c = 0
  271.       return false
  272.     else
  273.       @skip_c+=1
  274.       return true
  275.     end
  276.   end
  277. end

  278. module DataManager
  279.   #--------------------------------------------------------------------------
  280.   # ● 存档文件的最大数
  281.   #--------------------------------------------------------------------------
  282.   def self.savefile_max
  283.     return 4
  284.   end
  285. end

  286. class << Graphics
  287.   alias_method :original_szk_update, :update unless method_defined? :original_szk_update
  288.   def update
  289.     original_szk_update unless $RMlinkSZK.skip?
  290.   end
  291. end

  292. $RMlinkSZK = RMlinkSZK.new
复制代码

Lv1.梦旅人

梦石
0
星屑
75
在线时间
105 小时
注册时间
2015-8-8
帖子
51
2
发表于 2015-11-11 13:53:25 | 只看该作者
能联机?
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
3
星屑
2774
在线时间
186 小时
注册时间
2015-8-18
帖子
51

开拓者

3
 楼主| 发表于 2015-11-11 17:54:12 | 只看该作者
w1023909201 发表于 2015-11-11 13:53
能联机?

{:2_276:}是可以联机的,问题是我要知道怎么让RM知道1P是1P,2P是2P

点评

我帮不了你,你的脚本我先收藏了  发表于 2015-11-11 17:58
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-29 22:04

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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