Benutz lieber das Streamer Plugin von Incognito
[REL] Streamer Plugin v2.5
Enthält viel mehr als nur einen Objekt Streamer,wirklich sehr zu empfehlen.
Beiträge von Goldkiller
-
-
Einfach "\n" verwenden.Das funktioniert auch bei Dialogen,Filesystem und ClientMessages ( Wenn Ich mich nicht Irre) .
-
Sicherlich ist das möglich.Ich lasse fast immer Koordinaten aus Datein lesen.
Am besten du nimmst noch gleich sscanf() dazu,ein Tutorial zur Anwendung findest du in meiner Signatur.
ReadData("spawnkoordinaten.txt");stock ReadData(const file[]) {
new
Float:X,
Float:Y,
Float:Z,
c,
File:fFile,
tmp[128];
fFile = fopen(file,io_read);
if(fFile) {
while(fread(fFile,tmp,sizeof(tmp))) {
StripNewLine(tmp);
if(!tmp[0]) {
continue;
}
if(tmp[0] == ';') { // Für Kommentare bzw Zeilen die nicht gelesen werden sollen
continue;
}
if(sscanf(tmp,"p<,>fff",X,Y,Z)) {
printf("Fehler beim laden von Eintrag%d",c);
}
// AddCheckpoint(X,Y,Z);
c++;
}
}
else {
printf("Fehler beim Laden ReadData ( %s )",file);
return 0;
}
fclose(fFile);
return c;
}
stock StripNewLine(str[]) //ysi_misc.own
{
new
l = strlen(str);
while (l-- && str[l] <= ' ') str[l] = '\0';
} -
Und Schluss
-
if(IsVehicleConnected(vehicleid))
Was ist denn das?
Ersetz in der Zeile wo der Fehler ist das "return" durch "type = ".
: type = VTYPE_TRAIN;//hier ist der fehler -
Zitat
RAY: Das ganze ist aber ein Fail und wenn man es nicht richtig weiß dann sollte man es einfach mal sein lassen statt auf "Absenden" zu klicken. Das verwirrt Leute, die wirklich PAWN lernen wollen und regt mich wieder tierisch auf - außerdem sind solche Posts der beste Beweis, dass nicht alle mit hohem Postcount auch einen hohen IQ haben...
Was hat dass denn mit IQ zu tun ?
Dann würde Ich aber nochmal dass hier überdenken:ZitatAußer dem ist das
=
nur in Zuweisungen zu benutzen und hat in if-Abfragen nichts zu suchen.
Das kann man schon in Abfragen benutzen,denn
new
xval = 5;
if( (xval = 4) ) {
printf("xval = 4 ( %d )",xval);
}
ist völlig Okay.Man benutzt dann aber dopplete Klammern,sonst bekommt man eine Warnung.
Erklärung dazu gibt es hier -
Komisch dass ihr beide vergessen habt,dass ein einfaches "=" nur der Zuweisung dient, "==" aber für Vergleiche gebraucht wird.
-
Geht auch einfacher.
new
query[256],
//
Carid,
Carmodel,
Carfraktion,
Carjob,
Carnoob,
CarX,
CarY,
CarZ,
CarA,
AdacX,
AdacY,
AdacZ,
AdacA,
Carcolor1,
Carcolor2,
CarCost,CarSell;
format(query, sizeof(query),
"INSERT INTO `Vehicles` (`CarID` ,`Model` ,`Locked` ,`CarFraktion` ,`CarJob` ,`CarNoob`,`CarVerwahrt` ,`CarX` ,`CarY` ,`CarZ` ,`CarA`,`AdacX` ,`AdacY` ,`AdacZ` ,`AdacA` ,`Color1` ,`Color2` ,`Price` ,`Sell` ,`Owner`)\
VALUES ('%d', '%d', '0','%d','%d','%d','%d', '%f', '%f', '%f', '%f', '%f', '%f', '%f', '%f', '%d', '%d', '%d', '%d', 'Unbought');",
Carid, Carmodel,Carfraktion,Carjob,Carnoob, CarX, CarY, CarZ, CarA,AdacX,AdacY,AdacZ,AdacA, Carcolor1, Carcolor2, CarCost, CarSell);
Du kannst es auch direkt in mehrere Zeilen aufteilen.Wie du siehst ist am Ende der ersten Format Zeile ein Backslash \.Damit lässt du den String in der nächsten Zeile fortführen.Ach kannst du nach irgendeinem extra Parameter eine neue Zeile anfangen ( Dort ohne Backslash \ ). -
http://wiki.sa-mp.com/wiki/CreateVehicle
Du hast respawn_delay vergessen. -
Das solltest du doch schon alleine schaffen.
Überleg doch mal,was Ich geschrieben haben.
Killerid ist also 65535
if(gTeam[65535] != gTeam[einnahmeleiter] && 65535 != 65535)
Es wird doch der Code schon crashen bei der Abfrage mit gTeam,da es außerhalb der Array Grenzen ist.Es muss also vorher geprüft werden,ob die killerid INVALID_PLAYER_ID ist.
if(killerid != INVALID_PLAYER_ID) {
// Killer ist ein richtiger Spieler!
// Hier ist also schon sicher,dass der Code wegen der killerid nicht crashen wird
// da die killerid nicht größer als MAX_PLAYERS sein wird oder kleiner als 0.
// Damit wird schon mal nicht irgendwo auf's Array zugegriffen,wo es nicht möglich ist
if( gTeam[killerid] != gTeam[einnahmeleiter] ) {
}
} -
Anhand der Debug Infos bin ich mir jetzt nicht ganz sicher bis wo der Code läuft,aber ein Problem müsste killerid sein.
Angenommen man hat Selbstmord begangenist die killerid 0xFFFF oder 65335.
if(gTeam[killerid] != gTeam[einnahmeleiter]) Spätestens dort hättest du das Limit des Arrays deutlich überschritten und der Code stoppt.
Überprüf mal via Debug Notes was der wert hinter killerid ist,bevor der Check gemacht wird.Muss ja zugeben,teilweise hab ich selber dass Problem.Kommt schon mal vor,dass man vergisst abzufragen ob "killerid == INVALID_PLAYER_ID" ist ;).
-
Oh mein Gott... Es heisst DEATHMATCH.Death kommt von Tod, dass ist Englisch. http://www.dict.cc/englisch-deutsch/deathmatch.html
Dazu gibt es 100 Threads im Forum,such mal nach Deathmatch,nicht Dathmatch.Da findest du sicherlich genug.
Bsp: http://forum.sa-mp.de/wbb/san-…ght=deathmatch#post212104
-
und füg mal oben gleich mal
#pragma tabsize 0
ins script^^
Das hat aber mit dem eigentlichem Problem von tag mismatch nichts zu tun.CreateObject(modelid, Float:X, Float:Y, Float:Z, Float:rX, Float:rY, Float:rZ)
An den markierten Stellen hast du oben im Code Beispiel Integers,keine Floats.
[GRS]Systemfehler hat aber ebenfalls rechts,lad dir das 0.3b Server Paket herrunter.
-
So:
new
bskins[] = {
345,
346,
347
}; -
Ganz ehrlich,Ich versteh den Zusammenhang nicht zwischen OnPlayerKeyStateChange und OnPlayerStateChange in deinem Code.
Was passiert denn bei OnPlayerKeyStateChange aus der Abfrage mit den KEYS ? Hast du Debug-Notes eingefügt um zu schauen ob die KEY Abfrage wirklich fehl schlägt ?if(vhp<= 300) Da brennt das Fahrzeug schon längst.Glaube bei 400 fängt das Fahrzeug an zu brennen,also nimm mal lieber 450.
new Float:vx, Float:vy, Float:vz;
SetVehicleVelocity(vehicleid, vx*0, vy*0, vz*0);
Geil.Wie wäre es so
SetVehicleVelocity(vehicleid, 0.0,0.0, 0.0); -
Du Knecht bist gebannt,raff das endlich.
-
Nope.
Denn, der ASCII Wert von der Zahl 7 ist nicht 7.Auch weiss Ich nicht wieso du auf 2 kommst.if(text[0] == '7') {
text[0] = '/';
CallLocalFunction("OnPlayerCommandText","is",playerid,text);
}
Ich würde es mit CallLocal / Remote Funktion machen.Glaube nämlich,es funktioniert nicht wenn man direkt OnPlayerCommandText aufruft.//Edit: Hast wohl schon selber oben verbessert :p
-
Zitat
Es gibt nicht viel dabei zu erklären, es ist ein einfaches Makro das viel viel kürzer ist wie zb. dcmd und ihr müsst nicht kein extra dcmd_ thread hinzufügen, ihr könnt alles in dem Callback erledigen.
Das ganze ist Resourcen sparender als strtok, strrest, dcmd_..
Das hätte Ich mal gerne bewiesen.Jeder kann mit Wörtern um sich werfen ... . Kannst gerne mal dein Testscript zeigen,womit du dass herrausgefunden hast.
Denn so wie Ich dass sehe,ist das Makro von dir definitiv langsamer als dcmd. strtok & strrest kann Ich jetzt nichts zu sagen. -
Man sollte sich richtig informieren bevor man Tutorials schreibst ;).
ZitatChat:
256128
Textdraws: 1024
Namen: 24
Kannst es ja gerne nachlesen und dich selber überzeugen: Limits - SA-MP WikiZitat%x - Eine Zahl in hexadezimaler Schreibweise, Beispiel: "1101"
Ich glaube du hast da eindeutig etwas misverstanden. 1101 wäre Dualsystem ,bzw Binäir. Dafür nutzt man aber den Platzhalter %b
Hexadeizimal kannst du ja gerne dort nachlesen. -
Die Textdraws sehen wirklich nett aus ( Auf den Bildern jedenfalls ).Du gehst aber sehr verschwenderisch mit den Textdraws um,wenn Ich ehrlich bin.
Mal am Beispiel vom Navigations-Script:Es gibt nur einen Textdraw,der wirklich spezifisch für den Spieler ist,und das ist der mit der Distanz.
Die Anderen Textdraws sind für jeden Spieler gleich,seien es die Pfeile ( <- ^ -> v ) oder der Textdraw mit der Schrift "GPS System".
Momentan erstellst du 10 Textdraw pro Spieler alleine für das Navigationssystem! Das ist viel!
Mal einen kleine Rechnung ( Angenommen mit 20 Spielern ).
# Methode 1, von dir.
0 + ( 10 * 20 ) = 200 Textdraws
; 0 - Globale Textdraws
; 10 - Private Spieler Textdraws
; 20 - Spieler# Methode 2, von mir.
Ich würde dir empfehlen,bis auf den Textdraw,der die Distanz anzeigt,die Anderen jeweils nur 1x zu erstellen! Daraus ergibt sich nämlich die Rechnung:
9 + (1 * 20 ) = 29 Textdraws
; 9 - Globale Textdraws
; 1 - Private Spieler Textdraws
; 20 - SpielerDas macht 200 Textdraws aktuell,gegen 29 Textdraws.Das ist ein riesen Unterschied!Abgesehen davon,dass du den Speicher des Spielers
mit diesen 171 Textdraws mehr aufstockst, sollte man noch das Limit der Textdraws beachten.Lediglich wenn 0 Spieler Online sind,verbraucht deine Methode weniger Resourcen als die Zweite.
Vielleicht verbesserst du das ja mal bei gelegenheit