Alles anzeigenKann ich folgenden Code eventuell effizienter oder besser schreiben, vorallem wegen der Kontrollstrukturen?
Ich moechte weiterhin folgendes umsetzen:
Ich will nicht dass ein Spieler das eigene "Bett" mit /blowup zerstoert.
Also will ich irgendwie ausschliessen dass der beispielsweise bedstateviolet auf -1 setzen kann wenn er selbst gPlayerTeamSelection[playerid] == TEAM_VIOLET ist.
Daher habe ich irgendwie das gefuehl dass ich alles umbauen muss, vielleicht hat jemand einen VorschlagCAlles anzeigenif(strcmp(cmdtext, "/blowup", true) == 0) { for(new i = 0; i < sizeof(beds[]); i++) { new Float:health; GetPlayerHealth(playerid,health); if(running !=1 && IsPlayerInRangeOfPoint(playerid,10.0,beds[i][0],beds[i][1],beds[i][2]) && health != 0 && !IsPlayerInAnyVehicle(playerid)) // In this script we deal with players only { running = 1; if(i == 0 && bedstateviolet !=-1 && gPlayerTeamSelection[playerid] != TEAM_VIOLET) { bedstateviolet=-1; SendClientMessage(playerid, COLOR_WHITE, "SERVER: You are blowing up the bed of Team {610D96}VIOLET"); } if(i == 1 && bedstateblue !=-1 && gPlayerTeamSelection[playerid] != TEAM_BROWN) { bedstateblue=-1; SendClientMessage(playerid, COLOR_WHITE, "SERVER: You are blowing up the bed of Team {8B4513}BROWN"); } if(i == 2 && bedstateyellow !=-1 && gPlayerTeamSelection[playerid] != TEAM_YELLOW) { bedstateyellow=-1; SendClientMessage(playerid, COLOR_WHITE, "SERVER: You are blowing up the bed of Team {FFFF00}YELLOW"); } if((i == 0 && bedstateviolet !=-1 && gPlayerTeamSelection[playerid] != TEAM_VIOLET) || (i == 1 && bedstateblue !=-1 && gPlayerTeamSelection[playerid] != TEAM_BROWN) || (i == 2 && bedstateyellow !=-1 && gPlayerTeamSelection[playerid] != TEAM_YELLOW)) { SendClientMessage(playerid, COLOR_WHITE, "SERVER: Planted Bomb Successfully. Lets Blow This Bed Up!"); SetPlayerScore(playerid, GetPlayerScore(playerid) + 1); SendClientMessage(playerid, COLOR_WHITE, "SERVER: Keep Running! Bed Will Blow Up In 5 seconds!"); GetPlayerPos(playerid, x1, y1, z1); ApplyAnimation(playerid, "BOMBER", "BOM_Plant_Loop", 4.0, 1, 0, 0, 1, 1); for(new k = 0; k < MAX_PLAYERS; k++) { PlayerPlaySound(k,7416,x1,y1,z1); } SetTimer("BlowUpThisBed", bombtimer, false); CountDownTimer = SetTimer("CountDown", 1000, true); new Float:dist = GetDistance(beds[i][0],beds[i][1],beds[i][2],x1,y1,z1); printf("Distance to closest bed: %f, Index: %d", dist, i); } else { return 0; } return 1; } } return 0; }
Wenn jemand noch Zeit hat, auch folgenden Befehl
Ich kann dir nicht sagen, ob es funktioniert, da ich es logischerweise nicht testen kann.
new bedstate[3] = {-1,...}; // violet (0), blue / brown (1), yellow (2)
if(strcmp(cmdtext, "/blowup", true) == 0)
{
for(new i = 0; i < sizeof(beds[]); i++)
{
new Float:health;
GetPlayerHealth(playerid,health);
if(running !=1 && IsPlayerInRangeOfPoint(playerid,10.0,beds[i][0],beds[i][1],beds[i][2]) && health != 0 && !IsPlayerInAnyVehicle(playerid)) // In this script we deal with players only
{
running = 1;
if(bedstate[i] != -1 && gPlayerTeamSelection[playerid] != i)
{
new stringTeam[68], string[145];
bedstate[i] = -1;
switch(gPlayerTeamSelection[playerid])
{
case 0: stringTeam = "{610D96}VIOLET";
case 1: stringTeam = "{8B4513}BROWN";
case 2: stringTeam = "{FFFF00}YELLOW";
}
format(string, sizeof(string), "SERVER: You are blowing up the bed of Team {610D96}%s!", stringTeam);
SendClientMessage(playerid, COLOR_WHITE, string);
SendClientMessage(playerid, COLOR_WHITE, "SERVER: Planted Bomb Successfully. Lets Blow This Bed Up!");
SetPlayerScore(playerid, GetPlayerScore(playerid) + 1);
SendClientMessage(playerid, COLOR_WHITE, "SERVER: Keep Running! Bed Will Blow Up In 5 seconds!");
GetPlayerPos(playerid, x1, y1, z1);
ApplyAnimation(playerid, "BOMBER", "BOM_Plant_Loop", 4.0, 1, 0, 0, 1, 1);
for(new k = 0; k < MAX_PLAYERS; k++)
{
PlayerPlaySound(k,7416,x1,y1,z1);
}
SetTimer("BlowUpThisBed", bombtimer, false);
CountDownTimer = SetTimer("CountDown", 1000, true);
new Float:dist = GetDistance(beds[i][0],beds[i][1],beds[i][2],x1,y1,z1);
printf("Distance to closest bed: %f, Index: %d", dist, i);
break;
}
else if(gPlayerTeamSelection[playerid] == i)
{
SendClientMessage(playerid, COLOR_WHITE, "SERVER: You can`t blow up your own bed.");
}
}
}
return 1;
}
Du musst allerdings die Variable gPlayerTeamSelection[] umdeklarieren.