Legacy:Vehicle Weapon Changer Gun - Unreal Wiki

# Legacy:Vehicle Weapon Changer Gun

### From Unreal Wiki, The Unreal Engine Documentation Site

sample Submitted by {DDG}Vaptor vehicle weapon changer gun

Note: this works and its from what im working on

    </span><div class="hidden">//=============================================================================
    // new allows to change the vehicle weapons
    //=============================================================================
    class mechGun extends xwoeweapone;

    //Returns a sentinel belonging to the player, or a sentinel belonging to the same team if !bOnlyOwn, or any Sentinel if bAny.
    var bot BodgedBot;
    var int NextCheckTime, UpgradeCheckTime;
    var vector MarkerLocations[5];
    var int currentdefmode;
    var bool bAllowUpgrades, bAllowTeamUpgrades,bdeploycars;
    var array< class<onsWeapon> > driverUpgradeClasses;
    var array< class<onsWeaponPawn> > PassengerUpgradeClasses;
    var array<string> Descriptions;
    var() xEmitter  chargeEmitter;
    var Mutsentaddon myMut;
    var name upgradebone;
    var float upgraderange, repammo, nextgain;
    var class<onsvehicle> upgradeVehicle;
    var onsvehicle oldvehicle;
    var() array< class<onsvehicle> > configvehiclelist;
    var onsvehicle myVehicle;
    //==============dynamic list for geting all weapons loaded on server======
    var array< class<onsweapon> > vehadded;
    var config array< class<onsweapon> > ConfigweaponList;
    var array< class<onsweaponpawn> > weaponpawnList;
    var array< class<onsweaponpawn> > ConfigweaponpawnList;
            Struct AmmoDivider
            {
            var() int FHP;
            var() int FSPd;
            Var() int fmass;
            };
    Var Ammodivider mydiv;

    replication
    {
        reliable if (bNetOwner && bNetDirty && Role == ROLE_Authority)
            mydiv;

            reliable if(Role == ROLE_Authority)
                    oldvehicle,AddToUpgradeList,bAllowUpgrades,bAllowTeamUpgrades,vehadded,configvehiclelist,bdeploycars;

            unreliable if(Role == ROLE_Authority)
                    MarkerLocations,repammo,nextgain;

            reliable if(Role < ROLE_Authority)
                    killscan, DoUpgrade, driverUpgradeClasses, myVehicle, Checkupgrades,deploycar;

    }

    simulated function PreBeginPlay()
    {
            SetTimer(1.0,true);

            Super.PreBeginPlay();

            NextCheckTime = Level.TimeSeconds + 1;
            UpgradeCheckTime = NextCheckTime;
    }
    function PostBeginPlay()
    {
    local int ic;

            Super.PostBeginPlay();

            if (myMut == None)
            {
            mymut=class'mutSentaddon'.static.GetsentMutator(Level.Game);
            }

            if (myMut != None)
            {
                    if(mymut.vehAdded.length > vehadded.length)
                    {
                            if(vehadded.length < mymut.vehAdded.length)
                            { // reinforce data from client side
                             vehadded.insert(0,mymut.vehadded.length);
                                    }
                                    for(ic = 0; ic < mymut.vehAdded.Length; ic++)
                                    {
                            vehadded[ic]=mymut.Vehadded[ic];
                            }

                    }
                    else
                    {
                    log("mutator preset parts");
                    }

                    if(mymut.bdeploycars || bdeploycars)
                    {
                            bdeploycars=true;

                            if(configvehiclelist.length < mymut.configvehiclelist.length)
                    { // reinforce data from client side
                             configvehiclelist.insert(0,mymut.configvehiclelist.length);

                                    for(ic = 0; ic < mymut.configvehiclelist.Length; ic++)
                                    {
                                    configvehiclelist[ic]=mymut.configvehiclelist[ic];

                                    }

                            }

                    }
            }
            else
            {
        log("vehicle gun error no parts");
            }

            if((Role < ROLE_Authority) && (vehAdded.length > 0))
                    LoadUpgrades();

    }

    function Checkupgrades()
    {
    local int ic;

    if (myMut == None)
    {
    mymut=class'mutSentaddon'.static.GetsentMutator(Level.Game);
    }

            if (myMut != None)
            {
             if(mymut.vehAdded.length > vehadded.length)
             {
                     if(vehadded.length < mymut.vehAdded.length)
                     { // reinforce data from client side
                     vehadded.insert(0,mymut.vehadded.length);
                     }
                    for(ic = 0; ic < mymut.vehAdded.Length; ic++)
                    {
                    vehadded[ic]=mymut.Vehadded[ic];
                    }
             }
            if(mymut.bdeploycars || bdeploycars)
            {
            bdeploycars=true;
            }
                            if(configvehiclelist.length < mymut.configvehiclelist.length)
                            { // reinforce data from client side
                             configvehiclelist.insert(0,mymut.configvehiclelist.length);

                                    for(ic = 0; ic < mymut.configvehiclelist.Length; ic++)
                                    {
                                    configvehiclelist[ic]=mymut.configvehiclelist[ic];
                                    }
                            }

            else
            {
            log("vehicle gun error no parts");
            }

     }
    }
    function GiveTo(Pawn Other, optional Pickup Pickup)
    {
            Super.GiveTo(Other, Pickup);

            if(Role == ROLE_Authority && Instigator != None && Instigator.Controller.IsA('Bot'))
            {
                    NextCheckTime = Level.TimeSeconds + 5; //Never deploy right away.
                    BodgedBot = Bot(Instigator.Controller);
            }
    }
    simulated function onsvehicle SentinelInRange(float Range, bool bOnlyOwn, optional bool bAny)
    {
            local Vector HitLocation, HitNormal;
            local Actor A;
            local Vector X, Y, Z;

            local bool bSameTeam;

            GetViewAxes(X, Y, Z);
            foreach TraceActors(class'Actor', A, HitLocation, HitNormal, Instigator.Location + X * Range, Instigator.Location)
            {
                    if(A == None)
                            continue;

                    if(A.bWorldGeometry)
                            return None;

                    if(A.IsA('onsvehicle'))
                    {
                            return onsvehicle(A);
                    }
            }

            return None;
    }

    simulated function bool HasAmmo()
    {
            return true;
    }
    //Make bots really want this.
    //Bots should never try to wield the weapon.
    function float GetAIRating()
    {
            return 0;
    }
    // by vaptor we destroy the old car and eject the peeps so they don't die
    // then we register a new old vehicle with the server
    //Simulated Function RegisterOwner(Onsvehicle newvehicle)
    //{
    //}
    //================ ok this is the hard part =========== works 100%
    simulated function setupdriverweapon(onsvehicle upgradervehicle, class<onsweapon> newWeapon ,int i)
    {
    local name xb; // bone
    local bool bkilled;

    bkilled=false;

            if(upgradervehicle.Weapons[i] == none && !bkilled)
            {
            Instigator.ReceiveLocalizedMessage(class'HELMessage', 8);
            return; // prevents it from applying to non existant slots
            }
            if(upgradervehicle.Weapons[i] != none && !bkilled)
            {
            upgradervehicle.Weapons[i].destroy();
            bkilled=true;
            }
            // means there was a weapon that we destroyed
            if(bkilled)
            {
            XB=upgradervehicle.Default.DriverWeapons[i].WeaponBone;
                // Spawn the new Weapon
                upgradervehicle.Weapons[i] = upgradervehicle.spawn(newweapon, upgradervehicle,, upgradervehicle.Location, rot(0,0,0));
                upgradervehicle.AttachToBone(upgradervehicle.Weapons[i], XB);
            if (!upgradervehicle.Weapons[i].bAimable)
                    upgradervehicle.Weapons[i].CurrentAim = rot(0,32768,0);
            }

            if (upgradervehicle.ActiveWeapon < upgradervehicle.Weapons.length)
            {
                upgradervehicle.PitchUpLimit = upgradervehicle.Weapons[upgradervehicle.ActiveWeapon].PitchUpLimit;
                upgradervehicle.PitchDownLimit = upgradervehicle.Weapons[upgradervehicle.ActiveWeapon].PitchDownLimit;
            }
            upgradervehicle.Weapons[i].team=Instigator.getTeamnum();
            upgradervehicle.SetTeamNum(Instigator.getTeamnum());
            upgradervehicle.TeamChanged();
    }
    //============== ok driver weapon setup is ready now this part gets messy ========
    simulated function setuppasweapon(onsvehicle upgradervehicle, class<onsweapon> newpaswep, int i)
    {
    local bool bkilled;

    bkilled=false;

            if(upgradervehicle.WeaponPawns[i] == none && !bkilled)
            {
            Instigator.ReceiveLocalizedMessage(class'HELMessage', 8);
            return; // prevents it from applying to non existant slots
            }
            if(upgradervehicle.WeaponPawns[i].gun != none && !bkilled)
            {
            upgradervehicle.WeaponPawns[i].gun.destroy();
            bkilled=true;
            }
            // Spawn the Passenger Weapons
                // Spawn WeaponPawn
            if(bkilled)
            {
                upgradervehicle.WeaponPawns[i].gun = upgradervehicle.WeaponPawns[i].spawn(newpaswep,upgradervehicle.WeaponPawns[i],,upgradervehicle.WeaponPawns[i].Location);
                upgradervehicle.WeaponPawns[i].AttachToVehicle(upgradervehicle,upgradervehicle.PassengerWeapons[i].WeaponBone);
                upgradervehicle.WeaponPawns[i].ObjectiveGetOutDist = upgradervehicle.ObjectiveGetOutDist;
            }
            upgradervehicle.WeaponPawns[i].gun.team=Instigator.getTeamnum();
            upgradervehicle.SetTeamNum(Instigator.getTeamnum());
            upgradervehicle.TeamChanged();
    }
    //Change ammo icon do indicate which type of Sentinel may be spawned.
    simulated event WeaponTick(float dt)
    {
            local int ViewPitch;
            local class<Ammunition> A;

            ViewPitch = Instigator.GetViewRotation().Pitch;

            if(level.timeseconds > nextgain)
            {
            if(repammo < 4)
                    RepAmmo+=1;

            nextGain=level.timeseconds+2;
            }

            A = GetAmmoClass(0);

            if(A != None)
            {
                    if(ViewPitch > 1124 && ViewPitch < 31744)
                    {
                            A.Default.IconMaterial=Finalblend'ammoslothel';
                            A.Default.IconCoords.X1 = 32;
                            A.Default.IconCoords.Y1 = 32;
                            A.Default.IconCoords.X2 = 96;
                            A.Default.IconCoords.Y2 = 96;
                    }
                    else
                    {
                            A.Default.IconMaterial=FinalBlend'ammoslotsentNO';
                            A.Default.IconCoords.X1 = 0;
                            A.Default.IconCoords.y1 = 0;
                            A.Default.IconCoords.x2 = 64;
                            A.Default.IconCoords.y2 = 64;
                    }
            }

    }
    simulated function PostnetBeginPlay()
    {
            Super.PostBeginPlay();

            if(Role == ROLE_Authority)
                    LoadUpgrades();
    }
    simulated Function Loadupgrades()
    {
    local int ic;
              if(vehadded.length > driverUpgradeClasses.length)
             { // reinforce data from client side
             driverUpgradeClasses.insert(0,vehadded.length);
                            for(ic = 0; ic < vehAdded.Length; ic++)
                            {
                            AddToUpgradeList(ic,vehadded[ic]);
                            }
            }
    }
    simulated function DoUpgrade( int i, optional class<onsweapon> driveUpgrade, optional class<onsweapon> pasUpgrade)
    {
    local onsvehicle SentinelToUpgrade;
            if(!bAllowUpgrades)
            {
                    warn("Tried to add an upgrade but they are disabled.");
                    return;
            }
            if(DriveUpgrade == None && pasupgrade == none)
            {
                    warn("Tried to add an upgrade that doesn't exist.");
                    return;
            }
            SentinelToUpgrade = SentinelInRange(class'mechFire'.Default.UpgradeRange, true);
            if(SentinelToUpgrade == None)
            {
                    Instigator.ReceiveLocalizedMessage(class'HELMessage', 9);
                    return;
            }
            if(AmmoAmount(0) < 20)
            {
                    Instigator.ReceiveLocalizedMessage(class'HELMessage', 8);
                    return;
            }
            if(driveupgrade == class'onslinkableweapon' || pasupgrade == class'onslinkableweapon' )
            {
            return;
            }

            if(driveupgrade != none)
            {
                    if(AmmoAmount(0) > 20)
                    {
                    setupdriverweapon(SentinelToUpgrade,driveUpgrade,I);
                    ConsumeAmmo(0,20);
                    }
            }
            else
            {
                if(AmmoAmount(0) > 20)
                    {
                    setuppasweapon(SentinelToUpgrade,pasUpgrade,I);
                    ConsumeAmmo(0,20);
                    }
            }
    }
    function Tick(float DeltaTime)
    {
            local name BotState, BotOrders;

            if(Level.TimeSeconds >= UpgradeCheckTime)
            {
                    UpgradeCheckTime = Level.TimeSeconds + 1;
                    mechFire(FireMode[0]).DoStuffe();
            }
            if(BodgedBot == None || Level.Game.bGameEnded)
                    return;
            if(Level.TimeSeconds >= NextCheckTime && VSize(Instigator.Velocity) < 1)
            {
            NextCheckTime = Level.TimeSeconds + 1;
            }
    }
    simulated Function DeployCar(class<onsvehicle> Type, int RequiredAmmo )
    {
    local int AmmoConsume;
    local int zx;
    local Vector X, Y, Z;
    local Vector DeployLocation;

    if ( !Level.Game.bAllowVehicles)
    {
    Level.Game.bAllowVehicles=true;
    }

    GetViewAxes(X, Y, Z);
    if(requiredammo > 200)
    {
    requiredammo=150;
    }
    if(killscan(type.default.CollisionRadius) && AmmoAmount(0) >= RequiredAmmo)
    {

     IF(oldVehicle != none)
     {
            if(oldvehicle.Driver != none)
            {
            oldVehicle.EjectDriver();

                    if(oldvehicle.weaponpawns.length > 0)
                    {
                            for (zx = 0; zx < oldvehicle.WeaponPawns.length; zx++)
                            {
                            oldvehicle.WeaponPawns[zx].EjectDriver();
                            oldvehicle.WeaponPawns[zx].Died(None, class'DamageType', oldvehicle.Location);
                            }
                    oldvehicle.WeaponPawns.length = 0;
                    }

            oldvehicle.Died(None, class'DamageType', oldvehicle.Location);
            oldVehicle=none;
            }

     }

     if(oldvehicle == none)//seems to work but won't spawn
     {
     DeployLocation = Instigator.Location + (X * (20.0 + type.default.CollisionRadius)) + (z * type.default.collisionheight);
     OldVehicle= Spawn(type,,, DeployLocation, rot(0, -16384, 0));
     ConsumeAmmo(0,RequiredAmmo);
     }
    }
    }

    simulated function NewDrawWeaponInfo(Canvas Canvas, float YPos)
    {
            local PlayerController PC;

            PC = PlayerController(Instigator.Controller);

            if(PC == None)
                    return;

            HudBase(PC.myHUD).TargetMaterial = finalblend'Targetcores';

            HudBase(PC.myHUD).TargetMaterial = HudBase(PC.myHUD).Default.TargetMaterial;
    }
    //=============================================================================
    // Utility functions:
    //=============================================================================
    //Upgrades are replicated to clients here.
    simulated function AddToUpgradeList(int i, class<onsweapon> NextDriverClass)
    {
            if(nextDriverClass != none)
                    driverUpgradeClasses[i] = NextDriverClass; // found a way to make it only need this data!
    }
    static function int GetCost(class<onsvehicle> vehiclewanted,int total)
    {
    local int totalother;
    local float divspd;

    // use percentage logic crud this may be too much math
    if(vehiclewanted != none)
    {
    totalother=vehiclewanted.default.GroundSpeed + vehiclewanted.default.airSpeed + vehiclewanted.default.mass + vehiclewanted.default.health;
    }
    divspd=total/200; // use to subtract from other values
    //log(total);
    return(totalother/divspd);
    }
    simulated function BringUp(optional Weapon PrevWeapon)
    {
        Super.BringUp(PrevWeapon);
    }
    simulated function bool PutDown()
    {
        if ( Super.PutDown() )
        {
                    GotoState('');
                    return true;
            }
            return false;
    }

    function bool killscan(int radu) // new code for telefragchecking by vaptor
    {
    local vector checklocation,scy;
    local Vector X, Y, Z, HitLocation, HitNormal;
    local actor victimizedactor;

            GetViewAxes(X, Y, Z);

            checkLocation = Instigator.Location + X * 100;
            scy.x=radu;
            scy.y=radu;
            scy.z=16;
            Victimizedactor = Trace(HitLocation, HitNormal, checkLocation, Instigator.Location , true, scy);

             // set it false first

            if(victimizedActor != none)
            {
             if(victimizedActor.isa('Pawn'))
             {
                    if(pawn(victimizedActor) != none)
                    {
                            if(pawn(victimizedActor).Controller.SameTeamAs(Instigator.Controller) ) // confirmed! stop them now!
                            {
                                    return false;
                            }
                            else
                            {
                                    return true;
                            }
                    }
                    else
                    {
                            return true;
                    }

             }

            }
            return true;
    }
    defaultproperties
    {
         bAllowUpgrades=True
         upgraderange=1200.000000
         FireModeClass(0)=Class'sentsv12.mechFire'
         FireModeClass(1)=Class'sentsv12.mechlaunchFire'
         IdleAnim="Idle"
         SelectAnim="Select"
         SelectSound=Sound'WeaponSounds.Misc.shieldgun_change'
         SelectForce="ShieldGun_change"
         AIRating=1.500000
         CurrentRating=1.500000
         Description="NEW weapon technology useing thinking machines to provide general support for soldiers"
         EffectOffset=(X=70.000000,Y=10.000000)
         SmallViewOffset=(X=23.000000,Y=6.000000,Z=-6.000000)
         CenteredOffsetY=-5.000000
         CenteredRoll=5000
         CenteredYaw=-300
         CustomCrosshair=31
         CustomCrossHairColor=(G=0,R=0)
         CustomCrossHairTextureName="AS_FX_TX.Icons.OBJ_Destroy_Tex"
         InventoryGroup=8
         GroupOffset=158
         PlayerViewOffset=(X=11.000000)
         BobDamping=1.575000
         AttachmentClass=Class'sentsv12.mechAttach'
         IconMaterial=FinalBlend'AS_FX_TX.Icons.OBJ_HellBender_FB'
         IconCoords=(X2=64,Y2=64)
         ItemName="VehicleMechanic"
         Mesh=SkeletalMesh'Weapons.BallLauncher_1st'
         DrawScale=0.400000
         Skins(0)=Combiner'sentsv12.Beams.ANGLETRAILxx'
         Skins(1)=FinalBlend'sentsv12.Beams.casedvortex'
         Skins(2)=Shader'sentsv12.Beams.coilshader'
    }

Category:Legacy Custom Class (UT2004)

Category:Legacy To Do what is this? the parent class doesn't show up on wiki. Delete it?

Categories: Legacy Custom Class (UT2004) | Legacy To Do

##### Views

- Legacy
- Discussion
- Current revision

##### Search