Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- $DefaultClimbable = 1;
- package Agility
- {
- function Armor::onTrigger(%db,%player,%slot,%io)
- {
- Parent::onTrigger(%db,%player,%slot,%io);
- if(%player.getDatablock().isAgilePlayer)
- {
- if(%slot == 3 && %io)
- {
- if(isEventPending(%player.fallDamageSched))
- {
- if(%player.getEnergyLevel() < %player.fallDamageVelMult + 5)
- {
- return;
- }
- cancel(%player.fallDamageSched);
- %dir = getWords(%player.getEyeVector(),0,1);
- %x = getWord(%dir,0); %y = getWord(%dir,1);
- %nx = mAbs(%x) * %player.fallDamageVelMult;
- %ny = mAbs(%y) * %player.fallDamageVelMult;
- if(%x < 0)
- {
- %nx = 0 - %nx;
- }
- if(%y < 0)
- {
- %ny = 0 - %ny;
- }
- %player.addVelocity(%nx SPC %ny SPC 5);
- %player.setEnergyLevel(%player.getEnergyLevel() - %player.fallDamageVelMult);
- return;
- }
- }
- if(%slot == 4)
- {
- %player.pkm = %io;
- }
- if(!%player.getMountedImage(0) || %player.getDatablock().alwaysClimb)
- {
- %side = %player.getDatablock().wallJumpVel;
- %up = %player.getDatablock().wallClimbVel;
- if(%slot == 2 && %io)
- {
- if(%player.holding)
- {
- if(%player.getEnergyLevel() < %player.getDatablock().wallJumpEnergy + 5)
- {
- return;
- }
- %up = %side;
- %side += 4;
- %dir = %player.getEyeVector();
- %player.holding = 0;
- cancel(%player.nhtick);
- %player.holdposition = "";
- %vel = mClampF(getword(%dir,0) * %side,0 - %side,%side) SPC mClampF(getword(%dir,1) * %side,0 - %side,%side) SPC mClampF(getword(%dir,2) * %up,0 - %up,%up);
- %player.setVelocity(%vel);
- %player.setEnergyLevel(%player.getEnergyLevel() - %player.getDatablock().wallJumpEnergy);
- %player.playThread(2,"jump");
- return;
- }
- %touch = containerRayCast(%player.getPosition(),vectorAdd(vectorScale(vectorNormalize(setword(%player.getEyeVector(),2,"0")),2),%player.getPosition()),$TypeMasks::FxBrickAlwaysObjectType|$TypeMasks::InteriorObjectType);
- if(!isObject(%touch))
- {
- return;
- }
- if(%touch.getClassName() $= "InteriorInstance")
- {
- %col = 1;
- } else {
- %col = %touch.isColliding();
- }
- if(isObject(%touch) && %col && (%touch.rejClimb == !$DefaultClimbable))
- {
- if(%player.pkm)
- {
- if(%player.getDatablock().highLevel !$= "")
- {
- %down = containerRayCast(%player.getPosition(),vectorAdd(%player.getPosition(),"0 0" SPC 0 - %player.getDatablock().highLevel),$TypeMasks::FxBrickAlwaysObjectType|$TypeMasks::InteriorObjectType);
- if(!isObject(%down))
- {
- %fallchance = getRandom(0,1000);
- if(%fallchance <= %player.getDatablock().fumbleChance)
- {
- %player.setEnergyLevel(%player.getEnergyLevel() - 10);
- %player.addVelocity("0 0 -5");
- return;
- }
- }
- }
- %dir = %player.getEyeVector();
- if(getWord(%dir,2) > 0)
- {
- if(%player.getEnergyLevel() < %player.getDatablock().wallClimbEnergy + 5)
- {
- return;
- }
- %player.setVelocity("0 0" SPC %up);
- %player.setEnergyLevel(%player.getEnergyLevel() - %player.getDatablock().wallClimbEnergy);
- %player.playThread(2,"shiftUp");
- %player.schedule(150,"playThread",2,"shiftDown");
- } else {
- if(%player.getEnergyLevel() < %player.getDatablock().wallJumpEnergy + 5)
- {
- return;
- }
- %vel = mClampF(getword(%dir,0) * (0 - %side),0 - %side,%side) SPC mClampF(getword(%dir,1) * (0 - %side),0 - %side,%side) SPC %up;
- %player.setVelocity(%vel);
- %player.setEnergyLevel(%player.getEnergyLevel() - %player.getDatablock().wallJumpEnergy);
- %player.playThread(2,"shiftDown");
- %player.schedule(66,"playThread",2,"shiftUp");
- }
- if(%touch.getClassName() $= "fxDTSBrick")
- {
- %touch.onClimb(%player);
- }
- }
- }
- }
- if(%slot == 0)
- {
- if(%io)
- {
- %touch = containerRayCast(%player.getPosition(),vectorAdd(vectorScale(vectorNormalize(setword(%player.getEyeVector(),2,"0")),2),%player.getPosition()),$TypeMasks::FxBrickAlwaysObjectType|$TypeMasks::InteriorObjectType);
- if(!isObject(%touch))
- {
- return;
- }
- if(%touch.getClassName() $= "InteriorInstance")
- {
- %col = 1;
- } else {
- %col = %touch.isColliding();
- }
- if(isObject(%touch) && %col && (%touch.rejClimb == !$DefaultClimbable))
- {
- if(%player.pkm)
- {
- if(!%player.Holding)
- {
- %player.HoldPosition = %player.getPosition();
- %player.nhtick = schedule(100,0,"HoldTick",%player);
- %player.holding = 1;
- %player.PlayThread(1,"armReady");
- } else {
- %player.holding = 0;
- cancel(%player.nhtick);
- %player.holdposition = "";
- }
- }
- }
- }
- }
- }
- }
- }
- function Armor::onImpact(%db,%player,%obj,%vel,%totalvel)
- {
- if(!%player.getDatablock().isAgilePlayer)
- {
- Parent::onImpact(%db,%player,%obj,%vel,%totalvel);
- return;
- }
- %minigame = getMinigameFromObject(%player);
- if(!isObject(%minigame))
- {
- %falldmg = $Pref::Server::FallingDamage;
- } else {
- %falldmg = %minigame.fallingDamage;
- }
- if(!%falldmg)
- {
- Parent::onImpact(%db,%player,%obj,%vel,%totalvel);
- return;
- }
- %damage = (%totalvel * %player.getDatablock().SpeedDamageScale);
- %time = 250 + %player.client.getPing();
- %player.fallDamageVelMult = mClampF(%damage/5,5,25);
- %player.fallDamageSched = %player.schedule(%time,"damage",0,%player.getPosition(),%damage,$DamageType::Fall);
- }
- function Player::ActivateStuff(%player)
- {
- if(%player.pkm)
- {
- return;
- }
- Parent::ActivateStuff(%player);
- }
- function Armor::onCollision(%this, %obj, %col, %pos, %vel)
- {
- if(%vel > 7.5)
- {
- %start = %obj.getPosition();
- %end = vectorSub(%start, "0 0 1");
- %masks = ($TypeMasks::FxBrickObjectType | $TypeMasks::PlayerObjectType | $TypeMasks::StaticObjectType | $TypeMasks::TerrainObjectType | $TypeMasks::VehicleObjectType);
- %sorryThatILandedOnYou = containerRayCast(%start, %end, %masks, %obj);
- if(miniGameValidZombieTarget(%obj, %sorryThatILandedOnYou))
- {
- %damage = (%vel / 7) * 10;
- %sorryThatILandedOnYou.damage(%obj, %start, %damage, $DamageType::LeaperJump);
- }
- }
- return parent::onCollision(%this, %obj, %col, %pos, %vel);
- }
- function Armor::onImpact(%this, %obj, %vel)
- {
- return;
- }
- };
- ActivatePackage(Agility);
- function fxDTSBrick::setClimbable(%brick,%bool)
- {
- if($DefaultClimbable)
- {
- %brick.rejClimb = !%bool;
- } else {
- %brick.rejClimb = %bool;
- }
- }
- registerOutputEvent(fxDTSBrick,"setClimbable","bool",0);
- function fxDTSBrick::onClimb(%brick,%player)
- {
- $inputTarget_Self = %brick;
- $inputTarget_Player = %player;
- $inputTarget_Client = %player.client;
- %brick.processInputEvent("onClimb",%player.client);
- }
- registerInputEvent(fxDTSBrick,"onClimb","Self fxDTSBrick\tPlayer Player\tClient GameConnection");
- function HoldTick(%player)
- {
- if(!isObject(%player))
- {
- return;
- }
- cancel(%player.nhtick);
- if(%player.pkm && %player.holding)
- {
- %player.setTransform(%player.HoldPosition);
- %player.setVelocity("0 0 2");
- %player.nhtick = schedule(100,0,"HoldTick",%player);
- } else {
- %player.holdPosition = "";
- }
- }
- datablock PlayerData(PlayerAgile : PlayerStandardArmor)
- {
- cameramaxdist = 10;
- cameraVerticalOffset = 1.4;
- cameraHorizontalOffset = 0;
- cameraTilt = 0.2;
- maxfreelookangle = 2;
- runForce = 6000;
- runEnergyDrain = 0;
- minRunEnergy = 0;
- maxForwardSpeed = 14;
- maxBackwardSpeed = 10;
- maxSideSpeed = 10;
- maxForwardCrouchSpeed = 5;
- maxBackwardCrouchSpeed = 5;
- maxSideCrouchSpeed = 5;
- jumpForce = 1080;
- jumpEnergyDrain = 0;
- minJumpEnergy = 0;
- jumpDelay = 0;
- minJetEnergy = 0;
- jetEnergyDrain = 0;
- canJet = 0;
- showEnergyBar = 1;
- maxEnergy = 100;
- rechargeRate = 0.2;
- maxDamage = 100;
- isAgilePlayer = 1;
- alwaysClimb = 0;
- wallJumpVel = 12;
- wallJumpEnergy = 15;
- wallClimbVel = 12;
- wallClimbEnergy = 12;
- minWallEnergy = 20;
- highLevel = 7.2; // 5 plates = 1 unit, so 36 plates = 7.2 units
- fumbleChance = 150; // 150 out of 1000 = 15%
- airControl = 0.15;
- speedDamagescale = 1.9;
- uiName = "GoombaPlayer";
- isSurvivor = 1;
- };
Advertisement
Add Comment
Please, Sign In to add comment