SetPVarInt(playerid, "dDialog1234ListItem", listitem);
[SAMMELTHREAD] Kleine Scripting Fragen
- Rafelder
- Unerledigt
Dein Problem konnte durch einen User gelöst werden? Bedank dich bei ihm indem du seinen Beitrag als Hilfreich markierst sowie einen Daumen oben dalässt
Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!
Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
-
-
Wie kann ich bei einem listitem eines List Dialoges der ausgewählten listitem abspeichern und in 2 dialogen später abrufen?
Ist in der Variable eigentlich schon gespeichert. Du benutzt ja meinen MAX_PLAYERS-Dialog -> Ist sowieso zwischen gespeichert. -
-
Syno
TV?
Schick doch einfach Daten? -
Ich brauch mal ein Denkanstupser
Ich habe mir die Funktion gebastelt:
stock FindNextHaltestelle(Input[])
{
new str[128];
new pos = strfind(Input,"\n");
strdel(Input,0,pos);
format(str,128,"%s",Input);
pos = strfind(Input,"\n");
strdel(str,pos,sizeof(str));
return str;
}
So mit der Funktion möchte ich den Text aufteilen bzw die erste Haltestelle anzeigen lassen
Das ist mein Input:
"{FF8400}Buslinie 1:\nBank\nVisage Hotel\nAirport\nAutohaus Autobahn\nSupermarkt\nSteakhaus\nAmmunation\nPolice Department"
Ich möchte das er mir nur Bank ausgibt, doch leider gibt er mir nichts ausHat jemand ne idee wo ich was falsch gemacht habe?
//edit
Habe das jetzt so
stock FindNextHaltestelle(Input[])
{
new pos = strfind(Input,"\n");
strdel(Input,0,pos+1);
pos = strfind(Input,"\n");
strdel(Input,pos,strlen(Input));
return Input;
}
Lass ich es in der Funktion printen, dann zeigt er alles Sauber an
Lass ich es aber als Message senden, dann sendet der mir irgendein Mist von A-Z Sonderzeichen etc -
stock FindNextHaltestelle(Input[])
{
new pos = strfind(Input,"\n");
strdel(Input,0,pos+1);
pos = strfind(Input,"\n");
strdel(Input,pos,strlen(Input));
new returnstr[20];//Anpassen
format(returnstr, sizeof returnstr, "%s", Input);
return returnstr;
} -
Ich brauch mal ein Denkanstupser
Ich habe mir die Funktion gebastelt:
stock FindNextHaltestelle(Input[])
{
new str[128];
new pos = strfind(Input,"\n");
strdel(Input,0,pos);
format(str,128,"%s",Input);
pos = strfind(Input,"\n");
strdel(str,pos,sizeof(str));
return str;
}
So mit der Funktion möchte ich den Text aufteilen bzw die erste Haltestelle anzeigen lassen
Das ist mein Input:
"{FF8400}Buslinie 1:\nBank\nVisage Hotel\nAirport\nAutohaus Autobahn\nSupermarkt\nSteakhaus\nAmmunation\nPolice Department"
Ich möchte das er mir nur Bank ausgibt, doch leider gibt er mir nichts ausHat jemand ne idee wo ich was falsch gemacht habe?
//edit
Habe das jetzt so
stock FindNextHaltestelle(Input[])
{
new pos = strfind(Input,"\n");
strdel(Input,0,pos+1);
pos = strfind(Input,"\n");
strdel(Input,pos,strlen(Input));
return Input;
}
Lass ich es in der Funktion printen, dann zeigt er alles Sauber an
Lass ich es aber als Message senden, dann sendet der mir irgendein Mist von A-Z Sonderzeichen etcAlle Zeichenketten/Strings werden als original an Funktionen Übergeben heißt wenn du mit strdel arbeitest löscht du einfach den Rest und kannst danach gar keine weitere Haltestelle mehr abrufen, weil die Daten gelöscht wurden (bei Syno: seinem Beispiel der selbe Fehler )
So sollte es klappen:
stock FindHaltestelle(Input[], num)
{
new num_count = 0, i = 0;
new result[64], result_num = 0;
while(Input[i] != '\0')
{
if(Input[i] == '\n')
{
if(Input[i+1] == '\0')break; // *Input[]* endet mit "\n" (danach ist nichts mehr zu finden) -> BREAK
num_count++;
i+=1; // setze *i* nach "\n"
}
if(num_count == num)
{
result[result_num] = Input[i];
result_num++;
}
i++;
}
return result;
}Laut deinem beispiel-text:
FindHaltestelle(Input[], 0) -> "{FF8400}Buslinie 1:"
FindHaltestelle(Input[], 1) -> "Bank"
FindHaltestelle(Input[], 2) -> "Visage Hotel"
FindHaltestelle(Input[], 3) -> "Airport"
... -
Bei den
stock FindNextHaltestelle(Input[])
{
new pos = strfind(Input,"\n");
strdel(Input,0,pos+1);
pos = strfind(Input,"\n");
strdel(Input,pos,strlen(Input));
return Input;
}
Bekomm ich laut debug vor den resturn den richtigen wert raus
Er soll mir das erste anzeigen was in den string nach den ersten \n steht
nur das nix anderes
Und da sendet er mir so ein Müll wie das:
[23:18:19] Funktion: Autohaus Autobahn
[23:18:19] Message: (Irgendein Sonderzeichen)
[23:18:19] Funktion: Autohaus Autobahn
bei den Code
for(new c = 0; c < sizeof(BusInfo); c ++)
{
if(IsPlayerInRangeOfPoint(i,10.0,BusInfo[code=c][bX],BusInfo[code=c][bY],BusInfo[code=c][bZ]) && BusText[i] != BusInfo[code=c][bX])
{
BusText[i] = BusInfo[code=c][bX];
printf("Message: %s",FindNextHaltestelle(BusInfo[code=c][bLable]));
format(query,128,"Nächste Haltestelle: %s",FindNextHaltestelle(BusInfo[code=c][bLable]));
SendClientMessage(i,cYellow,query);
break;
}
}
Es muss doch entweder ein Bug von Samp aus sein oder ich bin doof -
Schonmal versucht meins oder d0. 's zu machen?
-
Das mit den formatieren am ende hat sogar geklappt,
Finde es zwar komisch das es Bugs gibt wenn ich den direkt returne aber es klappt nunDas von d0. währe mir einfach zu aufwändig gewesen wenn ich das für hunderte Texte machen müsste da is meins definitiv besser
-
Beavis:
sobald du deine Funktion einmal ausgeführt hast wird der Inhalt von "BusInfo[code=c][bLable]" bis auf das eine Ergebnis gelöscht ... heißt es Funktioniert nur ein einziges mal deine "bessere" Funktionbeachte lieber meinen oberen Beitrag, da hatte ich es schon erklärt
EDIT: nebenbei, das ist nicht aufwendig sofern man Arrays/Zeichenketten komplett verstanden hat. So ein Code ist innerhalb von 2-3 Minuten fertig (schneller als ewig mit strdel zu spielen
-
Es soll ja auch nur einmal Funktionieren, da
{2307.9595,2418.8325,10.8203,"{FF8400}Buslinie 1:\nBank\nVisage Hotel\nAirport\nAutohaus Autobahn\nSupermarkt\nSteakhaus\nAmmunation\nPolice Department"},
{2142.4578,2358.4353,10.8203,"{FF8400}Buslinie 1:\nVisage Hotel\nAirport\nAutohaus Autobahn\nSupermarkt\nSteakhaus\nAmmunation\nPolice Department\nBank"},
{2049.8838,1918.2258,12.3294,"{FF8400}Buslinie 1:\nAirport\nAutohaus Autobahn\nSupermarkt\nSteakhaus\nAmmunation\nPolice Department\nBank\nVisage Hotel"},
{1716.2192,1377.9611,10.6406,"{FF8400}Buslinie 1:\nAutohaus Autobahn\nSupermarkt\nSteakhaus\nAmmunation\nPolice Department\nBank\nVisage Hotel\nAirport"},
{2078.6287,1413.8086,10.8203,"{FF8400}Buslinie 1:\nSupermarkt\nSteakhaus\nAmmunation\nPolice Department\nBank\nVisage Hotel\nAirport\nAutohaus Autobahn"},
{2158.1570,1992.6667,10.8203,"{FF8400}Buslinie 1:\nSteakhaus\nAmmunation\nPolice Department\nBank\nVisage Hotel\nAirport\nAutohaus Autobahn\nSupermarkt"},
{2386.3877,1967.5383,10.8203,"{FF8400}Buslinie 1:\nAmmunation\nPolice Department\nBank\nVisage Hotel\nAirport\nAutohaus Autobahn\nSupermarkt\nSteakhaus"},
{2533.2708,2092.8899,10.8203,"{FF8400}Buslinie 1:\nPolice Department\nBank\nVisage Hotel\nAirport\nAutohaus Autobahn\nSupermarkt\nSteakhaus\nAmmunation"} -
Es soll ja auch nur einmal Funktionieren, da
{2307.9595,2418.8325,10.8203,"{FF8400}Buslinie 1:\nBank\nVisage Hotel\nAirport\nAutohaus Autobahn\nSupermarkt\nSteakhaus\nAmmunation\nPolice Department"},
{2142.4578,2358.4353,10.8203,"{FF8400}Buslinie 1:\nVisage Hotel\nAirport\nAutohaus Autobahn\nSupermarkt\nSteakhaus\nAmmunation\nPolice Department\nBank"},
{2049.8838,1918.2258,12.3294,"{FF8400}Buslinie 1:\nAirport\nAutohaus Autobahn\nSupermarkt\nSteakhaus\nAmmunation\nPolice Department\nBank\nVisage Hotel"},
{1716.2192,1377.9611,10.6406,"{FF8400}Buslinie 1:\nAutohaus Autobahn\nSupermarkt\nSteakhaus\nAmmunation\nPolice Department\nBank\nVisage Hotel\nAirport"},
{2078.6287,1413.8086,10.8203,"{FF8400}Buslinie 1:\nSupermarkt\nSteakhaus\nAmmunation\nPolice Department\nBank\nVisage Hotel\nAirport\nAutohaus Autobahn"},
{2158.1570,1992.6667,10.8203,"{FF8400}Buslinie 1:\nSteakhaus\nAmmunation\nPolice Department\nBank\nVisage Hotel\nAirport\nAutohaus Autobahn\nSupermarkt"},
{2386.3877,1967.5383,10.8203,"{FF8400}Buslinie 1:\nAmmunation\nPolice Department\nBank\nVisage Hotel\nAirport\nAutohaus Autobahn\nSupermarkt\nSteakhaus"},
{2533.2708,2092.8899,10.8203,"{FF8400}Buslinie 1:\nPolice Department\nBank\nVisage Hotel\nAirport\nAutohaus Autobahn\nSupermarkt\nSteakhaus\nAmmunation"}
sobald dein Bus die Linie ein zweites mal fährt sind die Daten leider gelöschtEDIT:
Hier ist der ganze Code ohne dem "num" Parameter, da du den anscheinend gar nicht brauchst
stock FindNextHaltestelle(Input[])
{
new i = 0;
new result[64], result_num = -1;
while(Input[i] != '\0')
{
if(Input[i] == '\n')
{
if(result_num != -1)break;
result_num = 0;
i+=1; // setze *i* nach "\n"
}
if(result_num > -1)
{
result[result_num] = Input[i];
result_num++;
}
i++;
}
return result;
} -
Hey Leute, wenn ich mit gettime() nen Timestamp geholt habe, kann ich den dann nur über nen PHP Script wieder in ein Datum (+Uhrzeit) formatieren? Oder bringt Pawn da eine eigene Funktion mit?
-
man kann es per MySQL umrechnen lassen, oder sich eine Funktion erstellen die das auslesen kann
Falls du mit MySQL arbeitest, habe ich das hier:
GetTimestamp(Timestamp)
{
new Wert[50],query[128];
format(query, 128, "SELECT FROM_UNIXTIME(%d, '%s.%s.%s %s');", Timestamp, "%d","%m","%Y","%T");
mysql_query(query, (-1), (0), SQL);
mysql_store_result(SQL);
mysql_fetch_string(Wert,SQL);
mysql_free_result(SQL);
return Wert;
}
anwendung:
format(str,128,"%s Uhr",GetTimestamp(Timestamp));
Das Uhr steht dahinter, da der erst das Datum sendet und dann die Uhrzeit
Aber bevor ich es vergesse, das plugin von den MySQL was ich nutze ist von Strickenkid -
Hab es jetzt über die HTTP Methode von Pawn und einem PHP Script gemacht.
Nur ein Problem.Ich hole mit SORT ASC Einträge aus der Datenbank. Laut Log werden diese auch in der korrekten Reihenfolge an mein PHP Script geschickt.
Im Callback der HTTP Funktion im Script gebe ich dann den Inhalt des PHP Scripts aus. Das funktioniert auch. Nur ist dort die Reihenfolge durcheinander.Kann es sein, dass die HTTP REquest unterschiedlich schnell Ablaufen und dann auch unterschiedlich ausgegeben werden?
-
Inwiefern ist die reihenfolge durcheinander?
-
Hier
so holt das die MYSQL
Log:
Code[Mon May 6 12:44:18 2013] Function: mysql_query executed: "SELECT `Newname`,`Date` FROM `database`.`Namechange` WHERE `ID` = 1 ORDER BY `Namechange`.`Date` ASC" with result: "0". [Mon May 6 12:44:18 2013] Function: mysql_store_result executed with result: "1" [Mon May 6 12:44:18 2013] Function: mysql_num_rows executed with result: "%". [Mon May 6 12:44:18 2013] Function: mysql_fetch_row executed with result: "Testuser|1367836212". [Mon May 6 12:44:18 2013] Function: mysql_fetch_row executed with result: "Hagi|1367836222". [Mon May 6 12:44:18 2013] Function: mysql_fetch_row executed with result: "Hagi_Lorma|1367836225".
Man sieht, der Return ist nach dem Date geordnet.
In dieser Reihenfolge wird das an mein PHP Script geschickt. Jede Row in einem HTTP Request.
Im Callback zu HTML(); wird einfach der Rückgabewert via SendClientMessage ausgegeben.Es wird allerdings nicht wie oben, sondern so ausgegebene.
edit: Bei der Ausgabe ist der Timestamp natürlich durch die entsprechende Datums Formatierung angegeben (dafür ja das php script)
-
Hey, habe ein Problem bei einer Stringzuweisung.
Wenn ich dem Hausbesitzer einen Namen zuweise, wird nur der Anfangsbuchstabe dann dadrin gespeichert, obwohl dieser 24 Zellen besitzt.LG
-
Code?
-