hlmod.hu

Magyar Half-Life Mód közösség!
Pontos idő: 2024.06.16. 21:58



Jelenlévő felhasználók

Jelenleg 475 felhasználó van jelen :: 1 regisztrált, 0 rejtett és 474 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  [ 3 hozzászólás ] 
Szerző Üzenet
 Hozzászólás témája: SEMICLIP
HozzászólásElküldve: 2014.08.05. 17:00 
Offline
Senior Tag

Csatlakozott: 2014.06.23. 10:48
Hozzászólások: 221
Megköszönt másnak: 1 alkalommal
Megköszönték neki: 14 alkalommal
Hali! Valaki megtudná nekem adni a Semiclip v1.8.2-őt? :)
Köszönöm! :)


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: SEMICLIP
HozzászólásElküldve: 2014.08.05. 17:09 
Tessék:
SMA Forráskód: [ Mindet kijelol ]
  1. *****************************************
  2. ********* [Team Semiclip 1.8.2] *********
  3. *****************************************


SMX Forráskód: [ Mindet kijelol ]
  1. /*================================================================================
  2.  
  3. *****************************************
  4. ********* [Team Semiclip 1.8.2] *********
  5. *****************************************
  6.  
  7. ----------------------
  8. -*- Licensing Info -*-
  9. ----------------------
  10.  
  11. Team Semiclip
  12. by schmurgel1983(@msn.com)
  13. Copyright (C) 2010 - 2011 Stefan "schmurgel1983" Focke
  14.  
  15. This program is free software: you can redistribute it and/or modify it
  16. under the terms of the GNU General Public License as published by the
  17. Free Software Foundation, either version 3 of the License, or (at your
  18. option) any later version.
  19.  
  20. This program is distributed in the hope that it will be useful, but
  21. WITHOUT ANY WARRANTY; without even the implied warranty of
  22. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
  23. Public License for more details.
  24.  
  25. You should have received a copy of the GNU General Public License along
  26. with this program. If not, see <http://www.gnu.org/licenses/>.
  27.  
  28. In addition, as a special exception, the author gives permission to
  29. link the code of this program with the Half-Life Game Engine ("HL
  30. Engine") and Modified Game Libraries ("MODs") developed by Valve,
  31. L.L.C ("Valve"). You must obey the GNU General Public License in all
  32. respects for all of the code used other than the HL Engine and MODs
  33. from Valve. If you modify this file, you may extend this exception
  34. to your version of the file, but you are not obligated to do so. If
  35. you do not wish to do so, delete this exception statement from your
  36. version.
  37.  
  38. No warranties of any kind. Use at your own risk.
  39.  
  40. -------------------
  41. -*- Description -*-
  42. -------------------
  43.  
  44. Added Team Semiclip, only for 1 team or both with enemie trespass or not.
  45. If team switching in mid-round so updating the team instandly, with unstuck feature.
  46.  
  47. --------------------
  48. -*- Requirements -*-
  49. --------------------
  50.  
  51. * Mods: Counter-Strike 1.6, Condition-Zero or Day of Defeat 1.3
  52. * AMXX: Version 1.8.0 or later
  53. * Module: engine, fakemeta, hamsandwich
  54.  
  55. ----------------
  56. -*- Commands -*-
  57. ----------------
  58.  
  59. -----
  60.  
  61. ---------------------
  62. -*- Configuration -*-
  63. ---------------------
  64.  
  65. // General
  66. // -------
  67. semiclip 1 // Enabled 1, Disabled 0
  68. semiclip_blockteam 0 // Both teams have semiclip - 0, Terror/Allies don't have semiclip - 1, CT/Axis don't have semiclip - 2
  69. semiclip_enemies 0 // trespass enemies [0-disabled / 1-enabled]
  70. semiclip_unstuck 1 // Unstuck for blockteam [0-disabled / 1-enabled]
  71. semiclip_unstuckdelay 0.0 // Unstuck delay in seconds (0.1 - 3.0) [0-instantly]
  72. semiclip_button 0 // Semiclip only if holding +use button [0-disabled / 1-enabled]
  73.  
  74. // Render
  75. // ------
  76. semiclip_rendermode 2 // Render mode (look amxconst.inc -> Render for set_user_rendering) [0-5] [0-disabled]
  77. semiclip_renderradius 250 // Render radius [0-4095]
  78. semiclip_renderamt 128 // Render amount [0-255]
  79. semiclip_renderfade 0 // Render fade [0-disabled / 1-enabled] (do not use when u have CSO models)
  80. semiclip_renderfademin 50 // Minimum render fade amount [0-255] (stay very close or inside a player)
  81. semiclip_renderfadespec 0 // Render fade for current spectating Player [0-disabled / 1-enabled]
  82.  
  83. ---------------
  84. -*- Credits -*-
  85. ---------------
  86.  
  87. * SchlumPF*: Team Semiclip (main core)
  88. * joaquimandrade: Module: Semiclip (some cvars)
  89. * ConnorMcLeod: show playersname (bugfix)
  90. * MeRcyLeZZ & VEN: Unstuck (function)
  91. * georgik57: for many suggestions <!-- s:) --><img src=\"{SMILIES_PATH}/icon_e_smile.gif\" alt=\":)\" title=\"mosoly\" /><!-- s:) -->
  92.  
  93. -----------------
  94. -*- Changelog -*-
  95. -----------------
  96.  
  97. * v1.0:
  98. - initial release
  99.  
  100. * v1.1:
  101. - Fixed: invisible player bones... like walls
  102.  
  103. * v1.2:
  104. - faster! lower cpu!
  105.  
  106. * v1.3:
  107. - added: Day of Defeat support
  108. - fixed: show playersname
  109.  
  110. * v1.4:
  111. - Added: 2 new cvars for render mode & amt
  112. - made plugin 700% faster!
  113.  
  114. * v1.5:
  115. - Added: automatic unstuck function for blockteam,
  116. unstuck delay
  117.  
  118. * v1.5.1:
  119. - Fixed: DoD 1.3 spawn classnames
  120.  
  121. * v1.6:
  122. - Added: team_semiclip.cfg, no one block befor
  123. zp_round_started, biohazard 2.0 support,
  124. clip fade only in distance range
  125.  
  126. * v1.6.1:
  127. - Added: spectator support
  128. - Fixed: trespass enemies dosen't work correctly
  129.  
  130. * v1.6.2:
  131. - Fixed: small semiclip_blockteam "0" bug after
  132. first zombie is chosen
  133.  
  134. * v1.6.3:
  135. - Rewrite: Features - No one block before first
  136. zombie is chosen
  137.  
  138. * v1.7.0:
  139. - Added: semiclip fade
  140. - Fixed: v1.6.3 broke bot support
  141.  
  142. * v1.8.0:
  143. - Added: new cvars for fade minimum, radius
  144. current spectating player fade and +use
  145. button to get semiclip only when holding
  146.  
  147. * v1.8.1:
  148. - Fixed: plugin is now working as intended,
  149. for all scripted of amxmodx plugin's like
  150. kreedz bhop maps etc
  151.  
  152. =================================================================================*/
  153.  
  154. #include <amxmodx>
  155. #include <engine>
  156. #include <fakemeta>
  157.  
  158. #if AMXX_VERSION_NUM < 180
  159. #assert AMX Mod X v1.8.0 or later library required!
  160. #endif
  161.  
  162. #include <hamsandwich>
  163.  
  164. /*================================================================================
  165.  [Constants, Offsets, Macros]
  166. =================================================================================*/
  167.  
  168. new const PLUGIN_VERSION[] = "1.8.1"
  169.  
  170. const MAX_RENDER_AMOUNT = 255 // do not change this
  171. const SEMI_RENDER_AMOUNT = 200 // do not change this
  172. const Float:SPEC_INTERVAL = 0.2 // do not change this
  173.  
  174. enum
  175. {
  176. MOD_CSTRIKE = 0,
  177. MOD_DOD
  178. }
  179. new g_iMod
  180.  
  181. const PEV_SPEC_TARGET = pev_iuser2
  182. const TASK_SPECTATOR = 3128
  183. #define ID_SPECTATOR (taskid - TASK_SPECTATOR)
  184.  
  185. /*================================================================================
  186.  [Global Variables]
  187. =================================================================================*/
  188.  
  189. new cvar_iSemiClip, cvar_iSemiClipEnemies, cvar_iSemiClipBlockTeams,
  190. cvar_iSemiClipUnstuck, cvar_flSemiClipUnstuckDelay,
  191. cvar_iSemiClipRenderMode, cvar_iSemiClipRenderRadius,
  192. cvar_iSemiClipRenderAmt, cvar_iSemiClipRenderFade,
  193. cvar_iSemiClipRenderFadeMin, cvar_iSemiClipRenderFadeSpec,
  194. cvar_iSemiClipButton
  195.  
  196. new cvar_iBotQuota, cvar_iZombiePlague, cvar_iBiohazard,
  197. bool:g_bHamCzBots, g_iMaxPlayers, bool:g_bPreparation
  198.  
  199. new g_iSpawnCount, Float:g_flSpawns[64][3], g_iSpawnCount2, Float:g_flSpawns2[64][3]
  200.  
  201. new g_iCachedSemiClip, g_iCachedEnemies, g_iCachedBlockTeams,
  202. g_iCachedUnstuck, Float:g_flCachedUnstuckDelay,
  203. g_iCachedRenderMode, g_iCachedRenderRadius,
  204. g_iCachedRenderAmt, g_iCachedRenderFade,
  205. g_iCachedRenderFadeMin, g_iCachedRenderFadeSpec,
  206. g_iCachedClipButton
  207.  
  208. new bool:g_bIsAlive[33]
  209. new bool:g_bIsConnected[33]
  210. new bool:g_bIsBot[33]
  211. new bool:g_bSolid[33]
  212. new bool:g_bHaveSemiClip[33]
  213. new g_iTeam[33]
  214. new g_iSpectating[33]
  215. new g_iSpectatingTeam[33]
  216. new g_bButton[33]
  217. new g_iRange[33][33]
  218.  
  219. #define is_user_valid(%1) (1 <= %1 <= g_iMaxPlayers)
  220.  
  221. /*================================================================================
  222.  [Init and Cfg]
  223. =================================================================================*/
  224.  
  225. public plugin_init()
  226. {
  227. register_plugin("Team Semiclip", PLUGIN_VERSION, "schmurgel1983")
  228.  
  229. RegisterHam(Ham_Spawn, "player", "fwd_PlayerSpawn_Post", 1)
  230. RegisterHam(Ham_Killed, "player", "fwd_PlayerKilled")
  231. RegisterHam(Ham_Player_PreThink, "player", "fwd_Player_PreThink_Post", 1)
  232. RegisterHam(Ham_Player_PostThink, "player", "fwd_Player_PostThink")
  233.  
  234. register_forward(FM_AddToFullPack, "fwd_AddToFullPack_Post", 1)
  235.  
  236. new mod[8]
  237. get_modname(mod, charsmax(mod))
  238. if (equal(mod, "cstrike") || equal(mod, "czero"))
  239. {
  240. g_iMod = MOD_CSTRIKE
  241. register_message(get_user_msgid("TeamInfo"), "message_TeamInfo")
  242. }
  243. if (equal(mod, "dod"))
  244. {
  245. g_iMod = MOD_DOD
  246. register_message(get_user_msgid("PTeam"), "message_PTeam")
  247. }
  248.  
  249. cvar_iSemiClip = register_cvar("semiclip", "1")
  250. cvar_iSemiClipBlockTeams = register_cvar("semiclip_blockteam", "0")
  251. cvar_iSemiClipEnemies = register_cvar("semiclip_enemies", "0")
  252. cvar_iSemiClipUnstuck = register_cvar("semiclip_unstuck", "1")
  253. cvar_flSemiClipUnstuckDelay = register_cvar("semiclip_unstuckdelay", "0.0")
  254. cvar_iSemiClipButton = register_cvar("semiclip_button", "0")
  255.  
  256. cvar_iSemiClipRenderMode = register_cvar("semiclip_rendermode", "2")
  257. cvar_iSemiClipRenderRadius = register_cvar("semiclip_renderradius", "250")
  258. cvar_iSemiClipRenderAmt = register_cvar("semiclip_renderamt", "128")
  259. cvar_iSemiClipRenderFade = register_cvar("semiclip_renderfade", "0")
  260. cvar_iSemiClipRenderFadeMin = register_cvar("semiclip_renderfademin", "50")
  261. cvar_iSemiClipRenderFadeSpec = register_cvar("semiclip_renderfadespec", "0")
  262.  
  263. register_cvar("Team_Semiclip_version", PLUGIN_VERSION, FCVAR_SERVER|FCVAR_SPONLY)
  264. set_cvar_string("Team_Semiclip_version", PLUGIN_VERSION)
  265.  
  266. cvar_iBotQuota = get_cvar_pointer("bot_quota")
  267. cvar_iZombiePlague = get_cvar_pointer("zp_on")
  268. cvar_iBiohazard = get_cvar_pointer("bh_enabled")
  269.  
  270. if (cvar_iZombiePlague || cvar_iBiohazard)
  271. if (get_pcvar_num(cvar_iZombiePlague) == 1 || get_pcvar_num(cvar_iBiohazard) == 1)
  272. register_event("HLTV", "event_round_start", "a", "1=0", "2=0")
  273.  
  274. g_iMaxPlayers = get_maxplayers()
  275. }
  276.  
  277. public plugin_cfg()
  278. {
  279. new configsdir[32]
  280. get_configsdir(configsdir, charsmax(configsdir))
  281. server_cmd("exec %s/team_semiclip.cfg", configsdir)
  282.  
  283. load_spawns()
  284. set_task(0.5, "cache_cvars")
  285. set_task(12.0, "cache_cvars", _, _, _, "b")
  286. }
  287.  
  288. public client_connect(id)
  289. {
  290. g_bIsConnected[id] = false
  291. set_cvars(id)
  292. }
  293.  
  294. public client_putinserver(id)
  295. {
  296. g_bIsConnected[id] = true
  297. set_cvars(id)
  298.  
  299. if(is_user_bot(id))
  300. {
  301. g_bIsBot[id] = true
  302.  
  303. if(!g_bHamCzBots && cvar_iBotQuota)
  304. set_task(0.1, "register_ham_czbots", id)
  305. }
  306. else
  307. {
  308. set_task(SPEC_INTERVAL, "spec_check", id+TASK_SPECTATOR, _, _, "b")
  309. }
  310. }
  311.  
  312. public client_disconnect(id)
  313. {
  314. g_bIsConnected[id] = false
  315. set_cvars(id)
  316. remove_task(id+TASK_SPECTATOR)
  317. }
  318.  
  319. /*================================================================================
  320.  [Main Events]
  321. =================================================================================*/
  322.  
  323. public event_round_start()
  324. {
  325. g_bPreparation = true
  326. }
  327.  
  328. /*================================================================================
  329.  [Supporting Forwards]
  330. =================================================================================*/
  331.  
  332. forward zp_round_started(gamemode, id)
  333. public zp_round_started(gamemode, id)
  334. {
  335. g_bPreparation = false
  336. }
  337.  
  338. forward event_gamestart()
  339. public event_gamestart()
  340. {
  341. g_bPreparation = false
  342. }
  343.  
  344. /*================================================================================
  345.  [Main Forwards]
  346. =================================================================================*/
  347.  
  348. public fwd_PlayerSpawn_Post(id)
  349. {
  350. if (!is_user_alive(id) || !g_iTeam[id])
  351. return
  352.  
  353. g_bIsAlive[id] = true
  354. remove_task(id+TASK_SPECTATOR)
  355. }
  356.  
  357. public fwd_PlayerKilled(id)
  358. {
  359. g_bIsAlive[id] = false
  360. g_bHaveSemiClip[id] = false
  361. g_iTeam[id] = 3
  362.  
  363. if (!g_bIsBot[id])
  364. set_task(SPEC_INTERVAL, "spec_check", id+TASK_SPECTATOR, _, _, "b")
  365. }
  366.  
  367. public fwd_Player_PreThink_Post(id)
  368. {
  369. if (!g_iCachedSemiClip || !g_bIsAlive[id]) return FMRES_IGNORED
  370.  
  371. if (g_iCachedClipButton)
  372. g_bButton[id] = (pev(id, pev_button) & IN_USE) ? true : false;
  373.  
  374. static i
  375. for (i = 1; i <= g_iMaxPlayers; i++)
  376. {
  377. if (!g_bIsConnected[i] || !g_bIsAlive[i]) continue
  378.  
  379. if (!g_bHaveSemiClip[i])
  380. g_bSolid[i] = true
  381. else
  382. g_bSolid[i] = false
  383. }
  384.  
  385. if (g_bSolid[id])
  386. for (i = 1; i <= g_iMaxPlayers; i++)
  387. {
  388. g_iRange[id][i] = MAX_RENDER_AMOUNT
  389.  
  390. if (!g_bIsConnected[i] || !g_bIsAlive[i] || !g_bSolid[i]) continue
  391. if (g_iCachedClipButton && !g_bButton[id]) continue
  392. if ((g_iRange[id][i] = calc_fade(id, i, g_iCachedRenderFade)) == MAX_RENDER_AMOUNT) continue
  393. if (i == id) continue
  394.  
  395. if (g_bPreparation)
  396. {
  397. set_pev(i, pev_solid, SOLID_NOT)
  398. g_bHaveSemiClip[i] = true
  399. continue
  400. }
  401.  
  402. if (g_iCachedBlockTeams == g_iTeam[i] && g_iCachedEnemies && g_iTeam[i] == g_iTeam[id]) continue
  403. if (g_iCachedBlockTeams == g_iTeam[i] && !g_iCachedEnemies) continue
  404. if (!g_iCachedEnemies && g_iTeam[i] != g_iTeam[id]) continue
  405.  
  406. set_pev(i, pev_solid, SOLID_NOT)
  407. g_bHaveSemiClip[i] = true
  408. }
  409.  
  410. return FMRES_IGNORED
  411. }
  412.  
  413. public fwd_Player_PostThink(id)
  414. {
  415. if (!g_bIsAlive[id]) return FMRES_IGNORED
  416.  
  417. static i
  418. for (i = 1; i <= g_iMaxPlayers; i++)
  419. {
  420. if (!g_bIsConnected[i] || !g_bIsAlive[i]) continue
  421.  
  422. if (g_bHaveSemiClip[i])
  423. {
  424. set_pev(i, pev_solid, SOLID_SLIDEBOX)
  425. g_bHaveSemiClip[i] = false
  426. }
  427. }
  428.  
  429. return FMRES_IGNORED
  430. }
  431.  
  432. // (struct entity_state_s *state, int e, edict_t *ent, edict_t *host, int hostflags, int player, unsigned char *pSet)
  433. public fwd_AddToFullPack_Post(es_handle, e, ent, host, flags, player, pSet)
  434. {
  435. if (!player) return FMRES_IGNORED
  436. if (g_iTeam[host] == 3)
  437. {
  438. if (!g_iCachedRenderMode || g_bIsBot[host] || !g_bIsAlive[g_iSpectating[host]] || !g_bIsAlive[ent]) return FMRES_IGNORED
  439. if (g_iCachedClipButton && !g_bButton[g_iSpectating[host]]) return FMRES_IGNORED
  440. if (g_iRange[g_iSpectating[host]][ent] == MAX_RENDER_AMOUNT) return FMRES_IGNORED
  441. if (!g_iCachedRenderFadeSpec && g_iSpectating[host] == ent) return FMRES_IGNORED
  442.  
  443. if (g_bPreparation)
  444. {
  445. set_es(es_handle, ES_RenderMode, g_iCachedRenderMode)
  446. set_es(es_handle, ES_RenderAmt, g_iRange[g_iSpectating[host]][ent])
  447.  
  448. return FMRES_IGNORED
  449. }
  450.  
  451. if (g_iCachedBlockTeams == g_iTeam[ent] && g_iCachedEnemies && g_iTeam[ent] == g_iSpectatingTeam[host]) return FMRES_IGNORED
  452. if (g_iCachedBlockTeams == g_iTeam[ent] && !g_iCachedEnemies) return FMRES_IGNORED
  453. if (!g_iCachedEnemies && g_iTeam[ent] != g_iSpectatingTeam[host]) return FMRES_IGNORED
  454.  
  455. set_es(es_handle, ES_RenderMode, g_iCachedRenderMode)
  456. set_es(es_handle, ES_RenderAmt, g_iRange[g_iSpectating[host]][ent])
  457.  
  458. return FMRES_IGNORED
  459. }
  460.  
  461. if (!g_bIsAlive[host] || !g_bIsAlive[ent] || !g_bSolid[host] || !g_bSolid[ent]) return FMRES_IGNORED
  462. if (g_iCachedClipButton && !g_bButton[host]) return FMRES_IGNORED
  463. if (g_iRange[host][ent] == MAX_RENDER_AMOUNT) return FMRES_IGNORED
  464.  
  465. if (g_bPreparation)
  466. {
  467. set_es(es_handle, ES_Solid, SOLID_NOT)
  468.  
  469. if (!g_iCachedRenderMode) return FMRES_IGNORED
  470.  
  471. set_es(es_handle, ES_RenderMode, g_iCachedRenderMode)
  472. set_es(es_handle, ES_RenderAmt, g_iRange[host][ent])
  473.  
  474. return FMRES_IGNORED
  475. }
  476.  
  477. if (g_iCachedBlockTeams == g_iTeam[ent] && g_iCachedEnemies && g_iTeam[ent] == g_iTeam[host]) return FMRES_IGNORED
  478. if (g_iCachedBlockTeams == g_iTeam[ent] && !g_iCachedEnemies) return FMRES_IGNORED
  479. if (!g_iCachedEnemies && g_iTeam[ent] != g_iTeam[host]) return FMRES_IGNORED
  480.  
  481. set_es(es_handle, ES_Solid, SOLID_NOT)
  482.  
  483. if (!g_iCachedRenderMode) return FMRES_IGNORED
  484.  
  485. set_es(es_handle, ES_RenderMode, g_iCachedRenderMode)
  486. set_es(es_handle, ES_RenderAmt, g_iRange[host][ent])
  487.  
  488. return FMRES_IGNORED
  489. }
  490.  
  491. /*================================================================================
  492.  [Other Functions and Tasks]
  493. =================================================================================*/
  494.  
  495. // credits to MeRcyLeZZ
  496. public register_ham_czbots(id)
  497. {
  498. if (g_bHamCzBots || !is_user_connected(id) || !get_pcvar_num(cvar_iBotQuota)) return
  499.  
  500. RegisterHamFromEntity(Ham_Spawn, id, "fwd_PlayerSpawn_Post", 1)
  501. RegisterHamFromEntity(Ham_Killed, id, "fwd_PlayerKilled")
  502. RegisterHamFromEntity(Ham_Player_PreThink, id, "fwd_Player_PreThink_Post", 1)
  503. RegisterHamFromEntity(Ham_Player_PostThink, id, "fwd_Player_PostThink")
  504.  
  505. g_bHamCzBots = true
  506.  
  507. if (is_user_alive(id)) fwd_PlayerSpawn_Post(id)
  508. }
  509.  
  510. public cache_cvars()
  511. {
  512. g_iCachedSemiClip = clamp(get_pcvar_num(cvar_iSemiClip), 0, 1)
  513. g_iCachedEnemies = clamp(get_pcvar_num(cvar_iSemiClipEnemies), 0, 1)
  514. g_iCachedBlockTeams = clamp(get_pcvar_num(cvar_iSemiClipBlockTeams), 0, 2)
  515. g_iCachedUnstuck = clamp(get_pcvar_num(cvar_iSemiClipUnstuck), 0, 1)
  516. g_flCachedUnstuckDelay = floatclamp(get_pcvar_float(cvar_flSemiClipUnstuckDelay), 0.0, 3.0)
  517. g_iCachedClipButton = clamp(get_pcvar_num(cvar_iSemiClipButton), 0, 1)
  518.  
  519. g_iCachedRenderMode = clamp(get_pcvar_num(cvar_iSemiClipRenderMode), 0, 5)
  520. g_iCachedRenderAmt = clamp(get_pcvar_num(cvar_iSemiClipRenderAmt), 0, 255)
  521. g_iCachedRenderFade = clamp(get_pcvar_num(cvar_iSemiClipRenderFade), 0, 1)
  522. g_iCachedRenderFadeMin = clamp(get_pcvar_num(cvar_iSemiClipRenderFadeMin), 0, SEMI_RENDER_AMOUNT)
  523. g_iCachedRenderFadeSpec = clamp(get_pcvar_num(cvar_iSemiClipRenderFadeSpec), 0, 1)
  524. g_iCachedRenderRadius = clamp(get_pcvar_num(cvar_iSemiClipRenderRadius), SEMI_RENDER_AMOUNT - g_iCachedRenderFadeMin, 4095)
  525. }
  526.  
  527. // credits to MeRcyLeZZ
  528. public do_random_spawn(id)
  529. {
  530. if (!g_bIsConnected[id] || !g_bIsAlive[id]) return
  531.  
  532. static hull, sp_index, i
  533. hull = (pev(id, pev_flags) & FL_DUCKING) ? HULL_HEAD : HULL_HUMAN
  534.  
  535. switch (g_iTeam[id])
  536. {
  537. case 1 : // TERRORIST, ALLIES
  538. {
  539. if (!g_iSpawnCount2) return
  540.  
  541. sp_index = random_num(0, g_iSpawnCount2 - 1)
  542. for (i = sp_index + 1; /*no condition*/; i++)
  543. {
  544. if (i >= g_iSpawnCount2) i = 0
  545.  
  546. if (is_hull_vacant(g_flSpawns2[i], hull))
  547. {
  548. engfunc(EngFunc_SetOrigin, id, g_flSpawns2[i])
  549. break
  550. }
  551.  
  552. if (i == sp_index) break
  553. }
  554. }
  555. case 2 : // CT, AXIS
  556. {
  557. if (!g_iSpawnCount) return
  558.  
  559. sp_index = random_num(0, g_iSpawnCount - 1)
  560. for (i = sp_index + 1; /*no condition*/; i++)
  561. {
  562. if (i >= g_iSpawnCount) i = 0
  563.  
  564. if (is_hull_vacant(g_flSpawns[i], hull))
  565. {
  566. engfunc(EngFunc_SetOrigin, id, g_flSpawns[i])
  567. break
  568. }
  569.  
  570. if (i == sp_index) break
  571. }
  572. }
  573. }
  574. }
  575.  
  576. public spec_check(taskid)
  577. {
  578. if (!g_iCachedRenderMode || g_bIsAlive[ID_SPECTATOR]) return
  579.  
  580. static spec
  581. spec = pev(ID_SPECTATOR, PEV_SPEC_TARGET)
  582.  
  583. if (g_bIsAlive[spec])
  584. {
  585. g_iSpectating[ID_SPECTATOR] = spec
  586. g_iSpectatingTeam[ID_SPECTATOR] = g_iTeam[spec]
  587. }
  588. }
  589.  
  590. calc_fade(host, ent, mode)
  591. {
  592. if (mode)
  593. {
  594. if (g_iCachedRenderFadeMin > g_iCachedRenderRadius)
  595. return MAX_RENDER_AMOUNT;
  596.  
  597. new range = floatround(entity_range(host, ent))
  598.  
  599. if (range >= g_iCachedRenderRadius)
  600. return MAX_RENDER_AMOUNT;
  601.  
  602. new amount
  603. amount = SEMI_RENDER_AMOUNT - g_iCachedRenderFadeMin
  604. amount = g_iCachedRenderRadius / amount
  605. amount = range / amount + g_iCachedRenderFadeMin
  606.  
  607. return amount;
  608. }
  609. else
  610. {
  611. new range = floatround(entity_range(host, ent))
  612.  
  613. if (range < g_iCachedRenderRadius)
  614. return g_iCachedRenderAmt;
  615. }
  616.  
  617. return MAX_RENDER_AMOUNT;
  618. }
  619.  
  620. set_cvars(id)
  621. {
  622. g_iTeam[id] = 0
  623. g_bIsAlive[id] = false
  624. g_bIsBot[id] = false
  625. g_bSolid[id] = false
  626. g_bHaveSemiClip[id] = false
  627. }
  628.  
  629. /*================================================================================
  630.  [Message Hooks]
  631. =================================================================================*/
  632.  
  633. /*
  634. TeamInfo:
  635. read_data(1) byte EventEntity
  636. read_data(2) string TeamName
  637.  
  638. type | name | calls | time / min / max
  639. n | get_msg_arg_int | 502 | 0.000500 / 0.000001 / 0.000001
  640. n | get_msg_arg_string | 502 | 0.000519 / 0.000001 / 0.000001
  641. p | message_TeamInfo | 998 | 0.002234 / 0.000001 / 0.000004
  642.  
  643. fast enough!
  644. */
  645. public message_TeamInfo(msg_id, msg_dest)
  646. {
  647. if (msg_dest != MSG_ALL && msg_dest != MSG_BROADCAST) return
  648.  
  649. static id, team[2]
  650. id = get_msg_arg_int(1)
  651. get_msg_arg_string(2, team, charsmax(team))
  652. switch (team[0])
  653. {
  654. case 'T' : // TERRORIST
  655. {
  656. g_iTeam[id] = 1;
  657. }
  658. case 'C' : // CT
  659. {
  660. g_iTeam[id] = 2;
  661. }
  662. case 'S' : // SPECTATOR
  663. {
  664. g_iTeam[id] = 3;
  665. }
  666. default : g_iTeam[id] = 0;
  667. }
  668.  
  669. if (g_bIsAlive[id] && g_iCachedUnstuck && g_iCachedBlockTeams == g_iTeam[id])
  670. {
  671. if (!is_player_stuck(id)) return
  672.  
  673. if (g_flCachedUnstuckDelay > 0.0)
  674. set_task(g_flCachedUnstuckDelay, "do_random_spawn", id)
  675. else
  676. do_random_spawn(id)
  677. }
  678. }
  679.  
  680. /*
  681. PTeam:
  682. read_data(1) byte EventEntity
  683. read_data(2) byte TeamIndex
  684. */
  685. public message_PTeam(msg_id, msg_dest)
  686. {
  687. if (msg_dest != MSG_ALL && msg_dest != MSG_BROADCAST) return
  688.  
  689. static id
  690. id = get_msg_arg_int(1)
  691.  
  692. // 0 - UNASSIGNED
  693. // 1 - ALLIES
  694. // 2 - AXIS
  695. // 3 - SPECTATOR
  696. g_iTeam[id] = get_msg_arg_int(2)
  697.  
  698. if (g_bIsAlive[id] && g_iCachedUnstuck && g_iCachedBlockTeams == g_iTeam[id])
  699. {
  700. if (!is_player_stuck(id)) return
  701.  
  702. if (g_flCachedUnstuckDelay > 0.0)
  703. set_task(g_flCachedUnstuckDelay, "do_random_spawn", id)
  704. else
  705. do_random_spawn(id)
  706. }
  707. }
  708.  
  709. /*================================================================================
  710.  [Stocks]
  711. =================================================================================*/
  712.  
  713. // credits to VEN
  714. stock is_player_stuck(id)
  715. {
  716. static Float:originF[3]
  717. pev(id, pev_origin, originF)
  718.  
  719. engfunc(EngFunc_TraceHull, originF, originF, 0, (pev(id, pev_flags) & FL_DUCKING) ? HULL_HEAD : HULL_HUMAN, id, 0)
  720.  
  721. if (get_tr2(0, TR_StartSolid) || get_tr2(0, TR_AllSolid) || !get_tr2(0, TR_InOpen))
  722. return true
  723.  
  724. return false
  725. }
  726.  
  727. // credits to VEN
  728. stock is_hull_vacant(Float:origin[3], hull)
  729. {
  730. engfunc(EngFunc_TraceHull, origin, origin, 0, hull, 0, 0)
  731.  
  732. if (!get_tr2(0, TR_StartSolid) && !get_tr2(0, TR_AllSolid) && get_tr2(0, TR_InOpen))
  733. return true
  734.  
  735. return false
  736. }
  737.  
  738. // credits to MeRcyLeZZ
  739. stock collect_spawns_ent(const classname[])
  740. {
  741. new ent = -1
  742. while ((ent = engfunc(EngFunc_FindEntityByString, ent, "classname", classname)) != 0)
  743. {
  744. new Float:originF[3]
  745. pev(ent, pev_origin, originF)
  746. g_flSpawns[g_iSpawnCount][0] = originF[0]
  747. g_flSpawns[g_iSpawnCount][1] = originF[1]
  748. g_flSpawns[g_iSpawnCount][2] = originF[2]
  749.  
  750. g_iSpawnCount++
  751. if (g_iSpawnCount >= sizeof g_flSpawns) break
  752. }
  753. }
  754.  
  755. // credits to MeRcyLeZZ
  756. stock collect_spawns_ent2(const classname[])
  757. {
  758. new ent = -1
  759. while ((ent = engfunc(EngFunc_FindEntityByString, ent, "classname", classname)) != 0)
  760. {
  761. new Float:originF[3]
  762. pev(ent, pev_origin, originF)
  763. g_flSpawns2[g_iSpawnCount2][0] = originF[0]
  764. g_flSpawns2[g_iSpawnCount2][1] = originF[1]
  765. g_flSpawns2[g_iSpawnCount2][2] = originF[2]
  766.  
  767. g_iSpawnCount2++
  768. if (g_iSpawnCount2 >= sizeof g_flSpawns2) break
  769. }
  770. }
  771.  
  772. stock load_spawns()
  773. {
  774. if (g_iMod == MOD_CSTRIKE)
  775. {
  776. collect_spawns_ent("info_player_start")
  777. collect_spawns_ent2("info_player_deathmatch")
  778. }
  779. else if (g_iMod == MOD_DOD)
  780. {
  781. collect_spawns_ent("info_player_axis")
  782. collect_spawns_ent2("info_player_allies")
  783. }
  784. else
  785. {
  786. set_pcvar_num(cvar_iSemiClipUnstuck, 0)
  787. }
  788. }
  789.  
  790. // amxmisc.inc
  791. stock get_configsdir(name[], len)
  792. {
  793. return get_localinfo("amxx_configsdir", name, len);
  794. }
  795.  


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: SEMICLIP
HozzászólásElküldve: 2014.08.05. 17:37 
Offline
Senior Tag

Csatlakozott: 2014.06.23. 10:48
Hozzászólások: 221
Megköszönt másnak: 1 alkalommal
Megköszönték neki: 14 alkalommal
Bocsi de ez nem az! :(
Én erre gondolok!
Semiclip, v1.8.2-dev, Oct 6 2013, by AMX Mod X Dev Team, see


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  [ 3 hozzászólás ] 


Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 116 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