Staredit Newtork
Community
StarCraft
Games
Site
Favourites
Display Text, for all players, without repeating

Creator: mAdnAyze
Time: Jul 11 2008, 12:35 pm

Post #1     mAdnAyze Jul 11 2008, 12:35 pm

[Avatar]
 offline contact
basically whenever i play the map, the text only displays for certain players or 1 player.

I have triggers for taking over bases, right. These base capture triggers (in their actions) have "Create Mojo (Scout) at location "Player check" for "current player." The purpose of this was to make it possible to have another trigger made for Force 1 (all human players), that would display certain text depending on which player owns the "Mojo" (which is created in a seperate isolated area).

I know that Player 1 triggers run first, then Player 2 etc., and checking off Force 1 is the same as making the same trigger for all players in the force. So here are the three triggers that matter:


Trigger("Player 4","Player 5","Player 7"){
Conditions:
Bring("Current Player", "Men", "Base 1", At least, 1);
Bring("Current Player", "Buildings", "Base 1", Exactly, 0);
Actions:
Set Deaths("Player 8", "Zerg Spire", Set To, 21);
Give Units to Player("Foes", "Current Player", "Buildings", All, "Base 1");
Create Unit("Current Player", "Mojo (Scout)", 1, "Display Captured Town, Player Check");
Preserve Trigger();

Trigger("Force 1"){
Conditions:
Deaths("Player 8", "Zerg Spire", Exactly, 21);
Bring("Special Squad Units", "Mojo (Scout)", "Display Captured Town, Player Check", At least, 1);
Actions:
Display Text Message(Always Display, "BAM BAM BAM!");
Minimap Ping("Town, Western Region: Terkay");
Preserve Trigger();

Trigger("Player 7"){
Conditions:
Deaths("Player 8", "Zerg Spire", At least, 1);
Actions:
Set Deaths("Player 8", "Zerg Spire", Set To, 0);
Remove Unit At Location("All players", "Mojo (Scout)", All, "Display Captured Town, Player Check");
Preserve Trigger();

So, my method is have the display trigger run for P1, P2, P3, & P6 (p5 is comp), and then have a trigger for p7 that essentially turns off the display text trigger (so it doesnt run more than once for each player). But it doesnt work!!!!
The text is only displayed to p1 and sometimes p2, but never both or all players. I don't get it! What did I do wrong?? :[

Oh yeah, the Hyper Triggers are for p7 (a comp) and the trigger that turns off the display text trigger IS above the hyper triggers. Please help !
Top

Post #2     [Echo]:] Jul 11 2008, 2:12 pm

[Avatar]
Lol hi guyz! Ihm Devilusk
 offline contact
Make a trigger with all the players checked and use current player. Make sure you don't have waits though because that interferes with hyper triggers. You also need a more solidified condition trigger.
(user posted image)
“go to work, send your kids to school
follow fashion, act normal
walk on the pavements, watch T.V.
save for your old age, obey the law
Repeat after me: I am free”
Top

Post #3     Falkoner Jul 11 2008, 3:55 pm

[Avatar]
Taking StarCraft Map Making to the Limit!
 offline contact
The problem you are having is that there is an action that when the trigger runs for Player 1, the action runs and then makes the conditions false, so they no longer run for all the other players when it's time for the trigger to run for them. You should have a death count or something that triggers another trigger to display the text message, then have a trigger at the bottom of your trigger list that always resets that switch or death.
Top

Post #4     Greo Jul 12 2008, 3:04 pm

[Avatar]
Kaze no Klonoa
 offline contact
Quote from [EcHo]
Make a trigger with all the players checked and use current player. Make sure you don't have waits though because that interferes with hyper triggers. You also need a more solidified condition trigger.
You can use waits on a trigger if it is the only trigger using waits for that player. Aka, if P8 is holding the hyper triggers, you cant use any wait triggers for P8 or it'll screw stuff up.
The Mafia is watching you.
Top

Post #5     [Echo]:] Jul 12 2008, 3:13 pm

[Avatar]
Lol hi guyz! Ihm Devilusk
 offline contact
Quote from Greo
Quote from [EcHo]
Make a trigger with all the players checked and use current player. Make sure you don't have waits though because that interferes with hyper triggers. You also need a more solidified condition trigger.
You can use waits on a trigger if it is the only trigger using waits for that player. Aka, if P8 is holding the hyper triggers, you cant use any wait triggers for P8 or it'll screw stuff up.
That's not true. It still messes up the waits for other players. Hyper triggers are used to speed up all triggers in the map, therefore it affects the time for other triggers. I know this from making that mistake like 4 years ago.
(user posted image)
“go to work, send your kids to school
follow fashion, act normal
walk on the pavements, watch T.V.
save for your old age, obey the law
Repeat after me: I am free”
Top

Post #6     Doodle77[MM] Jul 12 2008, 3:28 pm

[Avatar]
 online contact
Quote from Falkoner
The problem you are having is that there is an action that when the trigger runs for Player 1, the action runs and then makes the conditions false, so they no longer run for all the other players when it's time for the trigger to run for them. You should have a death count or something that triggers another trigger to display the text message, then have a trigger at the bottom of your trigger list that always resets that switch or death.
His trigger for Force 1 doesn't make the conditions false, and he has a trigger for player 7 that makes the conditions false.
Top

Post #7     Greo Jul 12 2008, 4:53 pm

[Avatar]
Kaze no Klonoa
 offline contact
Quote from [EcHo]
That's not true. It still messes up the waits for other players. Hyper triggers are used to speed up all triggers in the map, therefore it affects the time for other triggers. I know this from making that mistake like 4 years ago.
Hyper Triggers work for all triggers, but the reason it messes up is because you can only have one Wait running per player. If you have the Hyper Triggers running under Player 8, then you can't use waits for Player 8 but you can use them for Players 1-7.
The Mafia is watching you.
Top

Post #8     Ahli Jul 12 2008, 5:43 pm

[Avatar]
Mappr
 offline contact
Quote from Falkoner
The problem you are having is that there is an action that when the trigger runs for Player 1, the action runs and then makes the conditions false, so they no longer run for all the other players when it's time for the trigger to run for them. You should have a death count or something that triggers another trigger to display the text message, then have a trigger at the bottom of your trigger list that always resets that switch or death.

This is the solution for everyone who did not notice that.

If Player 5 captures the town, there is no chance for Player 4 to run the display trigger before Player 7 unsets it.
Trigger order: ... >>> P4 >>> P5 >>> P7 >>> ...
when P5 captures the town, only P5 and P7 get the message. If P4 captures the town, everyone gets it.

I believe that you have multiple towns to capture. So I would suggest that you use a death count of a unit that won't die ingame (e.g. mineral field type 1) to set a display index number for your Force 1 to the index number of your town:

capture town 1 -> set dc to 1 for the force
current player has exactly 1 of that dc -> display and ping at town 1 & set dc to 0 for current player

capture town 2 -> set dc to 2 for the force
current player has exactly 2 of that dc -> display and ping at town 2 & set dc to 0 for current player
.
.
.

Now every player gets that message. (there can still occure one bug, but that one would occure in your old system, too. But it's rare. [capturing 2 towns at the same time] )
(user posted image)
Top

Post #9     Roy Jul 12 2008, 6:32 pm

[Avatar]
 offline contact
Quote from Ahli
This is the solution for everyone who did not notice that.

If Player 5 captures the town, there is no chance for Player 4 to run the display trigger before Player 7 unsets it.
Trigger order: ... >>> P4 >>> P5 >>> P7 >>> ...
when P5 captures the town, only P5 and P7 get the message. If P4 captures the town, everyone gets it.

I believe that you have multiple towns to capture. So I would suggest that you use a death count of a unit that won't die ingame (e.g. mineral field type 1) to set a display index number for your Force 1 to the index number of your town:

capture town 1 -> set dc to 1 for the force
current player has exactly 1 of that dc -> display and ping at town 1 & set dc to 0 for current player

capture town 2 -> set dc to 2 for the force
current player has exactly 2 of that dc -> display and ping at town 2 & set dc to 0 for current player
.
.
.

Now every player gets that message. (there can still occure one bug, but that one would occure in your old system, too. But it's rare. [capturing 2 towns at the same time] )

There's always remedies to that, though. I mean, most maps have at least 20% of SC's units unused; I'm sure you could easily make separate death counters if capturing 2 towns at the exact same time occurs frequently. From what I'm hearing, however, the chances of that are so low that you shouldn't even bother making the triggering any more complex. I, personally, would use Ahli's method; but hey, I'm lazy :P
Maps made by Roy
New Map Types:
Interceptor Arena, Dash 2, Dash 3, Dash 4, Dash 5 (New), Cannonball (New)
Bounds:
WoW Bound, WoW Bound 2, NuBs Bound
Top

Post #10     Ahli Jul 12 2008, 6:43 pm

[Avatar]
Mappr
 offline contact
you could add the condition that everyone out of force 1 has to have exactly 0 deaths of that capture message index number. then the capture adn its message will be delayed a short time.
(user posted image)
Top

Post #11     Falkoner Jul 12 2008, 6:44 pm

[Avatar]
Taking StarCraft Map Making to the Limit!
 offline contact
Quote
Quote from Falkoner
The problem you are having is that there is an action that when the trigger runs for Player 1, the action runs and then makes the conditions false, so they no longer run for all the other players when it's time for the trigger to run for them. You should have a death count or something that triggers another trigger to display the text message, then have a trigger at the bottom of your trigger list that always resets that switch or death.
This is the solution for everyone who did not notice that. If Player 5 captures the town, there is no chance for Player 4 to run the display trigger before Player 7 unsets it. Trigger order: ... >>> P4 >>> P5 >>> P7 >>> ... when P5 captures the town, only P5 and P7 get the message. If P4 captures the town, everyone gets it. I believe that you have multiple towns to capture. So I would suggest that you use a death count of a unit that won't die ingame (e.g. mineral field type 1) to set a display index number for your Force 1 to the index number of your town: capture town 1 -> set dc to 1 for the force current player has exactly 1 of that dc -> display and ping at town 1 & set dc to 0 for current player capture town 2 -> set dc to 2 for the force current player has exactly 2 of that dc -> display and ping at town 2 & set dc to 0 for current player . . . Now every player gets that message. (there can still occure one bug, but that one would occure in your old system, too. But it's rare. [capturing 2 towns at the same time] )
Quote from Falkoner
The problem you are having is that there is an action that when the trigger runs for Player 1, the action runs and then makes the conditions false, so they no longer run for all the other players when it's time for the trigger to run for them. You should have a death count or something that triggers another trigger to display the text message, then have a trigger at the bottom of your trigger list that always resets that switch or death.

This is the solution for everyone who did not notice that.

If Player 5 captures the town, there is no chance for Player 4 to run the display trigger before Player 7 unsets it.
Trigger order: ... >>> P4 >>> P5 >>> P7 >>> ...
when P5 captures the town, only P5 and P7 get the message. If P4 captures the town, everyone gets it.

I believe that you have multiple towns to capture. So I would suggest that you use a death count of a unit that won't die ingame (e.g. mineral field type 1) to set a display index number for your Force 1 to the index number of your town:

capture town 1 -> set dc to 1 for the force
current player has exactly 1 of that dc -> display and ping at town 1 & set dc to 0 for current player

capture town 2 -> set dc to 2 for the force
current player has exactly 2 of that dc -> display and ping at town 2 & set dc to 0 for current player
.
.
.

Now every player gets that message. (there can still occure one bug, but that one would occure in your old system, too. But it's rare. [capturing 2 towns at the same time] )

Oh man, why haven't I ever thought of using Current Player? Glad to have heard that, it will help out quite a bit in a few maps of mine, because I've tried setting a death count to the number of players, and then if it's at least 1, subracting 1 from it and displaying the message, but that caused problems if people left, thanks for posting that :)
Top

Post #12     mAdnAyze Jul 12 2008, 7:59 pm

[Avatar]
 offline contact
Hey, thanks a lot for all your ideas and help. I have now found the answer to my problem though :\. It's not exactly what I wanted, but it works.

Quote
Trigger("Force 1"){
Conditions:
Deaths("Player 8", "Zerg Spire", Exactly, 21);
Bring("Special Squad Units", "Mojo (Scout)", "Display Captured Town, Player Check", At least, 1);
Actions:
Display Text Message(Always Display, "BAM BAM BAM!");
Minimap Ping("Town, Western Region: Terkay");
Preserve Trigger();

Trigger("Player 7"){
Conditions:
Deaths("Player 8", "Zerg Spire", At least, 1);
Actions:
Set Deaths("Player 8", "Zerg Spire", Set To, 0);
Remove Unit At Location("All players", "Mojo (Scout)", All, "Display Captured Town, Player Check");
Preserve Trigger();

I modified both these triggers, and now they're like this:

Trigger("Player 8"){
Conditions:
Deaths("Player 8", "Zerg Spire", At least, 1);
Actions:
Wait(100);
Set Deaths("Player 8", "Zerg Spire", Set To, 0);
Remove Unit At Location("All players", "Mojo (Scout)", All, "Display Captured Town, Player Check");
Set Deaths("Special Squad Units", "Zerg Extractor", Set To, 0);
Preserve Trigger();

Trigger("Force 1"){
Conditions:
Deaths("Player 8", "Zerg Spire", Exactly, 21);
Bring("Special Squad Units", "Mojo (Scout)", "Display Captured Town, Player Check", At least, 1);
Deaths("Current Player", "Zerg Extractor", Exactly, 0);
Actions:
Display Text Message(Always Display, "BAM BAM BAM!");
Set Deaths("Current Player", "Zerg Extractor", Set To, 1);
Minimap Ping("Town, Western Region: Terkay");
Preserve Trigger();

I knew now that the display triggers DID work, they just weren't being given enough time to run. So instead of disabling the display triggers all at once for all players in a trigger for player 7, i made it so each display trigger turned off after being run for the specific player, and just put a wait of 100 milleseconds before the reseting of the death counts. 100 milleseconds for all the display triggers for all the players to run. I realize that the wait could be lower, I was just being carful :\.

And i put the last trigger for player 8 instead of 7 cuz it has a wait and player 7 has hypers... so yeah...
I kinda don't like having that wait there just cause i don't like waits... but it works and i don't want to waste too much time on text issues.

anyway thanks a lot, problem solved :)
Top

Post #13     Falkoner Jul 12 2008, 8:07 pm

[Avatar]
Taking StarCraft Map Making to the Limit!
 offline contact
Well, the reason why adding that wait is working, is because the conditions are not made false for the other players, until the next trigger loop, each player gets their own set of waits, so they can all run before the conditions become false. You could make it a wait 0 and it would go faster and still work.

Oh wait, read it wrong, the wait in your triggers is completely unnecessary, I believe if you just changed the order around, it would work fine, the wait allowed the conditions of the other trigger to be read before they were reset, since the trigger order was wrong.
Top
Users in this topic:


[09:16 pm]
MadZombie -- eh's pretty hawt, and doesn't afraid of anyone.
[08:53 pm]
[The Great Yam]:] -- CORBO, GET YOUR ASS ON MSN. DAMN YOU, REAL LIFE!
[08:45 pm]
MillenniumArmy -- That picture aint devilesk. It's actually cheeze's picture
[08:42 pm]
OMC)Anonymous -- QUOTE THAT AND I KILL J00
[08:42 pm]
OMC)Anonymous -- i lol'd. Devilesk is devilishly attractive
[08:42 pm]
OMC)Anonymous -- so devilesk and EcHo are liek warring?
[08:39 pm]
[Doodan]:] -- Darking is suspended
You must log in to shout.

©2003-2008 Staredit Network.
Starcraft & Starcraft II are trademarks of Blizzard Entertainment.
Site Index   |   Terms of Service   |   Privacy Policy   |   Contributions