Ja das würde diesen Fehler beheben, allerdings wird "OnPlayerDisconnect" nicht zwangsweise aufgerufen für alle Spieler. Bei Logout/Kick/Ban oder Crash wird es zwar aufgerufen, allerdings gibt es noch andere Fälle, wie z.B. einen Internetausfall, was bei Wlan und Samp gerne vorkommt (Zu sehen an "Lost Connection to Server...").
Beiträge von Mann im Mond
-
-
So sollte es gehen, allerdings rate ich dir hierzu nicht, wenn du den ganzen Aufwand nur wegen 2 Befehlen machst. Wenn du diesen Timer abr bereits in deinem Script hast bzw. einen Timer, der jede Minute durchläuft brauchst, kannst du es verwenden...
KeksOfDeath: Ich denke du solltest bedenken, dass es durchaus Leute gibt, die sich nach dem Befehl ausloggen und andere Spieler dann dessen ID einnehmen...
// ganz oben
forward CheckTime();
new
CmdTime[MAX_PLAYERS];
// in OnPlayerConnect
CmdTime[playerid] = -1;// in OnGameModeInit
SetTimer("CheckTime",60000,1); // globaler Timer der jede Minute aufgerufen wird// in dem Befehl, der nur nach einer bestimmten Zeit gehen sollen
CmdTime[playerid] = 60; // 60 für 1 Stunde usw.// Die Überprüfung, z.B. in dem Befehl
new
string[64];
if(CmdTime[playerid] > 0)
{
format(string,sizeof(string),"Du kannst den Befehl in %d wieder benutzen", CmdTime[playerid]);
SendClientMessage(playerid,COLOR,string);
return 1;
}// Der public
public CheckTime()
{
for(new i = 0; i < GetMaxPlayers(); i++)
{
if(IsPlayerConnected(i))
{
if(CmdTime[i] > 0)
{
CmdTime[i]--;
}
if(CmdTime[i] == 0)
{
CmdTime[i] = -1;
}
}
}
} -
Nein du kannst nur zwischen Race Checkpoints (einige verschiedenen Varianten wie z.B. Flugcheckponts, Zielflagge oder normale) und den normalen Checkpoints ohne Pfeil wechseln.
Wenn du jeden Spieler ne andere Farbe zuweisen willst und die Position der Spieler/des Spielers auf der Karte sichbar sein soll, solltest du nach Markern suchen:
Je nachdem, was du machen willst entweder
SetPlayerMarkerForPlayer oder ShowPlayerMarkers und SetPlayerColor -
Wenn die Autos nur manchmal unsichtbar sind und nach einem relogg wieder auftauchen, kann ich dir den Fehler sagen. Wenn Sie dauerhaft unsichtbar sind, du aber einen Schatten des Autos siehst, handelt es sich um das Problem mit "LinkVehicleToInterior". Wenn du die Atuos gar nicht siehst und zwar dauerhaft sollte es sich um eine andere virtuelle Welt handeln: Autos sind nur in der Virtual World "0" sichtbar, in allen anderen kannst du die, genauso wie zb Pikcups o.ä. nicht sehen.
Wenn keins von oben zutrifft, kann ich dir auf die Schnelle auch nciht weiterhelfen -
Na ja danke für die Antwort (ohne wirklichen Nutzen), aber ich hab meinen Leichtsinnsfehler gefunden...
-
Hi, ich habe nun mal eine kleine Frage zu Rcons und zwar:
Wir besitzen einen Testserver, sowie einen normalen Server. Die beiden haben die selbe IP, lediglich der Port ist anders. Wenn ich selbstgemacht Rcons auf dem Testserver mache, funktionieren die, wenn ich die gleichen allerdings auf dem richtigen mache, gehen sie nicht. Woran kann das liegen? -
Ein solcher Befehl ist nicht möglich, ein Gamemode mit einem solchen Befehl wird es mit Sicherheit auch nicht geben.
-
Wenn die Koordinaten im PlayerToPoint die des Wettbüros sind, sollte es so gehen
if(strcmp(cmd, "/lotto", true) == 0)
{
if(IsPlayerConnected(playerid))
{
if(PlayerToPoint(3.0, playerid, 822.0106,2.1108,1004.17979) || PlayerToPoint(3.0, playerid, 830.7314,-0.2550,1004.1797) || PlayerToPoint(3.0, playerid, 833.4749,3.1363,1004.17970))
{
if(PlayerInfo[playerid][pLottoNr] > 0)
{
SendClientMessage(playerid, COLOR_GREY, " You already have a Lottery Ticket !");
return 1;
}
if(GetPlayerMoney(playerid) < 1500)
{
SendClientMessage(playerid, COLOR_GREY, " You need $1500 for a Lottery Ticket !");
return 1;
}
tmp = strtok(cmdtext, idx);
if(tmp[0] == 0)
{
SendClientMessage(playerid, COLOR_WHITE,"BENUTZE: /lotto [number]");
return 1;
}
new lottonr = strval(tmp);
if(lottonr < 1 || lottonr > 80) { SendClientMessage(playerid, COLOR_GREY, " Lottery Number not below 1 or above 80 !"); return 1; }
format(string, sizeof(string), "* You bought a Lottery Ticket with number: %d.", lottonr);
SendClientMessage(playerid, COLOR_LIGHTBLUE, string);
GivePlayerMoney(playerid, - 1500);
PlayerInfo[playerid][pLottoNr] = lottonr;
}
else
{
SendClientMessage(playerid, COLOR_GREY, "Du bist nicht im Wettbüro / Du bist an keine Lotto Automaten !");
return 1;
}
}
return 1;
} -
Was du dazu benötigst ist
SetPlayerCheckpoint(playerid,Float:x,Float:y,Float:z,Float:size); /* Normaler roter Checkpoint */
oder
SetPlayerRaceCheckpoint(playerid, type, Float:x, Float:y, Float:z, Float:nextx, Float:nexty, Float:nextz, Float:size); /* Renncheckpoint mit Pfeil zum nächsten Checkpoint */
im "/start" Befehl sowie im Callback "OnPlayerEnterCheckpoint(playerid)"
Um beim reinfahren einen neuen Chckpoint anzeigen zu lassen benötigst du zum Beispiel eine Variable dir hochgezählt wird (Eine PlayerToPoint Variante würd auch funktionieren, würde ich aber nicht empfehlen)
/* Ganz oben */new RaceCheckpoint[MAX_PLAYERS];
/* in OnPlayerConnect(playerid) */
RaceCheckpoint[playerid] = 0;
/* Im /start Befehl */
SetPlayerCheckpoint(...); //Dein erster Checkpoint
RaceCheckpoint[playerid] = 1; // Variable auf 1 setzen - zum späteren überprüfen/* in OnPlayerEnterCheckpoint(playerid) */
if(RaceCheckpoint[playerid] > 0)
{
switch(RaceCheckpoint[playerid])
{
case 1:
{
SetPlayerCheckpoint(...); // Dein zweiter Checkpoint
}
case 2:
{
SetPlayerCheckpoint(...); // Dein dritter Checkpoint
}
// [...]
case 10: /* Je nachdem wie viele Checkpoints du willst - in diesem Fall ist der 11. (10+1) der Letze*/
{
DisablePlayerCheckpoint(playerid);
// Der Rest deines Codes am Ende
RaceCheckpoint[playerid] = 0; // Variable zurücksetzen
return 1; // hochzählen überspringen
}}
RaceCheckpoint[playerid]++;
}So sollte es funktionieren, hab es nicht getestet und auf die Schnelle geschrieben. Was du mit Highscore meinst, versteh ich nicht richtig...
-
Was du suchst ist ein "Autosystem" oder "Carownership". Entweder du läds dir ein vorgefertiges runter und fügst es in deiner Gamemode ein (Suchfunktion hier oder im offiziellen SAMP Forum) oder du erstellst dir eins selber. Wenn du nur einen /park Befehl willst, rate ich dir dazu eines selbst zu erstellen. Wenn du nicht genau weißt wie du anfangen musst, schau entweder in dem Code der breits erstellten nach der Laden und Speicherfunktion oder schau auf Samp Wiki nach einer Anleitung zu Files (http://wiki.sa-mp.com/wiki/File_Functions)
-
Es würde vielleicht sogar ausreichen, wenn du zumindest den Code deines /stats Befehl zeigst
-
Ohne einen Ausschnitt aus deinem Code wird dir hier keiner helfen können
-
SO müsste es gehen
public godupdate()
{
for(new i=0;i<MAX_PLAYERS;i++);
new currentveh; currentveh = GetPlayerVehicleID(playerid);
{
if (god[i] == true)
{
SetVehicleHealth(currentveh,10000000);
return 1;
}
}
return 1;
}So wird es nicht gehen. Dein Code ist schlecht eingerückt und somit kaum lesbar und außerdem stimt irgendetwas mit den Klammern nicht. "playerid" ist außerdem nicht definiert, weil es nicht übergeben wird.
for(new i = 0; i < GetMaxPlayers(); i++);
{
if(IsPlayerConnected(i))
{
if(godmode[i] == true)
{
new
carid = GetPlayerVehicleID(i);
SetVehicleHealth(carid,1000);
SetPlayerHealth(i, 9999);
}
}
} -
Mit dem #pragma kann man dies unterdrücken, aber nicht beheben. Deshalb rate ich dir davon ab.
Es liegt an der Größe der Strings, d.h. einfach ausgedrückt bedeutet es, dass du mehr Ressourcen benutzt, als dir zur Verfügung stehen (Stichwort: "Stap/heap size")
http://forum.sa-mp.com/index.p…78026.msg507347#msg507347Zusammengefasst kann man sagen, dass eine Stringgröße von 256 niemals erreicht werden kann, da der maximale Input sowie Output nur 128 Zeichen lang sein können. Dein Script kann dadurch schneller laufen.
Allerdings solltest du für eine Nachricht wie "Hallo %s wie gehts dir?" niemald 128 große strings erstellen - 40 würden in diesem Falle ausreichen. -
http://wiki.sa-mp.com/wiki/Main_Page
Da finden sich unter "Scripting Functions" alle möglichen Funktionen. Unter anderem auch:
SetPlayerCheckpoint (playerid,Float:x,Float:y,Float:z,Float:size);
Sogar mit Beisspielen: http://wiki.sa-mp.com/wiki/SetPlayerCheckpoint
Um einen Text anzeigen zu lassen sobald ein Spieler in einen solchen Checkpoint geht, musst du den
public OnPlayerEnterCheckpoint(playerid)
verwenden und in diesem überprüfen, welcher Checkpoint es ist.
Dazu musst du in dem Befehl oder was auch immer, bei dem du SetPlayerCheckpoint benutzt eine globale (!) Variable einen anderen Wert zuweisen und diesen bei OnPlayerEnterCheckpoint überprüfen und zurücksetzen//
// Oben in deinem Script
//new Checkpoint[MAX_PLAYERS]; // globale Variable erstellen
//
// In dem Befehl, in welchem du SetPlayerCheckpoint benutzt
//SetPlayerCheckpoint(...);
Checkpoint[playerid] = 1; // Variable setzen//
// In OnPlayerEnterCheckpoint
//if(Checkpoint[playerid] == 1) // Variable überprüfen
{
SendClientMessage(playerid, FARBE, "Dein Text");
Checkpoint[playerid] = 0; // Variable zurücksetzen
} -
Wie schon gesagt, du kannst einem Spieler nicht das "wechseln" verbieten. Du könntest zwar dem Spieler einfach die Waffe 0 geben (= Faust, wenn ich mich nicht irre) mit
GivePlayerWeapon(playerid,weapon);
und der Spieler würde dann als aktuelle Waffe ne Faust haben, könnte aber jederzwit zu den anderen Waffen zurückwechseln. Die einzige Methode das zu verhindern ist die oben beschriebene. Entweder alle Waffe wegnehmen mit
ResetPlayerWeapons(playerid);
und danach die Waffe "Faust" geben oder die anderen Waffen mithilfe einer Schleife zwischenspeichern und dann erst alle Waffen wegnehmen und die "Faust" geben. -
Waffen wechseln durch das Script (wie z.B. durch das Mausrad) ist nicht möglich. Was du machen könntest wäre entweder alle Waffen wegnehmen (somit hättest du eine Faust, aber sonst nicht mehr) oder mithilfe einer Schleife alle deine Waffen, die der Spieler gerade auf der Hand hat zwischenzuspeichern und alle Waffen wegnehmen, sobald er ein solches Gebiet betreten hat. Wenn er das Gebiet wieder verlassen hat kannst du ihm die zwischengespeicherten Waffen wiedergeben...
-
Es sollte ausreichen, wenn du die z Koordinate ein wenig nach oben verschiebst (bei den Autos und beim Spieler). Sollte der Spieler dann trotzdem noch durch die Objekte fallen, kannst du ihn nach
SetPlayerPos(playerid,...);
freezen und einen Timer stllen für wenige Sekunden
SetTimerEx(...);
der ihn dann wieder unfreezt. -
Befehle dir du hierfür brauchst sind:
GetVehicleModel(vehicleid); /* Kontrollierenm ob man in dem LKW sitzt */
IsTrailerAttachedToVehicle(vehicleid); /* Kontrollieren ob ein Anhänger hinten am Truck hängt */
GetVehicleTrailer(vehilceid); /* gibt die Trailerid aus */
/* überprüfen ob der Trailer der richtige ist: */
if(GetVehicleTrailer(vehicleid) == DIETRAILERID) -
Wie speicherst du die Daten in deinem Script? In Mysql oder in Dateien(z.B. ".ini")?
Ich bin mir nicht sicher, ob es bereits ein UCP zum Downloaden gibt (möglicherweise auf forum.sa-mp.com), aber selbst wenn müsstest du dieses bearbeiten und an deinen Server anpassen. D.h. du solltest so oder so über PHP/MySQL Kentnisse verfügen...