Advertisement
Pumamori

Hime's Synchronized Battlers - German Version

May 28th, 2015
687
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 9.63 KB | None | 0 0
  1. =begin
  2. #===============================================================================
  3.  Titel: Synchronized Battlers
  4.  Autor: Hime
  5.  Übersetzung: Puma
  6.  Datum: Nov 13, 2013
  7.  URL: http://himeworks.com/2013/11/10/synchronized-battlers/
  8. --------------------------------------------------------------------------------
  9.  ** Change log
  10.  Nov 13, 2013
  11.   - actor sync und link eingebaut
  12.  Nov 12, 2013
  13.   - sync link object eingeführt
  14.   - "sync_death" hinzugefügt, wenn Gegner durch sync death sterben
  15.  Nov 10, 2013
  16.   - ursprünglicher release
  17. --------------------------------------------------------------------------------  
  18.  ** Nutzungsbedingungen
  19.  * Kostenlos für nicht-kommerzielle Projekte
  20.  * Kontaktiert mich für kommerzielle Nutzung
  21.  * Keine richtige Unterstützung. Das Skript wird so wie es ist zur Verfügung gestellt
  22.  * Bugs werden behoben, aber keine Kompatibilitätsprobleme
  23.  * Nach Features kann gefragt werden, aber es gibt keine Garantie, dass sie auch
  24.    umgesetzt werden, besonders bei unnötigen Änderungen
  25.  * Credits gehen in eurem Projekt an Hime Works
  26.  * Dieser Teil muss erhalten bleiben
  27. --------------------------------------------------------------------------------
  28.  ** Beschreibung
  29.  
  30.  Dieses Skript erlaubt es euch, Monster aneinanderzuketten, oder zu "verbinden".
  31.  Verbundene Monster können spezielle Eigenschaften miteinander teilen, die die
  32.  regulären nicht haben.
  33.  
  34.  Verbindungen folgen einer Elternteil-Kind Beziehung. Stirbt der Elternteil, stirbt
  35.  auch das Kind. Stirbt aber das Kind, passiert nichts mit dem Elternteil. Ihr könnt
  36.  eine zweiseitige Beziehung erstellen, so das auch wenn das Kind fällt, beide Teile
  37.  sterben.
  38.  
  39.  Angenommen, ihr habt eine Hydra, die aus drei Köpfen und einem Körper besteht. Wenn
  40.  ihr einen Kopf tötet, sind die anderen Köpfe und der Körper nicht davon betroffen,
  41.  tötet ihr aber den Körper, werden auch die ganzen Köpfe absterben. Der Körper der
  42.  Hydra ist der Elternteil, jeder Kopf ein Kind.
  43.  
  44. --------------------------------------------------------------------------------
  45.  ** Installation
  46.  
  47.  Platziert das Skript im Skripteditor unter Materials und über Main.
  48.  
  49. --------------------------------------------------------------------------------
  50.  ** Nutzung
  51.  
  52.  -- Gegner verbinden --
  53.  
  54.  Um zwei Gegner zu verbinden, macht folgenden Script Call
  55.  
  56.    link_enemy(child_index, parent_index)
  57.    link_enemy(child_index, parent_index, two_way)
  58.    
  59.  Wobei index immer der Reihenfolge der hinzugefügten Gegner entspricht. Ihr könnt
  60.  diesen index auch sehen, indem ihr euch bei den "enemy battle" Event Commands wie
  61.  "Change Enemy HP" die Liste anschaut. Der index steht vor dem Gegner Namen.
  62.  
  63.  `two_way` ist entweder true "wahr" oder false "falsch" und wird genutzt um eine
  64.  Doppelbeziehung zwischen Elternteil und Kind herzustellen.
  65.  
  66.  -- Gegnerbindungen trennen --
  67.  
  68.  Um zwei Gegnerbindungen zu trennen, nutzt ihr folgenden Script Call
  69.  
  70.    unlink_enemy(child_index, parent_index)
  71.    
  72.  Das bricht jegliche Beziehung, auch wenn sie eine doppelte war.
  73.  
  74.  -- Actors "Helden" verbinden --
  75.  
  76.  Um zwei Gruppenmitglieder zu verbinden, nutzt ihr
  77.  
  78.    link_actor(child_index, parent_index)
  79.    link_actor(child_index, parent_index, two_way)
  80.    
  81.  Wobei index entweder eine positive Zahl ist, die der actor ID entspricht,
  82.  oder eine negative, die der Stellung im Kampf entspricht. Zum Beispiel
  83.  würde ein index von 3 actor 3 in der Datenbank heißen, aber ein Index von
  84.  -3 würde das Gruppenmitglied in der dritten Position treffen.
  85.  
  86.  -- Actorbindungen trennen --
  87.  
  88.  Um zwei Gruppenmitglieder zu trennen, könnt ihr folgenden Script Call benutzen
  89.  
  90.    unlink_actor(child_index, parent_index)
  91.    
  92.  -- Kämpfer verbinden --
  93.  
  94.  Ihr könnt sogar Gruppenmitglieder an Gegner oder umgekehrt binden. Diesmal
  95.  müsst ihr aber im Gegensatz zu den vorherigen Calls Objekte nutzen.
  96.  
  97.  Es gibt zwei Methoden die es euch einfach machen:
  98.  
  99.    get_actor(index) - gibt ein Gruppenmitglied mit dem gegebenen Index aus
  100.    get_enemy(index) - gibt einen Gegner mit dem gegebenen Index aus
  101.  
  102.  Die index-Regeln sind die gleichen wie zuvor. Habt ihr nun also einen Gegner
  103.  und ein Gruppenmitglied, könnt ihr sie folgendermaßen verbinden
  104.  
  105.    actor = get_actor(-2)
  106.    enemy = get_enemy(3)
  107.    link_battler(actor, enemy)
  108.    
  109.  Das verbindet das Gruppenmitglied mit dem Gegner, wobei das Gruppenmitglied
  110.  das Kind ist.
  111.  
  112. --------------------------------------------------------------------------------
  113.  ** Beispiel
  114.  
  115.  Um das Hydra-Beispiel einzustellen, würdet ihr eine Truppe erstellen, die aus
  116.  dem Körper der Hydra und drei ihrer Köpfe besteht. Nehmen wir an, der Körper
  117.  hat den Index 1 und die Köpfe 2,3 und 4.
  118.  
  119.  Dann würdet ihr zu Beginn des Kampfes den folgenden Script Call machen
  120.  
  121.    link_enemy(2, 1)  # verbindet den ersten Kopf mit dem Körper
  122.    link_enemy(3, 1)  # verbindet den zweiten Kopf mit dem Körper
  123.    link_enemy(4, 1)  # verbindet den dritten Kopf mit dem Körper
  124.    
  125.  Stirbt nun der Körper, sterben alle drei Köpfe mit ihm.
  126.  
  127. #===============================================================================
  128. =end
  129. $imported = {} if $imported.nil?
  130. $imported["TH_SynchronizedBattlers"] = true
  131. #===============================================================================
  132. # ** Rest des Skripts.
  133. #===============================================================================
  134. class Data_SyncLink
  135.  
  136.   attr_reader :parent
  137.   attr_reader :child
  138.  
  139.   def initialize(parent, child, two_way=false)
  140.     @parent = parent
  141.     @child = child
  142.     @two_way = two_way
  143.   end
  144.  
  145.   #-----------------------------------------------------------------------------
  146.   # Returns true if it's a two-way link.
  147.   #-----------------------------------------------------------------------------
  148.   def two_way?
  149.     @two_way
  150.   end
  151. end
  152.  
  153. class Game_BattlerBase
  154.   attr_reader :sync_check
  155.   attr_accessor :sync_death
  156.   attr_reader :sync_links
  157.  
  158.   alias :th_synchronized_battlers_initialize :initialize
  159.   def initialize
  160.     th_synchronized_battlers_initialize
  161.     @sync_parent = nil
  162.     clear_sync_links
  163.     clear_sync_check
  164.   end
  165.  
  166.   #-----------------------------------------------------------------------------
  167.   # Hack workaround.
  168.   #-----------------------------------------------------------------------------
  169.   alias :th_sync_effects_refresh :refresh
  170.   def refresh
  171.     th_sync_effects_refresh
  172.     perform_collapse_effect if dead?
  173.   end
  174.  
  175.   def clear_sync_links
  176.     @sync_links = []
  177.   end
  178.  
  179.   def clear_sync_check
  180.     @sync_check = false
  181.   end
  182.  
  183.   def sync_battler?
  184.     !@sync_links.empty?
  185.   end
  186.  
  187.   def sync_death?
  188.     @sync_death
  189.   end
  190.  
  191.   def link_battler(battler, two_way)
  192.     @sync_check = true
  193.     syncLink = Data_SyncLink.new(self, battler, two_way)
  194.     @sync_links.push(syncLink)
  195.     battler.link_battler(self, two_way) if two_way && !battler.sync_check
  196.     @sync_check = false
  197.   end
  198.  
  199.   def unlink_battler(battler)
  200.     @sync_check = true
  201.     syncLink = @sync_links.find {|link| link.child == battler }
  202.     if syncLink
  203.       @sync_links.delete(syncLink)
  204.       battler.unlink_battler(self) if syncLink.two_way? && !battler.sync_check
  205.     end
  206.     @sync_check = false  
  207.   end
  208.  
  209.   #-----------------------------------------------------------------------------
  210.   #
  211.   #-----------------------------------------------------------------------------
  212.   def perform_sync_collapse(battler)
  213.     battler.sync_death = true
  214.     battler.hp = 0
  215.     battler.perform_collapse_effect
  216.   end
  217. end
  218.  
  219. class Game_Enemy < Game_Battler
  220.  
  221.   alias :th_synchronized_battlers_perform_collapse_effect :perform_collapse_effect
  222.   def perform_collapse_effect
  223.     @sync_check = true
  224.     th_synchronized_battlers_perform_collapse_effect
  225.     @sync_links.each do |syncLink|
  226.       battler = syncLink.child
  227.       perform_sync_collapse(battler) unless battler.sync_check || battler.dead?
  228.     end
  229.     @sync_check = false
  230.   end
  231. end
  232.  
  233. class Game_Actor < Game_Battler
  234.  
  235.   alias :th_synchronized_battlers_perform_collapse_effect :perform_collapse_effect
  236.   def perform_collapse_effect
  237.     @sync_check = true
  238.     th_synchronized_battlers_perform_collapse_effect
  239.     @sync_links.each do |syncLink|
  240.       battler = syncLink.child
  241.       perform_sync_collapse(battler) unless battler.sync_check || battler.dead?
  242.     end
  243.     @sync_check = false
  244.   end
  245. end
  246.  
  247. class Game_Interpreter
  248.  
  249.   def get_enemy(index)
  250.     return $game_troop.members[index-1]
  251.   end
  252.  
  253.   def get_actor(index)
  254.     if index < 0
  255.       return $game_party.members[index * -1]
  256.     else
  257.       return $game_actors[index]
  258.     end
  259.   end
  260.  
  261.   #-----------------------------------------------------------------------------
  262.   # Links a child enemy to another enemy
  263.   #-----------------------------------------------------------------------------
  264.   def link_enemy(child_index, parent_index, two_way=false)
  265.     parent = get_enemy(parent_index)
  266.     child = get_enemy(child_index)
  267.     parent.link_battler(child, two_way)
  268.   end
  269.  
  270.   def unlink_enemy(child_index, parent_index, two_way=false)
  271.     parent = get_enemy(parent_index)
  272.     child = get_enemy(child_index)
  273.     parent.unlink_battler(child, two_way)
  274.   end
  275.  
  276.   def link_actor(child_index, parent_index, two_way=false)
  277.     parent = get_actor(parent_index)
  278.     child = get_actor(child_index)
  279.     parent.link_battler(child, two_way)
  280.   end
  281.  
  282.   def unlink_actor(child_index, parent_index)
  283.     parent = get_actor(parent_index)
  284.     child = get_actor(child_index)
  285.     parent.unlink_battler(child)
  286.   end
  287.  
  288.   def link_battler(child, parent, two_way=false)
  289.     parent.link_battler(child, two_way)
  290.   end
  291.  
  292.   def unlink_battler(child, parent)
  293.     parent.unlink_battler(child)
  294.   end
  295. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement