Problem mit Kampfskript

Das Board für Schwierigkeiten beim Adventure-Machen und zum Melden von Bugs
Post Reply
Wuji
Adventure Enthusiast
Posts: 223
Joined: 07 Dec 2008, 17:25
Contact:

Problem mit Kampfskript

Post: # 74189Post Wuji
07 Aug 2009, 14:57

Hallo ich bin gerade in meinen neuen Spiel dabei mit dem ersten Monster zu kämpfen um mir später nicht soviel Arbeit zumachen hab ich mir eine Function geschrieben namens Kampf skript die auf jedes Monster zutrifft und verwendet werden kann.

im Spiel soll man das Monster anklicken. Um das Monster erscheint eine Makierung ,also ein aus dreieckenbestehendes Fadenkreuz was sich dreht. Naja mehr will ich noch nicht fürs erste. Dieses Fadenkreuz ist ein Character im Geist Modus

Mein Problem:
Irgendwie werden die Koordinaten des Monsters nicht wirklich weitergegeben und die Makierung fliegt an einen Punkt und lässt es dabei beruhen.
Hier der Kampf Skript:
(*Namen berechnen*)
Setstring(Eingabe für Monster X;[charx:[Monster Name]])
Setstring(Eingabe für Monster Y;[chary:[Monster Name]])
(*Monster Koordinaten berechnen*)
setnum(Monster Vorrechnung X;[Eingabe für Monster X])
setnum(Monster Vorrechnung Y;[Eingabe für Monster Y])
(*Walkmap Koordinaten berechnen *)
setnum(Monster X;[Monster Vorrechnung X]/16)
setnum(Monster Y;[Monster Vorrechnung Y]/16)
(*Self Koordinaten berechnen*)
setnum(Self Vorrechnung X;[charx])
setnum(Self Vorrechnung Y;[chary])
(*Walkmap Koordinaten berechnen*)
setnum(SelfX;[Self Vorrechnung X]/16)
setnum(SelfY;[Self Vorrechnung Y]/16)
(*---------------------Überprüfung--------------------*)
textout(100;[Monster Name]:X: [Monster X]Y:[Monster Y] Variabel:[Schneewurm];10;300;1;255;0;0)
If_bool(Monster makiert;true)
runto(Makierung;[Monster X];[Monster Y];1;dontwait)
Ich denke der Fehler liegt in den ersten 2 zeilen vielleicht ist das Doppelklammern so noch nicht möglich aber mir fällt auch keine allgemeine Alternative ein :pcprob:

Schiman
PaC-DK God
Posts: 1177
Joined: 20 Dec 2006, 21:48
Contact:

Post: # 74190Post Schiman
07 Aug 2009, 15:11

Zunächst einmal: Es heißt Markierung, dementsprechend auch "Monster markiert!

Dein Fehler im Skript ist ganz oben. Du sagst
"setstring(Eingabe für Monster X;[charx:[Monster Name]])",
obwohl das ganz klar eine Nummer ist. Es muss also heißen:
"setnum(Eingabe für Monster X;[charx:[Monster Name]])"

Dann kannst du die ersten zwei Zeilen sowieso wegschmeißen, weil du die Variablen direkt wieder an eine andere Variable übergibst, was ja nicht viel Sinn macht.
Also du machst zunächst:

Code: Select all

(*Monster Koordinaten berechnen*)
setnum(Monster Vorrechnung X;[charx:[Monster Name]])
setnum(Monster Vorrechnung Y;[chary:[Monster Name]])
(*Walkmap Koordinaten berechnen *)
setnum(Monster X;[Monster Vorrechnung X]/16)
setnum(Monster Y;[Monster Vorrechnung Y]/16)
(*Self Koordinaten berechnen*)
setnum(Self Vorrechnung X;[charx])
setnum(Self Vorrechnung Y;[chary])
(*Walkmap Koordinaten berechnen*)
setnum(SelfX;[Self Vorrechnung X]/16)
setnum(SelfY;[Self Vorrechnung Y]/16)
(*---------------------Überprüfung--------------------*)
textout(100;[Monster Name]:X: [Monster X]Y:[Monster Y] Variabel:[Schneewurm];10;300;1;255;0;0)
If_bool(Monster makiert;true)
runto(Makierung;[Monster X];[Monster Y];1;dontwait)
Warum du allerdings einen Charakter verwendest, um die Markierung anzuzeigen, hat sich mir noch nicht erschlossen. Dafür ist doch ein Objekt viel besser geeignet. Oder hast du irgendwelche Sonderwünsche, wie Zoom oder sowas?

Wuji
Adventure Enthusiast
Posts: 223
Joined: 07 Dec 2008, 17:25
Contact:

Post: # 74201Post Wuji
08 Aug 2009, 13:30

ich hab ein Charcter verwendet weil ich an einem Rollenspiel arbeite also es wird in Jedem Raum ungefähr § monster geben oder Mehr.
Ich rechne mit 110 Räumen und es wäre sehr nervig immer ein Markierungs objekt einzufügen . Den Character kann ich beamen.

Zum Skript: habs geändert in dem Überprüfungstextout steht Y=0 und X=0 warum auch immer. Das Monster bewegt sich trotzdem verändern sich die Werte nicht. :pcprob: ich hab keine Ahnung
Last edited by Wuji on 08 Aug 2009, 13:45, edited 1 time in total.

Schiman
PaC-DK God
Posts: 1177
Joined: 20 Dec 2006, 21:48
Contact:

Post: # 74202Post Schiman
08 Aug 2009, 13:40

Aja.. macht sinn.

Sieht es auch flüssig aus, wenn die Markierung zur Position läuft? Schließlich nimmt ein Charakter ja nicht den direkten weg, sondern läuft entlang der Walkmap. Wenn das ok ist, dann ist es ja egal, ob Objekt oder Charakter.

Wuji
Adventure Enthusiast
Posts: 223
Joined: 07 Dec 2008, 17:25
Contact:

Post: # 74205Post Wuji
08 Aug 2009, 17:51

ja es sieht flüssig aus da die MAkierung ja immer rennt und Der character läuft nur.

Aber egal wichtiger wärs mir erstmal wenn ich überhaupt koordinaten bekäme.

hier ist der Skript vom Monster :
on(mouse)
instmouse(3)

on(click)
{
Setstring(Monster Name;Schneewurm)
Setnum(Schneewurm;2)
setbool(Monster makiert;true)
If_bool(Alltagsmodus;true)
setbool(Alltagsmodus;false)
setobj(Monster Healthbar;1)
setobj(Monster Anzeige;1)
function(Kampf Skript;infinit)
}

on (rightclick)
{
Setnum(Schneewurm;1)
setobj(Monster Healthbar;0)
setobj(Monster Anzeige;0)
Setstring(Monstername;[Empty])
stopfunction(Kampf Skript)
setbool(Monster makiert;false)
}

Schiman
PaC-DK God
Posts: 1177
Joined: 20 Dec 2006, 21:48
Contact:

Post: # 74207Post Schiman
08 Aug 2009, 19:44

Hm, sieht alles soweit in Ordnung aus... Mir fallen nur noch zwei Sachen ein, die ich probieren würde.

Ich vermeide immer Leerzeichen in Variablen, die sind in jeder normalen Programmiersprache auch nicht erlaubt. Vielleicht macht das Probleme.

Was anderes ist die Division durch 16. Du machst die Division ja so:

Code: Select all

setnum(Monster X;[Monster Vorrechnung X]/16) 
Probiers mal so, damit du ganzzahlige Ergebnisse bekommst:

Code: Select all

setnum(Monster X;[Monster Vorrechnung X]:16) 
Also statt "/" lieber ":" verwenden.
Was anderes weiß ich im Moment auch nicht.

Baelavay
PaC-DK God
Posts: 1168
Joined: 04 Jun 2006, 19:24
Contact:

Post: # 74208Post Baelavay
08 Aug 2009, 22:39

...hab ich was verpasst? Kann man jetzt statt / auch : benutzen? Ist das denn zulässig? Und kann ich dann statt * auch . schreiben? Und wieso soll man durch : ganzzahlige Ergebnisse (also ohne Dezimalen?) bekommen und mit / nicht?

Zimond
Der Engine Papa
Posts: 3420
Joined: 06 Apr 2003, 19:34
Location: Krefeld
Contact:

Post: # 74209Post Zimond
08 Aug 2009, 23:22

in der informatik unterscheidet man zwischen / und DIV

Mit / wird normal geteilt und mit DIV wird ganzzahlig geteilt und gerundet, genau das übernimmt der Doppelpunkt bei Setnum Befehlen, allerdings zum Problem : Brüche werden ohnehin nur von den Befehlen setnum, wait und timer gelesen also wenn :

setnum (zahl ; 5/3)
setobj (objekt ; [zahl])
wait([zahl])

dann wird das Objekt auf den Wert 2 gesetzt während wait aber exakt 1,66 Sekunden wartet. Zur Berechnung von Koordinaten die dann entweder durch runto oder durch moveobj Verwendung finden spielt es also keine Rolle ob / oder :


@Wuji : Hast du es mal probiert statt einer Doppelklammer einmal direkt einen Monsternamen zu verwenden? Nur als test?

Post Reply