///////////////////////////////////
// Scripted by: BlancO          //	
// Modifikation by: BoB-666 //
/////////////////////////////////
Setup() 
{ 
    // Text variables 
    level.airstrikeIncommingText = "Airstrike incomming!"; 
    // Models 
    level.airstrikePlane = "xmodel/vehicle_condor"; 
    precacheModel(level.airstrikePlane); 
    level.airstrikeBomb = "xmodel/prop_stuka_bomb"; 
	
    precacheModel(level.airstrikeBomb); 
    //STHM Efx of bomb explosion 
    level._effect["airstrikBombEFX"] = loadfx("fx/custom/airstrike.efx");
    level.airstrikeBombsCount = 10;			// OR, 10	// Anzahl der Bomben Flugzeug wird fallen
    level.airstrikeBombRange = 200;			// OR, 200	// Entfernung des Schadens 
    level.airstrikeBombsDamage = 250;		// Beschädigung einer einzelnen Bombe
    level.airstrikeIgnoreCeils = 0;			        // Auf Zombiekarten mit Decken auf 1 setzen
    level.airstrikeDamageTo = "enemy";		// Team will get damage "allies", "axis", "enemy", "all"
	// STHM Modifikation
	game["bomber_icon"] = "sthm_@_bombe";
	precacheShader(game["bomber_icon"]);
	precacheString(&"[ B ]");
}
 
CleanupKilled()
{
	self endon("killed_player");
	self endon("disconnect");
	
	// Remove hud elements
	if (isdefined(self.bomber_icon)) self.bomber_icon destroy();
	if (isdefined(self.bomber_text)) self.bomber_text destroy();
}
DoAirstrike() 
{ 
	self endon("killed_player");	// STHM Modifikation
    self endon("disconnect"); 
	
    if(isDefined(level.airstrikeUse) && level.airstrikeUse != "") 
        self iPrintlnBold(level.airstrikeUse);
	//===== STHM Show Bomber HUD ==================================================  ===
		BomberReady();										// STHM Bomber Ready HuD
	//==================================================  =========================		
    self waittill("binocular_fire"); 
    targetPos = GetTargetedPos(); 
    if(isDefined(level.airstrikeIncommingText) && level.airstrikeIncommingText != "") 
        iPrintln(level.airstrikeIncommingText);
	
    if(isDefined(targetPos)) 
    {
	    randomize		= (0, randomInt(360), 0); 
        droppos			= (targetPos[0], targetPos[1], targetPos[2] + 1000);		
        forward			= anglesToForward(randomize); 
        forward			= maps\mp\_utility::vectorScale(forward, 10000); 
        endOrigin		= droppos + forward; 
        startOrigin		= droppos - forward; 
		//===== STHM CleanUp Bomber HUD =================================================
			CleanupKilled();								// STHM Remove hud elements
		//==================================================  =======================
		
        plane = spawn("script_model", startOrigin); 
        plane setmodel(level.airstrikePlane); 
        plane.angles = plane.angles + randomize; 
        plane moveto(endOrigin, 10);
		plane playSound( "stuka_comming");				// STHM Sound Play Bomber is Comming
        bombs = level.airstrikeBombsCount; 
        if(bombs > 30) bombs = 30; 
        delay = (5 - bombs * 0.05); 
        wait delay; 
        for(i = 1; i <= bombs; i += 1) 
        { 
            plane thread DropBomb(self);
            wait 0.1;
        } 
        wait delay; 
        plane delete();
    }
} 
BomberReady()
{
	self endon("killed_player");	// STHM Modifikation
    self endon("disconnect"); 
	
	//===== STHM Bomber HuD Anzeige Setup ==================================================  ===
		horzAlign			= "center_safearea";
		vertAlign			= "bottom";
		alignX			= "center";
		alignY			= "middle";
		X				= 0;
		Y				= -30;
		alpha 			= 0.6;	
		fontscale			= 0.65;
	//==================================================  ================================
		
	//===== STHM Bomber HUD Bild ==================================================  ============
	if (!isdefined(self.bomber_icon))
	{
		self.bomber_icon = newClientHudElem(self);
			self.bomber_icon.horzAlign = horzAlign;
			self.bomber_icon.vertAlign = vertAlign;
			self.bomber_icon.alignX = alignx;
			self.bomber_icon.alignY = alignY;
			self.bomber_icon.x = X;
			self.bomber_icon.y = Y;
			self.bomber_icon.alpha = 0.7;
			self.bomber_icon setShader(game["bomber_icon"], 30, 30);
	}
	//==================================================  =======================================
	// END Bomber HUD Bild
	
	//===== STHM Bomber HUD Text ==================================================  ============
	if (!isdefined(self.bomber_text))
	{
		self.bomber_text = newClientHudElem(self);
			self.bomber_text.horzAlign = horzAlign;
			self.bomber_text.vertAlign = vertAlign;
			self.bomber_text.alignx = alignX;
			self.bomber_text.alignY = alignY;
			self.bomber_text.x = X;
			self.bomber_text.y = Y + 20;
			self.bomber_text.fontscale = fontscale;
			self.bomber_text.label = &"[ B ]";
	}
	//==================================================  =======================================	
	// END Bomber HUD Text
}
DropBomb(eAttacker) 
{ 	
	//===== Auf Zombiekarten mit Decken ==================================================  =====	
    if(!level.airstrikeIgnoreCeils) 
    { 
        trace = bulletTrace(self.origin, self.origin + (0, 0, -1000), false, self); 
        targetPos = trace["position"]; 
    }
	//==================================================  =======================================	
	
    targetPos		= self.origin + (0, 0, -1000);
    trace 			= bulletTrace(self.origin, self.origin + (0, 0, -1600), false, self);
    targetPos 		= trace["position"];
   
    bomb = spawn("script_model", self.origin); 
    bomb setModel(level.airstrikeBomb); 
    bomb.angles = (90, 0, 0);
	
	time = 0.85;
	
	bomb moveTo(targetPos, time);
	
    wait time; 
    number = randomInt(5) + 1;
	bomb playsound("mortar_explosion" + number);
	bomb hide();
     
    playfx(level._effect["airstrikBombEFX"], targetPos); 
	
    players = getentarray("player", "classname"); 
    for(i = 0; i < players.size; i++) 
	{
		if(distance(targetPos, players[i].origin) < level.airstrikeBombRange && players[i].pers["team"] != "spectator" && isAlive(players[i]) && (level.airstrikeDamageTo == "all" || (level.airstrikeDamageTo == "enemy" && eAttacker.pers["team"] != players[i].pers["team"]) || (eAttacker.pers["team"] == level.airstrikeDamageTo)))
			players[i] thread [[level.callbackPlayerDamage]](eAttacker, eAttacker, level.airstrikeBombsDamage, 1, "MOD_EXPLOSIVE", "airstrike_mp", targetPos, targetPos, "none", 0); 
	}
	
    wait 0.5;
	
    bomb delete(); 
}
GetTargetedPos() 
{ 
    startOrigin		= self getEye(); 
    forward			= anglesToForward(self getPlayerAngles()); 
    forward			= maps\mp\_utility::vectorScale(forward, 100000); 
    endOrigin		= startOrigin + forward;     
    trace			= bulletTrace(startOrigin, endOrigin, false, self); 
	
    if(trace["fraction"] == 1.0 || trace["surfacetype"] == "default") 
        endOrigin = trace["position"]; 
    else 
	if(trace["fraction"] < 1) 
        endOrigin = trace["position"]; 
    return endOrigin; 
}