Git Product home page Git Product logo

jassdoc's People

Contributors

cipherxof avatar cokemonkey11 avatar deadreyo avatar dominikricko avatar elusivemori avatar frotty avatar herlysqr avatar jaccouille avatar lep avatar leyki avatar luashine avatar prometheus3375 avatar tasyen avatar waterknight avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

jassdoc's Issues

Confirm and add UNIT_WEAPON_IF_ATTACK_TARGETS_ALLOWED

public enum TargetsAllowed
{
    Ground = 1 << 1,
    Air = 1 << 2,
    Structure = 1 << 3,
    Ward = 1 << 4,
    Item = 1 << 5,
    Tree = 1 << 6,
    Wall = 1 << 7,
    Debris = 1 << 8,
    Decoration = 1 << 9,
    Bridge = 1 << 10,

    Self = 1 << 12,
    PlayerUnits = 1 << 13,
    Allied = 1 << 14,
    Neutral = 1 << 15,
    Enemy = 1 << 16,

    Vulnerable = 1 << 20,
    Invulnerable = 1 << 21,
    Hero = 1 << 22,
    NonHero = 1 << 23,
    Alive = 1 << 24,
    Dead = 1 << 25,
    Organic = 1 << 26,
    Mechanical = 1 << 27,
    NonSuicidal = 1 << 28,
    Suicidal = 1 << 29,
    NonAncient = 1 << 30,
    Ancient = 1 << 31,

    NotSelf = PlayerUnits | Allied | Neutral | Enemy,
    Friend = PlayerUnits | Allied,
}

so I believe this is its structure

By Arxos in Hive Discord

How to integrate historical Jass data?

Hey I finally finished the extraction of Jass for different game versions: https://github.com/Luashine/jass-history/

How to deal with these?

  1. Old Deleted functions: I think to put them in a separate file, there aren't many

  2. Renamed functions: ??? very few if any, I'd probably put them in a different file yet, for easier copy-pasting during doc updates
    ... but it begs the question if @alias would be worth it, there are also swapped BJ functions where it could come in handy

  3. Functions with changed signatures: this is tricky. For example, when the widget type was added, some functions changed their input variable type. Other functions expanded by an argument, such as EndGame used to be takes nothing, now it takes a boolean

  4. Tracking initial version: most functions have never changed since the first ROC Beta. On one hand if this was blindly added to every function, it'd create unnecessary clutter. On the other hand, if you dont add it then later you cant be certain if that's because the func was always there or the version info was never added?

Finally I don't know it it all belongs inside a @patch. I'd rather see the @since tag added just for that info and keep @patch for any changes in behavior/removal.


I don't have anything to do code-level comparisons with, will your perl parser cut it? I dont think so because I thought of these:

  1. track variable types for variables
  2. track values for variables
  3. track function signatures for natives and funcs
  4. track function content for regular functions (can be text-based, that isn't much)

I had looked at actboy's totally undocumented and messy parser, AST and all that stuff... if the above requirements are too much for your perl script I guess I will go the noob route and regex my way through Jass again. Like I dont think AST would be worth it really or learning how to run ANTLR or writing my own even if Jass is really easy 😅

Does this include vJass?

Sorry I accidentality submitted before finishing my question.

I'm really glad I found this repository, thanks for making this! I am just getting started with Jass and vJass. Since vJass seems to be officially supported by the World Editor I am asking if this documentaiton includes vJass and if pull requests regarding vJass will be considered?

Describe SyncStoredInteger-type natives

Incorporate info from wc3jass.com?

The website disappeared in 2008. Some of it remains on the Wayback Machine: https://web.archive.org/web/20080911204136/http://wc3jass.com/

Moyack recreated the website in 2012 but it has been erased since.

Apparently some of the tips described there made it verbatim to current day, like Jass: Known bugs says:

GroupEnumUnitsInRectCounted and GroupEnumUnitsInRangeCounted
Those two natives seems to show irregular behaviour when used on large numbers of units.

I remember seeing that exact wording not too long ago (until I described these functions).

The plan:

  1. Read notable forum topics, write down (possibly historic) information from there. Especially the totally undocumented and unintuitive natives will be helpful // UPD: DONE. All of them.
  2. Optional: go back and recreate test cases for affected warcraft versions. // UPD: NOT NEEDED.

Do we need to do this?

Most info on Jass will still be relevant. Some info is not, because various bugs have been fixed. Still, the community is pretty much split between 1.24 (old maps with return bug), 1.26 (maps making use of memhack), 1.30/1.31 (our reforged-less brothers and sisters), 1.32 (due to buggy 1.33), and the latest official 1.33. While nobody's gonna develop for 1.24; 1.26 and others are still somewhat relevant.

The priority should be undocumented natives first and if anyone has the motivation, separately note 1.26+ bugs and quirks.

How?

You can freely* browse the website on archive.org. *But not really freely. Because some topics are not saved (example #2373) and others will be saved under a different URL.

For example,

  • http://wc3jass.com/viewtopic.php?p=9396 and
  • http://wc3jass.com/viewtopic.php?p=9396&sid=1e01ceb19fe171c30c697b63a6bf9713#9396 are different.

If you have the latter URL, you can easily try its short version, but if you have the short URL then you have to search/filter all of the archived URLs. It's possible, but limited and buggy: https://web.archive.org/web/*/http://wc3jass.com/* (takes a long time to load, don't open unless you intend to work on it)

Progress tracking

If multiple people will work on this, I suggest each person to create a single comment and add to it the topic you've read and processed to organize the effort between multiple people. Example:

[x] https://web.archive.org/web/20080113045551/http://www.wc3jass.com:80/viewtopic.php?t=2039 = Jass tutorial by Vexorian

[ ] https://web.archive.org/web/20080607065301/http://www.wc3jass.com:80/viewtopic.php?t=1999&sid=bbe8304984c3779b4fd9c7c6d19ded6a = Tutorial, "Using Timers and Handle Vars"

// Update: Not needed, there were 800 saved post links total with many duplicates.

Explanation for current doc annotations

So far I have used @param, @bug, @note, @pure, @async and @event annotations. Other possible annotations could be @nosideeffect.

  1. Yet only those have custom representation? async, pure, event. Everything else appears as normal text, right?
  2. I noticed it's markdown, what engine's used? It's not like I'm going to try and insert images, but it's good to know what exactly is supported.
  3. What exactly does @pure mean? Haskell's definition of pure? ie. idempotence?
  4. @patch seems to be used to note when the function has been introduced?
  5. @bug annotations can have a version either in plaintext or as a parsed value. @lep Your idea of "developers using the sqlite db" to hunt for bugs probably isn't going to become a reality, then for a style guide it would suffice for people to add the affected versions however they like as text: @bug Reforged: or @bug 1.31-1.32.2: - without adding complexility like @bug <version> <text>
    • Versions are important because the community split in 1.26 / to a lesser extent 1.27+ / and official bnet Reforged. One map author told me in a private discussion that a map "doesnt work on Reforged" and his only reason was the Preload differences, which aren't actually compatibility blockers if done right.

I would like to prepare an easy to follow style guide and installation instructions for those willing to contribute. Github is a one hoop on the way to contribution, no need to add more :)

For now I've used the hive's thread to motivate people, so I'm gonna continue discussing technical stuff here.

Msg updated

event constants

I think event constants like EVENT_PLAYER_UNIT_SPELL_EFFECT and EVENT_UNIT_DAMAGED are interesting because they control bindings.

For example, EVENT_UNIT_DAMAGE contexts have no binding for GetAttacker(), but do have a binding for GetEventDamageSource().

Change End-of-Line (EOL) for Blizzard.j

Continuation of #108 (comment) -- following lep's last reply about it.

I'm typing this out below for my future self... it has wasted hours of my time already to grasp this :(


git blame points to this commit containing LF in the diffs: 828d7ab 828d7ab.

I typed out the response yesterday but didn't have time to test so I didn't comment then. The only good article on this matter is https://www.aleksandrhovhannisyan.com/blog/crlf-vs-lf-normalizing-line-endings-in-git/ just skip the history part.

git config --local core.autocrlf true
git rm --cached -r .
git reset --hard

The commands you typed out are really the only way to safely re-extract the files and apply new EOL rules. Use them for testing in the future. The only command I'd like to add is git show <REVISION>:<FILE> > stdout.txt to get the file as-is without conversions. WARNING though, you must NOT use CMD or Powershell else they may introduce LF->CRLF conversion on their own. For example:

  1. git show HEAD~1:Blizzard.j > prenormalized-Blz.j
  2. Do some conversion in new commit in either direction
  3. git show HEAD:Blizzard.j > postnormalized-Blz.j
  4. Observe that the internal representation in index has really changed by viewing these files.
  5. Double-check with git ls-files --eol

Keep in mind, git's preferred internal representation for text is LF and only LF. The issue really is/was not that git automatically converts between LF/CRLF. It's that the file in working dir ended up having MIXED LF/CRLF, which git did not dare to convert to LF and thus checked in & committed MIXED into internal index.

The fact that git "did not dare" has to do with OS && autocrlf setting && writing LF in our case, when it had to be CRLF (as the rest of the file was CRLF already). You might've extracted the file as CRLF initially but then patched it with a tool in LF style.

In this context I regard .gitconfig as "what can I do with my setup to avoid having/introducing these issues" and .gitattributes as "what can the repository do with its settings to avoid issues" sort of a soft policy.

  • gitconfig (not shared with repo)
    • core.safecrlf = true or warn -- setting to true will abort commits that would break line endings (aka mix LF and CRLF)
    • as an alternative to safecrlf, add your own pre-commit hooks.
    • autocrlf, answer on SO
      • set to true if you're only gonna use Windows... what about in 3-5 years down the road?
        • it's alright if you are not gonna dual-boot or share the git folder between Windows/*nix (uhh WSL anyone?)
      • set to input otherwise (checked out into workdir as-is)
        • Windows tooling could still write CRLF into LF files. But that's the lesser evil to fix, if it does not convert automatically (it should).
      • set to false if you're gonna strictly specify all files through .gitattributes (otherwise high chance of ending up with MIXED)
  • gitattributes (shared with repo)
    • * text=auto eol=lf -- for all files automatically detect if its binary/text (already default) but if it's text, git will respect our eol instead of core.autocrlf
      • this is per-file core.eol essentially. Git apparently ignores it if config core.autocrlf is == true/input

Back to the repo. Blizzard.j right now is in MIXED state internally with 98% CRLF and 2% LF.

  1. Fixing this to align with git's internal LF will mean a 14k line diff commit. Then we could force eol=lf on all files
  2. Not doing anything (aka text is "unspecified") will continue to cause spurious merge conflicts and line conversions depending on user's core.autocrlf, especially dual-booting.
  3. Unsetting text with -text will instruct git to not touch the lines anymore. We would live on with mixed lines. Doesn't seem too bad on the surface, but software would get confused and line replacements will pop up from time to time.
    • However it's possible to turn all internal index from MIXED (98% CRLF) into 100% CRLF with a small diff. This would give us a consistent file but very unusual for git. This is normally reserved for the likes of .BAT that require CRLF. Anyway the rest of the repo is LF, this would be odd too.
    • On the other hand this setting encourages mixing newlines in the future, it's inevitable someone will write LF from Unix world into this windowsy file.

Let's take Notepad++ for example. I've noticed it before, it will autodetect EOL based on the few lines in the beginning and only choose and only show one type of EOL (even if file is mixed). It sees Blizzard.j as CRLF (in reality MIXED).

  1. Theorematis[CRLF]
  2. arithmetici[LF]
  3. demonstratio[LF]
  4. nova.[CRLF]

Pressing ENTER after "arithmetici" and continuing to write will turn into:

  1. Theorematis[CRLF]
  2. arithmetici[CRLF]
    1. Gauss[LF]
  3. demonstratio[LF]
  4. nova.[CRLF]

-> We just changed the EOL and moved LF onto the other line


Pressing DELETE after "arithmetici", but then changing mind and pressing ENTER will remove LF but write CRLF:

  1. Theorematis[CRLF]
  2. arithmetici[CRLF]
  3. demonstratio[LF]
  4. nova.[CRLF]

-> We just changed EOL (renormalizing the file one line at a time lol)


I suggest to say fuck it, bite the bullet and normalize Blizzard.j to only contain LF as the other files do (huge commit). Then set eol=lf for all files. And if you enabled safecrlf = true for yourself in config it would shout at you with (and abort the git add):

fatal: CRLF would be replaced by LF in creditsother.pld

here you tried to add a CRLF'ed .pld file while the attributes require LF on the input side. I think it's a good thing, you can convert on your own (dos2unix). With safecrlf = warn it would work as it says but give you a warning.

.gitattributes

# All game scripts are CRLF, but LF works fine and we already use it
# aka "text" is set, enabling EOL conversion the way we want it if not forbidden by safecrlf
*.j			text eol=lf
*.ai		text eol=lf
# Not yet included in repo but can go with LF for consistency?
*.pld		text eol=lf
*.wts		text eol=lf

Sorry about the wall of text, I'm not happy with all this work either but finally got to the root of it ❤

TerrainDeformCrater - shape/approximation

image

18:56 ^ two craters of r = 256, depth = -128
18:56 step size 8
18:57 starting at -256 - 16

image

^ step-size 4

image

^ step-size 2

Observations:

  • GetTerrainZ() interpolates over adjacent heightmap datapoints
  • No values are modified outside radius r
  • Applying the same crater with the same parameters just hits the same heightmap values by the same magnitude - i.e. the heightmap is modified by a pure function of (x, y, r, depth)

Questions:

  • Are the interpolated values linear over their cell?
  • When duration parameter is set, how is the modification applied? linearly?
  • What is the cell size?
  • How does the crater behave for radius and height values that are not divisible by the cell size? What about for x and y?

Set Terrain tile native: unlimited tile choice in SD Reforged?

OH YES, Willy, if you somehow manage to make the game use more than 16 ground* textures, YOU'LL BE MY ABSOLUTE HERO 😍 AND I'LL FAVOR HIVEFORGED FOREVER 🤟

MindWorX:
Unlikely to happen 😄
It's still kinda funky that you have unlimited tiles in SD Reforged.
But not in HD Reforged.
And not in SD pre-Reforged.
Yep, apparently if you use the natives to set terrain tiles, in SD it allows you to set any tile.
Even ones you didn't include.

From Hive Discord, message link

Retera:
I remember doing this in patch 1.22-1.26
Werent tiles always unlimited?
...
But i recall thinking tiles seemed infinite via triggers in the old days
That was how I felt about it, at least

Find out and document.

Advice against "constant handle"?

As a part of #73 I was going to add this note, but decided to look further into "why":

+@note You should not initialize game sounds as constants in Jass (why?)

In a reply there moyack says that the problem he had was due to a constant sound handle. He had an issue after loading a saved game.

Searching further, all I really found were posts on hive like this:

You shouldn't use handle variables as constant globals, make them nonconstant.

And then the only interesting discussion here, where nobody understands the logic of constant vs non-constant functions, and for handles only the issue with "wc3mapoptimizer" is pointed out (wrongly constant-folding handle variables). Though that's different from whatever bug moyack had after game load.


Basically, does anybody know what constants are good for (except basic types like int)? Should we add a general warning to handle type? (and then each descendant type too?) to never save handles as a constant?

SetUnitX / out of map boundary orders crash?

https://web.archive.org/web/20140213050502/http://www.wc3c.net/showthread.php?t=102576

Moving a unit outside the map's bounds using SetUnitX/Y will STILL crash the game. But I did not want to use a wrapper for SetUnitX/Y that does the bounds checking, an extra function call seems like killing the whole purpose of using SetUnitX/Y... Adding this library to your map (just adding it) [...]

Post 5:

Really, been testing:
Left/Right/Top edges do not crash.
Bottom edge crashes: However it doesn't crash at the instant you call SetUnitY, it crashes when the frame is rendered (apparently, could be another thing besides rendering...) so, yep this library really prevents crashes.
There is another thing with edges, regardless of the crash we knew about for so long, if you issue an order to a unit too far from the edges, the game will freeze, yep BoundSentinel prevents that as well.

Pages 2 and 3 were not archived.

Maybe no longer crashes on Reforged.

  1. SetUnitX/Y
  2. Order a unit too far out
  3. Test all directions

This resource is crashing the game during loading time on patch 1.31.1.

The following line is the culprit:call SetUnitY(dummy, GetRectMaxY(world) + 1000).
Removing the + 1000 fixed the issue.

UnitDamageTarget - does nothing if source is null

jassdoc/unit.j

Line 645 in e568f1c

native UnitDamageTarget takes unit whichUnit, widget target, real amount, boolean attack, boolean ranged, attacktype attackType, damagetype damageType, weapontype weaponType returns boolean

the source (first arg) must be an actual unit

Setting source and target as the same unit is an easy way to resolve if intentionally don't have a source

TODO List: Follow-up on #68

#68

  • StringHash In what version was it changed? - Answer (merged)
  • boolexpr.j: Does inheritance matter when choosing which destroy function to use? Memory leaks or anything by calling the "wrong" function?
  • Research Filter, Condition. The old descriptions contradict 1.32.10 tests

Where to put `CreateUnitWithoutShadow`.

Looking at this thread i was looking for this function in jassdoc but i couldn't find it.
Now next time i do want to find it in jassdoc, so i ask myself where such a function should be documented at? CreateUnit, CreateImage and DestroyImage seem like good candidates.

Now of course that's under the premise that it still works))

mksrc: some values contain trailing new line

                    insert into annotations (fnname, anname, value) values (
                        'bj_HASHTABLE_STRING',
                        'source-code',
                        '	constant integer   bj_HASHTABLE_STRING                  = 3
'
                    );

These get inserted into the database as \x0a (I am on Linux). Even some of the @pure annotations have that trailing new line while others don't.

Does have new line on pure: OrderId

jassdoc/common.j

Line 1376 in ca10ef7

constant native OrderId takes string orderIdString returns integer

Does not have: OrderId2String

jassdoc/common.j

Line 1395 in ca10ef7

constant native OrderId2String takes integer orderId returns string

I see it's simply not trimming trailing new lines from the .j files and processing them literally. That's clutter in my opinion and should be removed.

Clarify TriggerSleepAction

https://lep.duckdns.org/app/jassbot/doc/TriggerSleepAction via #60

Assigned: myself

Tasks:

  1. Verify if TSA continues ticking when F10 is pressed in Singleplayer /or/ Game paused in multiplayer
  2. How it is affected by base game speed from .wgc
  3. Lua: underlying impl uses coroutines?
  4. (optional) check all other places where callback functions are accepted
  5. Merge this text
pauses the current execution thread, sleeps for timeout of real-time seconds and resumes execution where this function was called. You may only use this inside trigger actions!

The [u]timeout[/u] timer has a granularity of 10Hz, this means you can only sleep in 100ms intervals at best (1000ms/10 = 100ms). [u]Timeout[/u] of 0 also sleeps for 100ms. [u]Timeouts[/u] -120 < x < 0 are the same as 0. [u]Timeouts[/u] <=-120 abort further execution.

[quote=WorldEdit help text]The duration of this wait is specified in real-time seconds.[/quote]
Therefore the game speed does not affect this timeout. Reforged (v1.32.10): Pausing the game also pauses the ticking of the timeout.

The behavior is similar to [url=https://www.lua.org/manual/5.3/manual.html#2.6]coroutines in Lua[/url], this principle is called [url=https://en.wikipedia.org/wiki/Cooperative_multitasking]cooperative multitasking[/url] where you hand off control of the execution thread and it is returned to you at a later time.

See: [jassdoc]PolledWait[/jassdoc] for sleeps in game-time seconds.

Example (Lua):
[code=lua]local secretWord = "please"
DisplayTextToPlayer(Player(0), 0, 0, "Current time is: ".. os.date())
TriggerSleepAction(10) -- sleeps for 10 seconds
DisplayTextToPlayer(Player(0), 0, 0, "After sleep the time is: ".. os.date() .." and the secret word is: ".. secretWord)[/code]

ItemAddIndicator

[23-48-49] Wietlol: i was implementing items and came across a function I find a bit weird
[23-49-02] Wietlol: ItemAddIndicator() and ItemAddIndicatorBJ()
[23-49-33] Wietlol: the parameters seem to make it like SetUnitVertexColor() but for items, but the name is more like something for UI

SetUnitAcquireRange

There is some myths that using this native can reduce a unit's effective attack range, but that only works in special circumstances and has some caveats

  • actual attack range is not reduced, so if you have some AI-controlled units attack-move-ing, they will not get reduced attack range
  • UI will still display the unit's actual attack range.

Expand GetPlayerTechCount

"Daratrix" on Discord:

just finished testing it and it does that exactly, but thank you for that resource!
And it also ignores dead units, perfect 👌

dead with corpses is ignored?
Seems like it
Although is seems to not behave correctly with building currently being upgraded
A building being upgraded counts toward its equivalent dependency count and not itself, even it is not yet unlocking the related tach, that's an odd quirk
Might be related to the fact I'm an older version though

  1. Dead/Corpses missing from description
  2. Buildings during upgrade
  3. There was also a video / bug report made recently where v1.33 tech requirements on 2 different unit types only need ONE of them to be enabled. Posted on blz forums and Hive

Reach a conclusion on SetBlight desync

Making an issue to track it formally.

https://www.hiveworkshop.com/threads/setblight-desync-issues.350885/

I haven't seen anyone post about this but thanks to the guys working on W3CE it's been revealed that the SetBlight native has a major problem: it will remove blight (regardless of the value of the addBlight argument) for any player that is holding down the shift key. This can easily cause a desync.

Link to conversation

The solution is to use the other natives, which aren't affected by the shift key:
JASS:

native SetBlightRect takes player whichPlayer, rect r, boolean addBlight returns nothing
native SetBlightPoint takes player whichPlayer, real x, real y, boolean addBlight returns nothing
native SetBlightLoc takes player whichPlayer, location whichLocation, real radius, boolean addBlight returns nothing

Abilities that create blight, such as the Sacrificial Skull and Undead building creation, also don't suffer from the issue.

Issues vs Submitting incomplete descriptions

One of my pressing reasons, to move Lucan's Frames doc here and to link every undescribed function from moyacks jassdoc -> here, was to "unify" the search. To not waste time researching something that already has been described before - without you knowing it, because you couldnt find. There's now one fewer place to look in for documenation.
Side note: I was going at a speed of ~25s per link, quite good ^_^ and fast enough to not bother with a script yet

With that done, there's now the issue of issues that are opened on Github. Their info appears neither here nor there, creating yet another place to look up the information. My idea is to get rid of them use them less. Anything that's a long-standing WIP or where the author takes a break, should go straight into the doc as it is, encouraging people to complete a description later (when they want to).

Good example: #27 has been hanging there for 2.5 years. Let question marks be question marks, i.e. "its something!"

Anti example: On the other hand #31 has no value in a doc until it's complete. Maybe add a tag for such notes? @wip https://github.com/lep/jassdoc/issues/31 -> "This function's description is being worked on, you can help! "

This is a different kind of thinking, becoming more agile (though not the literal agile haha). A partial documentation can be helpful in itself. A beginning of a description (a stub in Wikipedia's terms) can be helpful to motivate people to complete it, avoiding the blank sheet problem.

This won't become a professionally polished documentation so I would not bother trying to reach perfection. I myself try to go in-depth but I expect most people won't, yet even minimal answers can be enough:

Question: anyone know what ResetTrigger does?
Answer: clears execution/evaluation count of the trigger
Reply: interesting

UnitItemInSlot

  • Is it 0-indexed?
  • Does it return null when there is no such item?
  • What's the behavior for unit with no inventory/no inventory slot at the requested index?

Do we document BJ functions as well?

I think it could be interesting to know how certain BJ functions work, for example cinematic/UI functions, and melee initialization functions.

Addition of WorldEdit help strings

How should the official GUI trigger/native description be implemented and added? I haven't looked into the format of these files yet, I will do that later.

Technical note: Apparently all of these files are stored in Game MPQ/CASC under UI/

(1) I thought if WE descriptions added to the docs source as-is, it'd violate some loicences in this repo (but there's no loicence at all). Plan: add a custom @tag to distinguish between official descriptions and ours.

(2) Same as above but instead of adding new tags to the docs source, the build system fetches them from an intermediate format (json?) - Easier than (1) because there's no need to find and inject tags at the right places in files.

(3) Handled in a separate repo(?) and merged into the .db for the front-end to process and display differently.

readme could be improved

I have pointed some users to this documentation and some are confused about 'what all hose .j files are for'.

I think the readme could have some simple introduction like the one you gave me in irc.

1.31: Specific Unit Events lost during game save/load

В 1.31 существует баг, проявляющийся после загрузок сохранённых игр. В этом случае перестают работать почти все раннее добавленные события триггеров типа Specific Unit Event (EVENT_UNIT_SPELL_EFFECT, EVENT_UNIT_USE_ITEM и т.п.) Из подобных остаются работать всего несколько (EVENT_UNIT_DAMAGED, EVENT_UNIT_DEATH).
Если ваша карта не односессионная, то необходимо либо использовать только события типа Generic Unit Event (EVENT_PLAYER_UNIT_SPELL_EFFECT, EVENT_PLAYER_UNIT_USE_ITEM и т.п.). Либо отслеживать событие загрузки игры (EVENT_GAME_LOADED) и добавлять заново потерянные события.

There's a bug in 1.31 that comes up after loading a saved game. In this case almost all Specific Unit Events stop working (EVENT_UNIT_SPELL_EFFECT, EVENT_UNIT_USE_ITEM etc.) Of all these only a few continue to work correctly (EVENT_UNIT_DAMAGED, EVENT_UNIT_DEATH).
If your map isn't a single-session map, you must use only events of type Generic Unit Event (EVENT_PLAYER_UNIT_SPELL_EFFECT, EVENT_PLAYER_UNIT_USE_ITEM etc.). Alternatively track game loading (EVENT_GAME_LOADED) and readd the lost trigger events.

Although https://wowpedia.fandom.com/wiki/Warcraft_III/Patch_1.31.0 says (see below) its worth to verify and add.

Triggers won't be lost during saves (Thank you, Bribe)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.