From 33165763dec5098f88a52910e853607ecc464893 Mon Sep 17 00:00:00 2001 From: Kibi Kelburton Date: Sat, 9 May 2026 22:32:23 +0200 Subject: [PATCH] possible mem leak fix --- mod/main.gsc | 21 +++++++++++++++------ mod/streaks.gsc | 19 ++++++++++++++----- mod/vote.gsc | 5 ++++- 3 files changed, 33 insertions(+), 12 deletions(-) diff --git a/mod/main.gsc b/mod/main.gsc index 63c77c6..a8d413f 100755 --- a/mod/main.gsc +++ b/mod/main.gsc @@ -90,7 +90,8 @@ initializeGametype(type) // called in vote.gsc after first map setDvar("speed", 1.5); setDvar("streaks_online", 1); setDvar("jump_height", 70); - setDvar("amount_weapons", 0); // if 0 uses whole list of possible guns, if set > 0 uses amount larger than 0 + setDvar("amount_weapons", 0); // 0 = full 162-weapon progression + setDvar("shuffle_weapons", 0); // weapons play in fixed order setDvar("gun_kills", 1); break; default: // not required @@ -497,11 +498,17 @@ onKilling() { // Cache settings that never change mid-match — eliminates getDvar()/getDvarInt() // native calls inside this loop which runs every 0.3s per player. killsPerWeapon = getDvarInt("gun_kills", 1); - self.scoretext = self createText("hudbig", 1, "CENTER", "CENTER", 0, 0, .7,""); - self.scoretext_amount = self createText("hudbig", 1, "CENTER", "CENTER", -10, 20, .7,""); - self.multitext = []; - for(i=2;i<6;i++) - self.multitext[i] = self createText("hudbig", .6, "CENTER", "CENTER", 50, (i * 20), .7,""); + // Guard: only create HUDs if they don't already exist (prevents leak on reconnect) + if(!isDefined(self.scoretext)) + self.scoretext = self createText("hudbig", 1, "CENTER", "CENTER", 0, 0, .7,""); + if(!isDefined(self.scoretext_amount)) + self.scoretext_amount = self createText("hudbig", 1, "CENTER", "CENTER", -10, 20, .7,""); + if(!isDefined(self.multitext) || !isDefined(self.multitext[2])) + { + self.multitext = []; + for(i=2;i<6;i++) + self.multitext[i] = self createText("hudbig", .6, "CENTER", "CENTER", 50, (i * 20), .7,""); + } while(true) { wait .3; @@ -574,6 +581,8 @@ refreshCounter(refreshCounter) { refreshCounter = 0; self.weaponhud destroy(); + if(isDefined(self.weapontotalhud)) + self.weapontotalhud destroy(); self createWeaponHud(); } } diff --git a/mod/streaks.gsc b/mod/streaks.gsc index 31c7a8e..2275717 100755 --- a/mod/streaks.gsc +++ b/mod/streaks.gsc @@ -321,7 +321,7 @@ Explosive() forward = self getTagOrigin("j_head"); end = self thread vector_scal(anglestoforward(self getPlayerAngles()),1000000); Location = BulletTrace( forward, end, 0, self )[ "position" ]; - playFx(level.explosionfx, Location); + playFx(level._effect["claymore_explode"], Location); RadiusDamage(Location, 50, 30, 20, self ); //self RadiusDamage(Location,250,self.explodmg,self.explomindmg,self,"MOD_Explosive","barrel_mp"); wait self.explotime; @@ -407,6 +407,7 @@ tryUseIMS() block4 Solid(); self thread BombThem(ims); self thread DeleteIt(block, block2, block3, block4); + self thread DeleteItOnNuke(block, block2, block3, block4); self thread DeleteIMS(ims); self thread DeleteIMS2(ims); @@ -432,10 +433,18 @@ DeleteIt(block, block2, block3, block4) { self waittill_any("disconnect", "Ims_Dead"); - block delete(); - block2 delete(); - block3 delete(); - block4 delete(); + if(isDefined(block)) block delete(); + if(isDefined(block2)) block2 delete(); + if(isDefined(block3)) block3 delete(); + if(isDefined(block4)) block4 delete(); +} +DeleteItOnNuke(block, block2, block3, block4) +{ + level waittill("nuke"); + if(isDefined(block)) block delete(); + if(isDefined(block2)) block2 delete(); + if(isDefined(block3)) block3 delete(); + if(isDefined(block4)) block4 delete(); } BombThem(ims) { diff --git a/mod/vote.gsc b/mod/vote.gsc index a4d35c6..49ebc3f 100755 --- a/mod/vote.gsc +++ b/mod/vote.gsc @@ -647,7 +647,10 @@ killGungameHUD() player.versionText destroy(); if(isDefined(player.line)) - player.line destroy(); + player.line destroy(); + + if(isDefined(player.crosshair)) + player.crosshair destroy(); } }