localinput.pwn 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307
  1. #define VK_KEY_0 0x30
  2. #define VK_KEY_1 0x31
  3. #define VK_KEY_2 0x32
  4. #define VK_KEY_3 0x33
  5. #define VK_KEY_4 0x34
  6. #define VK_KEY_5 0x35
  7. #define VK_KEY_6 0x36
  8. #define VK_KEY_7 0x37
  9. #define VK_KEY_8 0x38
  10. #define VK_KEY_9 0x39
  11. #define VK_KEY_A 0x41
  12. #define VK_KEY_B 0x42
  13. #define VK_KEY_C 0x43
  14. #define VK_KEY_D 0x44
  15. #define VK_KEY_E 0x45
  16. #define VK_KEY_F 0x46
  17. #define VK_KEY_G 0x47
  18. #define VK_KEY_H 0x48
  19. #define VK_KEY_I 0x49
  20. #define VK_KEY_J 0x4A
  21. #define VK_KEY_K 0x4B
  22. #define VK_KEY_L 0x4C
  23. #define VK_KEY_M 0x4D
  24. #define VK_KEY_N 0x4E
  25. #define VK_KEY_O 0x4F
  26. #define VK_KEY_P 0x50
  27. #define VK_KEY_Q 0x51
  28. #define VK_KEY_R 0x52
  29. #define VK_KEY_S 0x53
  30. #define VK_KEY_T 0x54
  31. #define VK_KEY_U 0x55
  32. #define VK_KEY_V 0x56
  33. #define VK_KEY_W 0x57
  34. #define VK_KEY_X 0x58
  35. #define VK_KEY_Y 0x59
  36. #define VK_KEY_Z 0x5A
  37. #define VK_LBUTTON 0x01
  38. #define VK_MBUTTON 0x04
  39. #define VK_RBUTTON 0x02
  40. #define VK_UP 0x26
  41. #define VK_DOWN 0x28
  42. #define VK_LEFT 0x25
  43. #define VK_RIGHT 0x27
  44. #define VK_LSHIFT 0xA0
  45. #define VK_RSHIFT 0xA1
  46. #define VK_SPACE 0x20
  47. native GetVirtualKeyState(key);
  48. native GetScreenSize(&Width, &Height);
  49. native GetMousePos(&X, &Y);
  50. #include <colandreas>
  51. forward OnCursorPositionChange(OldX, OldY, NewX, NewY);
  52. forward OnVirtualKeyDown(key);
  53. forward OnVirtualKeyRelease(key);
  54. forward OnEditorUpdate();
  55. enum E_KEY_STRUCT
  56. {
  57. bool:KEY_PRESSED,
  58. KEY_CODE
  59. };
  60. static
  61. editorid,
  62. CursorOX, CursorOY,
  63. CursorX, CursorY,
  64. ScreenWidth, ScreenHeight,
  65. VirtualKeys[46][E_KEY_STRUCT];
  66. public OnFilterScriptInit()
  67. {
  68. VirtualKeys[00][KEY_CODE] = VK_KEY_0;
  69. VirtualKeys[01][KEY_CODE] = VK_KEY_1;
  70. VirtualKeys[02][KEY_CODE] = VK_KEY_2;
  71. VirtualKeys[03][KEY_CODE] = VK_KEY_3;
  72. VirtualKeys[04][KEY_CODE] = VK_KEY_4;
  73. VirtualKeys[05][KEY_CODE] = VK_KEY_5;
  74. VirtualKeys[06][KEY_CODE] = VK_KEY_6;
  75. VirtualKeys[07][KEY_CODE] = VK_KEY_7;
  76. VirtualKeys[08][KEY_CODE] = VK_KEY_8;
  77. VirtualKeys[09][KEY_CODE] = VK_KEY_9;
  78. VirtualKeys[10][KEY_CODE] = VK_KEY_A;
  79. VirtualKeys[11][KEY_CODE] = VK_KEY_B;
  80. VirtualKeys[12][KEY_CODE] = VK_KEY_C;
  81. VirtualKeys[13][KEY_CODE] = VK_KEY_D;
  82. VirtualKeys[14][KEY_CODE] = VK_KEY_E;
  83. VirtualKeys[15][KEY_CODE] = VK_KEY_F;
  84. VirtualKeys[16][KEY_CODE] = VK_KEY_G;
  85. VirtualKeys[17][KEY_CODE] = VK_KEY_H;
  86. VirtualKeys[18][KEY_CODE] = VK_KEY_I;
  87. VirtualKeys[19][KEY_CODE] = VK_KEY_J;
  88. VirtualKeys[20][KEY_CODE] = VK_KEY_K;
  89. VirtualKeys[21][KEY_CODE] = VK_KEY_L;
  90. VirtualKeys[22][KEY_CODE] = VK_KEY_M;
  91. VirtualKeys[23][KEY_CODE] = VK_KEY_N;
  92. VirtualKeys[24][KEY_CODE] = VK_KEY_O;
  93. VirtualKeys[25][KEY_CODE] = VK_KEY_P;
  94. VirtualKeys[26][KEY_CODE] = VK_KEY_Q;
  95. VirtualKeys[27][KEY_CODE] = VK_KEY_R;
  96. VirtualKeys[28][KEY_CODE] = VK_KEY_S;
  97. VirtualKeys[29][KEY_CODE] = VK_KEY_T;
  98. VirtualKeys[30][KEY_CODE] = VK_KEY_U;
  99. VirtualKeys[31][KEY_CODE] = VK_KEY_V;
  100. VirtualKeys[32][KEY_CODE] = VK_KEY_W;
  101. VirtualKeys[33][KEY_CODE] = VK_KEY_X;
  102. VirtualKeys[34][KEY_CODE] = VK_KEY_Y;
  103. VirtualKeys[35][KEY_CODE] = VK_KEY_Z;
  104. VirtualKeys[36][KEY_CODE] = VK_LBUTTON;
  105. VirtualKeys[37][KEY_CODE] = VK_MBUTTON;
  106. VirtualKeys[38][KEY_CODE] = VK_RBUTTON;
  107. VirtualKeys[39][KEY_CODE] = VK_LEFT;
  108. VirtualKeys[40][KEY_CODE] = VK_RIGHT;
  109. VirtualKeys[41][KEY_CODE] = VK_UP;
  110. VirtualKeys[42][KEY_CODE] = VK_DOWN;
  111. VirtualKeys[43][KEY_CODE] = VK_LSHIFT;
  112. VirtualKeys[44][KEY_CODE] = VK_RSHIFT;
  113. VirtualKeys[45][KEY_CODE] = VK_SPACE;
  114. editorid = INVALID_PLAYER_ID;
  115. SetTimer("OnEditorUpdate", 25, true);
  116. #if defined LI_OnFilterScriptInit
  117. LI_OnFilterScriptInit();
  118. #endif
  119. return 1;
  120. }
  121. #if defined _ALS_OnFilterScriptInit
  122. #undef OnFilterScriptInit
  123. #else
  124. #define _ALS_OnFilterScriptInit
  125. #endif
  126. #define OnFilterScriptInit LI_OnFilterScriptInit
  127. #if defined LI_OnFilterScriptInit
  128. forward LI_OnFilterScriptInit();
  129. #endif
  130. public OnPlayerConnect(playerid)
  131. {
  132. if(editorid != INVALID_PLAYER_ID)
  133. return 1;
  134. new ip[24];
  135. GetPlayerIp(playerid, ip, 24);
  136. if(!strcmp(ip, "127.0.0.1"))
  137. editorid = playerid;
  138. #if defined LI_OnPlayerConnect
  139. LI_OnPlayerConnect(playerid);
  140. #endif
  141. return 1;
  142. }
  143. #if defined _ALS_OnPlayerConnect
  144. #undef OnPlayerConnect
  145. #else
  146. #define _ALS_OnPlayerConnect
  147. #endif
  148. #define OnPlayerConnect LI_OnPlayerConnect
  149. #if defined LI_OnPlayerConnect
  150. forward LI_OnPlayerConnect(playerid);
  151. #endif
  152. public OnPlayerDisconnect(playerid, reason)
  153. {
  154. if(editorid == playerid)
  155. editorid = INVALID_PLAYER_ID;
  156. #if defined LI_OnPlayerDisconnect
  157. LI_OnPlayerDisconnect(playerid, reason);
  158. #endif
  159. return 1;
  160. }
  161. #if defined _ALS_OnPlayerDisconnect
  162. #undef OnPlayerDisconnect
  163. #else
  164. #define _ALS_OnPlayerDisconnect
  165. #endif
  166. #define OnPlayerDisconnect LI_OnPlayerDisconnect
  167. #if defined LI_OnPlayerDisconnect
  168. forward LI_OnPlayerDisconnect(playerid, reason);
  169. #endif
  170. public OnEditorUpdate()
  171. {
  172. if(editorid == INVALID_PLAYER_ID)
  173. return 1;
  174. for(new c; c < sizeof VirtualKeys; c++)
  175. {
  176. if(GetVirtualKeyState(VirtualKeys[c][KEY_CODE]) & 0x8000)
  177. {
  178. if(!VirtualKeys[c][KEY_PRESSED])
  179. {
  180. CallLocalFunction("OnVirtualKeyDown", "d", VirtualKeys[c][KEY_CODE]);
  181. VirtualKeys[c][KEY_PRESSED] = true;
  182. }
  183. else
  184. CallLocalFunction("OnVirtualKeyHold", "d", VirtualKeys[c][KEY_CODE]);
  185. }
  186. else if(VirtualKeys[c][KEY_PRESSED])
  187. {
  188. CallLocalFunction("OnVirtualKeyRelease", "d", VirtualKeys[c][KEY_CODE]);
  189. VirtualKeys[c][KEY_PRESSED] = false;
  190. }
  191. }
  192. GetScreenSize(ScreenWidth, ScreenHeight);
  193. GetMousePos(CursorX, CursorY);
  194. CursorX = floatround(floatdiv(CursorX, ScreenWidth) * 640.0, floatround_floor);
  195. CursorY = floatround(floatdiv(CursorY, ScreenHeight) * 448.0, floatround_floor);
  196. if(CursorOX != CursorX || CursorOY != CursorY)
  197. {
  198. CallLocalFunction("OnCursorPositionChange", "dddd", CursorOX, CursorOY, CursorX, CursorY);
  199. CursorOX = CursorX;
  200. CursorOY = CursorY;
  201. }
  202. return 1;
  203. }
  204. public OnCursorPositionChange(OldX, OldY, NewX, NewY)
  205. {
  206. if(editorid == INVALID_PLAYER_ID)
  207. return 1;
  208. //else
  209. return 1;
  210. }
  211. public OnVirtualKeyDown(key)
  212. {
  213. if(editorid == INVALID_PLAYER_ID)
  214. return 1;
  215. if(GetVirtualKeyState(VK_KEY_B) & 0x8000) switch(key) {
  216. case VK_KEY_0:
  217. BroadcastCommand(editorid, "/runbind 0");
  218. case VK_KEY_1:
  219. BroadcastCommand(editorid, "/runbind 1");
  220. case VK_KEY_2:
  221. BroadcastCommand(editorid, "/runbind 2");
  222. case VK_KEY_3:
  223. BroadcastCommand(editorid, "/runbind 3");
  224. case VK_KEY_4:
  225. BroadcastCommand(editorid, "/runbind 4");
  226. case VK_KEY_5:
  227. BroadcastCommand(editorid, "/runbind 5");
  228. case VK_KEY_6:
  229. BroadcastCommand(editorid, "/runbind 6");
  230. case VK_KEY_7:
  231. BroadcastCommand(editorid, "/runbind 7");
  232. case VK_KEY_8:
  233. BroadcastCommand(editorid, "/runbind 8");
  234. case VK_KEY_9:
  235. BroadcastCommand(editorid, "/runbind 9");
  236. }
  237. else switch(key) {
  238. case VK_LBUTTON: {
  239. }
  240. case VK_MBUTTON: {
  241. }
  242. case VK_RBUTTON: {
  243. //Example Of Right Clicking On The Ground
  244. /*new Float:cX, Float:cY, Float:cZ,
  245. Float:wX, Float:wY, Float:wZ;
  246. if(ScreenToWorld(editorid, 320.0, 224.0, wX, wY, wZ)) {
  247. GetPlayerCameraPos(editorid, cX, cY, cZ);
  248. wX = cX + (wX * 300.0);
  249. wY = cY + (wY * 300.0);
  250. wZ = cZ + (wZ * 300.0);
  251. if(CA_RayCastLine(cX, cY, cZ, wX, wY, wZ, wX, wY, wZ)) {
  252. SendClientMessage(editorid, -1, "What do you want to do here?");
  253. }
  254. }*/
  255. }
  256. }
  257. return 1;
  258. }
  259. public OnVirtualKeyRelease(key)
  260. {
  261. if(editorid == INVALID_PLAYER_ID)
  262. return 1;
  263. switch(key) {
  264. case VK_LBUTTON: {
  265. }
  266. case VK_MBUTTON: {
  267. }
  268. case VK_RBUTTON: {
  269. }
  270. }
  271. return 1;
  272. }