Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- if defined?(RecordMixer)
- class Mystery_Gift_Gen2
- MAX_GIFTS_DAILY = 5
- MAX_PER_PERSON_DAILY = 1
- COMMON_GIFTS = [
- [:CHESTOBERRY,:RAWSTBERRY],
- [:ASPEARBERRY,:PECHABERRY],
- [:GUARDSPEC,:XDEFENSE],
- [:XATTACK,:PERSIMBERRY],
- [:DIREHIT,:XSPATK],
- [:XACCURACY,:GRASSMAIL],
- [:FLAMEMAIL,:BUBBLEMAIL],
- [:ORANBERRY,:CHERIBERRY]
- ]
- UNCOMMON_GIFTS = [
- [:LUMBERRY,:SITRUSBERRY],
- [:REVIVE,:GREATBALL],
- [:SUPERREPEL,:MAXREPEL],
- [:ELIXIR,:ETHER]
- ]
- RARE_GIFTS = [
- :WATERSTONE,
- :FIRESTONE,
- :LEAFSTONE,
- :THUNDERSTONE,
- :MAXETHER,
- :MAXELIXIR,
- :MAXREVIVE,
- :SCOPELENS
- ]
- VERY_RARE_GIFTS = [:HPUP,:PPUP]
- attr_reader :daily_timer
- attr_reader :gifts_received_today
- attr_reader :current_gift
- attr_reader :current_error
- def initialize
- @daily_timer = Time.now.to_i
- @gifts_received_today = []
- @current_error = 0
- end
- def reset_daily_gifts
- @current_gift = nil
- days = 1
- return if !@daily_timer
- now = Time.now
- elapsed = (now.to_i - @daily_timer) / 86_400
- elapsed += 1 if (now.to_i - @daily_timer) % 86_400 > ((now.hour * 3600) + (now.min * 60) + now.sec)
- return unless elapsed >= days
- @daily_timer = now
- @gifts_received_today = []
- end
- def receive_gift(player_name,player_id,gift)
- @current_gift = [player_name, gift]
- @gifts_received_today.push(sprintf("%s-%d",player_name,player_id))
- end
- def can_receive_gift?(player_name,player_id)
- player_key = sprintf("%s-%d",player_name,player_id)
- @current_error = 0
- if @gifts_received_today.length>=MAX_GIFTS_DAILY
- @current_error = 1
- return false
- elsif @gifts_received_today.select {|g| g == player_key}.length>=MAX_PER_PERSON_DAILY
- @current_error = 2
- return false
- end
- return true
- end
- def self.generate_gift(id)
- r = rand(256)
- if r>=26
- r = rand(8)
- gift = COMMON_GIFTS[r][(id & (1 << r) >> r)]
- return gift
- end
- r = rand(256)
- if r>=51
- r = rand(4)
- bit = [15,8,9,10][r]
- gift = UNCOMMON_GIFTS[r][(id & (1 << bit) >> bit)]
- return gift
- end
- r = rand(256)
- if r>=51
- bit =
- gift = RARE_GIFTS[(id & (0b111<< 12) >> 12)]
- return gift
- end
- gift = VERY_RARE_GIFTS[(id & (1 << 15) >> 15)]
- return gift || :GREATBALL
- end
- end
- class PokemonGlobalMetadata
- def mystery_gift_gen2
- @mystery_gift_gen2 = Mystery_Gift_Gen2.new unless @mystery_gift_gen2
- return @mystery_gift_gen2
- end
- end
- RecordMixer.register(:mystery_gift_gen2,{
- "name" => proc { _INTL("Record Mixer Bonus Item")},
- "prepareData" => proc {
- $PokemonGlobal.mystery_gift_gen2.reset_daily_gifts
- if !$PokemonGlobal.pcItemStorage
- $PokemonGlobal.pcItemStorage = PCItemStorage.new
- end
- },
- "writeData" => proc {|writer|
- player_var = ($player.nil?) ? $Trainer : $player
- writer.str(player_var.name)
- writer.int(player_var.id)
- },
- "parseData" => proc {|record|
- player_name = record.str
- player_id = record.int
- gift = nil
- if $PokemonGlobal.mystery_gift_gen2.can_receive_gift?(player_name,player_id)
- gift = Mystery_Gift_Gen2.generate_gift(player_id)
- end
- $PokemonGlobal.mystery_gift_gen2.receive_gift(player_name,player_id,gift)
- },
- "finalizeData" => proc {
- player_name,gift = $PokemonGlobal.mystery_gift_gen2.current_gift
- case $PokemonGlobal.mystery_gift_gen2.current_error
- when 1
- Kernel.pbMessage(_INTL("Sorry, only {1} gifts a day.\\1",Mystery_Gift_Gen2::MAX_GIFTS_DAILY))
- when 2
- Kernel.pbMessage(_INTL("Sorry, you got all the gifts from {1} for today.\\1",player_name))
- else
- if defined?(GameData)
- gift_name = GameData::Item.get(gift).name
- else
- gift = getID(PBItems,gift)
- gift_name = PBItems.getName(gift)
- end
- Kernel.pbMessage(_INTL("{1} sent {2}.\\1",player_name,gift_name))
- if $PokemonGlobal.pcItemStorage.respond_to?(:can_add?)
- if $PokemonGlobal.pcItemStorage.can_add?(gift)
- $PokemonGlobal.pcItemStorage.add(gift)
- Kernel.pbMessage(_INTL("It was sent to your PC.\\1"))
- else
- Kernel.pbMessage(_INTL("But you have no room for it...\\1"))
- end
- else
- if $PokemonGlobal.pcItemStorage.pbCanStore?(gift)
- $PokemonGlobal.pcItemStorage.pbStoreItem(gift)
- Kernel.pbMessage(_INTL("It was sent to your PC.\\1"))
- else
- Kernel.pbMessage(_INTL("But you have no room for it...\\1"))
- end
- end
- end
- }
- })
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement