Hey Leute. Wie kann ich einstellen das man die Zone erst jede 2 Stunden einnehmen kann und das mindestens 1 der Gang der die Zone besitzt Online sein muss.
Es ist sehr wichtig für mich.
if(strcmp(cmd,"/zoneeinnehmen",true) == 0)
{
if(!IsPlayerInAnyGang(playerid))
{
SendClientMessage(playerid,COLOR_RED,"Du bist in keiner Gang, die Gangzonen einnehmen darf!");
return 1;
}
new pgang = GetPlayerFrac(playerid);
new pzone = GetPlayerCurrentZone(playerid);
if(pzone == -1)
{
SendClientMessage(playerid,COLOR_RED,"Du bist in keiner einnehmbaren Gangzone!");
return 1;
}
if(Zonen[pzone][Angreifer] != -1)
{
SendClientMessage(playerid,COLOR_RED,"Die Gangzone wird bereits angegriffen!");
return 1;
}
if(Zonen[pzone][CurrentOwner] == pgang)
{
SendClientMessage(playerid,COLOR_RED,"Diese Gangzone gehört bereits deine Gang!");
return 1;
}
Zonen[pzone][Angreifer] = pgang;
Zonen[pzone][AngriffsTimer] = SetTimerEx("OnAttackSuccess",320000,0,"d",pzone);
for(new i=0; i<MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i) &&!IsPlayerNPC(i))
{
if(GetPlayerFrac(i) == Zonen[pzone][CurrentOwner])
{
SendClientMessage(i,COLOR_YELLOW,"-------------------------------------------------------------------------------------------------");
SendClientMessage(i,COLOR_YELLOW," Eine Gangzone wird angegriffen. Begib dich schnell zur Zone und benutze /zoneverteidigen!");
SendClientMessage(i,COLOR_YELLOW,"-------------------------------------------------------------------------------------------------");
}
if(GetPlayerFrac(i) == Zonen[pzone][Angreifer])
{
SendClientMessage(i,COLOR_YELLOW,"-------------------------------------------------------------------------------------------------");
SendClientMessage(i,COLOR_YELLOW," Deine Gang nimmt gerade eine Gangzone ein. Helf ihnen dabei die Verteidiger auszuschalten!");
SendClientMessage(i,COLOR_YELLOW,"-------------------------------------------------------------------------------------------------");
}
}
}
SaveZones();
UpdateZones();
return 1;
}
Gruß,
Ramiz
Etwas einstellen
- Asmir0000
- Geschlossen
- Erledigt
-
-
Ganz am Anfang des Scriptes fügst du folgendes ein:
new GangZonesFight[99];
Also nicht Zeile 1, sondern eben dann Zeile 20 oder 30if(!strcmp(cmd, "/zoneeinnehmen", true))
{
new pgang = GetPlayerFrac(playerid),
pzone = GetPlayerCurrentZone(playerid);
if(!IsPlayerInAnyGang(playerid))
return SendClientMessage(playerid, COLOR_RED, "Du bist in keiner Gang, die Gangzonen einnehmen darf!");
if(pzone == -1)
return SendClientMessage(playerid, COLOR_RED, "Du bist in keiner einnehmbaren Gangzone!");
if(Zonen[pzone][Angreifer] != -1)
return SendClientMessage(playerid, COLOR_RED, "Die Gangzone wird bereits angegriffen!");
if(Zonen[pzone][CurrentOwner] == pgang)
return SendClientMessage(playerid, COLOR_RED, "Diese Gangzone gehört bereits deine Gang!");
if(GangZonesFight[pzone] >= gettime())
return SendClientMessage(playerid, COLOR_RED, "Diese Gangzone wurde in den letzten 2 Stunden bereits angegriffen!");
Zonen[pzone][Angreifer] = pgang;
Zonen[pzone][AngriffsTimer] = SetTimerEx("OnAttackSuccess", 320000, 0, "d", pzone);
GangZonesFight[pzone] = gettime() + (60 * 60 * 2);
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i) && !IsPlayerNPC(i))
{
if(GetPlayerFrac(i) == Zonen[pzone][CurrentOwner])
{
SendClientMessage(i,COLOR_YELLOW,"-------------------------------------------------------------------------------------------------");
SendClientMessage(i,COLOR_YELLOW," Eine Gangzone wird angegriffen. Begib dich schnell zur Zone und benutze /zoneverteidigen!");
SendClientMessage(i,COLOR_YELLOW,"-------------------------------------------------------------------------------------------------");
}
if(GetPlayerFrac(i) == Zonen[pzone][Angreifer])
{
SendClientMessage(i,COLOR_YELLOW,"-------------------------------------------------------------------------------------------------");
SendClientMessage(i,COLOR_YELLOW," Deine Gang nimmt gerade eine Gangzone ein. Helf ihnen dabei die Verteidiger auszuschalten!");
SendClientMessage(i,COLOR_YELLOW,"-------------------------------------------------------------------------------------------------");
}
}
}
SaveZones();
UpdateZones();
return 1;
} -
Wie mache ich das mindestens 1 Gegner on sein muss der die Zone besitzt?
-
Sorry.
Hatte ich überlesen.if(!strcmp(cmd, "/zoneeinnehmen", true))
{
new pgang = GetPlayerFrac(playerid),
pzone = GetPlayerCurrentZone(playerid),
Counter = 0;
if(!IsPlayerInAnyGang(playerid))
return SendClientMessage(playerid, COLOR_RED, "Du bist in keiner Gang, die Gangzonen einnehmen darf!");
if(pzone == -1)
return SendClientMessage(playerid, COLOR_RED, "Du bist in keiner einnehmbaren Gangzone!");
if(Zonen[pzone][Angreifer] != -1)
return SendClientMessage(playerid, COLOR_RED, "Die Gangzone wird bereits angegriffen!");
if(Zonen[pzone][CurrentOwner] == pgang)
return SendClientMessage(playerid, COLOR_RED, "Diese Gangzone gehört bereits deine Gang!");
if(GangZonesFight[pzone] >= gettime())
return SendClientMessage(playerid, COLOR_RED, "Diese Gangzone wurde in den letzten 2 Stunden bereits angegriffen!");
for(new x, x < MAX_PLAYERS; x++)
if(GetPlayerFrac(x) == Zonen[pzone][CurrentOwner])
Counter++;
if(Counter < 1)
return SendClientMessage(playerid, COLOR_RED, "Mindestens ein Gegner muss online sein!");
Zonen[pzone][Angreifer] = pgang;
Zonen[pzone][AngriffsTimer] = SetTimerEx("OnAttackSuccess", 320000, 0, "d", pzone);
GangZonesFight[pzone] = gettime() + (60 * 60 * 2);
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i) && !IsPlayerNPC(i))
{
if(GetPlayerFrac(i) == Zonen[pzone][CurrentOwner])
{
SendClientMessage(i,COLOR_YELLOW,"-------------------------------------------------------------------------------------------------");
SendClientMessage(i,COLOR_YELLOW," Eine Gangzone wird angegriffen. Begib dich schnell zur Zone und benutze /zoneverteidigen!");
SendClientMessage(i,COLOR_YELLOW,"-------------------------------------------------------------------------------------------------");
}
if(GetPlayerFrac(i) == Zonen[pzone][Angreifer])
{
SendClientMessage(i,COLOR_YELLOW,"-------------------------------------------------------------------------------------------------");
SendClientMessage(i,COLOR_YELLOW," Deine Gang nimmt gerade eine Gangzone ein. Helf ihnen dabei die Verteidiger auszuschalten!");
SendClientMessage(i,COLOR_YELLOW,"-------------------------------------------------------------------------------------------------");
}
}
}
SaveZones();
UpdateZones();
return 1;
} -
Du bist Hammer Bubelbub
Hast du eine Ahnung warum es immer nur 1 Zone Speichert? Undzwar die letzt eingenommene :
public SaveZones()
{
new str[128];
for(new z=0; z<ZONEN_ANZAHL; z++)
{
format(str,sizeof(str),"%s%d|\n",str,Zonen[z][CurrentOwner]);
}
new File: file = fopen(OWNER_DATEI,io_write);
fwrite(file,str);
fclose(file);
return 1;
}Außerdem Kommen Errors beim Compilen:
C:\Dokumente und Einstellungen\LUPO\Desktop\GF-edit\gamemodes\DDG.pwn(17279) : error 021: symbol already defined: "x"
C:\Dokumente und Einstellungen\LUPO\Desktop\GF-edit\gamemodes\DDG.pwn(17279) : warning 206: redundant test: constant expression is non-zero
C:\Dokumente und Einstellungen\LUPO\Desktop\GF-edit\gamemodes\DDG.pwn(17280) : error 017: undefined symbol "i"
C:\Dokumente und Einstellungen\LUPO\Desktop\GF-edit\gamemodes\DDG.pwn(17279) : warning 203: symbol is never used: "x"
C:\Dokumente und Einstellungen\LUPO\Desktop\GF-edit\gamemodes\DDG.pwn(17279 -- 17282) : warning 225: unreachable code
Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase2 Errors.
for(new x, x < MAX_PLAYERS; x++)
if(GetPlayerFrac(i) == Zonen[pzone][CurrentOwner])/editiert
-
public SaveZones()
{
new str[128];
for(new z = 0; z < ZONEN_ANZAHL; z++)
{
format(str, sizeof str, "%s\n%d", str, Zonen[z][CurrentOwner]);
}
new File:file = fopen(OWNER_DATEI, io_write);
fwrite(file, str);
fclose(file);
return 1;
}
Ist schwer zu sagen woran es da liegt.
Lade mal die OWNER_DATEI hochfor(new x, x < MAX_PLAYERS; x++)
if(GetPlayerFrac(x) == Zonen[pzone][CurrentOwner])und vielleicht, da da ein Warning kommt, einfach noch:
/* for(new x, x < MAX_PLAYERS; x++)
if(GetPlayerFrac(x) == Zonen[pzone][CurrentOwner])*/ -
Die Ownerdatei ist nichts als eine Ini Datei wo nichts drinnen ist
PS: Oben ist ein Error gekommen:CodeC:\Dokumente und Einstellungen\LUPO\Desktop\GF-edit\gamemodes\DDG.pwn(17279) : error 021: symbol already defined: "x" C:\Dokumente und Einstellungen\LUPO\Desktop\GF-edit\gamemodes\DDG.pwn(17279) : warning 206: redundant test: constant expression is non-zero C:\Dokumente und Einstellungen\LUPO\Desktop\GF-edit\gamemodes\DDG.pwn(17279) : warning 203: symbol is never used: "x" C:\Dokumente und Einstellungen\LUPO\Desktop\GF-edit\gamemodes\DDG.pwn(17279 -- 17282) : warning 225: unreachable code Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase 1 Error.
//editiert
-
for(new x, x < MAX_PLAYERS; x++)
zu
for(x = 0, x < MAX_PLAYERS; x++) -
Oh oh, das ist gefährlich, wenn x als globale Variable anderweitig verwendet wird - nenn sie lieber in irgendwas anderes um.
-
Ich glaub mein Script mag dich irgendwie nicht xD
C:\Dokumente und Einstellungen\LUPO\Desktop\GF-edit\gamemodes\DDG.pwn(17279) : error 017: undefined symbol "x"
C:\Dokumente und Einstellungen\LUPO\Desktop\GF-edit\gamemodes\DDG.pwn(17279) : error 017: undefined symbol "x"
C:\Dokumente und Einstellungen\LUPO\Desktop\GF-edit\gamemodes\DDG.pwn(17280) : error 017: undefined symbol "x"
Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase3 Errors.
-
ja dann machste jetzt einfach vor das X ein new
Mehr nich -
So ?
for(x = 0, new x < MAX_PLAYERS; x++)
Wenn ja kommen Errors wenn nicht sag bescheid xD
Ich habe ka wie geht das
//edit
//edit -
for(new x = 0, x < MAX_PLAYERS; x++)
-
Nächster Error
C:\Dokumente und Einstellungen\LUPO\Desktop\GF-edit\gamemodes\DDG.pwn(17279) : error 021: symbol already defined: "x"
C:\Dokumente und Einstellungen\LUPO\Desktop\GF-edit\gamemodes\DDG.pwn(17279) : warning 206: redundant test: constant expression is non-zero
C:\Dokumente und Einstellungen\LUPO\Desktop\GF-edit\gamemodes\DDG.pwn(17279) : warning 204: symbol is assigned a value that is never used: "x"
C:\Dokumente und Einstellungen\LUPO\Desktop\GF-edit\gamemodes\DDG.pwn(17279 -- 17282) : warning 225: unreachable code
Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase1 Error.
//edit: Ich habe es bei allen X versucht immer unterschiedliche Errors oder wie der gerade oben
-
Das nur das Letzte Gebiet gespeichert wird liegt daran das du außerhalb der schleife In die Datei schreibst...
Erst die Datei öffnen, dann mit der schleife formatieren und reinschreiben und nach der Schleife schließenWarum steht eig str mit in dem String der gespeichert werden soll? Man würde es doppelt schreiben was unsinnig wäre...
//Edit Format fehler beseitigt
public SaveZones()
{
new str[128];
new File:file = fopen(OWNER_DATEI, io_write);
for(new z = 0; z < ZONEN_ANZAHL; z++)
{
format(str, sizeof str, "%d|%s\n", z, Zonen[z][CurrentOwner]);
fwrite(file, str);
}
fclose(file);
return 1;
}
So würde in der Datei stehen:
0|Niemand
1|Balls
oder wie sie alle heißen... -
Vielen Dank. Jetzt bräuchte ich nur noch Hilfe beim Error oben
Echt Respekt wie ihr euch alle bemüht mir zu helfen und das so schnell
-
Warum so komplex lass das x doch weg?
for(new p, p < MAX_PLAYERS; p++)
if(GetPlayerFrac(p) == Zonen[pzone][CurrentOwner]) -
Leider nächster Error
CodeC:\Dokumente und Einstellungen\LUPO\Desktop\GF-edit\gamemodes\DDG.pwn(17282) : error 021: symbol already defined: "p" C:\Dokumente und Einstellungen\LUPO\Desktop\GF-edit\gamemodes\DDG.pwn(17282) : warning 206: redundant test: constant expression is non-zero C:\Dokumente und Einstellungen\LUPO\Desktop\GF-edit\gamemodes\DDG.pwn(17282) : warning 203: symbol is never used: "p" C:\Dokumente und Einstellungen\LUPO\Desktop\GF-edit\gamemodes\DDG.pwn(17282 -- 17285) : warning 225: unreachable code Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase 1 Error.
-
Benutzt du die Schleife mehrmals?
-
Nicht das ich wüsste