Advertisement
Guest User

Untitled

a guest
Jan 3rd, 2020
284
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.25 KB | None | 0 0
  1. #include <amxmodx>
  2. #include <reapi>
  3. #include <engine>
  4. #include <fakemeta>
  5. #include <hamsandwich>
  6.  
  7. enum _:weaponStruct
  8. {
  9. weaponDefaultModels = 0,
  10. weaponCustomModels
  11. };
  12.  
  13. enum _:weaponModelStruct
  14. {
  15. weaponViewModel[64],
  16. weaponPlayerModel[64],
  17. weaponWorldModel[32]
  18. };
  19.  
  20. new const WEAPONS_MODELS[weaponStruct][31][weaponModelStruct] =
  21. {
  22. // DEFAULT MODELS (don't modify)
  23. {
  24. { "", "", "" },
  25. { "models/v_p228.mdl", "models/p_p228.mdl", "models/w_p228.mdl" }, // CSW_P228
  26. { "", "", "" },
  27. { "models/v_scout.mdl", "models/p_scout.mdl", "models/w_scout.mdl" }, // CSW_SCOUT
  28. { "models/v_hegrenade.mdl", "models/p_hegrenade.mdl", "models/w_hegrenade.mdl" }, // CSW_HEGRENADE
  29. { "models/v_xm1014.mdl", "models/p_xm1014.mdl", "models/w_xm1014.mdl" }, // CSW_XM1014
  30. { "", "", "" },
  31. { "models/v_mac10.mdl", "models/p_mac10.mdl", "models/w_mac10.mdl" }, // CSW_MAC10
  32. { "models/v_aug.mdl", "models/p_aug.mdl", "models/w_aug.mdl" }, // CSW_AUG
  33. { "models/v_smokegrenade.mdl", "models/p_smokegrenade.mdl", "models/w_smokegrenade.mdl" }, // CSW_SMOKEGRENADE
  34. { "models/v_elite.mdl", "models/p_elite.mdl", "models/w_elite.mdl" }, // CSW_ELITE
  35. { "models/v_fiveseven.mdl", "models/p_fiveseven.mdl", "models/w_fiveseven.mdl" }, // CSW_FIVESEVEN
  36. { "models/v_ump45.mdl", "models/p_ump45.mdl", "models/w_ump45.mdl" }, // CSW_UMP45
  37. { "models/v_sg550.mdl", "models/p_sg550.mdl", "models/w_sg550.mdl" }, // CSW_SG550
  38. { "models/v_galil.mdl", "models/p_galil.mdl", "models/w_galil.mdl" }, // CSW_GALIL
  39. { "models/v_famas.mdl", "models/p_famas.mdl", "models/w_famas.mdl" }, // CSW_FAMAS
  40. { "models/v_usp.mdl", "models/p_usp.mdl", "models/w_usp.mdl" }, // CSW_USP
  41. { "models/v_glock18.mdl", "models/p_glock18.mdl", "models/w_glock18.mdl" }, // CSW_GLOCK18
  42. { "models/v_awp.mdl", "models/p_awp.mdl", "models/w_awp.mdl" }, // CSW_AWP
  43. { "models/v_mp5.mdl", "models/p_mp5.mdl", "models/w_mp5.mdl" }, // CSW_MP5NAVY
  44. { "models/v_m249.mdl", "models/p_m249.mdl", "models/w_m249.mdl" }, // CSW_M249
  45. { "models/v_m3.mdl", "models/p_m3.mdl", "models/w_m3.mdl" }, // CSW_M3
  46. { "models/v_m4a1.mdl", "models/p_m4a1.mdl", "models/w_m4a1.mdl" }, // CSW_M4A1
  47. { "models/v_tmp.mdl", "models/p_tmp.mdl", "models/w_tmp.mdl" }, // CSW_TMP
  48. { "models/v_g3sg1.mdl", "models/p_g3sg1.mdl", "models/w_g3sg1.mdl" }, // CSW_G3SG1
  49. { "models/v_flashbang.mdl", "models/p_flashbang.mdl", "models/w_flashbang.mdl" }, // CSW_FLASHBANG
  50. { "models/v_deagle.mdl", "models/p_deagle.mdl", "models/w_deagle.mdl" }, // CSW_DEAGLE
  51. { "models/v_sg552.mdl", "models/p_sg552.mdl", "models/w_sg552.mdl" }, // CSW_SG552
  52. { "models/v_ak47.mdl", "models/p_ak47.mdl", "models/w_ak47.mdl" }, // CSW_AK47
  53. { "models/v_knife.mdl", "models/p_knife.mdl", "models/w_knife.mdl" }, // CSW_KNIFE
  54. { "models/v_p90.mdl", "models/p_p90.mdl", "models/w_p90.mdl" } // CSW_P90
  55. },
  56.  
  57. // CUSTOM MODELS
  58. {
  59. { "", "", "" },
  60. { "models/v_p228.mdl", "models/p_p228.mdl", "" },
  61. { "", "", "" },
  62. { "models/v_scout.mdl", "models/p_scout.mdl", "" },
  63. { "models/v_hegrenade.mdl", "models/p_hegrenade.mdl", "" },
  64. { "models/v_xm1014.mdl", "models/p_xm1014.mdl", "" },
  65. { "", "", "" },
  66. { "models/v_mac10.mdl", "models/p_mac10.mdl", "" },
  67. { "models/v_aug.mdl", "models/p_aug.mdl", "" },
  68. { "models/v_smokegrenade.mdl", "models/p_smokegrenade.mdl", "" },
  69. { "models/v_elite.mdl", "models/p_elite.mdl", "" },
  70. { "models/v_fiveseven.mdl", "models/p_fiveseven.mdl", "" },
  71. { "models/v_ump45.mdl", "models/p_ump45.mdl", "" },
  72. { "models/v_sg550.mdl", "models/p_sg550.mdl", "" },
  73. { "models/v_galil.mdl", "models/p_galil.mdl", "" },
  74. { "models/v_famas.mdl", "models/p_famas.mdl", "" },
  75. { "models/v_usp.mdl", "models/p_usp.mdl", "" },
  76. { "models/v_glock18.mdl", "models/p_glock18.mdl", "" },
  77. { "models/v_awp.mdl", "models/p_awp.mdl", "" },
  78. { "models/v_mp5.mdl", "models/p_mp5.mdl", "" },
  79. { "models/v_m249.mdl", "models/p_m249.mdl", "" },
  80. { "models/v_m3.mdl", "models/p_m3.mdl", "" },
  81. { "models/v_m4a1.mdl", "models/p_m4a1.mdl", "" },
  82. { "models/v_tmp.mdl", "models/p_tmp.mdl", "" },
  83. { "models/v_g3sg1.mdl", "models/p_g3sg1.mdl", "" },
  84. { "models/v_flashbang.mdl", "models/p_flashbang.mdl", "" },
  85. { "models/v_deagle.mdl", "models/p_deagle.mdl", "" },
  86. { "models/v_sg552.mdl", "models/p_sg552.mdl", "" },
  87. { "models/v_ak47.mdl", "models/p_ak47.mdl", "" },
  88. { "models/v_knife.mdl", "models/p_knife.mdl", "" },
  89. { "models/v_p90.mdl", "models/p_p90.mdl", "" }
  90. }
  91. };
  92.  
  93. new const MODEL_WB[] = "models/wb.mdl";
  94.  
  95. new const CLASSNAME_ENT_FAKE_WEAPON_MODEL[] = "entFakeWeaponModel";
  96.  
  97. public plugin_precache()
  98. {
  99. new i;
  100. for(i = 1; i < 31; ++i)
  101. {
  102. if(WEAPONS_MODELS[weaponCustomModels][i][weaponViewModel][0])
  103. precache_model(WEAPONS_MODELS[weaponCustomModels][i][weaponViewModel]);
  104.  
  105. if(WEAPONS_MODELS[weaponCustomModels][i][weaponPlayerModel][0])
  106. precache_model(WEAPONS_MODELS[weaponCustomModels][i][weaponPlayerModel]);
  107. }
  108.  
  109. precache_model(MODEL_WB);
  110.  
  111. register_forward(FM_PrecacheModel, "OnFw__PrecacheModel", false);
  112. register_forward(FM_SetModel, "OnFw_SetModel", false);
  113.  
  114. RegisterHookChain(RG_CWeaponBox_SetModel, "CWeaponBox_SetModel", false);
  115. RegisterHookChain(RG_CBasePlayerWeapon_DefaultDeploy, "CBasePlayerWeapon_DefaultDeploy", false);
  116. RegisterHookChain(RG_CBasePlayerWeapon_DefaultDeploy, "CBasePlayerWeapon_DefaultDeploy_Post", true);
  117. }
  118.  
  119. public plugin_init()
  120. {
  121. register_event_ex("HLTV", "event__HLTV", RegisterEvent_Global, "1=0", "2=0");
  122.  
  123. new i;
  124. new sWeapon[32];
  125. for(i = 1; i < 31; ++i)
  126. {
  127. if(i == 2 || !WEAPONS_MODELS[weaponCustomModels][i][weaponPlayerModel][0] || !get_weaponname(i, sWeapon, charsmax(sWeapon)))
  128. continue;
  129.  
  130. RegisterHam(Ham_Item_AddToPlayer, sWeapon, "OnHam__Item_AddToPlayer", false);
  131. }
  132.  
  133. RegisterHam(Ham_Think, "grenade", "OnHam__ThinkGrenade", false);
  134.  
  135. register_think(CLASSNAME_ENT_FAKE_WEAPON_MODEL, "think__FakeWeaponModel");
  136. }
  137.  
  138. public OnFw__PrecacheModel(const model[])
  139. {
  140. new i;
  141. for(i = 1; i < 31; ++i)
  142. {
  143. if(!WEAPONS_MODELS[weaponCustomModels][i][weaponViewModel][0]) // Si no tiene un modelo V_ personalizado, usar el modelo V_ por defecto
  144. continue;
  145.  
  146. if(equal(model, WEAPONS_MODELS[weaponDefaultModels][i][weaponViewModel]))
  147. {
  148. forward_return(FMV_CELL, engfunc(EngFunc_PrecacheModel, WEAPONS_MODELS[weaponCustomModels][i][weaponViewModel]));
  149. return FMRES_SUPERCEDE;
  150. }
  151. }
  152.  
  153. for(i = 1; i < 31; ++i)
  154. {
  155. if(!WEAPONS_MODELS[weaponCustomModels][i][weaponPlayerModel][0]) // Si no tiene un modelo P_ personalizado, usar el modelo P_ por defecto
  156. continue;
  157.  
  158. if(equal(model, WEAPONS_MODELS[weaponDefaultModels][i][weaponPlayerModel]))
  159. {
  160. forward_return(FMV_CELL, engfunc(EngFunc_PrecacheModel, WEAPONS_MODELS[weaponCustomModels][i][weaponPlayerModel]));
  161. return FMRES_SUPERCEDE;
  162. }
  163. }
  164.  
  165. for(i = 1; i < 31; ++i)
  166. {
  167. if(!WEAPONS_MODELS[weaponCustomModels][i][weaponPlayerModel][0]) // Si no tiene un modelo P_ personalizado, usar el modelo W_ por defecto
  168. continue;
  169.  
  170. if(equal(model, WEAPONS_MODELS[weaponDefaultModels][i][weaponWorldModel]))
  171. return FMRES_SUPERCEDE;
  172. }
  173.  
  174. return FMRES_IGNORED;
  175. }
  176.  
  177. public event__HLTV()
  178. {
  179. new iEnt = find_ent_by_class(-1, CLASSNAME_ENT_FAKE_WEAPON_MODEL);
  180. while(is_valid_ent(iEnt))
  181. {
  182. remove_entity(iEnt);
  183.  
  184. iEnt = find_ent_by_class(-1, CLASSNAME_ENT_FAKE_WEAPON_MODEL);
  185. }
  186. }
  187.  
  188. public OnHam__Item_AddToPlayer(const __weaponEnt, const id)
  189. {
  190. new iFakeWeaponModel = entity_get_int(__weaponEnt, EV_INT_iuser1);
  191.  
  192. if(!is_valid_ent(iFakeWeaponModel))
  193. return;
  194.  
  195. remove_entity(iFakeWeaponModel);
  196. }
  197.  
  198. public OnHam__ThinkGrenade(const grenade)
  199. {
  200. if(!is_valid_ent(grenade))
  201. return HAM_IGNORED;
  202.  
  203. if(entity_get_float(grenade, EV_FL_dmgtime) > get_gametime())
  204. return HAM_IGNORED;
  205.  
  206. new iFakeGrenadeModel = entity_get_int(grenade, EV_INT_iuser1);
  207.  
  208. if(!is_valid_ent(iFakeGrenadeModel))
  209. return HAM_IGNORED;
  210.  
  211. remove_entity(iFakeGrenadeModel);
  212. return HAM_IGNORED;
  213. }
  214.  
  215. public OnFw_SetModel(const entity, const sModel[])
  216. {
  217. new i;
  218. for(i = 0; i < 31; ++i)
  219. {
  220. if(WEAPONS_MODELS[weaponCustomModels][i][weaponPlayerModel][0] && equal(sModel, WEAPONS_MODELS[weaponDefaultModels][i][weaponWorldModel]))
  221. {
  222. if(i == CSW_HEGRENADE || i == CSW_SMOKEGRENADE || i == CSW_FLASHBANG)
  223. {
  224. new sWeapon[32];
  225. get_weaponname(i, sWeapon, charsmax(sWeapon));
  226.  
  227. entity_set_model(entity, MODEL_WB);
  228. createFakeWeaponWorldModel(entity, 0.0, WEAPONS_MODELS[weaponCustomModels][i][weaponPlayerModel], sWeapon);
  229. }
  230.  
  231. return FMRES_SUPERCEDE;
  232. }
  233. }
  234.  
  235. return FMRES_IGNORED;
  236. }
  237.  
  238. public CWeaponBox_SetModel(const entity, const sModel[])
  239. {
  240. new WeaponIdType:iWeaponId = rg_get_weaponbox_id(entity);
  241.  
  242. if(iWeaponId && WEAPONS_MODELS[weaponCustomModels][_:iWeaponId][weaponPlayerModel][0])
  243. {
  244. new Float:flNextThink = 0.0;
  245.  
  246. if(iWeaponId != WEAPON_HEGRENADE && iWeaponId != WEAPON_SMOKEGRENADE && iWeaponId != WEAPON_FLASHBANG) // Por las dudas lo dejo, pero en realidad no se llaman a las granadas en esta funcion (no se porque)
  247. {
  248. flNextThink = get_gametime() + 99999.0; // Para remover la entidad si esta sola en el suelo X tiempo en caso de necesitar, sino borrar estas referencias
  249. entity_set_float(entity, EV_FL_nextthink, flNextThink);
  250. }
  251.  
  252. new sWeapon[32];
  253. get_weaponname(_:iWeaponId, sWeapon, charsmax(sWeapon));
  254.  
  255. SetHookChainArg(2, ATYPE_STRING, MODEL_WB);
  256. createFakeWeaponWorldModel(entity, flNextThink, WEAPONS_MODELS[weaponCustomModels][_:iWeaponId][weaponPlayerModel], sWeapon);
  257. }
  258.  
  259. return HC_CONTINUE;
  260. }
  261.  
  262. public CBasePlayerWeapon_DefaultDeploy(const entity, sViewModel[], sWeaponModel[], iAnim, sAnimExt[], skiplocal)
  263. {
  264. new i;
  265. for(i = 0; i < 31; ++i)
  266. {
  267. if(WEAPONS_MODELS[weaponCustomModels][i][weaponViewModel] && equal(sViewModel, WEAPONS_MODELS[weaponDefaultModels][i][weaponViewModel]))
  268. {
  269. SetHookChainArg(2, ATYPE_STRING, WEAPONS_MODELS[weaponCustomModels][i][weaponViewModel]);
  270.  
  271. if(WEAPONS_MODELS[weaponCustomModels][i][weaponPlayerModel])
  272. SetHookChainArg(3, ATYPE_STRING, WEAPONS_MODELS[weaponCustomModels][i][weaponPlayerModel]);
  273.  
  274. break;
  275. }
  276. }
  277.  
  278. return HC_CONTINUE;
  279. }
  280.  
  281. public CBasePlayerWeapon_DefaultDeploy_Post(const entity, sViewModel[], sWeaponModel[], iAnim, sAnimExt[], skiplocal) // Esto es para testear, cuando se dropea el arma no asigna el model (no se porque)
  282. {
  283. new i;
  284. for(i = 0; i < 31; ++i)
  285. {
  286. if(WEAPONS_MODELS[weaponCustomModels][i][weaponViewModel] && equal(sViewModel, WEAPONS_MODELS[weaponDefaultModels][i][weaponViewModel]))
  287. {
  288. new id = get_member(entity, m_pPlayer);
  289.  
  290. entity_set_string(id, EV_SZ_viewmodel, WEAPONS_MODELS[weaponCustomModels][i][weaponViewModel]);
  291.  
  292. if(WEAPONS_MODELS[weaponCustomModels][i][weaponPlayerModel])
  293. entity_set_string(id, EV_SZ_weaponmodel, WEAPONS_MODELS[weaponCustomModels][i][weaponPlayerModel]);
  294.  
  295. break;
  296. }
  297. }
  298.  
  299. return HC_CONTINUE;
  300. }
  301.  
  302. public think__FakeWeaponModel(const fakemodel)
  303. {
  304. if(!is_valid_ent(fakemodel))
  305. return;
  306.  
  307. remove_entity(fakemodel);
  308. }
  309.  
  310. stock createFakeWeaponWorldModel(const weaponent, const Float:nextthink, const model[], const weapon[])
  311. {
  312. new iModel = create_entity("info_target");
  313.  
  314. if(is_valid_ent(iModel))
  315. {
  316. new Float:vecAngles[3];
  317. entity_get_vector(weaponent, EV_VEC_angles, vecAngles);
  318. vecAngles[0] = -5.0;
  319. vecAngles[2] = 15.0;
  320. entity_set_vector(weaponent, EV_VEC_angles, vecAngles);
  321.  
  322. entity_set_string(iModel, EV_SZ_classname, CLASSNAME_ENT_FAKE_WEAPON_MODEL);
  323. entity_set_model(iModel, model);
  324.  
  325. entity_set_int(iModel, EV_INT_solid, SOLID_NOT);
  326. entity_set_int(iModel, EV_INT_movetype, MOVETYPE_FOLLOW);
  327.  
  328. entity_set_edict(iModel, EV_ENT_aiment, weaponent);
  329.  
  330. entity_set_int(find_ent_by_owner(-1, weapon, weaponent), EV_INT_iuser1, iModel);
  331. entity_set_int(weaponent, EV_INT_iuser1, iModel); // Fix para las granadas (ThinkGrenade)
  332.  
  333. if(nextthink)
  334. entity_set_float(iModel, EV_FL_nextthink, nextthink);
  335. }
  336. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement