Blizzard готовят Producer Update для Warcraft 3

» опубликован
Более месяца назад на Hiveworkshop появилась тема, созданная одним из сотрудников Blizzard. Там пользователи высказывают свои предложения касательно модмейкерской части игры, а точнее — скриптового языка JASS. Некоторые предложения даже собираются ввести в игру уже в следующем обновлении.

Список обновлений (англ.)

Источник: www.hiveworkshop.com/threads/producer-update-natives-list.301405
Перечисленные функции, скорее всего, будут добавлены в патче 1.29.0.

    //NEW FEATURES
    
        LIBRARIES & SCOPES
        http://www.wc3c.net/vexorian/jasshelpermanual.html#lib
    
        GLOBALS BLOCK
        The ability to declare global variable directly in code. This tremendously facilitates installation of new system without the need for a separate 'variable creator' trigger.
        http://www.wc3c.net/vexorian/jasshelpermanual.html#gdf

        STRUCTS
        http://www.wc3c.net/vexorian/jasshelpermanual.html#stru
    
        2D ARRAYS
        http://www.wc3c.net/vexorian/jasshelpermanual.html#twodarray


    //NEW NATIVES

        Dynamically Change Fields At Runtime: the following is just a list of commonly requested
        properties that map-makers would enjoy having access to via triggers:
        - Get and set a unit’s ability/item cooldown time
        - Get and set attack damage, armor, attack range, attack speed, attack index, backswing, etc.
        - Get and set object editor fields at runtime, e.g. a unit’s model, a unit’s attack missile, set tooltips
        for units/abilities/items, set icons, etc.
        - Set a unit’s facing, pitch, and roll instantly (setting a unit’s facing currently has turn-speed delay)
        - Better control over a unit’s portrait
        - Set a unit’s maximum hit points and mana points++
        - Get a unit’s damage type
        - ‘Attack released event’ - an event that fires when an attack is released i.e. released projectile

        Some example are provided below, but in order of importance, 'getters' come before 'setters'. (eg: GetUnitGoldCost() is more important that SetUnitGoldCost(),
        though having both would be tremendously helpful in a lot of circumstances)

//Fixes
native GetWidgetLife takes widget w returns real                                             //The real is not exact? Details lacking.
native EnableOcclusion takes boolean flag returns nothing                                    //Possibly in reference to occlusion being broken in general? Details lacking.
native TriggerRegisterUnitStateEvent takes trigger whichTrigger, unit whichUnit, unitstate whichState, limitop opcode, real limitval returns event
                                                                                             //EQUAL is broken? Details lacking.
native AddUnitToStock takes unit whichUnit, integer unitId, integer currentStock, integer stockMax returns nothing
                                                                                             //The main tooltip of the added unit will always ignore color tags so the text will always appear to be white. Color tags should be parsed the same as all unit tooltips.
/*
    With each of call of this function, the minimap is modified in a bugged way :
    The positions of units and the fog of war are modified to fit to the new camera bound but not the terrain, nor the destructables.
    The minimap is compressed (vertically) according to the current camera's rotation. With a rotation of 90°, there is no compression. With a rotation of 227.40, the minimap is fully compressed. Between 227.5 and 312.6, the game crashes.
    Moreover, the camera bounds will also be adjusted according to the rotation of the current camera. The camera bounds created will be a rectangle going trough the 4 points given and whose sides will be parallel to the camera.
*/
native SetCameraBounds takes real x1, real y1, real x2, real y2, real x3, real y3, real x4, real y4 returns nothing

/*
    Destroy all bound triggeraction objects.
    Currently it only destroys all bound events, triggercondition and the trigger itself leaving all triggeraction objects to leak unless explicitly destroyed before.
    Also destroy all currently scheduled trigger threads from that trigger.
    Currently destroying a trigger with scheduled trigger threads can cause handle stack corruption which has a high chance to cause Warcraft III to crash.
*/
native DestroyTrigger takes trigger whichTrigger returns nothing

function SmartCameraPanBJ takes player whichPlayer,location loc,real duration returns nothing
                                                                                             //This BJ function is currently not net safe. Details explained: https://www.hiveworkshop.com/threads/fixing-smartcamerapanbj-desync.243334/

constant native GetEventDamage takes nothing returns real                                    //Return the amount of life damage taken through an imperfect mana shield. Currently returns 0 or negative only even if the unit takes life damage through the shield.

//Change suggestions
native SetUnitState takes unit whichUnit,unitstate whichUnitState,real newVal returns nothing
                                                                                             //Add support for modifying both maximum and regeneration for life and mana. Currently only supports modifying current life.
native DisplayTimedTextToPlayer takes player toPlayer, real x, real y, real duration, string message returns nothing
                                                                                             //Change it so that displaying text to a player with unique x and y does not move any other messages.

//NEW CONSTANTS
constant destructableevent DESTRUCTIBLE_DEATH                //Triggers when a destructible dies. I put this here to standardise the way destructible events work.
constant destructableevent DESTRUCTIBLE_COMBAT               //Triggers when a destructible takes damage from a combat source. Ignores tree-harvesting.
constant destructableevent DESTRUCTIBLE_HARVESTED            //Triggers when a destructible takes damage from a tree-harvest ability. Ignores combat damage.
constant destructableevent DESTRUCTIBLE_DAMAGED              //Triggers when a destructible takes any damage at all.

constant minimapevent PING                                   //Trigger on a minimap ping
constant minimapevent MINIMAP_BUTTON_PRESSED                 //Triggers when one of the associated minimap buttons have been pressed.

constant mouseevent MOUSE_CLICK                              //Triggers on any mouse click. Conditions determine what mouse button that was (eg left click, right click, side clicks (aka mouse 4, mouse 5), etc)
constant mouseevent MOUSE_RELEASE                            //Triggers when a mouse click is released. Again conditions determine what button was released.
constant mouseevent MOUSE_MOVE                               //Triggers when the mouse begins to move.
constant mouseevent MOUSE_WHEEL_ANY                          //Triggers when the mouse wheel scrolls up or down
constant mouseevent MOUSE_WHEEL_UP                           //Triggers when the mouse wheel scrolls up
constant mouseevent MOUSE_WHEEL_DOWN                         //Triggers when the mouse wheel scrolls down

constant unitstate UNIT_STATE_LIFE_REGEN                     //Unit current life regeneration. Compatible with GetUnitState and SetUnitState.
constant unitstate UNIT_STATE_MANA_REGEN                     //Unit current mana regeneration. Compatible with GetUnitState and SetUnitState.

constant playerevent EVENT_PLAYER_ABILITY_PRESSED            //The event triggers when a player presses an ability button and begins targeting. Requires netsync from the player so is not instant. Most spell event natives like trigger unit and spell ability id work in response to this event.

constant unitevent EVENT_UNIT_DAMAGE_POINT                   //Same as above, but a unitevent instead.
constant unitevent EVENT_UNIT_MOVES                          //Fires when a unit moves.
constant unitevent EVENT_UNIT_IDLES                          //Similarly to how worker icons appear at the bottom-left corner of the screen when idling, this event detects when ANY unit is idling.
constant unitevent EVENT_UNIT_ENTERS_COMBAT                  //What it says on the tin - this event fires when a unit enters combat. Will be useful for in/out of combat regeneration, for example.
constant unitevent EVENT_UNIT_EXITS_COMBAT                   //What it says on the tin - this event fires when a unit leaves combat. Will be useful for in/out of combat regeneration, for example.
constant unitevent EVENT_UNIT_EVADE                          //The event triggers when a unit evades an attack using an evade ability (Evasion, Drunken Brawler, etc).
constant unitevent EVENT_UNIT_REMOVED                        //The event triggers the instant before the unit is removed from the game. Units get removed from the game by a variety of sources such as triggers, decaying or merging.
constant unitevent EVENT_UNIT_RESOURCE_RETURN                //The event triggers when a unit returns a resource such as from gathering.
constant unitevent EVENT_UNIT_RESOURCE_HARVEST               //The event triggers when a unit harvests a resource. This event means the amount the unit is carrying has changed.

constant playerunitevent EVENT_PLAYER_UNIT_DAMAGE_POINT      //This triggers when a unit's attack is released - aka when a melee unit hits its target or a ranged unit launches a missile
constant playerunitevent EVENT_PLAYER_UNIT_DAMAGED           //Same as EVENT_UNIT_DAMAGED except as a player unit event.
constant playerunitevent EVENT_PLAYER_UNIT_EVADE             //Same as EVENT_UNIT_EVADE except as a player unit event.
constant playerunitevent EVENT_PLAYER_UNIT_REMOVED           //Same as EVENT_UNIT_REMOVED except as a player unit event.
constant playerunitevent EVENT_PLAYER_UNIT_RESOURCE_RETURN   //Same as EVENT_UNIT_RESOURCE_RETURN except as a player unit event.
constant playerunitevent EVENT_PLAYER_UNIT_RESOURCE_HARVEST  //Same as EVENT_UNIT_RESOURCE_HARVEST except as a player unit event.

constant movementtype MOVEMENT_TYPE_NONE                     //Used by natives below.
constant movementtype MOVEMENT_TYPE_FOOT                     //Used by natives below.
constant movementtype MOVEMENT_TYPE_HORSE                    //Used by natives below.
constant movementtype MOVEMENT_TYPE_FLY                      //Used by natives below.
constant movementtype MOVEMENT_TYPE_HOVER                    //Used by natives below.
constant movementtype MOVEMENT_TYPE_FLOAT                    //Used by natives below.
constant movementtype MOVEMENT_TYPE_AMPHIBIOUS               //Used by natives below.

constant armortype ARMOR_TYPE_SMALL                          //Used by natives below.
constant armortype ARMOR_TYPE_MEDIUM                         //Used by natives below.
constant armortype ARMOR_TYPE_LARGE                          //Used by natives below.
constant armortype ARMOR_TYPE_FORTIFIED                      //Used by natives below.
constant armortype ARMOR_TYPE_NORMAL                         //Used by natives below.
constant armortype ARMOR_TYPE_HERO                           //Used by natives below.
constant armortype ARMOR_TYPE_DIVINE                         //Used by natives below.
constant armortype ARMOR_TYPE_UNARMORED                      //Used by natives below.
constant armortype ARMOR_TYPE_UNKNOWN                        //Invalid armor type. Has been observed randomly in game, likely as the result of a non fatal memory corruption error to the armor type field.

constant herostat HERO_STAT_STR                              //Used by natives below.
constant herostat HERO_STAT_AGI                              //Used by natives below.
constant herostat HERO_STAT_INT                              //Used by natives below.

constant mousebutton MOUSE_BUTTON_LEFT                       //Used by natives below.
constant mousebutton MOUSE_BUTTON_RIGHT                      //Used by natives below.
constant mousebutton MOUSE_BUTTON_MIDDLE                     //Used by natives below.

constant catalog CATALOG_UNIT                                //Used by natives below.
constant catalog CATALOG_ITEM                                //Used by natives below.
constant catalog CATALOG_ABILITY                             //Used by natives below.
constant catalog CATALOG_BUFF                                //Used by natives below.
constant catalog CATALOG_UPGRADE                             //Used by natives below.
constant catalog CATALOG_DOODAD                              //Used by natives below.
constant catalog CATALOG_DESTRUCTABLE                        //Used by natives below.

constant resourcetype RESOURCE_GOLD                          //Used by natives below.
constant resourcetype RESOURCE_LUMBER                        //Used by natives below.

//Terrain
function GetWaterZ takes real x, real y returns real                                //returns the water level (shallow or deep) since currently GetLocationZ() ignores water level.
function GetCliffZ takes real x, real y returns real                                //related to this https://www.hiveworkshop.com/threads/calculating-a-flying-units-flyheight.270925/

//Special Effects
function AddSpecialEffectEffect takes string modelName, effect targetEffect, string attachPointName returns effect
                                                                                             //Create a special effect attached to another special effect.
function SetSpecialEffectEffect takes effect fx, effect targetEffect, string attachPointName returns nothing
                                                                                             //Moves a special effect to the target special effect.

function SetSpecialEffectX takes effect fx, real x returns nothing                           //Moves a special effect relative to the map x axis.
function SetSpecialEffectY takes effect fx, real y returns nothing                           //Moves a special effect relative to the map y axis.
function SetSpecialEffectZ takes effect fx, real z returns nothing                           //Moves a special effect relative to the map z axis.
function SetSpecialEffectLoc takes effect fx, location where returns nothing                 //Moves a special effect to the location.
function SetSpecialEffectTarget takes effect fx, widget targetWidget, string attachPointName returns nothing
                                                                                             //Moves a special effect to the target.

function GetLocalSpecialEffectX takes effect fx returns real                                 //Returns the map relative x coordinate of where the effect is positioned. Not net safe for target effects.
function GetLocalSpecialEffectY takes effect fx returns real                                 //Returns the map relative y coordinate of where the effect is positioned. Not net safe for target effects.
function GetLocalSpecialEffectZ takes effect fx returns real                                 //Returns the map relative z coordinate of where the effect is positioned. Not net safe for target effects.

function SetSpecialEffectScale takes effect fx, real x, real y, real z returns nothing       //Scales a special effect the same way one can scale destructables.
function SetSpecialEffectRoll takes effect fx, real angle returns nothing                    //Set the roll angle of a special effect.
function SetSpecialEffectPitch takes effect fx, real angle returns nothing                   //Set the pitch angle of a special effect.
function SetSpecialEffectFacing takes effect fx, real angle returns nothing                  //Sets the XY facing angle of a special effect.
function SetSpecialEffectColor takes effect fx, playercolor color returns nothing            //Alters the team color used by a special effect.

//Unit Functions
/*
    List of useful unit functions. Some are often requested.
*/                       
function GetUnitIconPath takes unit u returns string                                         //Returns the command card icon path of a unit.
function GetUnitTypeIconPath takes integer unitId returns string                             //Returns the command card icon path of a unit type.
function SetUnitIconPath takes unit u, string path returns nothing                           //Changes the command card icon path of a unit.

function GetUnitModelPath takes unit u returns string                                        //Returns the model path of a unit.
function GetUnitTypeModelPath takes integer unitId returns string                            //Returns the model path of a unit type.
function SetUnitModelPath takes unit u, string path returns nothing                          //Changes the model path of a unit.

function SetUnitName takes unit u, string name returns nothing                               //Changes the unit type name of a unit to the specified string.
function SetHeroName takes unit u, string name returns nothing                               //Changes the hero name of a hero unit to the specified name. Does nothing to non hero units.
function SetUnitLevel takes unit u, integer newLevel returns nothing                         //Set the unit level of a non hero unit to the specified level. Does nothing to heroes.

function SetUnitMaxSpeed takes unit u, real r returns nothing                                //Does maximum and minimum unit speed even do anything? If so, the ability to modify those would be welcome. Units could be made to accelerate and decelerate like in Sc2.
function GetUnitMaxSpeed takes unit u, nothing returns real
function SetUnitMinSpeed takes unit u, real r returns nothing
function GetUnitMinSpeed takes unit u, nothing returns real

function GetUnitAttackTime takes unit u, integer index returns real                          //Returns the cooldown time of a particular attack index (0 or 1) of a unit, with attack speed modifiers (eg: Glove of Haste, Cripple) factored in.
function SetUnitAttackTime takes unit u, integer index, real amount returns nothing          //Set the base cooldown time of a particular attack index of a unit, reapplying all attack speed modifiers as appropiate.
function ModifyUnitAttackTime takes unit u, integer index, real fraction returns nothing     //Applies fraction attack speed modifier to a particular attack index of a unit, being treated the same as other attack speed modifiers including limits.
function GetUnitAttackDamageMin takes unit u, integer index returns integer                  //Returns the minimum attack damage of a particular attack index of a unit, with damage modifiers (eg: Command Aura, Claws of Attack +16) factored in.
function GetUnitAttackDamageMax takes unit u, integer index returns integer                  //Returns the maximum attack damage of a particular attack index of a unit, with damage modifiers factored in.
function SetUnitAttackDamageMin takes unit u, integer index, integer min returns nothing     //Changes the base minimum attack damage of a particular attack index of a unit to an exact value, reapplying all damage modifiers as appropiate. Will override bonuses from upgrades.
function SetUnitAttackDamageMax takes unit u, integer index, integer max returns nothing     //Changes the base maximum attack damage of a particular attack index of a unit to an exact value, reapplying all damage modifiers as appropiate. Will override bonuses from upgrades.
function ModifyUnitAttackDamage takes unit u, integer index, integer amount returns nothing  //Applies damage modifier to a particular attack index of a unit, being treated the same as other damage modifiers.

function SetUnitMovementType takes unit u, movementtype movementType returns nothing         //Changes the movement type of a unit to the specified movement type.
function GetUnitMovementType takes unit u returns movementtype                               //Get the movement type of a unit.

function SetUnitVisionType takes unit u, boolean flying                                      //Changes the vision mechanics of a unit to either be ground (can be occluded by terrain) or flying (absolute).

function SetItemStock takes unit u, integer itemId, integer stock returns nothing            //Set the stock of an item id in a shop to the specified number. Maximum stock count is respected and if full cooldown progress will be lost.
function SetItemStockMax takes unit u, integer itemId, integer stock returns nothing         //Set the maximum stock permitted of an item id in a shop to the specified number. Maximum stock count is respected and if below current stock cooldown and stock items will be lost.
function GetItemStock takes unit u, integer itemId returns integer                           //Get the stock available of an item id in a shop.
function GetItemStockMax takes unit u, integer itemId returns integer                        //Get the maximum stock permitted of an item id in a shop.

function GetLocalUnitZ takes unit u returns real                                             //Get the exact map relative z coordinate of the unit origin. This is the visual height of the unit in the game world. Not net safe.
function GetUnitCollisionSize takes unit returns real                                        //Seturns the collision size of a unit. The returned value factors in collision size limits so might be smaller than in the object editor.
function SetUnitFacingInstant takes unit u, real facingAngle returns nothing                 //Similar to SetUnitFacing but with angle change being instant with turn rate and orientation interpolation being ignored. Angle is in degrees.
function SetUnitFacingInstantRad takes unit u, real facingAngle returns nothing              //Same as SetUnitFacingInstant except angle is in radians.
function SetUnitFacingRad takes unit whichUnit, real facingAngle returns nothing             //Same as SetUnitFacing except angle is in radians.

function GetUnitAttackCooldownRemaining takes unit u returns real                            //Returns the remaining time in game seconds of the currently occuring attack cooldown. Returns 0.0 if attack is not on cooldown.
function SetUnitAttackCooldown takes unit u, real duration returns nothing                   //Sets the current attack cooldown time to a different value, potentially overriding/ignoring backswing point. Set to zero to cause the next attack to occur instantly. Can start attack cooldown.

function UnitAttackTarget takes unit whichUnit, widget target, real amount, attacktype attackType, damagetype damageType, weapontype weaponType returns boolean
                                                                                             //Similar to UnitDamageTarget but does so with the source's attack modifiers like Orb Effects, Critical Strike, Bash, Lifesteal, etc.
function UnitAttackArea takes unit whichUnit, real radius, real x, real y, real amount, attacktype attackType, damagetype damageType, weapontype weaponType, boolexpr filterFunc returns boolean
                                                                                             //Just like UnitAttackTarget(), but this takes a boolexpr argument at the end to filter out unwanted victims. This is helpful in the case of area attacks with chance modifiers like bash.

function UnitInterruptAttack takes unit u returns nothing                                    //Stops the current attack from occuring and triggers attack cooldown for the intended attack index. Call is only valid during backswing time or for trigger unit in response to EVENT_UNIT_ATTACKED and EVENT_PLAYER_UNIT_ATTACKED events.
function GetUnitArmorType takes unit u returns armortype                                     //Returns the armor type of a unit.
function SetUnitArmorType takes unit u, armortype armorType returns nothing                  //Sets the armor type of a unit.
function GetUnitArmor takes unit u, boolean includeBonuses returns real                      //Returns the armor value of a unit. If includeBonuses is true then include all armor modifiers (eg: Devotion Aura, Faerie Fire).
function SetUnitArmor takes unit u, real amount returns nothing                              //Changes the base armor value of a unit, reapplying all armor modifiers as appropiate.
function ModifyUnitArmor takes unit u, real amount returns nothing                           //Applies armor modifier to a unit, being treated the same as all other armor modifiers.

function UnitDisableMovement takes unit u, boolean flag returns nothing                      //toggles a unit's movement on or off. Currently feasible with SetUnitPropWindow to zero, but restoring requires radians but GetUnitDefaultPropWindow returns degrees. Not a big issue, but it's hidden information.
function UnitDisableTurning    takes unit u, boolean flag returns nothing                    //toggles a unit's ability to turn on or off.
function UnitDisableControl takes unit u boolean flag returns nothing                        //toggles whether a unit responds to player commands on or off. Can still respond to trigger commands.
function UnitFullDisable takes unit u, boolean flag returns nothing                          //toggles whether a unit responds to ANY commands on or off. Similar to being stunned, but will not 'unstun' until UnitFullDisable is set to false.
function UnitDisableAttack takes unit u, boolean flag returns nothing                        //Turns off one of the two attack indices. Currently feasible by adding Cargo Hold ability to the unit, but it disables both indices.
function UnitDisableSelection takes unit u, boolean flag returns nothing                     //Same as giving Locust ability to a unit (Aloc), but can be enabled/disabled without any buggy side effects.

function IsUnitSelectable takes unit u returns boolean                                       //returns true or false on whether a unit can be selected or not. Eg would return false on a unit with Locust ability (Aloc).
function IsUnitInvulnerable takes unit u returns boolean                                     //returns whether a unit is invulnerable or not

function UnitCancelTimedLife takes unit u returns nothing                                    //Cancels a previously applied UnitApplyTimedLife or automatic expiration timer of a summoned unit.
function UnitApplyTimer takes unit u, integer buffId, real timeout returns timer             //Applies a non-fatal timer to a unit that shows the time ticking down like with a spell like Avatar or Metamorphosis. When the timer expires, a TimerRegisterExpireEvent fires.
function UnitDisableItems takes unit u, boolean flag, boolean passive returns nothing        //Toggles whether a unit can use items. Item passive effects are optionally able to be turned on or off.

function GetLocalTargetAttachmentX takes widget who, string attachmentname returns real      //Get the map relative x coordinate of the specified attachment site. Not net safe.
function GetLocalTargetAttachmentY takes widget who, string attachmentname returns real      //Get the map relative y coordinate of the specified attachment site. Not net safe.
function GetLocalTargetAttachmentZ takes widget who, string attachmentname returns real      //Get the map relative z coordinate of the specified attachment site. Not net safe.

function UnitHideAbility takes unit u, integer abilityId, boolean flag returns nothing       //Shows or hide an ability command card button for the unit. Does not disable the ability itself.
function UnitDisableAbility takes unit u, integer abilityId, boolean flag returns nothing    //Enables or disables an abilty for the unit. Will also disable passives.

function GetUnitAbilityCooldownTimeout takes unit u, integer abilityId returns real          //Returns the cooldown time for an ability if the unit were to use it.
function GetUnitAbilityCooldownRemaining takes unit u, integer abilityId returns real        //Returns the remaining cooldown time of an ability on a unit.
function SetUnitAbilityCooldown takes unit u, integer abilityId, real timeout, real remaining returns nothing
                                                                                             //Modifies the current cooldown progress of an ability for a unit. Timeout will clamp remaining for logical reasons. Set timeout or remaining to zero to instantly complete cooldown.
function GetUnitAbilityManaCost takes unit u, integer abilityId returns integer              //Returns the potential mana cost of an ability for a unit.
function IsUnitAbilityOnCooldown takes unit u, integer abilityId returns boolean             //Returns true if an ability is on cooldown for a unit.

function UnitChangeUnitId takes unit u, integer unitid returns nothing                       //Changes the unit type ID of a unit. Results are the same as unit a morph ability except without needing an ability.
function ReviveUnit takes unit u returns nothing                                             //Revives a dead unit at the position of its corpse. Mechanically the same as the unit being effected by Paladin's Resurrection ability.

function GroupEnumCorpsesInRange takes group g, real x, real y, real radius, boolexpr filter returns nothing
                                                                                             //Convenience function to enum all corpses in range of a position.
function GroupEnumCorpsesInRangeloc takes group g, location whichLocation, real radius, boolexpr filter returns nothing
                                                                                             //Same as above but with location parameter.

function GetUnitGoldCost takes integer unitid returns integer                                //AI native copied to normal JASS for convince.
function GetUnitWoodCost takes integer unitid returns integer                                //AI native copied to normal JASS for convince.

function IsUnitMoving takes unit u returns boolean                                           //Returns true if a unit is trying to move. The unit might not actually be moving if it is waiting for the pathfinder to attend to it.
function IsUnitIdle takes unit u returns boolean                                             //Returns true if a unit is not moving, is not attacking, is not casting and is not using an item.
function IsUnitInCombat takes unit u returns boolean                                         //Returns true if a unit has recently attacked or been attacked. Possibly tied into the forces under attack mechanics?

function GetAbilityManaCost takes integer abilityId, integer level returns integer           //Returns the ability cost of an ability.
function SetAbilityManaCost takes integer abilityId, integer level, integer newcost returns integer
function GetAbilityCooldown takes integer abilityId, integer level returns real              //Returns the cooldown time of an ability.
function SetAbilityCooldown takes integer abilityId, integer level, integer newcool returns integer

/*
    NB: Abilities are reference from a global cache, so it stands to reason that a native that modifies independent of a unit will change that ability globally. While this is a nice
    tool to have, it would be even nicer to have the capability to modify them individually. However, this could hike up the performance cost of the game itself since every unit in the
    game will have its own personal version of that ability.
*/
function GetUnitAbilityManaCost takes unit u, integer abilityId, integer level returns integer
function SetUnitAbilityManaCost takes unit u, integer abilityId, integer level, integer newcost returns integer
function GetUnitAbilityCooldown takes unit u, integer abilityId, integer level returns real
function SetUnitAbilityCooldown takes unit u, integer abilityId, integer level, integer newcool returns integer

function GetHeroPrimaryStat takes unit u returns herostat                                    //Returns the integer code for the attribute that is set as primary. Eg if the unit is a Paladin, it returns the id for Strength.
function GetHeroPrimaryStatById takes integer unitid returns herostat                        //Same as above but references the object editor value instead of an actual unit.
function SetHeroPrimaryStat takes unit u, herostat stat returns integer                      //Allows the game to individual modify which attribute of the hero becomes its primary. Damage modifier from primary hero stat has to be reapplied.
function GetHeroStat takes herostat whichStat, unit whichHero, boolean includeBonuses returns integer
                                                                                             //Mechanically same as the GetHeroStatBJ function except takes the new native herostat constants.
function SetHeroStatEx takes unit whichHero, herostat whichStat, integer value, boolean permanent returns nothing
                                                                                             //Mechanically similar to the SetHeroStat function except takes the new native herostat constants and can set permanence.

function GetBuilderUnit takes unit building returns unit                                     //Returns the unit that constructed a building/unit. In the case of buildings this should be the unit that converted the foundation into a unit.
function GetUnitBuildProgress takes unit u returns real                                      //Returns the fraction (percent / 100) completion of a building/unit in progress. If the unit has no progress (already built) returns 1.0.
function SetUnitBuildProgress takes unit u, real fraction returns nothing                    //Modifies the fraction completion of a building/unit in progress. A fraction of 1.0 causes the unit to be instantly completed. Does nothing to a unit that is complete.
function GetUnitTrainProgress takes unit factory returns real                                //Returns the fraction completion of a unit that is being trained. Returns 1.0 if no unit is being trained.
function SetUnitTrainProgress takes unit factory, real fraction returns nothing              //Modifies the fraction completion of a unit that is currently being trained. A fraction of 1.0 causes the unit to be instantly trained. Does nothing to a factory that is not training anything.
function GetTrainingQueueSize takes unit factory returns integer                             //Returns the number of queued training orders.
function GetMaxTrainingQueueSize takes unit factory returns integer                          //Returns the maximum number of queued training orders a factory allows.
function CancelTraining takes unit factory, integer slot returns boolean                     //Cancels a train order from the training queue of a building determined by slot number (eg 0 - 6). Returns true if a unit was actually canceled.
function ClearTrainingQueue takes unit factory returns boolean                               //Equivelant to calling CancelTraining on all occupied training slots of a building. Returns true if at least 1 training order was canceled.

function GetItemAbilityCooldownRemaining takes item whichItem returns real                   //Returns the remaining cooldown time on a used item.
function GetItemAbilityCooldownTimeoutById takes integer itemId returns real                 //Returns the default timeout cooldown of an item type.
function SetItemAbilityCooldown takes item whichItem, real timeout, real remaining returns real
                                                                                             //Sets the remaining cooldown time of an item to a specific value. Timeout will clamp remaining for logical reasons and might be ignored for unowned items. Set timeout or remaining to zero to instantly complete cooldown.
function EnableItem takes item whichItem, boolean flag returns nothing                       //Enables/Disables an item. Items that are disabled provide no modifiers and cannot be used.

function GetUnitBuildTime takes integer unitid returns integer                               //AI native ported to standard JASS.
function GetHeroBuildTime takes integer unitid, player whichPlayer returns integer           //Returns the train time in seconds for a player to make the specified hero type. Factors in train time increases with sequential heroes in melee.
function GetHeroReviveTime takes unit whichUnit returns integer                              //Returns the revive time in seconds for a player to revive the specified hero if it were dead.

//Damage Event Extensions
function GetEventDamageAttackType takes nothing returns attacktype                           //In response to a damage event returns the attacktype (Spell, Hero, Chaos, etc) of the damage.
function GetEventDamageDamageType takes nothing returns damagetype                           //In response to a damage event returns the damagetype (unkown, magic, normal, enhanced, etc) of the damage.
function GetEventDamageAbilityId takes nothing returns integer                               //In response to a damage event returns the ability ID that caused the damage. This ability can be a damage spell (Flame Strike, Storm Bolt, etc) or an attack modifier ability (Cold Arrow, orb of fire, etc). Normal attack damage returns some safe default value such as 0.
function GetEventDamageUnmodified takes nothing returns real                                 //In response to a damage event returns the damage dealt to the unit before any modifications (armor, attacktype reduction, etc) were applied.
function GetEventDamageMana takes nothing returns real                                       //In response to a damage event returns the mana lost due to an active mana shield.

//Resource Event Extensions
function GetEventResourceType takes nothing returns resourcetype                             //The resource type the event responded to. For example RESOURCE_LUMBER when a wisp unit gathers lumber.
function GetEventResourceAmount takes nothing returns integer                                //The resource amount the event responded to. For example 10 when a Haunted Gold Mine extracts 10 gold.

//UI Functions
function ShowUI takes boolean flag returns nothing                                           //True/false arguments would show/hide the UI. That includes disabling the black borders at the top and bottom of the screen.
function ShowManaBar takes boolean flag returns nothing                                      //Turns mana bar display over units on or off. Whether they display depends on the player's Gameplay options but this can overwrite that for a session.
function SetPlayerHPBarColor takes player p, real red, real green, real blue returns nothing //Changes the health bar color of units belonging to a particular player.
function SetPlayerMPBarColor takes player p, real red, real green, real blue returns nothing //Changes the mana bar color of units belonging to a particular player.
function CreateBar takes real red, real green, real blue, real alpha returns bar             //'New' object type. Creates a bar (like the health bars above units) and colours them according to the values used. Eg recreating Protoss shields.
function AttachBarTarget takes bar whichBar, widget target, real z returns nothing           //Attaches a bar to a unit, destructable, item etc with the option to move it up and down the z axis.
function GetBarX takes bar whichBar returns real                                             //Returns the x coordinate of a bar.
function GetBarY takes bar whichBar returns real                                             //Returns the y coordinate of a bar.
function GetBarZ takes bar whichBar returns real                                             //Returns the z coordinate of a bar.
function SetBarPos takes bar, real x, real y, real heightOffset returns nothing              //Manually repoisitions a bar to map relative coordinates like floating texts.
function DisplayScreenMessage takes string s, real x, real y, real timeout returns nothing   //This displays a text message for a period but with respect to normalised X / Y value of the screen. Can overlap other text messages. An invalid timeout will automatically compute a timeout based on message length.
function GetLocalDisplayResolutionHorizontal takes nothing returns real                      //Returns the horizontal resolution in pixels being used to display Warcraft III for the local client. Not net safe.
function GetLocalDisplayResolutionVertical takes nothing returns real                        //Returns the vertical resolution in pixels being used to display Warcraft III for the local client. Not net safe.

//Minimap Functions
function GetPingX takes ping whichPing returns real                                          //returns the corresponding map relative x coordinate of a ping.
function GetPingY takes ping whichPing returns real                                          //returns the corresponding map relative y coordinate of a ping.
function TriggerRegisterPlayerPingEvent takes trigger whichTrigger, player whichPlayer returns event
                                                                                             //New event that fires the trigger when the specified player sends a ping. Both GetTriggerPlayer and GetTriggerPing are valid with this event.
function GetTriggerPing takes nothing returns ping                                           //In response to a player ping event returns the ping object that triggered the event.

//Mouse input functions
function GetLocalCursorTargetX takes nothing returns real                                    //Returns the map relative x coordinate that the local client cursor is targeting. If the cursor is not targeting anything on the map returns 0. Not net safe.
function GetLocalCursorTargetY takes nothing returns real                                    //Returns the map relative y coordinate that the local client cursor is targeting. If the cursor is not targeting anything on the map returns 0. Not net safe.
function GetLocalCursorTargetZ takes nothing returns real                                    //Returns the map relative z coordinate that the local client cursor is targeting. If the cursor is not targeting anything on the map returns 0. Not net safe.
function SetLocalCursorX takes real x returns nothing                                        //Set the local client cursor position to the specified screen space normalised x coordinate.
function SetLocalCursorY takes real y returns nothing                                        //Set the local client cursor position to the specified screen space normalised y coordinate.
function IsLocalCursorOverUI takes nothing returns boolean                                   //Returns true if the cursor is currently not targeting the map. Not net safe.
function IsLocalMouseButtonPressed takes mousebutton mouseButton returns boolean             //Returns true or false depending on which mouse button is being held down. Will be useful for click-and-drag functions. Not net safe.
function TriggerRegisterPlayerMouseEvent takes whichTrigger, player whichPlayer, mouseevent mouseEvent returns event
                                                                                             //Mouse click/drag/release events. All mouse events go here. See constants. Attaching this event causes periodic mouse sync traffic from the player.
function GetTriggerMouseEvent takes nothing returns mouseevent                               //In response to player mouse event returns which mouseevent triggered the trigger.
function GetTriggerMouseX takes nothing returns real                                         //In response to player mouse event returns the screen space normalised x coordinate the event occurred at. Is net safe.
function GetTriggerMouseY takes nothing returns real                                         //In response to player mouse event returns the screen space normalised y coordinate the event occurred at. Is net safe.
function GetTriggerMouseMapX takes nothing returns real                                      //In response to player mouse event returns the map relative x coordinate the event occurred at. Return value non 0.0 only if the mouse event targeted the map. Is net safe.
function GetTriggerMouseMapY takes nothing returns real                                      //In response to player mouse event returns the map relative y coordinate the event occurred at. Return value non 0.0 only if the mouse event targeted the map. Is net safe.
function GetTriggerMouseMapZ takes nothing returns real                                      //In response to player mouse event returns the map relative z coordinate the event occurred at. Return value non 0.0 only if the mouse event targeted the map. Is net safe.

//Keyboard
function TriggerRegisterPlayerKeyboardEvent takes trigger whichTrigger, player whichPlayer, keyboardbutton hotkey, boolean state returns event
                                                                                             //Fires when the corresponding key is pressed by the player. The keyboardbutton constants are not mentioned but should cover most common keyboard buttons. If state is true then fires when key is pressed, otherwise fires when key is released. Attaching this event causes keyboard button sync traffic from the player.
function GetTriggerKeyboardButton takes nothing returns keyboardbutton                       //In response to player keyboard event returns which button caused the event.
function GetTriggerKeyboardState takes nothing returns boolean                               //In response to player keyboard event returns the state that caused the event. True if it was pressed, false if released.

function GetLocalKeyboardButtonState takes keyboardbutton whichButton returns boolean        //Returns true if the local client has the specified keyboard button (eg arrow keys) depressed or false if released. Not net safe.

//Destructable
function IsDestructableTree takes destructable d returns boolean                             //Returns true if a destructable can be used as a tree. Otherwise false.
function TriggerRegisterDestructibleEvent takes trigger whichTrigger, destructable d, destructableevent whichEvent returns event
                                                                                             //Like TriggerRegisterUnitEvent. Some of the important event constants are listed but others might also exist.
function TriggerRegisterAnyDestructibleEvent takes trigger whichTrigger, destructableevent whichEvent returns event
                                                                                             //Like TriggerRegisterDestructibleEvent except applies to all destructables on the map, even ones yet to be created.

//Trackables
function SetTrackablePos takes trackable t, real x, real y returns nothing                   //Moves a trackable to the specified map realative coordinate.
function SetTrackableZ takes trackable t, real z returns nothing                             //Sets the map realative z coordinate of the trackable. This disables automatic Z positioning.
function SetTrackableZOffset takes trackable t, real zOffset returns nothing                 //Sets the Z offset of a trackable. This is realitive to the Z it is automatically positioned at. This enables automatic Z positioning.
function GetTrackableX takes trackable t returns real                                        //Returns the map relative x coordinate of the trackable.
function GetTrackableY takes trackable t returns real                                        //Returns the map relative y coordinate of the trackable.
function GetTrackableZ takes trackable t returns real                                        //Returns the map relative z coordinate of the trackable if in map relative z mode. Returns the z offset if in automatic z mode.
function DestroyTrackable takes trackable t returns nothing                                  //Trackables currently cannot be destroyed through triggers, so this native is needed for them to be useful.

//Uberspalts
function SetUbersplatPos takes ubersplat u, real x, real y returns nothing                   //Moves an ubersplat to a new map relative coordinate.
function SetUbersplatScale takes ubersplat u, real x, real y returns nothing                 //Allows the distortion of an ubersplat. This is applied to the ubersplat in its default orientation before it is rotated.
function SetUbersplatFacing takes ubersplat u, real angle returns nothing                    //Allows an ubersplat to be rotated. Useful for hazard markers or hit markers. Angle is in degrees.
function SetUbersplatFacingRad takes ubersplat u, real angle returns nothing                 //Same as SetUbersplatFacing except angle is in radians.

//Triggers
function EvaluateBoolexpr takes boolexpr func returns boolean                                //Simple function to evaluate a boolexpr in a single call. Currently one has to bind it to a trigger as a condition, evaluate the trigger and then destroy the trigger after evaluation. The way the boolexpr is executed should be similar to the current trigger approach.

//Benchmarking
/*
    Whoever suggested these did not explain their purpose or what they are meant to do.
    I am guessing they are meant to be client local performance counters for measuring performance of various scripts.
    If this is the case then all calls made to these during multiplayer these should return default safe values that do nothing.
*/
function CreateStopWatch takes nothing returns stopwatch                                     //Create a performance counter stop watch.
function StopWatchStart takes stopwatch returns nothing                                      //Start the stop watch, causing it to record time progression. If it has been paused, resumes recording.
function GetStopWatchTime takes stopwatch returns real                                       //Pause the stop watch and get the current elapsed stop watch time, which is the sum of all time it has been left running.
function StopWatchEnd takes stopwatch returns nothing                                        //Destroy the stop watch freeing all resources it used.
function StopWatchPause takes stopwatch returns nothing                                      //Pause the stop watch causing it to stop recording time progression. If trying to accuratly measure execution time of a piece of script this should be called between game frames to prevent the stop watch measuring the game loop time.

//Debugging
function DisplayErrorMsg takes string s, real duration returns nothing                       //Display the given error message string in the error message area. The message is also written out to an error log file.

function GetOPLimit takes nothing returns integer                                            //Get the current remaining JASS thread operation limit. Due to how the JASS virtual machine works the returned value may be larger than the actual limit by the time it can be processed.
function SetOPLimit takes integer newlimit returns nothing                                   //Changes the current JASS thread operation limit to the specified value. Due to how the JASS virtual machine works the actual limit may be slightly smaller than the specified amount by the time the function returns. Care must be taken when using this native as it negates the infinite loop protection offered by the operation limit.
function ResetOPLimit takes nothing returns nothing                                          //Resets the current JASS thread operation limit to the default operation limit of that thread, as if it was freshly created. Due to how the JASS virtual machine works the actual limit may be smaller than the default amount by the time the function returns. Care must be taken when using this native as it negates the infinite loop protection offered by the operation limit.

type func extends code                                                                       //Function type to be used with debugging natives. Possibly has special syntax requirements to prevent code exploit.
function TriggerRegisterJassOpLimitEvent takes trigger whichTrigger returns event            //Event fires in response to a JASS virtual machine thread crash as a result of the thread reaching its operation limit. Useful for detecting when a thread crash occurs.
function TriggerRegisterJassDivideByZeroEvent takes trigger whichTrigger returns event       //Event fires in response to a JASS virtual machine thread crash as a result of attempted division by 0. Useful for detecting when a thread crash occurs.
function TriggerRegisterJassNoBlockEvent takes trigger whichTrigger returns event            //Event fires in response to a JASS virtual machine thread crash as a result of attempting to block when blocking is not allowed (eg TriggerSleepAction in a condition function). Useful for detecting when a thread crash occurs.
function GetTriggerFunction takes nothing returns func                                       //In response to all JASS thread crash events returns the function the crash occured at.
function GetEventJassError takes nothing returns string                                      //In response to all JASS thread crash events returns a human readable string with as much information about the crash as possible. Intended to be printed out or logged to help map makers track down where/why a thread crash occured.
function GetHandleIdCount takes nothing returns integer                                      //Returns the number of currently allocated handle ids. If this number is observed increasing as a game progresses there is likely an object leak of sorts.
function GetHandleIdFreeCount takes nothing returns integer                                  //Returns the number of handle ids on the free handle id stack. If this number is very large then either the map has suffered from object count reduction over time or there was a step that required a large number of objects be created and destroyed.

//Dialog
function IsPlayerInDialog takes player p returns boolean                                     //Returns true if the player currently has any dialog box visible to them. Might require net sync.

//Object Editor API
/*
    Read only object editor API. Similar to StarCraft II catalog natives, hence the naming.
    The field string would be the attribute key in the object editor, ie "regenHP" for the unit's base health regeneration.
    Passing an invalid key (or one that would return an incorrect data type for the function) would return some sensible default (0, 0.0, null, etc).
*/
function GetUnitTypeAttributeInteger takes catalog whichCatalog, integer typeId, string field returns integer
function GetUnitTypeAttributeReal takes catalog whichCatalog, integer typeId, string field returns real
function GetUnitTypeAttributeString takes catalog whichCatalog, integer typeId, string field returns string

//Custom UI
/*
    Someone suggested the ability to customize the UI similar to StarCraft II where one can place custom UI elements anywhere on a clients screen.
    They did not suggest an API to do this however.
    Due to the complexity of such an API I would suggest looking at StarCraft II's implementation which allows the UI to be heavilly customized.
*/

//NOTES
/*
    This list of suggested additions is meant as a way to streamline existing processes or change them entirely.
*/

//Proxies
/*
    Proxies are essentially units - dummy casters to be exact, that are less performance-heavy. They have no collision, no model (though you may attach something to their "origin"), no
    movement type, nothing. They only move through triggers (SetUnitX/Y) and can cast spells regardless of mana cost, tech requirement, cooldown. They can also cast an unlimited amount
    of spells without any downtime so potentially only 1 proxy will ever be needed per map, or per player. One key aspect to proxies is that all actions they take is creditted to a source
    unit, so this way if a proxy kills a unit using a spell, the game will register the source unit as having earned that kill. Depending on the allegiance of the source will determine
    whether a target can be hit with a spell or not (eg: if the source is an ally of the target of the Proxy, the Proxy cannot cast Storm Bolt at the target).

    NB: the Proxy type is affected by most of the relevant unit triggers, like SetUnitX/Y and RemoveUnit. It can be added to unit groups, etc.
*/
function CreateAbilityProxy takes unit source, real x, real y, real z returns proxy    //This is essentially a dummy of which all the actions it takes will be credited to the source.
function SetProxySource takes proxy dummy, unit source returns nothing               //Modifies the source of the proxy.

//ApllySpellEffect
/*
    This approach is an attempt to change the way modders apply spells to targets. Rather than using dummy units, what if spells - and their corresponding effect - could be cast directly on
    a target unit/point? There are multiple ways in which we thought this could happen, but ultimately it's up to the people with the source code who will know how best to do this.
*/

Method 1

    The ApplySpellEffect idea will look like spells can be cast at any point, anywhere. However, there's the issue of auras, which means that those natives should probably return something other than a boolean (maybe a spelleffect type?)

    function ApplySpellEffect takes player owner, real x, real y, integer abilcode returns nothing                            //returns false for spells that only affect the caster (eg. Storm Crow Form)
    function ApplySpellEffectTarget takes player owner, unit target, integer abilcode returns boolean                        //returns null if the target is invalid (eg Spell immune, invulnerable, etc)
    function ApplySpellEffectPoint takes player owner, real xcast, real ycast, real zcast, real xtarget, real ytarget, integer abilcode returns boolean //returns false on untargertable context (eg Inferno over water, Force of Nature with no trees)
    function ApplySpellEffectChanneled takes player owner, real x, real y, real timeout, integer abilcode returns boolean    //ends after the timer has expired. The timeout overrides the spell's internal duration.
    function ApplySpellEffectTargetChanneled takes player owner, unit target, real timeout, integer abilcode returns boolean                       
    function ApplySpellEffectPointChanneled takes player owner, real xcast, real ycast, real zcast, real xtarget, real ytarget, real timeout, integer abilcode returns boolean


Method 2

    While the above could work, I suppose it's hardly the most elegant solution to go around. User MindWorX suggested the atomic approach:

    local leveldata data = CreateLevelData()
    call SetLevelDataDuration(1.00)
    call SetLevelDataDataA(RealData(10))
    call SetLevelDataDataB(RealData(100))
    call ApplyBuff(target, 'Ahea', data)


Method 3

    Implement structs and have Struct-based triggers to use.

    local leveldata data = CreateAbility()
    set leveldata.Duration = 1.00
    set leveldata.DataA = RealData(10)
    //etc...

Разбор от Павла

UPD 27.01: Сотрудник Blizzard подтвердил, что новые функции JASS будут добавлены в патче 1.29.0.


Просмотров: 5 496



» Лучшие комментарии


Steal nerves #1 - 4 недели назад 0
классно, если \то бкдет так
ClotPh #2 - 4 недели назад 4
Это они наконец то, что давали мемхак и RenderEdge, сами сделать собираются + дофига еще чего?
Ну, главное, чтобы не зафейлили
Я так посмотрю, на чем оставаться
//////////
А вообще любопытно: они вроде ведь в ск2 редакторе таких легких возможностей не дали втч потому, что боялись повтора ситуации с дотой?
Видимо, поняли, что без норм редакторов теряют больше.
pro100master #3 - 4 недели назад 2
Доживу с мемхак и рендер, пока они допилят и перейду хД
ClotPh #4 - 4 недели назад 2
А ваще лол
дота типа как есть и типа как крутая, но вроде как всем и надоела
у WCIII постоянно улучшающийся редактор
хостится симпл аос
вера в лучшее того, что делается лично
9 лет как не бывало
DracoL1ch #5 - 4 недели назад 7
Они никогда не сделают подобия мемхака или render, просто потому что это небезопасные решения. Да и не было у близзардов в истории качественной работы с аудиторией.
Jack-of-shadow #6 - 4 недели назад (отредактировано ) 0
.. несколько лет не заходил не на Xgm, варик не открывал. И что то под новый год занесло сюда и тут сразу такая движуха началась O_O. Тут и RenderEdge графоний выдает и SpellContest воскрешают. А теперь еще и ништяки от самих близов пророчат
ClotPh #7 - 4 недели назад 0
DracoL1ch, да даже если и сделают, тебе-то в любом случае спс огромное
ты сделал и дал возможность креативить намного раньше, проекты-то ждать не хотели
ScopteRectuS #8 - 4 недели назад 0
Может кто-нибудь объяснить мне, человеку знакомому с программированием только благодаря JASS, почему у BLIZZARD нет исходного кода и почему его нельзя восстановить? Во что превращается исходный код после компилирования? Ведь, например, в JASS код после компиляции остаётся таким же читаемым или даже вообще не меняется.
ZlaYa1000 #9 - 4 недели назад 3
ScopteRectuS, насколько я понимаю JASS2 код интерпретируется, а не компилируется. Это скриптовый язык. В случае движка скорее всего был некий C, который скорее всего даже есть, но работать с ним сложно ввиду отсутствия документации и специфики кода.
Кет #10 - 4 недели назад 0
Ещё и фишки из vJASS в обычный JASS добавят. Хотя тут хз, что это изменит.
16GB #11 - 4 недели назад 0
Кет,
Ну из vjass то в обычный всё транслировалось, а тут будет нативно, т.е разные реализации будут те же 2d массивы.
Doc #12 - 4 недели назад (отредактировано ) 5
Жасс код компилируется в инструкции для жасс машины, но уже при запуске карты, разумеется чтобы нельзя было с ним поиграться до этого самого запуска. Этот процесс необратимый. Дерево выражений превращается в линейную последовательность инструкций.
Код на С++ тоже компилируется в инструкции (машинный код) для твоего процессора. Его посмотреть можно, но там нет ни имен переменных, ни control structures, ни "функций" в обычном понимании, чистый assembly. Читать такое тяжеловато.
Например: godbolt.org/g/MQ1sYC
Нативные структы - очень гуд, потому что строились они изначально на хаках и параллельных массивах и были лимиты и т.д.
quq_CCCP #13 - 4 недели назад 4
ScopteRectuS, У них есть исходники, но нету тех людей которые понимают как это работает. В случаи с jass. в Игре есть виртуальная машина, которая работает на подобии ассемблера, jass интерпритируется в байткоды, а после уже выполняется. Они очень долго не могли понять что нетак в этой виртуальной машине (это вроде как движок внутри движка), что такое ретурн баг. Щяс до них стало доходить, но понять и вспомнить все что было сделано нереально - при разработке в движке были вылючены, вырезанны некоторые функции, что с ними не так и будут ли они работать корректно - никто не знает... Почему были краши на их последних патчах?
avuremybe #14 - 4 недели назад 0
Если завезут - то респект этим близзовским интернам.
Proshel_Doty #15 - 4 недели назад 7
Лучше изначально представить, что этого всего не будет, чтобы потом не разочаровываться вдвойне)
А если будет, то круто
AlakFrost #16 - 4 недели назад 0
Удачи поцанам в нелегком деле.
LongbowMan #17 - 4 недели назад 0
Ещё бы побольше готовых решений в редактор триггеров запихнули для чайников, и какие-то фичи для ассетов добавили: например в старкрафте зажав одну клавишу можно разместить объект, игнорируя сетку и карты путей, а в варкрафте приходится мучиться с блокираторами путей для каждого камушка или расставлять их по сетке. Или например возможность масштабировать разрушаемые объекты по осям, как дудады. Эх, мечты.
avuremybe #18 - 4 недели назад 0
LongbowMan, ну так пиши им в тему на хайве
molot39 #19 - 4 недели назад 2
GUI не будет(
Надеюсь авторы или те кто делал дополнения к jngp переведут новые функции в gui (если не будет)

к 25 году подвезут, или ко второй части фильма
pro100master #20 - 4 недели назад 1
molot39, зачем вам GUI, GUI это тренировачное пугало в коде после него все должны перейди на jass чтобы сотворить игру
Araders #21 - 4 недели назад -5
pro100master, не все умеют не каждому дано в про то что после GUI все переходят на JASS - неправда еще та. Вы джазеры если такие умные то давно бы написали статью по JASS для полных чайников и тогда половина вопросов бы отпала. Апдейт если честно бесполезный.
IIIНекромантIII #22 - 4 недели назад 2
molot39, какой GUI?Они до апгрейда Jass еле-еле дошли....
Было бы неплохо,если бы они старые GUI функции более-менее оптимизировали.
Doc #23 - 4 недели назад 7
Для неспособных статьи были написаны еще в 2006. Если не можешь их понять - не дано.
molot39 #24 - 4 недели назад 0
Согласен что всё нормальное делается со знанием программирования, но коль уж у них есть, так называемый "GUI" составление, то пусть и нормально дорабатывают и его. Как то не справедливо получается...
И да, не спорою, надо, учи код, для меня в чем то удобнее gui чем jass
Araders #25 - 4 недели назад -5
molot39, кому-то дано кому-то нет.
Jack-of-shadow #26 - 4 недели назад 0
Araders:
molot39, кому-то дано кому-то нет.
А что вам мешает вставлять новые функции в гуи? "udg_" перед переменными дописать сложно? Большинство новых фитч сможете использовать без проблем. Все остальное на Гуи просто неудобно будет. Да и вообще по аналогии с блюпринтами в анриле, намного удобнее комбинировать, одно с другим, дабы было легко настраивать. Близы в своих картах так и делали.
Araders #27 - 4 недели назад -6
Jack-of-shadow, не дружу с castom script.
IIIНекромантIII #28 - 4 недели назад 0
Araders, а если нужда в локальных переменных?
Araders #29 - 4 недели назад -6
IIIНекромантIII, не могу знать.
avuremybe #30 - 4 недели назад 2
Araders, давай подитожим.
Садиться разбираться в jass ты не хочешь.
Садиться учить статьи ты не хочешь.
Пробовать учиться методом комбинирования GUI с jass, для плавного перехода ты не хочешь.
А виноваты люди, которые не написали для тебя статей для "одаренных" ?
IIIНекромантIII #31 - 4 недели назад 2
Там скорей не в статьях дело,а в желании и потребности.Как приспичит: и джасс ГУИшкой покажется.
Лично мне дальше локальных переменных,удалении ненужных групп и точек и продвигаться пока не в нужду,а если будет нужно,то как-нибудь адаптируюсь...
Araders #32 - 4 недели назад 0
avuremybe, почему же не хочу не раз садился но увидел что не вижу какого-то общего принципа все как будто начинаю с далека. Перечитал 3 стати от 3 разных авторов только теория без практики.
avuremybe #33 - 4 недели назад 0
Araders, ну во-первых, учиться надо как раз с применением практики.
А во-вторых, по трем статьям, если ты не программист, язык не освоишь.
Araders #34 - 4 недели назад -2
В статье на XGM общий смысл сводится к - "Это целочисленая, а это реальная, а вот это масив" что где когда зачем написать лень.
avuremybe, ну не знаю из чего-то близкого к програмированию я занимался веб дизайном php, html, java script и так далее.
avuremybe #35 - 4 недели назад 0
Araders, я, кроме как на XGM, больше нигде статей по jass не читал.
И сейчас я очень комфортно чувствую себя в jass и довольно хорошо понял как работает программирование.
Сейчас изучаю другие языки.
Araders #36 - 4 недели назад -2
avuremybe, други языки изучить намного легче когда по ним есть сотня самоучителей но вот по JASS стати писались абсолютно не грамотными людьми.
avuremybe #37 - 4 недели назад 0
Araders, исходя из того, что ты пишешь здесь о jass, и беря во внимание то, что ты работал с другими скриптовыми и не только языками, я могу сделать вывод, что ты их учил по пачке уроков, где тебе просто все разжевали.
А тут нужно садиться, разбираться и учить самому. И ты не хочешь этого делать. Но почему-то боишься в этом признаться...
Поправь меня, если я не прав.
Araders #38 - 4 недели назад 0
avuremybe, я признаюсь, да я не готов потратить очень много времени на JASS но да мой мой мозг отказывается понимать язык програмирования если мне не разжевать каждое приложение.
IIIНекромантIII #39 - 4 недели назад 2
Эй,чуваки,что за негатив?Новость вроде позитивная,а вы всю атмосферу портите.
Близзы в кое-то веки начали к варкрафту3 интерес проявлять в плане его улучшения,а тут какие-то разборки...
Jack-of-shadow #40 - 4 недели назад (отредактировано ) 0
IIIНекромантIII:
Araders, а если нужда в локальных переменных?
Откажись от локалок и юзай вместо них глобалки, и утечек не не будет (почти). Зарезервируй себе по 2-3 переменные каждого типа (которыми часто пользуешься) например: точки p_a/p_b/p_c, юниты u_a/u_b/u_c итд. Поскольку код выполняется последовательно триггеры не будут мешать друг другу. Это вообще удобно когда нужно выбрать например группу в группе (юнитов/деструктаблей). Никаких хешей и хендлов не нужно для передачи. не нужно объявлять удалять переменные. Никакого гимора.

Но вот для периодических триггеров гуи вообще зло. Так что тут уж ничего не поделашь.
Araders #41 - 4 недели назад (отредактировано ) 0
Я из тех людей которым чтоб понять нужно знать зачем и почему, я не признаю факта что это роботает так потому что - это роботает так.
Jack-of-shadow, мг, спасибо.
avuremybe #42 - 4 недели назад (отредактировано ) 4
IIIНекромантIII, так вроде никто и не дерется. Просто немного отошли от темы (:

По сабжу - близзы не к варкрафту интерес проявили. Они просто нашли способ обучать молодежь имея с этого прибыль, а не вкладывая в это свои финансы.
За что им тоже респект, кстати.
Araders #43 - 4 недели назад 2
Не забивайте голову это просто все мое негодование.
2 комментария удалено
IIIНекромантIII #46 - 4 недели назад 0
Откажись от локалок и юзай вместо них глобалки, и утечек не не будет (почти). Зарезервируй себе по 2-3 переменные каждого типа (которыми часто пользуешься) например: точки p_a/p_b/p_c, юниты u_a/u_b/u_c итд. Поскольку код выполняется последовательно триггеры не будут мешать друг другу. Это вообще удобно когда нужно выбрать например группу в группе (юнитов/деструктаблей). Никаких хешей и хендлов не нужно для передачи. не нужно объявлять удалять переменные. Никакого гимора.
Но вот для периодических триггеров гуи вообще зло. Так что тут уж ничего не поделашь.
Да,я просто экспериментировал как-то с MPQ архивами и "Blizzard.j"...
Там никакого GUI нет...
Bergi_Bear #47 - 4 недели назад 0
Парни, всё замечательно, но вопрос, когда ??? я не пойму что-то =(
pro100master #48 - 4 недели назад 0
Bergi_Bear, думаю через 8 лет, после того как еле двигали... =)
Кет #49 - 4 недели назад 0
Bergi_Bear, часть функций обещают сделать уже в следующем патче. А следующий патч будет известно когда.
ClotPh #50 - 4 недели назад 0
Кет, и когда он? нет времени и желания изучать инфу
Кет #51 - 4 недели назад 4
ClotPh, when it's done, конечно же.
Daniil18 #52 - 4 недели назад 0
будет повод наконец перейти с патча 1.26.
Вот только как все это с jngp будет стакаться
Aluminum210 #53 - 4 недели назад (отредактировано ) 0
Узнаем после выпуска заплатки. Я помню на Hive цитировали разработчика Blizzard. Говорилось что большое внимание уделяется обратной совместимости, в том числе с картами и инструментами.
Daniil18 #54 - 4 недели назад 0
что еще iccup решит интересно. Думаю для них сильно геморойно и невыгодно будет на новый патч все переделывать
Aluminum210 #55 - 4 недели назад 0
Предполагаю переход будет стоить усилий. Затрудняюсь придумать причину по которой обновление серверов будет невозможно технически. Разве что несовместимость карт, что обсуждали ранее.
DracoL1ch #56 - 4 недели назад 6
кто сказал, что айкап хотя бы будет пытаться? Ни одной платформе, ПЛАТФОРМЕ, обновление не нужно - она сама командует обновлениями.
Новый патч будет у вполне определенной доли юзеров - это официалы в европе и азии. Пока что получил предложение от близзов дружить, глянем, что выйдет. Хотят они дотку, хотят.
NanO #57 - 4 недели назад 5
Пока что получил предложение от близзов дружить, глянем, что выйдет.
А ну давай инсайды, что ты как не родной :)
Bergi_Bear #58 - 4 недели назад 0
А у меня вот вопрос, а нужна ли будет лицуха для получения этого обновления, как думаете?
16GB #59 - 4 недели назад 2
Хотят они дотку, хотят.
В варкрафте? Аудитория раз в 5 уменьшилась за последние года, не знаю даже. Зачем они вообще взялись за это всё.
molot39 #60 - 4 недели назад 0
Bergi_Bear:
А у меня вот вопрос, а нужна ли будет лицуха для получения этого обновления, как думаете?
Если нужна батла, то да. Файл патча скорей всего потом скинут, после апдаты
LongbowMan #61 - 4 недели назад (отредактировано ) 0
Шёл 2018 год, люди не могли себе позволить купить любимую игру детства. Я понимаю, когда люди збраш не хотят покупать потому что стоит как крыло самолёта, но это же игра 2002 года -_\
molot39 #62 - 4 недели назад 0
LongbowMan:
Шёл 2018 год, люди не могли себе позволить купить любимую игру детства. Я понимаю, когда люди збраш не хотят покупать потому что стоит как крыло самолёта, но это же игра 2002 года -_\
а почем она сейчас?
16GB #63 - 4 недели назад 0
LongbowMan,
Зачем мне лицензионные сервера? У меня есть лицуха но не играл там никогда и не собираюсь
LongbowMan #64 - 4 недели назад (отредактировано ) 0
molot39, на оффсайте 500р за RoC и ещё 500р за FT. Тыща рублей конечно немало, но тут полсайта уже лет 10 в него играется, можно было и купить уже.
16GB, дело не в официальных серверах, а в том что люди на просторах СНГ не хотят заплатить тыщу рублей за продукт, которым радостно пользуются годами и всячески почитают. Халява конечно круто, но это блин крохоборство какое-то, каждыфй раз подгорать начинает(
16GB #65 - 4 недели назад 0
16GB, дело не в официальных серверах, а в том что люди на просторах СНГ не хотят заплатить тыщу рублей за продукт, которым радостно пользуются годами и всячески почитают. Халява конечно круто, но это блин крохоборство какое-то, каждыфй раз подгорать начинает(
Я вот лично покупаю только игры с мультиплеером (CoD например) и то если нельзя купить ворованный акк. например бф1 брал акк за 10 рублей.
Bergi_Bear #66 - 4 недели назад 0
Да конечно думаю многие готовы будут заплатить, вот я бы заплатил бы эту "злую" тысячу
Steal nerves #67 - 4 недели назад (отредактировано ) 0
вот я бы заплатил бы эту "злую" тысячу
тоже купил бы. Проблема еще в том, что я уже практически не играю в варик, только ради редактора сижу маленько. Что-то делаю, для своей карты. И пока ни разу не выпустил карты....медленно делаю, 5 раз удалял карты до ... Necris делаю, наполеоновские планы насчет нее. Мне нравится идея, но сама карта надоела (сырая), требует скорейшего добавления чего нового. Если это будет в редакторе, то это упростит, этого не хватало в карте
IIIНекромантIII #68 - 4 недели назад 0
многие
Из тех немногих,которые создают карты,а те кто играет - вряд ли.Это же Россия,тут даже на чайных пакетиках экономят.
Sergarr #69 - 4 недели назад 2
"function SetOPLimit takes integer newlimit returns nothing Changes the current JASS thread operation limit to the specified value. Due to how the JASS virtual machine works the actual limit may be slightly smaller than the specified amount by the time the function returns. Care must be taken when using this native as it negates the infinite loop protection offered by the operation limit."
Если это будет то круто. Но как то у меня сомнения есть. Мне вообще такая повышенная активность пугает. Я еще помню какой хаос случился после фикса ретурн бага, когда половина людей играла в одну версию варика, а другая половина - в другую. Как бы это не случилось опять.
Bergi_Bear #70 - 4 недели назад 0
Можно на авито поискать лицушный варик, в какое то время диск рублей 200-300 стоил, я думаю бесплатно отдадут, если самому поехать забирать
IIIНекромантIII #71 - 4 недели назад 2
Как бы это не случилось опять.
100% так и будет.
Кет #72 - 4 недели назад (отредактировано ) 0
Sergarr, IIIНекромантIII, так они не выпиливают никакой функционал, а только добавляют — навряд ли это повлияет на обратную совместимость. Критичные баги всё равно уже вроде все пофиксили. Могут, конечно, попутно что-то сломать =)
IIIНекромантIII #73 - 4 недели назад 0
Кет, да не,здесь в другом вопросик:а будет ли на старых версиях работать новый функционал?
Просто,я не думаю,что все сразу возьмут и перейдут на новый патч.
Aluminum210 #74 - 4 недели назад 2
Нет, не будет, разумеется.
Sergarr #75 - 4 недели назад 2
Кет:
Sergarr, IIIНекромантIII, так они не выпиливают никакой функционал, а только добавляют — чего плохого? Могут, конечно, попутно что-то сломать =)
Плохо то что происходит разделение базы юзеров (которых не так уж и много) на две части. Карты сделанные с новым функционалом не будут работать в старых версиях, а на новый перейдут далеко не все и не сразу.
Да и вообще, новый функционал это хорошо лишь отчасти. Зная близзов, они найдут способ реализовать этот новый функционал с горой новых багов. И будут потом строчить патчи каждый месяц, исправляя один баг и добавляя два новых...
Кет #76 - 4 недели назад 0
Просто,я не думаю,что все сразу возьмут и перейдут на новый патч.
Почему?
а на новый перейдут далеко не все и не сразу.
Почему?
IIIНекромантIII #77 - 4 недели назад 0
Почему?
Я же писал о жадности желании экономить...
Sergarr #78 - 4 недели назад 0
Кет:
Просто,я не думаю,что все сразу возьмут и перейдут на новый патч.
Почему?
а на новый перейдут далеко не все и не сразу.
Почему?
Ты видел как много людей сидит на 1.26?
Кет #79 - 4 недели назад (отредактировано ) 0
IIIНекромантIII, а патчи платные?
Sergarr, я вообще в WC3 не играю, только в World Editor. А что?
IIIНекромантIII #80 - 4 недели назад 0
а патчи платные?
Патчи бесплатные,но на пиратку поставить проблематично.А где как ни на торрентах большинство скачивает игры?
Sergarr #81 - 4 недели назад 2
Кет:
Sergarr, я вообще в WC3 не играю. А что?
Суть в том, что мемхак разработчикам крутых карт весьма понравился, а поскольку мемхак близзы выпилили, то их карты на версиях новее 1.26 попросту не будут работать. Пока они не переведут все используемые в их картах функции мемхака на нативки, эти люди (и соответственно, те кто играет в их карты) не перейдут на новый патч.
Кет #82 - 4 недели назад (отредактировано ) 0
Sergarr, так я об этом и говорю. Я изначально не согласился вот с этим:
Мне вообще такая повышенная активность пугает. Я еще помню какой хаос случился после фикса ретурн бага, когда половина людей играла в одну версию варика, а другая половина - в другую. Как бы это не случилось опять.
Мысли толковые, но ты сам сейчас сказал, что это уже случилось опять. И, видимо, сама причина обсуждаемого обновления — популярность мемхака. Близзы уже всё выпилили, теперь планируют восполнить функционал. Это же хорошо!
molot39 #83 - 4 недели назад (отредактировано ) 2
Игроки на вряд ли будут сразу переходить на новый патч, если конечно популярные карты не начнут переделывать с новыми функциями, а это на вряд ли будет, так как большинства смотрят на айса, а он забросил дотку.
Нам как разработчикам своих проектов нужно смотреть на реакцию игроков, а потом самим переезжать на новые патчи.
А возможно даже не на реакцию игроков, а на реакцию лок площадок, думаю многие игроки бы с радостью бы перешли на новые патчи, но площадки не поддерживают эти патчи, от сюда и замкнутый круг:
Площадки реагируют на запросы игроков -> Игроки на площадки, мы на игроков.
Короче, глянем.
IIIНекромантIII #84 - 4 недели назад 0
А вообще,как-то странно,что Blizzard так резко вспомнили о старичке...
Интересно,почему бы близзам не облегчить жизнь многим модерам,которые пилят и пилят свои "ВАРКРАФТЫ" с нестандартными расами и сразу не сделать некий менеджер модов,как подобное они сделали в Starcraft II.
Что-то я сильно расфантазировался,это ж невозможно.
Доп.кампании - это,конечно,круто,но от редактора модов я бы не отказался...
Aluminum210 #85 - 4 недели назад (отредактировано ) 0
Я лично исхожу из того какая версия из новейших работает на моей машине.
Кет:
сама причина обсуждаемого обновления — популярность мемхака. Близзы уже всё выпилили, теперь планируют восполнить функционал.
avuremybe #86 - 4 недели назад (отредактировано ) 0
Aluminum210, какая несовместимость карт? Они же там свои обновы пилят. Уверен, их разрабы с радостью заменят костыли нативками.

Sergarr, ты может забыл, но после фикса ретурн бага все комюнити сидело с двумя вариками (либо со свитчерами) на компе.
16GB #87 - 4 недели назад 3
Мне одно не понятно. Что это даст близам? Сказок не бывает, и просто потому что комьюнити хочет, они не будут столько труда вкладывать. Но я не понимаю какой профит они хотят из этого извлечь. Аудитория варика уже растеряна, очень многие ушли. Раз они хотят вложить силы в разработку, они собираются на этом заработать. Но как?
Clamp #88 - 4 недели назад 0
16GB, восстанавливают сорцы реверс-инженерингом, заодно расширяют API, чтобы можно было дешево клепать новые игры.

ИМХО, конечно, но подобная стратегия представляется мне рациональной со многих точек зрения.
Aluminum210 #89 - 4 недели назад 0
Предположения Кета кажутся мне правильными. Заменить хак родными функциями. В случае ущерба от хака, винить будут Blizzard, формально или нет. Сообщество будет использовать хак в любом случае. Таким образом лицо компании на кону. Возможно сделать безопасную альтернативу дешевле чем сделать защиту от хака.
Clamp,
Не понимаю зачем им могут понадобиться исходники 2004 года и ранее. Нету же совместимости с BattleNet 2.0.
Clamp #90 - 4 недели назад 0
Исходники на то и исходники, что их можно изменять. В том числе с целью добавить совместимость с чем-либо.
Aluminum210 #91 - 4 недели назад 0
Всё ещё не убеждён. Возможно и такое, наверное. Если им действительно требуется reverse-engineering, то писать заново тем более дешевле, мне кажется.
В конце концов, есть движок SC 2.
Clamp #92 - 4 недели назад 0
Всё ещё не убеждён.
Спасибо, что сообщил, но я как-то и не задавался целью кого-то убеждать.
16GB #93 - 4 недели назад 8
Clamp:
16GB, восстанавливают сорцы реверс-инженерингом, заодно расширяют API, чтобы можно было дешево клепать новые игры.

ИМХО, конечно, но подобная стратегия представляется мне рациональной со многих точек зрения.
Новые игры на движке варика? Лол
Aluminum210:
Предположения Кета кажутся мне правильными. Заменить хак родными функциями. В случае ущерба от хака, винить будут Blizzard, формально или нет. Сообщество будет использовать хак в любом случае. Таким образом лицо компании на кону. Возможно сделать безопасную альтернативу дешевле чем сделать защиту от хака.
Ну тип зачем людям переходить на новой патч если и тут работает? Думаешь близы рассчитывают что выпустят патч с возможностями мемхака, и все перейдут на него и на 1.26 останутся единицы? И таким образом прикроют свой баг? Ну не знаю.
ScopteRectuS #94 - 4 недели назад (отредактировано ) 0
Ходили же слухи о том, что BLIZZARD готовят Warcraft 4 или обновление графики Warcraft 3...
Может всё это с улучшенной графикой, новыми функциями и будет тем самым обновлением?
Aluminum210 #95 - 4 недели назад 0
Разве пользователи Blizzard Battlenet имеют выбор? Пользователям Garena, Hamachi, GameRanger, Tunngle Blizzard не обязаны.
В переиздание я бы поверил, кстати.
LVenger #96 - 4 недели назад (отредактировано ) 0
ScopteRectuS:
Ходили же слухи о том, что BLIZZARD готовят Warcraft 4 или обновление графики Warcraft 3...
Может всё это с улучшенной графикой, новыми функциями и будет тем самым обновлением?
Возможно кстати, если они запилили почти WoW Класику, такой, мол, откат назад, что им мешает так и с Warcraft'ом сделать
Как говорится поживём-увидим, мне кажется через пару недель будет более ясно будут более подробные утечки или не будут, они же не выкатят обнову так быстро как вам кажется
Кет #97 - 4 недели назад 0
Ну тип зачем людям переходить на новой патч если и тут работает?
16GB, но на 1.24 в итоге все зачем-то перешли.
Clamp #98 - 4 недели назад 0
Новые игры на движке варика?
Движок - штука модульная.
А близам надо на чём-то новый состав разрабов учить, так хоть какой-то профит будет.

Ну и да, почему бы на мобилки и не поделать.
16GB #99 - 4 недели назад 2
Кет:
Ну тип зачем людям переходить на новой патч если и тут работает?
16GB, но на 1.24 в итоге все зачем-то перешли.
Тогда аудитория была раз в 5 больше. Варик был ещё более менее актуален это же был 2009 год. Да и хэш таблицы добавили в гуи.
Clamp:
Новые игры на движке варика?
Движок - штука модульная.
А близам надо на чём-то новый состав разрабов учить, так хоть какой-то профит будет.

Ну и да, почему бы на мобилки и не поделать.
Очень сомнительно на мой взгляд. Если это всё допиливать будут новички для тренировки, они там ещё больше дыр оставят лол.
ZlaYa1000 #100 - 4 недели назад 7
ремастер же + в прошлом патче интегрировали с приложением близзард, скорее всего сделают достижения и какие-то новые режимы для сетевой игры, вряд ли лутбоксы
100-й пост, продолжаем
Daniil18 #101 - 4 недели назад 3
пусть сделают функцию, ну скажем легкая версия сейв-лоадов в мультиплеере для рпг. Без всяких кодов и необходимых наработок.
Araders #102 - 4 недели назад 5
Daniil18, ну так пиши им на HIVE, тут твои мольбы бесполезны.
GetLocalPlayer #103 - 4 недели назад 4
Список планируемых обновлений (англ.)
Это не список планируемых обновлений, это объединенный и обновляемый список пользовательских пожеланий.
quq_CCCP #104 - 4 недели назад 4
Уже делят шкуру не убитого медведя, мда...
Близзарды еще ничего не сделали и официально ничего не сказали по этому поводу, на хайве все делятся своими хотелками по поводу редактора, мне вот лично кажется что у близзардов челюсть отпала когда они посмотрели все хотелки и сказали - "Ну нахер, пусть сами себе делают че хотят на мемхаке".
Все чето на хайве, а не на blizzard.com, нет что то представителей близзард, только пару людей которые пишут что они сказали про это близзардам...
Ждем и сильно не надеемся, если и что то сделают то уж явно не завтра и явно все что там описано за 1 патч не добавят.
Araders #105 - 4 недели назад 2
quq_CCCP, да именно! Это обновление эта новость выглядит более муторной чем реальной в плане реализации Blizzard. Да и тем более в компании вряд ли остались люди знакомы с исходниками варика.
Doc #106 - 4 недели назад (отредактировано ) 0
Это не список планируемых обновлений, это объединенный и обновляемый список пользовательских пожеланий.
Да, но т.к. запощено близард человеком и уже часть вещей обещаны к завозу то я бы сказал что шанс увидеть это довольно неплохой.
Близзарды еще ничего не сделали и официально ничего не сказали по этому поводу
Т.е.? Какое еще официальное объявление нужно? Гейм продюсер запостил тред и он же отписал что часть хотелок уже на подвозе.
quq_CCCP #107 - 4 недели назад 0
Doc:
Это не список планируемых обновлений, это объединенный и обновляемый список пользовательских пожеланий.
Да, но т.к. запощено близард человеком и уже часть вещей обещаны к завозу то я бы сказал что шанс увидеть это довольно неплохой.
Близзарды еще ничего не сделали и официально ничего не сказали по этому поводу
Т.е.? Какое еще официальное объявление нужно? Гейм продюсер запостил тред и он же отписал что часть хотелок уже на подвозе.
На своем сайте близзарды постат новость, и делятся скринами где мы видим смену кд, на лету у какой-нить волны силы таурена, а то они там чето вводят, а остальное все хотелки, нет никакого внятного списка что будет сделано, или делается.
Кет #108 - 4 недели назад 0
GetLocalPlayer, но составляет его человек, который и сообщил о подготовке обновления. Думаю, неспроста. Но новость исправил, окей.
avuremybe #109 - 4 недели назад 1
Что это даст близам?
По сабжу - близзы не к варкрафту интерес проявили. Они просто нашли способ обучать молодежь имея с этого прибыль, а не вкладывая в это свои финансы.

в компании вряд ли остались люди знакомы с исходниками варика.
Люди остались.
Но те, кто занимаются текущими патчами - не работают с исходниками.
GetLocalPlayer #110 - 4 недели назад (отредактировано ) 3
Да, но т.к. запощено близард человеком и уже часть вещей обещаны к завозу то я бы сказал что шанс увидеть это довольно неплохой.
GetLocalPlayer, но составляет его человек, который и сообщил о подготовке обновления. Думаю, неспроста.
Т.е.? Какое еще официальное объявление нужно? Гейм продюсер запостил тред и он же отписал что часть хотелок уже на подвозе.
Детский сад, честное слово.
Новость, это пост на главной новостной странице Blizzard, со скриншотами и видео игрового процесса, как это было с WoW Classic, как это было с ремастером Starcraft. На худой конец, это тема на соответствующем форуме.
Какому-то там работнику, какого-то там отдела стало скучно, решил запостить от безделья тему на фанатском ресурсе. Это не новость и не объявление.
oGre_ #111 - 3 недели назад (отредактировано ) 2
GetLocalPlayer:
Да, но т.к. запощено близард человеком и уже часть вещей обещаны к завозу то я бы сказал что шанс увидеть это довольно неплохой.
GetLocalPlayer, но составляет его человек, который и сообщил о подготовке обновления. Думаю, неспроста.
Т.е.? Какое еще официальное объявление нужно? Гейм продюсер запостил тред и он же отписал что часть хотелок уже на подвозе.
Детский сад, честное слово.
Новость, это пост на главной новостной странице Blizzard, со скриншотами и видео игрового процесса, как это было с WoW Classic, как это было с ремастером Starcraft. На худой конец, это тема на соответствующем форуме.
Какому-то там работнику, какого-то там отдела стало скучно, решил запостить от безделья тему на фанатском ресурсе. Это не новость и не объявление.
А потом, когда вскроется обман, работника "которому стало скучно" уволят задним числом? Или близарду уже настолько нас**ть и комунити-манагерами у них работают откровенные клоуны и тролли?
GetLocalPlayer #112 - 3 недели назад (отредактировано ) 5
А потом, когда вскроется обман, работника "которому стало скучно" уволят задним числом? Или близарду уже настолько нас**ть и комунити-манагерами у них работают откровенные клоуны и тролли?
Какой обман, какие тролли, какие клоуны. Автор составил общий список пожеланий, чтобы пользователи с ним ознакомились и не повторялись. Обмолвился, дескать, что-то может быть, вполне возможно, когда-нибудь войдет в какой-то там патч.
А вот у вас уже началась клоунада. У вас уже и новость, и объявление, и патч не за горами. Нафантазировали полные штаны.
Aluminum210 #113 - 3 недели назад 0
"Some of the list will be included in the next patch. =)"
  • Kam, Jan 13, 2018
Ранее:
" ... An engineer is currently going through these. ..."
  • Kam, Jan 10, 2018
+
Согласен, всё скромно. Всё ещё нет нужды терять лица здесь.
oGre_ #114 - 3 недели назад 0
GetLocalPlayer:
А потом, когда вскроется обман, работника "которому стало скучно" уволят задним числом? Или близарду уже настолько нас**ть и комунити-манагерами у них работают откровенные клоуны и тролли?
Какой обман, какие тролли, какие клоуны. Автор составил общий список пожеланий, чтобы пользователи с ним ознакомились и не повторялись. Обмолвился, дескать, что-то может быть, вполне возможно, когда-нибудь войдет в какой-то там патч.
А вот у вас уже началась клоунада. У вас уже и новость, и объявление, и патч не за горами. Нафантазировали полные штаны.
Хорошо хорошо, сидим тихо и не дёргаемся, надеемся:)
Doc #115 - 3 недели назад 6
Какому-то там работнику, какого-то там отдела стало скучно, решил запостить от безделья тему на фанатском ресурсе. Это не новость и не объявление.
Детский сад, честное слово.
DracoL1ch #116 - 3 недели назад 13
ну, раз уж вы тут все собрались, скиньте мне в приват по паре самых зло.. неприятных багов варкрафта, которые вы бы хотели видеть исправленными в новом патче. Про нативки я сам напою сколько угодно, а списка багов у меня под рукой точно нет. За спрос не бьют, в любом случае.
Daniil18 #117 - 3 недели назад 6
пусть сделают как-нить чтобы всякие бафы дебафы могли стакаться между собой, ввести какую-то галочку или настройку.
avuremybe #118 - 3 недели назад 4
Daniil18, не туда пишешь.
ZlaYa1000 #119 - 3 недели назад 24
vk.com/wall-1750347_4290 близы отписываются в том тренде по статусу, шах и мат GetLocalPlayer, 1,29 быть!
Doc #120 - 3 недели назад 4
Да это просто пренк от разработчика которому стало скушно хаха иксдэ
GF RaiseD #121 - 3 недели назад 0
ZlaYa1000, ничесе. А я уже начал думать что зря лицензию покупал.
DracoL1ch #122 - 3 недели назад 0
не стоит загадывать, там скорее будет тонна сеттеров геттеров, из-за чего производительность еще слегка просядет. если они не переработали виртуальную машину
GF RaiseD #123 - 3 недели назад 0
DracoL1ch, ну они не совсем уже глупые.
molot39 #124 - 3 недели назад 0
А чё ещё не вышел 1.29?
GF RaiseD #125 - 3 недели назад 0
molot39, ты в баттлнет зайди, окей?
molot39 #126 - 3 недели назад 0
GF RaiseD:
molot39, ты в баттлнет зайди, окей?
я если зайду, то буду апаться до 1,28... Я не апал последний патч

На сайте нет новости что вышел патч
avuremybe #127 - 3 недели назад 0
molot39, никто и не говорит что он вышел.
molot39 #128 - 3 недели назад (отредактировано ) 0
avuremybe:
molot39, никто и не говорит что он вышел.
пнятно закатываю губу
keks_090 #129 - 3 недели назад 1
molot39:
А чё ещё не вышел 1.29?
Пока всё еще 1.28
прикреплены файлы
molot39 #130 - 3 недели назад 0
keks_090:
Пока всё еще 1.28
спс за точность)
GF RaiseD #131 - 3 недели назад 0
Вся суть этой записи - проинформировать вас что народ с хайва создал ресурс, в котором задокументировал свои хотелки, ибо Близзарды, якобы, собрались что-то делать с варом.
Там ребята еще хотелки не успели записать, а вам уже патч подавай. Вообще не соображаете?
AlakFrost #132 - 3 недели назад -6
GF RaiseD:
Вся суть этой записи - проинформировать вас что народ с хайва создал ресурс, в котором задокументировал свои хотелки, ибо Близзарды, якобы, собрались что-то делать с варом.
Там ребята еще хотелки не успели записать, а вам уже патч подавай. Вообще не соображаете?
Да это ор просто, тут люди какой-то флуд устроили, когда им тупо намекнули лишь. И логичнее было бы на хайве писать что-то по деле. Тут это все мимо пойдет.
Sergarr #133 - 3 недели назад 0
Daniil18:
пусть сделают как-нить чтобы всякие бафы дебафы могли стакаться между собой, ввести какую-то галочку или настройку.
Они и так стакатся могут если убрать строку "заклинание", только они это делают криво. Там механизм такой что периодически всем юнитам добавляется бафф, который висит несколько секунд, ну так при стаке баффов там бафф от одного источника сам с собой стакается раза два а то и три.
Я так понимаю в баффе самом информации от какого юнита он поступил нету, так что лучше не будет, только самому писать систему баффов.
ZlaYa1000 #134 - 3 недели назад 6
GF RaiseD, AlakFrost, а сейчас отправляемся читать первый пост, чтобы не выглядеть идиотами. Орден ора этим двум господам.
Можно ваши сообщения добавлять к платиновому
«Тролли из работников близзард в своё свободное время просто собирают хотелки — никакого патча не будет»
GF RaiseD #135 - 3 недели назад 1
Я тоже работник Близзард. Лол. Клинус залупой что никакого патча нибудит.
ZlaYa1000 #136 - 3 недели назад 3
GF RaiseD,
Я тоже работник Близзард. Лол. Клинус залупой что никакого патча нибудит.
ставка принята, продолжаем
Brandelick #137 - 3 недели назад 0
Они даже hd ремастер Вара 3 могут завтра объявить, им ни что не мешает.
4 комментария удалено
AlakFrost #142 - 3 недели назад -6
ZlaYa1000:
GF RaiseD, AlakFrost, а сейчас отправляемся читать первый пост, чтобы не выглядеть идиотами. Орден ора этим двум господам.
Можно ваши сообщения добавлять к платиновому
«Тролли из работников близзард в своё свободное время просто собирают хотелки — никакого патча не будет»
Нам тут близзы в вове обещали в 7.3.5 уже добавить сабрасы, и где они? Дай боже если патч 1.29 не сломает варик, как это уже было совсем недавно. И ору я как раз с того, что люди тут пишут свои пожелания, думая что господь Б-г их сам нашепчет потом в уши близзам. Так что ору дальше, че мне грустить.
ZlaYa1000 #143 - 3 недели назад (отредактировано ) 6
AlakFrost, пожелания (а точнее известные ошибки) люди пишут DracoL1ch -у, не готов признать что он «сам господь Б-г», но определённо много сделал для хипхопа и контакт он имеет с кем нужно. И это именно то, что называется работой с сообществом
DracoL1ch #144 - 3 недели назад (отредактировано ) 5
Конкретно 29 уже скомпонован и в него уже не будут добавляться новые возможности из тех, что вы тут могли накидать. Ждать придется. А я всё никак не могу выкроить время на сборку всех функций из мемхака, чтобы скинуть им на будущее. Эх.
quq_CCCP #145 - 3 недели назад 4
Ребята Китайцы изобрели мемхак на 1.28+, так что близзардов можно послать лесом.
Daniil18 #146 - 3 недели назад 0
ты главное это самим близам напиши, что Ыксперты xgm все порешали уже
ZlaYa1000 #147 - 3 недели назад 0
quq_CCCP, делись
quq_CCCP #148 - 3 недели назад 0
Уже создал тему, осталось наладить открываем ость в наших редакторах, есть тест карта с китайским гуи + мемхаком работающим на все версии вара.
ZlaYa1000 #149 - 3 недели назад 0
quq_CCCP #150 - 3 недели назад 0
ZlaYa1000, оно самое, осталось разобрать все и перевести иэроглифы на русский язык + сделать открываемым в редакторе.
Ethernet #151 - 3 недели назад (отредактировано ) 0
Ребят, у меня только один вопрос. Где и кто играет на 1.28 патче? На Икапе? Гарене?
Круто, что будет 1.29, но толку?
ApEJI #152 - 3 недели назад 0
на айкапе 1.26 офф сервера давно мертвы, смысла реально нет
GF RaiseD #153 - 3 недели назад (отредактировано ) 4
Ознакомился с оригинальным постом на хайве. В целом звучит очень неплохо.

Порадовали многие, скажем, обещанные удобства. В частности - фикс камеры на клиффах, сеттеры/геттеры, новые объекты типа "эффект" и сопутствующие нативки, отлов клавиш, возможность прятать интерфейс (включая черные рамки сверху и снизу), новые ивенты и действия.

Из того что вызывает сомнения - мало опций для отрисовки собственного интерфейса, применение спеллов без даммиков (при помощи специальной нативки). Последнее не вижу особо полезным при наличии "эффектов", как нового типа объектов и возможности изменять параметры юнитов напрямую.

Пока это наводит на следующие мысли:
  • отлов клавиш (от Александра) больше не пригодится
  • мемхак нужен если намереваетесь изменить расположение стандартных кнопок интерфейса или создать на движке вара свою типо игру (разумней переключится на нормальный движок, в варе нет нормальной оптимизации и ваш порог - либо изврат, либо лагающее говно)
  • наконец-то нормальный модмейкинг, без необходимости особенно усердно исследовать глубины.
  • поздновато, блэт
Ethernet #154 - 3 недели назад 0
ApEJI:
на айкапе 1.26 офф сервера давно мертвы, смысла реально нет
я там на 1.26 играю, не вижу трупов
GF RaiseD #155 - 3 недели назад 0
Ethernet, ладдер. Все что не ладдер - гуляй лесом. Накой вообще сетки без ладдеров?
Ethernet #156 - 3 недели назад 0
GF RaiseD:
Ethernet, ладдер. Все что не ладдер - гуляй лесом. Накой вообще сетки без ладдеров?
Играть в кастомки?
GF RaiseD #157 - 3 недели назад 0
Пожалуй, это единственное объяснение.
DracoL1ch #158 - 3 недели назад (отредактировано ) 15
Ну технически еще есть какие-то активные моддеры, кто создает карты под новые патчи, развивают, если быть точным. Т.е. человек 10-20. Понятное дело, что все полимеры уже всё, и я сам максимально негативно отношусь к этой движухе по причине её бесперспективности. Мемхак - дорога к хоть какому-то будущему, но по понятным причинам официалы уперлись рогом.
Пойдут на наши требования - зашибись. Продолжат вводить бесполезный мусор - ну, ничего и не меняется для нас. В любом случае - хуже уже не станет.
Zahanc #159 - 3 недели назад 3
Весь вечер сегодня танцую с бубном пытаясь заставить JNGP работать с заплаткой 1.27 и выше. Пробовал буржуйский SharpCraft WEX, так он засоряет память без остановки пока не заполнит полностью! И убить поток до конца не могу на долбанном Windows. Приходилось перезапускать ПК.
Мораль в том, что я решил дальше делать свою кампанию на 1.26a, на которой работают старые наработки. Даже если 1.28+ введут функции которые расширяют саму вселенную.
Sir_Lambert #160 - 3 недели назад 0
Zahanc, Я так вообще не стал переходить. Решил сначала посмотреть, что они там выдадут, и заодно подождать, пока появятся программы для новых версий.
PrincePhoenix #161 - 3 недели назад 6
Интересно, а сколько из новых функций будут доступны в GUI? И будут ли вообще?)
Шел 7 год в картостроении, а я еще не выучил Jass
DracoL1ch #162 - 3 недели назад 12
Почти уверен, что новые будут на гуи тоже, ведь они ориентируются на широкую аудиторию (рофл)
uranus #163 - 3 недели назад 6
А по дате пока ничего не известно, даже примерно?
PrincePhoenix, меньше времени потратишь на его изучение, чем на борьбу с ним.
DracoL1ch #164 - 2 недели назад 3
Скоро выйдет. Это может быть и завтра, и через полгода. Близзард ж. Максимум закрытости, а то вдруг кто-то упрет их фишки в свою игру
avuremybe #165 - 2 недели назад 0
PrincePhoenix, 7й? а не 16й?
GF RaiseD #166 - 2 недели назад 6
Пишите сюда ваши идеи. Если это что-нибудь новое - закину на хайв. Или на хайв пишите. А то как лохи.
uranus #167 - 2 недели назад 0
GF RaiseD, в плане функций на хайве неплохо описали самое необходимое. Но никто (вроде бы) не говорил о том, что много констант и полей в РО элементарно не работают. Можем сделать юниту классификацию "гигант" или "минотавр", но ничего с РО с этом не сможем сделать, т.к. в классификации целей нет таких пунктов. Примеров множество. Ну и самое простое - увеличение лимита скорости выше 522.
Daniil18 #168 - 2 недели назад 4
устанавливать хоткеи абилок было? еще функцию возвращать абилку по положению координат в панели юнита
avuremybe #169 - 2 недели назад 0
функцию возвращать абилку по положению координат в панели юнита
Удваиваю.
GF RaiseD #170 - 2 недели назад (отредактировано ) 0
Daniil18, не было.
    function SeAbilityXY takes integer abilID, integer newX, integer newY returns nothing
    function GetAbilityXY takes integer X, integer Y returns integer
    function SetUnitAbilityXY takes unit u, integer abilID, integer newX, integer newY returns nothing
    function GetUnitAbilityXY takes unit u, integer X, integer Y returns integer

    function SetAbilityHotkey takes integer abilID, string hKey returns nothing
    function GetAbilityHotkey takes integer abilID returns string
    function SetUnitAbilityHotkey takes unit u, integer abilID, string hKey returns nothing
    function GetUnitAbilityHotkey takes unit u, integer abilID returns string

Или было:
  • Get and set object editor fields at runtime, e.g. a unit’s model, a unit’s attack missile, set tooltips for units/abilities/items, set icons, etc.
Но чет я сомневаюсь что это введут =/
Кет #171 - 2 недели назад 3
    function SeAbilityXY takes integer abilID, integer newX, integer newY returns nothing
    function GetAbilityXY takes integer X, integer Y returns integer
    function SetUnitAbilityXY takes unit u, integer abilID, integer newX, integer newY returns nothing
    function GetUnitAbilityXY takes unit u, integer X, integer Y returns integer
Круто, можно будет тетрис сделать.
biridius #172 - 2 недели назад 3
Мгновенный поворот юнитов бы
GF RaiseD #173 - 2 недели назад 2
biridius, уже запросили.
uranus #174 - 2 недели назад (отредактировано ) 0
Было бы очень неплохо некоторые эффекты, которым не требуются дополнительные параметры, вызывать без дамми каста, например:
function UnitAddEffect takes unit whichUnit, effecttype whichEffect, real duration returns nothing
function UnitAddEffectEx takes unit whichUnit, effecttype whichEffect, real duration, integer buffId returns nothing
...
EFFECT_TYPE_STUN
EFFECT_TYPE_ROOT
EFFECT_TYPE_BREAK
EFFECT_TYPE_MUTE
EFFECT_TYPE_SILENCE
EFFECT_TYPE_DISARM
EFFECT_TYPE_SLEEP
Jack-of-shadow #175 - 2 недели назад (отредактировано ) 10
У всех у объектов, пивоты которых не попадает в камеру выключается рендер, исключение только Doodads. Поэтому при генерации ландшафта или просто при необходимости заспавнить большой объект, возникает дофига проблем. Решал это только спавном одновременно нескольких одинаковых объектов с разными пивотами, это то еще извращение. Понятно что близы хотели облегчить рендер и с видом сверху в основном все должно влезать. Но иметь возможность поставить галочку в ро для переключения обрезки было бы очень полезно. Какбы к джазу это мало относится, но вдруг.

Zahanc #176 - 2 недели назад 0
Jack-of-shadow:
У всех у объектов, пивоты которых не попадает в камеру выключается рендер, исключение только Doodads. Поэтому при генерации ландшафта или просто при необходимости заспавнить большой объект, возникает дофига проблем. Решал это только спавном одновременно нескольких одинаковых объектов с разными пивотами, это то еще извращение. Понятно что близы хотели облегчить рендер и с видом сверху в основном все должно влезать. Но иметь возможность поставить галочку в ро для переключения обрезки было бы очень полезно. Какбы к джазу это мало относится, но вдруг.

Господи, да! Я имел столько головной боли из-за этого.
PT153 #177 - 2 недели назад 0
GF RaiseD:
Пишите сюда ваши идеи. Если это что-нибудь новое - закину на хайв. Или на хайв пишите. А то как лохи.
Аккаунта на хайве пока нет, напишу сюда.
Не заметил в багфиксах этой функции.
native SetImageRender takes image whichImage, boolean flag returns nothing
Она не работает.
Ну и функцию GetUnitZ хотелось бы.
Nelloy #178 - 2 недели назад 2
Менять поля абилок на лету было бы полезно
quq_CCCP #179 - 2 недели назад 4
uranus, увы эти эффекты требуют баффа для слежения за состоянием юнита, поэтому вряд-ли добавят, тот же кастом стун в мх требует осторожного обращения и отдельного триггера. Бреак это ваще из д2, в варкравте есть silence, advanced silence и усе, у всех абилок в коде указано взаимодействие с сайленсами. Некоторые вещи не только галочки а еще и некий алгоритм который что то там делает, к примеру при смерти юнит получает продвинутое сало на все способности, а так же с него снимаются все баффы (оглушения обязаны быть сняты до смерти) или юнит больше не будет подвергаться соглашениям и слушаться владельца. Лучше бы сделали конструктор баффов с доступам к внутриигровым событиям, но это вряд-ли...
GF RaiseD #180 - 2 недели назад (отредактировано ) 0
uranus, это уже запросил, каст спеллов от имени указанного юнита. Не могу только определится что делать если юнит будет null, возвращать false или кастовать от имени какого-нибудь нейтрального игрока. Если юнит определен каст совершается от имени игрока-владельца юнита. Интересно ваше мнение.
Jack-of-shadow, этого не предлагали пока. Отпишу как соберется больше предложений.
PT153, Рендер проверю.
UnitZ уже есть в списке, но называется GetLocalUnitZ
Daniil18 #181 - 2 недели назад 0
возможность как-бы рисовать области как угодно, не только прямоугольниками а прям как кистью.
GF RaiseD #182 - 2 недели назад 3
Daniil18, идея найс, но ты хоть немного веришь что они реализуют хотя бы часть наиболее простого из запрошенного?

Это в шапку.
Ethernet #183 - 2 недели назад 0
Daniil18:
возможность как-бы рисовать области как угодно, не только прямоугольниками а прям как кистью.
Чтобы как угодно рисовать, это движок варика переписывать надо.
Daniil18 #184 - 2 недели назад 0
ну да, это уже кулстори от меня какие-то.
Тогда, лично мне бы пригодилась, мм не знаю как назвать, короче новый тип переменных "группа чисел". Вносить туда целочисленные и от этого плясать, есть ли число в группе чисел и прочие условия.
Это сообщение удалено
uranus #187 - 2 недели назад 0
Лучше бы сделали конструктор баффов с доступам к внутриигровым событиям
Да, согласен. Да что уж события, даже добавление в РО с десяток новых шаблонных абилок уже дало бы хороший толчок. Такие элементарные вещи просить нельзя?
GF RaiseD #188 - 2 недели назад (отредактировано ) 1
uranus, я предложил вот такое:
» code
constant gameevent EVENT_UNIT_BUFF_APPLIED
constant gameevent EVENT_UNIT_BUFF_EXPIRED //Triggers when buff expires or gets removed

function UnitApplyBuff takes unit u, integer buffId returns boolean //Applies permanent buff to the unit. Returns false if buff can't be applied.
function UnitApplyBuffTimed takes unit u, integer buffId, real time returns boolean //Applies timed buff to the unit. Returns false if buff can't be applied.

function UnitRemoveBuff takes unit u, integer buffId returns boolean //Returns false if unit has no buff with such id.

function UnitSetBuffTooltip takes unit u, integer buffId, string tooltip returns boolean //Returns false if unit has no buff with such id.
function UnitGetBuffTooltip takes unit u, integer buffId returns string //Returns false if unit has no buff with such id.

Такие эффекты как брейк и дизарм - всего-навсего эксплойты и предполагают введение нового контента (что маловероятно). Остальное же можно реализовать с помощью того что я предложил.
abidin #189 - 2 недели назад (отредактировано ) 0
В частности - фикс камеры на клиффах
А можно подробней о данном баге. Из видео я так и не понял , в чем заключается баг.
GF RaiseD #190 - 2 недели назад 0
Maniac_91 #191 - 2 недели назад 4
Не нашёл в списке проверку, какой конкретно игрок навёл мышь / нажал на Trackable.
Не знаю, как правильно это написать; нужно, чтобы функция возвращала игрока.
uranus #192 - 2 недели назад 4
Нативные списки просить нет смысла? Да, есть кастомные наработки, но то же самое про структуры и двумерные массивы можно сказать, а так быстрее будет.
GF RaiseD #193 - 2 недели назад 0
uranus, опиши подробней, пожалуйста. Я тебя не понимаю.
PT153 #194 - 2 недели назад (отредактировано ) 4
Будет очень интересно глянуть, как они реализуют структуры. В своей карте я их использую очень активно, так как знаю о них всё, и во всех триггерах сразу делаю переход от нативных объектов к структурам. Надеюсь, они добавят способ привязывания структур к нативным объектам.
Нативные структы - очень гуд, потому что строились они изначально на хаках и параллельных массивах и были лимиты и т.д.
Любой данный лимит можно всегда расширить. Базово не более 8190 (на самом деле 8191) элементов у структуры, и этого хватает обычно, но можно расширить на сколько угодно.
Рендер проверю.

Работают вот эти функции:

native SetImageRenderAlways takes image whichImage, boolean flag returns nothing
native SetUbersplatRenderAlways takes ubersplat whichSplat, boolean flag returns nothing

А эти нет:

native SetImageRender takes image whichImage, boolean flag returns nothing
native SetUbersplatRender takes ubersplat whichSplat, boolean flag returns nothing
Уже просили передачу параметров в функции, что вызываются в ForGroup, ForForce и TimerStart?
Clamp #195 - 2 недели назад 0
но можно расширить на сколько угодно.
Ценой падения производительности в целом, ЕМНИП.
PT153 #196 - 2 недели назад 0
Clamp:
но можно расширить на сколько угодно.
Ценой падения производительности в целом, ЕМНИП.
С чего бы? Просто создаются ещё массивы, а при передаче нужный массив выбирается в If-е. Не такое уж и падение.
Doc #197 - 2 недели назад 0
Ты переоцениваешь производительность виртуальной машины джасса.
ScorpioT1000 #198 - 2 недели назад 1
Осталось добавить нормальный графический движок и вывести в опенсурс, можно будет делать игры и продавать)
Extremator #199 - 2 недели назад (отредактировано ) 8
Было бы неплохо в добавок получить события "юнит_бафф_получил"
и аналогично "юнит_бафф_утратил".
В добавок от себя - хотелось бы что бы данные о времени в РО у аур всё такие работали, самым простым образом - устанавливали частоту обновления этой ауры (хочешь ставишь 2. , или 0.5, или 0.1 при необходимости, а эта аура буде часто обновляться).
В добавок к аурам (и не только) - хотелось бы что бы можно было получить уровень баффа на юните (знаю что делается это через получение уровня абилки, но больше 1 оно не выдаёт, починить бы это)


. . . добавлено . . .
Так же было бе неплохо распологать следующим инструментом
  • функция для поиска данных в массиве переменной при указанных данных в аргументе
Допустим, есть функция - ArraySearchFirst(a,b) [integer]
Она принимает два аргумента:
  • первый - переменная с массивом, не объект по ссылке на эту переменную, а сама переменная
  • второй - сам объект (условно), который необходимо найти
При этом тип объекта обязан совпадать с типа указанной переменной
И возвращает integer, как номер совпавшего массива
[пример]
	local integer n
	local unit array i
	set i[0] = udg_unit000
	set i[1] = udg_unit001
	set i[2] = udg_unit002 // допустим этот юнит является так же GetTriggerUnit()
	set i[3] = udg_unit003
	
	set n = ArraySearchFirst(i,GetTriggerUnit())
	// название функции подсказывает о первом совпадении
[end-пример]
В чём суть? Если, допустим, мы заведомо знаем что GetTriggerUnit'ом окажется udg_unit002,
то при использовании функции ArraySearchFirst(a,b) мы посылаем саму переменную i (array)
и ищем в её значениях совпадения с GetTriggerUnit(), с таким же типом (unit-to-unit)
И первое что будет найдено (совпадёт) - udg_unit002, с номером массива 2
Это значение и будет возвращено, и n будет приравнено к 2
Очевидно, что это простой цикл с поиском объекта в массиве.
И так же очевидно, что было бы на много практичее если бы можно было написать универсальную функцию поиска с циклов внутри, но... как заставить функцию принимать не объект по ссылке из переменной, а именно саму переменную (со всеми её массивами) и при этом варьировать тип второго аргумента как тип этой самой переменной.
Doc #200 - 2 недели назад (отредактировано ) 2
Ты сам такую функцию написать не можешь или что?
То что ты предлагаешь требует поддержки дженерик типов. В реальности сколько тебе бы пришлось написать таких функций, напиши их ты вручную. Три? Каждая по 6 строчек?
Extremator #201 - 2 недели назад 0
Doc, а разве можно? с меняющимся типом аргумента
uranus #202 - 2 недели назад (отредактировано ) 10
опиши подробней, пожалуйста. Я тебя не понимаю.
Своего рода обертка для массива. Пример на сайте.

» И вот, что хотелось бы исправить в способностях:
  • Некоторые автокастовые способности игнорируют время своего кулдауна.
  • Процентное повышение защиты от Доспехов веры не работает при отрицательном значении.
  • Благословение Элуны работает неправильно.
  • Отрицательное значение длительности оглушения работает также, как и ноль - т.е. действует до развеивания или смерти юнита. Не лучше ли, чтобы оглушения в таком случае не было? Так мы сможем использовать тот же Молот бурь для банального таргетного файерболла, не опасаясь ненужного микростана, и не прибегая к коду.
  • На кол-во Иллюзий, а так же целей Цепной и Целительной молний действует лимит.
  • Поле "Увеличение получаемого урона" в Безумии неправильно работает при отрицательных значениям. А между тем было бы очень удобно поставить значение, например, -0.5, чтобы получить уменьшение получаемого урона наполовину.
  • Аура вампиризма не работает на дальнобойных юнитах. На ввести ли для этих целей чекбокс, как это сделано в Ауре меткости? Ауре возмездия и Панцирю с шипами тоже не помешало бы.
  • Длительность Печати преисподней не учитывается. Т.е. развеять можно только из кода.
  • Способности, которые должны применяться от атаки с помощью Сфер, не работают на автоатаке.
GetLocalPlayer #203 - 2 недели назад 0
Extremator:
Doc, а разве можно? с меняющимся типом аргумента
Doc:
Ты сам такую функцию написать не можешь или что?
То что ты предлагаешь требует поддержки дженерик типов.
Я буду наверно лишним со своим Обобщенные типы
Extremator #204 - 2 недели назад 0
GetLocalPlayer, я говорю о базовой нативке, а не о нагромождении типа GUI 2.0
PT153 #205 - 2 недели назад (отредактировано ) 0
И вот, что хотелось бы исправить в способностях:
Добавлю ещё способность Death Coil, у которой не меняется эффект, накладываемый на цель.
То есть его изменяешь или убираешь, но он всё равно остаётся. Лечится заменой модельки на пустышку.
uranus #206 - 2 недели назад 2
PT153, и плюс тот же Койл, как и Благословение Паладина имеет свою особенность работы, что делает их не очень юзабельными в кастомках. И вспомнил еще такой баг: когда юнит превращается в летающего на время, и когда время проходит, если он был над непроходимыми местами, он визуально будет иметь высоту полета, хотя уже будет наземным фактически.
ScopteRectuS #207 - 2 недели назад 0
uranus, еще пассивка Огненного Повелителя не работает, если создать её нестандартную копию.
Doc #208 - 2 недели назад 0
Да в вурсте есть нормальная поддержка дженериков и вообще человеческих фич.
Еще раз спрашиваю, зачем тебе функция с обобщенными типами если в реальности ты ее будешь использовать с 2-3 типами? Напиши 2-3 функции.
Дженерики - фича нужная, но твой пример инвалиден.
uranus #209 - 2 недели назад (отредактировано ) 0
ScopteRectuS, а копии Темной стаи и Стада ящериц не будут иметь другого визуального эффекта на целях, даже если он указан, кроме стандартного.
Да, тут действительно можно реферат писать по этой теме...
Extremator #210 - 2 недели назад (отредактировано ) 0
в реальности ты ее будешь использовать с 2-3 типами?
в реальности мне будут нужны такие типы как - юнит, тип юнита (а это integer), предмет, тип предмета (integer), улучшение (integer), абилка как объект и как тип (integer), бафф (integer), молния (как объект), тип тайла (integer), таймер, группа, точка, тректейбл, а так же - строки...
Нужды до реалок пока не доходило, но лишним не будут.
Итого: 10 типов
твой пример инвалиден.
Кому объясняю - такой и пример.
Ты ведь его понял, неправда ли?
Doc #211 - 2 недели назад (отредактировано ) 0
Ты всегда можешь все хендлы рассматривать как интежеры.
в реальности мне будут нужны
Я очень сомневаюсь в твоих супер-теориях. Говорю по опыту: проект на 50 000 строк, использований подобной функции: 1. Проект на 1 400 000 строк, использований подобной функции: 18.
Группируя данные в структуры ты опять же получаешь поиск по интежерам.
Пример невалидный.
Ну и я это предложение уже оформил несколько дней назад с валидными примерами :)
Jack-of-shadow #212 - 2 недели назад 9
native GetHostPlayer takes nothing returns player
ScorpioT1000 #213 - 2 недели назад (отредактировано ) 0
Хост и так можно определить. Для этого надо сравнивать время синка
abidin #214 - 2 недели назад 0
ScorpioT1000, ну всё равно будет проще это сделать нативкой , чем нагружать систему кешем.
uranus #215 - 2 недели назад 0
Цикл foreach или его аналог для перебора групп без необходимости удаления элементов оттуда. Неплохо и для массивов подобное иметь.
3 комментария удалено
GF RaiseD #219 - 2 недели назад 7
16GB, я переброшу на хайв вменяемые предложения.
5 комментариев удалено
Steal nerves #225 - 1 неделю назад (отредактировано ) 15
Неплохо бы иметь больше настроек у кнопок-пустышек, типа канала. Или что-то похожее. Типа возможность не сбивать приказ (типа безумия), возможность запустить скилл на ходу, возможность вставлять анимацию полета снаряда (не у всех работает, у канала не робит, типа полет ядовитого дротика), не у всех работают баффы (не накидываются), нет пустышек с эффектами. Нет нужных автокастовых способностей-пустышек, работающих в разных условиях (и отслеживания). Конечно, это мечты
Нет двойных способностей (типа нажал "включить щит", отобразилась обратная сторона "выключить щит" - есть конечно аналоги щит defend у пехотинца, уникальности нет никакой, можно взять defend. А если что-то придумать)
avuremybe #226 - 1 неделю назад 2
Динамическое изменение id приказа у способностей.
Есть конечно вероятность, что обещанный доступ к полям из редактора включает в себя эту возможность, но не факт же.
ScorpioT1000 #227 - 1 неделю назад 2
avuremybe, id на то и id, что всегда постоянный
avuremybe #228 - 1 неделю назад 0
ScorpioT1000, но из-за этого много крутых идей приходится костылями реализовывать :С
PrincePhoenix #229 - 1 неделю назад 1
Хоть бы реализовали запланированное и можно смело ремастер запускать) Оживет xgm, оживет WARCRAFT
GF RaiseD #230 - 1 неделю назад 0
PrincePhoenix, оживет в лучшем случае модмейкинг. Если близзарды не бросят денег на внедрение варкрафта в повестку дня/недели/месяца, а лучше - года. Но даже так он проиграет любой моба. Дефолтный вар слишком уныл.
ScorpioT1000 #231 - 1 неделю назад (отредактировано ) 4
Потестил щас карту Кампании Джека, на 16G ram, amd fx-8120 8 ядер по 4.02ГГЦ и видео gtx 960 4G - фпс проседает на дистанции тумана выше 10к. Это при том, что ведьмак 3 со всем DLC на ультра держит около 20-50фпс.
Ничего тут уже не спасёт. Я уму не приложу, как тут можно реализовать тот же LOD без перекраивания движка. Модель можно менять через jass, но кто будет переделывать все модели?
Если только попробовать написать тулзу, которая будет добавлять новый архив с новыми упрощенными моделями.
P.S. В во всей серии игр Gothic был LOD, начиная с первой версии (2001 год). Близзы нас этим обделили даже в StarCraft 2)
GF RaiseD #232 - 1 неделю назад 0
ScorpioT1000, можно не делать проектов требующих лодов на этом движке. Вар был создан для стандартных милии с камерой видом сверху. Подозреваю что близзы в свое время и подумать не могли что кто-либо додумается юзать иную камеру.

Юзайте туман, как в старые времена.
Daniil18 #233 - 1 неделю назад (отредактировано ) 8
Не знаю че там про унылость, я смотрел стримы проигроков и турниры по мили вк3 - это одна из самых интересных игр даже если смотреть просто.
Вот всякие кс и овердрочи невозможно смотреть
ScorpioT1000 #234 - 1 неделю назад (отредактировано ) 0
GF RaiseD, как же гранзиозные замки и красивые пейзажи? В JC на это рассчитывали)
GF RaiseD #235 - 1 неделю назад 2
ScorpioT1000, не хочу комментировать ту затею.
Doc #236 - 1 неделю назад (отредактировано ) 0
Думаю тут серьезно влияет не отсутствие лодов, а дх8 апи с нереальным количество дроуколлов.
Но я не очень разбираюсь.
GF RaiseD #237 - 1 неделю назад 0
У Близзов своя система оптимизации. Примитивная, но свое предназначение выполняет (увы, не камеры от первого/третьего лица). Даже рендердистанс дали возможность изменять. Не нравится такая парадигма - используй другой движок.
ClotPh #238 - 1 неделю назад (отредактировано ) 0
GF RaiseD, да чем он уныл-то? Не весь мир графодрочеры, мне вот на фиг не надо деревья колыхающиеся и че там еще за финтифлюшки по ссылке, мне надо, шоб играть было приятно, а это и в игре с CGA графикой возможно
GF RaiseD #239 - 1 неделю назад -5
Не весь мир графодрочеры
Да, есть еще и нищеброды.

Об унылости. К кампании претензий нет. Это самая интересная часть. Но вот в милии слишком просто (особенно с нормальной разведкой) победить. Очень короткие матчи.
ClotPh #240 - 1 неделю назад 0
GF RaiseD, ага, и воробуржуи тоже есть
хз, мне по геймплею ладдерный вар в целом нравился
GF RaiseD #241 - 1 неделю назад (отредактировано ) 0
Extremator, ты хотел узнать индекс и/или проверить наличие хендла в массиве?
DracoL1ch #242 - 1 неделю назад 0
в новых патчах могут и вовсе дропнуть dx8, они ведь под вин10 ориентируются нынче
ENAleksey #243 - 1 неделю назад (отредактировано ) 0
DracoL1ch, они ведь и так перешли на dx9 начиная с патча 1.27a.
Meddin #244 - 1 неделю назад 2
Буквально считанные минуты назад обнаружил, что сетка(Ловчий) сбивает хил(свиток регенерации, лечебный эликсир). Есть предложение предложить близзам пофиксить это в последующих патчах, если они возьмутся баланс подправлять или какие то детали игрового процесса, потому как не логично. сетка - это же не урон, особенно если принимать во внимание тот факт, что реген не сбивается при атаке зданий орков, когда воины напарываются на шипы.
Extremator #245 - 1 неделю назад 1
GF RaiseD:
Extremator, ты хотел узнать индекс и/или проверить наличие хендла в массиве?
Ну по-сути да, но на уровне нативки, а не за счёт постройки цикла циклов... есть же разница?
И описал я это таким образом, что бы пользоваться было максимально удобно
При этом в добавок к первой ArraySearchFirst(a,b) [integer] , которая вернёт первый номер совпадения, так же хотелось бы иметь функцию на поиск последнего совпадения - ArraySearchEnd(a,b) [integer] в тем же выводом.
+ наличие общего подсчёта совпадений - ArraySearchAll(a,b) [integer] , где возвращался бы не номер конкретного массива (как в предыдущих случаях), а число вообще всех совпадений.
Допустим одно и то же число (пусть это будет 255) записано в переменные n[3] , n[7] и n[9], то set x = ArraySearchAll(n,5) присвоило бы переменной x (integer) значение 3 , потому что три массива переменной n имеют искомое значение 255.
GF RaiseD, кстати, кто-либо упоминал о функциях получения текущего цвета юнита? (по RGB) то же не помешало бы.
Steal nerves #246 - 1 неделю назад (отредактировано ) 2
GF RaiseD, кстати, кто-либо упоминал о функциях получения текущего цвета юнита? (по RGB) то же не помешало бы.
+ еще узнавать текущий размер юнита (ширина и длина)
+ еще устанавливать проходимость с настройками (как получается, что у блейда стремительность через юнитов норм проходит, а через горы и деревья блок. в некоторых случаях это то, что нужно (не выбегает через горы и деревья, выглядит как бы естественно). SetUnitPathing не то, так как игнорит все преграды путей
Zahanc #247 - 1 неделю назад 0
Это по-сути collections API.
ScorpioT1000 #248 - 1 неделю назад 1
Extremator, ага, ещё SQLite прикрутить вдобавок))
Clamp #249 - 1 неделю назад (отредактировано ) 1
Extremator, как ты собрался передавать массив в аргументы функции?
Или предполагается передавать некий хендл массива (i.e. указатель)?

Вообще всё тобой перечисленное решается за полчаса-час посредством написания небольшой обёртки для массивов, и в ней хоть поисковые деревья строй.

» раскрыть
[пример]
	local integer n
	local unit array i
	set i[0] = udg_unit000
	set i[1] = udg_unit001
	set i[2] = udg_unit002 // допустим этот юнит является так же GetTriggerUnit()
	set i[3] = udg_unit003
	
	set n = ArraySearchFirst(i,GetTriggerUnit())
	// название функции подсказывает о первом совпадении
[end-пример]
Закинь зачем конкретно зачем тебе понадобилось подобное, аж любопытно, почему не хочешь по самому хендлу напрямую обращаться в структуру, в которую пишется любое количество нужных данных, втч и всякие подобные индексы.
avuremybe #250 - 1 неделю назад 0
А еще нужна нативка, чтобы узнать какой цвет игрока присвоен сейчас юниту.
avuremybe #252 - 1 неделю назад 0
Clamp, и держать БД для всех юнитов? Зачем это нужно, если можно сделать нормальную ф-цию.
Есть присваивание, так почему нет считывания?
Clamp #253 - 1 неделю назад (отредактировано ) 3
и держать БД для всех юнитов?
Что насчёт идеи не хранить все яйца в одной корзине и просто сохранять данные на самого юнита, а не в некую Страшно Сложную В Написании Базу Данных?
Зачем это нужно, если можно сделать нормальную ф-цию.
Нормальную - можно, но функционал, который ты описываешь объективно бессмысленно реализовывать в качестве нативной функции. Это сопоставимо с желанием иметь в API видеодрайвера функцию, которая возвращает текущий цвет конкретного пикселя конкретного монитора.
GF RaiseD #254 - 1 неделю назад (отредактировано ) 0
Extremator, вертексколор относится к полям юнитов/декораций/разрушаемых.
Насчет поиска индекса хендла или числа в массиве. Массивы не могут быть универсальными, тоесть для каждого типа нужно будет отдельные 3 функции, не говоря уже о реализации. Чтоб массивы принимались как аргументы нужен новый тип, наследующий хендл. Обявление выглядело бы примерно следующим образом:
local array unit u
//или
local unit array u
Но такой синтаксис не вписывается в текущую парадигму, придется много перелопатить чтоб это внедрить. Такое вполне возможно реализовать и с текущими инструментами. Извини, я не хочу это репостить.

» Как вам такое?
type uimodel extends handle
type uitext extends handle

function CreateUImodel takes string modelLocation, real modelWidth, real modelHeight, real screenX, real screenY, integer red, integer green, integer blue, integer transparency, integer layer returns uimodel
function CreateUIText takes string text, real letterHeight, real screenX, real screenY, integer red, integer green, integer blue, integer transparency, integer layer returns uitext

function ShowUImodel takes uimodel u, boolean flag returns nothing
function ShowUIText takes uitext u, boolean flag returns nothing

function DestroyUImodel takes uimodel u returns nothing
function DestroyUIText takes uitext u returns nothing

function SetUImodelX takes uimodel u, real x returns nothing
function SetUImodelY takes uimodel u, real y returns nothing
function GetUImodelX takes uimodel u returns real
function GetUImodelY takes uimodel u returns real

function SetUITextX takes uitext u, real x returns nothing
function SetUITextY takes uitext u, real y returns nothing
function GetUITextX takes uitext u returns real
function GetUITextY takes uitext u returns real

function SetUImodelR takes uimodel u, real r returns nothing
function SetUImodelG takes uimodel u, real g returns nothing
function SetUImodelB takes uimodel u, real b returns nothing
function SetUImodelT takes uimodel u, real t returns nothing
function GetUImodelR takes uimodel u returns real
function GetUImodelG takes uimodel u returns real
function GetUImodelB takes uimodel u returns real
function GetUImodelT takes uimodel u returns real

function SetUITextR takes uitext u, real r returns nothing
function SetUITextG takes uitext u, real g returns nothing
function SetUITextB takes uitext u, real b returns nothing
function SetUITextT takes uitext u, real t returns nothing
function GetUITextR takes uitext u returns real
function GetUITextG takes uitext u returns real
function GetUITextB takes uitext u returns real
function GetUITextT takes uitext u returns real

function SetUImodelWidth takes uimodel u, real w returns nothing
function SetUImodelHeight takes uimodel u, real h returns nothing
function GetUImodelWidth takes uimodel u returns real
function GetUImodelHeight takes uimodel u returns real

function SetUITextHeight takes uitext u, real h returns nothing
function GetUITextHeight takes uitext u returns real

function SetUITextText takes uitext u, string t returns nothing
function GetUITextText takes uitext u returns string

function SetUImodelmodel takes uimodel u, string modelLocation returns nothing
function GetUImodelmodel takes uimodel u returns string

function SetUImodelLayer takes uimodel u, integer h returns nothing
function GetUImodelLayer takes uimodel u returns integer

function SetUITextLayer takes uitext u, integer h returns nothing
function GetUITextLayer takes uitext u returns integer

GF RaiseD, кстати, кто-либо упоминал о функциях получения текущего цвета юнита? (по RGB) то же не помешало бы.
+ еще узнавать текущий размер юнита (ширина и длина)
Это, вроде бы нигде не пишется, тоесть надо будет добавить новый параметр
+ еще устанавливать проходимость с настройками (как получается, что у блейда стремительность через юнитов норм проходит, а через горы и деревья блок. в некоторых случаях это то, что нужно (не выбегает через горы и деревья, выглядит как бы естественно). SetUnitPathing не то, так как игнорит все преграды путей
Это перефразируй когда тебя отпустит.
abidin #255 - 1 неделю назад 0
А еще нужна нативка, чтобы узнать какой цвет игрока присвоен сейчас юниту.
Если я не ошибаюсь , они же добавят нативку, которая позволит считывать любые атрибуты с РО, или я ошибаюсь?
GF RaiseD #256 - 1 неделю назад 0
  • Get and set object editor fields at runtime, e.g. a unit’s model, a unit’s attack missile, set tooltips for units/abilities/items, set icons, etc.
abidin #257 - 1 неделю назад 0
Get and set object editor fields at runtime, e.g. a unit’s model, a unit’s attack missile, set tooltips for units/abilities/items, set icons, etc.
ну значит да =)
GF RaiseD:
etc.
Steal nerves #258 - 1 неделю назад 0
GF RaiseD:
+ еще устанавливать проходимость с настройками (как получается, что у блейда стремительность через юнитов норм проходит, а через горы и деревья блок. в некоторых случаях это то, что нужно (не выбегает через горы и деревья, выглядит как бы естественно). SetUnitPathing не то, так как игнорит все преграды путей
Это перефразируй когда тебя отпустит.
ну имеется в виду, что через юнитов норм должен проходить. Пример способности стремительность. Наверное, там физ. размер стоит на ноль. А вот через деревья или ландшафт не должен. Знаешь, если SetUnitPathing отрубить, то юнит легко забирается по уклонам, например с 1 уровня ландшафта на 2.
не знаю как назвать этот уклон поточнее, поэтому скидываю скрин
прикреплены файлы
GF RaiseD #259 - 1 неделю назад (отредактировано ) 2
Steal nerves, это часом не CollisionSize, одно из полей в редакторе? Ребята уже запросили доступ ко всем полям юнитов/декораций/разрушаемых/баффов и эффектов, хотя приведены образцы только некоторых функций. Надеюсь близзарды это тоже понимают.
Steal nerves #260 - 1 неделю назад (отредактировано ) 0
GF RaiseD, не знаю, возможно это оно. Если ты про физ. размер в РО, то что-то не похоже (ноль ставил).
вот ссылка когда пробовал затестить
GF RaiseD #261 - 1 неделю назад 0
function ToggleUnitCollision takes unit u, boolean flag returns nothing
Clamp #262 - 1 неделю назад 0
тоесть для каждого типа нужно будет отдельные 3 функции
Можно сделать универсально даже уже имеющимися инструментами, на самом деле.

Но геморройно, тут ничего не сказать.
Кристофер #263 - 1 неделю назад 2
Ребят, тут на хайве новый WE завезли!
Пока ещё всё только развивается, но уже есть фичи:
-Можно сохранять список юнитов и загружать его в любую карту.
-Можно рисовать карту проходимости без блокираторов путей.
Как я понял, ребята пишут редактор с нуля, а значит, это позволит расширить функции, в сравнении с обычным редактором.
А так же, они не против помощи. :)
GF RaiseD #264 - 1 неделю назад 0
Но геморройно, тут ничего не сказать.
Тут основная проблема - реализовать передачу массива в аргументы.
Такое вполне возможно реализовать и с текущими инструментами.
Extremator #265 - 1 неделю назад (отредактировано ) 0
Тут основная проблема - реализовать передачу массива в аргументы.
Пародия на тип widget , принимающая дочерние типы unit / item / и т.п.
Есть же такое - есть, почему нет? )
Если аргументировать ненужность чего-либо тем, что такой же результат можно получить стоит лишь что-то сделать, то... Зачем тогда вообще запрашивать новые функции? есть же MemoryHack, он и так развязывает нам руки, получи что хочешь, только сделай для этого что-то...
PrincePhoenix #266 - 1 неделю назад 2
Если аргументировать ненужность чего-либо тем, что такой же результат можно получить стоит лишь что-то сделать, то... Зачем тогда вообще запрашивать новые функции? есть же MemoryHack, он и так развязывает нам руки, получи что хочешь, только сделай для этого что-то...
Мне допустим гораздо приятнее работать за средой, в которой не нужны костыли и танцы с бубном)
abidin #267 - 1 неделю назад 0
Ну есть же шаблоны в 18 году и сложность реализации лучше оставить на разрабов.
А вещь которую предложил Extremator, действительно нужная.
GF RaiseD #268 - 1 неделю назад 1
Extremator, в случае с поиском указанного элемента в указанном массиве, это реализуемо штатными средствами. В том виде что ты написал, насколько я понял, массивы объявляются стандартно:
local unit array u
Твоя функция должна принимать в аргументы массивы любого типа? Тоесть ты пишешь просто
function GetArrayIndex takes unit u, unit a returns integer
Ты хочешь чтоб эта функция принимала именно массив с названием и типом, указанном в первом аргументе и искать в нем индекс элемента, тип и ссылка который указаны во втором? Массив как отдельный тип нельзя просто взять и добавить.
PrincePhoenix #269 - 1 неделю назад 0
PrincePhoenix, тебе то что?
xD Я могу овладеть им со справочником) Это не сложно, да и через custom script обычно тоже полезные вещи получаются)
GF RaiseD #270 - 1 неделю назад 0
PrincePhoenix, ты по определению предпочитаешь танцы с бубном.
quq_CCCP #271 - 1 неделю назад 0
Extremator, насколько помню виртуальной jasm машине пофиг на это, массив это тупо адресс, его можно засунуть в функцию в качестве аргумента, да и каллбеки могут иметь аргументы, я уже выкладывал наработку на мемхаке на эту тему ссылка. Но все это реализуемо обходными путями, как к примеру глобалками или структурами vjass, так что не думаю что передача массивов в качестве аргументов так уж и нужна, есть куда более нужные вещи.
Extremator #272 - 1 неделю назад 0
Твоя функция должна принимать в аргументы массивы любого типа? Тоесть ты пишешь просто
Да, именно так. Ну допустим был бы тот самый тип value, дочерний от handle (собственно как и всё живое).
type value extends handle // как объект что ли?
            // или от чего являются дочерними типы integer , string и real ?
type valuesub extends ??? // or valsub
native ArraySearchFirst  takes value a, valsub b returns integer
native ArraySearchLast  takes value a, valsub b returns integer
native ArraySearchALL  takes value a, valsub b returns integer
Я прекрасно понимаю что взаимосвязь первого и второго аргументов (условный объект и его тип) нельзя так самовольно вклинивать куда-либо без инструкций... как заставить последующий аргумент принимать тип от типа предыдущего (объекта, условно). Сложно.
GF RaiseD #273 - 1 неделю назад (отредактировано ) 0
Extremator, игра же создает уникальные id для каждой копии хендла.

То есть, случае с хендлами и производными нужно передавать только массив и integer. Твои функции - для поиска unittyp'ов.
Extremator #274 - 6 дней назад (отредактировано ) 0
Но все это реализуемо обходными путями
вот обходной путь
function GetNum_unitPool_A0bx takes unit u returns integer
	local integer Num = 0; local integer Loop = 0;
	local integer Max = udg_unitPool_Max // to integer, not-array
	loop; set Loop = Loop + 1
	if u == udg_unitPool_unit[Loop] then; set Num = Loop; endif
	exitwhen Loop == Max or Num != 0; endloop
	return Num
endfunction
Он выдаст номер первого совпадения,
а если считать в обратном направлении - то номер последнего.
Так же можно просто увеличивать его на +1 каждый раз, вот и всё что мне нужно.
. . .
Так-с, а что на счёт функции которая заставит иконку баффа в статусе юнита мигать, а?
native SetUnitBuffPing takes unit whichUnit, integer buffID, boolean flagPing returns nothing
И, например, функция которая даст знать мигает ли сейчас иконка баффа у юнита.
native GetUnitBuffPing takes unit whichUnit, integer buffID returns boolean