Hallo Liebe Brotfische,
leider muss ich mal einen extra Thread dazu erstellen da ich denke das der User nicht oft on sein wird. Letzte Aktivität des Users war im Mai diesen Jahres und somit denke ich das ich keinen Support zu seinem Tutorial erhalte.
Ich habe das Tuturial von FoL-Community genutzt zur erstellung eines Gengfightsystems.
Hier nochmal mein Post aus dem Thread:
Leider buggt der Befehl /gangwar etwas rum. Die Meldung das das gebiet angegriffen wird geht nicht an der Owner sondern an den Angreifer der gegnerischen Fraktion. Desweiteren habe ich jetzt 4 Gebiete fü meine 2 Gangs und 2 Mafien. Leider kann nur das erste Gebiet angegriffen werden.
Ich bitte um Hilfe wegen den Problemen.
Im Vorhinein will ich aber sagen das ich alle Optionen eingestellt habe das er vier Gebiete erkennt und anzeigt, nur der Angriff geht nicht nur im ersten.
Danke im Voraus für die Hilfe. Hoffe es wird dieses Problem behandelt und auch sinnvoll überdacht. Stehe euch aber gerne auch mit dem Code zur Verfügung.
Hier schonmal der Code des Befehls zum starten des GW's.
if(strcmp(cmd, "/gangwar", true) == 0)
{
if(PlayerInfo[playerid][pLeader] == 5 || PlayerInfo[playerid][pLeader] == 6 || PlayerInfo[playerid][pLeader] == 10 || PlayerInfo[playerid][pLeader] == 14)
{
if(IsPlayerInGebiet(playerid) > 0)
{
new zone = IsPlayerInGebiet(playerid);
if(Gebiete[zone][gOn] == 1)
{
SendClientMessage(playerid,COLOR_LIGHTBLUE,"Das Gebiet wird schon Umkämpft!");
return 1;
}
if(Gebiete[zone][gOwner] == PlayerInfo[playerid][pLeader])
{
SendClientMessage(playerid,COLOR_LIGHTBLUE," Deine Fraktion ist im Besitzt dieses Gebietes");
return 1;
}
Gebiete[zone][gAngreifer] = PlayerInfo[playerid][pLeader];
Gebiete[zone][gOn] = 1;
SetTimerEx("GangFight",60000,0,"i",zone);
for(new i = 0; i < MAX_PLAYERS; i++)//Damit jeder Spieler abgefragt wird
{
if(PlayerInfo[i][pLeader] == Gebiete[zone][gOwner] || PlayerInfo[i][pMember] == Gebiete[zone][gOwner])
{
SendClientMessage(playerid,COLOR_RED,"Eines ihrer Gebiete wird angegriffen.");//Sendet eine Mitteilung
}
if(PlayerInfo[i][pLeader] == Gebiete[zone][gAngreifer] ||PlayerInfo[i][pMember] == Gebiete[zone][gAngreifer])
{
SendClientMessage(playerid,COLOR_RED,"Dein Leader hat ein Gangwar gestartet!");
}
}
}
}
return 1;
}
MFG
Dj_Fire
PS: Ich bin eigentlich kein Anfänger im pwn Code schreiben. Leider ist diese Problem mir echt zu unverständlich da es auch nicht näher erklärt oder behandelt wird.
//edit: Rechtschreibfehler. Sollten noch welche drin sein weist mich bitte drauf hin denke schneller als ich schreibe.
Nach längerer Versuchsphasen und umschreiben habe ich jetzt die Mögflichkeit die drei letzen Gebiete anzugreifen nur das erste nicht.
Bitte helft mir und sagt mir wo der Fehler liegt.
Hiermal der Originalcode:
stock IsPlayerInGebiet(playerid)//Funktion bennen mit den jeweiligen Variablen oder auch Parameter genannt.
{
for(new i = 0; i < sizeof(Gebiete); i++)//Damit wieder nach allen Zonen geschaut wird.
{
new Float:GetX,Float:GetY,Float:GetZ;//Neue Float Variablen erstellen, damit wir dort die Positionen des Spielers speichern können
GetPlayerPos(playerid,GetX,GetY,GetZ);//Die Position des Spielers in den oben genannten Variablen speichern.
if(Gebiete[i][gMinX] < GetX && Gebiete[i][gMaxX] > GetX && Gebiete[i][gMinY] < GetY && Gebiete[i][gMaxY] > GetY)//Hier wird abgefragt ob die Spielerkooridnanten in dem Bereich der Gangzone sind.
{
return i;//Hier wird die Gebietsid returned
}
return -1;//Wenn der nirgendwo drin ist wird halt -1 returned damit wir einen unterschied haben
}
return -1;//Siehe oben
}
und hier mein abgeänderter Code bei dem ich jetzt die letzten drei oben im Script festgelegten Gebiete angreifen kann nur das erste nicht:
stock IsPlayerInGebiet(playerid)//Funktion bennen mit den jeweiligen Variablen oder auch Parameter genannt.
{
for(new i = 0; i < sizeof(Gebiete); i++)//Damit wieder nach allen Zonen geschaut wird.
{
new Float:GetX,Float:GetY,Float:GetZ;//Neue Float Variablen erstellen, damit wir dort die Positionen des Spielers speichern können
GetPlayerPos(playerid,GetX,GetY,GetZ);//Die Position des Spielers in den oben genannten Variablen speichern.
if(Gebiete[i][gMinX] < GetX && Gebiete[i][gMaxX] > GetX && Gebiete[i][gMinY] < GetY && Gebiete[i][gMaxY] > GetY)//Hier wird abgefragt ob die Spielerkooridnanten in dem Bereich der Gangzone sind.
{
return i;//Hier wird die Gebietsid returned
}
//return i;//Wenn der nirgendwo drin ist wird halt -1 returned damit wir einen unterschied haben
}
return 0;//Siehe oben
}
//edit: pwn Code für die Gebietsabfrage und veränderung zum Original
PS: Hoffe das zählt nicht als Doppelpost.