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.