Ja der text geht ja auch aber es Blinkt nicht es soll ja blinken
Ach stimmt, daran hatte ich nicht mehr gedacht.
Im Timer hast du "PoliceLight" als Array verwendet, im Befehl "Folgen". Das dürfte der Grund sein.
Ja der text geht ja auch aber es Blinkt nicht es soll ja blinken
Ach stimmt, daran hatte ich nicht mehr gedacht.
Im Timer hast du "PoliceLight" als Array verwendet, im Befehl "Folgen". Das dürfte der Grund sein.
Ich habe das Ganze übers Wochenende mal als "Proof of Concept" selbst erstellt.
Man muss aber dazu sagen, dass es auf Grund der von SA:MP gegebenen Limits nicht wirklich praktikabel ist.
Das Abspielen der GIFs funktioniert ohne Lags wie man im Video sieht. Das GIF wird alle 80ms aktualisiert, sodass die Frames flüssig ablaufen.
Die Größe des GIFs lässt sich steuern (siehe Video). Ich habe es mal mit zwei verschiedenen Größen erstellt, grundsätzlich sind aber auch andere Größen möglich.
Je nach eingestellter Draw-Distance kann das GIF auch von weitem gesehen werden, allerdings sieht man beim großen GIF schon, dass die Farben etwas verblassen. Wenn man etwas am Wetter spielt, könnte das eventuell noch besser bzw. auch schlechter werden.
BITTE FOLGEN
Also bei mir funktioniert das ohne Probleme, mit dem Code.
Du könntest versuchen, das Objekt an der Stelle des Spielers (GetPlayerPos) zu erstellen, anstatt an der fest definierten, vielleicht hilft das. Ich hatte damit schon Probleme, wenn ich Objekte bei 0,0,0 erstellt habe.
Das Array "Folgen" hast du auch mit MAX_VEHICLES deklariert, oder?
nicht kommplet! Weil es muss ja nicht jeder gleich meine sachen kopieren können
Ich benötige den ganzen Code, zumindest was das Objekt betrifft, andernfalls kann ich es schlecht beurteilen wo das Problem liegt, bzw. es selbst ausprobieren.
Da es ohnehin nicht funktioniert, spielt es doch auch keine Rolle ob es jemand kopiert.
Jetzt verstehe ich was du meinst. Du musst dich deutlicher ausdrücken.
ocmd:notruf(playerid, params[])
{
new pID;
if(Spieler[playerid][pFraktion] == 4)
{
if(sscanf(params, "u", pID))return SendClientMessage(playerid, COLOR_WHITE, "{247BA6}* Benutze: {00FF00}/notruf [SpielerID/Name]");
if(Spieler[pID][pTot] <= 0)return SendClientMessage(playerid, COLOR_WHITE, "{AFAFAF}Der Spieler ist nicht tot.");
SetPlayerCheckpointEx(playerid, Spieler[pID][pTotX], Spieler[pID][pTotY], Spieler[pID][pTotZ], 3.0, CP_TYPE_SANI, INVALID_CHECKPOINT_TYPE);
GameTextForPlayer(playerid, "~w~notruf~n~~r~redmarker", 5000, 1);
}
else if(Spieler[playerid][pFraktion] >= 1 && Spieler[playerid][pFraktion] <= 3)
{
if(sscanf(params, "u", pID))return SendClientMessage(playerid, COLOR_WHITE, "{247BA6}* Benutze: {00FF00}/notruf [SpielerID/Name]");
if(pServicePolice[pID] == 0)return SendClientMessage(playerid, COLOR_WHITE, "{AFAFAF}Der Spieler benötigt keinen Polizist.");
if(GetPlayerInterior(pID) > 0)return SendClientMessage(playerid, COLOR_WHITE, "{AFAFAF}Der Spieler ist in einem Interior. Ortung nicht möglich.");
if(GetPlayerVirtualWorld(pID) > 0)return SendClientMessage(playerid, COLOR_WHITE, "{AFAFAF}Der Spieler ist in einem Interior. Ortung nicht möglich.");
format(string, sizeof(string), "{33CCFF}Polizist %s hat deine Meldung entgegengenommen und ist nun auf dem Weg zu dir.", GetName(playerid));
SendClientMessage(pID, COLOR_WHITE, string);
format(string, sizeof(string), "{33CCFF}Du hast die Meldung von %s angenommen, mach dich auf den Weg zu ihm/ihr.", GetName(pID));
SendClientMessage(playerid, COLOR_WHITE, string);
pServicePolice[pID] = 0;
GetPlayerPos(pID, pos[0], pos[1], pos[2]);
SetPlayerCheckpointEx(playerid, pos[0], pos[1], pos[2], 4.0, CP_SERVICE, CP_TYPE_POLIZEI);
}
else
{
SendClientMessage(playerid, COLOR_WHITE, "{AFAFAF}Du bist kein Sanitäter bzw. Polizist.");
}
return 1;
}
Nur das der Code für LSPD/FBI/LVPD zugänglich ist.
Hast du denn meinen Code mal ausprobiert? Der macht genau das, was für die Medics passiert, auch für die Polizisten.
Dann sollte es so ausreichen, das wäre dann der gleiche Befehl wie zuvor, nur für Sanitäter und Polizisten zulässig.
ocmd:notruf(playerid, params[])
{
new pID;
if(Spieler[playerid][pFraktion] < 1 || Spieler[playerid][pFraktion] > 4) return SendClientMessage(playerid, COLOR_WHITE, "{AFAFAF}Du bist kein Sanitäter bzw. Polizist.");
if(sscanf(params, "u", pID))return SendClientMessage(playerid, COLOR_WHITE, "{247BA6}* Benutze: {00FF00}/notruf [SpielerID/Name]");
if(Spieler[pID][pTot] <= 0)return SendClientMessage(playerid, COLOR_WHITE, "{AFAFAF}Der Spieler ist nicht tot.");
SetPlayerCheckpointEx(playerid, Spieler[pID][pTotX], Spieler[pID][pTotY], Spieler[pID][pTotZ], 3.0, CP_TYPE_SANI, INVALID_CHECKPOINT_TYPE);
GameTextForPlayer(playerid, "~w~notruf~n~~r~redmarker", 5000, 1);
return 1;
}
Ich habe die ganzen Klammern und Einrückungen entfernt, da diese Art von Schreibweise, mit Anweisung hinter der if-Abfrage und darunter trotzdem eine eingerückte Klammer wahnsinnig verwirrend ist, unübersichtlich ist und sehr schnell zu Fehlern führt.
Er sagt mir jedes mal das ich kein Sanitäter bin warum?
Was hast du denn vor und in welcher Fraktion bist du?
Also %e für string, %d für Integer & für floats?
%f
Bzw wenn du es irgendwo mit z.B. zwei Nachkommastellen ausgeben willst:
%0.2f
Versuche es so:
ocmd:accept(playerid, params[])
{
if(!IsLoggedIn(playerid))return 1;
new string[256], option[32];
//Befehle mit Option und keinem Parameter:
if(sscanf(params, "s[32]", option))
{
SendClientMessage(playerid, COLOR_WHITE, "{247BA6}* Benutze: {00FF00}/accept [Option]");
SendClientMessage(playerid, COLOR_WHITE, "{247BA6}* Optionen: {AFAFAF}Paket, Heirat, Ticket");
return 1;
}
if(strcmp(option, "paket", true) == 0)
{
if(pAcceptPaket[playerid] != -255)
{
if(IsLoggedIn(pAcceptPaket[playerid]))
{
if(Spieler[playerid][pErstehilfe] == 1)return SendClientMessage(playerid, COLOR_WHITE, "{AFAFAF}Du hast bereits ein Erstehilfe-Paket.");
new Float:pos[3];
GetPlayerPos(pAcceptPaket[playerid], pos[0], pos[1], pos[2]);
if(!IsPlayerInRangeOfPoint(playerid, 4.0, pos[0], pos[1], pos[2]))return SendClientMessage(playerid, COLOR_WHITE, "{33CCFF}* Du bist nicht in der Nöhe vom Sanitäter.");
GiveMoney(playerid, -500);
format(string, sizeof(string), "{33CCFF}* %s hat dein Erste-Hilfe-Paket für $500 gekauft.", GetName(playerid));
SendClientMessage(pAcceptPaket[playerid], COLOR_WHITE, string);
GameTextForPlayer(pAcceptPaket[playerid], "~w~Paket verkauft~n~~g~500$", 5000, 1);
format(string, sizeof(string), "{33CCFF}* Du hast für $500 ein Erste-Hilfe-Paket von %s gekauft.", GetName(pAcceptPaket[playerid]));
SendClientMessage(playerid, COLOR_WHITE, string);
SendClientMessage(playerid, COLOR_WHITE,"{33CCFF}* Mit /erstehilfe kannst du deine Wunden Versorgen.");
pAcceptPaket[playerid] = -255;
Spieler[playerid][pErstehilfe] = 1;
Spieler[pAcceptPaket[playerid]][pJobMoney] += 500;
}
}
else
{
SendClientMessage(playerid, COLOR_WHITE, "{AFAFAF}Du hast keine Angebot erhalten!");
return 1;
}
return 1;
}
else if(strcmp(option, "ticket", true) == 0)
{
if(pAcceptTicket[playerid] != -255)
{
if(IsLoggedIn(pAcceptTicket[playerid]))
{
GiveMoney(playerid, -pAcceptTicketPreis[playerid]);
GiveMoney(pAcceptTicket[playerid], pAcceptTicketPreis[playerid]);
format(string, sizeof(string), "{33CCFF}Du hast den Strafzettel von %s in Höhe von $%d bezahlt.", GetName(pAcceptTicket[playerid]), pAcceptTicketPreis[playerid]);
SendClientMessage(playerid, COLOR_WHITE, string);
format(string, sizeof(string), "{33CCFF}%s hat deinen Strafzettel in Höhe von $%d bezahlt.", GetName(playerid), pAcceptTicketPreis[playerid]);
SendClientMessage(pAcceptTicket[playerid], COLOR_WHITE, string);
pAcceptTicket[playerid] = -255;
pAcceptTicketPreis[playerid] = 0;
}
else
{
SendClientMessage(playerid, COLOR_WHITE, "{AFAFAF}Der Spieler ist offline. Strafzettel wurde zurückgezogen.");
pAcceptTicket[playerid] = -255;
pAcceptTicketPreis[playerid] = 0;
return 1;
}
}
else
{
SendClientMessage(playerid, COLOR_WHITE, "{AFAFAF}Du hast keine Anfrage für ein Ticket erhalten.");
return 1;
}
return 1;
}
else if(strcmp(option, "heirat", true) == 0)
{
if(pAcceptHeirat[playerid] != -255)
{
if(IsLoggedIn(pAcceptHeirat[playerid]))
{
if(Spieler[playerid][pVerheiratet] == 1)
{
SendClientMessage(playerid, COLOR_WHITE, "{AFAFAF}Du bist bereits verheiratet.");
pAcceptHeirat[playerid] = -255;
return 1;
}
if(Spieler[pAcceptHeirat[playerid]][pVerheiratet] == 1)
{
SendClientMessage(playerid, COLOR_WHITE, "{AFAFAF}Der Spieler ist bereits verheiratet.");
pAcceptHeirat[playerid] = -255;
return 1;
}
if(GetMoney(pAcceptHeirat[playerid]) < 15000)return SendClientMessage(playerid, COLOR_WHITE, "{AFAFAF}Das Heiraten kostet 15.000$");
GiveMoney(pAcceptHeirat[playerid], -15000);
format(string, sizeof(string), "{FF9933}NEWS: %s und %s sind nun verheiratet.", GetName(playerid), GetName(pAcceptHeirat[playerid]));
SendClientMessageToAll(COLOR_WHITE, string);
Spieler[playerid][pVerheiratet] = 1;
Spieler[pAcceptHeirat[playerid]][pVerheiratet] = 1;
SavePlayer(playerid);
SavePlayer(pAcceptHeirat[playerid]);
format(Spieler[playerid][pVerheiratetName], MAX_PLAYER_NAME+1, "%s", GetName(pAcceptHeirat[playerid]));
format(Spieler[pAcceptHeirat[playerid]][pVerheiratetName], MAX_PLAYER_NAME+1, "%s", GetName(playerid));
pAcceptHeirat[playerid] = -255;
return 1;
}
}
return 1;
}
//Befehle mit Option und einem Parameter:
new pID;
if(sscanf(params, "s[32]u", option, pID))
{
SendClientMessage(playerid, COLOR_WHITE, "{247BA6}* Benutze: {00FF00}/accept [Option] [ID]");
SendClientMessage(playerid, COLOR_WHITE, "{247BA6}* Optionen: {AFAFAF}Polizei");
return 1;
}
if(strcmp(option, "polizei", true) == 0)
{
new Float:pos[3];
if(!IsPlayerConnected(pID))return SendClientMessage(playerid, COLOR_WHITE, "{AFAFAF}Der Spieler ist nicht online.");
if(Spieler[playerid][pFraktion] != 1 && Spieler[playerid][pFraktion] != 2 && Spieler[playerid][pFraktion] != 3)return SendClientMessage(playerid, COLOR_WHITE, "{AFAFAF}Du bist kein Beamter.");
if(pServicePolice[pID] == 0)return SendClientMessage(playerid, COLOR_WHITE, "{AFAFAF}Der Spieler benötigt keinen Polizist.");
if(GetPlayerInterior(pID) > 0)return SendClientMessage(playerid, COLOR_WHITE, "{AFAFAF}Der Spieler ist in einem Interior. Ortung nicht möglich.");
if(GetPlayerVirtualWorld(pID) > 0)return SendClientMessage(playerid, COLOR_WHITE, "{AFAFAF}Der Spieler ist in einem Interior. Ortung nicht möglich.");
format(string, sizeof(string), "{33CCFF}Polizist %s hat deine Meldung entgegengenommen und ist nun auf dem Weg zu dir.", GetName(playerid));
SendClientMessage(pID, COLOR_WHITE, string);
format(string, sizeof(string), "{33CCFF}Du hast die Meldung von %s angenommen, mach dich auf den Weg zu ihm/ihr.", GetName(pID));
SendClientMessage(playerid, COLOR_WHITE, string);
pServicePolice[pID] = 0;
GetPlayerPos(pID, pos[0], pos[1], pos[2]);
SetPlayerCheckpointEx(playerid, pos[0], pos[1], pos[2], 4.0, CP_SERVICE, CP_TYPE_POLIZEI);
return 1;
}
return 1;
}
Poste dann bitte den aktuellen kompletten Befehl hier, den muss man dann etwas umbauen, damit das mit sscanf klappt und man auch bei den anderen Optionen keine ID eingeben kann.
Und wenn zwei Spieler je einen Service gestartet haben, welcher Spieler wird dann akzeptiert?
Was genau willst du denn als Befehl im Spiel eingeben?
Was gibt denn der Server Log aus?
strmid(Haus[Spieler[playerid][pHouseKey]], inputtext, 0, strlen(inputtext), 32);
zu:
strmid(Haus[Spieler[playerid][pHouseKey]][hName], inputtext, 0, strlen(inputtext), 32);
Warum kann ich kein Notruf vom Spieler annehmen wen er ein gemacht hat.
Ein Code mit 118 Zeilen ist selbsterklärend keine kleine Scripting Frage.
Mache einen separaten Thread auf, andernfalls wird auch dieses Thema hier untergehen.
Das ist vom Prinzip exakt das gleiche, nur dass dort nicht "params" steht, sondern "inputtext". Das zu übertragen ist das angesprochene Grundverständnis.
Du machst das ja nicht erst seit gestern, von daher solltest du dieses Grundverständnis schnellstens aufbauen. Nimm dir das zu Herzen und arbeite an dir.
new pID = strval(inputtext);
Du musst wirklich an dir arbeiten, solche Basics (das ist eigentlich weniger als Basics), solltest du selbst hinbekommen, das ist absolutes Grundverständnis.
pID ist die eingegebene playerid aus dem inputtext mit strval.
Die if-Abfrage darf nicht mit strval gemacht werden, sondern mit strlen, sonst kannst du die ID 0 nicht eingeben.
pID sollte auch noch den Wert zugewiesen bekommen, sonst steht dort ja nie was drin.
PS:
Du könntest es auch einfach im Spiel ausprobieren.