[SAMMELTHREAD] Kleine Scripting Fragen
- Rafelder
- Unerledigt
-
-
PlayerInfo[playerid][pGramm] += random(241)+70;
Oder das Makro:
#define randEx(%0,%1) (random(%1-%0+1) + (%0))Jeweils sind dann Zahlen von einschließlich 70 bis einschließlich 310 möglich.
-
What`s wrong?
format(str, sizeof(str), "Zielperson: %s [%d] | Kopfgeld: $%s", PlayerInfo[pID][pName], i, GetPVarInt(pID, "KG_Betrag"));
if(strlen(str) < 0) SendClientMessage(playerid, -1, "Momentan sind keine Aufträge da.");
else ShowPlayerDialog(i, DIALOG_KOPFGELD, DIALOG_STYLE_MSGBOX, "Hitmen Aufträge", str, "Schließen", "");Wenn der String 0 Zeichen hat wird mir die ClientMessage nicht gesendet.
-
Wenn der String 0 Zeichen hat wird mir die ClientMessage nicht gesendet.
Du prüfst ja auch ob der String weniger als 0 Zeichen hat.Der String kann so aber auch nicht 0 Zeichen haben.
Du solltest eher die Anzahl der Aufträge zwischenspeichern und das prüfen. -
Gut zu Wissen! Danke dir.
-
Kann man diesen Code irgendwie kleiner machen? Bzw. Schlauer?
new sql1[150],sql2[150],sql3[150],sql4[150],sql5[150],sql6[150],sql7[150],
sql8[150],sql9[150],sql10[150],sql11[150],sql12[150],sql13[150],sql14[150],sql15[150],
sql16[150],sql17[150],sql18[150],sql19[150],sql20[150],sql21[150],sql22[150],sql23[150],
sql24[150],sql25[150],sql26[150],sql27[150],sql28[150],sql29[150],sql30[150];format(sql1, sizeof(sql1), "UPDATE hauser SET Mieter1 = '-' WHERE ID = '%d'", HausIDErstellen);
mysql_query(sql1);format(sql2, sizeof(sql2), "UPDATE hauser SET Mieter2 = '-' WHERE ID = '%d'", HausIDErstellen);
mysql_query(sql2);format(sql3, sizeof(sql3), "UPDATE hauser SET Mieter3 = '-' WHERE ID = '%d'", HausIDErstellen);
mysql_query(sql3);format(sql4, sizeof(sql4), "UPDATE hauser SET Mieter4 = '-' WHERE ID = '%d'", HausIDErstellen);
mysql_query(sql4);format(sql5, sizeof(sql5), "UPDATE hauser SET Mieter5 = '-' WHERE ID = '%d'", HausIDErstellen);
mysql_query(sql5);format(sql6, sizeof(sql6), "UPDATE hauser SET Mieter6 = '-' WHERE ID = '%d'", HausIDErstellen);
mysql_query(sql6);format(sql7, sizeof(sql7), "UPDATE hauser SET Mieter7 = '-' WHERE ID = '%d'", HausIDErstellen);
mysql_query(sql7);format(sql8, sizeof(sql8), "UPDATE hauser SET Mieter8 = '-' WHERE ID = '%d'", HausIDErstellen);
mysql_query(sql8);format(sql9, sizeof(sql9), "UPDATE hauser SET Mieter9 = '-' WHERE ID = '%d'", HausIDErstellen);
mysql_query(sql9);format(sql10, sizeof(sql10), "UPDATE hauser SET Mieter10 = '-' WHERE ID = '%d'", HausIDErstellen);
mysql_query(sql10);format(sql11, sizeof(sql11), "UPDATE hauser SET Mieter11 = '-' WHERE ID = '%d'", HausIDErstellen);
mysql_query(sql11);format(sql12, sizeof(sql12), "UPDATE hauser SET Mieter12 = '-' WHERE ID = '%d'", HausIDErstellen);
mysql_query(sql12);format(sql13, sizeof(sql13), "UPDATE hauser SET Mieter13 = '-' WHERE ID = '%d'", HausIDErstellen);
mysql_query(sql13);format(sql14, sizeof(sql14), "UPDATE hauser SET Mieter14 = '-' WHERE ID = '%d'", HausIDErstellen);
mysql_query(sql14);format(sql15, sizeof(sql15), "UPDATE hauser SET Mieter15 = '-' WHERE ID = '%d'", HausIDErstellen);
mysql_query(sql15);format(sql16, sizeof(sql16), "UPDATE hauser SET Mieter16 = '-' WHERE ID = '%d'", HausIDErstellen);
mysql_query(sql16);format(sql17, sizeof(sql17), "UPDATE hauser SET Mieter17 = '-' WHERE ID = '%d'", HausIDErstellen);
mysql_query(sql17);format(sql18, sizeof(sql18), "UPDATE hauser SET Mieter18 = '-' WHERE ID = '%d'", HausIDErstellen);
mysql_query(sql18);format(sql19, sizeof(sql19), "UPDATE hauser SET Mieter19 = '-' WHERE ID = '%d'", HausIDErstellen);
mysql_query(sql19);format(sql20, sizeof(sql20), "UPDATE hauser SET Mieter20 = '-' WHERE ID = '%d'", HausIDErstellen);
mysql_query(sql20);format(sql21, sizeof(sql21), "UPDATE hauser SET Mieter21 = '-' WHERE ID = '%d'", HausIDErstellen);
mysql_query(sql21);format(sql22, sizeof(sql22), "UPDATE hauser SET Mieter22 = '-' WHERE ID = '%d'", HausIDErstellen);
mysql_query(sql22);format(sql23, sizeof(sql23), "UPDATE hauser SET Mieter23 = '-' WHERE ID = '%d'", HausIDErstellen);
mysql_query(sql23);format(sql24, sizeof(sql24), "UPDATE hauser SET Mieter24 = '-' WHERE ID = '%d'", HausIDErstellen);
mysql_query(sql24);format(sql25, sizeof(sql25), "UPDATE hauser SET Mieter25 = '-' WHERE ID = '%d'", HausIDErstellen);
mysql_query(sql25);format(sql26, sizeof(sql26), "UPDATE hauser SET Mieter26 = '-' WHERE ID = '%d'", HausIDErstellen);
mysql_query(sql26);format(sql27, sizeof(sql27), "UPDATE hauser SET Mieter27 = '-' WHERE ID = '%d'", HausIDErstellen);
mysql_query(sql27);format(sql28, sizeof(sql28), "UPDATE hauser SET Mieter28 = '-' WHERE ID = '%d'", HausIDErstellen);
mysql_query(sql28);format(sql29, sizeof(sql29), "UPDATE hauser SET Mieter29 = '-' WHERE ID = '%d'", HausIDErstellen);
mysql_query(sql29);format(sql30, sizeof(sql30), "UPDATE hauser SET Mieter30 = '-' WHERE ID = '%d'", HausIDErstellen);
mysql_query(sql30); -
Ja.
So:
new sql[512];
format(sql, sizeof(sql), "UPDATE hauser SET");
for(new i=1; i<30; i++) format(sql, sizeof(sql), "%s Mieter%d = '-', ", sql, i);
format(sql, sizeof(sql), "%s Mieter30 = '-' WHERE ID = '%d'", sql, HausIDErstellen);
mysql_query(sql); -
Ja.
So:
new sql[512];
format(sql, sizeof(sql), "UPDATE hauser SET");
for(new i=1; i<30; i++) format(sql, sizeof(sql), "%s Mieter%d = '-', ", sql, i);
format(sql, sizeof(sql), "%s Mieter30 = '-' WHERE ID = '%d'", sql, HausIDErstellen);
mysql_query(sql);kommen diese Fehler:
PHP18:24:43] CMySQLHandler::Query(UPDATE hauser SET Mieter1 = '-', Mieter2 = '-', Mieter3 = '-', Mieter4 = '-', Mieter5 = '-', Mieter6 = '-', Mieter7 = '-', Mieter8 = '-', Mieter9 = '-', Mieter10 = '-', Mieter11 = '-', Mieter12 = '-', Mieter13 = '-', Mieter14 = '-', Mieter15 = '-', Mieter16 = '-', Mieter17 = '-', Mieter18 = '-', Mieter19 = '-', Mieter20 = '-', Mieter21 = '-', Mieter22 = '-', Mieter23 = '-', Mieter24 = '-', Mieter25 = '-', Mieter26 = '-', Mieter27 = '-', Mieter28 = '-', Mieter29 = '-', Mieter30 ) - An error has occured. (Error ID: 1064, You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1) [18:24:43] OnQueryError() - Called.
-
Uh, wahrscheinlich ist das grade um ein paar Zeichen zu klein.
new sql[512];
zu:
new sql[600];Dann sollte es passen.
-
Kleines Problem mit Objecte.
Ich lasse ja maps mit einem Filterscript laden, ich besitze aber nur .amx Dateien.
So, und irgendwie muss es die Möglichkeit ja geben die Objecte zu entfernen, ich besitze 6 Modes wo Objecte sind und ich kann nicht einfach alle Objecte entfernen lassen.Habe es mal damit probiert aber klappt nicht so ganz:
Bevor ich das Filterscript laden lasse:
firstobjDM = CountDynamicObjects() + CountObjects();
Nach dem ich das Filterscript geladen habe:
maxobjectDM = firstobjDM + CountDynamicObjects() + CountObjects();
So ähnlich ist es bei den anderen auch, nur mit anderen Variablen.
Und beim Unloaden einer map:
i = maxobjectDM;
firstobj = firstobjDM;while (firstobj < i)
{DestroyDynamicObject(firstobj);
firstobj++;
index++;
}firstobj = firstobjDM;
while (firstobj < i)
{DestroyObject(firstobj);
firstobj++;
index++;
} -
-
Du könntest eine Schleife durch alle Dynamic Objekte machen (0 bis X) und die Position abfragen, und dann mit einer Range Abfrage prüfen, ob das Objekt im entsprechenden Umkreis liegt, wenn ja, entfernen.
-
Pascal.: Dein Mapper wird wahrscheinlich die Objekte in die Filterscripte laden, oder täusch ich mich da ?
Wenn ja wäre es das einfachste, wenn er 2 public Funktionen erstellt.
die einer heißt dann bspw. CreateDMObjects und die andere DestroyDMObjects, was diese tun soll ist klar ;D
Diese rufst du dann über CallRemoteFunction auf und kannst diese dann so ausführen lassen.Das ist wesentlich Effektiver und einfacher als das was du da vorhast.
Ich sehe es schon kommen, das bei deiner Variante in einigen Maps Objekte fehlen, weil sie versehntlich gelöscht wurden, aufgrund der ID.und die Variante von Jeffry find ich persönlich doch etwas - eh wie soll ich sagen eigenartig ?
Damit wird man sicherlich nicht alle Objekte entfernen können -
Somit könnte man alle Objekte entfernen lassen? (Die zb im Umkreis von 1000 Meter sind)
Da würde aber ein kleines Problem sein, was ist wenn nicht alle Objekte entfernt werden.
Eine Möglichkeit gibt es noch, da die Maps in verschiedene Welten sind könnte man Theoritisch alle Objekte die in der Map Welt sind entfernen lassen oder?//EDIT:
@BlackAce:
Ich habe kein Mapper, dass sind fast alles Racemaps (Dm Racing).
Die habe ich selber nur in der .amx bekommen. -
Wenn du jemanden hast, der die pwn Datei hat, dann wäre die Methode die BlackAce vorgeschlagen hat am sinnvollsten.
Wenn nicht, dann kannst du die Objekte auch nicht in Welten setzen, dann musst du es mit entsprechenden Flächen machen, in denen Umkreisen du die Objekte eben entfernst, wie erklärt.
Je nach dem was auf dich zutrifft.EDIT:
Dann geht es nur über den Umkreis, oder eben Flächen, vom Prinzip das gleiche, ein Umkreis ist ja auch eine Fläche. -
Nene, die Objekte sind schon in andere Welten.
Das ist alles so in den Maps mit drin, das einzige was nicht gemacht wurden ist, dass die Objekte gelöscht werden.
So meine Frage war, ob ich nicht abfragen kann ob das Objekt in der welt "x" ist und dann löschen? -
Ja, das würde dann gehen.
Mit
Streamer_GetIntData
Siehe hier: http://forum.sa-mp.com/showthread.php?t=102865 -
Ja, das würde dann gehen.
Mit
Streamer_GetIntData
Siehe hier: http://forum.sa-mp.com/showthread.php?t=102865Ah, alles Klar.
Gucke ich mir dann gleich mal an.
Bedanke mich trotzdem schon mal.//EDIT:
Jeffry:
Ich hatte es jetzt mal Probiert, klappt leider nicht so ganz.
Frage nebenbei, wie sieht es dann mit den Normalen Objekten aus, es kann ja sein das auch manche Objekte mit CreateObject erstellt wurden sind.Mein Code:
for (new id = 0; id < 89; id++) { // Das sind die worlds in dennen die Objekte gestreamt werden (0-89)
Streamer_GetIntData(STREAMER_TYPE_OBJECT, id, E_STREAMER_WORLD_ID);while (i < CountDynamicObjects()) {
if (IsValidDynamicObject(i)) {
DestroyDynamicObject(i);
index++;
}
}
} -
Warum wird der Textdraw: PlayerTextDrawShow(i,CTFSystem2[i][11]); //Pkt Gesamt (Gegner Punkte) etc. nicht angezeigt
for(new ctf=0;ctf<MAX_CTF_GEBIETE;ctf++)
{
new ctfstring[250],ctfstring2[250],string2[25];
if(IsPlayerInRangeOfPoint(playerid,3.0,CTFInfo[ctf][flPosX2],CTFInfo[ctf][flPosY2],CTFInfo[ctf][flPosZ2]))
{
if(Spieler[playerid][pFraktion] == 0) return SendClientMessage(playerid,ROT,"Du bist Zivilist, daher ist es nicht möglich das System zu starten!");
if(CTFInfo[ctf][ctfgestartet] == 1) return SendClientMessage(playerid,-1,"Dieses Gebiet wird bereits angegriffen");
if(IstSpielerInFraktion(playerid,7) || IstSpielerInFraktion(playerid,8) || IstSpielerInFraktion(playerid,9) || IstSpielerInFraktion(playerid,10) || IstSpielerInFraktion(playerid,11) || IstSpielerInFraktion(playerid,12))
{
if(CTFInfo[ctf][gwzeit] > gettime()) return SendClientMessage(playerid,ROT,"Das Gebiet kann noch nicht bekämpft werden!");
else if(CTFInfo[ctf][ctffid] == Spieler[playerid][pFraktion]) return SendClientMessage(playerid,ROT,"Das Gebiet gehört bereits euch!");format(string,sizeof(string),""#HTML_RED"Gebiet: "#HTML_WHITE" Euer Gebiet (%s) wird von der Fraktion %s angegriffen.",CTFInfo[ctf][gebietsname],Fraktionsname(playerid));
FraktionsChat(CTFInfo[ctf][ctffid],WEISS,string);format(string,sizeof(string),""#HTML_LOGIN"Gebiet: "#HTML_WHITE"Ihr habt das Gebiet %s angegriffen! Macht euch bereit!",CTFInfo[ctf][gebietsname]);
FraktionsChat(Spieler[playerid][pFraktion],WEISS,string);Delete3DTextLabel(CTFSystem3DText[ctf]);
Delete3DTextLabel(CTFSystem3DText2[ctf]);format(ctfstring2,sizeof(ctfstring2),""#HTML_RED"Flagge der Angreifer\n"#HTML_WHITE"Angreifer: %s",Fraktionsname(playerid));
CTFSystem3DText2[ctf] = Create3DTextLabel(ctfstring2,WEISS,CTFInfo[ctf][flPosX2],CTFInfo[ctf][flPosY2],CTFInfo[ctf][flPosZ2]+1,15.0,0,0);format(ctfstring,sizeof(ctfstring),""#HTML_GREEN"Flagge der Verteidiger\n"#HTML_WHITE"Verteidiger: %s",FraktionsCTFName(CTFInfo[ctf][ctffid]));
CTFSystem3DText[ctf] = Create3DTextLabel(ctfstring,WEISS,CTFInfo[ctf][flPosX1],CTFInfo[ctf][flPosY1],CTFInfo[ctf][flPosZ1]+1,15.0,0,0);CTFInfo[ctf][angreifer] = Spieler[playerid][pFraktion];
CTFInfo[ctf][flaggeverteidiger] = 0;
CTFInfo[ctf][flaggeangreifer] = 0;
CTFInfo[ctf][kampfzeit] = 0;
CTFInfo[ctf][angreiferflaggeerobert] = 0;
CTFInfo[ctf][verteidigerflaggeerobert] = 0;
CTFInfo[ctf][angreiferpunkte] = 0;
CTFInfo[ctf][verteidigerpunkte] = 0;
CTFInfo[ctf][ctfgestartet] = 1;
CTFInfo[ctf][flaggeangreiferliegen] = 0;
CTFInfo[ctf][flaggeverteidigerliegen] = 0;for(new i=0;i<MAX_PLAYERS;i++)
{
if(IsPlayerConnected(i) && !IsPlayerNPC(i))
{
if(IstSpielerInFraktion(i,CTFInfo[ctf][angreifer]) && Spieler[i][pFraktion] != 0)
{
PlayerTextDrawShow(i,CTFSystem2[i][0]); //box
PlayerTextDrawShow(i,CTFSystem2[i][1]); //Capture The Flag Text
PlayerTextDrawShow(i,CTFSystem2[i][2]); // Strich
PlayerTextDrawShow(i,CTFSystem2[i][6]); //Eure Punkte
PlayerTextDrawShow(i,CTFSystem2[i][7]); //Gegner Punkte
PlayerTextDrawShow(i,CTFSystem2[i][10]); // Pkt Gesamt (Eure Punkte)
PlayerTextDrawShow(i,CTFSystem2[i][11]); //Pkt Gesamt (Gegner Punkte)PlayerTextDrawShow(i,CTFSystem2[i][12]); //Pkt Anzahl
PlayerTextDrawShow(i,CTFSystem2[i][13]); //Gegner Punkteformat(string2,sizeof(string2),"%i",CTFInfo[ctf][verteidigerpunkte]);
PlayerTextDrawSetString(i,CTFSystem2[i][13],string2);format(string2,sizeof(string2),"%i",CTFInfo[ctf][angreiferpunkte]);
PlayerTextDrawSetString(i,CTFSystem2[i][12],string2);GangZoneFlashForPlayer(i,CTFInfo[ctf][CTFGangZone],CTFZoneFarbe(CTFInfo[ctf][angreifer]));
}
else if(IstSpielerInFraktion(i,CTFInfo[ctf][ctffid]) && Spieler[i][pFraktion] != 0) //Verteidiger
{
PlayerTextDrawShow(i,CTFSystem[i][0]); //box
PlayerTextDrawShow(i,CTFSystem[i][1]); //Capture The Flag Text
PlayerTextDrawShow(i,CTFSystem[i][2]); // Strich
PlayerTextDrawShow(i,CTFSystem[i][6]); //Eure Punkte
PlayerTextDrawShow(i,CTFSystem[i][7]); //Gegner Punkte
PlayerTextDrawShow(i,CTFSystem[i][10]); // Pkt Gesamt (Eure Punkte)
PlayerTextDrawShow(i,CTFSystem[i][11]); //Pkt Gesamt (Gegner Punkte)PlayerTextDrawShow(i,CTFSystem[i][12]); //Pkt Anzahl
PlayerTextDrawShow(i,CTFSystem[i][13]); //Gegner Punkteformat(string2,sizeof(string2),"%i",CTFInfo[ctf][angreiferpunkte]);
PlayerTextDrawSetString(i,CTFSystem[i][13],string2);format(string2,sizeof(string2),"%i",CTFInfo[ctf][verteidigerpunkte]);
PlayerTextDrawSetString(i,CTFSystem[i][12],string2);GangZoneFlashForPlayer(i,CTFInfo[ctf][CTFGangZone],CTFZoneFarbe(CTFInfo[ctf][angreifer]));
}
}
}
return true;
}
else return SendClientMessage(playerid,ROT,"Du bist nicht in der richtigen Fraktion dafür!");
}
} -
Ich hatte es jetzt mal Probiert, klappt leider nicht so ganz.
for (new id = 0, j = Streamer_CountItems(STREAMER_TYPE_OBJECT); id < j; id++)
{
if(IsValidDynamicObject(id) && Streamer_GetIntData(STREAMER_TYPE_OBJECT, id, E_STREAMER_WORLD_ID) <= 89)
{
DestroyDynamicObject(id);
}
}
Versuche es so.Heav3n: Das ist schon an der Code Größe keine kleine Frage mehr. Mache bitte einen Thread auf.
-
Bei manchen Maps sind ja auch Objekte die mit "CreateObject" erstellt wurden sind,
gibt es auch für die eine Möglichkeit?//EDIT:
Klappt leider auch nicht, habe nebenbei mal ein Debug gemacht:index sollte addiert werden sobald ein Object entfernt wird, aber wurde nichts entfernt.