PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Status von Monster ändern



Rusk
07.09.2009, 16:47
Liebe Community,

wie kann man einem Monster vor einem Kampf einen Statusattribut verpassen?
zB. will ich, dass das Monster gleich nach dem Kampfbeginn den Status "vergiftet" hat. Wenn ich es im Kampf tue, habe ich das Problem, dass es die Statusveränderung erst nach Runde des Monster, ändert.
(Kann womöglich auch an meinem KS liegen.)
MfG Deamonic

The_Burrito
07.09.2009, 16:54
Normalerweise kannst du erreichen indem du unter "Troops" ein Event mit der Bedingung "Turn 0" machst. Turn 0 findet vor der ersten Runde statt. Wenn das nicht funktioniert, liegt es möglicherweise wirklich an dem Kampfsystem, welches du verwendest. Eventuell müsstest du da ein wenig dran basteln bis es "Turn 0" Events korrekt ausführt.

Rusk
07.09.2009, 17:06
Hm, das hatte ich schon probiert.
Geht leider nicht.
Ich verwende ein KS, welches mit ATB funktioniert.
So eine Art "Runde 0" gibt es nicht bei mir.

sorata08
07.09.2009, 17:24
Welches KS verwendest du denn? Sind ja nicht gerade wenige, die ATB beinhalten. ^^;

MfG Sorata

Rusk
07.09.2009, 17:26
Das Enu SBS Tanketai XP.

sorata08
07.09.2009, 17:28
Ah...
Hm...
Kann man da echt keine "Runden" einstellen?
Ich verwende für Charon 2 ja auch ein ATB und da kann ich die Funktion mit nutzen, nur sind die Runden dann nicht genau abgegrenzt.
Wie wird das denn in deinem geregelt?
Hab das Skript ja nicht vor Augen.

Rusk
07.09.2009, 20:29
So wichtig ist es auch wieder nicht.
Mir fällt schon eine Alternative ein.
Danke trotzdem.

sPike.
07.09.2009, 22:28
Ich bin mir nicht sicher, aber du könntest das hier mal ausprobieren.
Einfach über Main einfügen und unter Troops ein Callscript erstellen,
das die methode enemy_state(enemyid,stateid) aufruft.


#===============================================================================
# wie gehts?
# einfach ein callscript aufrufen mit der folgenden methode:
#
# enemy_state(enemyid, stateid)
#
#===============================================================================

class Interpreter
def enemy_state(enemyid,stateid)
# apply state
$game_troop.enemies.each do |i|
i.add_state(stateid) if i.id == enemyid
end
# Continue
return true
end
end


Sollte es nicht klappen sag bescheid.

The_Burrito
08.09.2009, 01:54
Das Problem liegt nicht daran, dass man dem Gegner keinen Status zugewiesen bekommt. Das funktioniert mit einem einfachen Event Command. Es geht darum, dass er das zu Beginn, des Kampfes haben möchte, und mit dem Kampfsystem, dass er verwendet, gibt es da anscheinend schwierigkeiten.

Rusk
08.09.2009, 07:18
Ich werde es mal über das Script ausprobieren.
Das problem ist ja, dass ich dem Monster nicht im Kampf den Status zuweisen kann. Ist ja dumm, wenn sich der Gegner ohne Grund selber vergiftet.

EDIT: Das Script funktioniert nicht

http://www.npshare.de/files/73b8d32d/fehlermeldung.png

sPike.
08.09.2009, 16:33
ok, da hab ich dann was falsch verstanden, sorry.
vielleicht setz icvh mich heute abend nochmal ran.

@Deamonic
doch es tut, hast bestimmt nur was falsch gemacht... :P

Rusk
08.09.2009, 17:21
Habs nochmal ausprobiert und die fehlermeldung bleibt jetzt weg, aber die Statusveränderung kommt gar nicht zustande.

sPike.
08.09.2009, 22:10
nabend,

so müsste es funktionieren!
als erstes fügst du das über main ein:

#===============================================================================
# wie gehts?
# einfach ein callscript aufrufen mit der folgenden methode:
#
# $game_system.
# battle_interpreter.statez(enemyid,stateid)

# du setzt die states zurück in dem du das callscript aufrufst:

# $game_system.
# battle_interpreter.statez()

#
# der zeilenumbruch is gewollt
#===============================================================================

class Interpreter
def statez(enemyid = 0, stateid = 0)
@enemyid = enemyid
@stateid = stateid
end

def enemy_state
# apply state
$game_troop.enemies.each do |i|
i.add_state(@stateid) if i.id == @enemyid
end
# Continue
return true
end
end

danach suchst du in deinem ks nach der methode Scene_Battle#setup_battle_event
da musst du diese zeile einfügen, am besten direkt am anfang.

$game_system.battle_interpreter.enemy_state

der letzte schritt ist dann ein callscript,

$game_system.
battle_interpreter.statez(enemyid,stateid)
so klappt es, unabhängig von den bedingungen.

Rusk
09.09.2009, 07:31
Es gitb bei mir keine Methode mit dem Namen "Scene Battle" sonder nur eine Klasse, aber dort komt das "setup_battle_event" vor, allerdings im ATB-Script, nicht im KS. Ich habs dir mal geschickt.

The_Burrito
09.09.2009, 11:28
Nur zur allgemeinen Info:

Normalerweise bezeichnet man Methoden mit
<Klassenname>#<Methodenname>
Also bezog sich Scene_Battle#setup_battle_event
auf die Methode setup_battle_event in der Klasse Scene_Battle.

Rusk
09.09.2009, 12:56
Das sPike hat auch schon bemerkt.
Muss es noch auf die neue Art ausprobieren.