danke dir Dog.
Du weißt aber, dass das Goldkiller war, der dir den Code gepostet hat ![]()
danke dir Dog.
Du weißt aber, dass das Goldkiller war, der dir den Code gepostet hat ![]()
1.
Kick(playerid); //playerid = playerid vom Bot/NPC
2.
SetCameraBehindPlayer(playerid); //am ende einfügen
mfg. ![]()
Dieser Code ist sehr schlecht Reloadet und das nicht nur weil er 2 Timer benötigt, obwohl man das in einen schreiben kann ![]()
Du hast ja auch die Variable money noch nicht becshrieben ![]()
Schreibe es so:
if(dialogid == DIALOG_EINZAHLEN)
{
if(response == 0) return 1;
if(response == 1)
{
new money, string[128];
money = strval(inputtext);
if(GetPlayerMoney(playerid) < money)return SCM(playerid,msg,"Du hast nicht genug Geld.");
if(money<1||money>5000000)return SCM(playerid,ROT,"Falscher Wert (min. 1$ | max. 5000000$)");
GivePlayerMoney(playerid,-money);
SetPVarInt(playerid,"Konto",GetPVarInt(playerid,"Konto")+money);
format(string,sizeof(string),"Du hast erfolgreich %i$ auf dein Konto gezahlt.",money);
SendClientMessage(playerid,grün,string);
}
}
mfg. ![]()
Nein, es gibt keine andere Möglichkeit als einen Timer, aber du benötigst ja nur 1nen, bzw wenn du schon einen hast, kannst du alles auf 1nen Timer reduzieren ![]()
mfg. ![]()
Du kannst auch mit SetTimerEx arbeiten, dann ist eine Schleife nicht nötig ! ![]()
Bsp:
//Bei OnPlayerConnect
SetTimerEx("Up", 1000, 1, "i", playerid);
//Callback
forward Up(playerid);
public Up(playerid)
{
if(IsPlayerInRangeOfPoint(playerid, X, Y, Z)) //Natürlich ersetzen
{
MoveObject(...);
}
return 1;
}
mfg. ![]()
for(new i; i<100; i++)
{
if(!IsPlayerConnected(i)) continue;
if(!IsPlayerInAnyVehicle(i)) continue;
if(GetPlayerVehicleID(i) == GetPlayerVehicleID(playerid))
{
PlayAudioStreamForPlayer(i, "http....");
}
}
mfg. ![]()
Wie wäre es mit einem random System:
new skin = random(299);
SetPlayerSkin(playerid, skin);
oder irgentwie sowas evtl:
new skin = (playerid+70);
SetPlayerSkin(playerid, skin);
Alles möglich ![]()
mfg. ![]()
if(!IsPlayerInFrakt(playerid))return SendClientMessage(playerid,ROT,"Du bist kein Cop!");
Du hast das ! da vergessen ![]()
mfg. ![]()
Schreibe es so:
forward Audio_OnSetPack(audiopack[]);
public Audio_OnSetPack(audiopack[])
Du hast den forward vergessen ![]()
mfg. ![]()
So ein Abschlepp System ist ganz simpel, hier schreib doch kurz eins selber: AttachTrailerToVehicle
mfg. ![]()
Es ist schneller als DCMD und ZCMD keine Ahnung.
Jedoch ist es NICHT das langsamste und OCMD ist auch sehr übersichtlich
Du weißt aber, dass kleinerOpa (der schreiber von OCMD) so ziemlich viel bei ZCMD abgeschaut hat und nur das "COMMAND" zu "ocmd" geändert hat ![]()
und ich finde ZCMD besser, da es zwei nützliche Callbacks anstelle von OnPlayerCommandText hat und man so nicht auf Gross-/Kleinschreibung achten muss !
mfg. ![]()
strcmp ist eine Standart Funktion die erstmal garnichts mit Befehlen zu tun hat, sie vergleicht nur 2 Strings miteinander und prüft ob diese gleich sind.
Aber was ocmd, zcmd, dcmd angeht, dann muss ich dir recht geben das das definitiv zu viele xcmds sind ![]()
Dennoch hat jedes seine Vorteile, bis auf ocmd, was definitiv das langsamste ist ![]()
dcmd = Ressourcen sparend
zcmd = schnell
und die anderen cmd Arten haben auch ihre Vorteile ![]()
mfg. ![]()
Warum sollte das bei so einer Abfrage von Nöten sein?
Naja, ganz einfach, weil es eine for-Schleife ist, und diese fängt bei 0 an und endet bei MAX_PLAYERS und wenn ein Spieler nicht "connected" ist, springt er direkt auf den nächsten Spieler ![]()
Das ist ressourcen freundlicher ![]()
mfg. ![]()
So sollte es eigentlich funktionieren, "FARBE" durch deine Farbe ersetzen und gut ist.
Nein, das ist falsch !
Mache es so:
ocmd:a(playerid,params[])
{
new inhalt[140];
if(sscanf(params,"s",inhalt)) return SCM(playerid,FARBE,"Nutze: /a [TEXT]");
format(inhalt,140,"[%s %s: %s]",AdminRankName(playerid),SpielerName(playerid),inhalt);
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(!IsPlayerConnected(i)) continue;
if(!IstSpielerAdmin(i,1))return SCM(i,FARBE,"Du bist kein Admin.");
SendClientMessage(i,FARBE,inhalt);
}
return 1;
}
mfg. ![]()
@Rocky
wenn man mit zcmd oder dcmd oder ocmd arbeitet...verwendet man kein strtok sondern sscanf ![]()
mfg. ![]()
//Edit: Das muss so aussehen:
COMMAND:v(playerid, params[])
{
new String[200], vehicle;
new Float:x, Float:y, Float:z;
if(sscanf(params,"d",vehicle)) return SendClientMessage(playerid, l_red, "Benutze: /v [Fahrzeug Name]");
if(vehicle < 400 || vehicle > 611) return SendClientMessage(playerid, l_red, "Dieser Fahrzeug Name wurde nicht gefunden.");
new Float:a;
GetPlayerFacingAngle(playerid, a);
GetPlayerPos(playerid, x, y, z);
if(IsPlayerInAnyVehicle(playerid) == 1)
{
GetXYInFrontOfPlayer(playerid, x, y, 8);
}
else
{
GetXYInFrontOfPlayer(playerid, x, y, 5);
}
new PlayersVehicle = CreateVehicle(vehicle, x, y, z, a+90, -1, -1, -1);
LinkVehicleToInterior(PlayersVehicle, GetPlayerInterior(playerid));
format(String, sizeof(String), "Du hast dir ein %s gespawnt!", aVehicleNames[vehicle - 400]);
SendClientMessage(playerid, l_green, String);
return 1;
}
Der Inhalt, also was in diesem Command steht ist ziemlicher Schwachsinn teilweise, aber so müsste das aussehen ![]()
Sicher, dass die Variable "realchat" den Wert 1 hat und das gPlayerLogged[playerid], wenn man sich einloggt auf 1 gesetzt wird ?
Wenn das beides auf 1 ist, bin ich zu faul die 1000 Zeilen durchzugehen und nach Fehlern zu suchen !
Tut mir leid ![]()
mfg. ![]()
Kommt irgenteine spezielle Nachricht wenn man etwas eintippen will ?