Files
infinitefusion-e18/Data/Scripts/053_PIF_Hoenn/TrainerRematches/TrainerRematch_Gifts.rb
T
2026-07-10 15:42:06 -04:00

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