• 0

    posted a message on Trigger parameter for picking one item in a random list?

    In reply to MAGAWAR:


    Why is IQ here? This is your inattention.

    When you create a variable, you need to specify the type of the variable.

    You can also check the box: Array. And the variable will become an array.

    Further, in the same place, it is necessary to specify the length of the array: Size.
    You can specify either a number or take the length from a constant.

    Posted in: Triggers
  • 0

    posted a message on Trigger parameter for picking one item in a random list?

    In reply to MAGAWAR:
    And now you've started asking better questions. xD

    • I have View Raw Data selected. I don't know how to create the array this is where my comprehension stops with the editor. 
      Array Selecting this will make the variable into an array of variables of the selected Type. Size controls the number of elements in each Dimension. While Dimension controls how many layers of elements there are. An array with a Size value of 5 and a Dimension of 3 will have 5*5*5, or 125 elements. The Constant option allows you to define the Size of an Array using a predefined constant variable.
    • The map has points. Just cant figure out how to make the array of hero's and reconfigure the buttons for that new array.

    In the Write Heroes trigger, we write heroes to an array of heroes.
    If you already have heroes on the map in points. Then you need to write this heroes in array. Use the standart Set Variable function.

    In the left side: there will be an array of heroes with an index (hero number).

    In the right: part you will choose the hero of the unit from the map.
    The type of the heroes array will be unit (no unit type).


    • I wanted to change a dialog .dds image with another image from importing but I receive error: (Core: a required object could not be found).

    If you just copied the Dialog -Create an image for dialog (Last created dialog)... function and the DIALOG_IMAGE variable, you will get this error. Even if you transferred files. You just specify the file again (using search by name).


    By the way, if you transfer files to import. Even if this is done by copying folder to the *.SC2Component. Then when you open the file, you need to save it. Any changes in the import must be saved. Otherwise, the editor will not see the files.


    Or I do not understand what caused the error.
    In any case, you can set the picture separately.

    If the image is not displayed correctly, then try playing with the Image Type: Horizontal Border

    I don't know how to do what you are telling me to do quite honestly. First time for everything here. This is as far as I have gotten. I am stuck.

    Just do it!

    Posted in: Triggers
  • 0

    posted a message on Trigger parameter for picking one item in a random list?

    Hero creation can be made easier.
    You will already have heroes units created on the map.

    Just at the beginning of the map, write them into the array of heroes. And then use this array to create buttons.

    Later, extra heroes can be removed from the map.
    And move the necessary heroes to the required point on the map and give them the owner (player).

    Posted in: Triggers
  • 0

    posted a message on Trigger parameter for picking one item in a random list?

    In reply to MAGAWAR:

     I need to figure out how to get my Dialog buttons in line with the Array and players


    This is the point. The dialog buttons are associated with an array of heroes. But the heroes still need to be tied to the players.


    1 part
    We have an array of Heroes, the type of the variable is the unit type (variable HEROES), since we have not created a unit yet. In the array at the beginning of the game (Write Heroes), writing down the types of units that will not be needed later. The array will be needed to display the buttons and to understand which button is pressed.


    part 2
    Create dialog buttons (Create Dialog For Player). They go in order and their number is equal to the number of heroes in the array. Now we know that if we write the Stalker hero at index 2 to the array, then the button will correspond to this hero.


    3 part
    Created dialog buttons. In the trigger that will handle the event: someone clicked on the dialog button (Clicked Hero Button).
    This someone player is his number (this is Triggering Player).
    We don't have which button was pressed. To do this, you will have to check all the buttons by brute force (in our case, there may be other options).
    As soon as we find the pressed button, we find the number of the Hero in the array.

    Now we already have the number of the player who pressed the button and the number of the hero.


    part 4
    We need to save the hero for player.
    We have an PLAYERS array (type Record Player). For example, there is an array of units.

    To navigate through an array, you need an index. Index = player number. We already have an index. There is also a hero number.
    Now, by index in the array, we will write the unit (choose any of the two proposed earlier). And this unit will belong to a specific player, since we will write the unit under the index (player number).

    part 5

    Next, we simply for each player (we list the players) create the necessary hero. Each player already has a hero number. By the number of the hero from the array of heroes, we take the type of unit and create it for the player. This unit is writeable for the player. (Create Heroes)

    We can write hero unit in PLAYERS array or in heroesForPlayers array. Index = number of player.

    Posted in: Triggers
  • 0

    posted a message on Trigger parameter for picking one item in a random list?


    At the very beginning, navigation through your mod was in one column. But she closed the chat of the players more.

    Two column navigation did not solve this problem. But it got a little better. At the same time, there is an example of how to split buttons into columns. (picture link)


    4. Mouth Lips Movement

    I tried that and failed. The camera shows the model feet or leg on different models, cant see the unit face. Will have to come back to this at another time as realizing creating a hero array is more important now.

    If you have good English (maybe you are a native speaker), then I strongly recommend going to the Discord channel that I posted earlier. In fact, the community has gone there.


    5. Tug of War Spawn Waves

    I see how the attack waves set up and points work in the downloaded map. Mine will have to be continuous. I'll map a test on that one and compare.

    I wrote a very light algorithm. Especially since I don't know AI.

    Posted in: Triggers
  • 0

    posted a message on Trigger parameter for picking one item in a random list?

    And here is an example of a small development of navigation for starting several mods with triggers. (first picture or link)
    And all for this. (second picture)

    And here is the Core itself, which serves several mods. Interacts with groups of players. And has features that can be used in multiple mods. (third picture)


    Posted in: Triggers
  • 0

    posted a message on Trigger parameter for picking one item in a random list?

    So, let's get acquainted with the code LINK (google drive):


    Также прилагаю мой текст на русском языке.

    I also enclose my text in Russian.

    link (google drive)


    CORE library

    1. Debug


    1.1. Forced Start Game: Worth paying attention to. In order to be able to test launch the game after selecting heroes, I changed the value of the variable that was involved in counting the players who pressed the Enter button. Thus, if there is a 1v1 game (where the player is an AI opponent), then a confirmation from me is enough. Convenient for light testing.


    2. Constants

    2.1. MAX_PLAYERS_AMOUNT: The maximum number of players in the game. In our case, 12 pcs.
    2.2. COUNT_FOR_START: used to count down the start of the game after all players have chosen heroes.


    3. Variables

    3.1. Folder Players

    3.1.1. The PLAYER class is stored in the PLAYERS variable, which is an array. The class stores:
    - player name Name Text
    - and his Group Number (most likely you won't need it and you can do without it),
    - unit-hero player Hero Unit
    - and the hero number in the array Hero Number,
    - boolean isChooseHero?: whether the player has chosen a hero
    - and isReadyToPlay?: whether the player pressed the ready button.
    Actually, all this could be implemented in arrays. There would be several identical arrays. And the index is the same for all - the player's number.
    3.1.2. playersAmountInGame: number of players in the game
    3.1.3. Teams of players playerGroup_1 and playerGroup_2.

    3.2. we have no other folders or variables.


    4. Functions

    4.1. Pause Game: Pause the game to stop the game before choosing heroes.
    4.2. Unpause Game: Continuation of the game (because the game is paused).
    4.3. Countdown Start: Game start countdown.
    4.4. Players folder: functions related to players

    Get Players: allocate all players to teams, count their number.


    5. Triggers

    5.1. Launch: this is where the game will start
    5.2. Player Leave From Game: if a player leaves the game, then he must be excluded from the team and the number of players in the game should be reduced.



    Navigation (UI) library

    1. Debug

    1.1. Create Info: display information about how many players pressed the start button.


    2. Constants

    2.1. DIALOG_IMAGE: Dialog image
    2.2. DIALOG_COLOR: Dialog color


    3. Variables

    3.1. dialog_Width: dialog width
    3.2. dialog_Height: dialog height (calculated based on the number of hero buttons)
    3.3. navigation_Dialogs: for storing player dialogs. Of course, one could store these dialogs in the PLAYER class. But initially I wanted to be able to modularize the code. You can store the dialogue in the PLAYER class, after creating the necessary variable there.
    3.4. heroButton_Items: An array to hold the hero buttons for each player. In the future, we will need to track - “Who is the player who dared to press a certain button? And what hero did he choose?
    3.5. startButton_Items: an array for storing game start buttons at index 0. Also at index 1 is stored information about how many players pressed Enter.
    3.6. peopleAmountWhoPressedEnterButton: How many players have pressed the game ready button. Actually, you can get by with the previous variable (run through the loop and calculate).
    3.7. Folder Button Color: Variables here that store the color of the button and the text in the buttons.


    4. Functions

    4.1. Start Game: Start the game.
    4.2. Check How Many Players Pressed Enter Button: Counts the number of players who pressed start the game.

    4.3. Folder Create All Dialogs: for creating Dialogs

    4.3.1. Create Dialog For Player: Creates a dialog and dialog elements for each player.
    4.3.2. Create Navigation Dialog: creating a Dialog
    4.3.3. Create Hero Buttons: Create Hero Buttons
    4.3.4. Create Enter Button: Create an Enter button

    4.4. Change Dialogs folder: to change data in Dialogs

    4.4.1. UI Player Elements: show/hide player UI elements
    4.4.2. Change Item - peopleAmount Who Pressed Enter Button: change the number of people who pressed the Enter button
    4.4.3. Destroy Dialogs: remove all displayed dialogs


    5. Triggers

    5.1. Clicked Hero Button: Someone clicked the hero button
    5.2. Clicked Enter Button: Someone pressed the ready button



    GAME library

    1. Debug



    2. Constants

    2.1. MAX_HERO_AMOUNT: The maximum number of heroes to choose from. It can be both more than players, and less.
    2.2. ENEMY_AI_1: Player 13 will be AI
    2.3. ENEMY_AI_2: Player 14 will be AI
    In this version, I see no reason to add separate AI for the teams of the players. Since it is possible to separately set the ratio of AI to other players (who is a friend and who is an opponent) with a separate code. And you can do it in the map settings.


    3. Variables

    3.1. Folder Heroes

    3.1.1. The HERO class is stored in the HEROES variable, which is an array. The class stores:
    - Name of the hero Name
    - Description of the hero Description (If necessary. I use it to display the comment that appears when hovering over the button)
    - unit type in UnitType editor. After all, we cannot store a unit that has not yet been created, so we will store its type, so that later we can create a unit based on the type of unit. If you have a map, then you can create hero units on the map in advance, and then write them into an array. The code will start the game to move or delete.

    3.1.2. heroesForPlayers: for storing the created heroes (in my case, after the game is ready to start). Not required variable. You can immediately write the hero directly to the PLAYER class.

    3.2. no other variables


    4. Functions

    4.1. Heroes Folder: Functions related to Heroes

    4.1.1. Write Heroes: write hero data to an array
    4.1.2. Create Heroes: Create heroes and write to variables. I store the heroes in both the PLAYER class and the heroesForPlayers array, depending on what you want to do next. And where access for you will be easier.


    5. Triggers



    At the exit

    We will have a choice of heroes. After the start, the heroes will be with the players.
    For a single mistake during the test (if you test 1x1) you should not be afraid. Since this error is due to the fact that player 2 does not have a unit that should be created from a variable (the variable is empty). This is logical. After all, the AI player cannot interact with the dialogue. Solution: make AI unit creation the default.


    But you will have to combine the two mods. How to transfer mods to the map, if necessary.

    Take a look at the Import module (F9). There are some necessary files there. You can save the mod as a folder (*.SC2Components). And just copy the Resources folder to the desired map (the map is also saved as a folder).
    Also created a sound for counting the start of the game. Actually it is a standard sound. Look on the tab Date - Sounds (put the filter on the mod).


    You can break down specific functions or triggers in detail. If you do not understand what is happening there and why.



    Posted in: Triggers
  • 0

    posted a message on Trigger parameter for picking one item in a random list?

    In reply to MAGAWAR:

    I did read that Arrays start @ 0. Going to try and I can get this one together correctly. Hoping not to bump starting with Player0 as human and rejigger the list above if I don't have to. Please compare notes on the correct Array setup here. I will check vs mine.

    If you did not know about it before, then I can assume that further development of this level of the game will be difficult for you. But who am I to dissuade you? xD


    In some programming languages, arrays may start at index 1. Old programming languages support indexing based on 1: Fortran, Algol, Pascal
    That is, when creating an array of [100] elements, indexing will be from 1 to 100 inclusive.


    Most languages index from 0.
    That is, when creating an array of [100] elements, indexing will be from 0 to 99 inclusive.


    And StarCraft II is special. When creating an array with [100] elements, indexing will be from 0 to 100 inclusive. Thus, 101 elements will fit. And the question arises: “Is it necessary to suffer from the 0th index?” No.


    In fact, in my code you can see that when creating an array for 12 players PLAYERS[12] I simply ignore index 0. I don't need it. You will need to take into account the index when there is a huge project. People then have problems with the speed of the algorithms. And they start looking for a bottleneck in the code that leads to brakes. And even then, you can hammer a nail into the index. Since the right decision will affect performance more than taking into account the index in arrays. Although... someone may disagree with me. Everyone has their own experience.


    2. Transmission Play On Death Without Stacking over Others

    I think that could work once tested. First lets get the Array up. Array Players and Hero Unit Pick Array though the dialog buttons. This will be the critical foundation for starting the map. 

    Still would!
    This is the main part of the game. Although you have only described a small part.
    In fact, you need to have a Core game module that will handle the start of the game.
    And the Navigation (UI) module that will be used by the players.


    Priority deliverables on Create On Map Initialization:


    1. Players Array
      • Player 0  Enemy All Units & Teams (Mines and Charges to Blow up on Battle Field Non controled units)
      • Players 1-6   /   AI Base 14 = Team 1
      • Players 7-12   /   AI Base13= Team 2
      • Player 15   (Enemy Spectator of ALL players) - No Unit Pick- (Idea is to give player Icon Cannon with CD to attack any players on battle file)
    2. Dialog Buttons Array All Player Hero Pick Unit

    In reality, these data are far from sufficient.
    Basically, the forum is used to ask simpler questions. Then they get answers (bricks), from which they then build a building. You have a request to create a game module. However, this is only part of the data.


    1. Variables for storing players and teams is not a problem. In the examples that were before, there are necessary variables for this.

    You can deal with the placement of players (who and where is, who is friend and who is enemy) both by triggers and using map settings.

    You can also create classes (in Starcraft II this is Record. But for convenience, I will continue to call it a class.) with their own fields (variables), and it will be limited to arrays.

    For example, there are three arrays with a total length of 12. The first array stores the units. The second is dialogue. The third one is boolean. As a result, by index, let's say 5, we will get for the fifth player both a unit, and a dialogue, and a boolean. It may even be easier for you.


    2. But the dialog box will not work with a swoop. I will show in a separate post how laborious this can be with the help of triggers. Some people know how to write dialogs using the Layout markup. But I didn't learn the syntax. Although I know a little.


    In fact, you need to know a number of conditions (perhaps you yourself have not asked yourself such questions yet)
    - "How many heroes will there be?"
    - "Each hero will be in the singular?" Or "Can players choose the same hero?"
    - Depending on the choice of the previous question, the structure of the code changes significantly.


    In the option “Each hero will be in the singular? Yes!"
    You can get by with only one Dialogue for all players. And block the selected hero from other players.


    In the option "Players can choose the same hero? Yes!"
    We'll have to do a Dialogue for each player. And store everything in an array.


    The choice of code structure depends on many factors. It even happens that you have to redo all the code for a new structure in the process.
    Also, the structure can be greatly influenced by where the game will be located - in the Game Library or in Melee.
    If in the Game Library, then you will need navigation and dialogs at the start.
    If in Melee, then you can get by with the settings in the game lobby, which is before the start of the game. There, all players can choose, for example, heroes.


    I propose to stop at the division of parts of the code into Libraries.
    - CORE: the main part of the code, which contains the variables that are used in all other parts. Serves to store information about Heroes, Players, Teams of players, Number of players in the game.
    It has the functions of Pause the game, Start the game, Count before the start, Count the players.
    Triggers Launch the game, which starts it all, and also keeps track of whether the player has left the game.


    - Navigation (UI): everything related to navigation and dialogue at the beginning of the game will be here.
    Variables: related only to the Dialog.
    Functions: Create a dialogue and its elements, hide the players' UI for a while, display information.
    Triggers: directly related to the UI. It's like "who dared to click the button? I'll figure you out!"


    - GAME: everything related to game algorithms. Win/lose conditions. Variables for units specific to this game.


    For example, the code that I gave for displaying portraits would be nice to place in GAME by creating a separate folder for this to work with the UI.


    Also, instead of creating three Libraries, you can use one standard one, but place everything in folders.
    And of course you can place everything differently. And it will work.
    However, if it’s like mine, then in the future it will be possible to remove the Navigation (UI) library from the code and place it on a different map / mod with a little tweaking. It's the same with CORE. At the same time, it is logically divided and immediately visible.


    Basically, the placement of debug triggers, variables, constants, functions and triggers is structured for me. Everything is in its own folder.
    Not sure a little about the names of variables and functions. So I apologize in advance.


    Posted in: Triggers
  • 0

    posted a message on Trigger parameter for picking one item in a random list?

    In reply to MAGAWAR:


    It seems like the Galaxy language allows you to use a custom variable in an event - track the variable.

    For example, it would be possible to track a variable "deadUnitsAmount" like this, in option 1. And turn off the trigger "WorkWarningSystem" with boolean. But I didn't do that.
    "Anybody Wanting to know how to use custom variable in event"


    For testing: there is a trigger in the Debug folder that gives you units at startup.

    By killing them, portraits can be seen (only when player 1's unit dies).

    The portrait will always be of the race the player is playing.

    It depends on the map settings.

    If you have a Zerg race, and the Marines die, then the portrait will be from the Zerg race.

    Tried to make it clear.
    And welcome to Discord on the SC2Mapster channel

    Posted in: Triggers
  • 0

    posted a message on Trigger parameter for picking one item in a random list?

    In reply to MAGAWAR:


    2. Transmission Play On Death Without Stacking over Others

    Version #2


    This is a more complex version. The system is built on:

    1. Here we will have a queue for the left and right portrait.
    To do this, we introduce time variables: "timeForLeftPortrait" and "timeForRightPortrait".


    Trigger "TickTack_2"

    2. We will need to use this time somehow.

    Therefore, you will need a trigger for the countdown (By the way, this can also be done with the cycle option -  trigger "TickTack").


    Trigger "UnitDead"

    3. This trigger will always be used here as created thread, since this trigger is called every time a unit dies.


    4. Be sure to copy the time, portrait position and race into local variables (_time, __portraitPosition, _race).

    Then these indicators will change and we will get not what we need.


    5. Depending on the position of the portrait, we will change the queue time until the next portrait.


    6. This trigger will wait for the turn to play the portrait and sound.


    It would also be nice to play with the waiting time here. As well as the time that is added to the queue.


    Posted in: Triggers
  • 0

    posted a message on Trigger parameter for picking one item in a random list?

    In reply to MAGAWAR:


    2. Transmission Play On Death Without Stacking over Others

    Version #1


    This is a more complex version. The system is built on:

    1. Trigger "UnitDead"
    - Recording the killed unit and the race of the owner of this unit in arrays.
    - The record goes under the desired index "KilledUnit", which increases.


    2. Trigger "WorkWarningSystem"
    - Works constantly in a cycle. Be sure to use the minimum wait "wait 0.2 sec."
    - The condition that no more than two portraits are shown.
    - If nothing is written under "currentIndex" in the array, then the loop runs idle.
    - After the portrait display operation has been called, the used data must be removed from the array.


    3. Action "WarningSystemOperation" (with separate thread)
    - increase the number of portraits that are currently used.
    - depending on the race of the player who owned the killed unit, we play the portrait and sound
    - we take into account the waiting time, which (waiting) will be called later
    - after showing the portrait, change its display location
    - and call a wait (with a separate thread) in order to reduce the number of portraits that are currently in use (because the portrait uses sound for a while).

    You have to play with the waiting time. Depending on what length of sound is used.


    4. variable "currentIndex" - used to move through the array and display the saved data


    5. variable "deadUnitIndex" - used to write to the data array in empty spaces.


    6. variable "deadUnitsAmount" - not used anywhere in the check.

    7. variables "isWorkLeftPortrait?" and "isWorkRightPortrait?" - it's like another version of the checks. Did not use.

    From p.6 and p.7 - more new options are obtained for using the algorithm.

    Posted in: Triggers
  • 0

    posted a message on Trigger parameter for picking one item in a random list?

    In reply to MAGAWAR:


    I didn't understand a bit. Maybe this will help:


    4. Mouth Lips Movement
    Have you tried this?


    2. Transmission Play On Death Without Stacking over Others

    There are two options (actually there are more options).

    The editor does not have a Collection: Queue or Linked List.

    But you can get out of this situation.

    The description will be separate in the following messages.


    5. Tug of War Spawn Waves

    I suggested something like this. I just don't know the AI settings. Therefore, not every game works.

    However, if you don't have AI for players 13 and 14 and those players only get units via triggers, then it's easy to make them attack waves.

    Posted in: Triggers
  • 0

    posted a message on How to Spawn Waves random angles?

    And I did not answer this topic, because I did not really understand the question. Your second comment provided clarification.
    It all depends on what you need to end up with.

    Let's make it hard.

    Player 1 and Player 2.
    Player 2 should constantly produce units (I think it's better to give this to AI) and attack around the map.


    1. Player 2 can collect produced units somewhere in one region or in one of several regions. After a certain time, we will pick up our units from there and send them to attack.

    2. Can be done differently. When a unit is produced, it is located near the producing building. We can just choose a region with a building in the center.

    3. Or even easier, create a player region 2. From where we pick up all the units to attack.


    The attack can be done in several ways.

    Or choose a random point on the map. But there is no guarantee that there will be player 1.
    Or immediately on the second player.

    Or more difficult:
    - Let's create several attack regions. And write them into an array (needed for random selection, where region index = random number).
    - As you wrote, we choose a random time, for example, from 60 to 120 seconds.
    - We start the timer and set this time.
    - After the timer expires, we pick up the units and take them to the attack in a random attack region (choose a random number from the region's indices, you know the number of regions).
    - Don't forget to restart the timer
    - Units will reach the region. We need another trigger with the "Someone entered the region" event.
    - When the units arrived in the attack region, now we again select all units from there and send them either to another attack region, or directly to player 1, or to a random point on the map (minus the region of player 2 and player 1). By the way, there can be all three choices. We just deal with them using a random number from 1 to 3.


    - You can send units to attack points, saving units in an array. Then run through the array and set either a new direction of attack, or a patrol.
    - It is possible to create multiple regions from player 2 centered on player 2's base. The regions will have different radius and units will have to patrol/attack a random point in the region with a small radius first. Then with the middle one. Then with a big one. And then on to the enemy. At what it is possible how to save units in an array and sort through the array. So do without it. For example:
    * Region 1 - player 2's base with a radius of 20.
    * Region 2 - player 2's base with a radius of 40s.
    * Region 3 - player 2's base with a radius of 60.
    * Region 4 - Player 2's base with a radius of 80.
    * Region 5 - player 1 base (opponent)
    * First send units from region 1 to region 2.
    * Then after some time from region 2 to region 3, and new units from the base to region 2.
    * With this, region 2 will be located as region 2 minus region 1. Etc. So it will be possible to allocate the necessary units from the desired region.

    Posted in: Triggers
  • 0

    posted a message on Trigger parameter for picking one item in a random list?


    It's not clear what you mean.
    A trigger has no parameters. A function has parameters.
    Moreover (maybe my translation is wrong) a trigger can't have a random list of events.


    Also, how different will the events be?

    Let's say it's good practice to use 1 trigger = 1 event.

    You can make several events, but it is desirable that they be from the same subject, such as: "zergling morph" + "roach morph" + "corraptor morph".

    And it's bad to have such a list in events:
    - someone came to the region
    - someone died
    - someone is morphing
    - someone wrote in the chat
    - someone is produced

    If several events are used, then in the "Action" field using "If - Then - Else" or "Switch" you choose what you need to filter. Like "triggering unit" or "triggering player".

    Everything can be made more difficult. For example with "triggering unit":
    - Make a function that takes a "triggering unit" parameter.
    - Processes it "If - Then - Else" and outputs, for example, "number". That is, a marine - 100, a marauder - 200, etc.
    - In a trigger, you call this function with a parameter passed to it and write the response to a local variable.
    - Then you set, for example, the life of a unit from this local variable.
    It can be even more difficult, just call our function immediately when recording the life of a unit.


    Therefore also there is a question:

    How different events at you will be in the trigger? Please provide an example.
    And it is desirable to know what should happen next in the "Action" field.

    Posted in: Triggers
  • 0

    posted a message on Issue with downloaded foreign map in SC2 Editor

    In reply to dongexpanding:

     And without the file and the picture is just guessing.
    Most likely the names are in Korean. And there are no Korean fonts on PC.
    Either give the file, since it is blocked in the editor and cannot be downloaded (the author will not thank you for this), or somehow manage it yourself.

    Posted in: Triggers
  • To post a comment, please or register a new account.