[SAMMELTHREAD] Kleine Scripting Fragen
- Rafelder
- Unerledigt
-
-
Du musst es nach dem Aufnehmen zerstören, mit DestroyPickup.
-
Zerstöre es so, funktionier teilweise nur eine kleine Sache:
Wenn 2 Pickups nebeneinander sind, hebt er einen auf und den anderen nicht, auch wenn ich mehrmals durchlaufe.
C
Alles anzeigenpublic OnPlayerPickUpPickup(playerid, pickupid) { printf("OnPlayerPickkUp aufgerufen (%d == %d)", pickupid, myPickup); if(pickupid == myPickup) { printf("Gebe Geld."); GivePlayerMoney(playerid,5000); SendClientMessage(playerid,0xFFFF0080,"Test"); DestroyPickup(myPickup); } return 1; } CMD:pickuptest(playerid,params[]) { print("Befehl aufgerufen"); new Float:x, Float:y, Float:z; GetPlayerPos(playerid, x, y, z); myPickup = CreatePickup(1212, 1, x, y+2, z, -1); printf("Erstelle ID %d", myPickup); return 1; } -
Das liegt daran, dass du es in die gleiche Variable (myPickup) schreibst, so vergisst der Server die erste ID.
Wenn du mehrere Pickups erstellen willst, dann musst du Arrays nutzen, und entsprechend definieren, wie viele Pickups erstellt werden können.So zum Beispiel:
C
Alles anzeigennew bool:myPickup[MAX_PICKUPS]; public OnPlayerPickUpPickup(playerid, pickupid) { printf("OnPlayerPickkUp aufgerufen (%d -> %d)", pickupid, myPickup[pickupid]); if(myPickup[pickupid]) { printf("Gebe Geld."); GivePlayerMoney(playerid,5000); SendClientMessage(playerid,0xFFFF0080,"Test"); DestroyPickup(pickupid); myPickup[pickupid] = false; } return 1; } CMD:pickuptest(playerid,params[]) { print("Befehl aufgerufen"); new Float:x, Float:y, Float:z; GetPlayerPos(playerid, x, y, z); new id = CreatePickup(1212, 1, x, y+2, z, -1); myPickup[id] = true; printf("Erstelle ID %d", myPickup); return 1; } -
Hi ich hoffe ich bin Hier richtig und man versteht mich.
Und zwar benutze ich das Include Pathfinder für eine NPC KI aber jetzt stehe ich vor einen Problem wo ich gerade nicht weiter komme.
Man fragt doch so eine Route ab oder?(Hier genaueres!)Aber wie kann ich jetzt mein NPC dort hinlaufen lassen also das er die Pfeile so abläuft?
Also ichbrauch ja die X,Y,Z Kords oder?
mfg. Mogly1
-
Pflanze ( das Objekt ) wird nicht erstellt.
Alles andere wird erfolgreich geladen. Die MySQL Log zeigt nichts ungewöhnliches an, auch die richtigen Koords.C
Alles anzeigenforward OnPlayerDrugsLoad(); public OnPlayerDrugsLoad() { new num_fields, num_rows, count = 0; cache_get_data(num_rows, num_fields, handle); if(!num_rows)return 1; for(new i=0; i < num_rows; i++) { new id = SearchFreeDrugID(); DrugInfo[id][d_Besitzer] = cache_get_field_content_int(i, "besitzer", handle); DrugInfo[id][d_Zustand] = cache_get_field_content_int(i, "zustand", handle); DrugInfo[id][d_Wasser] = cache_get_field_content_int(i, "wasser", handle); DrugInfo[id][d_Prozent] = cache_get_field_content_int(i, "prozent", handle); DrugInfo[id][d_PosX] = cache_get_field_content_float(i, "x", handle); DrugInfo[id][d_PosY] = cache_get_field_content_float(i, "y", handle); DrugInfo[id][d_PosZ] = cache_get_field_content_float(i, "z", handle); DrugInfo[id][d_Objekt] = CreateObject(826, DrugInfo[id][d_PosX], DrugInfo[id][d_PosY], DrugInfo[id][d_PosZ], 0.0, 0.0, 0.0); count ++; } printf("[INFO] %i/%i Drogenpflanze geladen.", count, sizeof(DrugInfo)); return 1; } -
Möglicherweise hast du das Limit an Objekten erreicht (1000).
Prüfe das, andernfalls mache einen Thread auf und poste den MySQL Log, der kommt, wenn die Pflanzen geladen werden. -
Wird das klappen?
PHP
Alles anzeigenstock mysql_ChecktID(tID) { new Query[128],count,stID[128]; format(stID,sizeof(stID),"%d",tID); mysql_real_escape_string(stID, stID); format(Query, sizeof(Query), "SELECT * FROM `Teleport` WHERE `TeleportID` = '%s'", stID); mysql_query(Query); mysql_store_result(); count = mysql_num_rows(); mysql_free_result(); return count; } //Befehl mysql_ChecktID(tID) return SendClientMessage(playerid,ROT,"Diese TeleportID existiert nicht!"); -
-
wird der Dann nicht nur die Fehlermeldung senden wenn ich mich versuche zur Id 0 zu teleportieren? Oder auch z.B wenn die Id 100 nicht existiert?
-
-
Die Abfrage, ob die Funktion 0 zurück gibt, heißt, dass wenn 0 Zeilen im SELECT sind, dann existiert der Teleport nicht, das gilt für alle IDs.
-
-
-
-
Ups, ja hat sich beim kopieren mit eingeschlichen.
Wenn du den Ort jedoch in einer extra Variablen speichern möchtest, muss du diese als String deklarieren und dann mit format füllen.
-
Yo, arbeite nun etwas mit Textdraws und habe eine Frage:
Ich habe ein Befehl erstellt womit ich sie erstelle und wieder entferne, klappt gut doch das war nur für Testzwecke erstellt. Jetzt möchte ich das wenn man auf dem Textdraw klickt was wie ein X aussieht, die Textdraws verschwinden. Dafür habe ich folgende Befehle:
Befehl um die Textdraws anzuzeigen und zu entfernen (Funktioniert perfekt)
C
Alles anzeigenMD:lotto(playerid,params[]) { if (IsPlayerInRangeOfPoint(playerid, 2.0, 1286.7998,-1329.1625,13.5549)) { if(Showing[playerid] == 1) { Showing[playerid] = 0; TextDrawHideForPlayer(playerid, Textdraw0); TextDrawHideForPlayer(playerid, Textdraw1); TextDrawHideForPlayer(playerid, Textdraw2); TextDrawHideForPlayer(playerid, Textdraw3); TextDrawHideForPlayer(playerid, Textdraw4); TextDrawHideForPlayer(playerid, Textdraw5); TextDrawHideForPlayer(playerid, Textdraw6); } else { Showing[playerid] = 1; TextDrawShowForPlayer(playerid, Textdraw0); TextDrawShowForPlayer(playerid, Textdraw1); TextDrawShowForPlayer(playerid, Textdraw2); TextDrawShowForPlayer(playerid, Textdraw3); TextDrawShowForPlayer(playerid, Textdraw4); TextDrawShowForPlayer(playerid, Textdraw5); TextDrawShowForPlayer(playerid, Textdraw6); } } return 1; }Und meine 2 anderen Befehle welche nicht wie gewollt funktionieren
Hier der Public
C
Alles anzeigenpublic OnPlayerClickTextDraw(playerid, Text:clickedid) { if(clickedid ==Textdraw1) { SendClientMessage(playerid, 0xFFFFFFAA, "Textdraw closed."); Showing[playerid] = 0; TextDrawShowForPlayer(playerid, Textdraw0); TextDrawShowForPlayer(playerid, Textdraw1); TextDrawShowForPlayer(playerid, Textdraw2); TextDrawShowForPlayer(playerid, Textdraw3); TextDrawShowForPlayer(playerid, Textdraw4); TextDrawShowForPlayer(playerid, Textdraw5); TextDrawShowForPlayer(playerid, Textdraw6); CancelSelectTextDraw(playerid); } return 1; }Und der Befehl um den Cursor anzuzeigen (funktioniert)
CCMD:zeiger(playerid,params[]) { SelectTextDraw(playerid, 0x00FF00FF); // Highlight green when hovering over SendClientMessage(playerid, 0xFFFFFFAA, "Mauszeiger ist nun an"); return 1; }Mein Problem: Die Textdraws verschwinden nicht wenn ich auf das Kreuz klicke..
-
Du hidest auch nirgendswo die TextDraws.
Du musst wenn schon auch im public OnPlayerClickTextDraw die Textdraws hiden. -
Habe bemerkt das ich im Public die Textdraws gezeigt habe anstatt zu hiden. Habe das verbessert aber es scheint nicht zu helfen
C
Alles anzeigenpublic OnPlayerClickTextDraw(playerid, Text:clickedid) { if(clickedid ==Textdraw1) { SendClientMessage(playerid, 0xFFFFFFAA, "Textdraw closed."); Showing[playerid] =0; TextDrawHideForPlayer(playerid, Textdraw0); TextDrawHideForPlayer(playerid, Textdraw1); TextDrawHideForPlayer(playerid, Textdraw2); TextDrawHideForPlayer(playerid, Textdraw3); TextDrawHideForPlayer(playerid, Textdraw4); TextDrawHideForPlayer(playerid, Textdraw5); TextDrawHideForPlayer(playerid, Textdraw6); CancelSelectTextDraw(playerid); } return 1; } -
Du musst die Größe das anklickbaren Bereiches mit TextDrawTextSize anpassen. https://wiki.sa-mp.com/wiki/TextDrawTextSize Der X Wert ist die Position PLUS die Größe des nach rechts anklickbaren Bereiches. Der Y Wert ist die geschätzte Höhe.
Angenommen du erstellst dein Textdraw bei X = 120 und Y = 90. Dann machst du den Text "Hallo Welt" da rein. Sagen wir, der Text ist so groß, dass er in etwa über ein Zehntel deines Bildschirmes geht (musst du abschätzen, oder mit einem Lineal abmessen), dann heißt das 640 durch 10, das wäre 64. Somit ist TextDrawTextSize-X = 120 + 64 = 184.
Nun misst, bzw. schätzt, du die Höhe des Textdraws, sagen wir mal du bekommst den Text in etwa 20 mal untereinander hin, bis dein Bildschirm von oben nach unten voll damit wäre. Heißt also: 480 durch 20, das gibt 24. Somit wäre TextDrawTextSize-Y = 24. -
Bevor ich mich dieser Rechnung die zurzeit noch kompliziert aussieht witme, habe ich da eine Frage zu:
Wenn ich mit dem Zeiger auf das Textdraw drüber "gehe", ändert sich die Farbe. Meine Frage, ist dann nicht die TextDrawTextSize Größe in Ordnung? Falls nicht wende ich mich an deine Rechnung @Jeffry
-