function LightningStrike(%client,%delay) {
	if (%client.player)
		%pos = %client.player.getTransform();
	%one = getword(%pos, 0) SPC getword(%pos, 1) SPC getword(%pos, 2);
	%player = %client.player;
	%b = new StaticShape() {
		position = %pos;
		datablock = "LightningTarget";
	};
	schedule(%delay, 0, "actualstrike", %b);
}

function actualstrike(%obj) {
	%posr = %obj.getTransform();
	%pos = VectorAdd(%posr, "0 0 -20");
	%pos2 = VectorAdd(%posr, "0 0 -20");
	for (%i=0;%i<10;%i++) {
		%pos = VectorAdd(%pos, "0 0 20");
		%p[%i] = new Lightning() {
			scale = "1 1 1";
			position = %pos;
			rotation = "1 0 0 0";
			dataBlock = "DefaultStorm";
			strikesPerMinute = "120";
			strikeWidth = "1.0";
			chanceToHitTarget = "1.0";
			strikeRadius = "1";
			boltStartRadius = "10";
			color = "1.000000 1.000000 1.000000 1.000000";
			fadeColor = "0.300000 0.300000 1.000000 1.000000";
			useFog = "1";
		};
		%p[%i].schedule(1500, "delete");
	%p[%i].strikeObject(%player);
	}
	schedule(1000, 0, "LightningApplyDamage", %p, %pos, %pos2);
	if (%obj)
		%obj.schedule(1500, "delete");
}

function LightningWeaponImage::onFire(%data, %obj, %slot) {
	%range = 1000;
	%rot = getWords(%obj.getTransform(), 3, 6);
	%muzzlePos = %obj.getMuzzlePoint(%slot);
	%muzzleVec = %obj.getMuzzleVector(%slot);
	%endPos    = VectorAdd(%muzzlePos, VectorScale(%muzzleVec, %range));
	%damageMasks = $TypeMasks::PlayerObjectType | $TypeMasks::VehicleObjectType |
			$TypeMasks::StationObjectType | $TypeMasks::GeneratorObjectType |
			$TypeMasks::SensorObjectType | $TypeMasks::TurretObjectType |
			$TypeMasks::TerrainObjectType; //|$TypeMasks::InteriorObjectType;
	%hit = ContainerRayCast(%muzzlePos, %endPos, %damageMasks, %obj);
	if (%hit) {
		%posr = getWords(%hit, 1, 3);
		%pos = VectorAdd(%posr, "0 0 300");
		%pos2 = VectorAdd(%posr, "0 0 -20");
		%b = new StaticShape() {
			position = %pos2;
			datablock = "LightningTarget";
		};
		%p = new Lightning() {
			scale = "1 1 1";
			position = %pos;
			rotation = "1 0 0 0";
			dataBlock = "DefaultStorm";
			strikesPerMinute = "120";
			strikeWidth = "10.0";
			chanceToHitTarget = "1";
			strikeRadius = "10";
			boltStartRadius = "15";
			color = "1.000000 1.000000 1.000000 1.000000";
			fadeColor = "0.300000 0.300000 1.000000 1.000000";
			useFog = "1";
			sourceObject     = %obj;
			sourceSlot       = %slot;
			vehicleObject    = 0;
		};
		%p.strikeObject(%b);
		schedule(1000, 0, "LightningApplyDamage", %p, %pos, %pos2);
		%p.schedule(1500, "delete");
		%b.schedule(1500, "delete");
	}
}

function LightningApplyDamage(%p, %pos, %pos2) {
	%damageMasks = $TypeMasks::TerrainObjectType | $TypeMasks::InteriorObjectType;
	%hit = ContainerRayCast(%pos, %pos2, %damageMasks, 1);
	if (%hit)
		%pos2 = getWords(%hit, 1, 3);
	%xy = getWords(%pos, 0, 1);
	%z1 = getWord(%pos, 2) - 5;
	%z2 = getWord(%pos2, 2) + 5;
	while (%z1 > %z2) {
		%pos = %xy SPC %z1;
		RadiusExplosion(%p, %pos, 40, 0.4, 0, %p.sourceObject, $DamageType::Lightning);
		%z1 -= 19;
	}
	%pos = %xy SPC %z1;
	RadiusExplosion(%p, %pos, 40, 0.4, 0, %p.sourceObject, $DamageType::Lightning);
}

datablock StaticShapeData(LightningTarget) {
	shapeFile = "turret_muzzlepoint.dts";
	targetNameTag = 'beacon';
	isInvincible = true;
	dynamicType = $TypeMasks::StaticObjectType;
};
