Sorry, hab die Variable verwechselt, war schon spät.
savedID[pID] = id;
Zu
savedID[pID] = veh;
Sorry, hab die Variable verwechselt, war schon spät.
savedID[pID] = id;
Zu
savedID[pID] = veh;
Kann es ja auch nicht, weil du wahrscheinlich hier immer noch das gleiche Problem hast:
stock kzanfrage()
In der Funktion nimmst du IMMER die Vehicleid von playerid 0.
Das versteht sich eigentlich von selbst, da es ja fast der gleiche Code ist.
Das wird sich aber wohl nur mit einer Hilfsvariablen realisieren lassen, da, so wie das aussieht, das über drei Ecken geht.
Poste dann jetzt eben noch den Code mit dem du dieses stock aufrufst.
EDIT:
Wenn du den Code so hast wie ich mir das denke, dann:
Unter die includes
new savedID[MAX_PLAYERS];
Beim Befehl, bevor du den Dialog anzeigst:
savedID[pID] = id;
stock Aufruf
kzanfrage( savedID[playerid] );
Das stock
stock kzanfrage(veh)
{
new pID,id = getSlotID(veh),kspreis,ksz,str[28];
sscanf(sCarInfo[id][sName],"u",pID);
//GetVehiclePos(sCarInfo[id][VehID],Pos[0],Pos[1],Pos[2]);
SetVehicleToRespawn(sCarInfo[id][VehID]);
sCarInfo[id][CarSchild] = 1;
format(str,sizeof(str),"DSZ-%i",ksz);
SetVehicleNumberPlate(sCarInfo[id][VehID],str);
GivePlayerMoney(pID, -kspreis);
SetVehiclePos(sCarInfo[id][VehID],909.2155,-1262.9668,14.4228);
SendClientMessage(pID,-1,"Dein Fahrzeug hat ein Nummerschild bekommen.");
saveCar(sCarInfo[id][VehID]);
return 1;
}
Also, das sagte ich doch bereits vorher:
new string[128],veh,id,kspreis,ksz,pID,str[28];
if(sscanf(params,"iii",veh,kspreis,ksz)) return SendClientMessage(playerid,-1,"Verwende: /kennzeichen [CarID] [Preis] [KennschildName (1-4 Zahlen)]");
id = getSlotID(veh);
Und nein, es ist nicht GetPlayerVehicleID, denn das würde die ID vom Auto von Spieler xy zurückgeben, und das wollen wir ja nicht.
Probier das so mal aus.
yx = der Spieler der Auto 2 hat nehme ich an.
"carid" ist welches nun?
=> sCarInfo[id][CarID]
=> sCarInfo[id][VehID]
=> sCarInfo[id][...]
Die "2" die der Spieler eingibt, welche der obigen Variablen beinhaltet diese 2? Wenn keine davon, welche dann?
format(string,sizeof(string),"* You have teleported to %s.", pName(player1));
zu:
format(string,sizeof(string),"* Admin %s teleported to Player %s.", pName(playerid), pName(player1));
MessageToAdmins(0xFF0000FF, string);
format(string,sizeof(string),"* You have teleported to %s.", pName(player1));
Ja.
Unter die includes
new adminCar[MAX_VEHICLES];
Erstellen
new vehicleid = CreateVehicle...
adminCar[vehicleid] = 1;
OnVehicleSpawn
if(adminCar[vehicleid]) DestroyVehicle(vehicleid);
adminCar[vehicleid] = 0;
Ist mir klar, nur das ist falsch da du damit die ID des Vehikels des Spielers abfragst, der den Befehl eingibt, und das willst du ja nicht.
Außerdem macht es keinen Sinn, GetPlayerVehicleID UND einen Parameter zu nutzen, entweder sind beide gleich, was einen unnötig macht, oder sie sind unterschiedlich, was falsch ist.
Also die Frage: Was soll der Befehl eigentlich machen und was genau soll man eingeben als Parameter?
Was ist das Ziel der Eingabe des Befehls?
Hast du das eventuell ohne SetPVarInt?
Hast du das Tutorial befolgt oder nicht?...
new payday=payDayT[i]; //hier wird eine neue PayDay Variable gemacht
payDayT[i]+=1; //hier gibt man dann, wenn eine ServerMinute rum ist, eins zum payday hinzu (+=1)
if(payDayT[i] == 30) //Wenn die Zahl dann 30 ist (siehe unten drunter)
{
PayDay(i); //public payDay wird aufgerufen
payDayT[i]=0; //variable wird auf null gesetzt. Alles fängt wieder von vorne an
}
Die Variable payDayT musst für gegebenenfalls mit der deinen ersetzen, falls du die anders genannt hast.
Macht für mich immer noch keinen wirklich praktikablen Sinn, aber gut.
new string[128],veh,id,kspreis,ksz,pID,str[28];
if(sscanf(params,"iii",veh,kspreis,ksz)) return SendClientMessage(playerid,-1,"Verwende: /kennzeichen [CarID] [Preis] [KennschildName (1-4 Zahlen)]");
id = getSlotID(veh);
Damit müsste er die VehicleID eingeben, die dann die SlotID sucht.
Dein erster Parameter ist doch die CarID. Welche ID soll das sein, wenn nicht der Slot?
Ok, das ist richtig so. Dann ändere
new string[128],veh = GetPlayerVehicleID(playerid),id = getSlotID(veh),kspreis,ksz,pID,str[28];
if(sscanf(params,"iii",sCarInfo[id][VehID],kspreis,ksz)) return SendClientMessage(playerid,-1,"Verwende: /kennzeichen [CarID] [Preis] [KennschildName (1-4 Zahlen)]");
Zu
new string[128],id ,kspreis,ksz,pID,str[28];
if(sscanf(params,"iii",id,kspreis,ksz)) return SendClientMessage(playerid,-1,"Verwende: /kennzeichen [CarID] [Preis] [KennschildName (1-4 Zahlen)]");
Du gibst die ID ein, da musst du sie nicht suchen.
Poste mal die "getSlotID" Funktion und ein die Funktion mit der du ein solches Auto erstellst.
Wenn du das Tutorial befolgt hast wird er das nicht,
new payday=GetPVarInt(i,"PayDay"); //hier wird eine neue PayDay Variable gemacht
SetPVarInt(i,"PayDay",payday+=1); //hier gibt man dann, wenn eine ServerMinute rum ist, eins zum payday hinzu (+=1)
if(GetPVarInt(i,"PayDay") == 30) //Wenn die Zahl dann 30 ist (siehe unten drunter)
{
PayDay(i); //public payDay wird aufgerufen
SetPVarInt(i,"PayDay",0); //variable wird auf null gesetzt. Alles fängt wieder von vorne an
}
sondern erst nach oben definierten 30 Minuten.
Steht doch alles in dem Tutorial dabei. Je nach dem was du als Speichersystem verwendest sieht das leicht anders aus. Das Tutorial nimmt dini als Beispiel:
Speichern:
dini_IntSet(Spielerdatei,"PayDay",GetPVarInt(playerid,"PayDay"));
Laden:
SetPVarInt(playerid,"PayDay",dini_Int(Spielerdatei,"PayDay"));
PawnStar: Das ist Käse was du da gepostet hast. Das wird nicht funktionieren, sobald ein Spieler den Befehl nutzt kann ihn keiner mehr benutzen.
if(strcmp(cmd, "/einhacken", true) == 0)
{
if(PlayerCuffed[playerid] > 0)
{
SendClientMessage(playerid, COLOR_GREY, "Du kannst ohne Hände nicht Hacken!");
return 1;
}
if(PlayerHackedTime[playerid]+(15*60) > gettime()) // 15*60 = 15min
{
SendClientMessage(playerid, COLOR_GREY, "Du kannst nur alle 15 Minuten Hacken!");
return 1;
}
if(GetVehicleModel(GetPlayerVehicleID(playerid)) == 596 || GetVehicleModel(GetPlayerVehicleID(playerid)) == 597)
{
new cops;
for(new p = 0; p < MAX_PLAYERS; p++)
{
if(IsPlayerConnected(p))
{
if(IsACop(p) && OnDuty[p])
{
cops ++;
}
}
}
if(cops < 2)
{
SendClientMessage(playerid, COLOR_GREY, "Zum Hacken müssen genügend Cop´s Online sein!");
return 1;
}
SendClientMessage(playerid, COLOR_ALLDEPT, "Du hast dich Erfolgreich in den Polizeicomputer eingehackt.");
TogglePlayerControllable(playerid,0);
PlayerHacked[playerid] = 1;
PlayerHackedTime[playerid] = gettime(); //Zeit speichern
SetTimerEx("hack", 36000, 0, "d", playerid);
for(new i=0; i<MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{
if(IsPlayerInFrac(i, 1) || IsPlayerInFrac(i, 2) || IsPlayerInFrac(i, 3) || IsPlayerInFrac(i, 22))
{
SendClientMessage(i, TEAM_BLUE_COLOR, "HQ: VORSICHT unerlaubter Zugriff auf einen Polizeicomputer!");
}
}
}
}
else
{
SendClientMessage(playerid, COLOR_GRAD2, "Du musst dafür in einem LSPD-Fahrzeug sitzen!");
return 1;
}
return 1;
}
Unter die Includes:
new PlayerHackedTime[MAX_PLAYERS];
OnPlayerConnect:
PlayerHackedTime[playerid] = 0;
GetVehiclePos, SetVehicleNumberPlate, SetVehicleToRespawn, SetVehiclePos.
In der Reihenfolge, dann hast du das Auto wieder an gleicher Stelle. Du kannst natürlich auch noch die Health etc speichern und wieder setzen.
SetVehicleNumberPlate(veh ,str);
Und danach natürlich das Auto neu streamen.
Ok, auch gut!
Markiere dann bitte das Thema das nächste Mal als "erledigt", oder lösche es komplett wenn noch keiner geantwortet hat, dann weiß jeder, dass du das Problem schon behoben hast.
Dann ändere mal diese ID's, vielleicht hast du die schon in einem Code von dir definiert.
#define DIALOG_EVENTS 88
#define DIALOG_COUNT 89
zu:
#define DIALOG_EVENTS 8812
#define DIALOG_COUNT 8912
EDIT:
ID geändert, danke @Manniac.[257]:.
Ohne Code nix los.