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

Project1

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

[已经解决] 求脚队伍角色重复存在的方法

[复制链接]

Lv4.逐梦者

梦石
0
星屑
12157
在线时间
4435 小时
注册时间
2014-4-11
帖子
5955

开拓者

跳转到指定楼层
1
发表于 2016-1-30 21:10:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 yang1zhi 于 2016-1-30 22:25 编辑

主要来用做宠物。
使用的BFS系统有队友功能。
但是一个ID只是存在一个。
这样的话那一个宠物就只能存在一个了。
就不能同时带着3只史莱姆了。

BFS系统网盘
http://pan.baidu.com/s/1c0ZMN64

Lv4.逐梦者

「Pemercyia」


Urhurrenna

梦石
0
星屑
9397
在线时间
2748 小时
注册时间
2008-9-5
帖子
3543

开拓者短篇八RM组冠军短篇九导演组亚军白银编剧

2
发表于 2016-1-31 14:28:28 | 只看该作者
本帖最后由 cinderelmini 于 2016-1-31 16:17 编辑

楼层更新:
给每个角色都添加了队伍序列名字(不会显示在画面),
也就是说,队伍里没有相同角色的时候,这个名字是角色原本的名字,
如果有两个及以上相同角色的话,第二个开始,序列名字会变成“名字_1”,“名字_2”依次递加,
(注意:第一个角色的序列名字还是原来的名字,不会变动。)
所以如果没猜错的话,那个BFS系统是用事件名字来和队友名字对应的?
这样的话,第二个队员的事件名字就是“队员名字_1”这样设置了。
(窝这里缺素材什么的不能测试,单纯看了代码之后猜的,总之有问题再处理……)
(啊,这篇脚本要放在BFS系统的下面。)

点评

地图界面上队友的图标有出现了。不过队友的事件没出现  发表于 2016-1-31 18:00

评分

参与人数 1星屑 +100 收起 理由
RyanBern + 100 塞糖

查看全部评分

回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
12157
在线时间
4435 小时
注册时间
2014-4-11
帖子
5955

开拓者

3
 楼主| 发表于 2016-1-31 15:21:50 | 只看该作者
cinderelmini 发表于 2016-1-31 14:28
稍微写了个也许大概可行的……用法Main前……
可以自己设定队伍最大人数,如果在别的地方设置了最大人数的 ...

默认系统可以。
BFS系统使用后,菜单里是有重复人物了,不过地图上并没有出现队友。
BFS地图上的队友是读取第158张地图上设置的事件来实现的。


RUBY 代码复制
  1. #=============================================================================#
  2. #                          ■ BFS - FriendDefine
  3. #-----------------------------------------------------------------------------#
  4. #                      对于队友事件、图像的核心定义
  5. #=============================================================================#
  6. class Friend_Sprite < Sprite_Character
  7.   attr_accessor :character
  8.   attr_accessor :friend_party_id
  9.   attr_accessor :actor_database_id
  10.   def initialize(viewport, character = nil)
  11.     super(viewport, character)
  12.     @character = character
  13.     @indicator = Sprite.new(viewport)
  14.     @indicator.opacity = 0
  15.     @indicator.bitmap = RPG::Cache.windowskin("Player2_Cursor")
  16.     @indicator.z = 5000
  17.     for i in $game_party.actors
  18.       if @character.name == i.name
  19.         @friend_party_id = (i.index - 1).to_i
  20.         break
  21.       end
  22.     end
  23.     for i in 1..$game_actors.size
  24.       if @character.name == $game_actors[i].name
  25.         @actor_database_id = $game_actors[i].id
  26.         break
  27.       end
  28.     end
  29.     @hpsprite = Sprite.new(viewport)
  30.     @hpsprite.z = 0
  31.     ox = BFS_DataBase::HP_BAR_OX[@actor_database_id]
  32.     oy = BFS_DataBase::HP_BAR_OY[@actor_database_id]
  33.     @hpsprite.bitmap = Bitmap.new(ox + 75, oy + 50)
  34.     black = Color.new(0, 0, 0)
  35.     @hpsprite.bitmap.fill_rect(ox, oy, 26, 1, black) #上
  36.     @hpsprite.bitmap.fill_rect(ox, oy + 8, 26, 1, black) #下
  37.     @hpsprite.bitmap.fill_rect(ox, oy, 1, 9, black) #左
  38.     @hpsprite.bitmap.fill_rect(ox + 25, oy, 1, 9, black) #右
  39.     @hpsprite.bitmap.fill_rect(ox, oy + 4, 26, 1, black) #中
  40.     hp = ($game_party.friends[@friend_party_id].hp).to_f
  41.     hp_w = ((hp / $game_party.friends[@friend_party_id].maxhp) * 24)
  42.     sp = ($game_party.friends[@friend_party_id].sp).to_f
  43.     sp_w = ((sp / $game_party.friends[@friend_party_id].maxsp) * 24)
  44.     @hpsprite.bitmap.fill_rect(ox + 1, oy + 1, hp_w, 3, Color.new(255, 0, 0))
  45.     @hpsprite.bitmap.fill_rect(ox + 1, oy + 5, sp_w, 3, Color.new(0, 255, 255))
  46.   end
  47.   def update
  48.     super
  49.     if @character.battler.tactics_type == 2
  50.       @indicator.opacity = 225
  51.       @indicator.x = self.x - 18
  52.       @indicator.y = self.y - 108
  53.     else
  54.       @indicator.opacity = 0
  55.     end
  56.     @hpsprite.opacity = self.opacity
  57.     self.opacity = 0 if $game_party.friends[@friend_party_id].dead?
  58.     @hpsprite.bitmap.clear
  59.     ox = BFS_DataBase::HP_BAR_OX[@actor_database_id]
  60.     oy = BFS_DataBase::HP_BAR_OY[@actor_database_id]
  61.     black = Color.new(0, 0, 0)
  62.     @hpsprite.bitmap.fill_rect(ox, oy, 26, 1, black) #上
  63.     @hpsprite.bitmap.fill_rect(ox, oy + 8, 26, 1, black) #下
  64.     @hpsprite.bitmap.fill_rect(ox, oy, 1, 9, black) #左
  65.     @hpsprite.bitmap.fill_rect(ox + 25, oy, 1, 9, black) #右
  66.     @hpsprite.bitmap.fill_rect(ox, oy + 4, 26, 1, black) #中
  67.     hp = ($game_party.friends[@friend_party_id].hp).to_f
  68.     hp_w = ((hp / $game_party.friends[@friend_party_id].maxhp) * 24)
  69.     sp = ($game_party.friends[@friend_party_id].sp).to_f
  70.     sp_w = ((sp / $game_party.friends[@friend_party_id].maxsp) * 24)
  71.     @hpsprite.bitmap.fill_rect(ox + 1, oy + 1, hp_w, 3, Color.new(255, 0, 0))
  72.     @hpsprite.bitmap.fill_rect(ox + 1, oy + 5, sp_w, 3, Color.new(0, 255, 255))
  73.     @hpsprite.x = self.x - self.ox
  74.     @hpsprite.y = self.y
  75.   end
  76. end
  77. class Game_Friend < Game_Event
  78.   attr_accessor :enemy_in_range
  79.   attr_accessor :aimovement_stand_by
  80.   include XRXS_BreakActs
  81.   def initialize(map_id, event)
  82.     super(map_id, event)
  83.     @last_dead = false
  84.     @max_speed = @move_speed
  85.     @aimovement_stand_by = false
  86.     @collapse_done = $game_party.actors[self.party_id].dead?
  87.   end
  88.   def controllable?  
  89.     return !(moving? or $game_system.map_interpreter.running? or
  90.             @move_route_forcing or $game_temp.message_window_showing or
  91.             self.action != nil or @attacking)
  92.   end
  93.   def party_id
  94.     for i in $game_party.actors
  95.       if self.name == i.name
  96.         return i.index.to_i
  97.         break
  98.       end
  99.     end   
  100.   end
  101.   def update
  102.     super
  103.     if @last_dead
  104.       unless self.battler.dead?
  105.         recover
  106.       end
  107.     end
  108.     @last_dead = self.battler.dead?
  109.   end
  110.   def pop_damage_text(name)
  111.     self.battler.damage = name
  112.     self.battler.damage_pop = true
  113.   end  
  114.   def recover
  115.     @collapse_done = false
  116.     @through = @page.through
  117.     @character_name = @page.graphic.character_name
  118.     @opacity = 255
  119.     $game_system.friend_event_id.insert(party_id ,id)
  120.     BFS_Friends.refresh_map
  121.     $game_party.friend_party_update
  122.     self.battler_recheck
  123.     @animation_id = BFS_Setting::ANI_RECOVER
  124.   end
  125.   def update_hp_sensor
  126.     @low_hp_characters = 0
  127.     for i in $game_party.actors
  128.       @low_hp_characters += 1 if (i.hp < i.maxhp * 0.6)
  129.     end
  130.   end
  131.    def update_sensor
  132.      @enemy_in_range = nil
  133.      for i in $game_map.events.values
  134.        if i.battler != nil and i.battler.is_a?(Game_Enemy) and not
  135.          BFS_Setting::NOT_ATTACK_ID.include?(i.enemy_id)
  136.          distance = (i.x - self.x).abs + (i.y - self.y).abs
  137.          @enemy_in_range = i.id if (distance <= BFS_Setting::SENSOR_RANGE)
  138.          break
  139.        end
  140.      end
  141.    end  
  142. end
  143. module BFS_Friends
  144.   def self.add(friend_id)
  145.       map_id = BFS_Setting::FRIEND_MAP_ID
  146.       return unless self.is_map?        
  147.       map = load_data(sprintf("Data/Map%03d.rxdata", map_id))     
  148.       temp = Marshal.load(Marshal.dump(map))      
  149.       if !$game_system.map_events_number
  150.          $game_system.map_events_number = {}
  151.       end  
  152.       sum = $game_system.map_events_number      
  153.       m_id = $game_map.map_id      
  154.       sum[m_id] == nil ? sum[m_id] = 2000 : sum[m_id] += 1
  155.       new_event_id = sum[m_id]      
  156.       temp.events[friend_id].id = new_event_id      
  157.       temp.events[friend_id].x,temp.events[friend_id].y = $game_player.x, $game_player.y      
  158.       $game_map.events[new_event_id] = Game_Friend.new(m_id,temp.events[friend_id])
  159.       $BFS_temp = $game_map.events[new_event_id]
  160.       $game_system.friend_event_id.push(new_event_id) unless $game_actors[friend_id].dead?
  161.     end   
  162.    def self.get_event_to(id, x, y)
  163.       map = load_data(sprintf("Data/Map%03d.rxdata", BFS_Setting::FRIEND_MAP_ID))     
  164.       temp = Marshal.load(Marshal.dump(map))      
  165.       temp.events[id].x,temp.events[id].y = x,y      
  166.       return temp.events[id]
  167.   end   
  168.   def self.refresh_map
  169.   $scene.spriteset.dispose
  170.   $scene.spriteset = Spriteset_Map.new
  171.     end
  172.   def self.is_map?
  173.       (return true) if $scene.is_a?(Scene_Map)
  174.       return false
  175.     end
  176.   def self.prepare_for_transferring
  177.     $game_system.friend_event_id = []
  178.     return if $game_party.friends == []
  179.       for i in $game_party.friends
  180.         add(i.id)
  181.       end
  182.     $game_party.friend_party_update
  183.   end
  184.   def self.prepare_for_loading
  185.     $game_system.friend_event_id = []
  186.     return if $game_party.friends == []
  187.       for i in $game_party.friends
  188.         add(i.id)
  189.       end
  190.     $game_party.friend_party_update
  191.     m = 0
  192.     for i in $game_system.friend_event_id
  193.       c = $game_map.events[i]
  194.       x = $game_system.bfs_positions[m][0]
  195.       y = $game_system.bfs_positions[m][1]
  196.       direction = $game_system.bfs_positions[m][2]
  197.       c.moveto(x,y)
  198.       c.direction = direction
  199.       m += 1
  200.     end
  201.   end
  202.     def self.delete_all_friends
  203.       for i in $game_system.friend_event_id
  204.         $game_map.events.delete(i)
  205.       end
  206.     end
  207.   def self.friend_defeat_process(friend_battler, id)
  208.     $game_temp.ifw_text = friend_battler.name + "阵亡"
  209.     $game_temp.ifw_active = true
  210.     $game_system.friend_event_id.delete(id)
  211.     $game_party.friend_party_update
  212.   end
  213.   def self.weapon_recheck
  214.     for i in $game_party.actors
  215.       i.slash_id = XAS_SKILL::WEAPON_ID_TOOL[i.weapon_id] if XAS_SKILL::WEAPON_ID_TOOL[i.weapon_id]
  216.     end
  217.   end
  218. end  
  219. class Game_System
  220.   attr_accessor :map_events_number            
  221.   attr_accessor :map_data            
  222. end  
  223. class Scene_Map
  224.   attr_accessor :spriteset            
  225. end
  226. class Game_Event < Game_Character
  227.   attr_reader   :event
  228.   def name
  229.    return @event.name
  230.   end
  231. end
  232. module BFS_DataBase
  233.   MAP_ID = []
  234.   HP_BAR_OX = []
  235.   HP_BAR_OY = []
  236. end
  237. class Sprite_Character < RPG::Sprite
  238.   alias bfs_sp1_ini initialize
  239.   def initialize(viewport, character = nil)
  240.     bfs_sp1_ini(viewport, character)
  241.     @player = character.is_a?(Game_Player)
  242.     @indicator_step = 0
  243.     if @player
  244.       @indicator = Sprite.new(viewport)
  245.       @indicator.opacity = 0
  246.       @indicator.bitmap = RPG::Cache.windowskin("Player1_Cursor")
  247.       @indicator.x = self.x - 18
  248.       @indicator.y = self.y - 108
  249.       @indicator.z = 5000
  250.     end
  251.   end
  252.   alias bfs_sp1_update_old update
  253.   def update
  254.     bfs_sp1_update_old
  255.     if @player
  256.       if @character.indicator_setup
  257.         @character.indicator_setup = false
  258.         @indicator_step = 220
  259.       end
  260.       @indicator.x = self.x - 18
  261.       @indicator.y = self.y - 108
  262.       if @indicator_step > 0
  263.         @indicator_step -= 1
  264.         case @indicator_step
  265.         when 1..20
  266.           @indicator.opacity -= 15
  267.         when 201..219
  268.           @indicator.opacity += 15
  269.         end
  270.       end
  271.     end
  272.   end
  273. end

点评

这个脚本很厉害的,能让XAS多人同时战斗  发表于 2016-1-31 18:01
上面楼层更新……  发表于 2016-1-31 16:17
这篇脚本看起来好麻烦的样子……不过应该是获取party_id那段的写法要改改……  发表于 2016-1-31 16:01
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-9-22 17:34

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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