Funktioniert auch nicht
//Edit: Weiß da wirklich keiner eine Lösung?
Funktioniert auch nicht
//Edit: Weiß da wirklich keiner eine Lösung?
Hey Leute,
ich habe folgendes Problem:
Wenn ein Spieler stirbt, bei dem vorher die Variable "derby[playerid]" auf 1 gesetzt wurde, soll folgendes passieren:
if(derby[playerid]==1)
{
derbyplayer--;
derby[playerid]=0;
spiele[playerid]=0;
SendClientMessage(playerid,GRAU,"Du hast das Derby verloren!");
if(derbyplayer==1)
{
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(derby[i]==1)
{
new string[100];
format(string,sizeof(string),"%s hat das Derby gewonnen!",SpielerName(i));
SendClientMessageToAll(GRÜN,string);
derby[i]=0;
spiele[i]=0;
SpawnPlayer(i);
break;
}
}
derby_timer = SetTimer("Derby",10000,false);
derbystate=0;
derbyplayer=0;
}
}
aus irgendeinem Grund wird das ganze nur abgefragt, wenn playerid auch wirklich eine killerid besitzt... Wenn man einfach so stirbt, ohne das man von jemanden getötet wird aber derby[playerid] auf 1 ist, funktioniert das ganze komischerweise bei mir nicht?
Kann man das Problem vllt. irgendwie lösen?
Danke schonmal für hilfreiche Antworten
MfG Merox
Danke für die Antwort, aber die carid brauche ich später nochmal, deswegen achte ich darauf, dass diese nicht durch Löschen und Erstellen von cars verschoben werden.
Ich habe den Befehl jetzt nochmal etwas geändert, aber die for-Schleife drin gelassen:
ocmd:testveh2(playerid,params[])
{
if(IsPlayerAnAdmin(playerid,4))
{
new carid, Float:x, Float:y, Float:z, Float:angle, color1, color2;
if(sscanf(params,"iii",carid,color1,color2)) return SendClientMessage(playerid,GRAU,"Benutze /testveh [ID]");
GetPlayerPos(playerid, x,y,z);
GetPlayerFacingAngle(playerid, angle);
for(new i = 1; i < MAX_VEHICLES; i++)
{
new str[100];
format(str, sizeof(str), "%d.car", i);
if(fexist(str))
{
if(dini_Int(str,"Verkauft")==1)
{
DestroyVehicle(i);
i = CreateVehicle(carid, x+2,y,z,angle+4,color1,color2,-1);
CarInfo[i][aX] = x;
CarInfo[i][aY] = y;
CarInfo[i][aZ] = z;
CarInfo[i][aAngle] = angle;
CarInfo[i][aModel] = carid;
CarInfo[i][aColor1] = color1;
CarInfo[i][aColor2] = color2;
CarInfo[i][aVer] = 0;
dini_FloatSet(str,"aX", CarInfo[i][aX]);
dini_FloatSet(str,"aY", CarInfo[i][aY]);
dini_FloatSet(str,"aZ", CarInfo[i][aZ]);
dini_FloatSet(str,"aAngle", CarInfo[i][aAngle]);
dini_IntSet(str,"Model",CarInfo[i][aModel]);
dini_IntSet(str,"Color1",CarInfo[i][aColor1]);
dini_IntSet(str,"Color2",CarInfo[i][aColor2]);
dini_IntSet(str,"Verkauft",CarInfo[i][aVer]);
return 1;
}
else
{
SendClientMessage(playerid,ROT,"Diese ID gibt es nicht!");
}
}
}
}
else
{
return 0;
}
return 1;
}
Ob nun alles richtig ist, weiß ich nicht, aber es funktioniert erstmal so, wie ich es in meinem 1. Beitrag bereits beschrieben hatte.
Nun habe ich aber ein neues Problem:
Nachdem die for-Schleife alle Datein überprüft und keine Datei gefunden hat, in der "Verkauft" auf 1 ist, soll eine neue Datei stellt werden, wie mit dem 1. Befehl. Aber wo muss ich das ganze dann einfügen? In die for-Schleife kann ich es ja nicht einfügen, weil die sich ja wiederholt...
Nabend,
ich scripte derzeit an einem eigenen Funserver, auf dem ich ein Car-System machen möchte (ich arbeite mit Dini)... Dazu muss ich sagen, dass ich erst vor kurzem mit scripten angefangen habe... Ich hab das Grundgerüst so aufgebaut, dass ich mit einem Befehl ein Fahrzeug erstellen kann, welches als Datei gespeichert und beim starten des Servers geladen wird.
Das ist der Befehl:
ocmd:testveh(playerid,params[])
{
if(IsPlayerAnAdmin(playerid,4))
{
new carid, Float:x, Float:y, Float:z, Float:angle, color1, color2;
if(sscanf(params,"iii",carid,color1,color2)) return SendClientMessage(playerid,GRAU,"Benutze /testveh [ID]");
GetPlayerPos(playerid, x,y,z);
GetPlayerFacingAngle(playerid, angle);
new id = CreateVehicle(carid, x+2,y,z,angle+4,color1,color2,-1);
CarInfo[id][aID] = id;
CarInfo[id][aX] = x;
CarInfo[id][aY] = y;
CarInfo[id][aZ] = z;
CarInfo[id][aAngle] = angle;
CarInfo[id][aModel] = carid;
CarInfo[id][aColor1] = color1;
CarInfo[id][aColor2] = color2;
CarInfo[id][aVer] = 0;
SpeicherFahrzeug(id);
SendClientMessage(playerid, GELB, "Car gespawnt!");
}
else
{
return 0;
}
return 1;
}
public SpeicherFahrzeug(carid)
{
new str[25];
format(str, sizeof(str), "%d.car", carid);
if(carid <= 0)
{
return 1;
}
else
dini_Create(str);
{
dini_IntSet(str,"ID",CarInfo[carid][aID]);
dini_FloatSet(str,"aX", CarInfo[carid][aX]);
dini_FloatSet(str,"aY", CarInfo[carid][aY]);
dini_FloatSet(str,"aZ", CarInfo[carid][aZ]);
dini_FloatSet(str,"aAngle", CarInfo[carid][aAngle]);
dini_IntSet(str,"Model",CarInfo[carid][aModel]);
dini_IntSet(str,"Color1",CarInfo[carid][aColor1]);
dini_IntSet(str,"Color2",CarInfo[carid][aColor2]);
dini_IntSet(str,"Verkauft",CarInfo[carid][aVer]);
}
return 1;
}
Wenn ich ein Auto mit einem 2. Befehl verkaufe, wird die Variable "Verkauft" in der Datei von dem car auf "1" gesetzt und beim Laden aller Dateien werden alle cars, bei denen "Verkauft" auf 1 ist in eine andere Welt gesetzt (damit sich die ID's nicht verschieben).
Nun habe ich noch einen 3. Befehl (noch nicht ganz fertig, war nur ein Test) mit dem ich ein car "kaufen" möchte... Wenn ich den Befehl eingebe, sollte eigentlich eine for-Schleife alle Dateien durchsuchen und bei der 1. stoppen, in der "Verkauft" auf 1 ist. Das Auto der Datei soll dann gelöscht und ein neues Auto erstellt werden. Zusätzlich sollen die Werte in der Datei dem neuen Auto angepasst werden.
ocmd:testveh2(playerid,params[])
{
if(IsPlayerAnAdmin(playerid,4))
{
new carid, id, newid, Float:x, Float:y, Float:z, Float:angle, color1, color2;
if(sscanf(params,"iii",carid,color1,color2)) return SendClientMessage(playerid,GRAU,"Benutze /testveh [ID]");
GetPlayerPos(playerid, x,y,z);
GetPlayerFacingAngle(playerid, angle);
for(new i = 0; i < MAX_VEHICLES; i++)
{
new str[32];
format(str, sizeof(str), "%d.car", i);
if(dini_Int(str,"Verkauft") == 1)
{
i = id;
format(str, sizeof(str), "%d.car", id);
DestroyVehicle(id);
newid = CreateVehicle(carid, x+2,y,z,angle+4,color1,color2,-1);
CarInfo[newid][aX]=x;
CarInfo[newid][aY]=y;
CarInfo[newid][aZ]=z;
CarInfo[newid][aAngle]=angle;
CarInfo[newid][aModel]=carid;
CarInfo[newid][aColor1]= color1;
CarInfo[newid][aColor2]= color2;
CarInfo[newid][aVer]=0;
dini_FloatSet(str,"aX", CarInfo[newid][aX]);
dini_FloatSet(str,"aY", CarInfo[newid][aY]);
dini_FloatSet(str,"aZ", CarInfo[newid][aZ]);
dini_FloatSet(str,"aAngle", CarInfo[newid][aAngle]);
dini_IntSet(str,"Model",CarInfo[newid][aModel]);
dini_IntSet(str,"Color1",CarInfo[newid][aColor1]);
dini_IntSet(str,"Color2",CarInfo[newid][aColor2]);
dini_IntSet(str,"Verkauft",CarInfo[newid][aVer]);
break;
}
}
SendClientMessage(playerid, GELB, "Car gespawnt!");
}
else
{
return 0;
}
return 1;
}
Aus irgendeinen Grund wird die Datei dem neuen Auto aber nicht zugewiesen, und das Auto hat dann eine andere ID als es eigtl. haben sollte, da das vorherige car ja gelöscht wurde.
Ich hoffe, ihr versteht was ich meine O.o
Nun bin ich mir nicht sicher, ob es, so wie ich es gemacht habe, generell nicht geht, oder ob ich nur igendwo einen Fehler gemacht habe
Würde mich über hilfreiche Antworten freuen.