SMUnlimited / AMAI

Advanced Melee Artificial Intelligence Mod For Warcraft 3
Other
192 stars 31 forks source link

should can not use GetBJMaxPlayers() , even if 1.29+ #301

Open jzy-chitong56 opened 2 months ago

jzy-chitong56 commented 2 months ago

even if run on 1.29+ , if the map make by old WE(1.00~1.28.x) , then the map max player still is 16 , but the api on 1.29+ will return 24 (maybe you can test) , then IsPlayerEnemy and ally will check NEUTRAL PLAYER

but player not know make the map 's WE ver , so If there is a problem, it is difficult to locate it

This means that using the upper limit of the array to determine may also be inaccurate

jzy-chitong56 commented 2 months ago

企业微信截图_17150725283510

use old we make map , use REF run the map

    if GetBJMaxPlayers() < 20 then
        call DisplayTimedTextToPlayer(Player(0),0,0,15,"0")
    else
        call DisplayTimedTextToPlayer(Player(0),0,0,15,"1")
    endif
    if JASS_MAX_ARRAY_SIZE > 8192 then
        call DisplayTimedTextToPlayer(Player(0),0,0,15,"a")
    else
        call DisplayTimedTextToPlayer(Player(0),0,0,15,"b")
    endif
SMUnlimited commented 2 months ago

AMAI always requires maps to use latest patch data for that version. Custom maps that haven't overridden that will possibly have issues. I can't remember if its actually possible to load an old common.j as is usually loaded from the main war3 MPQ itself.

If GetBJMaxPlayers is supposed to be more than 20 then this condition is incorrect? "GetPlayerController(Player(12)) != MAP_CONTROL_CREEP"

Or is it the skillfix that needs changing so its only activated for the same condition rather than array?

jzy-chitong56 commented 2 months ago

native GetBJMaxPlayers only can run 1.29+ or 1.32+ but old WE make map can run 1.29+ when the map run on 1.29+ and use REF AMAI-- must use REF AMAI , not use class TFT AMAI , and Not related to latest patch version, will have bug like I siad

REF AMAI the GetBJMaxPlayers is native

SMUnlimited commented 2 months ago

Can you attach the example map?

jzy-chitong56 commented 2 months ago

231.zip use 1.28 WE make , but use GetBJMaxPlayers() so old war3 cannot run when you run on 1.29+ war3 , the GetBJMaxPlayers() will tell you < 20

This is also the case when other old WE make maps using REF AMAI

You provide an installer that the player will install, and the player only knows his version of Warcraft 3, but he doesn't know which version of the map is made with WE

see war3map.j

SMUnlimited commented 2 months ago

Ok, so yes native returns less players (presumably 1.29 hardcoded player counts within the blizzard.j and then they fixed the native later) but they shouldn't be using the REF AMAI anyway on that version as thats designed for 1.36.

So probrably another reason not to install on 1.29. But TFT version should in theory behave as it overrides the native. I don't think this is easily fixable without overriding the native in REF to always be 24 players.

jzy-chitong56 commented 2 months ago

In the map package I provide, I will use different WE to save the map separately according to the version, and delete the custom settings of the map as I need to swipe the W3C item icon

When players install it themselves, it becomes difficult to handle as they may not necessarily read the instructions or need to handle the map themselves

A sad phenomenon is that if they believe that a certain version of AMAI has greater difficulty in AI, they only recognize that version, even if that version has many bugs

So when this situation affects the difficulty, it is difficult to convince players to use the new version, which is very unfriendly to developers

SMUnlimited commented 2 months ago

Not much can be done in AMAI though, its an issue with the maps themselves, someone on hive done some hacks to make maps that worth in both cases https://www.hiveworkshop.com/threads/success-hybrid-12-24-player-map-backwards-compatible-1-24-1-28-5-1-31.339722/ but has to be applied on the maps themselves.

jzy-chitong56 commented 2 months ago

Try to check the game status of player 24, determine if the map belongs to the old editor's creation, then copy the neutral player variable, and finally add neutral player judgment in all places where this function is used

Because the old version has accumulated a lot of maps for a long time, I will also directly add the classic version of the map to the REF map package, and these maps cannot be ignored