Itemeffekte
Dieser Artikel beschreibt, wie Item-Effekte definiert sind.
Weiterführende Links |
|
Inhalt |
Wege ein Item zu benutzen
Die meisten Items haben einen Effekt. Ein Trank stellt z.B 20 KP wieder her. Die Effekte werden im Scripts geschrieben, verteilt an verschiedenen Plätzen, je nach Item und wie sie benutzt wird (z.B vom Beutel, im Kampf, als registriertes Item, usw.). Dieser Bereich beschreibt die verschiedenen Wege, wie ein Item benutzt werden kann und wie man Itemeffekte allgemein erstellt. Siehe unten für passive Effekte (z.B getragene Items), Pokébälle usw.
Der Script-Bereich PItem_ItemEffects enthält alle Itemeffekte für Items, die aktiv genutzt werden. Da es verschiedene Wege gibt, wie ein Item benutzt werden kann, gibt es auch verschiedene Handler, eines für jede Methode. Es gibt sechs solcher Handler:
Handler | Beschreibung |
UseFromBag | Wenn das Item aus dem Beutel verwendet wird, jedoch nicht an einem Pokémon. Wird typischerweise für Fluchtseile, Schutz, alle Basis-Items und weitere benutzt.
Gibt eines der folgenden Zahlen zurück:
|
UseOnPokemon | Für Items, die auf einem bestimmten Pokémon angewendet werden sollen (welches der Spieler wählen kann). Das beinhaltet Tränke, Beleber, Äther, Entwicklungssteine usw.
Gibt true zurück, wenn das Item verwendet wurde und false, wenn nicht. |
UseInField | Für Items, bei den der Beutel-Bildschirm geschlossen werden muss, damit das Item benutzt wird oder für registrierte Items. Für Fluchtseil und manche Basis-Items. Basis-Item, die dieses Verhalten nicht haben, können nicht registriert werden. |
BattleUseOnPokemon | Für Items, die während eines Kampfes auf einem bestimmten Pokémon angewendet werden soll (welches der Spieler wählen kann). Ist für fast alle Items, die auch einen UseOnPokemon-Handler besitzen (außer die, die nicht während eines Kampfes benutzt werden können), sowie Items, die Anziehung/Verwirrung heilen (Statusprobleme, die nur während des Kampfes gültig sind).
Gibt true zurück, wenn das Item benutzt wurde und false, wenn nicht. |
BattleUseOnBattler | Für Items, die an einem Pokémon angewendet werden können, welches sich gerade im Kampf befindet (welches man dann auswählt). Für X-Angriff und weitere, sowie für Pokébälle (um zu entscheiden, ob es benutzt werden kann).
Gibt true zurück, wenn das Item benutzt wurde und false, wenn nicht. |
UseInBattle | Wenn das Item im Kampf verwendet wird, jedoch nicht an einem Pokémon direkt. Für die Poképuppe (automatische Flucht vom Kampf), Pokéflöte (wirkt sich auf alle Kämpfer aus) und alle Pokébälle (leitet den Fangprozess ein). |
Viele Items können in mehr Situationen verwendet werden, als die oben erwähnten. Der Effekt des Items muss für jeden Handler separat geschrieben werden (z.B hat Trank einen definierten Effekt für UseOnPokemon und BattleUseOnPokemon). Viele Items haben für für jeden Handler denselben Effekt, jedoch gibt es auch Ausnahmen (z.B Angel oder andere Basis-Items). Wenn man sich unsicher ist, sollte man sich bereits vorhandene Items anschauen, welche einen ähnlichen Effekt haben, um zu sehen, welche Handler man verwenden muss und welcher Handler was macht.
Beachte, dass immer wenn sich auf ein Item bezogen wird, dies mit einem Doppelpunkt geschehen muss. Dieser ist wichtig.
Beispiele
1 2 3 |
ItemHandlers::UseOnPokemon.add(:POTION,proc{|item,pokemon,scene| next pbHPItem(pokemon,20,scene) }) |
Es ruft die Methode pbHPItem auf, welches die KP eines einzelnen Pokémon ändert und diesen um 20 erhöht. Die Methode fügt soviel KP wie möglich hinzu, bis zu dem Wert.
1 2 3 4 5 6 7 8 9 10 11 12 |
ItemHandlers::UseOnPokemon.add(:ANTIDOTE,proc{|item,pokemon,scene| if pokemon.hp<=0 || pokemon.status!=PBStatuses::POISON scene.pbDisplay(_INTL("It won't have any effect.")) next false else pokemon.status=0 pokemon.statusCount=0 scene.pbRefresh scene.pbDisplay(_INTL("{1} was cured of its poisoning.",pokemon.name)) next true end }) |
Dies beschreibt die Wirkung von Gegengift (heilt Vergiftung). Das Beispiel befindet sich im UseOnPokemon-Handler; es existiert aber auch ein BattleUseOnPokemon-Handler für Gegengift, welches die gleiche Wirkung hat.
1 |
ItemHandlers::UseOnPokemon.copy(:ANTIDOTE,:PECHABERRY) |
Diese Zeile kopiert den Effekt vom UseOnPokemon-Handler des Gegengifts und gibt diese der Persifbeere. Der BattleUseOnPokemon-Handler muss separat kopiert werden (allerdings auf dieselbe Weise – nur der Name des Handlers ist anders).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
ItemHandlers::UseOnPokemon.addIf(proc{|item| pbIsEvolutionStone?(item)}, proc{|item,pokemon,scene| if (pokemon.isShadow? rescue false) scene.pbDisplay(_INTL("It won't have any effect.")) next false end newspecies=pbCheckEvolution(pokemon,item) if newspecies<=0 scene.pbDisplay(_INTL("It won't have any effect.")) next false else pbFadeOutInWithMusic(99999){ evo=PokemonEvolutionScene.new evo.pbStartScreen(pokemon,newspecies) evo.pbEvolution(false) evo.pbEndScreen if scene.is_a?(PokemonBag_Scene) scene.pbRefreshAnnotations(proc{|p| pbCheckEvolution(p,item)>0 }) scene.pbRefresh end } next true end }) |
Dieser Code beschreibt die Funktionsweise eines Entwicklungssteines. Es besitzt nur den UseOnPokemon-Handler. Die Methode pbCheckEvolution überprüft, ob der Stein (wenn er benutzt wird) funktionieren wird oder nicht und gibt einen Wert für newspecies zurück (entweder die ID-Nummer des entwickelten Pokémon, wenn es verwendet werden kann oder eine 0, wenn nicht). Je nach Wert tritt dann ein bestimmter Effekt auf.
Überprüft werden alle Items, die durch die Methode pbIsEvolutionStone?(item) ein true zurückgeben. Das sind alle Items, die in der PBS-Datei items.txt eine 7 als Wert haben (in den Abschnitt „Spezielle Items“, siehe hier). Es gibt keinen Unterschied zwischen den Steinen – die eigentliche Überprüfung, welches Pokémon sich dadurch entwickeln kann, wird in pbCheckEvolution erledigt. Beachte, dass ein Handler eines Items über mehrere Items auf einmal kopiert werden kann.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
ItemHandlers::UseFromBag.add(:OLDROD,proc{|item| terrain=Kernel.pbFacingTerrainTag notCliff=$game_map.passable?($game_player.x,$game_player.y,$game_player.direction) if (pbIsWaterTag?(terrain) && !$PokemonGlobal.surfing && notCliff) || (pbIsWaterTag?(terrain) && $PokemonGlobal.surfing) next 2 else Kernel.pbMessage(_INTL("Can't use that here.")) next 0 end }) ItemHandlers::UseInField.add(:OLDROD,proc{|item| terrain=Kernel.pbFacingTerrainTag notCliff=$game_map.passable?($game_player.x,$game_player.y,$game_player.direction) if !pbIsWaterTag?(terrain) || (!notCliff && !$PokemonGlobal.surfing) Kernel.pbMessage(_INTL("Can't use that here.")) next end encounter=$PokemonEncounters.hasEncounter?(EncounterTypes::OldRod) if pbFishing(encounter) pbEncounter(EncounterTypes::OldRod) end }) |
Es gibt zwei Handler für die Angel. Beachte, dass sie unterschiedlich sind. Der Erste überprüft, ob sie verwendet werden kann. Wenn ja (d.h der Spieler schaut während des Benutzens auf das Wasser), geht es zu next 2. Der Beutel-Bildschirm wird geschlossen und der UseInField-Handler vom Item startet. Kann die Angel nicht benutzt werden, wird der Beutel-Bildschirm nicht geschlossen.
Wurde die Angel registriert und wird auf diese Art verwendet, startet es direkt den UseInField-Handler. Dieser Handler beschreibt die eigentliche Funktionsweise der Angel.
Nicht alle Items, die einen UseInField-Handler besitzen, werden einfach zu next 2 springen (beim UseFromBag-Handler Effekt, wie z.B die Karte oder den Münzkorb). Diese Items sind typische Basis-Items (d.h sie können registriert werden, deswegen benötigen sie den UseInField-Handler), allerdings müssen sie nicht den Beutel-Bildschirm schließen, um ihre Aktion auszuführen. In diesem Fall sind beide Handler identisch.
Pokébälle
Pokébälle können verschiedene Effekte haben, von Ändern der Fangrate bis zum Ändern des Freundschaftswerts. Diese Effekte werden nicht am selben Ort definiert, wie die oberen, sondern im Script-Bereich PItem_PokeBalls.
Zuerst muss der neue Pokéball in der Liste hinzugefügt werden. Diese befindet sich auch im Script-Bereich PItem_PokeBalls.
Als nächstes muss man einen neuen Handler erstellen, wenn sich der neue Pokéball anders verhalten soll, als ein normaler Pokéball. Dieser Handler erklärt die Funktionsweise des Balls. Mögliche Handler sind:
Handler | Beschreibung |
IsUnconditional | Wenn vorhanden, wird es aufgerufen, sobald das Pokémon vom Pokéball absorbiert wurde. Gibt der Handler true zurück, dann war das Fangen erfolgreich, unabhängig von anderen Faktoren. Standardmäßig besitzt nur der Meisterball diesen Handler (und gibt immer true zurück). |
ModifyCatchRate | Ändert die Fangrate des Pokéballs. Die Änderung kann von verschiedenen Faktoren des Pokémon abhängig sein (z.B Level, Gewicht oder Typ) oder von Faktoren des Kampfes (z.B Rundenzahl, Umgebung oder Tageszeit). Die meisten Pokébälle besitzen eines dieser Handler. |
OnCatch | Beschreibt den Effekt, nachdem das Pokémon erfolgreich gefangen wurde. Der Heilball heilt das gefangene Pokémon und der Freundesball setzt den Freundschaftswert auf 200. |
Besitzt der Pokéball andere Effekte, die nach dem Fangen wirksam werden (z.B verdoppelt den Anstieg der Freundschaft), dann muss man andere Scripts ändern und dort überprüfen, in welchem Pokéball sich das Pokémon befindet, um dort die Effekte hinzuzufügen.
Beispiele
1 2 3 |
BallHandlers::ModifyCatchRate.add(:GREATBALL,proc{|ball,catchRate,battle,battler| next (catchRate*3/2).floor }) |
1 2 3 4 |
BallHandlers::ModifyCatchRate.add(:DIVEBALL,proc{|ball,catchRate,battle,battler| catchRate=(catchRate*7/2).floor if battle.environment==PBEnvironment::Underwater next catchRate }) |
1 2 3 |
BallHandlers::IsUnconditional.add(:MASTERBALL,proc{|ball,battle,battler| next true }) |
1 2 3 |
BallHandlers::OnCatch.add(:FRIENDBALL,proc{|ball,battle,pokemon| pokemon.happiness=200 }) |
TMs und VMs
TMs und VMs werden ebenfalls auf eine andere Art verwendet, als in den Methoden oben. Alle TMs und VMs funktionieren auf dieselbe Art und Weise, mit dem Unterschied, dass eine TM nach der Nutzung konsumiert wird (außer man stellt ein, dass man TMs unendlich oft nutzen kann).
Der Artikel Attacken erlernen enthält mehr Informationen darüber, wie eine Attacke beigebracht wird. Die einzige Voraussetzung für die Erstellung eines TM- oder VM-Items ist, diese als solche zu definieren.
Briefe
Brief-Items können nicht wie andere Items benutzt werden. Dafür können sie gelesen werden. Das Lesen eines Briefes vom Beutel heraus führt zu einen leeren Brief, während das Lesen eines Briefes von einem Pokémon eine Textnachricht zeigt.
Gibt man einem Pokémon einen Brief zum Tragen, dann kann der Spieler eine Nachricht eingeben. Dieser wird automatisch mit den Namen des Spielers signiert. Handelt es sich bei dem Brief um einen mit Pokémon-Icons, dann wird der Träger, sowie die zwei nächsten Pokémon im Team des Spielers als Icons angezeigt, von rechts nach links.
Die Nachricht des Briefes (sowie die angezeigten Pokémon) werden als Eigenschaft des Träger-Pokémon gespeichert. Siehe den Artikel Pokémon bearbeiten für eine Erklärung darüber, wie man Nachricht, Name des Senders und Icons für den Brief bestimmt.
Die einzige Voraussetzung für die Erstellung eines Brief-Items ist, diese als solche zu definieren.
Trageitems
Manche Items haben einen bestimmten Effekt, wenn sie getragen werden, wie z.B dass bestimmte Attacken im Kampf stärker werden, mehr Erfahrungen bringen oder dass ein bestimmtes Wetter länger anhält. Da es viele verschiedene Arten von Effekten gibt, können diese hier nicht alle aufgelistet werden. Stattdessen gibt es einen groben Überblick über die verschiedene Arten von Trageitems.
Attackenverstärkende Items
Dies beinhaltet Items wie Wundersaat, Holzkohle, Zauberwasser, sowie diverse Tafeln, Kampfknochen, Seerauch usw. Alle diese Items verstärken Angriffs-Attacken, wenn sie getragen werden.
Im Script-Bereich PokeBattle_Move, gibt es eine lange Methode namens pbCalcDamage. Es beinhaltet alle Berechnungen, die die Stärke der Attacken betrifft, inklusive mit den Trageitems.
Beachte, dass viele diese Berechnungen entweder physische oder spezielle Attacken betreffen, jedoch nicht beide.
Ausgelöste Effekte-Items
Der Script-Bereich PokeBattle_Battler beinhaltet die Methode pbBerryCureCheck, welche überprüft, ob das Pokémon sein getragenes Item nutzen kann (meistens durch Konsum). Der Name der Methode kommt daher, dass die meisten der konsumierbaren Items Beeren sind, es werden aber auch Items wie Schlohkraut, Überreste und Giftschleim verwendet (die letzteren beiden werden allerdings nicht konsumiert, sind aber trotzdem hier vorhanden, da deren Effekte erst ausgelöst werden müssen).
Wenn das getragene Item während des Kampfes genutzt werden kann, um einen bestimmten Effekt zu geben, dann muss man hier den Code einfügen. Beachte, dass die meisten Items eine Bedingung haben, wann sie genutzt werden können (z.B können Statusheiler nur dann genutzt werden, wenn das Pokémon diesen Status besitzt oder KP-Wiederherstellungsitems können nur genutzt werden, wenn die KP des Trägers niedrig ist).
Andere Trageitemseffekte
Es existieren noch andere Effekte, die Trageitems haben können. Weiter unten sind zwei Tabellen, bei der man sieht, wo sich welcher Effekt befindet. Diese können verändert werden, je nachdem, ob das Item getragen wird. Die meisten beinhalten mindestens ein Beispiel für einen Itemeffekt.
Die folgende Effekte, während eines Kampfes:
Was wird beeinflusst | Zuständiger Script |
Genauigkeit und Fluchtwert | PokeBattle_Move, pbAccuracyCheck |
Chance auf Zurückschrecken | PokeBattle_Battler, pbProcessMoveAgainstTarget |
Volltreffer-Rate | PokeBattle_Move, pbIsCritical? |
Erhaltene Erf.-Punkte und EVs durch das Besiegen eines Pokémon | PokeBattle_Battle, pbGainEXP |
Vom Kampf fliehen | PokeBattle_Battle, pbCanRun?, pbRun |
Erhaltenes Geld von Trainerkämpfen | PokeBattle_Battle, pbEndOfBattle |
Priorität einer Attacke | PokeBattle_Battle, pbPriority |
Initiative | PokeBattle_Battler, pbSpeed |
Typ-Effektivität einer Attacke | PokeBattle_Move, pbTypeModifier |
Welche Attacken der Träger einsetzen kann | PokeBattle_Battle, pbCanChooseMove? |
Die folgende Effekte treten außerhalb des Kampfes auf:
Was wird beeinflusst | Zuständiger Script |
Zucht (Mit Rauchitems) | PField_DayCare, pbDayCareGenerateEgg |
Encounter-Rate von wilden Pokémon | PField_Encounters, pbGenerateEncounter |
Entwicklung (Speziell den Ewigstein) | Pokemon_Evolution, pbCheckEvolutionEx |
Erhöhung der Freundschaftsrate | PokeBattle_Pokemon, changeHappiness |
Spezielle Itemeffekte
Es gibt einige Items, meistens Basis-Items, die einen besonderen Effekt haben, wenn sie benutzt werden. Diese sind:
- Karte
- Pokéradar
- Fahrrad
- Angel
- Detektor
- Münzkorb
Am besten man guckt sich die Scripts direkt an, um zu sehen wie sie funktionieren.
Meistens werden Basis-Item passiv benutzt. Ein Event überprüft, ob der Spieler ein bestimmtes Basis-Item besitzt (z.B Türöffner). Das Item wird also nicht direkt benutzt. Überprüfungen wie diese sind im Artikel Items manipulieren erklärt.
Verwendung von gegnerischen Trainern
Manche Items können vom Gegner während eines Kampfes benutzt werden. Die Effekte solcher Items werden im Script-Bereich PokeBattle_Battle, in den Methoden pbEnemyItemToUse und pbEnemyUseItem definiert. Der Effekt des Items sollte derselbe sein, wie wenn der Spieler diese nutzt.
Es ist ein kompliziertes Thema und für die meisten Spieler irrelevant. Man sollte nicht an den Scripts rumpfuschen, wenn man keine Script-Erfahrungen hat.