Nein, einfach so übernehmen.
Das heißt, dass alle Indexe zu Beginn auf -1 gesetzt werden. Die drei Punkte gehören dort genau so hin.
Beiträge von Jeffry
-
-
static p_vehicle[MAX_PLAYERS];
Das löschen.Das andere dann unter den Includes einfügen.
-
So, immerhin mal einen Satz. Aus deinen Kommentaren ging nur hervor, dass das Nummernschild nicht geht.
static p_vehicle[MAX_PLAYERS];
aus dem Befehl nehmen und unter die Includes so schreiben:
new p_vehicle[MAX_PLAYERS] = {-1, ...};OnPlayerDisconnect:
if(p_vehicle[playerid] != -1)
{
DestroyVehicle(p_vehicle[playerid]);
p_vehicle[playerid] = -1;
} -
^ Das oben macht wenig Sinn.
public OnPlayerDisconnect(playerid, reason)
{
if(!strcmp(SpielerName(playerid), "Dein_Bot_Name") && IsPlayerNPC(playerid))
{
SetTimerEx("ReconnectBot", 5000, 0, "d", 0);
}
if(!strcmp(SpielerName(playerid), "Dein_AndererBot_Name") && IsPlayerNPC(playerid))
{
SetTimerEx("ReconnectBot", 5000, 0, "d", 1);
}
return 1;
}forward ReconnectBot(id);
public ReconnectBot(id)
{
switch(id)
{
case 0: ConnectNPC(...);
case 1: ConnectNPC(...);
}
return 1;
} -
So kann ich dir nicht helfen. Entweder du führst dein Problem genau aus, oder du wartest auf jemand anderen.
-
Klar kannst du den Bot neu connecten lassen wenn er raus fliegt. Normal ist das zwar nicht, aber zur Sicherheit ist das trotzdem ok.
Bei OnPlayerDisconnect:
SetTimerEx mit einer ID je nach Name => das public dann über die ID aufrufen und mit Switch den Bot neu connecten.Falls du mit den Codes nicht klar kommst, fange an und poste dann was du bis dahin hast.
-
Jeffry:
if(!sSpieler[playerid][Fraktion] == 5)
so gehts auchDas macht keinen Sinn und wird dir zudem einen Tag Mismatch geben. Funktionieren wird es auch nicht.
Wenn, dann SO:
if(!(sSpieler[playerid][Fraktion] != 5))
Das ist aber genauso sinnlos, da doppelt verneint. "Wenn nicht nicht" ist das gleiche wie "Wenn".Red Soldiers = Feuerwehr (alle anderen 4 sind bestimmt nicht die Feuerwehr, also bleibt nur das.)
EDIT:
Jeffry:
Da will man dich einmal Verbessern und du machst wieder alles kaputt.
Du hast es verschlimmert, nicht verbessert. -
if(sSpieler[playerid][Fraktion] >= 1)
zu:
if(sSpieler[playerid][Fraktion] == 5)Dann können es nur die Red Soldiers.
-
Was funktioniert nicht. Lerne dich bitte etwas klarer auszudrücken. In allen deinen Posts musste ich bis jetzt raten was du meinst.
-
Variable shadows a preceding Level: Variable existiert bereits. => Ich habe eine der beiden Variablen einfach umbenannt (l_ davor gesetzt), somit heißen sie unterschiedlich.
Plate:
SetVehicleNumberPlate((p_vehicle[playerid] = CreateVehicle(vID,X,Y,Z,ROTA,FARB1,FARB2,0)),"MVS-ADMIN");
Dazu geändert und den Respawn weg gemacht. So kannst du es direkt setzen. -
Jeffry: Muss das Format nicht vor mysql_function_query kommen?
NatürlichCopy & Paste hat versagt. Aber gut, das will er ja eh nicht so...
Wie erstellst du diese Autos denn? Poste das mal. Dann können wir dir auch sagen wie du es richtig aus dem Server entfernen tust.
-
ocmd:cspawn(playerid,params[])
{
if(sInfo[playerid][alevel]>=7)
{
if(sInfo[playerid][aduty]==0)return SendClientMessage(playerid,CL_KNALLROT,"ERROR: Du bist nicht Admin-OnDuty!");
{
new vID;
//Hier kannst du jetzt wie oben reinschreiben was passiert wenn man diesen Befehl aufruft.
if(sscanf(params,"i",vID))return SendClientMessage(playerid,CL_WHITE,"Aussage: /cspawn Fahrzeug--->[ID]"); //Hier wird das was der Spieler hinter dem Befehl eingegeben hat in Variablen getrennt. In unserem Fall in "vID"
new Float:X,Float:Y,Float:Z,Float:ROTA;
GetPlayerPos(playerid,X,Y,Z);
GetPlayerFacingAngle(playerid,ROTA);
new l_vehicle;//----------->daa
l_vehicle=CreateVehicle(vID,X,Y,Z,ROTA,-1,-1,0); //Farbe -1 bedeutet Random. Also zufällige Farbe.ok
PutPlayerInVehicle(playerid,l_vehicle,0); //Die 0 steht für die Sitz ID. 0 = Fahrer :)ok//frage?
return 1;
}
}
SendClientMessage(playerid,CL_HROT,"Du darfst diesen Befehl nicht nutzen.");
return 1;
}ocmd:acar(playerid,params[])
{
new vID;
new Float:X,Float:Y,Float:Z,Float:ROTA,FARB1,FARB2;
static p_vehicle[MAX_PLAYERS];
static l_acarexist[MAX_PLAYERS];//-------->da
new Text3D:VehicleAdminName[MAX_PLAYERS];
if(sInfo[playerid][alevel] >= 2)
if(sInfo[playerid][aduty]==0)return SendClientMessage(playerid,CL_KNALLROT,"ERROR: Du bist nicht Admin-OnDuty!");
{
if(l_acarexist[playerid] == 1)
{
SendClientMessage(playerid,CL_HGRÜN,"Admin-Car gelöscht");
DestroyVehicle(p_vehicle[playerid]);
Delete3DTextLabel(VehicleAdminName[playerid]);
l_acarexist[playerid] = 0;
return 1;
}
else if(l_acarexist[playerid]==0)
{
if(sscanf(params,"iii",vID,FARB1,FARB2))return SendClientMessage(playerid,CL_KNALLROT,"INFO: /acar Fahrzeug--->[ID] Farbe 1 Farbe 2"); //Hier wird das was der Spieler hinter dem Befehl eingegeben hat in Variablen getrennt. In unserem Fall in "vID"
new str[128];
new a_level;
GetPlayerPos(playerid,X,Y,Z);
GetPlayerFacingAngle(playerid,ROTA);
a_level=sInfo[playerid][alevel];
format(str,sizeof(str),"%s Car von %s",a_rang[a_level],SpielerName(playerid));
SetVehicleNumberPlate((p_vehicle[playerid] = CreateVehicle(vID,X,Y,Z,ROTA,FARB1,FARB2,0)),"MVS-ADMIN");//------>hier gehts nicht
VehicleAdminName[playerid] = Create3DTextLabel(str,CL_HGRÜN,X,Y,Z,MAX_STREAM_NAME_DISTANCE,GetPlayerVirtualWorld(playerid),1);
Attach3DTextLabelToVehicle(VehicleAdminName[playerid],p_vehicle[playerid],0,-1.3,0.7);//30.0,40.0,50.0
PutPlayerInVehicle(playerid,p_vehicle[playerid],0); //Die 0 steht für die Sitz ID. 0 = Fahrer :)ok//frage?SendClientMessage(playerid,CL_HGRÜN,"Admin-Car erstellt ");
PutPlayerInVehicle(playerid,p_vehicle[playerid],0);
l_acarexist[playerid] = 1;
return 1;
}}
SendClientMessage(playerid,CL_HROT,"Du darfst diesen Befehl nicht nutzen.");
return 1;
} -
format(query,sizeof(query),"DELETE FROM Spielerautos WHERE DB_ID='%i'",cInfo[i][DB_ID]);
Also insgesamt so:
public OnPlayerDisconnect(playerid, reason)
{
SetPlayerColor(playerid,CL_GRAU);
saveplayer(playerid);
resetplayer(playerid);//Spielerautos löschen
new query[289];
format(query,sizeof(query),"DELETE FROM Spielerautos WHERE DB_ID='%i'",cInfo[i][DB_ID]);
mysql_function_query(dbhandle,query,false,"","");
for(new i=0; i<sizeof(cInfo); i++)
{
if(cInfo[i][SID]==0)continue;
if(cInfo[i][besitzer] != sInfo[playerid][db_id])continue;
DestroyVehicle(cInfo[i][SID]);
printf("%i gelöscht",cInfo[i][SID]);
}
return 1;
}Achte darauf, dass du die Variablen auch zurücksetzt wenn du das Auto löschst.
-
Du musst den Spieler in das Interior setzen (SetPlayerInterior), sonst siehste nix.
Die Position wo die Kamera hinschauen soll braucht du zwingend.
-
Mir ist gerade noch aufgefallen dass du in der ganzen Rechnerei bei der KMH Anzeige einen Wert nutzt, den du mit einer leeren Variable zugewiesen hast.
Ändere die Zeile zu
format(kmh, 10,"KM/H: %d", final_speed_int);Dann sollte es eigentlich funktionieren, sofern wie zuvor gesagt der Timer aufgerufen wird.
-
SpleXER: Der Code beinhaltet mindestens zwei Klammerfehler.
Kann es sein, dass das Public gar nicht aufgerufen wird? Es könnte sein, dass du bei OnGameModeInit bevor du den Timer startest etwas vermacht hast, zum Beispiel einen Array sprengst. Lass es dir mal printen ob es aufgerufen wird.
-
if (strcmp(cmd, "/admins", true) == 0)
{
if(IsPlayerConnected(playerid))
{
SendClientMessage(playerid, WEISS,""#HTML_WEISS"|-_______"#HTML_BLAU"Teammitglieder"#HTML_WEISS" Online_______-|");
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{
if(isPlayerAnAdmin(i,1))
{
GetPlayerName(i, sendername, sizeof(sendername));
format(string, 144, "%s %s: ID:[%d]",Adminrang(i), sendername,i);
SendClientMessage(playerid, WEISS, string);
}
}
}
}
return 1;
}Du hast zum einen den Adminrang des Spielers abgefragt, der sein Befehl eingegeben hat und zum anderen hast du den String auf 256 gesetzt, maximal kann SendClientMessage aber 144 Zeichen anzeigen, darauf solltest du auch achten.
-
Steht doch genau da was du machen musst. Die neuen bzw richtigen Includes einfügen und den Skript neu kompilieren. Dann wieder hochladen.
-
Zeig doch mal den Code mit dem du einen Spieler speichern lässt.
Auf jeden Fall hast du einen Code am laufen, der MySQL nutzen will, sonst würden genau diese debug-Errors nicht kommen.Falls dein ganzer Code auf MySQL basiert, musst du ihn erst umschreiben auf ein File System.
-
Es ist mir schon klar, dass die Kamera jetzt direkt zum Bot fliegt. Soll die Kamera immer ein paar Meter hinter dem Bot bleiben, oder wie genau meinst du das? Falls ja, müsstest du die Position X Meter hinter dem Bot rausfinden (http://forum.sa-mp.de/gta-multiplayer-mods/san-andreas-multiplayer/scripting-base/18-nützliche-codeschnipsel-56#post1890617) (hinter = negativer Abstand). Die Kamera interpolierst du dann zu dieser Position, und machst LookAt auf die Position des Bots.