Hi kann mir jemand sagen wie das funktioniert im maker, ich komm leider nicht drauf...
ich will ein item erstellen namens speedtrank, und der soll auf der map und in dungeons wenn man ihn trinkt(timer soll angezeigt werden) 30sekunden lang die laufgeschwindigkeit des helden erhöhen, danach ist feierabend bis man einen weiteren schluckt.
ich habs zuerst mit ner condition hat irgendwie nicht geklappt.
dann hab ich noch versucht den speedtrank unter der katigorie medizin zu erstellen, aber man muss dafür nen wert(hp oder mp) dazu tun damit man ihn überhauot benutzten kann. mag vielleicht an der uhrzeit liegen das ich das jetzt nicht hinkriegen, aber jetzt is ersma blackout, später vielleicht auch noch, deshalb frag ich jetzt einfach mal wie ihr es mir empfehlen würdet zu machen. thx in advance!
Ist ganz einfach: Du erstellst ein Item mit der Klassifikation: "Switch".
Der Rest versteht sich eigentlich von selbst, Common Parallel Process, folgendermaßen aufgebaut:
IF On_SWITCH(derswitcheben){
Move Event (Hero Move Spd UP)
Move all
Wait 30.0 sec
Move Event (Hero Move SPD DOWN)
Move all
ChangeSwitch(derswitcheben) set to off
Wait 0.0 sec (optional, ein Wait hats ja schon.)}
ist nicht ganz der 1:1 Code, aber du weißt hoffentlich, was ich meine.
Soweit ich das weiß kommt das gerade auf Maps wo das ein oder andere Event nicht innerhalb gesteuert wird, zu fehlern. Da man am Anfang eines Projektes ja nie weiß was man so alles einbaun will kann das Später schonmal ein paar schlechte Nebeneffekte haben.
Nehmen wir mal an im besagten Spiel wird eine Stelle eingebaut in der man durch einen kleinen Pass muss. Der obere Ausgang ist jedoch mit Steinen versperrt. Nun will man hindurch. Dazu kann man einen Schalter benutzen der 2 Reihen Steine löst (um es interessanter zu machen). Die erste Reihe rammt das Hindernis unten weg, die zweite Reihe versperrt aber gleich wieder alles. Nun muss der Held genau zwischen diesen beiden Reihen bleiben und schnell durch die Lücke fliehen. Natürlich rollen die Steine viel zu schnell. Also packt man seinen "Speedtrank" aus (ich würde da zu "Speedpotion" raten ^^°), trinkt ihn und kommt locker durch. Haben wir da nun aber ein Move All Befehl drinn muss der Held nach trinken des Trankes wohl oder übel erst warten bis alle Steine zuende gerollt sind, kann dann nochmal den Schalter drücken und dann durchrennen. Wird nur problematisch wenn dann der Trank mitten zwischen den Steinreihen aufhört ^^° (Held bleibt stehen, Held wird platt gemacht). Natürlich könnte man so einen Fehler durch das verwenden einer zweiten Seite der Steine mit einem internen Move Event machen, leider vergisst man sowas sehr leicht. Außerdem gibt es sicherlich die ein oder andere Stelle an der eine zweite Seite nicht so gut kommt oder garnicht geht (mir fällt nur gerade kein Beispiel ein ).
Auch wenn wir uns jetzt nicht ganz sicher sind ob "Move All" einen Nachteil hat, sind wir uns sicher das ein "Wait" eigentlich keinen Nachteil hat. Also warum es nicht benutzen?
mfg
Phönix Tear
Geändert von Phönix Tear (09.02.2006 um 14:38 Uhr)
danke für die antworten, der trank klappt einwand frei, nun zu meiner nächsten frage: wie macht man das dass die wirkung des speedtrankes sofort verschwindet sobald man eine bestimmte map nämlich die "worldmap" betretet. weil darauf läuft man langsamer als in dungeons bei mir, und wenn der dort noch aktiviert ist, und dort seine wirkung verliert ist das ganze gangspeed verhältniss des spiels zerstört. ich hab probiert das wenn man einen dungeon verlässt:
switch(speed) ON dieser switch auf OFF gestellt wird, hat aber nichts gebracht.
Hm, da müsstest du wohl einen Switch machen der z.B. "Auf WM" heißt, der dann auf der WorldMap an- und auf anderen Maps ausgeschaltet wird; dann musst du noch eine Fork Condition in das Skript für den Trank machen, die checkt, ob der Switch "Auf WM" aus ist...
Erstmal machst du ein neues Item, das genau denselben Namen hat, aber nicht wirkt (also Common Good)
Dann kommt auf die Worldmap ein Autostart-Event, das die funzenden Items mit den nicht-funzenden austauscht (Anzahl in eienr Variable speichern, Add Item Falschesitem Anzahl Variable, Drop Item Richtigesitem Anzahl Variable) und dann ein Clear Timer damit das Event bis zum nächsten Mal wech is
selbstverständlich muss dann in jeden Teleport, der von der Map weggeht, im Script nach dem Teleport-Aufruf genau das Gegenteil gemacht werden.
--
class Dog { //(...)
boolean getBuddha() { throw NullPointerException; } }
Spielt Hero-Chan!
Warum so kompliziert? Bau doch einfach in dein Trank-Skript ne Mapabfrage ein, also:
Nun wird automatisch verhindert, dass der Held auf der Weltkarte diesen Trank trinkt. Natürlich muss dann in die Else dieser Fork ein "Add Item: Speedtrank" und ein z.B. "Show Massage: "Auf der Weltkarte kann ich keinen solchen Trank tinken!"" hin. Ansonsten sollte das so gehen...
Das die Wirkung dann auch endet kannst du ja so machen wie BuddyJ das gesagt hat. Sobald die Map ID = 1 (also die ID deiner Weltkarte) ist, setzt du die Variable "Wirkungsdauer" auf 0. Den Rest macht der Skript dann ja selber
da wir eh grad auch bei move speed up und move speed down sind, hab ich da auch ne frage, die hier reinpassen könnte.
und zwar, ist es möglich, die geschwindigkeit des helden auch anders festzulegen, als mit move speed up bzw. down über move event?
weil es könnte z. b. sein, das der held, umsomehr er verletzt ist, umso langsamer laufen soll, und wenn er HP wieder bekommt, dann soll er natürlich wieder schneller laufen. Aber die Verletzung kann ja auch mal zwei oder drei speedstufen nach unten gehn, bzw. der HP - Trank, kann ja auch mal zwei oder drei stufen raufwandern, und irgendwann würde dann die komplette movebewegung kaputtgehn.
Also bräuchte ich etwas, mitdem ich die movebewegung des helden direkt festlegen kann. Ich hatte schon daran gedacht, das in variablen zu speichern, aber ich hab noch keine sichere Idee, wies funktionieren könnte.
Weis von euch vielleicht jemand, wie man sowas machen kann?
@lightning: 5 mal Move Speed Down, dann ist er auf jeden Fall auf x8 Slower, dann kann man abhänig von ein paar Variablen bestimmen, wieviel Move Speed Ups er wieder bekommt (oder andersrum)
--
class Dog { //(...)
boolean getBuddha() { throw NullPointerException; } }
Spielt Hero-Chan!