Listen to a special audio message from Bill Roper to the Hive Workshop community (Bill is a former Vice President of Blizzard Entertainment, Producer, Designer, Musician, Voice Actor) 🔗Click here to hear his message!
Your triggers checked for battleOver = false however you never reset it back to true in-between rounds causing the issue of the next round never starting as your triggers condition can never be met after the first time.
Player1Won
Events
Unit - A unit owned by Player 2 (Blue) Dies
Time - Every 2.00 seconds of game time
Conditions
battleOver Equal to False
(Number of units in (Units owned by Player 2 (Blue) matching ((((Matching unit) is alive) Equal to True) and (((Matching unit) is being transported) Equal to False)).)) Equal to 0
Actions
Set VariableSet P1Win = (P1Win + 1)
Game - Display to (All players) for 1.00 seconds the text: ((|c00f00000 + (Name of Player 1 (Red))) + |rWins.)
Set VariableSet battleOver = True
Wait 1.00 seconds
Trigger - Run End <gen> (checking conditions)
Issue 2:
your trigger End runs 2 triggers when ever a round B ends and one of those triggers being run, also runs the other trigger being run causing the issues of rounds being run multiple times.
End
Events
Conditions
Actions
Unit Group - Pick every unit in (Units in (Playable map area) matching ((Point-value of (Matching unit)) Not equal to 31)) and do (Actions)
Loop - Actions
Unit - Remove (Picked unit) from the game
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
Degisim Equal to True
Then - Actions
Game - Display to (All players) the text: degisim
Trigger - Run trigger_mevcut_round (checking conditions)
Trigger - Run RoundB <gen> (checking conditions)
Set VariableSet Degisim = False
Else - Actions
Game - Display to (All players) the text: yeni tur
Trigger - Run round sistemi <gen> (checking conditions)
Trigger - Run Go <gen> (ignoring conditions)
Go trigger running round sistemi again:
Go
Events
Conditions
Actions
Leaderboard - Change the value for Player 1 (Red) in (Last created leaderboard) to P1Win
Leaderboard - Change the value for Player 2 (Blue) in (Last created leaderboard) to P2Win
Leaderboard - Sort (Last created leaderboard) by Value in Descending order
Wait 1.00 seconds
Set VariableSet battleOver = False
Trigger - Run round sistemi <gen> (checking conditions)
Countdown Timer - Start CompStartTimer as a One-shot timer that will expire in 5.00 seconds
If (roundLetter Equal to a) then do (Trigger - Run RoundA <gen> (ignoring conditions)) else do (Trigger - Run RoundB <gen> (ignoring conditions))
Wait 0.20 seconds
Trigger - Run Comp1RoundStart <gen> (checking conditions)
Trigger - Run Comp2RoundStart <gen> (checking conditions)
Can check out the attached map that made the fixes however I also rewrote the round system as I thought your method might have been causing the issues but that was not the case but the repeated calls for the round trigger
Thank you very much. I will check this and inform you when i am available.
But let me tell you what i want to do. Maybe you will re-create system as you wish.
Currently it includes 10 rounds.
I am planning to pick "random 5 rounds from the round pool"
Every rounds have 2 sides. A and B for both players.
After round ends, system will pick another round from the pool.
Every round can be picked only 1 time.
Update: Oh, it is saved on reforged. No problem. I have both versions. I can look and create same for old versions.
// Initialize Rounds
set RoundIndex = RoundIndex + 1
RoundArray[RoundIndex] = 1
set RoundIndex = RoundIndex + 1
RoundArray[RoundIndex] = 2
set RoundIndex = RoundIndex + 1
RoundArray[RoundIndex] = 3
set RoundIndex = RoundIndex + 1
RoundArray[RoundIndex] = 4
// Get a random round from the pool and "remove" it from the array
set RandomRound = RandomInt(1, RoundIndex)
set CurrentRound = RoundArray[RandomRound]
set RoundArray[RandomRound] = RoundArray[RoundIndex]
set RoundArray[RoundIndex] = 0
set RoundIndex = RoundIndex - 1
// then, whenever you run the above code, you can access data by creating arrays
set SpawnedUnitTypePlayer1[1] = Ghoul
set SpawnedUnitTypePlayer2[1] = Archer
set SpawnedUnitAmountPlayer1[1] = 4
set SpawnedUnitAmountPlayer2[1] = 4
set SpawnedUnitTypePlayer1[2] = Archer
set SpawnedUnitTypePlayer2[2] = Ghoul
set SpawnedUnitAmountPlayer1[2] = 4
set SpawnedUnitAmountPlayer2[2] = 4
....
-Some Event
-> Create (SpawnedUnitAmountPlayer1[CurrentRound]) Units of type (SpawnedUnitTypePlayer1[CurrentRound]) for (Player 1) at Position xy
So this is a bit awkward, I started to look into your issues and I found a few things that I thought were problematic and maybe causing some of the confusion that led to your issues.
I found and solved the issues, but I redesigned the triggers enough that I think it is pointless to speak to the issues, especially since it would appear others have already begun to do so.
Anyway, I have a working version of your map which I think you would like, I built it with expansion in mind and kept it as familiar to the old triggers as I was willing to.
I understand if you are not interested, and either way I won't be able to share it until later today, and I hoped to polish up a last thing, so if you were willing to wait until tomorrow afternoon, I would polish it a bit more.
Again, I understand if you are not interested, but to list some improvements:
all of your issues are fixed.
rounds can go beyond 10, they will be randomly selected until all have been used and then the list will reset and a new random order will begin, and so on until the max number of rounds is reached.
The game will restart 10 seconds after it ends, after informing the players of the winner and loser.
Wins are counted with the lumber resource.
Score is counted with the gold resource, and is based on which player has the highest food. Each player starts at 10,000 points and every 0.5 seconds, their score increases by their own food used, and decreases by the enemy's food used. This winners tend to be above 10,000 score, and losers below.
Wins are tracked beyond each game, but each game counts player wins independently of overall wins, so if you play 3 sessions, it still counts your wins for that session, but not for sessions past.
Added support to be able to add and remove round types, which I renamed to scenarios.
Wow. Seriously? By the way i haven't configurated win and round losses yet. It will not ends when any player have specific round wins.
By the way i wasn't knew there was many issues. @Tristronic
You can do anything you want. It is a simple duel map. Some improvements can't hurt. Not necessary but you can do if you want.
@JFAMAP I was kind of bored the other night when I saw your post and it looked simple enough of an idea. It may be that some of the things that I thought were issues were simply things I didn't understand, but I didn't really mean active issues that you would notice while playing. I meant there were times where I felt I understood what you wanted to do, but the way your did it was either overcomplicated or inefficient. Inefficiencies I think are less important and noticeable in this game because it's just a simple duel map, but overcomplicated things I think are always good to get rid of because I think they add up and then it's easy to have a bunch of issues that are hard to trace.
Athough, you can always debug msg your way back home lol.
Here is a list of some of the things I did:
Terrain:
- Spruced up the terrain (I know you would probably do this eventually, but I was testing so much that I figured I'd make it pretty.
- I made the map flyer proof, well it should be, 1 layer of flight path blockers wasn't enough so I made it 4 blockers thick.
Crowd Units:
- I made it so that any unit that is pre-placed on the map in the editor will be treated like a crowd member and will say stuff.
- I made it so that adding strings for the units to say was a little bit more stream-lined, now just add a phrase to the string array and set the total number of strings, periodically there is a chance someone yells something.
Research:
- I pulled these out of the scenario/round triggers to make the scenarios cleaner, and because researches can't be undone, and given that scenarios are chosen randomly, there is no guarantee that a player doesn't have them when you want them not to have one, so I figured just make them always have them.
Scenarios:
- Were called rounds, terminology got to be too overlapping.
- Now work in a format such as: where Player A and B will be switched from Players 1 & 2 between rounds, points A and B being there starting points.
- The idea here is that you want to be able to start a round without this trigger knowing or caring it is round A or round B, by making these scenario triggers simple, we can simply call the round twice, once while player 1 is player A and once while player 2 is player A.
- Adding new scenarios will mean making a new trigger like the one above, and adding the name and number of the scenario to this trigger, and increasing the variable "scenarioCount" to match:
- I reduced the number of rounds per game to 3 for testing, maybe it would be good to allow the player to set this in game.
Here's a basic description of how it works, and I'll post the triggers to try to save myself some explanation:
This one is pretty straighforward.
Start
Events
Time - Elapsed game time is 0.10 seconds
Conditions
Actions
Set VariableSet PointA = (Player 1 (Red) start location)
Set VariableSet PointB = (Player 2 (Blue) start location)
Set VariableSet PointC = (Position of Ruins Naga Circle 0997 <gen>)
Melee Game - Use melee time of day (for all players)
Game - Set the time of day to 9.00
Visibility - Disable fog of war
Visibility - Disable black mask
Trigger - Run SetResearch <gen> (checking conditions)
Trigger - Run SetScenarios <gen> (checking conditions)
Trigger - Run SetTezahurat <gen> (checking conditions)
Player - Make Player 1 (Red) treat Player 2 (Blue) as an Enemy
Player - Make Player 2 (Blue) treat Player 1 (Red) as an Enemy
Player - Set Player 1 (Red).Current gold to 10000
Player - Set Player 2 (Blue).Current gold to 10000
Camera - Set Player 1 (Red)'s camera Height Offset to 360.00 over 0.00 seconds
Camera - Set Player 2 (Blue)'s camera Height Offset to 360.00 over 0.00 seconds
Unit Group - Pick every unit in (Units in (Playable map area)) and do (Actions)
Loop - Actions
Unit Group - Add (Picked unit) to TezahuratUnitGroup
Starts the game at 3 seconds and then is called at the end of each round or game after a wait.
StartRound
Events
Time - Elapsed game time is 3.00 seconds
Conditions
Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
subRound Equal to 1
Then - Actions
Set VariableSet subRound = 2
Else - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
currentRound Equal to finalRound
Then - Actions
Trigger - Run GameEnd <gen> (checking conditions)
Skip remaining actions
Else - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
currentRound Equal to scenarioCount
Then - Actions
Set VariableSet scenerioShuffleCount = (scenerioShuffleCount + 1)
Else - Actions
Set VariableSet subRound = 1
Set VariableSet TempIntA = (Random integer number between ((currentRound - (scenerioShuffleCount x scenarioCount)) + 1) and scenarioCount)
Set VariableSet scenario[(currentRound - (scenerioShuffleCount x scenarioCount))] = scenario[0]
Set VariableSet scenarioDescription[(currentRound - (scenerioShuffleCount x scenarioCount))] = scenarioDescription[0]
Set VariableSet currentRound = (currentRound + 1)
Set VariableSet scenario[0] = scenario[TempIntA]
Set VariableSet scenarioDescription[0] = scenarioDescription[TempIntA]
Set VariableSet scenario[TempIntA] = scenario[(currentRound - (scenerioShuffleCount x scenarioCount))]
Set VariableSet scenarioDescription[TempIntA] = scenarioDescription[(currentRound - (scenerioShuffleCount x scenarioCount))]
Set VariableSet PlayerA = (Player(subRound))
Set VariableSet PlayerB = (Player((3 - subRound)))
Game - Display to (All players) for 4.00 seconds the text: ((Beginning Scenario + ((String(currentRound)) + , )) + scenarioDescription[0])
Game - Display to (All players) for 4.00 seconds the text: ( Round + (String(subRound)))
Cinematic - Disable user control for (All players).
Camera - Pan camera for (Player(subRound)) to PointA over 1.00 seconds
Camera - Pan camera for (Player((3 - subRound))) to PointB over 1.00 seconds
Trigger - Run scenario[0] (checking conditions)
Wait 2.00 seconds
Set VariableSet battleOver = False
Cinematic - Enable user control for (All players).
Trigger - Run StartComp <gen> (checking conditions)
Sound - Play UpkeepRing <gen>
- First round of each game, subRound will be 0, then is set to 1 the first time this trigger runs.
- When subRound is 1, this will find a new scenario from scenario[1-10] and set scenario[0] equal to the chosen scenario.
- subRound = 1: Player 1 = A; Player 2 = B
- When subRound is 2, this will use the last scenario, scenario[0]
- subRound = 2: Player 1 = B; Player 2 = A
- When the final round is complete, or when all scenarios have been done, they are all added back into the usable list to be potentially randomly selected again.
- Last thing this does is initiates the AI, which I spent way too much time on for a game that would probably be best enjoyed by two real people.. XD
I kept the same basic idea you had going, I don't know much about WC3 AI, I am using it here only to support Hero ability use and made another trigger for a simple attacking AI
StartComp
Events
Conditions
Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
Or - Any (Conditions) are true
Conditions
(PlayerA controller) Equal to Computer
(PlayerA slot status) Equal to Has left the game
(PlayerA slot status) Equal to Is unused
Then - Actions
Custom script: set bj_wantDestroyGroup = true
Unit Group - Pick every unit in (Units owned by PlayerA.) and do (Actions)
Loop - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
((Picked unit) is A Hero) Equal to True
Then - Actions
Set VariableSet TempUnit = (Picked unit)
Trigger - Run SetSkills <gen> (checking conditions)
Else - Actions
Unit - Order (Picked unit) to Attack-Move To PointC
Else - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
Or - Any (Conditions) are true
Conditions
(PlayerB controller) Equal to Computer
(PlayerB slot status) Equal to Has left the game
(PlayerB slot status) Equal to Is unused
Then - Actions
Custom script: set bj_wantDestroyGroup = true
Unit Group - Pick every unit in (Units owned by PlayerB.) and do (Actions)
Loop - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
((Picked unit) is A Hero) Equal to True
Then - Actions
Set VariableSet TempUnit = (Picked unit)
Trigger - Run SetSkills <gen> (checking conditions)
Else - Actions
Unit - Order (Picked unit) to Attack-Move To PointC
Else - Actions
Melee Game - Run melee AI scripts (for computer players)
Trigger - Turn on FindTargets <gen>
Not Much to see here, the next trigger is more interesting
These triggers are supplimented by the melee AI, which is an area that can be improved, and I know little about AI, so maybe you would want to use another one than the melee AI, the units do try to flee were it not for these triggers preventing them from doing so.
FindTargets
Events
Time - Every 0.03 seconds of game time
Conditions
Actions
Set VariableSet TempIntA = 0
Custom script: set bj_wantDestroyGroup = true
Unit Group - Pick every unit in (Units in (Playable map area) matching ((((Owner of (Matching unit)) controller) Not equal to User) and ((Owner of (Matching unit)) Not equal to Neutral Passive))) and do (Actions)
Loop - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
((Picked unit) is alive) Equal to True
((Picked unit) is in OrderedUnitGroup.) Equal to False
((Picked unit) is in CastingUnitGroup.) Equal to False
Then - Actions
Set VariableSet TempIntA = (TempIntA + 1)
Set VariableSet AITarget[0] = (Picked unit)
Else - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
TempIntA Equal to 0
Then - Actions
Unit Group - Remove all units from OrderedUnitGroup.
Trigger - Turn off (This trigger)
Wait 0.20 seconds
If (battleOver Equal to False) then do (Trigger - Turn on (This trigger)) else do (Do nothing)
Skip remaining actions
Else - Actions
Set VariableSet TempIntA = 0
Set VariableSet TargetPlayer = (Player((3 - (Player number of (Owner of AITarget[0])))))
Set VariableSet TempDistance[0] = ConcentrationRange
Custom script: set bj_wantDestroyGroup = true
Unit Group - Pick every unit in (Units owned by TargetPlayer matching (((Matching unit) is alive) Equal to True).) and do (Actions)
Loop - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
Or - Any (Conditions) are true
Conditions
And - All (Conditions) are true
Conditions
((Picked unit) is A flying unit) Equal to True
Or - Any (Conditions) are true
Conditions
(Unit-type of AITarget[0]) Equal to Batrider
(AITarget[0] is Able to attack flying units) Equal to True
And - All (Conditions) are true
Conditions
((Picked unit) is A flying unit) Equal to False
(AITarget[0] is Able to attack ground units) Equal to True
Then - Actions
Set VariableSet TempIntA = (TempIntA + 1)
Set VariableSet AITarget[TempIntA] = (Picked unit)
Else - Actions
Trigger - Run SelectTarget <gen> (checking conditions)
- First loop is finding any unit that has no human owner
- First If/Then/Else is checking if we found any units that aren't busy or that haven't already been given orders, check again in 0.2 seconds
- Once everyone gets an order, it starts the cycle again, ordering maybe 1 unit every 0.03 seconds.
- If we do have a valid unit to boss around, the next unit group function is checking if we have any valid targets for the unit.
- Air units are only valid if you have air attack, et c. I added a case or Batriders so that they can blow up the DragonHawk riders since they have no land targets in that round (the ends will have to justify the means here.... so so many Batriders died in the making of this.
- If there are valid targets, we are going to the next trigger to pick one!
I can't wait to write this in JASS.... seriously. This on is ugly, but mathematically beautiful (on the inside).
SelectTarget
Events
Conditions
TempIntA Greater than 0
Actions
Set VariableSet TempIntB = 0
Set VariableSet Xpos[0] = 0.00
Set VariableSet Ypos[0] = 0.00
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
Or - Any (Conditions) are true
Conditions
(Unit-type of AITarget[0]) Equal to Batrider
Then - Actions
-------- Any unit with an AoE attack may want to find most concentrated cluster, put them in the "Or" statement above. --------
For each (Integer A) from 1 to TempIntA, do (Actions)
Loop - Actions
Set VariableSet TempPoint = (Position of AITarget[(Integer A)])
Set VariableSet Xpos[(Integer A)] = (X of TempPoint)
Set VariableSet Ypos[(Integer A)] = (Y of TempPoint)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
Or - Any (Conditions) are true
Conditions
And - All (Conditions) are true
Conditions
(AITarget[TempIntB] is A ground unit) Equal to True
(AITarget[0] is Able to attack ground units) Equal to False
And - All (Conditions) are true
Conditions
(AITarget[TempIntB] is A flying unit) Equal to True
(AITarget[0] is Able to attack flying units) Equal to False
Then - Actions
Set VariableSet TempIntB = (Integer A)
Set VariableSet TempDistance[0] = TempDistance[(Integer A)]
Else - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
TempIntB Greater than 0
Then - Actions
Set VariableSet AITarget[TempIntB] = AITarget[TempIntA]
Set VariableSet AITarget[TempIntA] = No unit
Set VariableSet TempIntA = (TempIntA - 1)
Trigger - Run (This trigger) (checking conditions)
Else - Actions
Set VariableSet TempDistance[0] = TempDistance[1]
Set VariableSet TempIntB = 1
For each (Integer A) from 1 to TempIntA, do (Actions)
Loop - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
TempDistance[(Integer A)] Less than or equal to TempDistance[0]
Then - Actions
Set VariableSet TempDistance[0] = TempDistance[(Integer A)]
Set VariableSet TempIntB = (Integer A)
Else - Actions
Set VariableSet AITarget[(Integer A)] = No unit
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Unit-type of AITarget[0]) Equal to Batrider
(AITarget[TempIntB] is A flying unit) Equal to True
Then - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Random integer number between 1 and 100) Less than 90
Then - Actions
Unit - Order AITarget[0] to Orc Batrider - Unstable Concoction AITarget[TempIntB]
Else - Actions
Unit - Order AITarget[0] to Attack-Move To PointC
Else - Actions
Unit - Order AITarget[0] to Attack AITarget[TempIntB]
Unit Group - Add AITarget[0] to OrderedUnitGroup
Set VariableSet AITarget[TempIntB] = No unit
Set VariableSet AITarget[0] = No unit
Skip remaining actions
- I'd rather not explain this one in detail, I'll take questions though.
- The basic idea is to take a positional variance of potential tagets, remove the unit that is furthest from the rest of the group, and repeat until the remaining units are all within a given concentrationRange, the purpose of this being for AoE attacks such as Unstable Concoction.
- If the unit is anything other than a Batrider, they will instead find the closest target of units that they can attack with their basic attack.
- This trigger is kind of half-done in the sense that more units with AoE abilities/attacks could be added, and more basic attack restrictions could be considered (such as only magic attack types can attack ethereal units).
- To prevent all Batriders from blowing up at the same time in a fiery end which could never justify the means, I added a 10% chance that the Batriders chicken out and go back to PointC (center of arena)
This trigger takes units that are casting an ability out of the order queue, so that a channeling unit isn't interrupted, those DragonHawk Riders and their Aerial Shackle really came in handy in testing...
BeginCasting
Events
Unit - A unit Begins channeling an ability
Conditions
Actions
Custom script: set udg_TempIntA = GetUnitCurrentOrder( GetTriggerUnit() )
Unit Group - Add (Casting unit) to CastingUnitGroup
Unit - Set the custom value of (Casting unit) to TempIntA
FinishCasting
Events
Time - Every 0.50 seconds of game time
Conditions
Actions
Unit Group - Pick every unit in CastingUnitGroup and do (Actions)
Loop - Actions
Custom script: set udg_TempIntA = GetUnitCurrentOrder( GetEnumUnit() )
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Custom value of (Picked unit)) Not equal to TempIntA
Then - Actions
Unit - Set the custom value of (Picked unit) to 0
Unit Group - Remove (Picked unit) from CastingUnitGroup.
Else - Actions
I forgot to mention, I reduced the number of triggers, this one makes a decent example, there were one of these for each player, as with many other triggers, you've probably notice, but I forgot to mention it.
PlayerWin
Events
Player - Player 1 (Red)'s Food used becomes Equal to 0.00
Player - Player 1 (Red) types a chat message containing -pes as An exact match
Player - Player 2 (Blue)'s Food used becomes Equal to 0.00
Player - Player 2 (Blue) types a chat message containing -pes as An exact match
Conditions
battleOver Equal to False
Actions
Set VariableSet battleOver = True
Set VariableSet winsPlayer[0] = (winsPlayer[0] + 1)
Trigger - Turn off FindTargets <gen>
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Player 2 (Blue) Food used) Equal to 0
(Player 1 (Red) Food used) Not equal to 0
Then - Actions
Set VariableSet winsPlayer[1] = (winsPlayer[1] + 1)
Player - Set Player 1 (Red).Current lumber to ((Player 1 (Red) Current lumber) + 1)
Game - Display to (All players) for 1.00 seconds the text: ((|c00ffff00 + (Name of Player 1 (Red))) + |r Wins..)
Else - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Player 1 (Red) Food used) Equal to 0
(Player 2 (Blue) Food used) Not equal to 0
Then - Actions
Set VariableSet winsPlayer[2] = (winsPlayer[2] + 1)
Player - Set Player 2 (Blue).Current lumber to ((Player 2 (Blue) Current lumber) + 1)
Game - Display to (All players) for 1.00 seconds the text: ((|c00ffff00 + (Name of Player 2 (Blue))) + |r Wins..)
Else - Actions
Wait 0.50 seconds
Custom script: set bj_wantDestroyGroup = true
Unit Group - Remove all units from CastingUnitGroup.
Unit Group - Pick every unit in (Units in (Playable map area) matching ((Owner of (Picked unit)) Not equal to Neutral Passive)) and do (Actions)
Loop - Actions
Unit - Remove (Picked unit) from the game
Wait 1.50 seconds
Trigger - Run StartRound <gen> (checking conditions)
- I didn't like the idea of constantly counting the number of units each player had, so this was switched to use food as the indicator.
- One flaw to this that I haven't corrected yet is that summoned units don't cost food. Probably most easily handled in the Object editor. I wasn't focused on that so I didn't test how summoned units work with food cost...
This could be improved with some UI, maybe just a dialogue box asking if the players want to play again. Nothing really fancy here, the variable resets at the bottom are what resets the scenario randomization, which gets shuffled as it does, potentially leading to a very good randomization process, although, from empirical point of view, random is random I suppose.
GameEnd
Events
Conditions
Actions
Set VariableSet battleOver = True
Wait 0.50 seconds
Game - Display to (All players) the text: |cffff4fff - The Ga...
Wait 0.50 seconds
Game - Display to (All players) the text: |cffffff00 the scor...
Wait 0.50 seconds
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
winsPlayer[2] Greater than winsPlayer[1]
Then - Actions
Game - Display to (All players) the text: (-|cff4f4fff + ((Name of Player 2 (Blue)) + ( - |cffffff00 + ((String(winsPlayer[2])) + |r -))))
Game - Display to (All players) the text: (-|cffff4f4f + ((Name of Player 1 (Red)) + ( - |cffffff00 + ((String(winsPlayer[1])) + |r -))))
Wait 0.50 seconds
Game - Display to (All players) the text: (-|cff4f4fff + ((Name of Player 2 (Blue)) + ( - |cffffff00 + (Wins! + |r -))))
Else - Actions
Game - Display to (All players) the text: (-|cffff4f4f + ((Name of Player 1 (Red)) + ( - |cffffff00 + ((String(winsPlayer[1])) + |r -))))
Game - Display to (All players) the text: (-|cff4f4fff + ((Name of Player 2 (Blue)) + ( - |cffffff00 + ((String(winsPlayer[2])) + |r -))))
Wait 0.50 seconds
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
winsPlayer[1] Greater than winsPlayer[2]
Then - Actions
Game - Display to (All players) the text: (-|cffff4f4f + ((Name of Player 1 (Red)) + ( - |cffffff00 + (Wins! + |r -))))
Else - Actions
Game - Display to (All players) the text: |cffff4fff - Draw -
Wait 1.50 seconds
Game - Display to (All players) the text: |cffffff00 the game...
Set VariableSet winsPlayer[1] = 0
Set VariableSet winsPlayer[2] = 0
Set VariableSet currentRound = 0
Set VariableSet subRound = 0
Set VariableSet scenerioShuffleCount = 0
Set VariableSet scenerioShuffleCount = 0
Wait 10.00 seconds
Trigger - Run StartRound <gen> (checking conditions)
I just felt like adding in an alternate form of score would be good. I meant to make this the tiebreaker, but I forgot to make that actually happen..
GoldScore
Events
Time - Every 0.50 seconds of game time
Conditions
Actions
Player - Set Player 1 (Red).Current gold to ((Player 1 (Red) Current gold) + ((Player 1 (Red) Food used) - (Player 2 (Blue) Food used)))
Player - Set Player 2 (Blue).Current gold to ((Player 2 (Blue) Current gold) + ((Player 2 (Blue) Food used) - (Player 1 (Red) Food used)))
Trigger - Run Tezahurat <gen> (checking conditions)
So the icons don't add up.
RemoveHero
Events
Unit - A unit Becomes revivable
Conditions
((Triggering unit) is A Hero) Equal to True
Actions
Unit - Remove (Triggering unit) from the game
What language is your native Language? I'm jealous, I only know English..
Kamera
Events
Player - Player 1 (Red) types a chat message containing -cam as An exact match
Player - Player 2 (Blue) types a chat message containing -cam as An exact match
Player - Player 3 (Teal) types a chat message containing -cam as An exact match
Player - Player 4 (Purple) types a chat message containing -cam as An exact match
Player - Player 5 (Yellow) types a chat message containing -cam as An exact match
Player - Player 6 (Orange) types a chat message containing -cam as An exact match
Player - Player 8 (Pink) types a chat message containing -cam as An exact match
Player - Player 9 (Gray) types a chat message containing -cam as An exact match
Player - Player 10 (Light Blue) types a chat message containing -cam as An exact match
Player - Player 11 (Dark Green) types a chat message containing -cam as An exact match
Player - Player 12 (Brown) types a chat message containing -cam as An exact match
Player - Player 2 (Blue) types a chat message containing -far as An exact match
Player - Player 3 (Teal) types a chat message containing -far as An exact match
Player - Player 4 (Purple) types a chat message containing -far as An exact match
Player - Player 5 (Yellow) types a chat message containing -far as An exact match
Player - Player 6 (Orange) types a chat message containing -far as An exact match
Player - Player 8 (Pink) types a chat message containing -far as An exact match
Player - Player 9 (Gray) types a chat message containing -far as An exact match
Player - Player 10 (Light Blue) types a chat message containing -far as An exact match
Player - Player 11 (Dark Green) types a chat message containing -far as An exact match
Player - Player 12 (Brown) types a chat message containing -far as An exact match
Conditions
Actions
Camera - Set (Triggering player)'s camera Height Offset to 360.00 over 0.00 seconds
Damn that was a lot of typing. Usually I say I love the sound of my own voice, it's equally true that I love the feeling of keys on my fingertips.
Don't worry, I enjoyed it.
PS: If anyone has any questions (OR CRITIQUE) I am interested to hear, even if that's a DM, I'm curious for people's thoughts and opinions especially if there are things I could have done better.
The FindTargets system was hugely overkill, but assuming it doesn't prove to be ridiculous, I thought it may be useful for me elsewhere and I might as well, but if/when I do implement it elsewhere, I wont use GUI and will make it much more efficient, so maybe save the GUI related critiques, if any has one and keep in mind I would rewrite it.
It's ironically the first time my work got used in my code, normally it's the other way around, but essentially the Batrider AoE check is a variance report like I might do on my inventory at work XD (and yes, that was the biggest piece of motivation for me).
WoW. This is better than i expected. Now the problem is, i am not familiar with Reforged system. I have opened both versions and now i have started create same triggers into 1.26. I need only one information. All of these triggers works with outdated version?
By the way you did good job. Terrain looks amazing.
WoW. This is better than i expected. Now the problem is, i am not familiar with Reforged system. I have opened both versions and now i have started create same triggers into 1.26. I need only one information. All of these triggers works with outdated version?
By the way you did good job. Terrain looks amazing.
WoW. This is better than i expected. Now the problem is, i am not familiar with Reforged system. I have opened both versions and now i have started create same triggers into 1.26. I need only one information. All of these triggers works with outdated version?
By the way you did good job. Terrain looks amazing.
Ah, I wish asked the version, I would have avoided that for you.
Let me know if you have any trouble copying, or probably just post the issue here and someone can help if I'm busy.
This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
By continuing to use this site, you are consenting to our use of cookies.