[SAMMELTHREAD] Kleine Scripting Fragen
- Rafelder
- Unerledigt
-
-
Moin, mal eine frage warum Funktioniert das nicht ?
Der Baum bewegt sich kein bisschenCodeMoveDynamicObject(Holzfb[i][holzfb_ID], Holzfb[i][holzfb_x], Holzfb[i][holzfb_y]+0.001, Holzfb[i][holzfb_z], 0.0007, Holzfb[i][holzfb_urx], Holzfb[i][holzfb_ury], Holzfb[i][holzfb_urz]);
Wenn ich es so mache dann macht er keine Bewegung sondern ist direkt in der Position wo er sich "hinbewegen" soll
-
Der Baum bewegt sich kein bisschen
MoveDynamicObject(Holzfb[i][holzfb_ID], Holzfb[i][holzfb_x], Holzfb[i][holzfb_y], Holzfb[i][holzfb_z]+0.001, 0.001, Holzfb[i][holzfb_urx], Holzfb[i][holzfb_ury], Holzfb[i][holzfb_urz]);
und so?
-
-
Kleine Frage.
Habe OnPlayerClickPlayer drinnen.
Jedoch wird das irgendwie nicht gecalled.
Woran kann das liegen? Es wird einfach jarnichts davon ausgefuehrt.C
Alles anzeigenpublic OnPlayerClickPlayer(playerid, clickedplayerid, source) { new coordsstring[1024],storage[128]; new name[MAX_PLAYER_NAME + 1]; new Float:ratio=(PlayerInfo[clickedplayerid][pWon])/(PlayerInfo[clickedplayerid][pGames]); new Float:kdratio=(PlayerInfo[clickedplayerid][pKills])/(PlayerInfo[clickedplayerid][pDeaths]); GetPlayerName(clickedplayerid, name, sizeof(name)); format(storage, sizeof(storage), "Stats of %s (%d)\n", name, clickedplayerid); strcat(coordsstring,storage); format(storage, sizeof(storage), "Level:[%d]\n",GetPlayerScore(clickedplayerid)); strcat(coordsstring,storage); format(storage, sizeof(storage), "Games played: [%d]\n", PlayerInfo[clickedplayerid][pGames]); strcat(coordsstring,storage); format(storage, sizeof(storage), "Games won: [%d]\n", PlayerInfo[clickedplayerid][pWon]); strcat(coordsstring,storage); format(storage, sizeof(storage), "Win ratio: [%f]\n",ratio); strcat(coordsstring,storage); format(storage, sizeof(storage), "Times died: [%d]\n", PlayerInfo[clickedplayerid][pDeaths]); strcat(coordsstring,storage); format(storage, sizeof(storage), "Kills: [%d]\n", PlayerInfo[clickedplayerid][pKills]); strcat(coordsstring,storage); format(storage, sizeof(storage), "Kills/Deaths ratio: [%f]\n", kdratio); strcat(coordsstring,storage); format(storage, sizeof(storage), "Registration date: [%d]\n", PlayerInfo[clickedplayerid][pRegDate]); strcat(coordsstring,storage); new message[32]; format(message, sizeof(message), "You clicked on player %d", clickedplayerid); SendClientMessage(playerid, 0xFFFFFFFF, message); ShowPlayerDialog(playerid,DIALOG_STATS,DIALOG_STYLE_MSGBOX, "Statistics:",storage,"OK",""); return 1; }
-
Hast du einmal geklickt ? Musst glaub ich 2 mal quasi klicken einmal zum markieren und einmal für das aufrufen des callbacks.
-
Hast du einmal geklickt ? Musst glaub ich 2 mal quasi klicken einmal zum markieren und einmal für das aufrufen des callbacks.
Eigentlich sollte einmal klicken reichen, durch das hovern wird es automatisch markiert
Es wird einfach jarnichts davon ausgefuehrt.
Crashdetect geladen, mal einen print gesetzt nach ganz oben, wird dieser ausgeführt?
Es kann sein, dass der Callback falsch gehookt wird durch ein Include, wenn selbst das print nicht ausgeführt wird
-
Ich bräuchte eine Funktion die mir Random Positionen innerhalb einer Area zurückgibt.
Hat da vielleicht jemand eine die Zuverlässig funktioniert ?
-
innerhalb einer Area zurückgibt.
Meinst du ein Rechteck?
Dann:
C
Alles anzeigenstock RandomFloat(Float:min,Float:max,accuracy = 4){ if(min < 0.0 || max < 0.0 || min >= max) return 0.0; if(accuracy < 1 || accuracy > 6) accuracy = 4; new divValue = floatround(floatpower(10.0,accuracy)); return random(floatround(max)-floatround(min))+min+(random(divValue)/divValue); } stock RandomPointInRectangle(Float:minx,Float:miny,Float:maxx,Float:maxy,&Float:tx,&Float:ty){ tx = RandomFloat(0.0,floatsqroot(floatpower(minx-maxx,2)),6)+minx; ty = RandomFloat(0.0,floatsqroot(floatpower(miny-maxy,2)),6)+miny; }
-
Ja genau halt wie in einer gangzone z.B
Aber warum returnt die zweite Funktion das Ergebnis nicht?
RandomFloat returnt ja die random koordinaten aber bei RandomPointInRectangle müssten
die beiden Ergebnisse doch zusammengefügt und returnt werden, oder nutzt man diese Funktion anders?
-
oder nutzt man diese Funktion anders?
Du musst erst 2 Variablen erstellen und diese als die letzten beiden Parameter mitgeben, das sind Referenzen wie sie zum Beispiel GetPlayerHealth auch nutzt. (Daran erkennbar, dass ein "&" vor den Parametern steht
-
Aso jetzt habe ichs verstanden, danke!
-
Hey,
Habe DynamicAreas (8 Stück) und will in einer Funktion abfragen ob er in einer von dieser ist.
Die Funktion wird alle 2 Sekunden aufgerufen, ich weiß jetzt nicht genau was das schlauste wäre.So frage ich ja nach einer Area ab.
-
Du brauchst das doch gar nicht abfragen.
Du gibst ihm einfach eine ID.
-
Ich habe ein Problem. Ich will ein Timer setzten, dieser wird aber öfters gesetzt, wenn ich in den anderen Areas rein gehe.
Könnte ich noch eine Variable erstellen und dann abfragen, ob der Timer bereits gesetzt ist, oder gibt es eine vernünftige Lösung?Cif(areaid == XArea[0]) { SetTimerEx("X",2000,true,"i",playerid); PlayerArea[playerid] = 1; } if(areaid == XArea[1]) { SetTimerEx("X",2000,true,"i",playerid); PlayerArea[playerid] = 1; }
I
-
Könnte ich noch eine Variable erstellen und dann abfragen, ob der Timer bereits gesetzt ist
Das klingt vernünftig
-
Ich habe ein Problem. Ich will ein Timer setzten, dieser wird aber öfters gesetzt, wenn ich in den anderen Areas rein gehe.
Könnte ich noch eine Variable erstellen und dann abfragen, ob der Timer bereits gesetzt ist, oder gibt es eine vernünftige Lösung?Cif(areaid == XArea[0]) { SetTimerEx("X",2000,true,"i",playerid); PlayerArea[playerid] = 1; } if(areaid == XArea[1]) { SetTimerEx("X",2000,true,"i",playerid); PlayerArea[playerid] = 1; }
I
SetTimerEx() gibt eine Zahl zurück, die eine einmalige ID für die Timer darstellt. Wenn du diese in eine Variable speicherst, kannst du checken ob bereits ein Timer existiert und ggf. diesen per KillTimer killen. Solltest du den Weg gehen, solltest du entsprechend auch beim Aufruf des Timers die Variable auf einen invaliden Wert setzen (z.B. -1).
-
Danke dir!
Wie kann ich ein Delay erstellen?Ich habe eine KeyState abfrage, ich will nicht, dass man die Taste penetrieren kann und das dadurch die weiteren Funktionen öfters aufgerufen werden.
Was kann ich da machen? -
Was kann ich da machen?
Timestamp nutzen.
C
Alles anzeigen//Als Include quasi: #define SetDelay(%0,%1,%2) SetPVarInt(%0,%1,gettime()+(%2)) #define HasNoDelay(%0,%1) (GetPVarInt(%0,%1)<=gettime()) #define ClearDelay(%0,%1) DeletePVar(%0,%1) //Und dann kannst du das so nutzen: if(HasNoDelay(playerid,"test_delay")) { SetDelay(playerid, "test_delay", 5); //5 = 5 Sekunden Delay print("Kann nur alle 5 Sekunden geprintet werden!"); } //Wenn nicht mehr benötigt: ClearDelay(playerid, "test_delay");
-
Danke dir!
Wie kann ich ein Delay erstellen?Ich habe eine KeyState abfrage, ich will nicht, dass man die Taste penetrieren kann und das dadurch die weiteren Funktionen öfters aufgerufen werden.
Was kann ich da machen?Wenn ich es richtig verstehe, möchtest du dass wenn man eine bestimmte Taste drückt, erst nach drei Sekunden (z.B.) wieder die Taste drücken kann bzw. der Code ausgeführt wird? Das würde sich beispielsweise über das Speichern des aktuellen Timestamps (gettime()) realisieren. Dann kannst du den Wert in einer Variable speichern, die Differenz bilden und schauen, ob diese beispielsweise drei ist.
Sollte die Differenz unter einer Sekunde liegen (beispielsweise alle 500ms) kannst du mit [wiki]GetTickCount[/wiki]() arbeiten. Falls du dich für diese Funktion entscheidest, kann ich dir den Wikieintrag ans Herz legen.
-