Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # LM² - Party 1.0
- # Data 03/09/17
- # Criado por LeonMM
- # MÓDULO DE CONFIGURAÇÃO
- module LMM_Party
- MAX_MEMBERS = 5
- PARTY = "Grupo"
- INVITE = "convida você para um grupo."
- ACCEPT = "aceitou o convite."
- REFUSE = "recusou o convite."
- REMOVE = "retirou você do grupo."
- EXPEL = "foi retirado do grupo."
- EXIT = "retirou-se do grupo."
- DISBAND = "desbandou o grupo."
- OTHER = "O jogador está em outra Party."
- FULL = "Seu grupo está cheio!"
- ENTER = "entrou no grupo."
- ALREADY = "já está em seu grupo."
- end
- # PARTY MANAGER
- class Party_Manager
- attr_accessor :partys
- attr_accessor :members
- attr_accessor :leader
- attr_accessor :inter
- def initialize
- @do_update = false
- @partys = {}
- @members = {}
- @leader = 0
- @inter = Party_Interaction.new
- @inter.visible = false
- @X = nil
- end
- def add_member(index,name,maxhp,hp,maxsp,sp,lv,leader)
- @do_update = true
- @leader = leader if @leader == 0
- @members[index] = Party_Member.new(index,name,maxhp,hp,maxsp,sp,lv)
- @partys[index] = Sprite_Member.new(@members[index])
- if @members.size == 1
- @X = Sprite_X.new(@leader)
- end
- end
- def remove_member(index)
- return unless @members[index] != nil
- @partys[index].dispose
- @partys.delete(index)
- @members.delete(index)
- if @leader == $network.index
- if @members == {}
- @do_update = false
- remove_party
- end
- end
- @inter.visible = false if @inter.index == index
- if @members != {}
- pos = 0
- for i in @partys.keys
- @partys[i].reposition(pos)
- if @inter.visible
- @inter.y = @partys[i].y if @inter.index == i
- end
- pos += 1
- end
- end
- end
- def update_info(index)
- @partys[index].refresh
- end
- def remove_party
- @do_update = false
- for i in @partys.keys
- @partys[i].dispose
- @partys.delete(i)
- end
- @partys = {}
- for i in @members.keys
- @members.delete(i)
- end
- @members = {}
- @X.dispose
- @X = nil
- @inter.visible = false
- @leader = 0
- end
- def update
- if @do_update
- @X.update if @X != nil
- @inter.update if @inter.visible
- if @members != {}
- for i in @partys.keys
- @partys[i].update
- end
- end
- end
- end
- end
- #MEMBER SPRITE
- class Sprite_Member < Sprite
- def initialize(member)
- super()
- self.y = 75 + (38 * ($party_manager.members.size-1))
- self.x = 18
- self.z = 100
- @member = member
- @back = RPG::Cache.picture('PartyBackground')
- @bars = RPG::Cache.picture('PartyBars')
- refresh
- end
- def refresh
- self.bitmap = Bitmap.new(112, 34)
- self.bitmap.font.size = 11
- self.bitmap.clear
- self.bitmap.blt(0, 0, @back, Rect.new(0, 0, @back.width, @back.height))
- self.bitmap.blt(0, 15, @bars, Rect.new(0, 0, @bars.width * @member.hp / @member.maxhp, 9))
- self.bitmap.blt(0, 26, @bars, Rect.new(0, 9, @bars.width * @member.sp / @member.maxsp, 9))
- self.bitmap.draw_text(0, 0, 101, 14, "#{@member.name}[#{@member.lv}]", 1)
- end
- def update
- if $mouse.in_area?(self.x,self.y,101,16)
- return unless Input.trigger?(Input::Key['Mouse Left'])
- $party_manager.inter.index = @member.index unless $party_manager.inter.visible
- $party_manager.inter.y = self.y
- $party_manager.inter.refresh
- if $party_manager.inter.index == @member.index or $party_manager.inter.index == 0
- $party_manager.inter.visible = !$party_manager.inter.visible
- end
- $party_manager.inter.index = @member.index
- end
- end
- def reposition(index)
- self.y = 75 + (38 * index)
- end
- end
- #X SPRITE
- class Sprite_X < Sprite
- def initialize(index)
- super()
- @index = index
- @x = RPG::Cache.picture('PartyInteraction')
- self.x = 121
- self.y = 75
- self.z = 101
- refresh
- end
- def refresh
- self.bitmap = Bitmap.new(16, 16)
- self.bitmap.clear
- self.bitmap.blt(0,0,@x,Rect.new(0,0,16,16))
- end
- def update
- if $mouse.in_area?(self.x,self.y,16,16)
- return unless Input.trigger?(Input::Key['Mouse Left'])
- if @index == 0
- $party_manager.remove_party
- $network.party_member(3, "#{$network.index};#{2}")
- elsif @index == $network.index
- $party_manager.remove_party
- $network.party_member(4, "#{@index}")
- end
- end
- end
- end
- #PARTY INTERACTION
- class Party_Interaction < Sprite
- attr_accessor :index
- def initialize
- super()
- @index = 0
- @x = RPG::Cache.picture('PartyInteraction')
- self.x = 8
- self.y = 75
- self.z = 101
- end
- def refresh
- #self.y = 75 + (38 * $party_manager.members.keys.rindex(@index))
- self.bitmap = Bitmap.new(16,45)
- self.bitmap.clear
- self.bitmap.blt(0,0,@x,Rect.new(0,28,12,12))
- self.bitmap.blt(0,15,@x,Rect.new(0,40,12,12))
- self.bitmap.blt(0,30,@x,Rect.new(0,16,12,12)) if $party_manager.leader == $network.index
- end
- def update
- if $mouse.in_area?(self.x,self.y,12,12)
- return unless Input.trigger?(Input::Key['Mouse Left'])
- $network.request(1, @index.to_s) unless $game_trade.in_trade
- self.visible = false
- end
- if $mouse.in_area?(self.x,self.y+15,12,12)
- return unless Input.trigger?(Input::Key['Mouse Left'])
- $windows[:chat].private_box.text = $party_manager.members[@index].name
- $windows[:chat].change_talk(4)
- self.visible = false
- end
- if $party_manager.leader == $network.index
- if $mouse.in_area?(self.x,self.y+30,12,12)
- return unless Input.trigger?(Input::Key['Mouse Left'])
- $party_manager.remove_member(@index)
- $network.party_member(3, "#{@index};#{1}")
- self.visible = false
- end
- end
- end
- end
- #PARTY MEMBER CLASS
- class Party_Member
- attr_accessor :index
- attr_accessor :name
- attr_accessor :maxhp
- attr_accessor :hp
- attr_accessor :maxsp
- attr_accessor :sp
- attr_accessor :lv
- def initialize(index,name,maxhp,hp,maxsp,sp,lv)
- @index = index
- @name = name
- @maxhp = maxhp
- @hp = hp
- @maxsp = maxsp
- @sp = sp
- @lv = lv
- end
- end
- # NETWORK
- class Network
- def handle_party_member(data)
- data = data.split(';')
- case data[0].to_i
- when 0 #receive party request
- $windows[:choice].open("#{data[2]} "+LMM_Party::INVITE, 2, data[1].to_i)
- when 1 #accept party request
- $windows[:chat].write("#{data[2]} "+LMM_Party::ACCEPT, 6)
- $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)
- #$party_manager.leader = data[8].to_i
- if $party_manager.members.size > 1
- for i in $party_manager.members.keys
- next if i == data[1]
- $network.party_member(6, "#{i};#{data[1]};#{data[2]};#{data[3]};#{data[4]};#{data[5]};#{data[6]};#{data[7]}")
- member = $party_manager.members[i]
- $network.party_member(5, "#{data[1]};#{i};#{member.name};#{member.maxhp};#{member.hp};#{member.maxsp};#{member.sp};#{member.lv}")
- end
- end
- when 2 #refuse party request
- $windows[:chat].write("#{data[1]} "+LMM_Party::REFUSE, 5)
- when 3 #remove party member
- if data[1].to_i == 0 #removed self
- $party_manager.remove_party
- $windows[:chat].write("#{data[2]} "+LMM_Party::REMOVE, 5)
- elsif data[1].to_i == 1# removed others
- $party_manager.remove_member(data[2])
- $windows[:chat].write("#{data[3]} "+LMM_Party::EXPEL, 5)
- elsif data[1].to_i == 2#retired
- $party_manager.remove_member(data[2])
- $windows[:chat].write("#{data[3]} "+LMM_Party::EXIT, 5)
- end
- when 4 #disband party
- $party_manager.remove_party
- $windows[:chat].write("#{data[1]} "+LMM_Party::DISBAND, 5)
- when 5 #request failed
- if data[1].to_i == 0
- $windows[:chat].write(LMM_Party::OTHER, 5)
- else
- $windows[:chat].write(LMM_Party::FULL, 5)
- end
- when 6 #new party member
- $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)
- $windows[:chat].write("#{data[2]} "+LMM_Party::ENTER, 6)
- end
- end
- def handle_party_info(data)
- data = data.split(';')
- return unless $party_manager.members.has_key?(data[1])
- if data[0].to_i == 0
- $party_manager.members[data[1]].lv = data[2].to_i
- $party_manager.members[data[1]].maxhp = data[3].to_i
- $party_manager.members[data[1]].maxsp = data[4].to_i
- elsif data[0].to_i == 1
- $party_manager.members[data[1]].hp = data[2].to_i
- $party_manager.members[data[1]].sp = data[3].to_i
- end
- $party_manager.update_info(data[1])
- end
- def party_member(type, data)
- @socket.send("#{PACKET_PARTY_MEMBER}#{type};"+data+"\n")
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement