1
0

walkstyle.pwn 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271
  1. /*
  2. /$$ /$$ /$$$$$$ /$$$$$$$ /$$$$$$$
  3. | $$$ | $$ /$$__ $$ | $$__ $$| $$__ $$
  4. | $$$$| $$| $$ \__/ | $$ \ $$| $$ \ $$
  5. | $$ $$ $$| $$ /$$$$ /$$$$$$| $$$$$$$/| $$$$$$$/
  6. | $$ $$$$| $$|_ $$|______/| $$__ $$| $$____/
  7. | $$\ $$$| $$ \ $$ | $$ \ $$| $$
  8. | $$ \ $$| $$$$$$/ | $$ | $$| $$
  9. |__/ \__/ \______/ |__/ |__/|__/
  10. //--------------------------------[IRC.PWN]--------------------------------
  11. * Copyright (c) 2016, Next Generation Gaming, LLC
  12. *
  13. * All rights reserved.
  14. *
  15. * Redistribution and use in source and binary forms, with or without modification,
  16. * are not permitted in any case.
  17. *
  18. *
  19. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  20. * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  21. * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  22. * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
  23. * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
  24. * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
  25. * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
  26. * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
  27. * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
  28. * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
  29. * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  30. */
  31. /*
  32. * walkstyle.inc - Walking/running styles.
  33. * Created by Emmet on November 3, 2012 @ 9:19 AM
  34. */
  35. #include <YSI\y_hooks>
  36. #if defined walkstyle_included
  37. #endinput
  38. #endif
  39. #define walkstyle_included
  40. /*
  41. native SetWalkingKey(key);
  42. native AddWalkingStyle(animlib[], animname[], Float:fDelta = 4.0, loop = 1, lockx = 1, locky = 1, freeze = 1, time = 1);
  43. native RemoveWalkingStyle(styleid);
  44. native SetPlayerWalkingStyle(playerid, styleid);
  45. native ResetPlayerWalkingStyle(playerid);
  46. native IsPlayerWalking(playerid);
  47. */
  48. #if !defined MAX_WALKING_STYLES
  49. #define MAX_WALKING_STYLES (128)
  50. #endif
  51. #define IsPlayerWalking(%0) GetPVarInt(%0, "Walking")
  52. new PlayerWalkStyle[27];
  53. hook OnGameModeInit()
  54. {
  55. PlayerWalkStyle[1] = AddWalkingStyle("PED", "JOG_femaleA");
  56. PlayerWalkStyle[2] = AddWalkingStyle("PED", "JOG_maleA");
  57. PlayerWalkStyle[3] = AddWalkingStyle("PED", "WOMAN_walkfatold");
  58. PlayerWalkStyle[4] = AddWalkingStyle("PED", "run_fat");
  59. PlayerWalkStyle[5] = AddWalkingStyle("PED", "run_fatold");
  60. PlayerWalkStyle[6] = AddWalkingStyle("PED", "run_old");
  61. PlayerWalkStyle[7] = AddWalkingStyle("PED", "Run_Wuzi");
  62. PlayerWalkStyle[8] = AddWalkingStyle("PED", "swat_run");
  63. PlayerWalkStyle[9] = AddWalkingStyle("PED", "WALK_fat");
  64. PlayerWalkStyle[10] = AddWalkingStyle("PED", "WALK_fatold");
  65. PlayerWalkStyle[11] = AddWalkingStyle("PED", "WALK_gang1");
  66. PlayerWalkStyle[12] = AddWalkingStyle("PED", "WALK_gang2");
  67. PlayerWalkStyle[13] = AddWalkingStyle("PED", "WALK_old");
  68. PlayerWalkStyle[14] = AddWalkingStyle("PED", "WALK_shuffle");
  69. PlayerWalkStyle[15] = AddWalkingStyle("PED", "woman_run");
  70. PlayerWalkStyle[16] = AddWalkingStyle("PED", "WOMAN_runbusy");
  71. PlayerWalkStyle[17] = AddWalkingStyle("PED", "WOMAN_runfatold");
  72. PlayerWalkStyle[18] = AddWalkingStyle("PED", "woman_runpanic");
  73. PlayerWalkStyle[19] = AddWalkingStyle("PED", "WOMAN_runsexy");
  74. PlayerWalkStyle[20] = AddWalkingStyle("PED", "WOMAN_walkbusy");
  75. PlayerWalkStyle[21] = AddWalkingStyle("PED", "WOMAN_walkfatold");
  76. PlayerWalkStyle[22] = AddWalkingStyle("PED", "WOMAN_walknorm");
  77. PlayerWalkStyle[23] = AddWalkingStyle("PED", "WOMAN_walkold");
  78. PlayerWalkStyle[24] = AddWalkingStyle("PED", "WOMAN_walkpro");
  79. PlayerWalkStyle[25] = AddWalkingStyle("PED", "WOMAN_walksexy");
  80. PlayerWalkStyle[26] = AddWalkingStyle("PED", "WOMAN_walkshop");
  81. }
  82. enum E_WALKING_ENUM
  83. {
  84. E_STYLE_ACTIVE,
  85. E_STYLE_LIB[32],
  86. E_STYLE_ANIM[32],
  87. Float:E_STYLE_DELTA,
  88. E_STYLE_LOOP,
  89. E_STYLE_LOCK_X,
  90. E_STYLE_LOCK_Y,
  91. E_STYLE_FREEZE,
  92. E_STYLE_TIME
  93. };
  94. new WalkingStyles[MAX_WALKING_STYLES + 1][E_WALKING_ENUM];
  95. new walking_key = KEY_WALK;
  96. stock SetWalkingKey(key)
  97. {
  98. if (walking_key == key) return 0;
  99. walking_key = key;
  100. return 1;
  101. }
  102. stock AddWalkingStyle(animlib[], animname[], Float:fDelta = 4.0, loop = 1, lockx = 1, locky = 1, freeze = 1, time = 1)
  103. {
  104. new id;
  105. for (new i = 1; i < sizeof(WalkingStyles); i ++)
  106. {
  107. if (!WalkingStyles[i][E_STYLE_ACTIVE])
  108. {
  109. id = i;
  110. break;
  111. }
  112. }
  113. if (!id)
  114. {
  115. return 0;
  116. }
  117. else
  118. {
  119. WalkingStyles[id][E_STYLE_ACTIVE] = 1;
  120. format(WalkingStyles[id][E_STYLE_LIB], 32, animlib);
  121. format(WalkingStyles[id][E_STYLE_ANIM], 32, animname);
  122. WalkingStyles[id][E_STYLE_DELTA] = fDelta;
  123. WalkingStyles[id][E_STYLE_LOOP] = loop;
  124. WalkingStyles[id][E_STYLE_LOCK_X] = lockx;
  125. WalkingStyles[id][E_STYLE_LOCK_Y] = locky;
  126. WalkingStyles[id][E_STYLE_FREEZE] = freeze;
  127. WalkingStyles[id][E_STYLE_TIME] = time;
  128. }
  129. return id;
  130. }
  131. stock RemoveWalkingStyle(styleid)
  132. {
  133. if (styleid < 1 || styleid > MAX_WALKING_STYLES)
  134. {
  135. return 0;
  136. }
  137. else if (!WalkingStyles[styleid][E_STYLE_ACTIVE])
  138. {
  139. return 0;
  140. }
  141. else
  142. {
  143. for (new i = 0; i < MAX_PLAYERS; i ++)
  144. {
  145. if (IsPlayerConnected(i) && PlayerInfo[i][pWalkStyle] == styleid)
  146. {
  147. ResetPlayerWalkingStyle(i);
  148. }
  149. }
  150. WalkingStyles[styleid][E_STYLE_ACTIVE] = 0;
  151. strdel(WalkingStyles[styleid][E_STYLE_LIB], 0, 32);
  152. strdel(WalkingStyles[styleid][E_STYLE_ANIM], 0, 32);
  153. WalkingStyles[styleid][E_STYLE_DELTA] = 0.0;
  154. WalkingStyles[styleid][E_STYLE_LOOP] = 0;
  155. WalkingStyles[styleid][E_STYLE_LOCK_X] = 0;
  156. WalkingStyles[styleid][E_STYLE_LOCK_Y] = 0;
  157. WalkingStyles[styleid][E_STYLE_FREEZE] = 0;
  158. WalkingStyles[styleid][E_STYLE_TIME] = 0;
  159. }
  160. return 1;
  161. }
  162. stock SetPlayerWalkingStyle(playerid, styleid)
  163. {
  164. if(PlayerInfo[playerid][pWalkStyle] == styleid) return 0;
  165. return PlayerInfo[playerid][pWalkStyle] = styleid;
  166. }
  167. hook OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
  168. {
  169. new animlib[32], animname[32], Float:x, Float:y, Float:z;
  170. GetPlayerVelocity(playerid, x, y, z);
  171. GetAnimationName(GetPlayerAnimationIndex(playerid), animlib, sizeof(animlib), animname, sizeof(animname));
  172. if (newkeys & walking_key && PlayerInfo[playerid][pWalkStyle] && strfind(animname, "JUMP", false) == -1 && floatsqroot(floatpower(x, 2) + floatpower(y, 2) + floatpower(z, 2)) <= 0.05)
  173. {
  174. if (GetPlayerAnimationIndex(playerid) >= 1538 && GetPlayerAnimationIndex(playerid) <= 1544 && GetPlayerAnimationIndex(playerid) != 1542)
  175. {
  176. return 0;
  177. }
  178. if (!GetPVarInt(playerid, "Frozen"))
  179. {
  180. new styleid = PlayerInfo[playerid][pWalkStyle];
  181. switch (GetPVarInt(playerid, "Walking"))
  182. {
  183. case 0:
  184. {
  185. if (WalkingStyles[styleid][E_STYLE_ACTIVE] && strlen(WalkingStyles[styleid][E_STYLE_LIB]) && strlen(WalkingStyles[styleid][E_STYLE_ANIM]))
  186. {
  187. ApplyAnimation(playerid, WalkingStyles[styleid][E_STYLE_LIB], WalkingStyles[styleid][E_STYLE_ANIM], WalkingStyles[styleid][E_STYLE_DELTA], WalkingStyles[styleid][E_STYLE_LOOP], WalkingStyles[styleid][E_STYLE_LOCK_X], WalkingStyles[styleid][E_STYLE_LOCK_Y], WalkingStyles[styleid][E_STYLE_FREEZE], WalkingStyles[styleid][E_STYLE_TIME], 1);
  188. SetPVarInt(playerid, "Walking", 1);
  189. }
  190. }
  191. case 1:
  192. {
  193. if (WalkingStyles[styleid][E_STYLE_ACTIVE] && strlen(WalkingStyles[styleid][E_STYLE_LIB]) && strlen(WalkingStyles[styleid][E_STYLE_ANIM]))
  194. {
  195. ApplyAnimation(playerid, WalkingStyles[styleid][E_STYLE_LIB], WalkingStyles[styleid][E_STYLE_ANIM], WalkingStyles[styleid][E_STYLE_DELTA], 0, WalkingStyles[styleid][E_STYLE_LOCK_X], WalkingStyles[styleid][E_STYLE_LOCK_Y], 0, WalkingStyles[styleid][E_STYLE_TIME], 1);
  196. }
  197. DeletePVar(playerid, "Walking");
  198. }
  199. }
  200. }
  201. }
  202. return CallLocalFunction("walk_OnPlayerKeyStateChange", "ddd", playerid, newkeys, oldkeys);
  203. }
  204. stock ResetPlayerWalkingStyle(playerid)
  205. {
  206. PlayerInfo[playerid][pWalkStyle] = 0;
  207. if(GetPVarInt(playerid, "Walking"))
  208. {
  209. new styleid = PlayerInfo[playerid][pWalkStyle];
  210. if (WalkingStyles[styleid][E_STYLE_ACTIVE] && strlen(WalkingStyles[styleid][E_STYLE_LIB]) && strlen(WalkingStyles[styleid][E_STYLE_ANIM]))
  211. {
  212. ApplyAnimation(playerid, WalkingStyles[styleid][E_STYLE_LIB], WalkingStyles[styleid][E_STYLE_ANIM], WalkingStyles[styleid][E_STYLE_DELTA], 0, WalkingStyles[styleid][E_STYLE_LOCK_X], WalkingStyles[styleid][E_STYLE_LOCK_Y], 0, WalkingStyles[styleid][E_STYLE_TIME], 1);
  213. }
  214. DeletePVar(playerid, "Walking");
  215. }
  216. return 1;
  217. }
  218. stock walk_TogglePlayerControllable(playerid, toggle)
  219. {
  220. SetPVarInt(playerid, "Frozen", !toggle);
  221. return TogglePlayerControllable(playerid, toggle);
  222. }
  223. #define TogglePlayerControllable walk_TogglePlayerControllable
  224. #if defined _ALS_OnPlayerKeyStateChange
  225. #undef OnPlayerKeyStateChange
  226. #else
  227. #define _ALS_OnPlayerKeyStateChange
  228. #endif
  229. #define OnPlayerKeyStateChange walk_OnPlayerKeyStateChange
  230. forward walk_OnPlayerKeyStateChange(playerid, newkeys, oldkeys);
  231. CMD:walkstyle(playerid, params[])
  232. {
  233. if(isnull(params))
  234. {
  235. SendClientMessage(playerid, COLOR_GRAD2, "USAGE: /walkstyle [1-26]");
  236. return 1;
  237. }
  238. new string[64], styleid = strval(params);
  239. if(styleid == 0)
  240. {
  241. ResetPlayerWalkingStyle(playerid);
  242. return SendClientMessage(playerid, COLOR_WHITE, "* Walking style has been reset!");
  243. }
  244. if(styleid < 1 || styleid > 26) return SendClientMessage(playerid, COLOR_GRAD2, "Style can't be below 1, or above 26.");
  245. SetPlayerWalkingStyle(playerid, PlayerWalkStyle[styleid]);
  246. format(string, sizeof(string), "* Walking style set to %d.", styleid);
  247. SendClientMessage(playerid, COLOR_WHITE, string);
  248. return 1;
  249. }