The 1.5.0 patch 3 today fixed a useful exploit in galaxy syntax.
before the patch, you are not allowed to create Global arrayref/structref, but you can actually by pass this restriction by using global arrays to contain the arryref.
typedefint[2] int2;
arrayref<int2>[1] G_arrayRef;
Now this just have been fixed, and you cannot create "global arrayref/structref arrays". And you can not use arrayref/structref as fields...
before the patch, you can do many interest things.
I was actually making a new project and rewriting my GAx3 proj based on the the new galaxy "Pointer" system, and this "fix" completey ruined my maps.
And I also have some friends who quited sc2 modding since blizzard removed the "pointer" feature in 2010 SC2 beta. And with the new "pointer" feather in 2012 beta patch 2, I had almostly convinced them back to the community. But now which this fix... it's just not going to happen : (
They actually fixed quite some useful stuff in this patch, for example I had a bug with attached actors not firing create actions on Behavior.* or Effect.* events. Every other action was fine, but creating them was impossible with 1.5 (possible in 1.4 and earlier though). They finally fixed that.
I'm pretty sure they fixed a lot of this little buggy 1.5 stuff in this patch. I also had some really really weird issues where my Editor crashed when I added Timers to some particular Actor Event Macros. I don't know what caused it and I didn't bother to investigate it further, but that issue seems to be solved as well.
Also I noticed that I can see the actual Text Messages sent by a trigger, even if its a map from a different region. I don't know if that only applies to the beta and if it will still bug out once 1.5 goes live on EU, US etc, but its nice to not only see "Param/Value/A45EFIIEJK" while using the Arcade Beta. Would be quite nice if they finally fixed that bug though.
I'm not sure I completely understand your opening post. There is mention that we cannot create global arrayref/structref array anymore, is this what you are referring to?
arrayref<int2>[1] G_arrayRef;
After the fix we can only do this?
arrayref<int2>arrayRef
Would you care to elaborate on why global arrayref arrays are so powerful? The novelty is not very clear to me in the fun() example.
@Renee2islga: Go
I'm not sure I completely understand your opening post. There is mention that we cannot create global arrayref/structref array anymore, is this what you are referring to?
Nop.
From the begin, you cannot create arrayref variable outside of a function. So you can never do "arrayref<int2> arrayRef" unless if you put it inside a function.
Creating global arrayref variable is forbiden in the 1.5 galaxy, but before arcade beta patch 3, we have a bug, which allows us to put them into a global array. So we can still use them in global. Then beta patch 3 fixed this bug.
That's strange. When I tested it out the other day I recall I was able to create "arrayref<int2> arrayRef" outside my function, and I don't recall there being any errors. I'll try it again and update here after i test it out again. Once again, please note I could be mistaken. I'll attach my sample map here If it works as stated.
if we run fB() while fA() is waiting, then we can use fB() to set the value of a[3] in fA(); Before fA() exit of course.
And we can even dynamicly "malloc" store space with this. If we want to dynamicly create a array, we just need to run a function instance which would create local array, then use the global arrayref to point to this array.
And when we want to destroy this array, we just need to stop the function instance. Since all local variable would be destroied when the function exits.
I just think some "good" exploits, like the "return bug" in WC3 world editor, are not nessary to be fixed.
Maybe it is because blizzard found some security issues behind the global arrayref/structref? :(
Most fixes are done due to security reasons. The old-return bug in wc3 was very powerful for modders, but so was for hackers. They kept the bug until somebody found a way to hijack it and use it to inject machine code into the game. From there on, they have been very careful with the feutures they implement and how they can be abused.
Rollback Post to RevisionRollBack
To post a comment, please login or register a new account.
The 1.5.0 patch 3 today fixed a useful exploit in galaxy syntax.
before the patch, you are not allowed to create Global arrayref/structref, but you can actually by pass this restriction by using global arrays to contain the arryref.
Now this just have been fixed, and you cannot create "global arrayref/structref arrays". And you can not use arrayref/structref as fields...
before the patch, you can do many interest things.
/sad face
I was actually making a new project and rewriting my GAx3 proj based on the the new galaxy "Pointer" system, and this "fix" completey ruined my maps.
And I also have some friends who quited sc2 modding since blizzard removed the "pointer" feature in 2010 SC2 beta. And with the new "pointer" feather in 2012 beta patch 2, I had almostly convinced them back to the community. But now which this fix... it's just not going to happen : (
I just think some "good" exploits, like the "return bug" in WC3 world editor, are not nessary to be fixed.
Maybe it is because blizzard found some security issues behind the global arrayref/structref? :(
Anyone knows what else did they "fix" ?
They actually fixed quite some useful stuff in this patch, for example I had a bug with attached actors not firing create actions on Behavior.* or Effect.* events. Every other action was fine, but creating them was impossible with 1.5 (possible in 1.4 and earlier though). They finally fixed that.
I'm pretty sure they fixed a lot of this little buggy 1.5 stuff in this patch. I also had some really really weird issues where my Editor crashed when I added Timers to some particular Actor Event Macros. I don't know what caused it and I didn't bother to investigate it further, but that issue seems to be solved as well.
Also I noticed that I can see the actual Text Messages sent by a trigger, even if its a map from a different region. I don't know if that only applies to the beta and if it will still bug out once 1.5 goes live on EU, US etc, but its nice to not only see "Param/Value/A45EFIIEJK" while using the Arcade Beta. Would be quite nice if they finally fixed that bug though.
i updated my arcade. opened a map. ran it.
all my units disappear when they get anywhere near a cliff.
dont see any patch notes anywhere.
@Renee2islga: Go
I'm not sure I completely understand your opening post. There is mention that we cannot create global arrayref/structref array anymore, is this what you are referring to?
After the fix we can only do this?
Would you care to elaborate on why global arrayref arrays are so powerful? The novelty is not very clear to me in the fun() example.
@Renee2islga: Go
That's strange. When I tested it out the other day I recall I was able to create "arrayref<int2> arrayRef" outside my function, and I don't recall there being any errors. I'll try it again and update here after i test it out again. Once again, please note I could be mistaken. I'll attach my sample map here If it works as stated.
You can do many things with a global arrayref.
For example, it would allow you to control local arrays in OTHER functions.
Image we have a global arrayref variable named "X", and we have two functions current runing, fA() and fB()
fA(){
int[3] a;
X=a;
dosomething
wait xxxxx seconds.....
dosomething
}
fB(){
X[1]=2;
}
if we run fB() while fA() is waiting, then we can use fB() to set the value of a[3] in fA(); Before fA() exit of course.
And we can even dynamicly "malloc" store space with this. If we want to dynamicly create a array, we just need to run a function instance which would create local array, then use the global arrayref to point to this array.
And when we want to destroy this array, we just need to stop the function instance. Since all local variable would be destroied when the function exits.
@Renee2islga: Go
Ingenious, thanks for sharing that, it makes much better sense to me now. I now share your sentiments about it being fixed :(
I can confirm that it's fixed, I was using 'typedef arrayref<i2x2> i2' which is why I was under the false impression it worked.
Most fixes are done due to security reasons. The old-return bug in wc3 was very powerful for modders, but so was for hackers. They kept the bug until somebody found a way to hijack it and use it to inject machine code into the game. From there on, they have been very careful with the feutures they implement and how they can be abused.