hlmod.hu

Magyar Half-Life Mód közösség!
Pontos idő: 2024.05.08. 02:43



Jelenlévő felhasználók

Jelenleg 362 felhasználó van jelen :: 1 regisztrált, 0 rejtett és 361 vendég

A legtöbb felhasználó (1565 fő) 2020.11.21. 11:26-kor tartózkodott itt.

Regisztrált felhasználók: Google [Bot] az elmúlt 5 percben aktív felhasználók alapján

Utoljára aktív
Ahhoz hogy lásd ki volt utoljára aktív, be kell jelentkezned.



Az oldal teljeskörű
használatához regisztrálj.

Regisztráció

Kereső


Új téma nyitása  Hozzászólás a témához  [ 6 hozzászólás ] 
Szerző Üzenet
 Hozzászólás témája: Team clip
HozzászólásElküldve: 2013.05.20. 18:20 
Offline
Fanatikus
Avatar

Csatlakozott: 2013.04.10. 13:11
Hozzászólások: 161
Megköszönt másnak: 31 alkalommal
Megköszönték neki: 7 alkalommal
Sziasztok...

Van az áthaladó játékos plugin ,beraktam de nem működik...
Próbálgattam cvarokat sehogy se :?

Valaki segítene? ,köszönöm...

_________________
Kép


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: Team clip
HozzászólásElküldve: 2013.05.21. 15:56 
Offline
Őskövület
Avatar

Csatlakozott: 2011.09.17. 17:54
Hozzászólások: 2350
Megköszönt másnak: 40 alkalommal
Megköszönték neki: 57 alkalommal
Fut a plugin? Nézd meg. (amx_plugins)


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: Team clip
HozzászólásElküldve: 2013.05.24. 14:08 
Offline
Jómunkásember

Csatlakozott: 2013.02.11. 16:06
Hozzászólások: 491
Megköszönt másnak: 96 alkalommal
Megköszönték neki: 50 alkalommal
.inc-eket is beraktad?:)

_________________
Rengeteg új beszólás eléréséhez kattints IDE (Ezek alapból sank soundshoz készültek)

Steam profil:
[steam]http://steamcommunity.com/profiles/76561198089487307[/steam]


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: Team clip
HozzászólásElküldve: 2013.05.24. 14:12 
Offline
Félisten
Avatar

Csatlakozott: 2013.03.12. 10:03
Hozzászólások: 859
Megköszönt másnak: 37 alkalommal
Megköszönték neki: 44 alkalommal
amx_plugins ..és amit kidob másold ..

_________________
Kép


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: Team clip
HozzászólásElküldve: 2013.05.24. 14:47 
Offline
Veterán
Avatar

Csatlakozott: 2013.03.26. 20:20
Hozzászólások: 1846
Megköszönt másnak: 27 alkalommal
Megköszönték neki: 120 alkalommal
laki5000 írta:
.inc-eket is beraktad?:)


Minek az inc? semmi köze, csak ha sma-ból amxx-et csinálna :D

_________________
Projektem:

[CSO2] Ghost Mod
CSO2 GamePlay video: https://www.youtube.com/watch?feature=p ... iOS4Ik1Yrk


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: Team clip
HozzászólásElküldve: 2013.05.24. 23:33 
Offline
Beavatott
Avatar

Csatlakozott: 2012.08.03. 01:31
Hozzászólások: 74
Megköszönt másnak: 11 alkalommal
Megköszönték neki: 7 alkalommal
Szia.

Nekem is ez volt a problémám és sokáig nem tudtam,hogy mi az oka.Kiderült hogy a szerverrel van a gond.
Ne kérdezzétek mi,mert nekem is csak egy configos társam mondta :D

A lényeg az,hogy én ezt a plugint használom és maximálisan meg vagyok vele elégedve.
Ha gondolod cseréld le te is :)
A neve pedig: cs_team_semiclip ha érdekel

SMA Forráskód: [ Mindet kijelol ]
  1. #include <amxmodx>
  2. #include <engine>
  3. #include <fakemeta>
  4. #include <xs>
  5.  
  6. #if AMXX_VERSION_NUM < 180
  7. #assert AMX Mod X v1.8.0 or later library required!
  8. #endif
  9.  
  10. #include <hamsandwich>
  11.  
  12. /*================================================================================
  13.  [Constants, Offsets, Macros]
  14. =================================================================================*/
  15.  
  16. new const PLUGIN_VERSION[] = "2.0.0"
  17.  
  18. const MAX_RENDER_AMOUNT = 255 // do not change this
  19. const SEMI_RENDER_AMOUNT = 200
  20. const Float:SPEC_INTERVAL = 0.2 // do not change this
  21. const Float:RANGE_INTERVAL = 0.1 // do not change this
  22.  
  23. const PEV_SPEC_TARGET = pev_iuser2
  24.  
  25. enum (+= 35)
  26. {
  27. TASK_SPECTATOR = 3000,
  28. TASK_RANGE,
  29. TASK_DURATION
  30. }
  31. #define ID_SPECTATOR (taskid - TASK_SPECTATOR)
  32. #define ID_RANGE (taskid - TASK_RANGE)
  33.  
  34. const OFFSET_WEAPONOWNER = 41
  35. const OFFSET_WEAPONID = 43
  36. const OFFSET_LINUX = 5
  37. const OFFSET_LINUX_WEAPONS = 4
  38. const PDATA_SAFE = 2
  39.  
  40. new const WEAPON_ENTITY_NAMES[][] = { "", "weapon_p228", "", "weapon_scout", "weapon_hegrenade", "weapon_xm1014",
  41. "weapon_c4", "weapon_mac10", "weapon_aug", "weapon_smokegrenade", "weapon_elite", "weapon_fiveseven",
  42. "weapon_ump45", "weapon_sg550", "weapon_galil", "weapon_famas", "weapon_usp", "weapon_glock18", "weapon_awp",
  43. "weapon_mp5navy", "weapon_m249", "weapon_m3", "weapon_m4a1", "weapon_tmp", "weapon_g3sg1", "weapon_flashbang",
  44. "weapon_deagle", "weapon_sg552", "weapon_ak47", "weapon_knife", "weapon_p90" }
  45.  
  46. new const CT_SPAWN_ENTITY_NAME[] = "info_player_start"
  47. new const TER_SPAWN_ENTITY_NAME[] = "info_player_deathmatch"
  48.  
  49. new const Float:random_own_place[][3] =
  50. {
  51. { 0.0, 0.0, 0.0 },
  52. { -32.5, 0.0, 0.0 },
  53. { 32.5, 0.0, 0.0 },
  54. { 0.0, -32.5, 0.0 },
  55. { 0.0, 32.5, 0.0 },
  56. { -32.5, -32.5, 0.0 },
  57. { -32.5, 32.5, 0.0 },
  58. { 32.5, 32.5, 0.0 },
  59. { 32.5, -32.5, 0.0 }
  60. }
  61.  
  62. /*================================================================================
  63.  [Global Variables]
  64. =================================================================================*/
  65.  
  66. new cvar_iSemiClipRenderRadius, cvar_iSemiClipEnemies, cvar_iSemiClipButton,
  67. cvar_flSemiClipUnstuckDelay, cvar_iSemiClipBlockTeams, cvar_iSemiClipUnstuck,
  68. cvar_iSemiClipRenderMode, cvar_iSemiClipRenderAmt, cvar_iSemiClipRenderFade,
  69. cvar_iSemiClipRenderFadeMin, cvar_iSemiClipRenderFadeSpec, cvar_iSemiClip,
  70. cvar_iSemiClipRenderFx, cvar_iSemiClipKnifeTrace, cvar_flSemiClipDuration,
  71. cvar_iSemiClipColorTer[3], cvar_iSemiClipColorCTs[3], cvar_iSemiClipRender,
  72. cvar_iSemiClipColorAdmin[3], cvar_szSemiClipColorFlag, cvar_iBotQuota
  73.  
  74. new bool:g_bHamCzBots, g_iMaxPlayers, bool:g_bPreparation,
  75. g_iAddToFullPack, g_iTraceLine, g_iCmdStart
  76.  
  77. new g_iSpawnCountCTs, Float:g_flSpawnsCTs[32][3],
  78. g_iSpawnCountTer, Float:g_flSpawnsTer[32][3],
  79. g_iSpawnCountCSDM, Float:g_flSpawnsCSDM[128][3]
  80.  
  81. new g_iCachedSemiClip, g_iCachedEnemies, g_iCachedBlockTeams, g_iCachedUnstuck,
  82. Float:g_flCachedUnstuckDelay, g_iCachedFadeMin, g_iCachedFadeSpec,
  83. g_iCachedMode, g_iCachedRadius, g_iCachedAmt, g_iCachedFx, g_iCachedRender,
  84. g_iCachedFade, g_iCachedButton, g_iCachedKnifeTrace, g_iCachedColorTer[3],
  85. g_iCachedColorCTs[3], g_iCachedColorAdmin[3], g_iCachedColorFlag
  86.  
  87. new bs_IsAlive, bs_IsConnected, bs_IsBot, bs_IsSolid, bs_InSemiClip, bs_InButton, bs_IsAdmin
  88. new g_iTeam[33], g_iSpectating[33], g_iSpectatingTeam[33], g_iCurrentWeapon[33], g_iRange[33][33]
  89.  
  90. #define add_bitsum(%1,%2) (%1 |= (1<<(%2-1)))
  91. #define del_bitsum(%1,%2) (%1 &= ~(1<<(%2-1)))
  92. #define get_bitsum(%1,%2) (%1 & (1<<(%2-1)))
  93.  
  94. #define is_user_valid_alive(%1) (1 <= %1 <= g_iMaxPlayers && get_bitsum(bs_IsAlive, %1))
  95. #define is_same_team(%1,%2) (g_iTeam[%1] == g_iTeam[%2])
  96.  
  97. // tsc_set_user_rendering
  98. enum
  99. {
  100. SPECIAL_MODE = 0,
  101. SPECIAL_AMT,
  102. SPECIAL_FX,
  103. MAX_SPECIAL
  104. }
  105. new bs_IsSpecial
  106. new g_iRenderSpecial[33][MAX_SPECIAL]
  107. new g_iRenderSpecialColor[33][MAX_SPECIAL]
  108.  
  109. /*================================================================================
  110.  [Natives, Init and Cfg]
  111. =================================================================================*/
  112.  
  113. public plugin_natives()
  114. {
  115. register_native("tsc_set_user_rendering", "native_set_rendering", 1)
  116. }
  117.  
  118. public plugin_init()
  119. {
  120. register_plugin("Team Semiclip", PLUGIN_VERSION, "schmurgel1983")
  121.  
  122. register_event("HLTV", "event_round_start", "a", "1=0", "2=0")
  123.  
  124. RegisterHam(Ham_Spawn, "player", "fwd_PlayerSpawn_Post", 1)
  125. RegisterHam(Ham_Killed, "player", "fwd_PlayerKilled")
  126. RegisterHam(Ham_Player_PreThink, "player", "fwd_Player_PreThink_Post", 1)
  127. RegisterHam(Ham_Player_PostThink, "player", "fwd_Player_PostThink")
  128.  
  129. g_iAddToFullPack = register_forward(FM_AddToFullPack, "fwd_AddToFullPack_Post", 1)
  130. g_iTraceLine = register_forward(FM_TraceLine, "fwd_TraceLine_Post", 1)
  131. g_iCmdStart = register_forward(FM_CmdStart, "fwd_CmdStart")
  132.  
  133. register_message(get_user_msgid("TeamInfo"), "message_TeamInfo")
  134. for (new i = 1; i < sizeof WEAPON_ENTITY_NAMES; i++)
  135. if (WEAPON_ENTITY_NAMES[i][0]) RegisterHam(Ham_Item_Deploy, WEAPON_ENTITY_NAMES[i], "fwd_Item_Deploy_Post", 1)
  136.  
  137. cvar_iSemiClip = register_cvar("semiclip", "1")
  138. cvar_iSemiClipBlockTeams = register_cvar("semiclip_blockteam", "0")
  139. cvar_iSemiClipEnemies = register_cvar("semiclip_enemies", "0")
  140. cvar_iSemiClipUnstuck = register_cvar("semiclip_unstuck", "1")
  141. cvar_flSemiClipUnstuckDelay = register_cvar("semiclip_unstuckdelay", "0.1")
  142. cvar_iSemiClipButton = register_cvar("semiclip_button", "0")
  143. cvar_iSemiClipKnifeTrace = register_cvar("semiclip_knife_trace", "0")
  144. cvar_flSemiClipDuration = register_cvar("semiclip_duration", "0")
  145.  
  146. cvar_iSemiClipRender = register_cvar("semiclip_render", "1")
  147. cvar_iSemiClipRenderMode = register_cvar("semiclip_rendermode", "2")
  148. cvar_iSemiClipRenderAmt = register_cvar("semiclip_renderamt", "129")
  149. cvar_iSemiClipRenderFx = register_cvar("semiclip_renderfx", "0")
  150. cvar_iSemiClipRenderRadius = register_cvar("semiclip_renderradius", "250")
  151. cvar_iSemiClipRenderFade = register_cvar("semiclip_renderfade", "0")
  152. cvar_iSemiClipRenderFadeMin = register_cvar("semiclip_renderfademin", "25")
  153. cvar_iSemiClipRenderFadeSpec = register_cvar("semiclip_renderfadespec", "1")
  154.  
  155. cvar_szSemiClipColorFlag = register_cvar("semiclip_color_admin_flag", "b")
  156. cvar_iSemiClipColorAdmin[0] = register_cvar("semiclip_color_admin_R", "0")
  157. cvar_iSemiClipColorAdmin[1] = register_cvar("semiclip_color_admin_G", "0")
  158. cvar_iSemiClipColorAdmin[2] = register_cvar("semiclip_color_admin_B", "0")
  159. cvar_iSemiClipColorTer[0] = register_cvar("semiclip_color_ter_R", "0")
  160. cvar_iSemiClipColorTer[1] = register_cvar("semiclip_color_ter_G", "0")
  161. cvar_iSemiClipColorTer[2] = register_cvar("semiclip_color_ter_B", "0")
  162. cvar_iSemiClipColorCTs[0] = register_cvar("semiclip_color_ct_R", "0")
  163. cvar_iSemiClipColorCTs[1] = register_cvar("semiclip_color_ct_G", "0")
  164. cvar_iSemiClipColorCTs[2] = register_cvar("semiclip_color_ct_B", "0")
  165.  
  166. register_cvar("Team_Semiclip_version", PLUGIN_VERSION, FCVAR_SERVER|FCVAR_SPONLY)
  167. set_cvar_string("Team_Semiclip_version", PLUGIN_VERSION)
  168.  
  169. cvar_iBotQuota = get_cvar_pointer("bot_quota")
  170.  
  171. g_iMaxPlayers = get_maxplayers()
  172. }
  173.  
  174. public plugin_cfg()
  175. {
  176. new configsdir[32]
  177. get_configsdir(configsdir, charsmax(configsdir))
  178. server_cmd("exec %s/team_semiclip.cfg", configsdir)
  179.  
  180. new ent
  181. ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"))
  182.  
  183. if (pev_valid(ent))
  184. {
  185. register_think("ent_cache_cvars", "cache_cvars_think")
  186.  
  187. set_pev(ent, pev_classname, "ent_cache_cvars")
  188. set_pev(ent, pev_nextthink, get_gametime() + 1.0)
  189. }
  190. else
  191. {
  192. set_task(1.0, "cache_cvars")
  193. set_task(12.0, "cache_cvars", _, _, _, "b")
  194. }
  195.  
  196. set_task(1.5, "load_spawns")
  197. }
  198.  
  199. public plugin_pause()
  200. {
  201. unregister_forward(FM_AddToFullPack, g_iAddToFullPack, 1)
  202. unregister_forward(FM_TraceLine, g_iTraceLine, 1)
  203. unregister_forward(FM_CmdStart, g_iCmdStart)
  204.  
  205. static id
  206. for (id = 1; id <= g_iMaxPlayers; id++)
  207. {
  208. if (!get_bitsum(bs_IsConnected, id) || !get_bitsum(bs_IsAlive, id)) continue
  209.  
  210. if (get_bitsum(bs_InSemiClip, id))
  211. {
  212. set_pev(id, pev_solid, SOLID_SLIDEBOX)
  213. del_bitsum(bs_InSemiClip, id);
  214. }
  215. }
  216. }
  217.  
  218. public plugin_unpause()
  219. {
  220. g_iAddToFullPack = register_forward(FM_AddToFullPack, "fwd_AddToFullPack_Post", 1)
  221. g_iTraceLine = register_forward(FM_TraceLine, "fwd_TraceLine_Post", 1)
  222. g_iCmdStart = register_forward(FM_CmdStart, "fwd_CmdStart")
  223. }
  224.  
  225. public client_putinserver(id)
  226. {
  227. add_bitsum(bs_IsConnected, id);
  228. set_cvars(id)
  229.  
  230. set_task(RANGE_INTERVAL, "range_check", id+TASK_RANGE, _, _, "b")
  231.  
  232. if (is_user_bot(id))
  233. {
  234. add_bitsum(bs_IsBot, id);
  235. add_bitsum(bs_InButton, id);
  236.  
  237. if (!g_bHamCzBots && cvar_iBotQuota)
  238. set_task(0.1, "register_ham_czbots", id)
  239. }
  240. else
  241. {
  242. set_task(SPEC_INTERVAL, "spec_check", id+TASK_SPECTATOR, _, _, "b")
  243. }
  244. }
  245.  
  246. public client_disconnect(id)
  247. {
  248. del_bitsum(bs_IsConnected, id);
  249. set_cvars(id)
  250. remove_task(id+TASK_RANGE)
  251. remove_task(id+TASK_SPECTATOR)
  252. }
  253.  
  254. /*================================================================================
  255.  [Main Events]
  256. =================================================================================*/
  257.  
  258. public event_round_start()
  259. {
  260. remove_task(TASK_DURATION)
  261.  
  262. if (get_pcvar_float(cvar_flSemiClipDuration) > 0.0)
  263. {
  264. set_pcvar_num(cvar_iSemiClip, 1)
  265. g_iCachedSemiClip = 1
  266. g_bPreparation = true
  267.  
  268. set_task(get_pcvar_float(cvar_flSemiClipDuration), "duration_disable_plugin", TASK_DURATION)
  269. }
  270. }
  271.  
  272. /*================================================================================
  273.  [Main Forwards]
  274. =================================================================================*/
  275.  
  276. public fwd_PlayerSpawn_Post(id)
  277. {
  278. if (!is_user_alive(id) || !g_iTeam[id])
  279. return
  280.  
  281. add_bitsum(bs_IsAlive, id);
  282. remove_task(id+TASK_SPECTATOR)
  283. }
  284.  
  285. public fwd_PlayerKilled(id)
  286. {
  287. del_bitsum(bs_IsAlive, id);
  288. del_bitsum(bs_InSemiClip, id);
  289. g_iTeam[id] = 3
  290.  
  291. if (!get_bitsum(bs_IsBot, id))
  292. set_task(SPEC_INTERVAL, "spec_check", id+TASK_SPECTATOR, _, _, "b")
  293. }
  294.  
  295. public fwd_Player_PreThink_Post(id)
  296. {
  297. if (!g_iCachedSemiClip || !get_bitsum(bs_IsAlive, id))
  298. return FMRES_IGNORED
  299.  
  300. static i
  301. for (i = 1; i <= g_iMaxPlayers; i++)
  302. {
  303. if (!get_bitsum(bs_IsConnected, i) || !get_bitsum(bs_IsAlive, i)) continue
  304.  
  305. if (!get_bitsum(bs_InSemiClip, i)) add_bitsum(bs_IsSolid, i);
  306. else del_bitsum(bs_IsSolid, i);
  307. }
  308.  
  309. if (get_bitsum(bs_IsSolid, id))
  310. for (i = 1; i <= g_iMaxPlayers; i++)
  311. {
  312. if (!get_bitsum(bs_IsConnected, i) || !get_bitsum(bs_IsAlive, i) || !get_bitsum(bs_IsSolid, i)) continue
  313. if (g_iRange[id][i] == MAX_RENDER_AMOUNT || i == id) continue
  314. if (g_bPreparation)
  315. {
  316. set_pev(i, pev_solid, SOLID_NOT)
  317. add_bitsum(bs_InSemiClip, i);
  318. }
  319. else
  320. {
  321. switch (g_iCachedButton)
  322. {
  323. case 3: // BOTH
  324. {
  325. if (get_bitsum(bs_InButton, id))
  326. {
  327. if (!g_iCachedEnemies && !is_same_team(i, id)) continue
  328. }
  329. else if (query_enemies(id, i)) continue
  330. }
  331. case 1, 2: // CT or TERROR
  332. {
  333. if (get_bitsum(bs_InButton, id) && g_iCachedButton == g_iTeam[id] && g_iCachedButton == g_iTeam[i])
  334. {
  335. if (g_iCachedEnemies && !is_same_team(i, id)) continue
  336. }
  337. else if (query_enemies(id, i)) continue
  338. }
  339. default: if (query_enemies(id, i)) continue;
  340. }
  341.  
  342. set_pev(i, pev_solid, SOLID_NOT)
  343. add_bitsum(bs_InSemiClip, i);
  344. }
  345. }
  346.  
  347. return FMRES_IGNORED
  348. }
  349.  
  350. public fwd_Player_PostThink(id)
  351. {
  352. if (!g_iCachedSemiClip || !get_bitsum(bs_IsAlive, id))
  353. return FMRES_IGNORED
  354.  
  355. static i
  356. for (i = 1; i <= g_iMaxPlayers; i++)
  357. {
  358. if (!get_bitsum(bs_IsConnected, i) || !get_bitsum(bs_IsAlive, i)) continue
  359.  
  360. if (get_bitsum(bs_InSemiClip, i))
  361. {
  362. set_pev(i, pev_solid, SOLID_SLIDEBOX)
  363. del_bitsum(bs_InSemiClip, i);
  364. }
  365. }
  366.  
  367. return FMRES_IGNORED
  368. }
  369.  
  370. public fwd_AddToFullPack_Post(es_handle, e, ent, host, flags, player, pSet)
  371. {
  372. if (!g_iCachedSemiClip || !player) return FMRES_IGNORED
  373.  
  374. if (g_iTeam[host] == 3)
  375. {
  376. if (!g_iCachedRender || get_bitsum(bs_IsBot, host) || !get_bitsum(bs_IsAlive, g_iSpectating[host]) || !get_bitsum(bs_IsAlive, ent)) return FMRES_IGNORED
  377. if (g_iRange[g_iSpectating[host]][ent] == MAX_RENDER_AMOUNT) return FMRES_IGNORED
  378. if (!g_iCachedFadeSpec && g_iSpectating[host] == ent) return FMRES_IGNORED
  379. if (g_bPreparation)
  380. {
  381. if (get_bitsum(bs_IsSpecial, ent))
  382. {
  383. set_es(es_handle, ES_RenderMode, g_iRenderSpecial[ent][SPECIAL_MODE])
  384. set_es(es_handle, ES_RenderAmt, g_iRenderSpecial[ent][SPECIAL_AMT])
  385. set_es(es_handle, ES_RenderFx, g_iRenderSpecial[ent][SPECIAL_FX])
  386. set_es(es_handle, ES_RenderColor, g_iRenderSpecialColor[ent])
  387. }
  388. else
  389. {
  390. set_es(es_handle, ES_RenderMode, g_iCachedMode)
  391. set_es(es_handle, ES_RenderAmt, g_iRange[g_iSpectating[host]][ent])
  392. set_es(es_handle, ES_RenderFx, g_iCachedFx)
  393. switch (g_iTeam[ent])
  394. {
  395. case 1: get_bitsum(bs_IsAdmin, ent) ? set_es(es_handle, ES_RenderColor, g_iCachedColorAdmin) : set_es(es_handle, ES_RenderColor, g_iCachedColorTer);
  396. case 2: get_bitsum(bs_IsAdmin, ent) ? set_es(es_handle, ES_RenderColor, g_iCachedColorAdmin) : set_es(es_handle, ES_RenderColor, g_iCachedColorCTs);
  397. }
  398. }
  399.  
  400. return FMRES_IGNORED
  401. }
  402. else
  403. {
  404. switch (g_iCachedButton)
  405. {
  406. case 3: // BOTH
  407. {
  408. if (get_bitsum(bs_InButton, g_iSpectating[host]))
  409. {
  410. if (!g_iCachedEnemies && !is_same_team(ent, g_iSpectating[host])) return FMRES_IGNORED
  411. }
  412. else if (query_enemies(g_iSpectating[host], ent)) return FMRES_IGNORED
  413. }
  414. case 1, 2: // CT or TERROR
  415. {
  416. if (get_bitsum(bs_InButton, g_iSpectating[host]) && g_iCachedButton == g_iTeam[g_iSpectating[host]] && g_iCachedButton == g_iTeam[ent])
  417. {
  418. if (g_iCachedEnemies && !is_same_team(ent, g_iSpectating[host])) return FMRES_IGNORED
  419. }
  420. else if (query_enemies(g_iSpectating[host], ent)) return FMRES_IGNORED
  421. }
  422. default: if (query_enemies(g_iSpectating[host], ent)) return FMRES_IGNORED;
  423. }
  424.  
  425. if (get_bitsum(bs_IsSpecial, ent))
  426. {
  427. set_es(es_handle, ES_RenderMode, g_iRenderSpecial[ent][SPECIAL_MODE])
  428. set_es(es_handle, ES_RenderAmt, g_iRenderSpecial[ent][SPECIAL_AMT])
  429. set_es(es_handle, ES_RenderFx, g_iRenderSpecial[ent][SPECIAL_FX])
  430. set_es(es_handle, ES_RenderColor, g_iRenderSpecialColor[ent])
  431. }
  432. else
  433. {
  434. set_es(es_handle, ES_RenderMode, g_iCachedMode)
  435. set_es(es_handle, ES_RenderAmt, g_iRange[g_iSpectating[host]][ent])
  436. set_es(es_handle, ES_RenderFx, g_iCachedFx)
  437. switch (g_iTeam[ent])
  438. {
  439. case 1: get_bitsum(bs_IsAdmin, ent) ? set_es(es_handle, ES_RenderColor, g_iCachedColorAdmin) : set_es(es_handle, ES_RenderColor, g_iCachedColorTer);
  440. case 2: get_bitsum(bs_IsAdmin, ent) ? set_es(es_handle, ES_RenderColor, g_iCachedColorAdmin) : set_es(es_handle, ES_RenderColor, g_iCachedColorCTs);
  441. }
  442. }
  443.  
  444. return FMRES_IGNORED
  445. }
  446. }
  447.  
  448. if (!get_bitsum(bs_IsAlive, host) || !get_bitsum(bs_IsAlive, ent) || !get_bitsum(bs_IsSolid, host) || !get_bitsum(bs_IsSolid, ent)) return FMRES_IGNORED
  449. if (g_iRange[host][ent] == MAX_RENDER_AMOUNT) return FMRES_IGNORED
  450. if (g_bPreparation)
  451. {
  452. set_es(es_handle, ES_Solid, SOLID_NOT)
  453.  
  454. if (!g_iCachedRender) return FMRES_IGNORED
  455.  
  456. if (get_bitsum(bs_IsSpecial, ent))
  457. {
  458. set_es(es_handle, ES_RenderMode, g_iRenderSpecial[ent][SPECIAL_MODE])
  459. set_es(es_handle, ES_RenderAmt, g_iRenderSpecial[ent][SPECIAL_AMT])
  460. set_es(es_handle, ES_RenderFx, g_iRenderSpecial[ent][SPECIAL_FX])
  461. set_es(es_handle, ES_RenderColor, g_iRenderSpecialColor[ent])
  462. }
  463. else
  464. {
  465. set_es(es_handle, ES_RenderMode, g_iCachedMode)
  466. set_es(es_handle, ES_RenderAmt, g_iRange[host][ent])
  467. set_es(es_handle, ES_RenderFx, g_iCachedFx)
  468. switch (g_iTeam[ent])
  469. {
  470. case 1: get_bitsum(bs_IsAdmin, ent) ? set_es(es_handle, ES_RenderColor, g_iCachedColorAdmin) : set_es(es_handle, ES_RenderColor, g_iCachedColorTer);
  471. case 2: get_bitsum(bs_IsAdmin, ent) ? set_es(es_handle, ES_RenderColor, g_iCachedColorAdmin) : set_es(es_handle, ES_RenderColor, g_iCachedColorCTs);
  472. }
  473. }
  474.  
  475. return FMRES_IGNORED
  476. }
  477. else
  478. {
  479. switch (g_iCachedButton)
  480. {
  481. case 3: // BOTH
  482. {
  483. if (get_bitsum(bs_InButton, host))
  484. {
  485. if (!g_iCachedEnemies && !is_same_team(ent, host)) return FMRES_IGNORED
  486. }
  487. else if (query_enemies(host, ent)) return FMRES_IGNORED
  488. }
  489. case 1, 2: // CT or TERROR
  490. {
  491. if (get_bitsum(bs_InButton, host) && g_iCachedButton == g_iTeam[host] && g_iCachedButton == g_iTeam[ent])
  492. {
  493. if (g_iCachedEnemies && !is_same_team(ent, host)) return FMRES_IGNORED
  494. }
  495. else if (query_enemies(host, ent)) return FMRES_IGNORED
  496. }
  497. default: if (query_enemies(host, ent)) return FMRES_IGNORED;
  498. }
  499.  
  500. set_es(es_handle, ES_Solid, SOLID_NOT)
  501.  
  502. if (!g_iCachedRender) return FMRES_IGNORED
  503.  
  504. if (get_bitsum(bs_IsSpecial, ent))
  505. {
  506. set_es(es_handle, ES_RenderMode, g_iRenderSpecial[ent][SPECIAL_MODE])
  507. set_es(es_handle, ES_RenderAmt, g_iRenderSpecial[ent][SPECIAL_AMT])
  508. set_es(es_handle, ES_RenderFx, g_iRenderSpecial[ent][SPECIAL_FX])
  509. set_es(es_handle, ES_RenderColor, g_iRenderSpecialColor[ent])
  510. }
  511. else
  512. {
  513. set_es(es_handle, ES_RenderMode, g_iCachedMode)
  514. set_es(es_handle, ES_RenderAmt, g_iRange[host][ent])
  515. set_es(es_handle, ES_RenderFx, g_iCachedFx)
  516. switch (g_iTeam[ent])
  517. {
  518. case 1: get_bitsum(bs_IsAdmin, ent) ? set_es(es_handle, ES_RenderColor, g_iCachedColorAdmin) : set_es(es_handle, ES_RenderColor, g_iCachedColorTer);
  519. case 2: get_bitsum(bs_IsAdmin, ent) ? set_es(es_handle, ES_RenderColor, g_iCachedColorAdmin) : set_es(es_handle, ES_RenderColor, g_iCachedColorCTs);
  520. }
  521. }
  522. }
  523.  
  524. return FMRES_IGNORED
  525. }
  526.  
  527. public fwd_TraceLine_Post(Float:vStart[3], Float:vEnd[3], noMonsters, id, trace)
  528. {
  529. if (!g_iCachedSemiClip || !g_iCachedKnifeTrace || !is_user_valid_alive(id) || g_iCurrentWeapon[id] != CSW_KNIFE)
  530. return FMRES_IGNORED
  531.  
  532. new Float:flFraction
  533. get_tr2(trace, TR_flFraction, flFraction)
  534. if (flFraction >= 1.0)
  535. return FMRES_IGNORED
  536.  
  537. new pHit = get_tr2(trace, TR_pHit)
  538. if (!is_user_valid_alive(pHit) || !is_same_team(id, pHit) || entity_range(id, pHit) > 48.0)
  539. return FMRES_IGNORED
  540.  
  541. new Float:start[3], Float:view_ofs[3], Float:direction[3], Float:tlStart[3], Float:tlEnd[3]
  542.  
  543. pev(id, pev_origin, start)
  544. pev(id, pev_view_ofs, view_ofs)
  545. xs_vec_add(start, view_ofs, start)
  546.  
  547. velocity_by_aim(id, 22, direction)
  548. xs_vec_add(direction, start, tlStart)
  549. velocity_by_aim(id, 48, direction)
  550. xs_vec_add(direction, start, tlEnd)
  551.  
  552. engfunc(EngFunc_TraceLine, tlStart, tlEnd, noMonsters|DONT_IGNORE_MONSTERS, pHit, 0)
  553.  
  554. new tHit = get_tr2(0, TR_pHit)
  555. if (!is_user_valid_alive(tHit) || is_same_team(id, tHit))
  556. return FMRES_IGNORED
  557.  
  558. set_tr2(trace, TR_AllSolid, get_tr2(0, TR_AllSolid))
  559. set_tr2(trace, TR_StartSolid, get_tr2(0, TR_StartSolid))
  560. set_tr2(trace, TR_InOpen, get_tr2(0, TR_InOpen))
  561. set_tr2(trace, TR_InWater, get_tr2(0, TR_InWater))
  562. set_tr2(trace, TR_iHitgroup, get_tr2(0, TR_iHitgroup))
  563. set_tr2(trace, TR_pHit, tHit)
  564.  
  565. return FMRES_IGNORED
  566. }
  567.  
  568. public fwd_CmdStart(id, handle)
  569. {
  570. if (!g_iCachedSemiClip || !g_iCachedButton || !get_bitsum(bs_IsAlive, id) || get_bitsum(bs_IsBot, id))
  571. return
  572.  
  573. (get_uc(handle, UC_Buttons) & IN_USE) ? add_bitsum(bs_InButton, id) : del_bitsum(bs_InButton, id);
  574. }
  575.  
  576. public fwd_Item_Deploy_Post(ent)
  577. {
  578. static owner ; owner = ham_cs_get_weapon_ent_owner(ent)
  579.  
  580. if (!is_user_valid_alive(owner))
  581. return HAM_IGNORED
  582.  
  583. g_iCurrentWeapon[owner] = fm_cs_get_weapon_id(ent)
  584.  
  585. return HAM_IGNORED
  586. }
  587.  
  588. /*================================================================================
  589.  [Other Functions and Tasks]
  590. =================================================================================*/
  591.  
  592. // credits to MeRcyLeZZ
  593. public register_ham_czbots(id)
  594. {
  595. if (g_bHamCzBots || !is_user_connected(id) || !get_pcvar_num(cvar_iBotQuota))
  596. return
  597.  
  598. RegisterHamFromEntity(Ham_Spawn, id, "fwd_PlayerSpawn_Post", 1)
  599. RegisterHamFromEntity(Ham_Killed, id, "fwd_PlayerKilled")
  600. RegisterHamFromEntity(Ham_Player_PreThink, id, "fwd_Player_PreThink_Post", 1)
  601. RegisterHamFromEntity(Ham_Player_PostThink, id, "fwd_Player_PostThink")
  602.  
  603. g_bHamCzBots = true
  604.  
  605. if (is_user_alive(id))
  606. fwd_PlayerSpawn_Post(id)
  607. }
  608.  
  609. public cache_cvars()
  610. {
  611. g_iCachedSemiClip = !!get_pcvar_num(cvar_iSemiClip)
  612. g_iCachedEnemies = !!get_pcvar_num(cvar_iSemiClipEnemies)
  613. g_iCachedBlockTeams = clamp(get_pcvar_num(cvar_iSemiClipBlockTeams), 0, 3)
  614. g_iCachedUnstuck = clamp(get_pcvar_num(cvar_iSemiClipUnstuck), 0, 3)
  615. g_flCachedUnstuckDelay = floatclamp(get_pcvar_float(cvar_flSemiClipUnstuckDelay), 0.0, 3.0)
  616. g_iCachedButton = clamp(get_pcvar_num(cvar_iSemiClipButton), 0, 3)
  617. g_iCachedKnifeTrace = !!get_pcvar_num(cvar_iSemiClipKnifeTrace)
  618.  
  619. g_iCachedRender = !!get_pcvar_num(cvar_iSemiClipRender)
  620. g_iCachedMode = clamp(get_pcvar_num(cvar_iSemiClipRenderMode), 0, 5)
  621. g_iCachedAmt = clamp(get_pcvar_num(cvar_iSemiClipRenderAmt), 0, 255)
  622. g_iCachedFx = clamp(get_pcvar_num(cvar_iSemiClipRenderFx), 0, 20)
  623. g_iCachedFade = !!get_pcvar_num(cvar_iSemiClipRenderFade)
  624. g_iCachedFadeMin = clamp(get_pcvar_num(cvar_iSemiClipRenderFadeMin), 0, SEMI_RENDER_AMOUNT)
  625. g_iCachedFadeSpec = !!get_pcvar_num(cvar_iSemiClipRenderFadeSpec)
  626. g_iCachedRadius = clamp(get_pcvar_num(cvar_iSemiClipRenderRadius), SEMI_RENDER_AMOUNT - g_iCachedFadeMin, 4095)
  627.  
  628. static szFlags[24] ; get_pcvar_string(cvar_szSemiClipColorFlag, szFlags, charsmax(szFlags))
  629. g_iCachedColorFlag = read_flags(szFlags)
  630. g_iCachedColorTer[0] = clamp(get_pcvar_num(cvar_iSemiClipColorTer[0]), 0, 255)
  631. g_iCachedColorTer[1] = clamp(get_pcvar_num(cvar_iSemiClipColorTer[1]), 0, 255)
  632. g_iCachedColorTer[2] = clamp(get_pcvar_num(cvar_iSemiClipColorTer[2]), 0, 255)
  633. g_iCachedColorCTs[0] = clamp(get_pcvar_num(cvar_iSemiClipColorCTs[0]), 0, 255)
  634. g_iCachedColorCTs[1] = clamp(get_pcvar_num(cvar_iSemiClipColorCTs[1]), 0, 255)
  635. g_iCachedColorCTs[2] = clamp(get_pcvar_num(cvar_iSemiClipColorCTs[2]), 0, 255)
  636. g_iCachedColorAdmin[0] = clamp(get_pcvar_num(cvar_iSemiClipColorAdmin[0]), 0, 255)
  637. g_iCachedColorAdmin[1] = clamp(get_pcvar_num(cvar_iSemiClipColorAdmin[1]), 0, 255)
  638. g_iCachedColorAdmin[2] = clamp(get_pcvar_num(cvar_iSemiClipColorAdmin[2]), 0, 255)
  639.  
  640. static id
  641. for (id = 1; id <= g_iMaxPlayers; id++)
  642. {
  643. if (!get_bitsum(bs_IsConnected, id)) continue
  644.  
  645. (get_user_flags(id) & g_iCachedColorFlag) ? add_bitsum(bs_IsAdmin, id) : del_bitsum(bs_IsAdmin, id);
  646. }
  647. }
  648.  
  649. public cache_cvars_think(ent)
  650. {
  651. if (!pev_valid(ent)) return;
  652.  
  653. g_iCachedSemiClip = !!get_pcvar_num(cvar_iSemiClip)
  654. g_iCachedEnemies = !!get_pcvar_num(cvar_iSemiClipEnemies)
  655. g_iCachedBlockTeams = clamp(get_pcvar_num(cvar_iSemiClipBlockTeams), 0, 3)
  656. g_iCachedUnstuck = clamp(get_pcvar_num(cvar_iSemiClipUnstuck), 0, 3)
  657. g_flCachedUnstuckDelay = floatclamp(get_pcvar_float(cvar_flSemiClipUnstuckDelay), 0.0, 3.0)
  658. g_iCachedButton = clamp(get_pcvar_num(cvar_iSemiClipButton), 0, 3)
  659. g_iCachedKnifeTrace = !!get_pcvar_num(cvar_iSemiClipKnifeTrace)
  660.  
  661. g_iCachedRender = !!get_pcvar_num(cvar_iSemiClipRender)
  662. g_iCachedMode = clamp(get_pcvar_num(cvar_iSemiClipRenderMode), 0, 5)
  663. g_iCachedAmt = clamp(get_pcvar_num(cvar_iSemiClipRenderAmt), 0, 255)
  664. g_iCachedFx = clamp(get_pcvar_num(cvar_iSemiClipRenderFx), 0, 20)
  665. g_iCachedFade = !!get_pcvar_num(cvar_iSemiClipRenderFade)
  666. g_iCachedFadeMin = clamp(get_pcvar_num(cvar_iSemiClipRenderFadeMin), 0, SEMI_RENDER_AMOUNT)
  667. g_iCachedFadeSpec = !!get_pcvar_num(cvar_iSemiClipRenderFadeSpec)
  668. g_iCachedRadius = clamp(get_pcvar_num(cvar_iSemiClipRenderRadius), SEMI_RENDER_AMOUNT - g_iCachedFadeMin, 4095)
  669.  
  670. static szFlags[24] ; get_pcvar_string(cvar_szSemiClipColorFlag, szFlags, charsmax(szFlags))
  671. g_iCachedColorFlag = read_flags(szFlags)
  672. g_iCachedColorTer[0] = clamp(get_pcvar_num(cvar_iSemiClipColorTer[0]), 0, 255)
  673. g_iCachedColorTer[1] = clamp(get_pcvar_num(cvar_iSemiClipColorTer[1]), 0, 255)
  674. g_iCachedColorTer[2] = clamp(get_pcvar_num(cvar_iSemiClipColorTer[2]), 0, 255)
  675. g_iCachedColorCTs[0] = clamp(get_pcvar_num(cvar_iSemiClipColorCTs[0]), 0, 255)
  676. g_iCachedColorCTs[1] = clamp(get_pcvar_num(cvar_iSemiClipColorCTs[1]), 0, 255)
  677. g_iCachedColorCTs[2] = clamp(get_pcvar_num(cvar_iSemiClipColorCTs[2]), 0, 255)
  678. g_iCachedColorAdmin[0] = clamp(get_pcvar_num(cvar_iSemiClipColorAdmin[0]), 0, 255)
  679. g_iCachedColorAdmin[1] = clamp(get_pcvar_num(cvar_iSemiClipColorAdmin[1]), 0, 255)
  680. g_iCachedColorAdmin[2] = clamp(get_pcvar_num(cvar_iSemiClipColorAdmin[2]), 0, 255)
  681.  
  682. static id
  683. for (id = 1; id <= g_iMaxPlayers; id++)
  684. {
  685. if (!get_bitsum(bs_IsConnected, id)) continue
  686.  
  687. (get_user_flags(id) & g_iCachedColorFlag) ? add_bitsum(bs_IsAdmin, id) : del_bitsum(bs_IsAdmin, id);
  688. }
  689.  
  690. set_pev(ent, pev_nextthink, get_gametime() + 12.0)
  691. }
  692.  
  693. public load_spawns()
  694. {
  695. new cfgdir[32], mapname[32], filepath[100], linedata[64]
  696.  
  697. get_configsdir(cfgdir, charsmax(cfgdir))
  698. get_mapname(mapname, charsmax(mapname))
  699. formatex(filepath, charsmax(filepath), "%s/csdm/%s.spawns.cfg", cfgdir, mapname)
  700.  
  701. if (file_exists(filepath))
  702. {
  703. new csdmdata[10][6], file
  704. if ((file = fopen(filepath,"rt")) != 0)
  705. {
  706. while (!feof(file))
  707. {
  708. fgets(file, linedata, charsmax(linedata))
  709.  
  710. if (!linedata[0] || str_count(linedata,' ') < 2) continue;
  711.  
  712. parse(linedata,csdmdata[0],5,csdmdata[1],5,csdmdata[2],5,csdmdata[3],5,csdmdata[4],5,csdmdata[5],5,csdmdata[6],5,csdmdata[7],5,csdmdata[8],5,csdmdata[9],5)
  713.  
  714. g_flSpawnsCSDM[g_iSpawnCountCSDM][0] = floatstr(csdmdata[0])
  715. g_flSpawnsCSDM[g_iSpawnCountCSDM][1] = floatstr(csdmdata[1])
  716. g_flSpawnsCSDM[g_iSpawnCountCSDM][2] = floatstr(csdmdata[2])
  717.  
  718. g_iSpawnCountCSDM++
  719. if (g_iSpawnCountCSDM >= sizeof g_flSpawnsCSDM) break;
  720. }
  721. fclose(file)
  722. }
  723. }
  724. else if (g_iCachedUnstuck == 2)
  725. {
  726. set_pcvar_num(cvar_iSemiClipUnstuck, 1)
  727. g_iCachedUnstuck = 1
  728. }
  729.  
  730. cs_collect_spawns_ents()
  731. }
  732.  
  733. public random_spawn_delay(id)
  734. {
  735. do_random_spawn(id, g_iCachedUnstuck)
  736. }
  737.  
  738. // credits to MeRcyLeZZ
  739. do_random_spawn(id, mode)
  740. {
  741. if (!get_bitsum(bs_IsConnected, id) || !get_bitsum(bs_IsAlive, id))
  742. return
  743.  
  744. static hull, sp_index, i
  745. hull = (pev(id, pev_flags) & FL_DUCKING) ? HULL_HEAD : HULL_HUMAN
  746.  
  747. switch (mode)
  748. {
  749. case 1: // Specified team
  750. {
  751. switch (g_iTeam[id])
  752. {
  753. case 1: // TERRORIST
  754. {
  755. if (!g_iSpawnCountTer)
  756. return
  757.  
  758. sp_index = random_num(0, g_iSpawnCountTer - 1)
  759. for (i = sp_index + 1; /*no condition*/; i++)
  760. {
  761. if (i >= g_iSpawnCountTer) i = 0
  762.  
  763. if (is_hull_vacant(g_flSpawnsTer[i], hull))
  764. {
  765. engfunc(EngFunc_SetOrigin, id, g_flSpawnsTer[i])
  766. break
  767. }
  768.  
  769. if (i == sp_index)
  770. break
  771. }
  772. }
  773. case 2: // CT
  774. {
  775. if (!g_iSpawnCountCTs)
  776. return
  777.  
  778. sp_index = random_num(0, g_iSpawnCountCTs - 1)
  779. for (i = sp_index + 1; /*no condition*/; i++)
  780. {
  781. if (i >= g_iSpawnCountCTs) i = 0
  782.  
  783. if (is_hull_vacant(g_flSpawnsCTs[i], hull))
  784. {
  785. engfunc(EngFunc_SetOrigin, id, g_flSpawnsCTs[i])
  786. break
  787. }
  788.  
  789. if (i == sp_index)
  790. break
  791. }
  792. }
  793. }
  794. }
  795. case 2: // CSDM
  796. {
  797. if (!g_iSpawnCountCSDM)
  798. return
  799.  
  800. sp_index = random_num(0, g_iSpawnCountCSDM - 1)
  801. for (i = sp_index + 1; /*no condition*/; i++)
  802. {
  803. if (i >= g_iSpawnCountCSDM) i = 0
  804.  
  805. if (is_hull_vacant(g_flSpawnsCSDM[i], hull))
  806. {
  807. engfunc(EngFunc_SetOrigin, id, g_flSpawnsCSDM[i])
  808. break
  809. }
  810.  
  811. if (i == sp_index)
  812. break
  813. }
  814. }
  815. case 3: // Random around own place
  816. {
  817. new Float:origin[3], Float:new_origin[3], Float:final[3]
  818. pev(id, pev_origin, origin)
  819.  
  820. for (new test = 0; test < sizeof random_own_place; test++)
  821. {
  822. final[0] = new_origin[0] = (origin[0] + random_own_place[test][0])
  823. final[1] = new_origin[1] = (origin[1] + random_own_place[test][1])
  824. final[2] = new_origin[2] = (origin[2] + random_own_place[test][2])
  825.  
  826. new z = 0
  827. do
  828. {
  829. if (is_hull_vacant(final, hull))
  830. {
  831. test = sizeof random_own_place
  832. engfunc(EngFunc_SetOrigin, id, final)
  833. break
  834. }
  835.  
  836. final[2] = new_origin[2] + (++z*20)
  837. }
  838. while (z < 5)
  839. }
  840. }
  841. }
  842. }
  843.  
  844. // credits to MeRcyLeZZ (I rewritten it.)
  845. cs_collect_spawns_ents()
  846. {
  847. // CT
  848. new ent = -1
  849.  
  850. while ((ent = engfunc(EngFunc_FindEntityByString, ent, "classname", CT_SPAWN_ENTITY_NAME)) != 0)
  851. {
  852. new Float:originF[3]
  853. pev(ent, pev_origin, originF)
  854. g_flSpawnsCTs[g_iSpawnCountCTs][0] = originF[0]
  855. g_flSpawnsCTs[g_iSpawnCountCTs][1] = originF[1]
  856. g_flSpawnsCTs[g_iSpawnCountCTs][2] = originF[2]
  857.  
  858. g_iSpawnCountCTs++
  859. if (g_iSpawnCountCTs >= sizeof g_flSpawnsCTs) break
  860. }
  861.  
  862. // TERROR
  863. ent = -1
  864.  
  865. while ((ent = engfunc(EngFunc_FindEntityByString, ent, "classname", TER_SPAWN_ENTITY_NAME)) != 0)
  866. {
  867. new Float:originF[3]
  868. pev(ent, pev_origin, originF)
  869. g_flSpawnsTer[g_iSpawnCountTer][0] = originF[0]
  870. g_flSpawnsTer[g_iSpawnCountTer][1] = originF[1]
  871. g_flSpawnsTer[g_iSpawnCountTer][2] = originF[2]
  872.  
  873. g_iSpawnCountTer++
  874. if (g_iSpawnCountTer >= sizeof g_flSpawnsTer) break
  875. }
  876. }
  877.  
  878. public range_check(taskid)
  879. {
  880. if (!g_iCachedSemiClip)
  881. return
  882.  
  883. static id
  884. for (id = 1; id <= g_iMaxPlayers; id++)
  885. {
  886. if (!get_bitsum(bs_IsConnected, id) || !get_bitsum(bs_IsAlive, id)) continue
  887.  
  888. g_iRange[ID_RANGE][id] = calc_fade(ID_RANGE, id, g_iCachedFade)
  889. }
  890. }
  891.  
  892. public spec_check(taskid)
  893. {
  894. if (!g_iCachedSemiClip || get_bitsum(bs_IsAlive, ID_SPECTATOR))
  895. return
  896.  
  897. static spec
  898. spec = pev(ID_SPECTATOR, PEV_SPEC_TARGET)
  899.  
  900. if (get_bitsum(bs_IsAlive, spec))
  901. {
  902. g_iSpectating[ID_SPECTATOR] = spec
  903. g_iSpectatingTeam[ID_SPECTATOR] = g_iTeam[spec]
  904. }
  905. }
  906.  
  907. public duration_disable_plugin()
  908. {
  909. set_pcvar_num(cvar_iSemiClip, 0)
  910. g_iCachedSemiClip = 0
  911. g_bPreparation = false
  912.  
  913. for (new id = 1; id <= g_iMaxPlayers; id++)
  914. {
  915. if (!get_bitsum(bs_IsConnected, id) || !get_bitsum(bs_IsAlive, id)) continue
  916.  
  917. if (get_bitsum(bs_InSemiClip, id))
  918. {
  919. set_pev(id, pev_solid, SOLID_SLIDEBOX)
  920. del_bitsum(bs_InSemiClip, id);
  921. }
  922.  
  923. if (g_iCachedUnstuck && is_player_stuck(id))
  924. do_random_spawn(id, g_iCachedUnstuck)
  925. }
  926. }
  927.  
  928. calc_fade(host, ent, mode)
  929. {
  930. if (mode)
  931. {
  932. if (g_iCachedFadeMin > g_iCachedRadius)
  933. return MAX_RENDER_AMOUNT;
  934.  
  935. static range ; range = floatround(entity_range(host, ent))
  936.  
  937. if (range >= g_iCachedRadius)
  938. return MAX_RENDER_AMOUNT;
  939.  
  940. static amount
  941. amount = SEMI_RENDER_AMOUNT - g_iCachedFadeMin
  942. amount = g_iCachedRadius / amount
  943. amount = range / amount + g_iCachedFadeMin
  944.  
  945. return amount;
  946. }
  947. else
  948. {
  949. static range ; range = floatround(entity_range(host, ent))
  950.  
  951. if (range < g_iCachedRadius)
  952. return g_iCachedAmt;
  953. }
  954.  
  955. return MAX_RENDER_AMOUNT;
  956. }
  957.  
  958. query_enemies(host, ent)
  959. {
  960. if (g_iCachedBlockTeams == 3) return 1;
  961.  
  962. switch (g_iCachedEnemies)
  963. {
  964. case 0: if (!is_same_team(ent, host) || g_iCachedBlockTeams == g_iTeam[ent]) return 1;
  965. case 1: if (g_iCachedBlockTeams == g_iTeam[ent] && is_same_team(ent, host)) return 1;
  966. }
  967.  
  968. return 0;
  969. }
  970.  
  971. set_cvars(id)
  972. {
  973. del_bitsum(bs_IsAlive, id);
  974. del_bitsum(bs_IsBot, id);
  975. del_bitsum(bs_IsSolid, id);
  976. del_bitsum(bs_InSemiClip, id);
  977. del_bitsum(bs_IsSpecial, id);
  978. g_iTeam[id] = 0
  979. }
  980.  
  981. /*================================================================================
  982.  [Message Hooks]
  983. =================================================================================*/
  984.  
  985. /*
  986. TeamInfo:
  987. read_data(1) byte EventEntity
  988. read_data(2) string TeamName
  989.  
  990. type | name | calls | time / min / max
  991. p | message_TeamInfo | 629 | 0.000116 / 0.000000 / 0.000002
  992.  
  993. fast enough!
  994. */
  995. public message_TeamInfo(msg_id, msg_dest)
  996. {
  997. if (msg_dest != MSG_ALL && msg_dest != MSG_BROADCAST)
  998. return
  999.  
  1000. static id, team[2]
  1001. id = get_msg_arg_int(1)
  1002. get_msg_arg_string(2, team, charsmax(team))
  1003.  
  1004. switch (team[0])
  1005. {
  1006. case 'T': g_iTeam[id] = 1; // TERRORIST
  1007. case 'C': g_iTeam[id] = 2; // CT
  1008. case 'S': g_iTeam[id] = 3; // SPECTATOR
  1009. default: g_iTeam[id] = 0;
  1010. }
  1011.  
  1012. if (g_iCachedUnstuck && get_bitsum(bs_IsAlive, id) && g_iCachedBlockTeams == g_iTeam[id])
  1013. {
  1014. if (!is_player_stuck(id))
  1015. return
  1016.  
  1017. if (g_flCachedUnstuckDelay > 0.0)
  1018. set_task(g_flCachedUnstuckDelay, "random_spawn_delay", id)
  1019. else
  1020. do_random_spawn(id, g_iCachedUnstuck)
  1021. }
  1022. }
  1023.  
  1024. /*================================================================================
  1025.  [Custom Natives]
  1026. =================================================================================*/
  1027.  
  1028. // tsc_set_rendering(id, special = 0, fx = kRenderFxNone, r = 255, g = 255, b = 255, render = kRenderNormal, amount = 16)
  1029. public native_set_rendering(id, special, fx, r, g, b, render, amount)
  1030. {
  1031. if (!is_user_connected(id))
  1032. {
  1033. log_error(AMX_ERR_NATIVE, "[Team Semiclip] Player is not in game (%d)", id)
  1034. return 0;
  1035. }
  1036.  
  1037. switch (special)
  1038. {
  1039. case 0:
  1040. {
  1041. del_bitsum(bs_IsSpecial, id);
  1042.  
  1043. return 1;
  1044. }
  1045. case 1:
  1046. {
  1047. add_bitsum(bs_IsSpecial, id);
  1048.  
  1049. g_iRenderSpecial[id][SPECIAL_MODE] = clamp(render, 0, 5)
  1050. g_iRenderSpecial[id][SPECIAL_AMT] = clamp(amount, 0, 255)
  1051. g_iRenderSpecial[id][SPECIAL_FX] = clamp(fx, 0, 20)
  1052.  
  1053. g_iRenderSpecialColor[id][0] = clamp(r, 0, 255)
  1054. g_iRenderSpecialColor[id][1] = clamp(g, 0, 255)
  1055. g_iRenderSpecialColor[id][2] = clamp(b, 0, 255)
  1056.  
  1057. return 1;
  1058. }
  1059. }
  1060.  
  1061. return 0;
  1062. }
  1063.  
  1064. /*================================================================================
  1065.  [Stocks]
  1066. =================================================================================*/
  1067.  
  1068. // credits to VEN
  1069. stock is_player_stuck(id)
  1070. {
  1071. static Float:originF[3]
  1072. pev(id, pev_origin, originF)
  1073.  
  1074. engfunc(EngFunc_TraceHull, originF, originF, 0, (pev(id, pev_flags) & FL_DUCKING) ? HULL_HEAD : HULL_HUMAN, id, 0)
  1075.  
  1076. if (get_tr2(0, TR_StartSolid) || get_tr2(0, TR_AllSolid) || !get_tr2(0, TR_InOpen))
  1077. return true;
  1078.  
  1079. return false;
  1080. }
  1081.  
  1082. // credits to VEN
  1083. stock is_hull_vacant(Float:origin[3], hull)
  1084. {
  1085. engfunc(EngFunc_TraceHull, origin, origin, 0, hull, 0, 0)
  1086.  
  1087. if (!get_tr2(0, TR_StartSolid) && !get_tr2(0, TR_AllSolid) && get_tr2(0, TR_InOpen))
  1088. return true;
  1089.  
  1090. return false;
  1091. }
  1092.  
  1093. // Stock by (probably) Twilight Suzuka -counts number of chars in a string
  1094. stock str_count(str[], searchchar)
  1095. {
  1096. new count, i, len = strlen(str)
  1097.  
  1098. for (i = 0; i <= len; i++)
  1099. {
  1100. if (str[i] == searchchar)
  1101. count++
  1102. }
  1103.  
  1104. return count;
  1105. }
  1106.  
  1107. // credits to Exolent[jNr]
  1108. stock fm_cs_get_weapon_id(ent)
  1109. {
  1110. if (pev_valid(ent) != PDATA_SAFE)
  1111. return 0;
  1112.  
  1113. return get_pdata_int(ent, OFFSET_WEAPONID, OFFSET_LINUX_WEAPONS);
  1114. }
  1115.  
  1116. // credits to MeRcyLeZZ
  1117. stock ham_cs_get_weapon_ent_owner(ent)
  1118. {
  1119. if (pev_valid(ent) != PDATA_SAFE)
  1120. return 0;
  1121.  
  1122. return get_pdata_cbase(ent, OFFSET_WEAPONOWNER, OFFSET_LINUX_WEAPONS);
  1123. }
  1124.  
  1125. // amxmisc.inc
  1126. stock get_configsdir(name[], len)
  1127. {
  1128. return get_localinfo("amxx_configsdir", name, len);
  1129. }
  1130.  

_________________
Nézzetek fel :)
Kép

Honlap: http://chos-team.ucoz.hu


Hozzászólás jelentése
Vissza a tetejére
   
Hozzászólások megjelenítése:  Rendezés  
Új téma nyitása  Hozzászólás a témához  [ 6 hozzászólás ] 


Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 61 vendég


Nyithatsz új témákat ebben a fórumban.
Válaszolhatsz egy témára ebben a fórumban.
Nem szerkesztheted a hozzászólásaidat ebben a fórumban.
Nem törölheted a hozzászólásaidat ebben a fórumban.
Nem küldhetsz csatolmányokat ebben a fórumban.

Keresés:
Ugrás:  
Powered by phpBB® Forum Software © phpBB Limited
Magyar fordítás © Magyar phpBB Közösség
Portal: Kiss Portal Extension © Michael O'Toole