From a6b1a306bd4c498a00ecef9980ff3c6066c74f5b Mon Sep 17 00:00:00 2001 From: Shtoyan Date: Tue, 19 Jul 2022 18:23:23 +0400 Subject: [PATCH 1/6] serious fuckup fix --- sources/GUI/NiceInteraction.uc | 80 ++++++++++++------------- sources/Zeds/Mean/MeanBleedInventory.uc | 2 +- 2 files changed, 41 insertions(+), 41 deletions(-) diff --git a/sources/GUI/NiceInteraction.uc b/sources/GUI/NiceInteraction.uc index fc309bd..f0745a4 100644 --- a/sources/GUI/NiceInteraction.uc +++ b/sources/GUI/NiceInteraction.uc @@ -101,47 +101,47 @@ function PostRender(Canvas C) C.SetPos(x, y); C.DrawTile(poisonIcon, size, size, 0, 0, poisonIcon.MaterialUSize(), poisonIcon.MaterialVSize()); } - - // draw bleed and poison icons for TEAMMATES -// C.GetCAmeraLocation(CamPos, CamRot); -// ViewDir = vector(CamRot); -// kfHud = HUDKillingFloor(ViewportOwner.Actor.myHUD); -// OffsetX = (36.f * kfHud.default.VeterancyMatScaleFactor * 0.6) - (kfHud.default.HealthIconSize + 2.0); -// BarLength = FMin(kfHud.default.BarLength * (float(C.SizeX) / 1024.f), kfHud.default.BarLength); -// BarHeight = FMin(kfHud.default.BarHeight * (float(C.SizeX) / 1024.f), kfHud.default.BarHeight); -// for (i = 0; i < kfHUD.PlayerInfoPawns.Length; i++) -// { -// if (kfHUD.PlayerInfoPawns[i].Pawn != none && kfHUD.PlayerInfoPawns[i].Pawn.Health > 0 && -// (kfHUD.PlayerInfoPawns[i].Pawn.Location - kfHUD.PawnOwner.Location) dot ViewDir > 0.8 && -// kfHUD.PlayerInfoPawns[i].RendTime > ViewportOwner.Actor.Level.TimeSeconds) -// { -// C.StrLen(Left(kfHUD.PlayerInfoPawns[i].Pawn.PlayerReplicationInfo.PlayerName, 16), XL, YL); -// if (kfHUD.PlayerInfoPawns[i].Pawn.ShieldStrength <= 0) -// { -// posY = (kfHUD.PlayerInfoPawns[i].PlayerInfoScreenPosY - YL) - 2.75 * BarHeight - -// kfHUD.default.ArmorIconSize * 0.5; -// } -// else -// { -// posY = (kfHUD.PlayerInfoPawns[i].PlayerInfoScreenPosY - YL) - 3.8 * BarHeight - -// kfHUD.default.ArmorIconSize * 0.5; -// } -// offset = 0; -// if (bIsBleeding(ScrnHumanPawn(kfHUD.PlayerInfoPawns[i].Pawn))) -// { -// C.SetPos(kfHUD.PlayerInfoPawns[i].PlayerInfoScreenPosX - OffsetX - 0.15 * BarLength - -// kfHUD.default.ArmorIconSize - 2.0, posY); -// C.DrawTileScaled(bleedIcon, 0.1875, 0.1875); -// } -// if (bIsPoisoned(ScrnHumanPawn(kfHUD.PlayerInfoPawns[i].Pawn))) -// { -// C.SetPos(kfHUD.PlayerInfoPawns[i].PlayerInfoScreenPosX - OffsetX + 0.15 * BarLength - -// kfHUD.default.ArmorIconSize - 2.0, posY); -// C.DrawTileScaled(poisonIcon, 0.1875, 0.1875); -// } -// } -// } + // draw bleed and poison icons for TEAMMATES + // C.GetCAmeraLocation(CamPos, CamRot); + // ViewDir = vector(CamRot); + // kfHud = HUDKillingFloor(ViewportOwner.Actor.myHUD); + // OffsetX = (36.f * kfHud.default.VeterancyMatScaleFactor * 0.6) - (kfHud.default.HealthIconSize + 2.0); + // BarLength = FMin(kfHud.default.BarLength * (float(C.SizeX) / 1024.f), kfHud.default.BarLength); + // BarHeight = FMin(kfHud.default.BarHeight * (float(C.SizeX) / 1024.f), kfHud.default.BarHeight); + // for (i = 0; i < kfHUD.PlayerInfoPawns.Length; i++) + // { + // if (kfHUD.PlayerInfoPawns[i].Pawn != none && kfHUD.PlayerInfoPawns[i].Pawn.Health > 0 && + // (kfHUD.PlayerInfoPawns[i].Pawn.Location - kfHUD.PawnOwner.Location) dot ViewDir > 0.8 && + // kfHUD.PlayerInfoPawns[i].RendTime > ViewportOwner.Actor.Level.TimeSeconds) + // { + // C.StrLen(Left(kfHUD.PlayerInfoPawns[i].Pawn.PlayerReplicationInfo.PlayerName, 16), XL, YL); + // if (kfHUD.PlayerInfoPawns[i].Pawn.ShieldStrength <= 0) + // { + // posY = (kfHUD.PlayerInfoPawns[i].PlayerInfoScreenPosY - YL) - 2.75 * BarHeight - + // kfHUD.default.ArmorIconSize * 0.5; + // } + // else + // { + // posY = (kfHUD.PlayerInfoPawns[i].PlayerInfoScreenPosY - YL) - 3.8 * BarHeight - + // kfHUD.default.ArmorIconSize * 0.5; + // } + // offset = 0; + + // if (bIsBleeding(ScrnHumanPawn(kfHUD.PlayerInfoPawns[i].Pawn))) + // { + // C.SetPos(kfHUD.PlayerInfoPawns[i].PlayerInfoScreenPosX - OffsetX - 0.15 * BarLength - + // kfHUD.default.ArmorIconSize - 2.0, posY); + // C.DrawTileScaled(bleedIcon, 0.1875, 0.1875); + // } + // if (bIsPoisoned(ScrnHumanPawn(kfHUD.PlayerInfoPawns[i].Pawn))) + // { + // C.SetPos(kfHUD.PlayerInfoPawns[i].PlayerInfoScreenPosX - OffsetX + 0.15 * BarLength - + // kfHUD.default.ArmorIconSize - 2.0, posY); + // C.DrawTileScaled(poisonIcon, 0.1875, 0.1875); + // } + // } + // } if (niceWeap != none && niceWeap.bShowSecondaryCharge && scrnHUDInstance != none) { diff --git a/sources/Zeds/Mean/MeanBleedInventory.uc b/sources/Zeds/Mean/MeanBleedInventory.uc index 796923b..a7a41fd 100644 --- a/sources/Zeds/Mean/MeanBleedInventory.uc +++ b/sources/Zeds/Mean/MeanBleedInventory.uc @@ -6,7 +6,7 @@ var int maxBleedCount; var private float fBleedPeriod; var int bleedLevel; -var MeanZombieCrawler stalker; +var MeanZombieStalker stalker; event PostBeginPlay() -- 2.20.1 From 288aa994161854f095e026af133097d7f764c1b3 Mon Sep 17 00:00:00 2001 From: Shtoyan Date: Tue, 19 Jul 2022 18:49:08 +0400 Subject: [PATCH 2/6] trailing ws / string -> class --- sources/NicePack.uc | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/sources/NicePack.uc b/sources/NicePack.uc index 29fc08a..b475e6e 100644 --- a/sources/NicePack.uc +++ b/sources/NicePack.uc @@ -35,10 +35,10 @@ var config bool bNoLateFFIncrease; // Disables FF increase through // Configuration variables that store whether or not to replace the specimen with it's mean counterpart var config bool bReplaceCrawler, bReplaceStalker, bReplaceClot, bReplaceGorefast, bReplaceBloat, bReplaceSiren, bReplaceHusk, bReplaceScrake, bReplaceFleshpound; var config int bigZedMinHealth; // If zed's base Health >= this value, zed counts as Big -var config int mediumZedMinHealth; +var config int mediumZedMinHealth; var int maxPlayersInGame; - + // 'Adrenaline junkie' zed-time extensions var int junkieDoneGoals; // How many times we collected enough head-shots to trigger zed-time extension var int junkieNextGoal; // How many head-shots we need for next zed-time extension @@ -131,7 +131,7 @@ static final function NicePack Myself(LevelInfo Level){ local Mutator M; local NicePack NicePackMutator; if(default.Mut != none) - return default.Mut; + return default.Mut; // server-side if(Level != none && Level.Game != none){ for(M = Level.Game.BaseMutator;M != none;M = M.NextMutator){ @@ -186,7 +186,7 @@ simulated function PostBeginPlay() default.serverStorage = serverStorage; serverStorage.events.static.AddAdapter(class'NiceRemoteDataAdapter', Level); // Find game type and ScrN mutator - ScrnGT = ScrnGameType(Level.Game); + ScrnGT = ScrnGameType(Level.Game); NiceGT = NiceGameType(Level.Game); if (NiceGT == none) { @@ -195,7 +195,7 @@ simulated function PostBeginPlay() return; } // FIXME poosh forces this variable in his mutator... - NiceGT.LoginMenuClass = "NicePack.NiceInvasionLoginMenu"; + NiceGT.LoginMenuClass = string(class'NiceInvasionLoginMenu'); NiceGT.RegisterMutator(self); ScrnMut = NiceGT.ScrnBalanceMut; if(bReplacePickups) @@ -244,7 +244,7 @@ simulated function PostBeginPlay() if(FFVO != none) FFVO.Mut = self; } - else + else log("Unable to spawn voting handler mutator", class.outer.name); } @@ -438,7 +438,7 @@ simulated function bool CheckReplacement(Actor Other, out byte bSuperRelevant){ currNumPlayers++; if(boss == none) { niceMonster.Health *= hpScale(niceMonster.PlayerCountHealthScale) / niceMonster.NumPlayersHealthModifer(); - niceMonster.HealthMax = niceMonster.Health; + niceMonster.HealthMax = niceMonster.Health; niceMonster.HeadHealth *= hpScale(niceMonster.PlayerNumHeadHealthScale) / niceMonster.NumPlayersHeadHealthModifer(); niceMonster.HeadHealthMax = niceMonster.HeadHealth; if(Level.Game.NumPlayers == 1){ @@ -456,7 +456,7 @@ function int FindPickupReplacementIndex(Pickup item) { local int i; for(i=0; i < pickupReplaceArray.length;i ++){ - if(pickupReplaceArray[i].vanillaClass == item.class || pickupReplaceArray[i].scrnClass == item.class) + if(pickupReplaceArray[i].vanillaClass == item.class || pickupReplaceArray[i].scrnClass == item.class) return i; } return -1; -- 2.20.1 From 605d020251935d05e82718b75daed7f47eb7b2a9 Mon Sep 17 00:00:00 2001 From: Shtoyan Date: Tue, 19 Jul 2022 19:26:56 +0400 Subject: [PATCH 3/6] multitasker fix --- sources/GUI/NiceInteraction.uc | 59 ++++++++++++++++++++++++++++------ sources/NiceHumanPawn.uc | 37 ++++++--------------- sources/NicePack.uc | 21 ++---------- 3 files changed, 60 insertions(+), 57 deletions(-) diff --git a/sources/GUI/NiceInteraction.uc b/sources/GUI/NiceInteraction.uc index f0745a4..f8ec80d 100644 --- a/sources/GUI/NiceInteraction.uc +++ b/sources/GUI/NiceInteraction.uc @@ -13,6 +13,16 @@ var float InventoryBoxWidth; var float InventoryBoxHeight; var float BorderSize; +// weapons list for `MultiTasker` skill +struct WeaponProgressDisplay +{ + var class weapClass; + var float progress; + var bool bShowCounter; + var int counter; +}; +var array niceWeapProgressSet; + event NotifyLevelChange() { Master.RemoveInteraction(self); @@ -53,6 +63,30 @@ final private function bool bIsBleeding(ScrnHumanPawn pwn) return false; } +final private function UpdateNiceWeapProgressSet(NiceHumanPawn pwn) +{ + local Inventory I; + local NiceWeapon niceWeap; + local WeaponProgressDisplay newProgress; + + if (pwn != none && pwn.Inventory != none) + { + for (I = pwn.Inventory; I != none; I = I.Inventory) + { + niceWeap = NiceWeapon(I); + if (niceWeap != none && niceWeap != pwn.weapon && !niceWeap.IsMagazineFull()) + { + newProgress.weapClass = niceWeap.class; + newProgress.progress = niceWeap.holsteredCompletition; + newProgress.bShowCounter = true; + newProgress.counter = niceWeap.GetMagazineAmmo(); + + niceWeapProgressSet[niceWeapProgressSet.Length] = newProgress; + } + } + } +} + function PostRender(Canvas C) { local int i; @@ -171,22 +205,27 @@ function PostRender(Canvas C) } } + nicePawn = NiceHumanPawn(nicePlayer.pawn); + //// Draw weapons progress bars - if (class'NiceVeterancyTypes'.static.hasSkill(nicePlayer, class'NiceSkillEnforcerMultitasker') - && nicePlayer.bFlagDisplayWeaponProgress && niceMutator.niceWeapProgressSet.length > 0) + // at first update weapon info + niceWeapProgressSet.Length = 0; + UpdateNiceWeapProgressSet(nicePawn); + + if (nicePawn != none && class'NiceVeterancyTypes'.static.hasSkill(nicePlayer, class'NiceSkillEnforcerMultitasker') + && nicePlayer.bFlagDisplayWeaponProgress && niceWeapProgressSet.length > 0) { x = C.ClipX - InventoryBoxWidth * C.ClipX - 5; - y = C.ClipY * 0.5 - 0.5 * (InventoryBoxHeight * C.ClipX + 4) * niceMutator.niceWeapProgressSet.Length; - for (i = 0;i < niceMutator.niceWeapProgressSet.Length;i ++) + y = C.ClipY * 0.5 - 0.5 * (InventoryBoxHeight * C.ClipX + 4) * niceWeapProgressSet.Length; + + for (i = 0; i < niceWeapProgressSet.Length; i++) { - DrawWeaponProgress(C, niceMutator.niceWeapProgressSet[i], x, y, - C.ViewPort.Actor.Pawn.PlayerReplicationInfo.Team); + DrawWeaponProgress(C, niceWeapProgressSet[i], x, y, nicePawn.PlayerReplicationInfo.Team); y += (InventoryBoxHeight * C.ClipX + 4); } } - + //// Draw invincibility bar - nicePawn = NiceHumanPawn(nicePlayer.pawn); if(nicePawn != none && nicePawn.invincibilityTimer != 0.0) { C.SetDrawColor(255, 255, 255); @@ -360,9 +399,9 @@ function DrawCalibrationStars(Canvas C){ } } -function DrawWeaponProgress(Canvas C, NicePack.WeaponProgressDisplay weapProgress, int x, int y, TeamInfo team) +function DrawWeaponProgress(Canvas C, WeaponProgressDisplay weapProgress, int x, int y, TeamInfo team) { - local float textWidth, textHeight; + local float textWidth, textHeight; local string textToDraw; local float TempWidth, TempHeight, TempBorder; diff --git a/sources/NiceHumanPawn.uc b/sources/NiceHumanPawn.uc index 6adfcb8..d3a2098 100644 --- a/sources/NiceHumanPawn.uc +++ b/sources/NiceHumanPawn.uc @@ -221,16 +221,20 @@ function ServerCooldownAbility(string abilityID){ if(index >= 0) nicePlayer.abilityManager.SetAbilityState(index, ASTATE_COOLDOWN); } -simulated function Tick(float deltaTime){ + +simulated function Tick(float deltaTime) +{ local int index; local Inventory Item; local NiceWeapon niceWeap; local WeaponTimePair newPair; local array newWTPList; - local NicePack niceMutator; local NicePlayerController nicePlayer; + nicePlayer = NicePlayerController(Controller); - if(Role == Role_AUTHORITY){ + + if (Role == Role_AUTHORITY) + { // Brutal carnage if (brutalCranageTimer > 0) { @@ -329,33 +333,10 @@ simulated function Tick(float deltaTime){ forcedZedTimeCountDown -= deltaTime; else forcedZedTimeCountDown = 0.0; - niceMutator = class'NicePack'.static.Myself(Level); - if(niceMutator != none) - niceMutator.ClearWeapProgress(); + if(!class'NiceVeterancyTypes'.static.hasSkill(NicePlayerController(Controller), class'NiceSkillEnforcerMultitasker')) return; - if ( Role < ROLE_Authority && nicePlayer != none - && nicePlayer.bFlagDisplayWeaponProgress) - { - // Update weapon progress for this skill - if(niceMutator == none) { - Log("Failed to update holstered progress, because no mut! :("); - return; - } - for(Item = Inventory; Item != none; Item = Item.Inventory){ - niceWeap = NiceWeapon(Item); - if(niceWeap != none && niceWeap != weapon && !niceWeap.IsMagazineFull()){ - niceMutator.AddWeapProgress(niceWeap.class, niceWeap.holsteredCompletition, - true, niceWeap.GetMagazineAmmo()); - } - } - return; - } - else if (Role < ROLE_Authority) - { - Log( "Failed to update holstered progress, checked variables:" - @ nicePlayer @ nicePlayer.bFlagDisplayWeaponProgress); - } + // Auto-reload holstered weapons holsteredReloadCountDown -= deltaTime; if(holsteredReloadCountDown <= 0.0){ diff --git a/sources/NicePack.uc b/sources/NicePack.uc index b475e6e..d85154b 100644 --- a/sources/NicePack.uc +++ b/sources/NicePack.uc @@ -95,13 +95,7 @@ struct CounterDisplay{ var class ownerSkill; }; var array niceCounterSet; -struct WeaponProgressDisplay{ - var class weapClass; - var float progress; - var bool bShowCounter; - var int counter; -}; -var array niceWeapProgressSet; + // Replication of config between player and server var int SrvFlags; var array playersList; @@ -502,18 +496,7 @@ simulated function int GetVisibleCountersAmount(){ simulated function int UpdateCounterValue(string cName){ return 0; } -simulated function AddWeapProgress(class weapClass, float progress, - optional bool bShowCounter, optional int counter){ - local WeaponProgressDisplay newProgress; - newProgress.weapClass = weapClass; - newProgress.progress = progress; - newProgress.bShowCounter = bShowCounter; - newProgress.counter = counter; - niceWeapProgressSet[niceWeapProgressSet.Length] = newProgress; -} -simulated function ClearWeapProgress(){ - niceWeapProgressSet.Length = 0; -} + // Returns cash per wave based on current difficulty // Returns cash per wave based on current difficulty function int GetWaveCash(int lastCashWave, int nextWave){ -- 2.20.1 From 46216c87f43fe10a4fd915622c3375fb18fa4aeb Mon Sep 17 00:00:00 2001 From: Shtoyan Date: Tue, 19 Jul 2022 20:02:55 +0400 Subject: [PATCH 4/6] cleanup --- sources/GUI/NiceInteraction.uc | 258 +++++++++++++++++--------------- sources/NicePlayerController.uc | 2 +- 2 files changed, 137 insertions(+), 123 deletions(-) diff --git a/sources/GUI/NiceInteraction.uc b/sources/GUI/NiceInteraction.uc index f8ec80d..1ea9685 100644 --- a/sources/GUI/NiceInteraction.uc +++ b/sources/GUI/NiceInteraction.uc @@ -1,8 +1,10 @@ class NiceInteraction extends Interaction dependson(NicePack) dependson(NiceAbilityManager); + #exec OBJ LOAD FILE=KillingFloorHUD.utx #exec OBJ LOAD FILE=KillingFloor2HUD.utx + var NicePack NicePackMutator; var Material bleedIcon, poisonIcon; var Texture greenBar, redBar; @@ -33,7 +35,7 @@ function RegisterMutator(NicePack activePack) NicePackMutator = activePack; } -final private function bool bIsPoisoned(ScrnHumanPawn pwn) +final private function bool bIsPoisoned(NiceHumanPawn pwn) { local Inventory I; @@ -41,14 +43,14 @@ final private function bool bIsPoisoned(ScrnHumanPawn pwn) { for (I = pwn.Inventory; I != none; I = I.Inventory) { - if (MeanPoisonInventory(I) != none) + if (I.IsA('MeanPoisonInventory')) return true; } } return false; } -final private function bool bIsBleeding(ScrnHumanPawn pwn) +final private function bool bIsBleeding(NiceHumanPawn pwn) { local Inventory I; @@ -56,7 +58,7 @@ final private function bool bIsBleeding(ScrnHumanPawn pwn) { for (I = pwn.Inventory; I != none; I = I.Inventory) { - if (MeanBleedInventory(I) != none) + if (I.IsA('MeanBleedInventory')) return true; } } @@ -69,7 +71,10 @@ final private function UpdateNiceWeapProgressSet(NiceHumanPawn pwn) local NiceWeapon niceWeap; local WeaponProgressDisplay newProgress; - if (pwn != none && pwn.Inventory != none) + // clean this! + niceWeapProgressSet.Length = 0; + + if (pwn.Inventory != none) { for (I = pwn.Inventory; I != none; I = I.Inventory) { @@ -97,46 +102,46 @@ function PostRender(Canvas C) local NicePlayerController nicePlayer; local ScrnHUD scrnHUDInstance; // TODO maybe use scrnhud? - // local HUDKillingFloor kfHud; + // local HUDKillingFloor kfHud; local Texture barTexture; local int x, y, center, barWidth, offset; local int missesWidth, missesHeight, missesSpace; local int missesX, missesY; - // local Vector CamPos, ViewDir; - // local Rotator CamRot; - // local float OffsetX, BarLength, BarHeight, XL, YL, posY; + // local Vector CamPos, ViewDir; + // local Rotator CamRot; + // local float OffsetX, BarLength, BarHeight, XL, YL, posY; + + if (C == none || C.ViewPort == none || C.ViewPort.Actor == none || C.ViewPort.Actor.Pawn == none) + return; - if(C == none) return; - if(C.ViewPort == none) return; - if(C.ViewPort.Actor == none) return; - if(C.ViewPort.Actor.Pawn == none) return; nicePlayer = NicePlayerController(C.ViewPort.Actor.Pawn.Controller); niceWeap = NiceWeapon(C.ViewPort.Actor.Pawn.Weapon); - if(nicePlayer == none) + if (nicePlayer == none) return; - scrnHUDInstance = ScrnHUD(nicePlayer.myHUD); + + nicePawn = NiceHumanPawn(nicePlayer.pawn); //// Draw bleed and poison icons for OWNER offset = 4; - // BLEED!!! - if (bIsBleeding(ScrnHumanPawn(C.ViewPort.Actor.Pawn))) - { - x = C.ClipX * 0.007; - y = C.ClipY * 0.93 - size * offset; - C.SetPos(x, y); - C.DrawTile(bleedIcon, size, size, 0, 0, bleedIcon.MaterialUSize(), bleedIcon.MaterialVSize()); - } - offset++; - // POISON!!! - if (bIsPoisoned(ScrnHumanPawn(C.ViewPort.Actor.Pawn))) - { - x = C.ClipX * 0.007; - y = C.ClipY * 0.93 - size * offset; - C.SetPos(x, y); - C.DrawTile(poisonIcon, size, size, 0, 0, poisonIcon.MaterialUSize(), poisonIcon.MaterialVSize()); - } + // BLEED!!! + if (bIsBleeding(nicePawn)) + { + x = C.ClipX * 0.007; + y = C.ClipY * 0.93 - size * offset; + C.SetPos(x, y); + C.DrawTile(bleedIcon, size, size, 0, 0, bleedIcon.MaterialUSize(), bleedIcon.MaterialVSize()); + } + offset++; + // POISON!!! + if (bIsPoisoned(nicePawn)) + { + x = C.ClipX * 0.007; + y = C.ClipY * 0.93 - size * offset; + C.SetPos(x, y); + C.DrawTile(poisonIcon, size, size, 0, 0, poisonIcon.MaterialUSize(), poisonIcon.MaterialVSize()); + } - // draw bleed and poison icons for TEAMMATES + // TODO draw bleed and poison icons for TEAMMATES // C.GetCAmeraLocation(CamPos, CamRot); // ViewDir = vector(CamRot); // kfHud = HUDKillingFloor(ViewportOwner.Actor.myHUD); @@ -177,39 +182,8 @@ function PostRender(Canvas C) // } // } - if (niceWeap != none && niceWeap.bShowSecondaryCharge && scrnHUDInstance != none) - { - C.ColorModulate.X = 1; - C.ColorModulate.Y = 1; - C.ColorModulate.Z = 1; - C.ColorModulate.W = scrnHUDInstance.HudOpacity / 255; - if(!scrnHUDInstance.bLightHud) - scrnHUDInstance.DrawSpriteWidget(C, scrnHUDInstance.SecondaryClipsBG); - scrnHUDInstance.DrawSpriteWidget(C, scrnHUDInstance.SecondaryClipsIcon); - scrnHUDInstance.SecondaryClipsDigits.value = niceWeap.secondaryCharge; - scrnHUDInstance.DrawNumericWidget(C, scrnHUDInstance.SecondaryClipsDigits, scrnHUDInstance.DigitsSmall); - } - - niceMutator = class'NicePack'.static.Myself(C.ViewPort.Actor.Pawn.Level); - if (niceMutator == none) - return; - //// Draw counters - if(nicePlayer != none && nicePlayer.bFlagDisplayCounters) - { - x = C.ClipX * 0.5 - (64 + 2) * niceMutator.GetVisibleCountersAmount(); - y = C.ClipY * 0.01; - for(i = 0;i < niceMutator.niceCounterSet.Length;i ++) - if(niceMutator.niceCounterSet[i].value != 0 || niceMutator.niceCounterSet[i].bShowZeroValue){ - DrawCounter(C, niceMutator.niceCounterSet[i], x, y, C.ViewPort.Actor.Pawn.PlayerReplicationInfo.Team); - x += 128 + 4; - } - } - - nicePawn = NiceHumanPawn(nicePlayer.pawn); - //// Draw weapons progress bars // at first update weapon info - niceWeapProgressSet.Length = 0; UpdateNiceWeapProgressSet(nicePawn); if (nicePawn != none && class'NiceVeterancyTypes'.static.hasSkill(nicePlayer, class'NiceSkillEnforcerMultitasker') @@ -225,52 +199,84 @@ function PostRender(Canvas C) } } - //// Draw invincibility bar - if(nicePawn != none && nicePawn.invincibilityTimer != 0.0) + scrnHUDInstance = ScrnHUD(nicePlayer.myHUD); + + if (niceWeap != none && niceWeap.bShowSecondaryCharge && scrnHUDInstance != none) { - C.SetDrawColor(255, 255, 255); - if(nicePawn.invincibilityTimer > 0) - barTexture = greenBar; - else - barTexture = redBar; - center = C.ClipX * 0.5; - y = C.ClipY * 0.75; - barWidth = C.ClipX * 0.2; - niceVet = class'NiceVeterancyTypes'.static. - GetVeterancy(nicePawn.PlayerReplicationInfo); - if(niceVet != none){ - if(nicePawn.invincibilityTimer > 0){ - barWidth *= nicePawn.invincibilityTimer - / niceVet.static.GetInvincibilityDuration(nicePawn.KFPRI); - } - else{ - barWidth *= nicePawn.invincibilityTimer / - class'NiceSkillZerkGunzerker'.default.cooldown; - } - } - else - barWidth = 0; - x = center - (barWidth / 2); - C.SetPos(x, y); - C.DrawTile(barTexture, barWidth, 32, 0, 0, barTexture.MaterialUSize(), barTexture.MaterialVSize()); - if(nicePawn.safeMeleeMisses <= 0) - return; - missesSpace = 10;//64x64 => 16x16 - missesHeight = 16; - missesWidth = nicePawn.safeMeleeMisses * 16 - + (nicePawn.safeMeleeMisses - 1) * missesSpace; - missesX = center - (missesWidth / 2); - missesY = y + (32 - missesHeight) * 0.5; - for(i = 0;i < nicePawn.safeMeleeMisses;i ++){ - C.SetPos(missesX + i * (16 + missesSpace), missesY); - C.DrawTile(shield, 16, 16, 0, 0, shield.MaterialUSize(), shield.MaterialVSize()); - } + C.ColorModulate.X = 1; + C.ColorModulate.Y = 1; + C.ColorModulate.Z = 1; + C.ColorModulate.W = scrnHUDInstance.HudOpacity / 255; + if (!scrnHUDInstance.bLightHud) + scrnHUDInstance.DrawSpriteWidget(C, scrnHUDInstance.SecondaryClipsBG); + scrnHUDInstance.DrawSpriteWidget(C, scrnHUDInstance.SecondaryClipsIcon); + scrnHUDInstance.SecondaryClipsDigits.value = niceWeap.secondaryCharge; + scrnHUDInstance.DrawNumericWidget(C, scrnHUDInstance.SecondaryClipsDigits, scrnHUDInstance.DigitsSmall); } - // Draw cooldowns - if(nicePlayer.abilityManager == none) + + //// Draw invincibility bar + if (nicePawn != none && nicePawn.invincibilityTimer != 0.0) + { + C.SetDrawColor(255, 255, 255); + if (nicePawn.invincibilityTimer > 0) + barTexture = greenBar; + else + barTexture = redBar; + center = C.ClipX * 0.5; + y = C.ClipY * 0.75; + barWidth = C.ClipX * 0.2; + niceVet = class'NiceVeterancyTypes'.static. + GetVeterancy(nicePawn.PlayerReplicationInfo); + if (niceVet != none) + { + if (nicePawn.invincibilityTimer > 0) + barWidth *= nicePawn.invincibilityTimer / niceVet.static.GetInvincibilityDuration(nicePawn.KFPRI); + else + barWidth *= nicePawn.invincibilityTimer / class'NiceSkillZerkGunzerker'.default.cooldown; + } + else + barWidth = 0; + + x = center - (barWidth / 2); + C.SetPos(x, y); + C.DrawTile(barTexture, barWidth, 32, 0, 0, barTexture.MaterialUSize(), barTexture.MaterialVSize()); + if (nicePawn.safeMeleeMisses <= 0) + return; + missesSpace = 10; // 64x64 => 16x16 + missesHeight = 16; + missesWidth = nicePawn.safeMeleeMisses * 16 + (nicePawn.safeMeleeMisses - 1) * missesSpace; + missesX = center - (missesWidth / 2); + missesY = y + (32 - missesHeight) * 0.5; + + for (i = 0; i < nicePawn.safeMeleeMisses; i++) + { + C.SetPos(missesX + i * (16 + missesSpace), missesY); + C.DrawTile(shield, 16, 16, 0, 0, shield.MaterialUSize(), shield.MaterialVSize()); + } + } + + //// Draw cooldowns + if (nicePlayer.abilityManager == none) return; - for(i = 0;i < nicePlayer.abilityManager.currentAbilitiesAmount;i ++) + for (i = 0; i < nicePlayer.abilityManager.currentAbilitiesAmount; i++) DrawAbilityCooldown(C, i); + + //// Draw counters + niceMutator = class'NicePack'.static.Myself(nicePawn.Level); + + if (niceMutator != none && nicePlayer != none && nicePlayer.bFlagDisplayCounters) + { + x = C.ClipX * 0.5 - (64 + 2) * niceMutator.GetVisibleCountersAmount(); + y = C.ClipY * 0.01; + for (i = 0; i < niceMutator.niceCounterSet.Length; i++) + { + if (niceMutator.niceCounterSet[i].value != 0 || niceMutator.niceCounterSet[i].bShowZeroValue) + { + DrawCounter(C, niceMutator.niceCounterSet[i], x, y, C.ViewPort.Actor.Pawn.PlayerReplicationInfo.Team); + x += 128 + 4; + } + } + } } function DrawCounter(Canvas C, NicePack.CounterDisplay counter, int x, int y, TeamInfo team){ @@ -443,51 +449,59 @@ function DrawWeaponProgress(Canvas C, WeaponProgressDisplay weapProgress, int x, } } -function bool KeyEvent(EInputKey Key, EInputAction Action, float Delta){ +function bool KeyEvent(EInputKey Key, EInputAction Action, float Delta) +{ local bool bNeedsReload; local string Alias, LeftPart, RigthPart; local NiceWeapon niceWeap; local NicePlayerController nicePlayer; + // Find controller and current weapon nicePlayer = NicePlayerController(ViewportOwner.Actor); - if(nicePlayer == none) + if (nicePlayer == none) return false; - if(nicePlayer.Pawn != none) + if (nicePlayer.Pawn != none) niceWeap = NiceWeapon(nicePlayer.Pawn.Weapon); // If this is a button press - detect alias - if(Action == IST_Press){ + if (Action == IST_Press) + { // Check for reload command Alias = nicePlayer.ConsoleCommand("KEYBINDING" @ nicePlayer.ConsoleCommand("KEYNAME" @ Key)); - if(nicePlayer.bAdvReloadCheck) + if (nicePlayer.bAdvReloadCheck) bNeedsReload = InStr(Caps(Alias), "RELOADMENOW") > -1 || InStr(Caps(Alias), "RELOADWEAPON") > -1; - if(Divide(Alias, " ", LeftPart, RigthPart)) + if (Divide(Alias, " ", LeftPart, RigthPart)) Alias = LeftPart; - if(Key == IK_MouseWheelUp || Key == IK_MouseWheelDown){ + if (Key == IK_MouseWheelUp || Key == IK_MouseWheelDown) + { nicePlayer.UpdateSelectors(); - if(nicePlayer.hasZeroSelector && nicePlayer.bUsesMouseWheel && nicePlayer.bNiceWeaponManagement){ + if (nicePlayer.hasZeroSelector && nicePlayer.bUsesMouseWheel && nicePlayer.bNiceWeaponManagement) + { nicePlayer.ScrollSelector(0, nicePlayer.bMouseWheelLoops, Key == IK_MouseWheelUp); return true; } } } - // Open trader on movement - if(Alias ~= "MoveForward" || Alias ~= "MoveBackward" || Alias ~= "TurnLeft" || Alias ~= "TurnRight" - || Alias ~= "StrafeLeft" || Alias ~= "StrafeRight" || Alias ~= "Axis"){ + // Open trader on movement + if (Alias ~= "MoveForward" || Alias ~= "MoveBackward" || Alias ~= "TurnLeft" || Alias ~= "TurnRight" + || Alias ~= "StrafeLeft" || Alias ~= "StrafeRight" || Alias ~= "Axis") + { // Open trader if it's a pre-game - if(NicePackMutator.bIsPreGame && NicePackMutator.bInitialTrader && (NicePackMutator.bStillDuringInitTrader || !nicePlayer.bOpenedInitTrader) && nicePlayer.Pawn != none){ + if (NicePackMutator.bIsPreGame && NicePackMutator.bInitialTrader && (NicePackMutator.bStillDuringInitTrader || !nicePlayer.bOpenedInitTrader) && nicePlayer.Pawn != none) + { nicePlayer.ShowBuyMenu("Initial trader", KFHumanPawn(nicePlayer.Pawn).MaxCarryWeight); nicePlayer.bOpenedInitTrader = true; return true; } - //nicePlayer.ClientOpenMenu("NicePack.NiceGUIBuyMenu",,"Test stuff",string(15)); + // nicePlayer.ClientOpenMenu("NicePack.NiceGUIBuyMenu",,"Test stuff",string(15)); } // Reload if we've detected a reload alias in this button's command - if(niceWeap != none && !nicePlayer.bUseServerReload && - (bNeedsReload || Alias ~= "ReloadMeNow" || Alias ~= "ReloadWeapon")) + if (niceWeap != none && !nicePlayer.bUseServerReload && + (bNeedsReload || Alias ~= "ReloadMeNow" || Alias ~= "ReloadWeapon")) niceWeap.ClientReloadMeNow(); return false; } + defaultproperties { bleedIcon=Texture'NicePackT.MeanZeds.bleedIcon' @@ -500,4 +514,4 @@ defaultproperties InventoryBoxHeight=0.075000 BorderSize=0.005000 bVisible=True -} +} \ No newline at end of file diff --git a/sources/NicePlayerController.uc b/sources/NicePlayerController.uc index 00e8fae..4c56f7b 100644 --- a/sources/NicePlayerController.uc +++ b/sources/NicePlayerController.uc @@ -1264,7 +1264,7 @@ state Spectating{ A = Trace(HitLocation, HitNormal, TraceEnd, TraceStart, true); if(Pawn(A) != none) ServerSetViewTarget(A); - } + } } simulated function ClientSpawnGhostProjectile(Vector Start, int pitch, int yaw, int roll, NiceFire.ShotType shotParams, NiceFire.FireModeContext fireContext, bool bForceComplexTraj){ local Rotator projectileDir; -- 2.20.1 From a8793a950cb4aac1ff14f8e9f3d03ec4cd77dc20 Mon Sep 17 00:00:00 2001 From: Shtoyan Date: Tue, 19 Jul 2022 20:06:01 +0400 Subject: [PATCH 5/6] use doors (triggers/movers) during initial wave --- sources/NicePlayerController.uc | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/sources/NicePlayerController.uc b/sources/NicePlayerController.uc index 4c56f7b..8909aec 100644 --- a/sources/NicePlayerController.uc +++ b/sources/NicePlayerController.uc @@ -601,23 +601,32 @@ simulated function ClientLog(String logStr){ if(bFlagDebug) Log("NiceDebug:"$logStr); } -function ServerUse(){ + +function ServerUse() +{ local NiceHumanPawn myPawn; + myPawn = NiceHumanPawn(Pawn); - if(myPawn == none){ + if (myPawn == none) + { super.ServerUse(); return; } + // Handle initial shop / medic drugs - if(NicePackMutator != none && NicePackMutator.bIsPreGame && NicePackMutator.bInitialTrader){ - if(VSize(Pawn.Velocity) <= 0.0){ + if (NicePackMutator != none && NicePackMutator.bIsPreGame && NicePackMutator.bInitialTrader) + { + if (VSize(Pawn.Velocity) <= 0.0) + { ShowBuyMenu("Initial trader", myPawn.MaxCarryWeight); bOpenedInitTrader = true; } } - else - super.ServerUse(); + + // call this anyways, so we can use doors! + super.ServerUse(); } + simulated function ClientUpdatePawnMaxHealth(NiceHumanPawn updatePawn, int newHealthMax){ updatePawn.HealthMax = newHealthMax; } -- 2.20.1 From 1944c5bd943221e14b011a30e0c77a978f8784ab Mon Sep 17 00:00:00 2001 From: Shtoyan Date: Tue, 19 Jul 2022 20:11:43 +0400 Subject: [PATCH 6/6] better input handling during initial trader --- sources/GUI/NiceInteraction.uc | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/sources/GUI/NiceInteraction.uc b/sources/GUI/NiceInteraction.uc index 1ea9685..93b4360 100644 --- a/sources/GUI/NiceInteraction.uc +++ b/sources/GUI/NiceInteraction.uc @@ -482,23 +482,24 @@ function bool KeyEvent(EInputKey Key, EInputAction Action, float Delta) } } - // Open trader on movement - if (Alias ~= "MoveForward" || Alias ~= "MoveBackward" || Alias ~= "TurnLeft" || Alias ~= "TurnRight" - || Alias ~= "StrafeLeft" || Alias ~= "StrafeRight" || Alias ~= "Axis") + // Open trader on movement if it's a pre-game + if (NicePackMutator.bIsPreGame && NicePackMutator.bInitialTrader && (NicePackMutator.bStillDuringInitTrader || !nicePlayer.bOpenedInitTrader) && nicePlayer.Pawn != none) { - // Open trader if it's a pre-game - if (NicePackMutator.bIsPreGame && NicePackMutator.bInitialTrader && (NicePackMutator.bStillDuringInitTrader || !nicePlayer.bOpenedInitTrader) && nicePlayer.Pawn != none) - { - nicePlayer.ShowBuyMenu("Initial trader", KFHumanPawn(nicePlayer.Pawn).MaxCarryWeight); - nicePlayer.bOpenedInitTrader = true; - return true; - } - // nicePlayer.ClientOpenMenu("NicePack.NiceGUIBuyMenu",,"Test stuff",string(15)); + if (Alias ~= "MoveForward" || Alias ~= "MoveBackward" || Alias ~= "TurnLeft" || Alias ~= "TurnRight" + || Alias ~= "StrafeLeft" || Alias ~= "StrafeRight" || Alias ~= "Axis") + { + // nicePlayer.ClientOpenMenu("NicePack.NiceGUIBuyMenu",,"Test stuff",string(15)); + nicePlayer.ShowBuyMenu("Initial trader", KFHumanPawn(nicePlayer.Pawn).MaxCarryWeight); + nicePlayer.bOpenedInitTrader = true; + return true; + } } + // Reload if we've detected a reload alias in this button's command if (niceWeap != none && !nicePlayer.bUseServerReload && (bNeedsReload || Alias ~= "ReloadMeNow" || Alias ~= "ReloadWeapon")) niceWeap.ClientReloadMeNow(); + return false; } -- 2.20.1