Are there any limitations for this technique regarding the number of the skins? And do you know what is the size limit of a map?
There is a
demonstration map allowing you to view a variety of models with different textures. I am not sure how exactly it works but it might answer limitations of skins questions.
The size of a map is prety large (I think its 12 or 16 MB). You can futher extend this by importing data into mods which you make your map depend on. This means that you can place a maximum of your account's storage limit of custom content in a map. Blizzard may be able to raise the limit for individuals who run into size limitations so I suspect that there is no limit to the actual custom content size of a good map.
As for spell making and scripting. SC2 editor is a lot more powerful than WC3 allowing full custimaization of every aspect of an ability.
Scripting is another problem though. Galaxy, SC2's scripting language, is a lot more efficient than JASS in WC3. It compiles fully to bytecode when loading the map so runs a lot faster than JASS in WC3 which only compiled basic instructions into bytecode and relies on name resolving for every named field. The Galaxy Virtual Machine is also a lot less buggy than the JASS interpreter. It is virtually impossible to cause memory leaks by accident as it has a fully functional garbage collector (types like points, unitgroups, playergroups etc are all freed automaticly). Locals are fully implimented (so none of the nulling at function end nonsense like JASS had). The actual trigger design is much more light weight than WC3 needing only 1 function call to set up a trigger and bind a handler function to it. Additionally, the SC2E's GUI engine is not retarded (does not make stupid quantities of bloat like WE's GUI did) so it is perfectly acceptable to make components in GUI as the performance loss is minimal atmost. Bitwise opperators are fully supported unlike JASS where they were abscent. Language support of the modulo opperator is also included unlike JASS where it was emulated.
There are a lot of scripting limitations to be aware of that SC2 has but WC3 did not unforntunatly. There is a thread limit now, meaing that a limited number of executing threads generated by triggers can run at any given time. Threads have a noticably finite stack size now so it is important to manage recursive calls carefully. There are no dynamic memory constructs next to a single string mapped hashtable (even arrays are now allocated fixed heap sizes). There is a 2 MB odd limit to the heap size that a script can use (meaning about a pool of 500,000 spaces to use in global variables and arrays). Perodic triggers are limited to executing atmost 10 times per second which is about once every 6 game frames although blend functions have been added to smooth out animations for this.
There is also much functionality that was removed or is Not Yet Implemented. The ++ and -- operators are not supported (it even tells you a syntax error to that effect lol). Pointers are also not supported (which makes struct use very difficult). There are no "malloc" and "free" functionality so it is impossible to allocate space from the heap dynamicly (only at compile time can allocations be made). Events are socket based meaning that only a few triggers can be hooked to the same event at any given time (although events are much more specific now to make a large number of sockets avaialble).