Archiv verlassen und diese Seite im Standarddesign anzeigen : MV | Möglichkeit Städtenamen anzupassen
Underserial
29.12.2015, 06:32
Moin ihr lieben,
ich sah letztens ein Video indem jemand versuchte Städtenamen unterschiedlich anzeigen zu lassen.
Hier das Vorgehen:
Wir gehen in eine Stadt oben links wird angezeigt ???-Dorf
Man spricht mit einem NPC oder einem Schild (Es zeigt den Dorfnamen)
Schalter wird umgelegt
Betritt man das Dorf erneut erscheint nun der Name des Dorfes oben links
In jedem anderen Maker würde ich das anders lösen, aber im MV gibts extra die Funktion "Kartenname anzeigen" nur kann man diese nur "ein" oder "aus" stellen.
Weiß jemand ne saubere Lösung?
Der Name der Map ist ja Bestandteil der Datenbank und wird deswegen afaik nicht in der Save-Datei abgespeichert. Man müsste also wohl ein aufwändigeres Script schreiben, um das Problem zu lösen.
sorata08
29.12.2015, 08:39
Was für ein Video war das denn? Wenn es ein Tutorial war, kannst du da ja ggf. nochmal nachfragen.
Wenn nicht, kannst du dich auch über das Spiel erkundigen und ggf. im Projekt nachschauen?
Oder du googlest nach Plugins für den MV, die sich mit dem Mapname beschäftigen?
Oder du schaust in den Standard JS-Scripts nach und passt die Methode für das Anzeigen des Mapnames an.
Gibt also verschiedene Ansätze für's Erste. xD
MfG Sorata
Underserial
29.12.2015, 08:49
Was für ein Video war das denn? Wenn es ein Tutorial war, kannst du da ja ggf. nochmal nachfragen.
Wenn nicht, kannst du dich auch über das Spiel erkundigen und ggf. im Projekt nachschauen?
Oder du googlest nach Plugins für den MV, die sich mit dem Mapname beschäftigen?
Oder du schaust in den Standard JS-Scripts nach und passt die Methode für das Anzeigen des Mapnames an.
Gibt also verschiedene Ansätze für's Erste. xD
MfG Sorata
Es war leider kein Tutorial, es hat jemand einfach so erwähnt "Es wäre doch cool wenn das iwie geht" - er hat es nämlich nicht richtig geschafft.
Die Ansätze helfen schon mal, geil wäre natürlich eine Lösung ala macht das einfach so und so :hehe:
Was man wohl machen könnte (unter dem Vorbehalt, dass es mit Javascript genauso wie mit Ruby funktioniert):
- in einer der Standardklassen ein Array mit so vielen Einträgen wie es Maps gibt anlegen und alle auf false setzen.
- die Methode zum Anzeigen der Städtenamen so umschreiben, dass sie, wenn im Array false eingetragen ist, nur ??? anzeigt, ansonsten den Mapnamen.
- sobald der Spieler die Stadt kennt den Eintrag im Array auf true setzen.
sorata08
29.12.2015, 09:21
Kelvens Idee geht schon mal in die richtige Richtung, ich würde aber eher einen Map-Container verwenden, mit der Map-ID als Key und dem True oder False als Value.
Mit einem bloßen Array müsstest du dir so immer merken, welcher Eintrag zu welcher Map gehört.
Ich schaue gerade mal selbst nach, ob ich was dazu finde, melde mich dann nachher nochmal. ;)
Plugins sind natürlich einfach und schön, aber für Spezialfälle ist es nicht verkehrt, wenn man sich auch selbst etwas mit Javascript beschäftigt. :-)
MfG Sorata
Edit:
Hab die Stelle gefunden und schreibe dir gerade eine Lösung zurecht.
Edit2:
So, du musst in zwei Java-Script Dateien etwas hinzufügen (und dort IDs eintragen), dann hast du diese Funktionalität. Ggf. bau ich das noch in ein Plugin um, damit man es leichter verwenden kann, aber das wöre erstmal der "Hotfix":
Gehe zu [DeinProjektordnerPfad]/js/rpg_windows.js und ersetze an Zeile 4700 den Methoden-Block mit dem folgenden:
Window_MapName.prototype.close = function() {
this._showCount = 0;
$gameMap.visitedMap();
};
Gehe nun zu [DeinProjektordnerPfad]/js/rpg_objects.js und ersetze an Zeile 5627 den Methoden-Block mit dem hier:
//===============================================
Game_Map.prototype.displayName = function() {
// add here all the IDs of the Maps you need
// this for!
var mapArray = new Array(1, 2, 53); //just example IDs!
if (mapArray.indexOf(this._mapId) >= 0) {
// we have to check, if we visited this map once before
if (checkMapName(this._mapId)) {
return $dataMap.displayName;
} else {
return "???";
}
} else return $dataMap.displayName;
};
function checkMapName(id) {
// we check, if the map was already visited.
// If so, the according Game_Switch is set to true
// change and add the Game_Switch-Ids as you wish!
if (id == 1) {
if ($gameSwitches[1]) return true; else return false;
} else if(id == 2) {
if ($gameSwitches[2]) return true; else return false;
} else {
// add as many coditional branches as you need!
return false;
}
};
// Set Maps to visited, add more Map- and Swtich-IDs!
Game_Map.prototype.visitedMap = function(){
if (this._mapId == 1) {
$gameSwitches[1] = true;
} else if (this._mapId == 2) {
$gameSwitches[2] = true;
}
};
// the old function, in case you need it back.
// if so, delete the above part and uncomment this here
//Game_Map.prototype.displayName = function() {
// return $dataMap.displayName;
//};
//===============================================
Den Kommentaren folgend musst du ein paar Stellen noch IDs anpassen und ergänzen (dazu kannst du dann aber die bestehenden Abfrage-Abzweigungen kopieren und die IDs abändern).
Hoffe, das hilft dir für den Moment, ich werd mich demnächst mal noch damit beschäftigen, wie man die Plugins anlegen muss, damit du alles vom Maker aus bequem anlegen kannst. ;)
Eine einfache Möglichkeit ohne großes rumprogrammieren (dafür aber nicht sehr ressourcenschonend): Erstelle 2 identische Karten (copy-paste sobald sie fertig ist). Bei einer stellst du den Namen auf "???" und bei der Anderen auf den Namen des Ortes. Wenn man den Ort betritt, dann überprüft ein conditional-branch, ob ein Schalter an oder aus ist. Standardmäßig ist der aus und man wird auf die Map mit den Fragezeichen geschickt. Sobald man den Namen erfährt, setzt man den Schalter auf an und das Teleport-Event schickt den Spieler auf die Map mit dem richtigen Namen. Dadurch hat man zwar alle Karten, die sowas machen sollen doppelt im Speicher, aber die Maps an sich verbrauchen ja nicht allzu viel Speicherplatz. Und nicht vergessen, die Abfrage bei allen Teleportern zum Ort einzufügen, also auch aus den Häusern und Höhlen heraus.
Eine weitere Möglichkeit: Deaktiviere die Namensanzeige. Erstelle ein Bild mit der Schriftart des Spieles (Karte mit "???"- Namen erstellen, auf leerer Karte anzeigen lassen und dann per Bildschirmfoto ausschneiden z.B.). Zeige die Fragezeichen an der Stelle oben an, wo der Name des Ortes erscheinen soll. Sobald der Spieler den Namen erfährt, aktiviere die Namensanzeige wieder. Beim Verlassen des Ortes aber daran denken, die Namensanzeige wieder zu aktivieren, da sie sonst auch bei anderen bekannten Orten deaktiviert ist.
Du kannst die Fragezeichen aber auch einfach weglassen und nichts anzeigen, wenn der Ort unbekannt ist (als Namensanzeige deaktivieren) und dann entsprechend die Anzeige wieder aktivieren, wenn der Name bekannt wird.
Underserial
29.12.2015, 20:35
coole sache ihr beiden.
Da fehlt mir doch ein DANKE Button ... :D
coole sache ihr beiden.
Da fehlt mir doch ein DANKE Button ... :D
Ja, den wünsch ich mir auch manchmal ^^
Und gern geschehen (falls der Dank an mich gerichtet war ^^) ;)
Powered by vBulletin® Version 4.2.3 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.