1. Updated Resource Submission Rules: All model & skin resource submissions must now include an in-game screenshot. This is to help speed up the moderation process and to show how the model and/or texture looks like from the in-game camera.
    Dismiss Notice
  2. DID YOU KNOW - That you can unlock new rank icons by posting on the forums or winning contests? Click here to customize your rank or read our User Rank Policy to see a list of ranks that you can unlock. Have you won a contest and still havn't received your rank award? Then please contact the administration.
    Dismiss Notice
  3. The raddest synthwave tracks were chosen - Check out our Music Contest #12 - Results and congratulate the winners!
    Dismiss Notice
  4. The poll for Hive's 12th Concept Art Contest is up! Go cast your vote for your favourite genie!
    Dismiss Notice
  5. Travel to distant realms and encounter scenes unknown to the common folk. The Greatest of Adventures is upon us with the 8th Cinematic Contest. Join in on a fun ride.
    Dismiss Notice
  6. The 18th Icon Contest is ON! Choose any ingame unit and give him/her Hero abilities. Good luck to all.
    Dismiss Notice
  7. Contestants are to create a scene set in the Stone Age. Come and see what you can come up with. We wish you the best of luck!
    Dismiss Notice
  8. Colour outside the lines! Techtree Contest #13 is a go. The contest is optionally paired.
    Dismiss Notice
  9. Greetings cerebrates, our Swarm needs new spawners that will have numerous children. Join the HIVE's 31st Modeling Contest - Spawners and Spawned! The contest is optionally paired.
    Dismiss Notice
  10. Check out the Staff job openings thread.
    Dismiss Notice
Dismiss Notice
60,000 passwords have been reset on July 8, 2019. If you cannot login, read this.

[Feedback] Request Features for JASS and the World Editor

Discussion in 'Patch & Reforged Discussion' started by TriggerHappy, Aug 23, 2018.

  1. deepstrasz

    deepstrasz

    Map Reviewer

    Joined:
    Jun 4, 2009
    Messages:
    10,257
    Resources:
    1
    Maps:
    1
    Resources:
    1
    Stretching means for units and special effects, not just scale manipulation but also x, y and z modifications of their size. From there on, you could trigger this sort of size according to a unit's size, if for example you'd want a custom shield bar overhead.

    Allow to play string animations for special effects too instead of just being forced to select one of the default animation names. What if the used model has other animation names that don't match?

    Give us, please :D, the option to attach special FX on units with offset, basically like modifying the attachment point (distance).

    Leakless floating text with the capability for a huge amount of it at the same time on various places on the map/screen. Right now, there's a limit of how much of it can be created/seen.
     
  2. deepstrasz

    deepstrasz

    Map Reviewer

    Joined:
    Jun 4, 2009
    Messages:
    10,257
    Resources:
    1
    Maps:
    1
    Resources:
    1
    Means to disable unit control as if that unit would belong to another player so that you could make things like StarCraft Carrier Interceptors.
    A workaround would be using another allied player for that since there are 24 now but what if you want a 24 or anyway, more than 12player StarCraft style map?

    A way to make units unselectable (Locust) without them gaining idclip powers. This would be useful for units like StarCraft Reaver Scarabs.

    (Also, setting the damage type to Spells in a unit's object editor field shows as normal ingame. There's also a Normal armour type aside Medium but both have the same descriptions with the exception of their icons. Normal has the Light armour's icon. Possibly, there might also be defense percentage differences between Normal and Medium. Tested and Normal defense type doesn't take higher damage from Normal attack type as it says, only Medium does.
    We could use custom armour and attack types, to add. 6, well 7 might not be enough for some projects.)
     
    Last edited: Aug 19, 2019
  3. deepstrasz

    deepstrasz

    Map Reviewer

    Joined:
    Jun 4, 2009
    Messages:
    10,257
    Resources:
    1
    Maps:
    1
    Resources:
    1
    Since we have hide ability for units, what if we could have disable/hide training/building possibilities for a specified unit since we don't have any way to verify if a unit is currently training (no order string for that)?
    Also, a way to order a unit to cancel training, researching etc.
    And of course, not just Trained Unit for conditions but also Training Unit etc. GUI is quite incomplete since the release of the game.

    Means to remove the Rally Point on units that train other but are able to move. Or, make the unit move to that location and/or attack the target of the right click. Workarounds are painful when using MUI. Or an option to leave the Rally Point on the unit's position.

    Separate researches/upgrades for specific units as opposed to for every unit of a certain type.
    Same with ability tooltips edit through triggers.

    An action trigger like continue order since we can use the order variable to store a unit's current order but now we can only use it as a condition but with limited use as there are only some few string available to choose from.
    Or an option not to stop a unit's current order by ordering it to do things like deactivate Immolation. Maybe Reset Ability Cooldown could have an option like this? Removing and adding the ability back makes the unit delay any sudden orders for some reason while it continuing its previous one for a short time. Even the buff remains if removed by triggers.
    I used Divine Shield with 0.01 duration instead but it briefly cancels enemy attacks. Avatar makes the unit invulnerable to magic and increases scaling value.
    Thank the World Editor god that Berserk doesn't interfere with any current orders.

    A way to separate the smart order when it is used on the ground and on a unit or enemy unit.
    Currently this crashes the map (the loop does):

    • Interceptor Attack Order
      • Events
        • Unit - A unit Is issued an order targeting an object
      • Conditions
      • Actions
        • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
          • If - Conditions
            • And - All (Conditions) are true
              • Conditions
                • (Ordered unit) Equal to ShieldedUnitPal
                • ((Target unit of issued order) belongs to an enemy of Player 1 (Red)) Equal to True
                • CarrierInterceptorInteger Less than or equal to 8
                • (Issued order) Not equal to CarrierMoveOrder
          • Then - Actions
            • Game - Display to (All players) the text: ATTACK ORDER SMART
            • Set InterceptorTargetUnit = (Target unit of issued order)
            • Unit - Order ShieldedUnitPal to Attack InterceptorTargetUnit
            • Set InterceptorTargetUnit = (Target unit of issued order)
            • Set CarrierAttackOrder = (Issued order)
            • Set InterceptorTargetPoint = (Position of InterceptorTargetUnit)
            • Wait until ((ShieldedUnitPal is in (Units within 800.00 of InterceptorTargetPoint)) Equal to True), checking every 0.10 seconds
            • Custom script: call RemoveLocation (udg_InterceptorTargetPoint)
            • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
              • If - Conditions
                • (Target unit of issued order) Equal to InterceptorTargetUnit
              • Then - Actions
                • For each (Integer InterceptorAttackOrderInteger) from 1 to CarrierInterceptorInteger, do (Actions)
                  • Loop - Actions
                    • Unit - Order CarrierInterceptorUnit[InterceptorAttackOrderInteger] to Attack InterceptorTargetUnit
              • Else - Actions
          • Else - Actions

    • Carrier Order Store
      • Events
        • Unit - A unit Is issued an order targeting a point
      • Conditions
      • Actions
        • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
          • If - Conditions
            • And - All (Conditions) are true
              • Conditions
                • (Ordered unit) Equal to ShieldedUnitPal
                • (Issued order) Not equal to CarrierAttackOrder
          • Then - Actions
            • Unit - Order ShieldedUnitPal to Move To (Target point of issued order)
            • Set CarrierMoveOrder = (Issued order)
          • Else - Actions

    • Interceptor Move Order
      • Events
        • Time - Every 0.05 seconds of game time
      • Conditions
      • Actions
        • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
          • If - Conditions
            • And - All (Conditions) are true
              • Conditions
                • (Issued order) Equal to CarrierMoveOrder
                • (Ordered unit) Equal to CarrierInterceptorUnit[CarrierInterceptorInteger]
          • Then - Actions
            • Set CarrierPoint = (Position of ShieldedUnitPal)
            • For each (Integer InterceptorMoveOrderInteger) from 1 to CarrierInterceptorInteger, do (Actions)
              • Loop - Actions
                • Unit - Order CarrierInterceptorUnit[InterceptorMoveOrderInteger] to Move To CarrierPoint
            • Custom script: call RemoveLocation (udg_CarrierPoint)
          • Else - Actions


    Tried it with current order as a condition instead of issued order and the same happens.
     
  4. IcemanBo

    IcemanBo

    Joined:
    Sep 6, 2013
    Messages:
    6,165
    Resources:
    22
    Maps:
    3
    Spells:
    11
    Template:
    1
    Tutorials:
    4
    JASS:
    3
    Resources:
    22
    I know you will probably prefer GUI solution, but just in case, TrainingDetection v3.1a. In trigger "Cancel Demo" there's an exmple:

    • Set u = (Picked unit)
    • Custom script: call CancelTrainingFront(udg_u)

    Could you elaborate what you mean?:)

    It's doable, but not in GUI.

    The crash trigger, the move point order ends in an infinite loop with the trigger "point order", I guess. Try to turn off the trigger before you move order, and then turn it on again.

    Also, could you elaborate what you meant with the text about continue orders?
     
  5. deepstrasz

    deepstrasz

    Map Reviewer

    Joined:
    Jun 4, 2009
    Messages:
    10,257
    Resources:
    1
    Maps:
    1
    Resources:
    1
    Basically what happens when you cast Berserk, current unit orders, be they movement, ability casting or attack related, don't cease. So I want a trigger to basically remove the stopping/pausing of units when casting their spells.
    Yeah, I'm stupid.

    This seems to work

    • Interceptor Order Type Set Target Order
      • Events
        • Unit - A unit Is issued an order targeting an object
      • Conditions
      • Actions
        • -------- Smart Target is an Enemy --------
        • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
          • If - Conditions
            • And - All (Conditions) are true
              • Conditions
                • (Ordered unit) Equal to ShieldedUnitPal
                • ((Target unit of issued order) belongs to an enemy of Player 1 (Red)) Equal to True
                • CarrierInterceptorInteger Less than or equal to 8
          • Then - Actions
            • Game - Display to (All players) the text: ATTACK ORDER SMART
            • Set CarrierAttacksON = True
            • Set InterceptorTargetUnit = (Target unit of issued order)
            • Set InterceptorTargetPoint = (Position of InterceptorTargetUnit)
          • Else - Actions
        • -------- Smart Target is an Ally --------
        • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
          • If - Conditions
            • And - All (Conditions) are true
              • Conditions
                • (Ordered unit) Equal to ShieldedUnitPal
                • ((Target unit of issued order) belongs to an ally of Player 1 (Red)) Equal to True
                • CarrierInterceptorInteger Less than or equal to 8
          • Then - Actions
            • Game - Display to (All players) the text: MOVE ORDER SMART
            • Set CarrierAttacksON = False
          • Else - Actions

    • Interceptor Order Type Set Point Order
      • Events
        • Unit - A unit Is issued an order targeting a point
      • Conditions
      • Actions
        • -------- Smart Target is a Point --------
        • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
          • If - Conditions
            • And - All (Conditions) are true
              • Conditions
                • (Ordered unit) Equal to ShieldedUnitPal
                • CarrierInterceptorInteger Less than or equal to 8
          • Then - Actions
            • Game - Display to (All players) the text: POINT ORDER SMART
            • Set CarrierAttacksON = False
          • Else - Actions

    • Interceptor Attack n Move Order
      • Events
        • Time - Every 0.10 seconds of game time
      • Conditions
      • Actions
        • -------- Interceptors Move --------
        • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
          • If - Conditions
            • CarrierAttacksON Equal to False
          • Then - Actions
            • Set CarrierPoint = (Position of ShieldedUnitPal)
            • For each (Integer InterceptorMoveOrderInteger) from 1 to CarrierInterceptorInteger, do (Actions)
              • Loop - Actions
                • Unit - Order CarrierInterceptorUnit[InterceptorMoveOrderInteger] to Move To CarrierPoint
            • Custom script: call RemoveLocation (udg_CarrierPoint)
          • Else - Actions
        • -------- Interceptors Attack --------
        • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
          • If - Conditions
            • CarrierAttacksON Equal to True
          • Then - Actions
            • Set CarrierAttacksON = False \\Still working on this; trying to make the interceptors move to the caster/carrier until the target is in range.
            • Wait until ((ShieldedUnitPal is in (Units within 800.00 of InterceptorTargetPoint)) Equal to True), checking every 0.10 seconds
            • Custom script: call RemoveLocation (udg_InterceptorTargetPoint)
            • Set CarrierAttacksON = True \\As mentioned above.
            • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
              • If - Conditions
                • (InterceptorTargetUnit is alive) Equal to True
              • Then - Actions
                • For each (Integer InterceptorAttackOrderInteger) from 1 to CarrierInterceptorInteger, do (Actions)
                  • Loop - Actions
                    • Unit - Order CarrierInterceptorUnit[InterceptorAttackOrderInteger] to Attack InterceptorTargetUnit
              • Else - Actions
          • Else - Actions

     
  6. IcemanBo

    IcemanBo

    Joined:
    Sep 6, 2013
    Messages:
    6,165
    Resources:
    22
    Maps:
    3
    Spells:
    11
    Template:
    1
    Tutorials:
    4
    JASS:
    3
    Resources:
    22
    One needs to base the spells on such instant spells like you mentioned berserk. There are more like defend, manashield, immolation, devineshield and also some item based abilities can be used that give armor/speed/damage bonus when used etc. Most abilities, like ones that involve ordering a point/unit or so will always interrupt the current order. So the ability base can decide it.

    There are some abilities, like avatar, bearform, ravenform, morph, robogoblin, battleroar, stomp, thunderclap that also interrupt the current order, but when finished they will continue with old order again, like moving.
     
  7. Prometheus3375

    Prometheus3375

    Joined:
    Jul 20, 2018
    Messages:
    91
    Resources:
    0
    Resources:
    0
    If location of smart order is null, smart order is on target.
     
  8. deepstrasz

    deepstrasz

    Map Reviewer

    Joined:
    Jun 4, 2009
    Messages:
    10,257
    Resources:
    1
    Maps:
    1
    Resources:
    1
    Here's something more bizarre:

    True collision off with units not being obstacles. Air units are pushed by other collision off air units. Locust is fine but you can't select units with it.
    Because the air unit is pushed, triggers detect that as it would be ordered to move/smart. Actually, for some reason flying units are detected as moving for some reason when flying even if they are attacking during that time and not actually/ordered moving/smarting.

    EDIT: scrap the part where air units that stand still are considered moving/smarting. It was an issue related to acquisition range that made me think that.

    EDIT2: figured out how to make the Carrier not be moved by interceptors coming to it and remaining "under" without hiding them. I had to make them change position every 0.1s as if they'd be moving around the Carrier.




    Hide UI for attack in the unit editor makes triggers not detect the unit attacking or using the smart order to attack. Not sure if intended.
     
    Last edited: Aug 20, 2019
  9. Mythic

    Mythic

    Joined:
    Apr 24, 2012
    Messages:
    7,702
    Resources:
    101
    Models:
    86
    Icons:
    4
    Maps:
    3
    Spells:
    6
    Tutorials:
    2
    Resources:
    101
    • Option to actually save saved games, whether or not the map in question is modified at a later date
    Saved Games currently become unplayable once the map is modified.
     
    Last edited: Aug 20, 2019
  10. deepstrasz

    deepstrasz

    Map Reviewer

    Joined:
    Jun 4, 2009
    Messages:
    10,257
    Resources:
    1
    Maps:
    1
    Resources:
    1
    Modify a specific unit's movement speed past the limit of the constants. Say you want usual Warcraft III spells to slow or haste units like they do in the original game but you want a custom spell to be able to do more than that.

    Pheonix Fire type spell which targets a specific target, the one the Pheonix Fire-able unit is actually attacking.
    Best it'd be to have a way to make units attack a desired target while moving. Sure using dummy units might be fine but not when you want to have StarCraft like Carrier units sending multiple units at once while they are also creating dummy units for their attacks.
     
  11. deepstrasz

    deepstrasz

    Map Reviewer

    Joined:
    Jun 4, 2009
    Messages:
    10,257
    Resources:
    1
    Maps:
    1
    Resources:
    1
    Option to disable unit animations either only through triggers or also using the object editor. That way you don't have to actually edit models and import them.
     
  12. Ether

    Ether

    Joined:
    Nov 13, 2017
    Messages:
    622
    Resources:
    3
    Skins:
    3
    Resources:
    3
    Wander with possibility to attack units that come close to it or desired range.

    Also options to choose if unit can sleep at day or night or only weather dependent.
     
  13. deepstrasz

    deepstrasz

    Map Reviewer

    Joined:
    Jun 4, 2009
    Messages:
    10,257
    Resources:
    1
    Maps:
    1
    Resources:
    1
    Rally is an ability and can be removed via the remove ability action.

    The problem now is, that for a unit to be able to train another it has to be a building. Weirdly, heroes can do this. Making a unit a building creates some issues like modifying the flying height.

    EDIT: these units cannot move while training (same with selling units) and their training ability disappears after recovering from polymorph. Flying height remains the same regardless of how much it is. Because they are set as buildings, these units call nearby neutral hostile camps to them.
    Bug: if you turn the unit back to a normal units and don't remove the trained unit when it was set as a building, then it will still be able to train the unit.
     
    Last edited: Aug 25, 2019
  14. deepstrasz

    deepstrasz

    Map Reviewer

    Joined:
    Jun 4, 2009
    Messages:
    10,257
    Resources:
    1
    Maps:
    1
    Resources:
    1
    .gif portraits?
     
  15. Wrda

    Wrda

    Joined:
    Nov 18, 2012
    Messages:
    1,060
    Resources:
    3
    Maps:
    1
    Spells:
    2
    Resources:
    3
    Code (vJASS):

    //Checks whether a player group is empty or not
    native IsForceEmpty takes force f returns boolean

    //new type
    type datetime extends ...
    //returns local date time
    native GetDateTimeNow takes nothing returns datetime

    //returns Utc time, (it's the same as GMT)
    native GetDateTimeUtcNow takes nothing returns datetime

    //sets the ability that will trigger the damage event. Useful only for triggered spells.
    native SetEventDamageAbilityId takes integer abilCode returns nothing

    //returns the ability that triggered the damage event
    native GetEventDamageAbilityId takes nothing returns integer

    //applies a buff of an ability to a unit. no damage, only ability's effects, allowing it to stack
    //with itself (one buff), and/or stack with other abilities based on the first one (with another buff)
    native UnitApplyUnitBuff takes unit source, unit target, integer abilityId, integer level, real duration, boolean stackself, boolean stackothers returns nothing

    native RemoveUnitBuff takes unit whichUnit, integer buffId returns nothing



    //These group of natives should act exactly like a unit casting a spell, except no mana cost, cooldown, etc.
    //The only issue is auras. These natives should NOT trigger spell events.
    //returns false on untargertable context (eg Inferno over water, Force of Nature with no trees)
    native ApplySpellEffectUnitToPoint takes unit source, real x, real y, integer abilcode, integer level returns boolean

    //returns null if the target is invalid (eg Spell immune, invulnerable, etc)
    native ApplySpellEffectPointToTarget takes unit source, real x, real y, real x2, real y2, integer abilcode, integer level returns null

    //same as above
    native ApplySpellEffectUnitToTarget takes unit source, unit target, integer abilcode, integer level returns unit

    //returns false if affected caster only (Storm Crow Form, Metamorphosis)
    native ApplySpellEffect takes unit source, integer abilcode, integer level returns boolean




    /*fix GroupEnumUnitsInRange, GroupEnumUnitsInRangeOfLoc, GroupEnumUnitsInRangeCounted and  
    GroupEnumUnitsInRangeOfLocCounted. As they don't take in consideration units' collision*/


    //Make both events act the instant before units die so we can check whether a unit has a specific buff or not,
    //Currently units who die have no buff, so there's no proper way to check them.
    EVENT_PLAYER_UNIT_DEATH
    EVENT_UNIT_DEATH

    //Able to detect units in range of other units dynamically we have TriggerRegisterUnitInRange
    //but it is for a single unit.
    EVENT_PLAYER_UNIT_INRANGE

    //Same for detecting when unit leaves the range of another unit
    EVENT_PLAYER_UNIT_LEFTRANGE

    //GetTriggerUnit() is the unit who becomes in range with another, but there's no way to detect which is
    //source
    native GetRangeSourceUnit takes nothing returns unit


    //triggered by holy light, Heal, Essence of blight, etc.
    //How much was the amount of healing, source, target, also can be triggered by ...UNIT_DAMAGED if the
    //damage was manipulated to heal
    EVENT_PLAYER_UNIT_HEALED

    //Able to detect idle units, fires when it becomes idle
    EVENT_PLAYER_UNIT_IDLE
    EVENT_UNIT_IDLE
    native IsUnitIdle takes unit whichUnit returns boolean

    //Forgive me if this already exists, but it has been so many natives that I forgot counting them xD
    //Returns the bonus damage
    native GetUnitBonusDamage takes unit whichUnit, integer weaponIndex returns integer

    //Checks if path is available for units to run from point A to B.
    native IsPathingBlocked takes real x, real y, real x2, real xy, pathingtype t returns boolean

    //Get closest unit/units from group
    native GetClosestUnit takes real x, real y, boolexpr filter returns unit
    native GetClosestUnitInRange takes real x, real y, real radius, boolexpr filter returns unit
    native GetClosestUnitInGroup takes real x, real y, group g returns unit
    native GetClosestNUnits takes real x, real y, boolexpr filter returns group
    native GetClosestNUnitsInRange takes real x, real y, real radius, integer n, boolexpr filter returns group
    native GetClosestNUnitsInGroup takes real x, real y, integer n, group source returns group

    //Creating units should not cause a permanent leak.
    native CreateUnit takes player id, integer unitid, real x, real y, real face returns unit

    //Make it possible to remove terrain deformation leaks, and fix its desync issues.

    //There's been rumors this native is buggy, needs to be checked.
    //https://www.hiveworkshop.com/threads/a-major-issue-with-firstofgroup-iterating-method.285635/
    native FirstOfGroup takes group g returns unit

    //Returns the X and Y center of a tile
    native GetTileCenterX takes real x returns real
    native GetTileCenterY takes real x returns real
    //Currently, we need to do this:
    function GetTileCenter takes real pos returns real
        return I2R(R2I(RAbsBJ(pos)/128 + 0.5)*128)
    endfunction
    /*Problems: 1 - R2I function can bug because of floating points errors  
                2 - Works correctly only on positive values, even if you use RAbsBJ, you still have to turn it
    negative afterwards*/


    //Able to make widget groups (destructables and item groups) and use them as we use unit groups and
    //player groups (force)
     

    Object Editor - Fix orderstring thing; add a field "Ability Behavior" to channel so computer players
    can actually cast triggered spells without having to manually code the behavior. For example, if I want a custom
    ability (with channel) that will have like a meteor crashing from the sky and is supposed to be used against a
    group of units (point and AoE type of ability) so we would set "Ability Behavior - Blizzard" (could be another
    ability) and we all could be happy that computer players would cast the spell without making any additional
    code.
    Let us be able to cast multiple abilities based on the same one, just like we can do with "channel" ability because
    of the "Based Order ID" field
    Option to stack buffs with themselves and/or similar based buffs (a "Slow" spell cast on a unit will have 50% slow
    movement speed and attack speed, if the same spell is cast again on the same unit, it would have 100%,if we want
    it done by increment; if we want it in relation to the last spell cast buff (+50% of the last 50% one, in this
    case, it will result into 75%); if we want it exponentially (for a roar like spell: UnitDamage =
    UnitDamage + UnitDamage*Factor; the next spell cast will do: ResultOfLast = ResultOfLast + ResultOfLast*Factor)
    Meaning if a unit has 100 damage and buff is 50%, first cast unit will have a total of 150 damage, by the
    second cast, it is 225 damage.
    Able to make buffs dispellable/undispellable for all dispelling abilities, and for some only. In object editor
    and triggers.
    What exactly is the difference bewtween IsPlayerInForce and BlzForceHasPlayer?
    Able to make tech tree requirements on hired units and sold items. Even if you try, it doesn't work.
    Able to make abilities ignore spell immunity dynamically.
    Able to make Abilities whether uninteruptable or not when cast.

    Edit: Format sucked because wrote this in notepad++, fixed it.
     
    Last edited: Sep 3, 2019