hola gente de elhacker bueno miren tengo una gran duda y necesito de alguien que sepa sobre programacion me gustaria saber de que trata este script y si alguien conoce su lenguaje.
//=============================================================================
// AsmdPulseRifle.
// Written By nOs*Wildcard
//=============================================================================
class AsmdPulseRifle expands WildcardsWeapons;
var float Angle, Count;
var PBolt PlasmaBeam;
var() sound DownSound;
var() int HitDamage;
auto state Pickup
{
ignores AnimEnd;
event BeginState()
{
MultiSkins[1]=Texture'AsmdPulseRifleSkin';
MultiSkins[2]=None;
}
event EndState()
{
MultiSkins[1]=None;
MultiSkins[2]=Texture'AsmdPulseRifleSkin';
}
// Landed on ground.
simulated function Landed(Vector HitNormal)
{
local rotator newRot;
newRot = Rotation;
newRot.pitch = 0;
SetRotation(newRot);
if ( Role == ROLE_Authority )
{
bSimFall = false;
SetTimer(2.0, false);
}
}
}
simulated event RenderOverlays( canvas Canvas )
{
MultiSkins[1]=Texture'Ammoled';
Texture'Ammoled'.NotifyActor = Self;
Super.RenderOverlays(Canvas);
Texture'Ammoled'.NotifyActor = None;
MultiSkins[1]=Texture'AsmdPulseRifleSkin';
}
simulated function Destroyed()
{
if ( PlasmaBeam != None )
PlasmaBeam.Destroy();
Super.Destroyed();
}
simulated function AnimEnd()
{
if ( (Level.NetMode == NM_Client) && (Mesh != PickupViewMesh) )
{
if ( AnimSequence == 'SpinDown' )
AnimSequence = 'Idle';
PlayIdleAnim();
}
}
// set which hand is holding weapon
function setHand(float Hand)
{
if ( Hand == 2 )
{
FireOffset.Y = 0;
bHideWeapon = true;
if ( PlasmaBeam != None )
PlasmaBeam.bCenter = true;
return;
}
else
bHideWeapon = false;
PlayerViewOffset = Default.PlayerViewOffset * 100;
if ( Hand == 1 )
{
if ( PlasmaBeam != None )
{
PlasmaBeam.bCenter = false;
PlasmaBeam.bRight = false;
}
FireOffset.Y = Default.FireOffset.Y;
Mesh = mesh(DynamicLoadObject("Botpack.PulseGunL", class'Mesh'));
}
else
{
if ( PlasmaBeam != None )
{
PlasmaBeam.bCenter = false;
PlasmaBeam.bRight = true;
}
FireOffset.Y = -1 * Default.FireOffset.Y;
Mesh = mesh'PulseGunR';
}
}
// return delta to combat style
function float SuggestAttackStyle()
{
local float EnemyDist;
EnemyDist = VSize(Pawn(Owner).Enemy.Location - Owner.Location);
if ( EnemyDist < 1000 )
return 0.4;
else
return 0;
}
function float RateSelf( out int bUseAltMode )
{
local Pawn P;
if ( AmmoType.AmmoAmount <=0 )
return -2;
P = Pawn(Owner);
if ( (P.Enemy == None) || (Owner.IsA('Bot') && Bot(Owner).bQuickFire) )
{
bUseAltMode = 0;
return AIRating;
}
if ( P.Enemy.IsA('StationaryPawn') )
{
bUseAltMode = 0;
return (AIRating + 0.4);
}
else
bUseAltMode = int( 700 > VSize(P.Enemy.Location - Owner.Location) );
AIRating *= FMin(Pawn(Owner).DamageScaling, 1.5);
return AIRating;
}
simulated function PlayFiring()
{
FlashCount++;
AmbientSound = FireSound;
SoundVolume = Pawn(Owner).SoundDampening*255;
LoopAnim( 'shootLOOP', 1 + 0.5 * FireAdjust, 0.0);
bWarnTarget = (FRand() < 0.2);
}
simulated function PlayAltFiring()
{
FlashCount++;
AmbientSound = AltFireSound;
SoundVolume = Pawn(Owner).SoundDampening*255;
LoopAnim( 'shootLOOP', 1 + 0.5 * FireAdjust, 0.0);
bWarnTarget = (FRand() < 0.2);
}
function AltFire( float Value )
{
if ( AmmoType == None )
{
// ammocheck
GiveAmmo(Pawn(Owner));
}
if (AmmoType.UseAmmo(1))
{
GotoState('AltFiring');
bCanClientFire = true;
bPointing=True;
Pawn(Owner).PlayRecoil(FiringSpeed);
ClientAltFire(value);
ProjectileFire(AltProjectileClass, AltProjectileSpeed, bAltWarnTarget);
}
}
simulated event RenderTexture(ScriptedTexture Tex)
{
local Color C;
local string Temp;
Temp = String(AmmoType.AmmoAmount);
while(Len(Temp) < 3) Temp = "0"$Temp;
Tex.DrawTile( 30, 100, (Min(AmmoType.AmmoAmount,AmmoType.Default.AmmoAmount)*196)/AmmoType.Default.AmmoAmount, 10, 0, 0, 1, 1, Texture'AmmoCountBar', False );
if(AmmoType.AmmoAmount < 10)
{
C.R = 255;
C.G = 255;
C.B = 0;
}
else
{
C.R = 255;
C.G = 0;
C.B = 255;
}
Tex.DrawColoredText( 56, 14, Temp, Font'LEDFont', C );
}
///////////////////////////////////////////////////////
state NormalFire
{
ignores AnimEnd;
function Projectile ProjectileFire(class<projectile> ProjClass, float ProjSpeed, bool bWarn)
{
local Vector Start, X,Y,Z;
Owner.MakeNoise(Pawn(Owner).SoundDampening);
GetAxes(Pawn(owner).ViewRotation,X,Y,Z);
Start = Owner.Location + CalcDrawOffset() + FireOffset.X * X + FireOffset.Y * Y + FireOffset.Z * Z;
AdjustedAim = pawn(owner).AdjustAim(ProjSpeed, Start, AimError, True, bWarn);
Start = Start - Sin(Angle)*Y*4 + (Cos(Angle)*4 - 10.78)*Z;
Angle += 1.8;
return Spawn(ProjClass,,, Start,AdjustedAim);
}
function Tick( float DeltaTime )
{
if (Owner==None)
GotoState('Pickup');
}
function BeginState()
{
Super.BeginState();
Angle = 0;
AmbientGlow = 200;
}
function EndState()
{
PlaySpinDown();
AmbientSound = None;
AmbientGlow = 0;
OldFlashCount = FlashCount;
Super.EndState();
}
Begin:
Sleep(0.18);
Finish();
}
simulated function PlaySpinDown()
{
if ( (Mesh != PickupViewMesh) && (Owner != None) )
{
PlayAnim('Spindown', 1.0, 0.0);
Owner.PlayOwnedSound(DownSound, SLOT_None,1.0*Pawn(Owner).SoundDampening);
}
}
state ClientFiring
{
simulated function Tick( float DeltaTime )
{
if ( (Pawn(Owner) != None) && (Pawn(Owner).bFire != 0) )
AmbientSound = FireSound;
else
AmbientSound = None;
}
simulated function AnimEnd()
{
if ( (AmmoType != None) && (AmmoType.AmmoAmount <= 0) )
{
PlaySpinDown();
GotoState('');
}
else if ( !bCanClientFire )
GotoState('');
else if ( Pawn(Owner) == None )
{
PlaySpinDown();
GotoState('');
}
else if ( Pawn(Owner).bFire != 0 )
Global.ClientFire(0);
else if ( Pawn(Owner).bAltFire != 0 )
Global.ClientAltFire(0);
else
{
PlaySpinDown();
GotoState('');
}
}
}
///////////////////////////////////////////////////////////////
state ClientAltFiring
{
simulated function AnimEnd()
{
if ( AmmoType.AmmoAmount <= 0 )
{
PlayIdleAnim();
GotoState('');
}
else if ( !bCanClientFire )
GotoState('');
else if ( Pawn(Owner) == None )
{
PlayIdleAnim();
GotoState('');
}
else if ( Pawn(Owner).bAltFire != 0 )
LoopAnim( 'shootLOOP', 1 + 0.5 * FireAdjust, 0.0);
else if ( Pawn(Owner).bFire != 0 )
Global.ClientFire(0);
else
{
PlayIdleAnim();
GotoState('');
}
}
}
state AltFiring
{
ignores AnimEnd;
function Projectile ProjectileFire(class<projectile> ProjClass, float ProjSpeed, bool bWarn)
{
local Vector Start, X,Y,Z;
Owner.MakeNoise(Pawn(Owner).SoundDampening);
GetAxes(Pawn(owner).ViewRotation,X,Y,Z);
Start = Owner.Location + CalcDrawOffset() + FireOffset.X * X + FireOffset.Y * Y + FireOffset.Z * Z;
AdjustedAim = pawn(owner).AdjustAim(ProjSpeed, Start, AimError, True, bWarn);
Start = Start - Sin(Angle)*Y*4 + (Cos(Angle)*4 - 10.78)*Z;
Angle += 1.8;
return Spawn(ProjClass,,, Start,AdjustedAim);
}
function Tick( float DeltaTime )
{
if (Owner==None)
GotoState('Pickup');
}
function BeginState()
{
Super.BeginState();
Angle = 0;
AmbientGlow = 200;
}
function EndState()
{
PlaySpinDown();
AmbientSound = None;
AmbientGlow = 0;
OldFlashCount = FlashCount;
Super.EndState();
}
Begin:
Sleep(0.18);
Finish();
}
state Idle
{
Begin:
bPointing=False;
if ( (AmmoType != None) && (AmmoType.AmmoAmount<=0) )
Pawn(Owner).SwitchToBestWeapon(); //Goto Weapon that has Ammo
if ( Pawn(Owner).bFire!=0 ) Fire(0.0);
if ( Pawn(Owner).bAltFire!=0 ) AltFire(0.0);
Disable('AnimEnd');
PlayIdleAnim();
}
///////////////////////////////////////////////////////////
simulated function PlayIdleAnim()
{
if ( Mesh == PickupViewMesh )
return;
if ( (AnimSequence == 'BoltLoop') || (AnimSequence == 'BoltStart') )
PlayAnim('BoltEnd');
else if ( AnimSequence != 'SpinDown' )
TweenAnim('Idle', 0.1);
}
simulated function TweenDown()
{
if ( IsAnimating() && (AnimSequence != '') && (GetAnimGroup(AnimSequence) == 'Select') )
TweenAnim( AnimSequence, AnimFrame * 0.4 );
else
TweenAnim('Down', 0.26);
}
function ProcessTraceHit(Actor Other, Vector HitLocation, Vector HitNormal, Vector X, Vector Y, Vector Z)
{
local int i;
local PlayerPawn PlayerOwner;
if (Other==None)
{
HitNormal = -X;
HitLocation = Owner.Location + X*10000.0;
}
PlayerOwner = PlayerPawn(Owner);
if ( PlayerOwner != None )
PlayerOwner.ClientInstantFlash( -0.4, vect(450, 190, 650));
SpawnEffect(HitLocation, Owner.Location + CalcDrawOffset() + (FireOffset.X + 20) * X + FireOffset.Y * Y + FireOffset.Z * Z);
if ( ShockProj(Other)!=None )
{
AmmoType.UseAmmo(2);
ShockProj(Other).SuperExplosion();
}
else
Spawn(class'ut_RingExplosion5',,, HitLocation+HitNormal*8,rotator(HitNormal));
if ( (Other != self) && (Other != Owner) && (Other != None) )
Other.TakeDamage(HitDamage, Pawn(Owner), HitLocation, 60000.0*X, MyDamageType);
}
function SpawnEffect(vector HitLocation, vector SmokeLocation)
{
local ShockBeam Smoke,shock;
local Vector DVector;
local int NumPoints;
local rotator SmokeRotation;
DVector = HitLocation - SmokeLocation;
NumPoints = VSize(DVector)/135.0;
if ( NumPoints < 1 )
return;
SmokeRotation = rotator(DVector);
SmokeRotation.roll = Rand(65535);
Smoke = Spawn(class'ShockBeam',,,SmokeLocation,SmokeRotation);
Smoke.MoveAmount = DVector/NumPoints;
Smoke.NumPuffs = NumPoints - 1;
}