mirror of
https://github.com/mostlikely4r/construction-mod.git
synced 2026-01-19 19:24:44 +00:00
107 lines
3.2 KiB
C#
107 lines
3.2 KiB
C#
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;
|
|
};
|