Witamy w Nieoficjalnym polskim support'cie AMX Mod X
Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
|
Guest Message by DevFuse
Wklejka 210veoa1q6n4g dodana przez Kawon, 04.07.2013 10:48
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241. 242. 243. 244. 245. 246. 247. 248. 249. 250. 251. 252. 253. 254. 255. 256. 257. 258. 259. 260. 261. 262. 263. 264. 265. 266. 267. 268. 269. 270. 271. 272. 273. 274. 275. 276. 277. 278. 279. 280. 281. 282. 283. 284. 285. 286. 287. 288. 289. 290. 291. 292. 293. 294. 295. 296. 297. 298. 299. 300. 301. 302. 303. 304. 305. 306. 307. 308. 309. 310. 311. 312. 313. 314. 315. 316. 317. 318. 319. 320. 321. 322. 323.
#include <amxmodx> #include <fakemeta> #include <hamsandwich> #define PLUGIN "Paintball Gun" #define VERSION "1.0" #define AUTHOR "AUTHOR" #define MAX_PAINTBALLS 200 #define TASK_PB_RESET 1000 #define TASK_RELOAD 2000 new g_paintballs[MAX_PAINTBALLS], g_pbstatus[MAX_PAINTBALLS], g_pbcount, Float:lastshot[33], Float:nextattack[33], freezetime; new pbgun, pbusp, pbglock, color, shots, veloc, speed, blife, sound, bglow, damge, friendlyfire, tgun, ctgun, beamspr; static const g_shot_anim[4] = {0, 3, 9, 5}; static const g_pbgun_models[11][] = {"models/v_pbgun.mdl", "models/v_pbgun1.mdl", "models/v_pbgun2.mdl", "models/v_pbgun3.mdl", "models/v_pbgun4.mdl", "models/v_pbgun5.mdl", "models/v_pbgun6.mdl", "models/v_pbgun7.mdl", "models/v_pbgun8.mdl", "models/v_pbgun9.mdl", "models/v_pbgun10.mdl"}; public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR); register_cvar("paintballgun", VERSION, FCVAR_SERVER|FCVAR_UNLOGGED); register_clcmd("say /ent", "ent_info", ADMIN_SLAY); pbgun = register_cvar("amx_pbgun", "1"); pbusp = register_cvar("amx_pbusp", "1"); pbglock = register_cvar("amx_pbglock", "1"); if (get_pcvar_num(pbgun) || get_pcvar_num(pbusp) || get_pcvar_num(pbglock)) { register_event("CurWeapon", "ev_curweapon", "be"); register_logevent("ev_roundstart", 2, "0=World triggered", "1=Round_Start"); if (get_cvar_num("mp_freezetime") > 0) register_event("HLTV", "ev_freezetime", "a", "1=0", "2=0"); register_forward(FM_Touch, "fw_touch"); register_forward(FM_SetModel, "fw_setmodel"); register_forward(FM_PlayerPreThink, "fw_playerprethink", 1); register_forward(FM_UpdateClientData, "fw_updateclientdata", 1); color = register_cvar("pbgun_color", "2"); shots = register_cvar("pbgun_shots", "100"); veloc = register_cvar("pbgun_velocity", "2000"); speed = register_cvar("pbgun_speed", "0.08"); blife = register_cvar("pbgun_life", "15"); sound = register_cvar("pbgun_sound", "1"); bglow = register_cvar("pbgun_glow", "a"); damge = register_cvar("pbgun_damage", "100"); friendlyfire = get_cvar_pointer("mp_friendlyfire"); new a, max_ents_allow = global_get(glb_maxEntities) - 5; for (a = 1; a <= get_pcvar_num(shots); a++) if (a < MAX_PAINTBALLS) if (engfunc(EngFunc_NumberOfEntities) < max_ents_allow) { g_paintballs[a] = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target")); if (pev_valid(g_paintballs[a])) { set_pev(g_paintballs[a], pev_effects, pev(g_paintballs[a], pev_effects) | EF_NODRAW); g_pbcount++; } } if (g_pbcount < 1) set_fail_state("[AMXX] Failed to load Paintball Gun (unable to create ents)"); server_print("*** %s v%s by %s Enabled ***", PLUGIN, VERSION, AUTHOR); } } public plugin_precache() { register_cvar("amx_pbgun", "1"); register_cvar("amx_pbusp", "1"); register_cvar("amx_pbglock", "1"); register_cvar("pbgun_tgun", "1"); register_cvar("pbgun_ctgun", "6"); tgun = get_cvar_num("pbgun_tgun"); ctgun = get_cvar_num("pbgun_ctgun"); if (get_cvar_num("amx_pbgun")) { precache_model(g_pbgun_models[tgun]); precache_model(g_pbgun_models[ctgun]); precache_model((ctgun) ? "models/p_pbgun1.mdl" : "models/p_pbgun.mdl"); precache_model("models/w_pbgun.mdl"); } if (get_cvar_num("amx_pbusp")) { precache_model("models/v_pbusp.mdl"); precache_model("models/p_pbusp.mdl"); } if (get_cvar_num("amx_pbglock")) { precache_model("models/v_pbglock.mdl"); precache_model("models/p_pbglock.mdl"); } if (get_cvar_num("amx_pbgun") || get_cvar_num("amx_pbusp") || get_cvar_num("amx_pbglock")) { precache_sound("misc/pb1.wav"); precache_sound("misc/pb2.wav"); precache_sound("misc/pb3.wav"); precache_sound("misc/pb4.wav"); precache_sound("misc/pbg.wav"); precache_model("models/w_paintball.mdl"); precache_model("sprites/paintball.spr"); } beamspr = precache_model("sprites/laserbeam.spr"); } public ent_info(id) client_print(id, print_chat, "[AMXX] [Ent Info (Current/Max)] Paintballs: (%d/%d) Entities: (%d/%d)", g_pbcount, get_pcvar_num(shots), engfunc(EngFunc_NumberOfEntities), global_get(glb_maxEntities)); public ev_curweapon(id) { new model[25]; pev(id, pev_viewmodel2, model, 24); if (equali(model, "models/v_mp5.mdl") && get_pcvar_num(pbgun)) { set_pev(id, pev_viewmodel2, (get_user_team(id) == 1) ? g_pbgun_models[tgun] : g_pbgun_models[ctgun]); set_pev(id, pev_weaponmodel2, (ctgun) ? "models/p_pbgun1.mdl" : "models/p_pbgun.mdl"); } else if (equali(model, "models/v_usp.mdl") && get_pcvar_num(pbusp)) { set_pev(id, pev_viewmodel2, "models/v_pbusp.mdl"); set_pev(id, pev_weaponmodel2, "models/p_pbusp.mdl"); } else if (equali(model, "models/v_glock18.mdl") && get_pcvar_num(pbglock)) { set_pev(id, pev_viewmodel2, "models/v_pbglock.mdl"); set_pev(id, pev_weaponmodel2, "models/p_pbglock.mdl"); } } public fw_setmodel(ent, model[]) { if (equali(model, "models/w_mp5.mdl")) if (get_pcvar_num(pbgun)) { engfunc(EngFunc_SetModel, ent, "models/w_pbgun.mdl"); return FMRES_SUPERCEDE; } return FMRES_IGNORED; } public fw_updateclientdata(id, sw, cd_handle) { if (user_has_pbgun(id) && cd_handle) { set_cd(cd_handle, CD_ID, 1); get_cd(cd_handle, CD_flNextAttack, nextattack[id]); //set_cd(cd_handle, CD_flNextAttack, 10.0); return FMRES_HANDLED; } return FMRES_IGNORED; } public fw_playerprethink(id) { new my_pbgun = user_has_pbgun(id); if (my_pbgun) { new buttons = pev(id, pev_button); if (buttons & IN_ATTACK) { new ammo, null = get_user_weapon(id, ammo, null); if (ammo) { set_pev(id, pev_button, buttons & ~IN_ATTACK); new Float:gametime = get_gametime(), Float:g_speed; if (my_pbgun == 1) g_speed = get_pcvar_float(speed); else g_speed = (my_pbgun == 2) ? get_pcvar_float(speed) * 2.0 : get_pcvar_float(speed) * 3.0; if (gametime-lastshot[id] > g_speed && nextattack[id] < 0.0 && !freezetime) { if (paint_fire(id)) { lastshot[id] = gametime; set_user_clip(id, ammo - 1); set_pev(id, pev_punchangle, Float:{-0.5, 0.0, 0.0}); message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, _, id); write_byte(g_shot_anim[my_pbgun]); write_byte(0); message_end(); if (get_pcvar_num(sound)) emit_sound(id, CHAN_AUTO, "misc/pbg.wav", 1.0, ATTN_NORM, 0, PITCH_NORM); } } } } } return FMRES_IGNORED; } public paint_fire(id) { new a, ent; while (a++ < g_pbcount - 1 && !ent) if (g_pbstatus[a] == 0) ent = g_pbstatus[a] = g_paintballs[a]; if (!ent) while (a-- > 1 && !ent) if (g_pbstatus[a] == 2) ent = g_pbstatus[a] = g_paintballs[a]; if (pev_valid(ent) && is_user_alive(id)) { new Float:vangles[3], Float:nvelocity[3], Float:voriginf[3], vorigin[3], clr; set_pev(ent, pev_classname, "pbBullet"); set_pev(ent, pev_owner, id); engfunc(EngFunc_SetModel, ent, "models/w_paintball.mdl"); engfunc(EngFunc_SetSize, ent, Float:{-1.0, -1.0, -1.0}, Float:{1.0, 1.0, 1.0}); switch (get_pcvar_num(color)) { case 2: clr = (get_user_team(id) == 1) ? 0 : 1; case 3: clr = (get_user_team(id) == 1) ? 4 : 3; case 4: clr = (get_user_team(id) == 1) ? 2 : 5; default: clr = random_num(0, 6); } set_pev(ent, pev_skin, clr); get_user_origin(id, vorigin, 1); IVecFVec(vorigin, voriginf); engfunc(EngFunc_SetOrigin, ent, voriginf); vangles[0] = random_float(-180.0, 180.0); vangles[1] = random_float(-180.0, 180.0); set_pev(ent, pev_angles, vangles); pev(id, pev_v_angle, vangles); set_pev(ent, pev_v_angle, vangles); pev(id, pev_view_ofs, vangles); set_pev(ent, pev_view_ofs, vangles); set_pev(ent, pev_solid, 2); set_pev(ent, pev_movetype, 5); velocity_by_aim(id, get_pcvar_num(veloc), nvelocity); set_pev(ent, pev_velocity, nvelocity); set_pev(ent, pev_effects, pev(ent, pev_effects) & ~EF_NODRAW); set_task(0.1, "paint_glow", ent); set_task(15.0 , "paint_reset", ent+TASK_PB_RESET); } return ent; } public fw_touch(bullet, ent) { new class[20]; pev(bullet, pev_classname, class, 19); if (!equali(class, "pbBullet")) return FMRES_IGNORED; new Float:origin[3], class2[20], owner = pev(bullet, pev_owner), is_ent_alive = is_user_alive(ent); pev(ent, pev_classname, class2, 19); pev(bullet, pev_origin, origin); if (is_ent_alive) { if (owner == ent || pev(ent, pev_takedamage) == DAMAGE_NO) return FMRES_IGNORED; if (get_user_team(owner) == get_user_team(ent)) if (!get_pcvar_num(friendlyfire)) return FMRES_IGNORED; ExecuteHam(Ham_TakeDamage, ent, owner, owner, float(get_pcvar_num(damge)), 4098); } if (!equali(class, class2)) { set_pev(bullet, pev_velocity, Float:{0.0, 0.0, 0.0}); set_pev(bullet, pev_classname, "pbPaint"); set_pev(bullet, pev_solid, 0); set_pev(bullet, pev_movetype, 0); engfunc(EngFunc_SetModel, bullet, "sprites/paintball.spr"); new a, findpb = 0; while (a++ < g_pbcount && !findpb) if (g_paintballs[a] == bullet) findpb = g_pbstatus[a] = 2; remove_task(bullet); remove_task(bullet+TASK_PB_RESET); if (get_pcvar_num(sound)) { static wav[20]; formatex(wav, 20, is_ent_alive ? "player/pl_pain%d.wav" : "misc/pb%d.wav", is_ent_alive ? random_num(4,7) : random_num(1,4)); emit_sound(bullet, CHAN_AUTO, wav, 1.0, ATTN_NORM, 0, PITCH_NORM); } new bool:valid_surface = (is_ent_alive || containi(class2, "door") != -1) ? false : true; if (pev(ent, pev_health) && !is_ent_alive && pev(ent,pev_takedamage)) { ExecuteHam(Ham_TakeDamage, ent, owner, owner, float(pev(ent, pev_health)), 0); valid_surface = false; } if (valid_surface) { paint_splat(bullet); set_task(float(get_pcvar_num(blife)), "paint_reset", bullet+TASK_PB_RESET); } else paint_reset(bullet+TASK_PB_RESET); return FMRES_HANDLED; } return FMRES_IGNORED; } public paint_splat(ent) { new Float:origin[3], Float:norigin[3], Float:viewofs[3], Float:angles[3], Float:normal[3], Float:aiming[3]; pev(ent, pev_origin, origin); pev(ent, pev_view_ofs, viewofs); pev(ent, pev_v_angle, angles); norigin[0] = origin[0] + viewofs[0]; norigin[1] = origin[1] + viewofs[1]; norigin[2] = origin[2] + viewofs[2]; aiming[0] = norigin[0] + floatcos(angles[1], degrees) * 1000.0; aiming[1] = norigin[1] + floatsin(angles[1], degrees) * 1000.0; aiming[2] = norigin[2] + floatsin(-angles[0], degrees) * 1000.0; engfunc(EngFunc_TraceLine, norigin, aiming, 0, ent, <
Dodanych wklejek: 11179
Powered By (Pav32) Pastebin © 2011