for(new i = 0;i<MAX_PLAYERS;i++)
{
if(classid == 4)
{
DisablePlayerCheckpoint(i);
}
}
hier wird für classid 4 der checkpoint entfernt
for(new i = 0;i<MAX_PLAYERS;i++)
{
if(classid == 4)
{
DisablePlayerCheckpoint(i);
}
}
hier wird für classid 4 der checkpoint entfernt
versuchs mal in den GetPlayerName's statt "sizeof" einfach mal "MAX_PLAYER_NAME" zu benutzen, vll liegt es daran, aber was anderes ist mir jetzt nicht aufgefallen
suspect(playerid, params[])
{
new id, grund[256], pint;
if(sscanf(params, "uis",id,pint,grund)) return SendClientMessage(playerid, COLOR_GREY, "*:: /suspect [SpielerID] [Wanteds] [Grund] ::*");
if(id == INVALID_PLAYER_ID id == playerid IsPlayerNPC(id)) return SendClientMessage(playerid, COLOR_GREY, "*:: Spieler kann nicht gemeldet werden. ::*");
if(!GetPlayerFraktion(id, 2) !GetPlayerFraktion(id, 3)) return SendClientMessage(playerid, COLOR_GREY, "*:: Nur für Polizisten ::*");
if(PlayerInfo[playerid][pDuty] == 0) return SendClientMessage(playerid, COLOR_GREY, "*:: Du bist nicht im Dienst. ::*");
if(pint > 10 pint < 1) return SendClientMessage(playerid, COLOR_GREY, "*:: Die Wantedzahl muss zwischen 1 und 10 liegen. ::*");
if(strlen(grund) < 3 strlen(grund) > 255) return SendClientMessage(playerid, COLOR_GREY, "*:: Der Grund muss zwischen 3 und 255 Buchstaben lang sein. ::*");
if(GetPlayerFraktion(id, 2) GetPlayerFraktion(id, 3)) return SendClientMessage(playerid, COLOR_GREY, "*:: Du kannst kein Polizist/FBI Agent einsperren. ::*");
new str[256];
PlayerInfo[id][pWanteds] += pint;
format(str, sizeof(str), "<'WantedLevel:' %d ><'Grund:' %s >",PlayerInfo[id][pWanteds],grund);
SendClientMessage(id, COLOR_RED, str);
format(str, sizeof(str), "<'Spieler:' %s ><'WantedLevel:' %d >",ReadName(id),PlayerInfo[id][pWanteds]);
SendPolizeiMessage(COLOR_GREEN, str);
return 1;
}
probiers mal so aus ich habe die else's weggelassen und vor SendClientMessage jeweils ein return gesetzt
if(strcmp("motorrad",eingabe,true)==0)
{
format(string,sizeof string,"Fahrlehrer: %s hat dir einen Motorradschein gegeben!",SpielerName(playerid));
printf("%i",pID);
SendClientMessage(pID,HELLBLAU,string);
format(string, sizeof string,"Du hast %s einen Motorradschein gegeben!",SpielerName(pID));
SendClientMessage(playerid,HELLBLAU,string);
SetPVarInt(pID,"Motorradschein",1);
SpielerSpeichern(pID);
}
das ganze eig einfach nochmal nur mit motorrad
kannst du bitte den kompletten ausschnitt posten, das macht es etwas einfacher
um den spielernamen auszulesen brauchst du einfach nur diese kleinen zeilen:
new playername[MAX_PLAYER_NAME];
GetPlayerName(playerid,playername,MAX_PLAYER_NAME);
mfg
SmD
ich finde die methode ehrlich gesagt etwas umständlich, also ich würde es so machen:
if(GetPVarInt(i,"Fraktion") == GetPVarInt(playerid,"Fraktion"))
ich konnte das jetzt ned so rauslesen benutzt du SetPlayerTeam um dem spieler ein team zuzuweisen oder wie?
also mit getplayerteam würde es so gehen:
for(new i = 0; i<MAX_PLAYERS; i++)
{
if(!IsPlayerConnected(i)) continue;
if(GetPlayerTeam(i) == GetPlayerTeam(playerid))
{
SendClientMessage(i,die farbe,die nachricht);
}
}
ja des schon aber in "pName"
schreib das "Muelltour" im SetTimer mal klein also "muelltour"
Edit:
ich empfehle dir SetTimerEx zu nehmen, da du damit einen timer nur für einen spieler machen kannst
Beispiel:
SetTimerEx("muelltour",5000,0,"i",playerid);
ich weiß nicht ob das von dir beabsichtigt ist, aber du hast hinter einigen strcmps das "==0" vergessen
bist du sicher das die variable überhaupt einen inhalt hat? das müsstest du nochmal prüfen
eine andere möglichkeit wäre einfach den playername nochmal in eine extra variable auszulesen
Zu 1:
ich denke nicht das das funktionieren wird, da die for-schleife die nachricht an alle spieler sendet die in der fraktion 1,2 und 3 sind, du müsstest eine variable definieren, die die fraktion des spielers, der die nachricht sendet, liest und sie statt der fraktionsnummer einfügen
Zu 2:
Wann genau tritt der fehler auf, nur am 1. CP oder was genau passiert oder auch nicht
das bedeutet das du ein paar zeilen nicht richtig eingerückt hast.
also ich kenne safesetplayerinterior ned da müsstest du wenn schon eine eigene funktion für machen
das du in blueberry spawns liegt daran, dass er iwo die koordinaten nicht lesen konnt und jetzt am punkt 0,0,0 spawnt
Edit:
überprüf auch mal die spielerdatei ob da überhaupt was drin steht
falls du in einem haus spawnen sollst darfst du nicht "SetPlayerVirtualWorld" benutzen sondern "SetPlayerInterior"
Bei OnPlayerSpawn:
new playername[MAX_PLAYER_NAME];
GetPlayerName(playerid,playername,MAX_PLAYER_NAME);
new spielerdatei[64];
format(spielerdatei,sizeof(spielerdatei),"/Spawns/%s.ini",playername);
new Float:spawnx,Float:spawny,Float:spawnz;
spawnx = dini_FloatGet(spielerdatei,"SpawnX");
spawny = dini_FloatGet(spielerdatei,"SpawnY");
spawnz = dini_FloatGet(spielerdatei,"SpawnZ");
SetPlayerPos(playerid,spawnx,spawny,spawnz);
mfg
SmD
wieso hast du denn im timer 7200000 millisekunden drin, das ist ein wenig mehr als 10 sek und statt 1 musst du 0 nehmen, da der timer sonst immer wiederholt wird
Edit:
Und das TogglePlayerControllable(playerid,1) muss raus da der player sonst gleich wieder unfreezed wird und das playerid bei dem anderen toggleplayercontrollable muss durch pID ersetzt werden, da sonst du gefreezed wirst