The mouse/keyboard natives shouldn't be single player only. They work in a similar fashion to
GetCameraTargetPositionX()
. While that data is indeed local, they can be read within a local block and then broadcasted to become nonlocal. But this requires syncing, which is generally slow across battle.net (expect similar delays as the keyboard natives). So that may limit the use a little bit--but it is still perfectly usable. (for the technique, see
this. The same technique would be applied, but for mouse natives)
But overall, whether to use SharpCraft is based on your expected audience. SharpCraft multiplayer is good for friends (since they can all download SharpCraft [or a bundled exe if you plan to release it in a more portable form]), but bad for random players since it will be painful to arrange matches.
SharpCraft is great for single player maps since you know the person playing will have downloaded it from your source.
For maps in general, SharpCraft is great for
additional features. (1) Your map should be playable without SharpCraft (2) if you have SharpCraft, you can have access to additional features. One example could be managing a database online. Normally users are expected to write down save/load codes, but you could detect a SharpCraft installation and allow them to use commands to send/receive data to/from a server (which means the person wouldn't have to write down the codes at all! He could just remember a username/password). But this method requires a bit more knowledge--you must be familiar with creating SharpCraft natives (which is easy if you know the C# form of what you want to do). Then you would rewrite natives to act as special signals in your code. e.g. If you wanted to be able to detect if a user has SharpCraft via code, you could write a SharpCraft script to overwrite the LoadInteger native when given particular input:
JASS:
local integer a = LoadInteger(null, 434395, 345894)
The input you choose is trivial. It just has to be something that is unlikely to be used in your regular code. In your SharpCraft script, you would check for that input, and return a nonzero integer to indicate that SharpCraft is installed. If the user doesn't have it, then it would return 0. This may seem complicated, but it really isn't. Just see MindWorX's "Cheat" example that is in the SharpCraft thread--it showcases this technique.
It seems like I've gone off on a tangent--but my general ideal for SharpCraft is that you should use it for conveniences/features in your map. I don't think it is wise to have your map
rely on it though, unless it is perhaps single-player. If you want to use it, make sure you have the knowledge use well! If you have a multiplayer map, this means that you should have knowledge on "local" data and what could potentially desync players. But it is an awesome tool if used wisely.