Advertisement
marlosgama

Untitled

Jul 23rd, 2019
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 5.55 KB | None | 0 0
  1. #==============================================================================
  2. # ** Game_Trade
  3. #------------------------------------------------------------------------------
  4. #  Este módulo lida com a troca.
  5. #------------------------------------------------------------------------------
  6. #  Autor: Valentine
  7. #==============================================================================
  8.  
  9. module Game_Trade
  10.  
  11.   attr_reader   :trade_items
  12.   attr_reader   :trade_weapons
  13.   attr_reader   :trade_armors
  14.   attr_reader   :trade_gold
  15.   attr_accessor :trade_player_id
  16.  
  17.   def init_trade
  18.     @trade_player_id = -1
  19.     @trade_items = {}
  20.     @trade_weapons = {}
  21.     @trade_armors = {}
  22.     @trade_gold = 0
  23.   end
  24.  
  25.   def open_trade
  26.     return unless $server.clients[@request.id]&.in_game?
  27.     return unless @map_id == $server.clients[@request.id].map_id
  28.     return if $server.clients[@request.id].in_trade? || $server.clients[@request.id].in_shop? || $server.clients[@request.id].in_bank?
  29.     return if in_trade? || in_shop? || in_bank?
  30.     @trade_player_id = @request.id
  31.     $server.clients[@trade_player_id].trade_player_id = @id
  32.     $server.send_accept_request(self, @request.type)
  33.     $server.send_accept_request($server.clients[@trade_player_id], @request.type)
  34.   end
  35.  
  36.   def close_trade
  37.     return unless in_trade?
  38.     $server.send_close_trade(self)
  39.     $server.send_close_trade($server.clients[@trade_player_id])
  40.     $server.clients[@trade_player_id].clear_trade_items
  41.     clear_trade_items
  42.   end
  43.  
  44.   def clear_trade_items
  45.     @trade_player_id = -1
  46.     @trade_items.clear
  47.     @trade_weapons.clear
  48.     @trade_armors.clear
  49.     @trade_gold = 0
  50.   end
  51.  
  52.   def close_trade_request
  53.     return unless @request.type == Constants::REQUEST_FINISH_TRADE
  54.     clear_request
  55.   end
  56.  
  57.   def trade_item_container(kind)
  58.     return @trade_items if kind == 1
  59.     return @trade_weapons if kind == 2
  60.     return @trade_armors if kind == 3
  61.     return nil
  62.   end
  63.  
  64.   def trade_item_number(container)
  65.     container || 0
  66.   end
  67.  
  68.   def has_trade_item?(item)
  69.     trade_item_number(item) > 0
  70.   end
  71.  
  72.   def full_trade?(item)
  73.     size = @trade_items.size + @trade_weapons.size + @trade_armors.size
  74.     size == Configs::MAX_TRADE_ITEMS && !has_trade_item?(item)
  75.   end
  76.  
  77.   def gain_trade_item(item_id, kind, amount)
  78.     container = trade_item_container(kind)
  79.     return unless container
  80.     last_number = trade_item_number(container[item_id])
  81.     new_number = last_number + amount
  82.     container[item_id] = [[new_number, 0].max, Configs::MAX_ITEMS].min
  83.     container.delete(item_id) if container[item_id] == 0
  84.     $server.send_trade_item(self, @id, item_id, kind, amount)
  85.     $server.send_trade_item($server.clients[@trade_player_id], @id, item_id, kind, amount)
  86.   end
  87.  
  88.   def lose_trade_item(item, amount)
  89.     gain_trade_item(item.id, kind_item(item), -amount)
  90.   end
  91.  
  92.   def gain_trade_gold(amount)
  93.     @trade_gold = [[@trade_gold + amount, 0].max, Configs::MAX_GOLD].min
  94.     $server.send_trade_gold(self, @id, amount)
  95.     $server.send_trade_gold($server.clients[@trade_player_id], @id, amount)
  96.   end
  97.  
  98.   def finish_trade
  99.     # Se o pedido foi aceito quando a troca já havia sido cancelada ou nunca existiu
  100.     return unless in_trade?
  101.     @trade_items.each do |item_id, amount|
  102.       item = $data_items[item_id]
  103.       unless $server.clients[@trade_player_id].full_inventory?(item)
  104.         amount = [amount, Configs::MAX_ITEMS - $server.clients[@trade_player_id].item_number(item)].min
  105.         lose_item(item, amount)
  106.         $server.clients[@trade_player_id].gain_item(item, amount)
  107.       end
  108.     end
  109.     @trade_weapons.each do |weapon_id, amount|
  110.       weapon = $data_weapons[weapon_id]
  111.       unless $server.clients[@trade_player_id].full_inventory?(weapon)
  112.         amount = [amount, Configs::MAX_ITEMS - $server.clients[@trade_player_id].item_number(weapon)].min
  113.         lose_item(weapon, amount)
  114.         $server.clients[@trade_player_id].gain_item(weapon, amount)
  115.       end
  116.     end
  117.     @trade_armors.each do |armor_id, amount|
  118.       armor = $data_armors[armor_id]
  119.       unless $server.clients[@trade_player_id].full_inventory?(armor)
  120.         amount = [amount, Configs::MAX_ITEMS - $server.clients[@trade_player_id].item_number(armor)].min
  121.         lose_item(armor, amount)
  122.         $server.clients[@trade_player_id].gain_item(armor, amount)
  123.       end
  124.     end
  125.     $server.clients[@trade_player_id].trade_items.each do |item_id, amount|
  126.       item = $data_items[item_id]
  127.       unless full_inventory?(item)
  128.         amount = [amount, Configs::MAX_ITEMS - item_number(item)].min
  129.         gain_item(item, amount)
  130.         $server.clients[@trade_player_id].lose_item(item, amount)
  131.       end
  132.     end
  133.     $server.clients[@trade_player_id].trade_weapons.each do |weapon_id, amount|
  134.       weapon = $data_weapons[weapon_id]
  135.       unless full_inventory?(weapon)
  136.         amount = [amount, Configs::MAX_ITEMS - item_number(weapon)].min
  137.         gain_item(weapon, amount)
  138.         $server.clients[@trade_player_id].lose_item(weapon, amount)
  139.       end
  140.     end
  141.     $server.clients[@trade_player_id].trade_armors.each do |armor_id, amount|
  142.       armor = $data_armors[armor_id]
  143.       unless full_inventory?(armor)
  144.         amount = [amount, Configs::MAX_ITEMS - item_number(armor)].min
  145.         gain_item(armor, amount)
  146.         $server.clients[@trade_player_id].lose_item(armor, amount)
  147.       end
  148.     end
  149.     gain_gold($server.clients[@trade_player_id].trade_gold - @trade_gold)
  150.     $server.clients[@trade_player_id].gain_gold(@trade_gold - $server.clients[@trade_player_id].trade_gold)
  151.     close_trade
  152.   end
  153.  
  154. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement