From c4556189131cc9a62b5f8c5c6765d0ae87163e2e Mon Sep 17 00:00:00 2001 From: Legonzaur Date: Sun, 13 Mar 2022 19:23:46 +0100 Subject: [PATCH] Improved ability recharge --- .../scripts/weapons/mp_ability_holopilot.txt | 36 ++++++++++++++++ mod.json | 2 +- mod/scripts/vscripts/holoshift_recharge.gnut | 41 ++++++------------- .../vscripts/weapons/mp_ability_holopilot.nut | 11 ++++- 4 files changed, 59 insertions(+), 31 deletions(-) create mode 100644 keyvalues/scripts/weapons/mp_ability_holopilot.txt diff --git a/keyvalues/scripts/weapons/mp_ability_holopilot.txt b/keyvalues/scripts/weapons/mp_ability_holopilot.txt new file mode 100644 index 0000000..8639434 --- /dev/null +++ b/keyvalues/scripts/weapons/mp_ability_holopilot.txt @@ -0,0 +1,36 @@ +WeaponData +{ + MP_BASE + { + "ammo_clip_size" "200" + "ammo_default_total" "200" + "ammo_display" "bar" + "ammo_min_to_fire" "100" + "ammo_per_shot" "100" + "ammo_stockpile_max" "200" + "fire_rate" "2" + "regen_ammo_refill_rate" "16" + + "enable_highlight_networking_on_creation" "" + } + "regen_ammo_refill_start_delay" "2.0" + Mods + { + pas_power_cell + { + "regen_ammo_refill_rate" "*1.35" + } + + dev_mod_low_recharge + { + "regen_ammo_refill_rate" "*10" + } + amped_tacticals + { + "ammo_clip_size" "300" + "ammo_default_total" "300" + "ammo_stockpile_max" "300" + "regen_ammo_refill_rate" "*1.5" + } + } +} \ No newline at end of file diff --git a/mod.json b/mod.json index 893d648..cd2f464 100644 --- a/mod.json +++ b/mod.json @@ -1,7 +1,7 @@ { "Name": "Legonzaur.HoloShift", "Description": "Swap positions with your beloved decoy", - "Version": "1.0.4", + "Version": "1.0.6", "LoadPriority": 2, "Scripts": [ { diff --git a/mod/scripts/vscripts/holoshift_recharge.gnut b/mod/scripts/vscripts/holoshift_recharge.gnut index 8f9a65d..9a97ada 100644 --- a/mod/scripts/vscripts/holoshift_recharge.gnut +++ b/mod/scripts/vscripts/holoshift_recharge.gnut @@ -7,18 +7,21 @@ void function HoloShift_Init() { } -int rechargeStep = 1 //defines speed at which counter is added or removed -float rechargeInterval = 1/20 int charge_size = 100 -int charge_max = 200 -int recharge_remove = 1 + +bool IsLaunched = false #if SERVER void function HoloRecharge(){ - thread HoloRecharge_Threaded() + if(!IsLaunched) { + thread HoloRecharge_Threaded() + IsLaunched = true + } + } void function HoloRecharge_Threaded(){ + float rechargeMultiplier = charge_size/DECOY_DURATION while(true){ array players = GetPlayerArray() foreach (entity player in players) @@ -28,34 +31,16 @@ int recharge_remove = 1 if( IsValid(player.GetOffhandWeapon(1)) && player.GetOffhandWeapon(1).GetWeaponClassName() == "mp_ability_holopilot"){ Assert(player) if(!player.IsPhaseShifted()){ - int chargeCount = player.GetOffhandWeapon(1).GetWeaponPrimaryClipCount() - int oldchargeCount = chargeCount - if(player in playerDecoyList){ - chargeCount -= recharge_remove - if(chargeCount < 0) - chargeCount = 0 - }else{ - int max = player.GetOffhandWeapon(1).GetWeaponPrimaryClipCountMax() - chargeCount += rechargeStep - if(chargeCount > charge_size){ - chargeCount = max - } - } - if(oldchargeCount != chargeCount){ - player.GetOffhandWeapon(1).SetWeaponPrimaryClipCount(chargeCount) + if(player in playerDecoyActiveFrom){ + print("test") + float chargeCount = float(player.GetOffhandWeapon(1).GetWeaponPrimaryClipCountMax()) - ((Time() - playerDecoyActiveFrom[player])*rechargeMultiplier) + player.GetOffhandWeapon(1).SetWeaponPrimaryClipCount(int(chargeCount)) } } } - - - - } } - wait rechargeInterval + wait 0 } - } - - #endif diff --git a/mod/scripts/vscripts/weapons/mp_ability_holopilot.nut b/mod/scripts/vscripts/weapons/mp_ability_holopilot.nut index c488b5a..e179e30 100644 --- a/mod/scripts/vscripts/weapons/mp_ability_holopilot.nut +++ b/mod/scripts/vscripts/weapons/mp_ability_holopilot.nut @@ -30,7 +30,7 @@ struct file global table< entity > playerDecoyList //CUSTOM used to track the decoy the user will be teleported to - +global table< entity, float > playerDecoyActiveFrom //CUSTOM used to set decoy ability discharge #if SERVER @@ -86,6 +86,10 @@ void function OnHoloPilotDestroyed( entity decoy ) if(bossPlayer in playerDecoyList){ if(decoy == playerDecoyList[bossPlayer]) delete playerDecoyList[bossPlayer] + + } + if(bossPlayer in playerDecoyActiveFrom){ + delete playerDecoyActiveFrom[bossPlayer] } EmitSoundOnEntityOnlyToPlayer( bossPlayer, bossPlayer, "holopilot_end_1P" ) } @@ -135,6 +139,9 @@ var function OnWeaponPrimaryAttack_holopilot( entity weapon, WeaponPrimaryAttack weaponOwner.GetOffhandWeapon(1).SetWeaponPrimaryClipCount(0) } PlayerUsesHoloRewind(weaponOwner, decoy) + if(weaponOwner in playerDecoyActiveFrom){ + delete playerDecoyActiveFrom[weaponOwner] + } if(GetCurrentPlaylistName() == "lts"){ if(PlayerHasBattery(weaponOwner)){ Rodeo_TakeBatteryAwayFromPilot(weaponOwner) @@ -185,7 +192,7 @@ entity function CreateHoloPilotDecoys( entity player, int numberOfDecoysToMake = decoy.EnableAttackableByAI( 50, 0, AI_AP_FLAG_NONE ) SetObjectCanBeMeleed( decoy, true ) decoy.SetTimeout( DECOY_DURATION ) - + playerDecoyActiveFrom[player] <- Time() if ( setOriginAndAngles ) { vector angleToAdd = CalculateAngleSegmentForDecoy( i, HOLOPILOT_ANGLE_SEGMENT )