Setze mal nach dem Preis = strval(tmp) ein printf("Preis: %d | %s",Preis,tmp); und guck mal in der server log oder konsole nach was dort geprintet wird.
Beiträge von XeroX
-
-
Vorne jeweils PlayerInfo[playerid][pBanner] und PlayerInfo[playerid][pBanreason] löschen da cache_get_field_content die Daten nicht direkt zurückgibt wie zB cache_get_field_content_int oder ähnliches
-
GetPlayerName kann auch keinen Wert haben woher auch wenn der Spieler nicht Ingame ist. Nachdem ich den Code etwas ausgebessert habe sollte es nun funktionieren. Beachte die Kommentare die ich in einigen Zeilen gesetzt habe. Ausserdem rate ich zu einem command processor ala zcmd oder ocmd mit sscanf da dir das einiges an Arbeit abnimmt und sogar noch schneller als die ganze Sache mit den strcmp ist
if(strcmp(cmd, "/contract", true) == 0)
{
new playermoney;
new tmp[256];
new Preis, idx;
// Wenn der Spieler in der Fraktion 18 ist brauchen wir auch nicht Prüfen was er eingegeben hat da er es sowieso nicht darf.
if(PlayerInfo[playerid][pMember] == 18) return SCM(playerid, COLOR_GRAU, "Du kannst keinen Auftrag in deiner eigenen Agentur abgeben!");
tmp = strtok(cmdtext, idx1);
if(!strlen(tmp))
{
SCM(playerid, COLOR_RED, "{33CCFF}FEHLER:{FFFFFF} /contract [playerid] [kopfgeld]");
return 1;
}
giveplayerid = ReturnUser(tmp);
// Wir prüfen hier schon ob der Spieler der selbe ist der den Command eingegeben hat dergleiche ist wie der Zielspieler
// Unabhängig davon ob der Spieler der den Command eingegeben hat mehr oder weniger als 10k bzw 100k eingegeben hat.
if(giveplayerid == playerid) return SCM(playerid, COLOR_GRAU, "Du kannst auf dich keinen Auftrag setzen!");
tmp = strtok(cmdtext, idx1);
if(!strlen(tmp))
{
SCM(playerid, COLOR_RED, "{33CCFF}FEHLER:{FFFFFF} /contract [playerid] [kopfgeld]");
return 1;
}
Preis = strval(tmp);
if(Preis < 10000 || Preis > 100000) return SCM(playerid, COLOR_GRAU, "Nicht weniger als €10.000 oder mehr als €100.000!");
if (IsPlayerConnected(giveplayerid))
{
GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
GetPlayerName(playerid, sendername2, sizeof(sendername2));
playermoney = PlayerMoney[playerid];
// Hat der Spieler genug Geld ? Hier brauchen wir nicht prüfen ob der Preis > 0 ist da es oben bereits limitiert wurde auf minimal 10k und maximal 100k
if (playermoney >= Preis)
{
PlayerMoney[playerid] = SafeGivePlayerMoney(playerid, -Preis);
PlayerInfo[giveplayerid][pKopfgeld]+=Preis;
format(string, sizeof(string), "%s hat ein Kopfgeld auf %s ausgesetzt, Lohn €%d.",sendername2, giveplayer, Preis);
SendFamilyMessage(18, COLOR_YELLOW, string);
format(string, sizeof(string), "* Du hast ein kopfgeld auf %s ausgesetzt, Lohn €%d.",giveplayer, Preis);
SCM(playerid, COLOR_LIGHTBLUE, string);
PlayerPlaySound(playerid, 1052, 0.0, 0.0, 0.0);
}
else
{
SCM(playerid, COLOR_GRAD1, "Falscher transaction Betrag.");
}
}
else
{
format(string, sizeof(string), "%d ist kein Aktiver Spieler.", giveplayerid);
SCM(playerid, COLOR_GRAD1, string);
}
return 1;
} -
[wiki]CreateObject[/wiki]
[wiki]AttachObjectToVehicle[/wiki]Respektive die Dynamic Versionen der Funktionen nutzen also CreateDynamicObject und AttachDynamicObject
-
Für den Boden kann man ja normal CreateObject verwenden bzw den Streamer triggern lassen.
-
Dead by Daylight
-
Alternativ kannst du auch mit dem FileManager Plugin automatisch täglich erstellte ordner anlegen lassen. Somit sind deine dateien am Ende nicht unendlich groß und man kann schneller nachgucken wann was wie wo passiert ist.
Damit könnt ihr täglich seperierte logs erstellen lassen.
Wichtig: Um diese Funktion zu nutzen braucht ihr das FileManager Plugin
Achja noch etwas die Funktionen brauchen den scriptfiles Ordner im Pfad (die normalen SAMP Natives nicht) da man ja auch ausserhalb des scriptfiles ordners Ordner erstellen kann.
fileName ist der Dateiname den die Log datei haben soll zB aus chat wird chat.log
directory ist der unter Ordner nach dem Datums Ordner. Bsp: adm_cmds wird logs/05.06/2016/adm_cmds
szString ist der Text der geloggt letzendlich geschrieben werden soll.stock LogAction(const fileName[], const directory[], const szString[])
{
new path[128];
new d,m,y,h,M,s;
getdate(y,m,d);
gettime(h,M,s);
format(path,sizeof(path),"scriptfiles/logs/%02d.%02d.%04d",d,m,y);
if(!dir_exists(path))
{
dir_create(path);
format(path,sizeof(path),"scriptfiles/logs/%02d.%02d.%04d/%s",d,m,y,directory);
if(!dir_exists(path))
{
dir_create(path);
}
}
format(path,sizeof(path),"logs/%02d.%02d.%04d/%s/%s.log",d,m,y,directory,fileName);
new File:pFile = fopen(path,io_append);
if(pFile)
{
new string[1024];
format(string,sizeof(string),"[%02d:%02d:%02d]: %s",h,M,s,szString);
fwrite(pFile,string);
fwrite(pFile,"\r\n");
fclose(pFile);
}
}Am Ende wird dies so aussehen scriptfiles/logs/05.08.2016/chat.log und darin kann dann stehen: [00:46:36]: XeroX: Hi !
-
Kann ich nicht bestätigen. Habe in dem älteren Script mehrfach new var = random(var2); drinne stehen und funktioniert einwandfrei.
-
Der Text alleine ohne Irgentwelche Namen ist länger als 144 Zeichen ([wiki]Limits[/wiki]) somit wird er nicht komplett Angezeigt.
-
Poste doch erstmal den Callback so wie du ihn jetzt hast.
-
-
Einfach abfragen ob strlen von inputtext == 0 oder < 3 oder so ist. Somit kannst du von ausgehen das er ein falsches bzw zu kurzes Passwort eingegeben hat.
-
Du Benutzt strval um den Namen zu übergeben. strval gibt aber nur den integer wert eines strings zurück. Entweder direkt in die Variable namen lesen lassen oder mit strcat arbeiten.
-
Problem sehe ich darin das die ganzen Plugins wieder übern Haufen geworfen werden. Zumal WCF 2 / WBB4 sowieso schon einen Probleme bereitet was die Plugin Entwicklung angeht. (Fehlende / Unzureichende Dokumentation)
-
Du prüfst beim connecten ob der Spieler gebannt ist, was nicht sein, kann da davor kein query gesendet wird somit ist pBanned immer 0. Du müsstest erst Abfragen ob ban == 1 ist, sollte das der Fall sein wird der Spieler gekickt. Anderenfalls mit einem zweiten Query prüfen ob der Account existiert und danach je nach ergebnis login / register anzeigen lassen.
-
Er will den Server stoppen und nicht Starten. @Rocky Balboa
-
Alternativ kann auch colorpicker.com genutzt werden musst halt nur selber das 0x und hinten den Alphawert hinzufügen. 0xFF0000FF ist der Alpha Wert
-
Naja es ist immernoch ganz normales abfragen ob cmd einen command enthält. Nutz einen der command prozessoren. OCMD ZCMD YCMD.
-
Was soll überhaupt die Zuweisung sein ? if(Dtc_PlayerHaveCar[playerid][Dtc_PlayerKey[playerid]=3]) zB ?
-
Bedingt geht es mit dem Ternary Operator:
Dtc_PlayerHaveCar[playerid][Dtc_PlayerKey[playerid]=0] == 1 ? CarName[PlayerCar[playerid][Dtc_PlayerKey[playerid] = 0][CarModel]-400] : "Freier Slot"Musst dann halt statt dem Namen immer die Abfrage machen.