I imagined that you would do something with player's units, so I opened it for you.
However, if you want something even shorter than that (and that's something I utterly forgotten in the answer), you can use the function expecting a point instead :
Player - Start location of player
Which simplifies the previous script :
Player Group - Pick each player in (Active Players) and do (Actions) Actions Variable - Set PlayerStartLocations[(Picked player)] = (Start location of player (Picked player))
Note 1 : Whether the order it gets from the pick order, the table stays in order since the index P is player P.
Note 2 : No player = No point.
Note 3 : If this returns an error because the Start location has no player, insert a "if" that checks "No point" from the returned value.
Combine and replace some of the previous script with this loop, and you will get a stronger one.
When you think something like this, you must create a variable as a table (a matrix with 1 dimension). I called it "PlayerStartLocations".
What you may know is that Start Locations are a certain type of points.
Events Game - Map initialization
Local variables i = 0 <Integer> radius = 10 <Integer(Constant)> points = No Point <Point[4]> groups = (Empty unit group) <Unit Group[4]>
Conditions
Actions General - Action Group: "init points" Actions Variable - Set points[1] = Start location 001 Variable - Set points[2] = Start location 002 Variable - Set points[3] = Start location 003 Variable - Set points[4] = Start location 004 General - For each integer i from 1 to 4 with increment 1, do (Actions) Actions Unit Group - Add all units in (Any units in (Region(points[i], radius)) owned by player Any Player matching Excludes : Dead, Hidden, Missile, with at most Any Amount) to groups[i] General - If (Conditions) then do (Actions) else do (Actions) If (Number of Living units in groups[i]) > 0 Then Variable - Set PlayerStartLocations[i] = (Owner of (Random Living unit from groups[i])) Else
To explain what this does :
- For each points (= start locations), find any units around the point within 10 squares.
- If the unit group has at least 1 unit, we get the unit to retrieve its owner.
So ... If I'm right, you want to set a parameter for a variable value.
Solution : Do not use trigger. Create an action definition (= an actual function).
In order :
1/ Copy-paste variables in variable section.
2/ If your trigger has conditions, add an "If-Then-Else" action.
3/ Copy-paste actions in action section, under "Then" of 2/.
4/ Add a parameter with the corresponding type for the data your want to make "dynamic" (this word is plain of sense lol).
5/ Keep events in your trigger and empty the rest.
6/ In your trigger, you can call your new action, with a parameter.
To be honest, this is only to re-arrange instructions.
In your trigger, the script will read the action, execute what's inside, get out of the action and continue the rest of the trigger.
So it will basically and naturally wait for the action to be fully completed before continueing execution on the trigger.
If you don't want this trigger to wait the end of the action, there is an option "Create thread" (as a programming term) for the action definition.
DO NOT ABUSE OF THIS OPTION : Threads are limited (though the amount had been extended), powerful, but also a pain to handle if you don't know what you do, without a global view of your variables, worse without programming notions.
And I suppose the new action will "inherit" instructions in common with multiple of your triggers.
You need to designate that missile to be "nullified".
This can be done with a "Modify Unit" Effect applied to your missile when it expires (= the impact, at that precise moment, doesn't happen ... yet).
You achieve this by giving a Behavior with duration to the missile directly or from an effect tree that applies the behavior when the missile is launched.
To go further :
- Make the missile loses its target.
- When expired, the missile's Actor will do its "impact" things. Usually, we use a "UnitDeathCustomize" to create another death effect (or simply remove it).
- When nullified, the Damage Effect is ignored. But you can do something else.
- The "Defense Drone" nullifies projectiles, you might take inspiration from its ability.
- You want to outrun missiles. When used a Boost/Burners ability, find all missiles with a Search Effect and nullify only close missiles or any currently fired missiles with your unit as target.
Open the Cutscene Editor (Shift+F7), then preview the model you want to add.
Select the model (from the view or the timeline below).
Show attach points (A) and open the model's data (Shift+D).
Look for attach points.
Two cases :
- The model has attach points :
When you add the sub-actor to your actor via Actor Events, you must specify to which attach point the actor will host the sub-actor.
Use site operations in the sub-actor to set the attach point (Ex : SOpAttachOrigin, SOpAttachWeapon).
Schema : Host actor > Sub Actor.
- The model has no attach points :
Create a "node" actor. This is an ordinary actor but the model is an invisible unit (InvisibleUnit.m3) with some regular attach points.
You can use an Alias on the "node" to facilitate the process.
And follow same instructions as the other case.
Schema : Host actor > Node Actor > Sub Actor.
And you should get your result as you want.
About aliases :
An alias is a shortcut or a tag given to an Actor. You can use them (amongst many uses) as Host for a sub-actor to quickly do the reference to one of the actors tagged in the scope tree.
To add an alias, select an Actor, look for the field "Alias+" and write as custom string the name you want. Usually starts with "_".
Note : An "alias" is slightly different than a "tech alias" (Usually starts with "Alias_") which is used for Prerequisites.
However, the suffix name of a console skin is different from its proper name in the shop.
For example the "Arcade Cabinet" skin is called "ArcadePurple" in UI, or the "Galactic" skin is called "XelNaga" in UI.
I found some IDs in the UI Editor, look for file "ConsoleSkin" or "ConsolePanel". And be sure to read and not stop to the name file (which does not reflect the correct ID).
0.949552930787063
Open the archive browser (Window -> Console ; Type "browse").
Search for "stretchline", you will find some models that might be at your convenience.
As for the ability range (the famous circle), I used to play with a workaround actor with a model as well. A few exists that fits the expected visual.
And because of the actor events that work similarly to Range actor.
Have a nice day.
0.949564065776404
Hello,
If I remember correctly, since the model is a decal (a "painted" texture over another), the terrain cells must not be hidden.
Else, you may use 3D models and adjust position/rotation with Site Ops or even its scale in actor events.
Have a nice day.
0
Hello,
Take example on the Xel'Naga tower.
The ability type responsible to share the unit is "Interact".
You should not have difficulties to make it.
However, you must create Upgrades with help of Prerequisites (default way to create them).
Look for the Engeering Bay, it's one way (and laborious but more controllable) to organize upgrade levels.
More information here :
https://sc2mapster.fandom.com/wiki/Data/Abilities/Interact
Have a nice day.
0
I imagined that you would do something with player's units, so I opened it for you.
However, if you want something even shorter than that (and that's something I utterly forgotten in the answer), you can use the function expecting a point instead :
Player - Start location of player
Which simplifies the previous script :
Note 1 : Whether the order it gets from the pick order, the table stays in order since the index P is player P.
Note 2 : No player = No point.
Note 3 : If this returns an error because the Start location has no player, insert a "if" that checks "No point" from the returned value.
Combine and replace some of the previous script with this loop, and you will get a stronger one.
Have a nice day.
0
Hello,
Let's take a 4 players example :
1 -> 4
2 -> 2
3 -> 1
4 -> 3
When you think something like this, you must create a variable as a table (a matrix with 1 dimension). I called it "PlayerStartLocations".
What you may know is that Start Locations are a certain type of points.
To explain what this does :
- For each points (= start locations), find any units around the point within 10 squares.
- If the unit group has at least 1 unit, we get the unit to retrieve its owner.
- We save the integer.
- A 0-value means no player on the location.
Have a good day !
0
Hello,
Can you go to the Model tab, look for your Spider Mines model and look for the field "Selection Layer" ?
Usually, the layer for structures is 2 and common units 0.
I had a similar issue where my building was not selected with others but being selected with army units, which should not happen.
You may have the same problem.
To learn more :
https://sc2mapster.fandom.com/wiki/Data/Models/Generic#Art:_Selection_Layer
Have a nice day.
1.86599112337659
Hello,
You can use footprints with "block vision" flag. Make it hollow so that the unit inside don't see the outside and conversely.
Create a footprint for each shape you need for your clouds.
Set the footprint to the unit as "Footprint" (not "Placement footprint").
Have a nice day.
0
Hello,
This is the thread for map review for PRIME HUNTER.
Feel free to write whatever you want (ofc, respect rules) about your review, what's good, what's bad.
If you think your thoughts are more suited for feedback :
https://www.sc2mapster.com/forums/player-zone/map-feedback/269781-prime-hunter
Link to project on CurseForge : https://www.curseforge.com/sc2/maps/prime-hunter
Link to project on SC2Mapster : https://www.sc2mapster.com/projects/prime-hunter
Link to project thread : https://www.sc2mapster.com/forums/resources/project-workplace/265253-prime-hunter-2-0
Thank you for playing !
0
Hello,
This is the thread for map feedback for PRIME HUNTER.
Feel free to write whatever you want (ofc, respect rules) about your experience and your feelings.
If you think your thoughts are more suited for a review :
https://www.sc2mapster.com/forums/player-zone/map-review/269782-prime-hunter
Link to project on CurseForge : https://www.curseforge.com/sc2/maps/prime-hunter
Link to project on SC2Mapster : https://www.sc2mapster.com/projects/prime-hunter
Link to project thread : https://www.sc2mapster.com/forums/resources/project-workplace/265253-prime-hunter-2-0
Thank you for playing !
0
Hello,
Copy-paste it.
Open MapSource. Go to Terrain Editor, use Selection Tool (or press "Space" key), click and drag, you should see a green overlay. Copy it with CTRL+C.
Open MapTarget. Go to Terrain Editor, paste it with CTRL+V. Align the green overlay. Left-click. Tadaaa.
Switch between both documents with "Window" tab.
Repeat for doodads, units, points, regions, cameras. I'm not sure about terrain objects and paths.
Save.
A/ Close MapSource.
OR
B/ Close both. Close editor to flush memory if necessary. Open editor.
Have a nice day !
0
Hello,
I'll try to understand your request.
So ... If I'm right, you want to set a parameter for a variable value.
Solution : Do not use trigger. Create an action definition (= an actual function).
In order :
1/ Copy-paste variables in variable section.
2/ If your trigger has conditions, add an "If-Then-Else" action.
3/ Copy-paste actions in action section, under "Then" of 2/.
4/ Add a parameter with the corresponding type for the data your want to make "dynamic" (this word is plain of sense lol).
5/ Keep events in your trigger and empty the rest.
6/ In your trigger, you can call your new action, with a parameter.
To be honest, this is only to re-arrange instructions.
In your trigger, the script will read the action, execute what's inside, get out of the action and continue the rest of the trigger.
So it will basically and naturally wait for the action to be fully completed before continueing execution on the trigger.
If you don't want this trigger to wait the end of the action, there is an option "Create thread" (as a programming term) for the action definition.
DO NOT ABUSE OF THIS OPTION : Threads are limited (though the amount had been extended), powerful, but also a pain to handle if you don't know what you do, without a global view of your variables, worse without programming notions.
And I suppose the new action will "inherit" instructions in common with multiple of your triggers.
---
Hope you will find your way.
Have a nice day.
1.86927977219485
Hello,
You need to designate that missile to be "nullified".
This can be done with a "Modify Unit" Effect applied to your missile when it expires (= the impact, at that precise moment, doesn't happen ... yet).
You achieve this by giving a Behavior with duration to the missile directly or from an effect tree that applies the behavior when the missile is launched.
To go further :
- Make the missile loses its target.
- When expired, the missile's Actor will do its "impact" things. Usually, we use a "UnitDeathCustomize" to create another death effect (or simply remove it).
- When nullified, the Damage Effect is ignored. But you can do something else.
- The "Defense Drone" nullifies projectiles, you might take inspiration from its ability.
- You want to outrun missiles. When used a Boost/Burners ability, find all missiles with a Search Effect and nullify only close missiles or any currently fired missiles with your unit as target.
Have a nice day !
0
Hello,
Open the Cutscene Editor (Shift+F7), then preview the model you want to add.
Select the model (from the view or the timeline below).
Show attach points (A) and open the model's data (Shift+D).
Look for attach points.
Two cases :
- The model has attach points :
When you add the sub-actor to your actor via Actor Events, you must specify to which attach point the actor will host the sub-actor.
Use site operations in the sub-actor to set the attach point (Ex : SOpAttachOrigin, SOpAttachWeapon).
Schema : Host actor > Sub Actor.
- The model has no attach points :
Create a "node" actor. This is an ordinary actor but the model is an invisible unit (InvisibleUnit.m3) with some regular attach points.
You can use an Alias on the "node" to facilitate the process.
And follow same instructions as the other case.
Schema : Host actor > Node Actor > Sub Actor.
And you should get your result as you want.
About aliases :
An alias is a shortcut or a tag given to an Actor. You can use them (amongst many uses) as Host for a sub-actor to quickly do the reference to one of the actors tagged in the scope tree.
To add an alias, select an Actor, look for the field "Alias+" and write as custom string the name you want. Usually starts with "_".
Note : An "alias" is slightly different than a "tech alias" (Usually starts with "Alias_") which is used for Prerequisites.
Have a nice day.
0
Hello,
Solution 1 :
Use an Event "Unit Enters/Leaves Region".
Convert the region into a Rectangle Region.
Look at the attached image.
Do the math.
Then, in Actions, remove the triggering unit.
Solution 2 :
Place a region in the Terrain Editor.
In trigger, on init map, use "Set Camera Bounds" with the new region and "do" the minimap bounds too.
Create a new trigger, add an Event "Unit Enters/Leaves Region" with the new region.
Then, in Actions, remove the triggering unit.
Have a nice day.
0
Hello,
I don't know where you found that action.
However, the suffix name of a console skin is different from its proper name in the shop.
For example the "Arcade Cabinet" skin is called "ArcadePurple" in UI, or the "Galactic" skin is called "XelNaga" in UI.
I found some IDs in the UI Editor, look for file "ConsoleSkin" or "ConsolePanel". And be sure to read and not stop to the name file (which does not reflect the correct ID).
Have a nice day.