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!
I have to ask how does trading resources actually work and when someone can't and WHY. I don't really even know where to begin and what details to share so I'm just gonna leave the map so you can see for yourself and hopefully know what's wrong and why teal can't trade to light blue and gray; and why light blue can't trade to gray (but can to teal??). There are two versions: for classic WE and reforged WE. Preferably reforged if you have it (SD settings though). Is it something with the outlay, triggers, settings?
Via the 'Use Custom Forces' option in the 'Force Properties' menu, found on the WE toolbar ( 'Scenerio' -> 'Force Properties' ).
Setting the aspect of an alliance via Triggers
Depending on what your needs are, you would choose one over the other.
If the alliances/ resource trading options will never be changed AND you have no other reason not to use the 'Use Custom Forces' option from the 'Force Properties' menu, then the 'Use Custom Forces' option in the 'Force Properties' menu is the way to go
If the alliances/ resource trading options will change, then setting the aspect of an alliance via Triggers will be your best option.
I'll cover both briefly.
Allowing Resource Sharing via the 'Use Custom Forces' option in the 'Force Properties' menu:
Using the WE toolbar, click on the tab labelled 'Scenerio' and click on 'Force Properties' from the drop-down options.
At the top-left corner of the 'Force Properties' window, you will see a checkbox labelled 'Use Custom Forces' - Select this.
You may now Add, Remove, or Rename Forces (groups of Players) and set the aspect of the alliance for that force
Whether the players on that force are allied, share a victory, share vision, share limited unit control, or fully shared units.
If Players do not share vision then they cannot share limited unit control.
If Players do no share limited unit control then they cannot fully share units.
You do not have to be allied to share victory, vision, or units.
If you select the 'Allied' checkbox for a Force, then all Players on that Force will be able to share resources with one another via the 'Allies F11' menu.
Allowing Resource Sharing via setting the aspect of an alliance via Triggers:
This trigger action will allow Player 1 to give resources to Player 2: (Player 2 will still not be able to give resources to Player 1)
Player - For Player 1 (Red), turn Alliance (non-aggression) On toward Player 2 (Blue)
This trigger action will allow Player 2 to give resources to Player 1: (Player 1 will still not be able to give resources to Player 2)
Player - For Player 2 (Blue), turn Alliance (non-aggression) On toward Player 1 (Red)
These trigger actions together will allow Player 1 and Player 2 each to give resources to the other:
Player - For Player 1 (Red), turn Alliance (non-aggression) On toward Player 2 (Blue)
Player - For Player 2 (Blue), turn Alliance (non-aggression) On toward Player 1 (Red)
Another important piece of the 'Allies F11' menu resource trading that you should keep in mind if you are no aware of it already is that it is subject to upkeep.
All shared resources cost the giver the given amount, but the receiving player will have their upkeep applied to the amount:
If I have Low Upkeep and you give me 100 Gold, you will lose 100 Gold, but I will only get 70 Gold.
If I have High Upkeep and you give me 100 Gold, you will lose 100 Gold, but I will only get 40 Gold.
PS: Another somewhat important aspect of the 'Allies F11' menu resource trading is that the increment can be set from the 'Gameplay Constants' menu, found on the WE toolbar ( 'Advanced' -> 'Gameplay Constants' ). Conveniently, these are the two topmost items on the gigantic list:
'Ally Trading Increment - Control Click' (default is 200)
'Ally Trading Increment - Normal Click' (default is 100)
In my 15+ years of experience playing Warcraft 3, I have never learned how to perform a 'Control Click'... if someone knows how let me know lol!
Via the 'Use Custom Forces' option in the 'Force Properties' menu, found on the WE toolbar ( 'Scenerio' -> 'Force Properties' ).
Setting the aspect of an alliance via Triggers
Depending on what your needs are, you would choose one over the other.
If the alliances/ resource trading options will never be changed AND you have no other reason not to use the 'Use Custom Forces' option from the 'Force Properties' menu, then the 'Use Custom Forces' option in the 'Force Properties' menu is the way to go
If the alliances/ resource trading options will change, then setting the aspect of an alliance via Triggers will be your best option.
I'll cover both briefly.
Allowing Resource Sharing via the 'Use Custom Forces' option in the 'Force Properties' menu:
Using the WE toolbar, click on the tab labelled 'Scenerio' and click on 'Force Properties' from the drop-down options.
At the top-left corner of the 'Force Properties' window, you will see a checkbox labelled 'Use Custom Forces' - Select this.
You may now Add, Remove, or Rename Forces (groups of Players) and set the aspect of the alliance for that force
Whether the players on that force are allied, share a victory, share vision, share limited unit control, or fully shared units.
If Players do not share vision then they cannot share limited unit control.
If Players do no share limited unit control then they cannot fully share units.
You do not have to be allied to share victory, vision, or units.
If you select the 'Allied' checkbox for a Force, then all Players on that Force will be able to share resources with one another via the 'Allies F11' menu.
Allowing Resource Sharing via setting the aspect of an alliance via Triggers:
This trigger action will allow Player 1 to give resources to Player 2: (Player 2 will still not be able to give resources to Player 1)
Player - For Player 1 (Red), turn Alliance (non-aggression) On toward Player 2 (Blue)
This trigger action will allow Player 2 to give resources to Player 1: (Player 1 will still not be able to give resources to Player 2)
Player - For Player 2 (Blue), turn Alliance (non-aggression) On toward Player 1 (Red)
These trigger actions together will allow Player 1 and Player 2 each to give resources to the other:
Player - For Player 1 (Red), turn Alliance (non-aggression) On toward Player 2 (Blue)
Player - For Player 2 (Blue), turn Alliance (non-aggression) On toward Player 1 (Red)
Another important piece of the 'Allies F11' menu resource trading that you should keep in mind if you are no aware of it already is that it is subject to upkeep.
All shared resources cost the giver the given amount, but the receiving player will have their upkeep applied to the amount:
If I have Low Upkeep and you give me 100 Gold, you will lose 100 Gold, but I will only get 70 Gold.
If I have High Upkeep and you give me 100 Gold, you will lose 100 Gold, but I will only get 40 Gold.
PS: Another somewhat important aspect of the 'Allies F11' menu resource trading is that the increment can be set from the 'Gameplay Constants' menu, found on the WE toolbar ( 'Advanced' -> 'Gameplay Constants' ). Conveniently, these are the two topmost items on the gigantic list:
'Ally Trading Increment - Control Click' (default is 200)
'Ally Trading Increment - Normal Click' (default is 100)
In my 15+ years of experience playing Warcraft 3, I have never learned how to perform a 'Control Click'... if someone knows how let me know lol!
Tried it, doesn't work? I literally did what you said but it doesn't allow me to trade even when it's an option. Why is it like that? Also a control click is hold down the ctrl button and press the little box for giving resources.
Try making a Local Area Network game or an online game, there is no resource trading in a Single Player game, but that's the only problem left I can see..
Thanks for the control-click info! lol I figured it was something simple enough but just never figured it out/ looked it up.
Try making a Local Area Network game or an online game, there is no resource trading in a Single Player game, but that's the only problem left I can see..
Thanks for the control-click info! lol I figured it was something simple enough but just never figured it out/ looked it up.
Okay, well then sorry for not looking at your map, I thought it would have been straightforward enough but there must be something else going on so I'd have to take a look, might be able to do it at the end of the day (+13 hrs from the time of this post)
This is what I was using to test it. I'm going to download your map and see what you have going on since it still isn't working; I'm hoping I find some implementation error or more likely, these actions conflict with something else you have going on/ need to be catered toward your needs. I'm guessing that because it works fine for me when I use this test map on LAN with computers, but I wanted to share what I had in case it helps speed us along.
Just so we're on the same page: I was testing this by starting a Local Area Network match and adding two computer players and using the chat based triggers I made for this test map.
My hope is that you would repurpose the actions in these triggers by fitting them to the events which should cause resource trading to be enabled/disabled. The examples I made alter the tradability individually per player, and I'm hoping once we are both fully up-to-snuff on the concept that you will have the knowledge to apply the actions in such a way to achieve exactly what you want (maybe you want trading allowed within a team at certain times, maybe only specific players at specific times, et c.). So ultimately, let's try to focus on understanding the general function, and then we'll move toward applying it exactly how you want (and if you need help when we come to that point, we'll do that too).
For the sake of conversation, here's what I have for triggers:
I tested it using custom forces and without custom forces, but at the end of the day I put the test-map back to not using custom forces.
I'm using one user-defined-global player variable called 'TargetPlayer" in order so make the trigger actions a little more clear.
Standard Melee Map Initialization (minus victory/defeat conditions)
Melee Initialization
Events
Map initialization
Conditions
Actions
Melee Game - Use melee time of day (for all players)
Melee Game - Limit Heroes to 1 per Hero-type (for all players)
Melee Game - Give trained Heroes a Scroll of Town Portal (for all players)
Melee Game - Set starting resources (for all players)
Melee Game - Remove creeps and critters from used start locations (for all players)
Melee Game - Create starting units (for all players)
Melee Game - Run melee AI scripts (for computer players)
giveOn
giveOn
Events
Player - Player 1 (Red) types a chat message containing -giveon as A substring
Conditions
(Length of (Entered chat string)) Greater than 8
Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Length of (Entered chat string)) Equal to 9
Then - Actions
Set VariableSet TargetPlayer = (Player((Integer((Substring((Entered chat string), 9, 9))))))
Else - Actions
Set VariableSet TargetPlayer = (Player((Integer((Substring((Entered chat string), 9, 10))))))
If ((Triggering player) Equal to TargetPlayer) then do (Skip remaining actions) else do (Do nothing)
Player - For (Triggering player), turn Alliance (non-aggression) On toward TargetPlayer
Game - Display to (All players) the text: (((Name of (Triggering player)) + can now give resources to ) + (Name of TargetPlayer))
giveOff
giveOff
Events
Player - Player 1 (Red) types a chat message containing -giveoff as A substring
Conditions
(Length of (Entered chat string)) Greater than 9
Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Length of (Entered chat string)) Equal to 10
Then - Actions
Set VariableSet TargetPlayer = (Player((Integer((Substring((Entered chat string), 10, 10))))))
Else - Actions
Set VariableSet TargetPlayer = (Player((Integer((Substring((Entered chat string), 10, 11))))))
If ((Triggering player) Equal to TargetPlayer) then do (Skip remaining actions) else do (Do nothing)
Player - For Player 1 (Red), turn Alliance (non-aggression) Off toward TargetPlayer
Game - Display to (All players) the text: (((Name of (Triggering player)) + can no longer give resources to ) + (Name of TargetPlayer))
takeOn
takeOn
Events
Player - Player 1 (Red) types a chat message containing -takeon as A substring
Conditions
(Length of (Entered chat string)) Greater than 8
Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Length of (Entered chat string)) Equal to 9
Then - Actions
Set VariableSet TargetPlayer = (Player((Integer((Substring((Entered chat string), 9, 9))))))
Else - Actions
Set VariableSet TargetPlayer = (Player((Integer((Substring((Entered chat string), 9, 10))))))
If ((Triggering player) Equal to TargetPlayer) then do (Skip remaining actions) else do (Do nothing)
Player - For TargetPlayer, turn Alliance (non-aggression) On toward (Triggering player)
Game - Display to (All players) the text: (((Name of (Triggering player)) + can now get resources from ) + (Name of TargetPlayer))
takeOff
takeOff
Events
Player - Player 1 (Red) types a chat message containing -takeoff as A substring
Conditions
(Length of (Entered chat string)) Greater than 9
Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Length of (Entered chat string)) Equal to 10
Then - Actions
Set VariableSet TargetPlayer = (Player((Integer((Substring((Entered chat string), 10, 10))))))
Else - Actions
Set VariableSet TargetPlayer = (Player((Integer((Substring((Entered chat string), 10, 11))))))
If ((Triggering player) Equal to TargetPlayer) then do (Skip remaining actions) else do (Do nothing)
Player - For TargetPlayer, turn Alliance (non-aggression) Off toward (Triggering player)
Game - Display to (All players) the text: (((Name of (Triggering player)) + can no longer get resources from ) + (Name of TargetPlayer))
I want a similar system where you can type a command, it allows you to take a unit from other players with a vote system!
The voting should work like the votekick system!
Take
Events
Player - Player 1 (Red) types a chat message containing -take as A substring
Player - Player 2 (Blue) types a chat message containing -take as An exact match
Player - Player 3 (Teal) types a chat message containing -take as An exact match
Player - Player 4 (Purple) types a chat message containing -take as An exact match
Player - Player 5 (Yellow) types a chat message containing -take as An exact match
Player - Player 6 (Orange) types a chat message containing -take as An exact match
Player - Player 7 (Green) types a chat message containing -take as An exact match
Player - Player 8 (Pink) types a chat message containing -take as An exact match
Player - Player 9 (Gray) types a chat message containing -take as An exact match
Player - Player 10 (Light Blue) types a chat message containing -take as An exact match
Player - Player 11 (Dark Green) types a chat message containing -take as An exact match
Player - Player 12 (Brown) types a chat message containing -take as An exact match
Player - Player 1 (Red) types a chat message containing -t as An exact match
Player - Player 2 (Blue) types a chat message containing -t as An exact match
Player - Player 3 (Teal) types a chat message containing -t as An exact match
Player - Player 4 (Purple) types a chat message containing -t as An exact match
Player - Player 5 (Yellow) types a chat message containing -t as An exact match
Player - Player 6 (Orange) types a chat message containing -t as An exact match
Player - Player 7 (Green) types a chat message containing -t as An exact match
Player - Player 8 (Pink) types a chat message containing -t as An exact match
Player - Player 9 (Gray) types a chat message containing -t as An exact match
Player - Player 10 (Light Blue) types a chat message containing -t as An exact match
Player - Player 11 (Dark Green) types a chat message containing -t as An exact match
Player - Player 12 (Brown) types a chat message containing -t as An exact match
Conditions
Actions
Set VariableSet Player_ChampionTaken = (Triggering player)
Set VariableSet Integer_Commands = (Integer((Substring((Entered chat string), 7, (Length of (Entered chat string))))))
Set VariableSet Integer_Vote = (((Player number of Player_ChampionTaken) - 1) / 6)
-------- --------
Game - Display to (All allies of Player 1 (Red).) for 10.00 seconds the text: ((Strings_PlayersColor[(Player number of (Player(Integer_Commands)))] + ((Name of (Player(Integer_Commands))) + |r)) + ( wants to take the Champion from + (Strings_PlayersColor[(Player number of Player_ChampionTaken)] + ((Name of Player_ChampionTaken) + |r!)
Game - Display to (All allies of Player 12 (Brown).) for 10.00 seconds the text: ((Strings_PlayersColor[(Player number of (Player(Integer_Commands)))] + ((Name of (Player(Integer_Commands))) + |r)) + ( wants to take the Champion from + (Strings_PlayersColor[(Player number of Player_ChampionTaken)] + ((Name of Player_ChampionTaken) + |r!)
-------- --------
Custom script: set bj_wantDestroyGroup = true
Unit Group - Pick every unit in (Units currently selected by Player_ChampionTaken) and do (Actions)
Loop - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
((Player(Integer_Commands)) is an ally of Player 23 (Emerald).) Equal to True
Integers_VoteYes[Integer_Vote] Greater than Integers_VoteNo[Integer_Vote]
Then - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Unit-type of (Picked unit)) Equal to West Champion
(West Champion 0014 <gen> is selected by Player_ChampionTaken.) Equal to True
Then - Actions
Unit - Change ownership of (Picked unit) to (Player(Integer_Commands)) and Change color
Selection - Select (Picked unit) for (Player(Integer_Commands))
Game - Display to (All allies of Player 1 (Red).) for 10.00 seconds the text: ((Strings_PlayersColor[(Player number of (Player(Integer_Commands)))] + ((Name of (Player(Integer_Commands))) + |r)) + ( can now take the Champion from + (Strings_PlayersColor[(Player number of Player_ChampionTaken)] + ((Name of Player_ChampionTaken) + |r.))
Else - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Unit-type of (Picked unit)) Equal to East Champion
(East Champion 0015 <gen> is selected by Player_ChampionTaken.) Equal to True
Then - Actions
Unit - Change ownership of (Picked unit) to (Player(Integer_Commands)) and Change color
Selection - Select (Picked unit) for (Player(Integer_Commands))
Game - Display to (All allies of Player 12 (Brown).) for 10.00 seconds the text: ((Strings_PlayersColor[(Player number of (Player(Integer_Commands)))] + ((Name of (Player(Integer_Commands))) + |r)) + ( can now take the Champion from + (Strings_PlayersColor[(Player number of Player_ChampionTaken)] + ((Name of Player_ChampionTaken) + |r.))
Else - Actions
Else - Actions
-------- --------
Set VariableSet Integers_VoteYes[Integer_Vote] = 1
Set VariableSet Integers_VoteNo[Integer_Vote] = 1
Take2
Events
Conditions
Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Entered chat string) Equal to -yes
Then - Actions
Set VariableSet Integers_VoteYes[Integer_Vote] = (Integers_VoteYes[Integer_Vote] + 1)
Else - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Entered chat string) Equal to -no
Then - Actions
Set VariableSet Integers_VoteNo[Integer_Vote] = (Integers_VoteNo[Integer_Vote] + 1)
Alrighty, for the sake of keeping the thread on topic, how about I make something, message you and then if you are having trouble you can either ask me or start a new thread if I'm not available. It will be a few days before I can get to it.
This is what I was using to test it. I'm going to download your map and see what you have going on since it still isn't working; I'm hoping I find some implementation error or more likely, these actions conflict with something else you have going on/ need to be catered toward your needs. I'm guessing that because it works fine for me when I use this test map on LAN with computers, but I wanted to share what I had in case it helps speed us along.
Just so we're on the same page: I was testing this by starting a Local Area Network match and adding two computer players and using the chat based triggers I made for this test map.
My hope is that you would repurpose the actions in these triggers by fitting them to the events which should cause resource trading to be enabled/disabled. The examples I made alter the tradability individually per player, and I'm hoping once we are both fully up-to-snuff on the concept that you will have the knowledge to apply the actions in such a way to achieve exactly what you want (maybe you want trading allowed within a team at certain times, maybe only specific players at specific times, et c.). So ultimately, let's try to focus on understanding the general function, and then we'll move toward applying it exactly how you want (and if you need help when we come to that point, we'll do that too).
For the sake of conversation, here's what I have for triggers:
I tested it using custom forces and without custom forces, but at the end of the day I put the test-map back to not using custom forces.
I'm using one user-defined-global player variable called 'TargetPlayer" in order so make the trigger actions a little more clear.
Standard Melee Map Initialization (minus victory/defeat conditions)
Melee Initialization
Events
Map initialization
Conditions
Actions
Melee Game - Use melee time of day (for all players)
Melee Game - Limit Heroes to 1 per Hero-type (for all players)
Melee Game - Give trained Heroes a Scroll of Town Portal (for all players)
Melee Game - Set starting resources (for all players)
Melee Game - Remove creeps and critters from used start locations (for all players)
Melee Game - Create starting units (for all players)
Melee Game - Run melee AI scripts (for computer players)
giveOn
giveOn
Events
Player - Player 1 (Red) types a chat message containing -giveon as A substring
Conditions
(Length of (Entered chat string)) Greater than 8
Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Length of (Entered chat string)) Equal to 9
Then - Actions
Set VariableSet TargetPlayer = (Player((Integer((Substring((Entered chat string), 9, 9))))))
Else - Actions
Set VariableSet TargetPlayer = (Player((Integer((Substring((Entered chat string), 9, 10))))))
If ((Triggering player) Equal to TargetPlayer) then do (Skip remaining actions) else do (Do nothing)
Player - For (Triggering player), turn Alliance (non-aggression) On toward TargetPlayer
Game - Display to (All players) the text: (((Name of (Triggering player)) + can now give resources to ) + (Name of TargetPlayer))
giveOff
giveOff
Events
Player - Player 1 (Red) types a chat message containing -giveoff as A substring
Conditions
(Length of (Entered chat string)) Greater than 9
Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Length of (Entered chat string)) Equal to 10
Then - Actions
Set VariableSet TargetPlayer = (Player((Integer((Substring((Entered chat string), 10, 10))))))
Else - Actions
Set VariableSet TargetPlayer = (Player((Integer((Substring((Entered chat string), 10, 11))))))
If ((Triggering player) Equal to TargetPlayer) then do (Skip remaining actions) else do (Do nothing)
Player - For Player 1 (Red), turn Alliance (non-aggression) Off toward TargetPlayer
Game - Display to (All players) the text: (((Name of (Triggering player)) + can no longer give resources to ) + (Name of TargetPlayer))
takeOn
takeOn
Events
Player - Player 1 (Red) types a chat message containing -takeon as A substring
Conditions
(Length of (Entered chat string)) Greater than 8
Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Length of (Entered chat string)) Equal to 9
Then - Actions
Set VariableSet TargetPlayer = (Player((Integer((Substring((Entered chat string), 9, 9))))))
Else - Actions
Set VariableSet TargetPlayer = (Player((Integer((Substring((Entered chat string), 9, 10))))))
If ((Triggering player) Equal to TargetPlayer) then do (Skip remaining actions) else do (Do nothing)
Player - For TargetPlayer, turn Alliance (non-aggression) On toward (Triggering player)
Game - Display to (All players) the text: (((Name of (Triggering player)) + can now get resources from ) + (Name of TargetPlayer))
takeOff
takeOff
Events
Player - Player 1 (Red) types a chat message containing -takeoff as A substring
Conditions
(Length of (Entered chat string)) Greater than 9
Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Length of (Entered chat string)) Equal to 10
Then - Actions
Set VariableSet TargetPlayer = (Player((Integer((Substring((Entered chat string), 10, 10))))))
Else - Actions
Set VariableSet TargetPlayer = (Player((Integer((Substring((Entered chat string), 10, 11))))))
If ((Triggering player) Equal to TargetPlayer) then do (Skip remaining actions) else do (Do nothing)
Player - For TargetPlayer, turn Alliance (non-aggression) Off toward (Triggering player)
Game - Display to (All players) the text: (((Name of (Triggering player)) + can no longer get resources from ) + (Name of TargetPlayer))
Wow, sorry I didn't realize I was in you thread. I didn't read the title and just replied.
I'm guessing I'm going to be guessing a lot lol I'm hoping it's a game with 1 hero, but I don't want to blow up this topic with another topic so I'm gonna stop guessing here lol
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.