Advertisement
LeonMMS

LM² - Party 1.0

Aug 31st, 2017
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 8.91 KB | None | 0 0
  1. #       LM² - Party 1.0
  2. #       Data 03/09/17
  3. #   Criado por LeonMM
  4. # MÓDULO DE CONFIGURAÇÃO
  5. module LMM_Party
  6.   MAX_MEMBERS = 5
  7.   PARTY = "Grupo"
  8.   INVITE = "convida você para um grupo."
  9.   ACCEPT = "aceitou o convite."
  10.   REFUSE = "recusou o convite."
  11.   REMOVE = "retirou você do grupo."
  12.   EXPEL = "foi retirado do grupo."
  13.   EXIT = "retirou-se do grupo."
  14.   DISBAND = "desbandou o grupo."
  15.   OTHER = "O jogador está em outra Party."
  16.   FULL = "Seu grupo está cheio!"
  17.   ENTER = "entrou no grupo."
  18.   ALREADY = "já está em seu grupo."
  19. end
  20. # PARTY MANAGER
  21. class Party_Manager
  22.   attr_accessor :partys
  23.   attr_accessor :members
  24.   attr_accessor :leader
  25.   attr_accessor :inter
  26.   def initialize
  27.     @do_update = false
  28.     @partys = {}
  29.     @members = {}
  30.     @leader = 0
  31.     @inter = Party_Interaction.new
  32.     @inter.visible = false
  33.     @X = nil
  34.   end
  35.   def add_member(index,name,maxhp,hp,maxsp,sp,lv,leader)
  36.     @do_update = true
  37.     @leader = leader if @leader == 0
  38.     @members[index] = Party_Member.new(index,name,maxhp,hp,maxsp,sp,lv)
  39.     @partys[index] = Sprite_Member.new(@members[index])
  40.     if @members.size == 1
  41.       @X = Sprite_X.new(@leader)
  42.     end
  43.   end
  44.   def remove_member(index)
  45.     return unless @members[index] != nil
  46.     @partys[index].dispose
  47.     @partys.delete(index)
  48.     @members.delete(index)
  49.     if @leader == $network.index
  50.       if @members == {}
  51.         @do_update = false
  52.         remove_party        
  53.       end
  54.     end
  55.     @inter.visible = false if @inter.index == index
  56.     if @members != {}
  57.       pos = 0
  58.       for i in @partys.keys
  59.         @partys[i].reposition(pos)
  60.         if @inter.visible
  61.           @inter.y = @partys[i].y if @inter.index == i
  62.         end  
  63.         pos += 1
  64.       end    
  65.     end
  66.   end  
  67.   def update_info(index)
  68.     @partys[index].refresh
  69.   end  
  70.   def remove_party
  71.     @do_update = false
  72.     for i in @partys.keys
  73.       @partys[i].dispose
  74.       @partys.delete(i)
  75.     end  
  76.     @partys = {}
  77.     for i in @members.keys
  78.       @members.delete(i)
  79.     end  
  80.     @members = {}
  81.     @X.dispose
  82.     @X = nil
  83.     @inter.visible = false
  84.     @leader = 0
  85.   end  
  86.   def update
  87.     if @do_update
  88.       @X.update if @X != nil
  89.       @inter.update if @inter.visible
  90.       if @members != {}
  91.         for i in @partys.keys
  92.           @partys[i].update
  93.         end    
  94.       end
  95.     end  
  96.   end  
  97. end  
  98. #MEMBER SPRITE
  99. class Sprite_Member < Sprite
  100.   def initialize(member)
  101.     super()
  102.     self.y = 75 + (38 * ($party_manager.members.size-1))    
  103.     self.x = 18
  104.     self.z = 100
  105.     @member = member
  106.     @back = RPG::Cache.picture('PartyBackground')
  107.     @bars = RPG::Cache.picture('PartyBars')
  108.     refresh
  109.   end
  110.   def refresh
  111.     self.bitmap = Bitmap.new(112, 34)
  112.     self.bitmap.font.size = 11
  113.     self.bitmap.clear
  114.     self.bitmap.blt(0, 0, @back, Rect.new(0, 0, @back.width, @back.height))
  115.     self.bitmap.blt(0, 15, @bars, Rect.new(0, 0, @bars.width * @member.hp / @member.maxhp, 9))
  116.     self.bitmap.blt(0, 26, @bars, Rect.new(0, 9, @bars.width * @member.sp / @member.maxsp, 9))    
  117.     self.bitmap.draw_text(0, 0, 101, 14, "#{@member.name}[#{@member.lv}]", 1)
  118.   end
  119.   def update
  120.     if $mouse.in_area?(self.x,self.y,101,16)
  121.       return unless Input.trigger?(Input::Key['Mouse Left'])
  122.       $party_manager.inter.index = @member.index unless $party_manager.inter.visible
  123.       $party_manager.inter.y = self.y
  124.       $party_manager.inter.refresh
  125.       if $party_manager.inter.index == @member.index or $party_manager.inter.index == 0
  126.         $party_manager.inter.visible = !$party_manager.inter.visible
  127.       end  
  128.       $party_manager.inter.index = @member.index      
  129.     end
  130.   end  
  131.   def reposition(index)
  132.     self.y = 75 + (38 * index)
  133.   end  
  134. end
  135. #X SPRITE
  136. class Sprite_X < Sprite
  137.   def initialize(index)
  138.     super()
  139.     @index = index
  140.     @x = RPG::Cache.picture('PartyInteraction')
  141.     self.x = 121
  142.     self.y = 75
  143.     self.z = 101
  144.     refresh
  145.   end
  146.   def refresh  
  147.     self.bitmap = Bitmap.new(16, 16)
  148.     self.bitmap.clear
  149.     self.bitmap.blt(0,0,@x,Rect.new(0,0,16,16))
  150.   end
  151.   def update
  152.     if $mouse.in_area?(self.x,self.y,16,16)
  153.       return unless Input.trigger?(Input::Key['Mouse Left'])
  154.       if @index == 0
  155.         $party_manager.remove_party
  156.         $network.party_member(3, "#{$network.index};#{2}")
  157.       elsif @index == $network.index
  158.         $party_manager.remove_party          
  159.         $network.party_member(4, "#{@index}")
  160.       end
  161.     end  
  162.   end  
  163. end
  164. #PARTY INTERACTION
  165. class Party_Interaction < Sprite
  166.   attr_accessor :index
  167.   def initialize
  168.     super()
  169.     @index = 0
  170.     @x = RPG::Cache.picture('PartyInteraction')
  171.     self.x = 8
  172.     self.y = 75
  173.     self.z = 101
  174.   end
  175.   def refresh  
  176.     #self.y = 75 + (38 * $party_manager.members.keys.rindex(@index))    
  177.     self.bitmap = Bitmap.new(16,45)
  178.     self.bitmap.clear
  179.     self.bitmap.blt(0,0,@x,Rect.new(0,28,12,12))
  180.     self.bitmap.blt(0,15,@x,Rect.new(0,40,12,12))
  181.     self.bitmap.blt(0,30,@x,Rect.new(0,16,12,12)) if $party_manager.leader == $network.index
  182.   end
  183.   def update
  184.     if $mouse.in_area?(self.x,self.y,12,12)
  185.       return unless Input.trigger?(Input::Key['Mouse Left'])
  186.       $network.request(1, @index.to_s) unless $game_trade.in_trade
  187.       self.visible = false
  188.     end    
  189.     if $mouse.in_area?(self.x,self.y+15,12,12)
  190.       return unless Input.trigger?(Input::Key['Mouse Left'])
  191.       $windows[:chat].private_box.text = $party_manager.members[@index].name
  192.       $windows[:chat].change_talk(4)      
  193.       self.visible = false
  194.     end    
  195.     if $party_manager.leader == $network.index
  196.       if $mouse.in_area?(self.x,self.y+30,12,12)
  197.         return unless Input.trigger?(Input::Key['Mouse Left'])
  198.         $party_manager.remove_member(@index)
  199.         $network.party_member(3, "#{@index};#{1}")
  200.         self.visible = false
  201.       end
  202.     end
  203.   end  
  204. end
  205. #PARTY MEMBER CLASS
  206. class Party_Member
  207.   attr_accessor :index
  208.   attr_accessor :name
  209.   attr_accessor :maxhp
  210.   attr_accessor :hp
  211.   attr_accessor :maxsp
  212.   attr_accessor :sp
  213.   attr_accessor :lv
  214.   def initialize(index,name,maxhp,hp,maxsp,sp,lv)
  215.     @index = index
  216.     @name = name
  217.     @maxhp = maxhp
  218.     @hp = hp
  219.     @maxsp = maxsp
  220.     @sp = sp
  221.     @lv = lv
  222.   end
  223. end  
  224. # NETWORK
  225. class Network
  226.   def handle_party_member(data)
  227.     data = data.split(';')
  228.     case data[0].to_i
  229.     when 0 #receive party request
  230.       $windows[:choice].open("#{data[2]} "+LMM_Party::INVITE, 2, data[1].to_i)
  231.     when 1 #accept party request
  232.       $windows[:chat].write("#{data[2]} "+LMM_Party::ACCEPT, 6)
  233.       $party_manager.add_member(data[1],data[2],data[3].to_i,data[4].to_i,data[5].to_i,data[6].to_i,data[7].to_i,data[8].to_i)
  234.       #$party_manager.leader = data[8].to_i
  235.       if $party_manager.members.size > 1
  236.        for i in $party_manager.members.keys
  237.           next if i == data[1]
  238.           $network.party_member(6, "#{i};#{data[1]};#{data[2]};#{data[3]};#{data[4]};#{data[5]};#{data[6]};#{data[7]}")
  239.           member = $party_manager.members[i]
  240.           $network.party_member(5, "#{data[1]};#{i};#{member.name};#{member.maxhp};#{member.hp};#{member.maxsp};#{member.sp};#{member.lv}")
  241.         end  
  242.       end  
  243.     when 2 #refuse party request
  244.       $windows[:chat].write("#{data[1]} "+LMM_Party::REFUSE, 5)
  245.     when 3 #remove party member
  246.       if data[1].to_i == 0 #removed self
  247.         $party_manager.remove_party
  248.         $windows[:chat].write("#{data[2]} "+LMM_Party::REMOVE, 5)
  249.       elsif data[1].to_i == 1# removed others
  250.         $party_manager.remove_member(data[2])
  251.         $windows[:chat].write("#{data[3]} "+LMM_Party::EXPEL, 5)  
  252.       elsif data[1].to_i == 2#retired
  253.         $party_manager.remove_member(data[2])
  254.         $windows[:chat].write("#{data[3]} "+LMM_Party::EXIT, 5)
  255.       end
  256.     when 4 #disband party
  257.       $party_manager.remove_party
  258.       $windows[:chat].write("#{data[1]} "+LMM_Party::DISBAND, 5)
  259.     when 5 #request failed
  260.       if data[1].to_i == 0
  261.         $windows[:chat].write(LMM_Party::OTHER, 5)
  262.       else
  263.         $windows[:chat].write(LMM_Party::FULL, 5)
  264.       end  
  265.     when 6 #new party member
  266.       $party_manager.add_member(data[1],data[2],data[3].to_i,data[4].to_i,data[5].to_i,data[6].to_i,data[7].to_i,data[8].to_i)
  267.       $windows[:chat].write("#{data[2]} "+LMM_Party::ENTER, 6)
  268.     end  
  269.   end
  270.   def handle_party_info(data)
  271.     data = data.split(';')
  272.     return unless $party_manager.members.has_key?(data[1])
  273.     if data[0].to_i == 0
  274.       $party_manager.members[data[1]].lv = data[2].to_i
  275.       $party_manager.members[data[1]].maxhp = data[3].to_i
  276.       $party_manager.members[data[1]].maxsp = data[4].to_i
  277.     elsif data[0].to_i == 1
  278.       $party_manager.members[data[1]].hp = data[2].to_i
  279.       $party_manager.members[data[1]].sp = data[3].to_i      
  280.     end  
  281.     $party_manager.update_info(data[1])
  282.   end
  283.   def party_member(type, data)
  284.     @socket.send("#{PACKET_PARTY_MEMBER}#{type};"+data+"\n")
  285.   end  
  286. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement