HomeUser Control Panel (unavailable in archive)ForumsTutorialsArt GalleryResourcesMaps

Critical Problem

07-08-2005, 06:29 PM#1
Wakoo
Hi, i released a new version of my map with the following of your tutorial about the memory leak, because after some minute of playing some people get splitted(when somepeople are disconnected at the same time because of the lag), when i spy the process of War3, i seen that he get an average of 12ko/s o_O .

So i released a version with the destruction of inused group, unit, etc... But now the problem is that at spawn of allied unit, the game split sometime . Visibly the 3 trigger of spawn is now too heavy and with the trigger of firing system (launched every 0.06s, 0.14s, 0.20s, 0.26s).

The map is named "Desert Battle" it's an AOS with support shield/generator for firing and hit point, i attached a protected version but it's not a read only protection, if someone get an idea or wanna see how it's made, i can send him the unprotected version.

Thanks


EDIT: If you wanna see what i'm saying:
Code:
Spawn2Helico
    Evénements
[The event is define by another trigger in initialisation]
    Conditions
        MiscConfiguration[1] Différent de FALSE
    Actions
        If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            If - Conditions
                CreepProgresIfon Inférieur à 3
            Then - Actions
                -------- Up --------
                If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    If - Conditions
                        (Vie of Workshop 0043 <gen>) Supérieur à 0.00
                    Then - Actions
                        Set TmpPoint = (Center of SpawnWestUp <gen>)
                        If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                            If - Conditions
                                (Current research level of CorroIfve  for Victime neutre) Egal à 1
                            Then - Actions
                                Unité - Create (CreepProgresIfon x 2) Helicopter w/ corroIfve for Victime neutre at TmpPoint facing Orientation bâtiment par défaut degrees
                            Else - Actions
                                Unité - Create (CreepProgresIfon x 2) Helicopter for Victime neutre at TmpPoint facing Orientation bâtiment par défaut degrees
                        Custom script:   call RemoveLocation(udg_TmpPoint)
                        Set TmpPoint = (Center of SpawnEastUp <gen>)
                        Groupe unité - Pick every unit in (Last created unit group) and do (Actions)
                            Boucle - Actions
                                Unité - Order (Picked unit) to Attaquer-Avancer vers TmpPoint
                        Custom script:   call RemoveLocation(udg_TmpPoint)
                        Set TmpGroup = (Last created unit group)
                        Custom script:   call DestroyGroup(udg_TmpGroup)
                    Else - Actions
                If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    If - Conditions
                        (Vie of Workshop 0107 <gen>) Supérieur à 0.00
                    Then - Actions
                        Set TmpPoint = (Center of SpawnEastUp <gen>)
                        If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                            If - Conditions
                                (Current research level of CorroIfve  for Extra neutre) Egal à 1
                            Then - Actions
                                Unité - Create (CreepProgresIfon x 2) Helicopter w/ corroIfve for Extra neutre at TmpPoint facing Orientation bâtiment par défaut degrees
                            Else - Actions
                                Unité - Create (CreepProgresIfon x 2) Helicopter for Extra neutre at TmpPoint facing Orientation bâtiment par défaut degrees
                        Custom script:   call RemoveLocation(udg_TmpPoint)
                        Set TmpPoint = (Center of SpawnWestUp <gen>)
                        Groupe unité - Pick every unit in (Last created unit group) and do (Actions)
                            Boucle - Actions
                                Unité - Order (Picked unit) to Attaquer-Avancer vers TmpPoint
                        Custom script:   call RemoveLocation(udg_TmpPoint)
                        Set TmpGroup = (Last created unit group)
                        Custom script:   call DestroyGroup(udg_TmpGroup)
                    Else - Actions
                -------- Middle --------
                If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    If - Conditions
                        (Vie of Workshop 0010 <gen>) Supérieur à 0.00
                    Then - Actions
                        Set TmpPoint = (Center of SpawnWestMiddle <gen>)
                        If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                            If - Conditions
                                (Current research level of CorroIfve  for Victime neutre) Egal à 1
                            Then - Actions
                                Unité - Create (CreepProgresIfon x 2) Helicopter w/ corroIfve for Victime neutre at TmpPoint facing Orientation bâtiment par défaut degrees
                            Else - Actions
                                Unité - Create (CreepProgresIfon x 2) Helicopter for Victime neutre at TmpPoint facing Orientation bâtiment par défaut degrees
                        Custom script:   call RemoveLocation(udg_TmpPoint)
                        Set TmpPoint = (Center of SpawnEastMiddle <gen>)
                        Groupe unité - Pick every unit in (Last created unit group) and do (Actions)
                            Boucle - Actions
                                Unité - Order (Picked unit) to Attaquer-Avancer vers TmpPoint
                        Custom script:   call RemoveLocation(udg_TmpPoint)
                        Set TmpGroup = (Last created unit group)
                        Custom script:   call DestroyGroup(udg_TmpGroup)
                    Else - Actions
                If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    If - Conditions
                        (Vie of Workshop 0075 <gen>) Supérieur à 0.00
                    Then - Actions
                        Set TmpPoint = (Center of SpawnEastMiddle <gen>)
                        If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                            If - Conditions
                                (Current research level of CorroIfve  for Extra neutre) Egal à 1
                            Then - Actions
                                Unité - Create (CreepProgresIfon x 2) Helicopter w/ corroIfve for Extra neutre at TmpPoint facing Orientation bâtiment par défaut degrees
                            Else - Actions
                                Unité - Create (CreepProgresIfon x 2) Helicopter for Extra neutre at TmpPoint facing Orientation bâtiment par défaut degrees
                        Custom script:   call RemoveLocation(udg_TmpPoint)
                        Set TmpPoint = (Center of SpawnWestMiddle <gen>)
                        Groupe unité - Pick every unit in (Last created unit group) and do (Actions)
                            Boucle - Actions
                                Unité - Order (Picked unit) to Attaquer-Avancer vers TmpPoint
                        Custom script:   call RemoveLocation(udg_TmpPoint)
                        Set TmpGroup = (Last created unit group)
                        Custom script:   call DestroyGroup(udg_TmpGroup)
                    Else - Actions
                -------- Down --------
                If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    If - Conditions
                        (Vie of Workshop 0042 <gen>) Supérieur à 0.00
                    Then - Actions
                        Set TmpPoint = (Center of SpawnWestDown <gen>)
                        If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                            If - Conditions
                                (Current research level of CorroIfve  for Victime neutre) Egal à 1
                            Then - Actions
                                Unité - Create (CreepProgresIfon x 2) Helicopter w/ corroIfve for Victime neutre at TmpPoint facing Orientation bâtiment par défaut degrees
                            Else - Actions
                                Unité - Create (CreepProgresIfon x 2) Helicopter for Victime neutre at TmpPoint facing Orientation bâtiment par défaut degrees
                        Custom script:   call RemoveLocation(udg_TmpPoint)
                        Set TmpPoint = (Center of SpawnEastDown <gen>)
                        Groupe unité - Pick every unit in (Last created unit group) and do (Actions)
                            Boucle - Actions
                                Unité - Order (Picked unit) to Attaquer-Avancer vers TmpPoint
                        Custom script:   call RemoveLocation(udg_TmpPoint)
                        Set TmpGroup = (Last created unit group)
                        Custom script:   call DestroyGroup(udg_TmpGroup)
                    Else - Actions
                If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    If - Conditions
                        (Vie of Workshop 0108 <gen>) Supérieur à 0.00
                    Then - Actions
                        Set TmpPoint = (Center of SpawnEastDown <gen>)
                        If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                            If - Conditions
                                (Current research level of CorroIfve  for Extra neutre) Egal à 1
                            Then - Actions
                                Unité - Create (CreepProgresIfon x 2) Helicopter w/ corroIfve for Extra neutre at TmpPoint facing Orientation bâtiment par défaut degrees
                            Else - Actions
                                Unité - Create (CreepProgresIfon x 2) Helicopter for Extra neutre at TmpPoint facing Orientation bâtiment par défaut degrees
                        Custom script:   call RemoveLocation(udg_TmpPoint)
                        Set TmpPoint = (Center of SpawnWestDown <gen>)
                        Groupe unité - Pick every unit in (Last created unit group) and do (Actions)
                            Boucle - Actions
                                Unité - Order (Picked unit) to Attaquer-Avancer vers TmpPoint
                        Custom script:   call RemoveLocation(udg_TmpPoint)
                        Set TmpGroup = (Last created unit group)
                        Custom script:   call DestroyGroup(udg_TmpGroup)
                    Else - Actions
            Else - Actions
                -------- Up --------
                If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    If - Conditions
                        (Vie of Workshop 0043 <gen>) Supérieur à 0.00
                    Then - Actions
                        Set TmpPoint = (Center of SpawnWestUp <gen>)
                        If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                            If - Conditions
                                (Current research level of CorroIfve  for Victime neutre) Egal à 1
                            Then - Actions
                                Unité - Create ((CreepProgresIfon - 2) x 2) Fighter w/ corroIfve for Victime neutre at TmpPoint facing Orientation bâtiment par défaut degrees
                            Else - Actions
                                Unité - Create ((CreepProgresIfon - 2) x 2) Fighter for Victime neutre at TmpPoint facing Orientation bâtiment par défaut degrees
                        Custom script:   call RemoveLocation(udg_TmpPoint)
                        Set TmpPoint = (Center of SpawnEastUp <gen>)
                        Groupe unité - Pick every unit in (Last created unit group) and do (Actions)
                            Boucle - Actions
                                Unité - Order (Picked unit) to Attaquer-Avancer vers TmpPoint
                        Custom script:   call RemoveLocation(udg_TmpPoint)
                        Set TmpGroup = (Last created unit group)
                        Custom script:   call DestroyGroup(udg_TmpGroup)
                    Else - Actions
                If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    If - Conditions
                        (Vie of Workshop 0107 <gen>) Supérieur à 0.00
                    Then - Actions
                        Set TmpPoint = (Center of SpawnEastUp <gen>)
                        If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                            If - Conditions
                                (Current research level of CorroIfve  for Extra neutre) Egal à 1
                            Then - Actions
                                Unité - Create ((CreepProgresIfon - 2) x 2) Fighter w/ corroIfve for Extra neutre at TmpPoint facing Orientation bâtiment par défaut degrees
                            Else - Actions
                                Unité - Create ((CreepProgresIfon - 2) x 2) Fighter for Extra neutre at TmpPoint facing Orientation bâtiment par défaut degrees
                        Custom script:   call RemoveLocation(udg_TmpPoint)
                        Set TmpPoint = (Center of SpawnWestUp <gen>)
                        Groupe unité - Pick every unit in (Last created unit group) and do (Actions)
                            Boucle - Actions
                                Unité - Order (Picked unit) to Attaquer-Avancer vers TmpPoint
                        Custom script:   call RemoveLocation(udg_TmpPoint)
                        Set TmpGroup = (Last created unit group)
                        Custom script:   call DestroyGroup(udg_TmpGroup)
                    Else - Actions
                -------- Middle --------
                If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    If - Conditions
                        (Vie of Workshop 0010 <gen>) Supérieur à 0.00
                    Then - Actions
                        Set TmpPoint = (Center of SpawnWestMiddle <gen>)
                        If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                            If - Conditions
                                (Current research level of CorroIfve  for Victime neutre) Egal à 1
                            Then - Actions
                                Unité - Create ((CreepProgresIfon - 2) x 2) Fighter w/ corroIfve for Victime neutre at TmpPoint facing Orientation bâtiment par défaut degrees
                            Else - Actions
                                Unité - Create ((CreepProgresIfon - 2) x 2) Fighter for Victime neutre at TmpPoint facing Orientation bâtiment par défaut degrees
                        Custom script:   call RemoveLocation(udg_TmpPoint)
                        Set TmpPoint = (Center of SpawnEastMiddle <gen>)
                        Groupe unité - Pick every unit in (Last created unit group) and do (Actions)
                            Boucle - Actions
                                Unité - Order (Picked unit) to Attaquer-Avancer vers TmpPoint
                        Custom script:   call RemoveLocation(udg_TmpPoint)
                        Set TmpGroup = (Last created unit group)
                        Custom script:   call DestroyGroup(udg_TmpGroup)
                    Else - Actions
                If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    If - Conditions
                        (Vie of Workshop 0075 <gen>) Supérieur à 0.00
                    Then - Actions
                        Set TmpPoint = (Center of SpawnEastMiddle <gen>)
                        If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                            If - Conditions
                                (Current research level of CorroIfve  for Extra neutre) Egal à 1
                            Then - Actions
                                Unité - Create ((CreepProgresIfon - 2) x 2) Fighter w/ corroIfve for Extra neutre at TmpPoint facing Orientation bâtiment par défaut degrees
                            Else - Actions
                                Unité - Create ((CreepProgresIfon - 2) x 2) Fighter for Extra neutre at TmpPoint facing Orientation bâtiment par défaut degrees
                        Custom script:   call RemoveLocation(udg_TmpPoint)
                        Set TmpPoint = (Center of SpawnWestMiddle <gen>)
                        Groupe unité - Pick every unit in (Last created unit group) and do (Actions)
                            Boucle - Actions
                                Unité - Order (Picked unit) to Attaquer-Avancer vers TmpPoint
                        Custom script:   call RemoveLocation(udg_TmpPoint)
                        Set TmpGroup = (Last created unit group)
                        Custom script:   call DestroyGroup(udg_TmpGroup)
                    Else - Actions
                -------- Down --------
                If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    If - Conditions
                        (Vie of Workshop 0042 <gen>) Supérieur à 0.00
                    Then - Actions
                        Set TmpPoint = (Center of SpawnWestDown <gen>)
                        If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                            If - Conditions
                                (Current research level of CorroIfve  for Victime neutre) Egal à 1
                            Then - Actions
                                Unité - Create ((CreepProgresIfon - 2) x 2) Fighter w/ corroIfve for Victime neutre at TmpPoint facing Orientation bâtiment par défaut degrees
                            Else - Actions
                                Unité - Create ((CreepProgresIfon - 2) x 2) Fighter for Victime neutre at TmpPoint facing Orientation bâtiment par défaut degrees
                        Custom script:   call RemoveLocation(udg_TmpPoint)
                        Set TmpPoint = (Center of SpawnEastDown <gen>)
                        Groupe unité - Pick every unit in (Last created unit group) and do (Actions)
                            Boucle - Actions
                                Unité - Order (Picked unit) to Attaquer-Avancer vers TmpPoint
                        Custom script:   call RemoveLocation(udg_TmpPoint)
                        Set TmpGroup = (Last created unit group)
                        Custom script:   call DestroyGroup(udg_TmpGroup)
                    Else - Actions
                If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    If - Conditions
                        (Vie of Workshop 0108 <gen>) Supérieur à 0.00
                    Then - Actions
                        Set TmpPoint = (Center of SpawnEastDown <gen>)
                        If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                            If - Conditions
                                (Current research level of CorroIfve  for Extra neutre) Egal à 1
                            Then - Actions
                                Unité - Create ((CreepProgresIfon - 2) x 2) Fighter w/ corroIfve for Extra neutre at TmpPoint facing Orientation bâtiment par défaut degrees
                            Else - Actions
                                Unité - Create ((CreepProgresIfon - 2) x 2) Fighter for Extra neutre at TmpPoint facing Orientation bâtiment par défaut degrees
                        Custom script:   call RemoveLocation(udg_TmpPoint)
                        Set TmpPoint = (Center of SpawnWestDown <gen>)
                        Groupe unité - Pick every unit in (Last created unit group) and do (Actions)
                            Boucle - Actions
                                Unité - Order (Picked unit) to Attaquer-Avancer vers TmpPoint
                        Custom script:   call RemoveLocation(udg_TmpPoint)
                        Set TmpGroup = (Last created unit group)
                        Custom script:   call DestroyGroup(udg_TmpGroup)
                    Else - Actions
07-08-2005, 08:32 PM#2
MercyfulJester
Wrong forum.
07-08-2005, 10:28 PM#3
Anitarf
Indeed. Thread moved.

I can't really say what could be the problem. Unless it's because of GetLocalPlayer(), reasons for server splits are hard to track.
07-09-2005, 06:59 AM#4
Wakoo
ok Thx for the anwser and sorry for the wrong forum.

I will remake the trigger with some while, if it can help you to see the probleme.
07-09-2005, 10:27 AM#5
Wakoo
Ok that's the new version:
Code:
Spawn1EnginSiege
    Events
    Conditions
        MiscConfiguration[1] Not equal to False
    Actions
        If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            If - Conditions
                CreepProgression Less than 3
            Then - Actions
                For each (Integer A) from 1 to 3, do (Actions)
                    Loop - Actions
                        If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                            If - Conditions
                                (Life of Factory[(Integer A)]) Greater than 0.00
                            Then - Actions
                                Set TmpPoint = (Center of FactoryRect[(Integer A)])
                                Unit - Create (CreepProgression x 1) Armored tank for Neutral Victim at TmpPoint facing Default building facing (270.0) degrees
                                Custom script: call RemoveLocation(udg_TmpPoint)
                                Set TmpPoint = (Center of FactoryRect[((Integer A) + 3)])
                                Unit Group - Pick every unit in (Last created unit group) and do (Actions)
                                    Loop - Actions
                                        Unit - Order (Picked unit) to Attack-Move To TmpPoint
                                Custom script: call RemoveLocation(udg_TmpPoint)
                                Set TmpGroup = (Last created unit group)
                                Custom script: call DestroyGroup(udg_TmpGroup)
                            Else - Actions
                For each (Integer A) from 4 to 6, do (Actions)
                    Loop - Actions
                        If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                            If - Conditions
                                (Life of Factory[(Integer A)]) Greater than 0.00
                            Then - Actions
                                Set TmpPoint = (Center of FactoryRect[(Integer A)])
                                Unit - Create (CreepProgression x 1) Armored tank for Neutral Extra at TmpPoint facing Default building facing (270.0) degrees
                                Custom script: call RemoveLocation(udg_TmpPoint)
                                Set TmpPoint = (Center of FactoryRect[((Integer A) - 3)])
                                Unit Group - Pick every unit in (Last created unit group) and do (Actions)
                                    Loop - Actions
                                        Unit - Order (Picked unit) to Attack-Move To TmpPoint
                                Custom script: call RemoveLocation(udg_TmpPoint)
                                Set TmpGroup = (Last created unit group)
                                Custom script: call DestroyGroup(udg_TmpGroup)
                            Else - Actions
            Else - Actions
                For each (Integer A) from 1 to 3, do (Actions)
                    Loop - Actions
                        If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                            If - Conditions
                                (Life of Factory[(Integer A)]) Greater than 0.00
                            Then - Actions
                                Set TmpPoint = (Center of FactoryRect[(Integer A)])
                                Unit - Create ((CreepProgression - 2) x 1) Heavy armored tank for Neutral Victim at TmpPoint facing Default building facing (270.0) degrees
                                Custom script: call RemoveLocation(udg_TmpPoint)
                                Set TmpPoint = (Center of FactoryRect[((Integer A) + 3)])
                                Unit Group - Pick every unit in (Last created unit group) and do (Actions)
                                    Loop - Actions
                                        Unit - Order (Picked unit) to Attack-Move To TmpPoint
                                Custom script: call RemoveLocation(udg_TmpPoint)
                                Set TmpGroup = (Last created unit group)
                                Custom script: call DestroyGroup(udg_TmpGroup)
                            Else - Actions
                For each (Integer A) from 4 to 6, do (Actions)
                    Loop - Actions
                        If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                            If - Conditions
                                (Life of Factory[(Integer A)]) Greater than 0.00
                            Then - Actions
                                Set TmpPoint = (Center of FactoryRect[(Integer A)])
                                Unit - Create ((CreepProgression - 2) x 1) Heavy armored tank for Neutral Extra at TmpPoint facing Default building facing (270.0) degrees
                                Custom script: call RemoveLocation(udg_TmpPoint)
                                Set TmpPoint = (Center of FactoryRect[((Integer A) - 3)])
                                Unit Group - Pick every unit in (Last created unit group) and do (Actions)
                                    Loop - Actions
                                        Unit - Order (Picked unit) to Attack-Move To TmpPoint
                                Custom script: call RemoveLocation(udg_TmpPoint)
                                Set TmpGroup = (Last created unit group)
                                Custom script: call DestroyGroup(udg_TmpGroup)
                            Else - Actions

The code of the firing system is
Code:
AutoFire04
    Events
        Time - Every 0.07 seconds of game time
    Conditions
    Actions
        Set SlotsCooldown[0] = (SlotsCooldown[0] + 1)
        If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            If - Conditions
                SlotsCooldown[0] Equal to 7
            Then - Actions
                Set SlotsCooldown[0] = 1
            Else - Actions
        For each (Integer B) from 1 to 12, do (Actions)
            Loop - Actions
                If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    If - Conditions
                        And - All (Conditions) are true
                            Conditions
                                (Item-class of (Item carried by Vehicule[(Integer B)] in slot SlotsCooldown[0])) Equal to Powerup
                    Then - Actions
                        Hero - Order Vehicule[(Integer B)] to use (Item carried by Vehicule[(Integer B)] in slot SlotsCooldown[0]) on Targets[(Integer B)]
                    Else - Actions

Please if you see another way to make it with less lag, please tell me.
07-09-2005, 11:42 AM#6
Anitarf
So, what is the problem, exactly? Still server splits? Or just lag?
07-09-2005, 04:11 PM#7
Wakoo
Before it was just a big split, now each player lag before be disconnected or splitted. :(

Do you think a trigger launched every 0.4s instand of 0.07s but with a while instand of this system can be better ? Do you know better function than "replace unit" ? Because there is a freeze when someone is his unit replaced with this function, i added a bollean in false to not launch all the trigger of test of the object, but it don't look enough...

Thanks again
07-09-2005, 04:30 PM#8
Guest
Quote:
Originally Posted by Wakoo
Before it was just a big split, now each player lag before be disconnected or splitted. :(

Do you think a trigger launched every 0.4s instand of 0.07s but with a while instand of this system can be better ? Do you know better function than "replace unit" ? Because there is a freeze when someone is his unit replaced with this function, i added a bollean in false to not launch all the trigger of test of the object, but it don't look enough...

Thanks again

Might be just that there's too many actions triggered at once that causes the crash? I experienced a problem quite simlar once, it crashed the second after map was loaded, i couldnt figure the problem and had to load an older working version of the map so i could continue the project.

Yours,
~Obedience
07-09-2005, 05:18 PM#9
Wakoo
Quote:
Originally Posted by Obedience
Might be just that there's too many actions triggered at once that causes the crash? I experienced a problem quite simlar once, it crashed the second after map was loaded, i couldnt figure the problem and had to load an older working version of the map so i could continue the project.

Yours,
~Obedience

Yes but actually there is no crash, the game just lag and split, sometime it crash too, but it's when i make some error in triggering.