mirror of
https://github.com/infinitefusion/infinitefusion-e18.git
synced 2026-07-21 23:27:00 +00:00
108 lines
3.4 KiB
Ruby
108 lines
3.4 KiB
Ruby
# todo: Also do trainer class specific items.
|
|
# e.g. Rich boy can give luxury ball
|
|
#
|
|
|
|
TRAINER_REMATCH_GIFTS = {
|
|
# 2 tiers of gift.
|
|
# common, rare
|
|
# Odds depend on friendship level
|
|
#
|
|
# [[Tier 1], [Tier 2]]
|
|
:NORMAL => [[:CHILANBERRY, :POTION, :FULLHEAL],
|
|
[:HPUP, :PPUP]],
|
|
:FIGHTING => [[:CHOPLEBERRY,],
|
|
[:IRON, :CALCIUM]],
|
|
:FLYING => [[:COBABERRY, :PRETTYWING,],
|
|
[:RAZORFANG]],
|
|
:POISON => [[:KEBIABERRY, :ANTIDOTE],
|
|
[:POISONBARB,],
|
|
[]],
|
|
:GROUND => [[:SHUCABERRY,],
|
|
[:SOFTSAND,]],
|
|
:ROCK => [[:CHARTIBERRY, :HARDSTONE],
|
|
[:STARDUST, :PROTECTOR]],
|
|
:BUG => [[:TANGABERRY, :HONEY],
|
|
[:BIGMUSHROOM]],
|
|
:GHOST => [[:KASIBBERRY,],
|
|
[:REAPERCLOTH]],
|
|
:STEEL => [[:BABIRIBERRY,],
|
|
[:METALCOAT, :METALPOWDER, :IRON]],
|
|
:FIRE => [[:BURNHEAL, :OCCABERRY],
|
|
[:FIRESTONE, :LAVACOOKIE]],
|
|
:WATER => [[:PASSHOBERRY, :HEARTSCALE, :LUREBALL],
|
|
[:PEARL, :WATERSTONE]],
|
|
:GRASS => [[:RINDOBERRY, :TINYMUSHROOM],
|
|
[:LEAFSTONE]],
|
|
:ELECTRIC => [[:PARLYZHEAL, :WACANBERRY],
|
|
[:THUNDERSTONE]],
|
|
:PSYCHIC => [[:PAYAPABERRY],
|
|
[:MENTALHERB]],
|
|
:ICE => [[:YACHEBERRY, :ICEHEAL],
|
|
[:ICESTONE, :SNOWBALL]],
|
|
:DRAGON => [[:HABANBERRY],
|
|
[:DRAGONSCALE]],
|
|
:DARK => [[:COLBURBERRY],
|
|
[:RAZORCLAW]],
|
|
:FAIRY => [[:ROSELIBERRY],
|
|
[:WHIPPEDDREAM, :MOONSTONE]],
|
|
|
|
:ANY => [:DNASPLICERS, :DNAREVERSER, :REPEL, :POTION, :SUPERPOTION, :GREATBALL, :FRESHWATER]
|
|
}
|
|
|
|
TRAINER_REMATCH_SPECIFIC_GIFTS = {
|
|
:RICHBOY => [[:LUXURYBALL], [:NUGGET]],
|
|
:LADY => [[:LUXURYBALL], [:NUGGET]],
|
|
:GENTLEMAN => [[:LUXURYBALL], [:NUGGET]],
|
|
|
|
:HIKER => [[:TINYMUSHROOM, :REPEL], [:BIGMUSHROOM]],
|
|
:CRUSHGIRL => [[:XSPEED], [:CARBOS]],
|
|
:BLACKBELT => [[:XATTACK], [:PROTEIN]],
|
|
:NURSE => [[:HEALBALL, :SUPERPOTION], [:FULLRESTORE]],
|
|
|
|
:ROCKER => [[:PARLYZHEAL], [:THUNDERSTONE]],
|
|
:SAILOR => [[:LUREBALL], [:PEARL, :WATERSTONE]],
|
|
:FISHERMAN => [[:LUREBALL], [:PEARL, :WATERSTONE]],
|
|
:AROMALADY => [[:PINKNECTAR, :REDNECTAR, :YELLOWNECTAR, :BLUENECTAR], [:LEAFSTONE]],
|
|
:TRIATHLETE_BIKE_F => [[:FRESHWATER], [:FRESHWATER]],
|
|
:TRIATHLETE_BIKE_M => [[:FRESHWATER], [:FRESHWATER]],
|
|
}
|
|
|
|
def should_find_item(trainer)
|
|
base_rate = 30 # percent
|
|
return rand(100) < base_rate
|
|
end
|
|
|
|
def should_give_item(trainer)
|
|
return false unless trainer.friendship_level >= 2
|
|
return false if trainer.inventory.empty?
|
|
base_rate = 30 # percent
|
|
item_chances = base_rate + (trainer.friendship / 10).floor
|
|
return rand(100) < item_chances
|
|
end
|
|
|
|
def find_random_trainer_item(trainer)
|
|
rare_item_chances = 5 + (trainer.friendship / 5).floor
|
|
chance_trainer_class_item = 40
|
|
|
|
giving_rare_item = rand(100) < rare_item_chances
|
|
typed_items = TRAINER_REMATCH_GIFTS[trainer.favorite_type]
|
|
|
|
items_list = typed_items
|
|
items_list[0] += trainer.inventory
|
|
|
|
if TRAINER_REMATCH_SPECIFIC_GIFTS.has_key?(trainer.trainerType) && rand(100) < chance_trainer_class_item
|
|
items_list = TRAINER_REMATCH_GIFTS[trainer.trainerType] if TRAINER_REMATCH_GIFTS[trainer.trainerType]
|
|
end
|
|
if giving_rare_item
|
|
return items_list[1].sample
|
|
else
|
|
items = items_list[0] + TRAINER_REMATCH_GIFTS[:ANY]
|
|
return items.sample
|
|
end
|
|
end
|
|
|
|
def select_gift_item(trainer)
|
|
return nil unless trainer.inventory
|
|
return trainer.inventory.sample
|
|
end
|