Jedoch kriege ich schon Errors in folgender Zeile.
Jeffry:
Was für Errors bekommst du denn?
Jedoch kriege ich schon Errors in folgender Zeile.
Jeffry:
Was für Errors bekommst du denn?
So sollte es passen:
public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
if(!ispassenger)
{
for(new i=0; i<sizeof(carInfo); i++)
{
if(vehicleid == carInfo[i][id_x])
{
for(new k=0; k<sizeof(keyInfo); k++)
{
if(keyInfo[k][k_id] == carInfo[i][db_id])
{
if(keyInfo[k][besitzer] == sInfo[playerid][db_id])
{
return 1;
}
}
}
TogglePlayerControllable(playerid,false),
TogglePlayerControllable(playerid,true);
return SendClientMessage(playerid,COLOR_RED,"Du hast keinen Schlüssel für das Fahrzeug!"),
}
}
}
return 1;
}
Problem 1:
Wie sieht dann jetzt dein LoadVehicles aus? Weil zu anfangs hat es ja geklappt, oder? Also, bevor du /opark machst.
Problem 2:
Für welchen Befehl, zum Beispiel, musst du dich reloggen, damit du ihn wieder verwenden kannst, nachdem du das Fahrzeug freigekauft hast?
Ja, das ist egal. Ich schreibe es der Übersichtlichkeit halber immer so, du kannst es aber auch in eine Zeile schreiben, das macht keinen Unterschied.
Übrigens ist das keine "Case-Schleife" sondern ein "switch". ![]()
Keine 5 Stunden mehr bis zum "Samsung Galaxy Unpacked 2015" aus Barcelona.
Hier ist der offizielle Live-Stream:
So, das mit dem Einsteigen sollte so passen:
public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
if(GetVehicleFrak(vehicleid) != SpielerInfo[playerid][pTeam] && isinADAC[playerid] != 1)
{
SendClientMessage(playerid,hinweis1,"Du hast keinen Schlüssel!");
TogglePlayerControllable(playerid,false);
TogglePlayerControllable(playerid,true);
}
return 1;
}
public OnPlayerStateChange(playerid, newstate, oldstate)
{
if(newstate == PLAYER_STATE_DRIVER)
{
new frak = GetVehicleFrak(vehicleid);
if(frak != -1 && frak != SpielerInfo[playerid][pTeam] && isinADAC[playerid] != 1)
{
if(frak == 1) SendClientMessage(playerid, hinweis1, "Du bist kein Polizist!");
else if(frak == 2) SendClientMessage(playerid, hinweis1, "Du bist kein Sanitäter/Arzt!");
return RemovePlayerFromVehicle(playerid);
}
}
return 1;
}
Mit dieser Funktion:
stock GetVehicleFrak(vehid)
{
new idx = -1;
for(new i=0; i<sizeof(VehInfo); i++)
{
if(VehInfo[i][veh_ID] == vehid)
{
idx = i;
break;
}
}
if(idx == -1) return -1;
return VehInfo[idx][Fraktion];
}
Teste das mal.
Und was meinst du bei dem /opark? Kannst du den Befehl bitte posten und erklären, was da nicht geht?
Man muss, wenn man keinen Streamer verwendet, die Position des Spielers mit der des Checkpoints vergleichen:
public OnPlayerSpawn(playerid)
{
SetPlayerCheckpoint(playerid,1430.5883,-1735.9539,13.0885,4);
return 1;
}
public OnPlayerEnterCheckpoint(playerid)
{
DisablePlayerCheckpoint(playerid);
if(IsPlayerInRangeOfPoint(playerid, 5.0, 1430.5883,-1735.9539,13.0885))
{
SetPlayerCheckpoint(playerid,1535.0945,-1668.1747,13.0868,4);
SendClientMessage(playerid,rot,"2punkt");
}
else if(IsPlayerInRangeOfPoint(playerid, 5.0, 1535.0945,-1668.1747,13.0868))
{
SetPlayerCheckpoint(playerid,1488.4778,-1588.9446,13.0875,4);
SendClientMessage(playerid,rot,"Nächster Punkt");
}
else if(IsPlayerInRangeOfPoint(playerid, 5.0, 1488.4778,-1588.9446,13.0875))
{
SetPlayerCheckpoint(playerid,1424.7736,-1672.6342,13.1667,4);
SendClientMessage(playerid,rot,"nächster punkt");
}
else if(IsPlayerInRangeOfPoint(playerid, 5.0, 1424.7736,-1672.6342,13.1667))
{
SetPlayerCheckpoint(playerid,1453.7714,-1737.3793,13.1674,4);
SendClientMessage(playerid,rot,"zum letzten punkt");
}
else if(IsPlayerInRangeOfPoint(playerid, 5.0, 1453.7714,-1737.3793,13.1674))
{
SendClientMessage(playerid,rot,"Ende");
}
return 1;
}
public OnPlayerLeaveCheckpoint(playerid)
{
return 1;
}
Der Code muss so aussehen:
if (strcmp("/deagle", cmdtext, true) == 0)
{
if(PlayerInDM[playerid] == 0)
{
new name[MAX_PLAYER_NAME], germanstring[100], englishstring[100];
GetPlayerName(playerid, name, sizeof(name));
if(PlayersInDeagle < 10)
{
if(PlayerInDeagle[playerid] == 0) //Zeile 1440
{
switch(random(10)+1)
{
case 1:
{
SetPlayerPos(playerid,4945.6430700,-4108.7656300,328.4060400);/*unten*/
}
case 2:
{
SetPlayerPos(playerid,4945.6430700,-4108.7656300,328.4060400);/*unten*/
}
case 3:
{
SetPlayerPos(playerid,4945.6430700,-4108.7656300,328.4060400);/*unten*/
}
case 4:
{
SetPlayerPos(playerid,4945.6430700,-4108.7656300,328.4060400);/*unten*/
}
case 5:
{
SetPlayerPos(playerid,4945.6430700,-4108.7656300,328.4060400);/*unten*/
}
case 6:
{
SetPlayerPos(playerid,4945.6430700,-4108.7656300,528.4060400);/*weiter oben*/
}
case 7:
{
SetPlayerPos(playerid,4945.6430700,-4108.7656300,528.4060400);/*weiter oben*/
}
case 8:
{
SetPlayerPos(playerid,4945.6430700,-4108.7656300,528.4060400);/*weiter oben*/
}
case 9:
{
SetPlayerPos(playerid,4945.6430700,-4108.7656300,528.4060400);/*weiter oben*/
}
case 10:
{
SetPlayerPos(playerid,4945.6430700,-4108.7656300,528.4060400);/*weiter oben*/
}
}
PlayerInDM[playerid] = 1;
PlayerInDeagle[playerid] = 1;
PlayersInDeagle ++; // Zeile 1463
SendPlayerMessage(playerid, GREEN, "Zur Deagle Arena teleportiert.", "Teleported to deagle cage.");
format(germanstring,sizeof(germanstring),"%s hat sich zur Deagle Arena teleportiert. (/deagle)",name);
format(englishstring,sizeof(englishstring),"%s teleported to deagle cage. (/deagle)",name);
SendAllPlayerMessage(LIGHTBLUE, germanstring, englishstring);
SetPlayerHealth(playerid, 100);
SetPlayerArmour(playerid, 0);
GivePlayerWeapon(playerid, 24, 500);
}
}
else
{
SendPlayerMessage(playerid, RED, "Die Deagle Arena ist voll!", "The deagle cage is full!");
}
}
else
{
SendPlayerMessage(playerid, RED, "Du bist schon im DM!", "You already in dm!");
}
return 1;
}
if (strcmp("/exit", cmdtext, true) == 0)
{
if(PlayerInDM[playerid] == 1)
{
PlayerInDM[playerid] = 0;
if(PlayerInDeagle[playerid] == 1)
{
PlayersInDeagle --;
PlayerInDeagle[playerid] = 0;
}
else if(PlayerInMinigun[playerid] == 1)
{
PlayerInMinigun[playerid] = 0;
PlayersInMinigun --;
}
SpawnPlayer(playerid);
}
else
{
SendPlayerMessage(playerid, RED, "Du bist nicht im DM oder Rennen!", "You are not in dm or race!");
}
return 1;
}
return 0;
}
Und die Deklarationen so:
new PlayerInDM[MAX_PLAYERS];
new PlayerInDeagle[MAX_PLAYERS];
new PlayerInMinigun[MAX_PLAYERS];
new PlayersInDeagle;
new PlayersInMinigun;
Nicht unbedingt Apokrate. Das geht auch ohne.
Ich denke, du hast es nicht richtig definiert.
So funktioniert es ohne Probleme:
#define FORUMURL "www.test.de"
#define TEAMSPEAKIP "123.456.789.0"
public OnPlayerCommandText(playerid, cmdtext[])
{
if(!strcmp("/serverinfo",cmdtext,true))
{
new str[300];
format(str,sizeof str,"{FFFFFF}Owner MrCompany || Simon\nTeamSpeak Inhaber: MrCompany || Simon\nForum Inhaber: MrCompany || Simon");
format(str,sizeof str,"%s\n{FFFFFF}Scripter: MrCompany\nScript Version:{FF00FF} %s{FFFFFF}\nForumadresse: %s\nTeamSpeak³ IP: %s",str,FORUMURL,TEAMSPEAKIP);
ShowPlayerDialog(playerid,108,DIALOG_STYLE_MSGBOX,"Serverinformation",str,"Fertig","");
return 1;
}
return 0;
}
Dann das result auslesen und abfragen ob strlen größer als 1 ist. Wenn ja, dann ist er verheiratet, wenn nein, dann nicht.
Sinnvoller wäre es natürlich das beim Login zu laden, und dann nur abzufragen:
if(strlen(pVerheiratetName)>1) //verheiratet
else //nicht verheiratet
Aha! Dann muss es entweder unter OnPlayerStateChange hin, oder so:
printf("Vor GetFrakVehicleIdx: %d", GetPlayerVehicleID(playerid));
new i = GetFrakVehicleIdx(GetPlayerVehicleID(playerid));
zu:
printf("Vor GetFrakVehicleIdx: %d", vehicleid);
new i = GetFrakVehicleIdx(vehicleid);
Denn bei OnPlayerEnterVehicle ist der Spieler noch nicht im Fahrzeug.
Unter welchem Callback (public) steht der Code denn?
Dann wurde das Fahrzeug in das du einsteigst nicht mit deinem LoadVehicles Code erstellt. Diese Dinge funktionieren ja nur mit den Fahrzeugen, die mit LoadVehicles erstellt worden sind, bzw. mit dem Code davon.
Das habe ich so noch nie gesehen, das nativechecker Plugin gibt eigentlich immer schön alles an.
Versuch es mal mit der MySQL R5 Version: http://www.file-upload.net/download-8847075/plugins.rar.html
Schreibe den Teil mal so und poste dann was im Server Log steht, wenn du in das Fahrzeug, das abgeschleppt ist, einsteigst:
printf("Vor GetFrakVehicleIdx: %d", GetPlayerVehicleID(playerid));
new i = GetFrakVehicleIdx(GetPlayerVehicleID(playerid));
printf("i: %d", i);
if(i != -1)
{
printf("Abgeschleppt: %d", VehInfo[i][Abgeschleppt]);
if(VehInfo[i][Abgeschleppt] == 1)
{
new string[145];
format(string, sizeof(string),"Preis %i€ \nGrund: %s",VehInfo[i][Preis],VehInfo[i][Grund]);
printf("string: %s", string);
ShowPlayerDialog(playerid,DIALOG_aPARK,DIALOG_STYLE_MSGBOX,"Strafzettel",string,"Freikaufen","Abbrechen") ;
}
}
Falls gar nichts kommt, poste bitte das gesamte Callback (public) unter dem das steht.
(Um das andere Problem kümmern wir uns danach.)
So wie das aussieht wirfst du ihn raus, wenn er in der Fraktion ist, die einsteigen darf.
if(IsPlayerInAllowedFrakVeh(playerid, ...
zu:
if(!IsPlayerInAllowedFrakVeh(playerid, ...
Lade dir das nativechecker Plugin herunter und füge es in deinen Server ein. Dann poste was im Server Log steht, wenn du den Server startest.
Nativechecker: Benötige Hilfe Linux
if(strcmp(AllowedPlayers[i], n, true)) return true;
zu:
if(!strcmp(AllowedPlayers[i], n, true)) return true;
strcmp gibt 0 zurück, wenn beide Strings gleich sind.
Problem 1:
Vergessen habe ich es nicht, ich habe nur einen Teil hinzugefügt, sollst ja das Prinzip lernen, damit du es in Zukunft alleine schaffst. ![]()
GetPlayerPos(playerid,NeuX,NeuY,NeuZ,NeuR);
zu:
GetVehiclePos(GetPlayerVehicleID(playerid),NeuX,NeuY,NeuZ);
GetVehicleZAngle(GetPlayerVehicleID(playerid),NeuR);
Der Rest sollte passen.
Problem 2:
Was meinst du mit, dass es bei New spawnt? Wo/Wann?
Problem 3:
So:
new i = GetFrakVehicleIdx(GetPlayerVehicleID(playerid));
if(i != -1)
{
if(VehInfo[i][Abgeschleppt] == 1)
{
new string[145];
format(string, sizeof(string),"|Strafzettel| Preis %i€ Grund: %s",VehInfo[i][Preis],VehInfo[i][Grund],);
SendClientMessage(playerid, Color_Green, string);
}
}
Problem 4:
Ist das bei Problem 2 gemeint? Bzw, steht das beim LoadVehicles? Wenn ja, dann so:
if(VehInfo[i][Abgeschleppt] != 1)
{
VehInfo[i][veh_ID] = CreateVehicle(VehInfo[i][ModellID],VehInfo[i][PosX],VehInfo[i][PosY],VehInfo[i][PosZ],VehInfo[i][PosR],VehInfo[i][Farbe1],VehInfo[i][Farbe2],-1);//20
}
else
{
VehInfo[i][veh_ID] = CreateVehicle(VehInfo[i][ModellID],VehInfo[i][NewX],VehInfo[i][NewY],VehInfo[i][NewZ],VehInfo[i][NewR],VehInfo[i][Farbe1],VehInfo[i][Farbe2],-1);//20
}