Advertisement
Guest User

Untitled

a guest
Apr 22nd, 2011
1,402
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 11.01 KB | None | 0 0
  1. #===============================================================================
  2. #
  3. # Shanghai Simple Script - Friendly Monsters
  4. # Last Date Updated: 2010.06.17
  5. # Level: Normal
  6. #
  7. # This script sets certain monsters to be designated as friendly monsters. These
  8. # monsters will attack other monsters while those monsters will attack them in
  9. # return (almost always so long as they're alive). If the friendly monsters are
  10. # alive when all other monsters are killed, the player gets extra rewards.
  11. #===============================================================================
  12. # Instructions
  13. # -----------------------------------------------------------------------------
  14. # To install this script, open up your script editor and copy/paste this script
  15. # to an open slot below ▼ Materials but above ▼ Main. Remember to save.
  16. #
  17. # <friendly>
  18. # Place this tag into the enemy's notebox to designate that monster type as a
  19. # friendly monster.
  20. #
  21. # <friendly exp: x>
  22. # Place this tag into the enemy's notebox. If the enemy is left alive when the
  23. # battle ends, you gain this much exp from this enemy.
  24. #
  25. # <friendly gold: x>
  26. # Place this tag into the enemy's notebox. If the enemy is left alive when the
  27. # battle ends, you gain this much gold from this enemy.
  28. #
  29. # <friendly i: x>
  30. # <friendly w: x>
  31. # <friendly a: x>
  32. # Place this tag into the enemy's notebox. If the enemy is left alive when the
  33. # battle ends, you gain this item from this enemy. Place multiple if needed.
  34. # Use "i" for item. Use "w" for weapon. Use "a" for armor.
  35. #===============================================================================
  36.  
  37. $imported = {} if $imported == nil
  38. $imported["FriendlyMonsters"] = true
  39.  
  40. #==============================================================================
  41. # RPG::Enemy
  42. #==============================================================================
  43.  
  44. class RPG::Enemy
  45.   #--------------------------------------------------------------------------
  46.   # * Friendly Monster
  47.   #--------------------------------------------------------------------------
  48.   def friendly_monster
  49.     return @friendly_monster if @friendly_monster != nil
  50.     @friendly_monster = false
  51.     self.note.split(/[\r\n]+/).each { |line|
  52.       case line
  53.       when /<(?:FRIENDLY|friendly monster)>/i
  54.         @friendly_monster = true
  55.       end
  56.     }
  57.     return @friendly_monster
  58.   end
  59.   #--------------------------------------------------------------------------
  60.   # * Friendly EXP
  61.   #--------------------------------------------------------------------------
  62.   def friendly_exp
  63.     return @friendly_exp if @friendly_exp != nil
  64.     @friendly_exp = @exp * 2
  65.     self.note.split(/[\r\n]+/).each { |line|
  66.       case line
  67.       when /<(?:FRIENDLY_EXP|friendly exp):[ ](\d+)>/i
  68.         @friendly_exp = $1.to_i
  69.       end
  70.     }
  71.     return @friendly_exp
  72.   end
  73.   #--------------------------------------------------------------------------
  74.   # * Friendly Gold
  75.   #--------------------------------------------------------------------------
  76.   def friendly_gold
  77.     return @friendly_gold if @friendly_gold != nil
  78.     @friendly_gold = @gold * 2
  79.     self.note.split(/[\r\n]+/).each { |line|
  80.       case line
  81.       when /<(?:FRIENDLY_GOLD|friendly gold):[ ](\d+)>/i
  82.         @friendly_gold = $1.to_i
  83.       end
  84.     }
  85.     return @friendly_gold
  86.   end
  87.   #--------------------------------------------------------------------------
  88.   # * Friendly Drops
  89.   #--------------------------------------------------------------------------
  90.   def friendly_drops
  91.     return @friendly_drops if @friendly_drops != nil
  92.     @friendly_drops = []
  93.     self.note.split(/[\r\n]+/).each { |line|
  94.       case line
  95.       when /<(?:FRIENDLY_ITEM|friendly item|friendly i):[ ]*(\d+)>/i
  96.         @friendly_drops.push($data_items[$1.to_i])
  97.       when /<(?:FRIENDLY_WEP|friendly wep|friendly w):[ ]*(\d+)>/i
  98.         @friendly_drops.push($data_weapons[$1.to_i])
  99.       when /<(?:FRIENDLY_ARM|friendly arm|friendly a):[ ]*(\d+)>/i
  100.         @friendly_drops.push($data_armors[$1.to_i])
  101.       end
  102.     }
  103.     return @friendly_drops.compact
  104.   end
  105. end
  106.  
  107. #==============================================================================
  108. # ** Game_Temp
  109. #==============================================================================
  110.  
  111. class Game_Temp
  112.   #--------------------------------------------------------------------------
  113.   # * Public Instance Variables
  114.   #--------------------------------------------------------------------------
  115.   attr_accessor :friendly_monster
  116. end
  117.  
  118. #==============================================================================
  119. # ** Game_Enemy
  120. #==============================================================================
  121.  
  122. class Game_Enemy < Game_Battler
  123.   #--------------------------------------------------------------------------
  124.   # * states
  125.   #--------------------------------------------------------------------------
  126.   def friendly?
  127.     return enemy.friendly_monster
  128.   end
  129.   #--------------------------------------------------------------------------
  130.   # * Create Battle Action
  131.   #--------------------------------------------------------------------------
  132.   alias make_action_sss_friendly_monsters make_action unless $@
  133.   def make_action
  134.     $game_temp.friendly_monster = true
  135.     make_action_sss_friendly_monsters
  136.     $game_temp.friendly_monster = false
  137.   end
  138. end
  139.  
  140. #==============================================================================
  141. # ** Game_BattleAction
  142. #==============================================================================
  143.  
  144. class Game_BattleAction
  145.   #--------------------------------------------------------------------------
  146.   # * Get Allied Units
  147.   #--------------------------------------------------------------------------
  148.   alias friends_unit_sss_friendly_monsters friends_unit unless $@
  149.   def friends_unit
  150.     if !battler.actor? and battler.friendly?
  151.       return $game_party
  152.     else
  153.       return friends_unit_sss_friendly_monsters
  154.     end
  155.   end
  156.   #--------------------------------------------------------------------------
  157.   # * Get Enemy Units
  158.   #--------------------------------------------------------------------------
  159.   alias opponents_unit_sss_friendly_monsters opponents_unit unless $@
  160.   def opponents_unit
  161.     if !battler.actor? and battler.friendly?
  162.       return $game_troop
  163.     else
  164.       return opponents_unit_sss_friendly_monsters
  165.     end
  166.   end
  167.   #--------------------------------------------------------------------------
  168.   # * Create Normal Attack Targets
  169.   #--------------------------------------------------------------------------
  170.   alias make_attack_targets_sss_friendly_monsters make_attack_targets unless $@
  171.   def make_attack_targets
  172.     $game_temp.friendly_monster = true if !battler.actor?
  173.     result = make_attack_targets_sss_friendly_monsters
  174.     $game_temp.friendly_monster = false
  175.     return result
  176.   end
  177.   #--------------------------------------------------------------------------
  178.   # * Create Normal Attack Targets
  179.   #--------------------------------------------------------------------------
  180.   alias make_obj_targets_sss_friendly_monsters make_obj_targets unless $@
  181.   def make_obj_targets(obj)
  182.     $game_temp.friendly_monster = true if !battler.actor?
  183.     result = make_obj_targets_sss_friendly_monsters(obj)
  184.     $game_temp.friendly_monster = false
  185.     return result
  186.   end
  187. end
  188.  
  189. #==============================================================================
  190. # ** Game_Troop
  191. #==============================================================================
  192.  
  193. class Game_Troop < Game_Unit
  194.   #--------------------------------------------------------------------------
  195.   # * Members
  196.   #--------------------------------------------------------------------------
  197.   alias members_troop_sss_friendly_monsters members unless $@
  198.   def members
  199.     result = members_troop_sss_friendly_monsters
  200.     result -= $game_troop.friendlies if $game_temp.friendly_monster
  201.     return result
  202.   end
  203.   #--------------------------------------------------------------------------
  204.   # * Friendlies
  205.   #--------------------------------------------------------------------------
  206.   def friendlies
  207.     result = []
  208.     for member in members_troop_sss_friendly_monsters
  209.       result.push(member) if member.friendly?
  210.     end
  211.     return result.compact
  212.   end
  213.   #--------------------------------------------------------------------------
  214.   # * Friendlies Alive?
  215.   #--------------------------------------------------------------------------
  216.   def friendlies_alive?
  217.     for member in friendlies
  218.       return true unless member.dead?
  219.     end
  220.     return false
  221.   end
  222.   #--------------------------------------------------------------------------
  223.   # * Determine Everyone is Dead
  224.   #--------------------------------------------------------------------------
  225.   def all_dead?
  226.     n = existing_members
  227.     n -= $game_troop.friendlies
  228.     return n.empty?
  229.   end
  230.   #--------------------------------------------------------------------------
  231.   # * Calculate Total Experience
  232.   #--------------------------------------------------------------------------
  233.   alias exp_total_sss_friendly_monsters exp_total unless $@
  234.   def exp_total
  235.     n = exp_total_sss_friendly_monsters
  236.     for member in $game_troop.friendlies
  237.       next if member.dead?
  238.       n += member.enemy.friendly_exp
  239.     end
  240.     return n
  241.   end
  242.   #--------------------------------------------------------------------------
  243.   # * Calculate Total Gold
  244.   #--------------------------------------------------------------------------
  245.   alias gold_total_sss_friendly_monsters gold_total unless $@
  246.   def gold_total
  247.     n = gold_total_sss_friendly_monsters
  248.     for member in $game_troop.friendlies
  249.       next if member.dead?
  250.       n += member.enemy.friendly_exp
  251.     end
  252.     return n
  253.   end
  254.   #--------------------------------------------------------------------------
  255.   # * Create Array of Dropped Items
  256.   #--------------------------------------------------------------------------
  257.   alias make_drop_items_sss_friendly_monsters make_drop_items unless $@
  258.   def make_drop_items
  259.     n = make_drop_items_sss_friendly_monsters
  260.     for member in $game_troop.friendlies
  261.       next if member.dead?
  262.       n += member.enemy.friendly_drops
  263.     end
  264.     return n
  265.   end
  266. end
  267.  
  268. #==============================================================================
  269. # ** Game_Party
  270. #==============================================================================
  271.  
  272. class Game_Party < Game_Unit
  273.   #--------------------------------------------------------------------------
  274.   # * Members
  275.   #--------------------------------------------------------------------------
  276.   alias members_party_sss_friendly_monsters members unless $@
  277.   def members
  278.     result = members_party_sss_friendly_monsters
  279.     if $game_temp.friendly_monster and $game_troop.friendlies_alive?
  280.       return $game_troop.friendlies
  281.     end
  282.     return result
  283.   end
  284. end
  285.  
  286. #===============================================================================
  287. #
  288. # END OF FILE
  289. #
  290. #===============================================================================
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement