PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : VX[Ace] Ruby | Namen von Gruppenmitglied mit unbekannter ID ändern



Elster
05.01.2014, 13:37
Ich arbeite gerade an einem Miniscript, dass den Namen und die Klasse eines Charas ändern soll, dessen ID ich nicht kenne, da der im Laufe des Spiels hinzugefügt wird.

Das Ganze sieht momentan so aus:


position =
$game_party.all_members.find_index{|actor|
actor.name == "Ratte"}
if position && position <= 3
$game_actors[position].name =
"Rattentrupp"
end


Fehler an der Sache, es ändert nur den Namen des Charas mit der ID1. Ich denke mal es liegt leider an der Sache, dass ich nicht wirklich die ID ermittle. Leider weiß ich nicht, wie ich die ID genau abfrage.
Den Code den ihr dort seht, habe ich an folgenden versucht zu entwickeln, den mir mal jemand geschrieben hat.


position =
$game_party.all_members.find_index {|actor|
actor.name == "Ratte"}
if position && position <= 3
item = $data_items[100]
$game_party.gain_item(item, 1)
$game_party.remove_actor(
$game_party.all_members[position].id)
end


Der macht auch fehlerfrei was er soll. Chara mit Namen Ratte ermitteln, Gegenstand geben und aus der Gruppe werfen.

Wo genau liegt hier mein Fehler und wenn wir schon mal dabei sind, wie ändere ich noch die Klasse? Ich habe jetzt nur auf meiner Suche gefunden wie ich Name, Nickname und Ausrüstung ändere oO

Linkey
05.01.2014, 14:09
Du ermittelst die ID der Game_Party. Demnach müsstest du beim umbennen auch darauf zugreifen:
anstelle von $game_actors[position].name nimmst du:
$game_party.all_members[position].name

Damit sollte es dann laufen.

Elster
05.01.2014, 14:38
Danke, dass geht ^^

Du weißt nicht zufällig wie ich darüber noch die Klasse ändern kann?

Linkey
05.01.2014, 14:46
Ja klar, da gibt es eine Methode beim Actor:

change_class(class_id, keep_exp = false)

d.h. du rufst die Methode so auf:
$game_party.all_members[position].change_class(ID der Klasse, true oder false (jenachdem, ob exp der alten Klasse behalten werden sollen))

Elster
05.01.2014, 15:42
Anscheinend beißt sich der Befehl mit Arrays oder ich hab nen vollkommen banalen Fehler gemacht...



Script'Game_Interpreter' line1411: NoMethodError occurred
undefined method `change_class' for [1]:Array


Der Code sieht momentan wie folgt aus:



position =
$game_party.all_members.find_index{|actor|
actor.name == "Ratte"}
if position && position <= 3
$game_party.all_members[position].name=
"Rattentrupp"
$game_party.all_members
[position].change_class(52, true)
end


Ich habe auch schon mal die Namensänderung heraus genommen, was nichts änderte.Auch habe ich einfach mal ein "=" vor die Klammern gestellt.
Ebenso brachte es nichts zu schreiben
$game_party.all_members
[position].change_class(52, keep_exp= true)

Wo genau liegt hier der Fehler?
Was habe ich anders gemacht als mir gesagt wurde Oo?

FlipelyFlip
05.01.2014, 16:11
nimm von [position].change_class(52, keep_exp= true) die erste [ Klammer hoch zu all_members.

Zurzeit interpretiert der Maker das so:

$game_party.all_members <-- Aufgabe 1
[position].change_class(52, keep_exp= true) <-- Aufgabe 2

wenn du es aber so schreibst:

$game_party.all_members[
position].change_class(52, keep_exp= true)

dann sieht der Maker einen zusammenhang zwischen den Zeilen, weil die geöffnete Klammer nicht geschlossen wurde.
Dadurch fasst er so lange die Zeilen zusammen, bis nicht die Klammer geschlossen wurde.

Elster
05.01.2014, 17:28
Vielen Dank, dass wars. ^^
Problem gelöst :D