Veteran Member
Join Date: Jul 2006
Location: France (95)
|
01-13-2012
, 19:40
Re: Taille du hitbox
|
#10
|
Je m'étais amusé à faire un truc dans ce genre aussi, tu peux tester, par contre je n'avais rien fait sur les hitboxes.
Le truc c'est de mettre un model sur une entité et non sur le joueur, et de rendre le joueur transparent :
Les fichiers sont des fichiers par défaut.
PHP Code:
/* Formatright © 2010, ConnorMcLeod
This plugin is free software;
you can redistribute it and/or modify it under the terms of the
GNU General Public License as published by the Free Software Foundation.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this plugin; if not, write to the
Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.
*/
#include <amxmodx>
#include <amxmisc>
#include <engine>
#include <fakemeta>
#include <hamsandwich>
#include <fun>
#include <cstrike>
#define VERSION "0.0.1"
#define PLUGIN "ForkLift"
new const g_szModel[] = "models/forklift.mdl"
new const g_szSound[] = "ambience/truck1.wav" // "ambience/crtnoise.wav" //
new const g_szKlaxon[] = "items/airtank1.wav" // "buttons/button10.wav" //
#define THINK_DELAY 0.01
new const g_szClassName[] = "func_tracktrain"
#define MAX_PLAYERS 32
#define XO_PLAYER 5
#define m_bNotKilled 113
#define Ham_Player_ResetMaxSpeed Ham_Item_PreFrame
new g_iForkLift[MAX_PLAYERS+1]
#define FIRST_PLAYER_ID 1
new g_iMaxPlayers
#define IsPlayer(%1) ( FIRST_PLAYER_ID <= %1 <= g_iMaxPlayers )
enum {
dummy,
drive,
drive2,
jockey,
iddle2,
patha,
pathb
}
public plugin_init()
{
register_plugin(PLUGIN, VERSION, "ConnorMcLeod")
register_event("HLTV", "Event_HLTV_New_Round", "a", "1=0", "2=0")
//RegisterHam(Ham_Spawn, "player", "CBasePlayer_Spawn", 1)
RegisterHam(Ham_Killed, "player", "CBasePlayer_Killed", 1)
register_forward(FM_AddToFullPack, "AddToFullPack", 1)
register_forward(FM_UpdateClientData, "UpdateClientData", 1)
register_forward(FM_EmitSound, "EmitSound")
RegisterHam(Ham_Player_ResetMaxSpeed, "player", "CBasePlayer_ResetMaxSpeed_Post", true)
register_think(g_szClassName, "ForkLift_Think")
register_touch(g_szClassName, "player", "ForkLift_Touch")
RegisterHam(Ham_Touch, "weaponbox", "WeaponTouch")
RegisterHam(Ham_Touch, "armoury_entity", "WeaponTouch")
RegisterHam(Ham_Touch, "weapon_shield", "WeaponTouch")
g_iMaxPlayers = get_maxplayers()
register_concmd("amx_forklift", "ConCmd_ForkLift", ADMIN_RCON)
}
public Event_HLTV_New_Round()
{
for(new id=1; id<=g_iMaxPlayers; id++)
{
ResetPlayer(id)
}
}
public CBasePlayer_Killed( id )
{
ResetPlayer(id)
}
ResetPlayer(id)
{
new iEnt = g_iForkLift[id]
if( iEnt )
{
remove_entity(iEnt)
g_iForkLift[id] = 0
if( is_user_connected(id) )
{
set_view(id, CAMERA_NONE)
set_user_footsteps(id, 0)
set_user_godmode(id, 0)
emit_sound(id, CHAN_AUTO, g_szSound, VOL_NORM, ATTN_NORM, SND_STOP, PITCH_NORM)
set_pdata_int(id, m_bNotKilled, 0, XO_PLAYER)
}
}
}
public WeaponTouch(iEnt, id)
{
if( is_user_alive(id) && g_iForkLift[id] )
{
return HAM_SUPERCEDE
}
return HAM_IGNORED
}
public plugin_precache()
{
precache_model(g_szModel)
precache_model("models/rpgrocket.mdl") // set_view
precache_sound(g_szSound)
precache_sound(g_szKlaxon)
}
stock GetForkLiftOwner( iEnt )
{
for(new id=1; id<=g_iMaxPlayers; id++)
{
if( g_iForkLift[id] == iEnt )
{
return id
}
}
return 0
}
public ForkLift_Think( iEnt )
{
new id = GetForkLiftOwner( iEnt )
if( IsPlayer(id) && is_user_alive(id) )
{
new Float:fVecVelocity[3], iSequence = pev(iEnt, pev_sequence)
pev(id, pev_velocity, fVecVelocity)
if( vector_length(fVecVelocity) > 50.0 )
{
if( iSequence != drive )
{
set_pev(iEnt, pev_sequence, drive)
set_pev(iEnt, pev_frame, 0.0)
set_pev(iEnt, pev_framerate, 1.0)
}
}
else if( iSequence != iddle2 )
{
set_pev(iEnt, pev_sequence, iddle2)
set_pev(iEnt, pev_frame, 0.0)
set_pev(iEnt, pev_framerate, 1.0)
}
}
set_pev(iEnt, pev_nextthink, get_gametime() + THINK_DELAY)
}
public ConCmd_ForkLift(id, lvl, cid)
{
if( cmd_access(id, lvl, cid, 2) )
{
new iPlayers[32], iNum, iPlayer = GetTargets(id, iPlayers, iNum, CMDTARGET_ALLOW_SELF|CMDTARGET_ONLY_ALIVE)
if( iPlayer )
{
GiveForkLift(iPlayer)
}
else if( iNum )
{
for(--iNum; iNum>=0; iNum--)
{
GiveForkLift(iPlayers[iNum])
}
}
}
return PLUGIN_HANDLED
}
/* new szTarget[32]
read_argv(1, szTarget, charsmax(szTarget))
new iPlayer = cmd_target(id, szTarget, CMDTARGET_ALLOW_SELF|CMDTARGET_ONLY_ALIVE)
if( iPlayer )
{
GiveForkLift(iPlayer)
}
else if( szTarget[0] == '@' )
{
new iNum, iPlayers[32]
get_players(iPlayers, iNum)
new CsTeams:iTeam
switch( szTarget[1] )
{
case 't', 'T':iTeam = CS_TEAM_T
case 'c', 'C':iTeam = CS_TEAM_CT
case 'a', 'A':iTeam = CS_TEAM_T|CS_TEAM_CT
default:return PLUGIN_HANDLED
}
for(--iNum; iNum>=0; iNum--)
{
iPlayer = iPlayers[iNum]
if( iTeam & cs_get_user_team(iPlayer) )
{
GiveForkLift( iPlayer )
}
}
}
}
return PLUGIN_HANDLED
}*/
GetTargets(id, iPlayers[32], &iNum, iFlags=CMDTARGET_OBEY_IMMUNITY)
{
new szTarget[32]
read_argv(1, szTarget, charsmax(szTarget))
new iPlayer = cmd_target(id, szTarget, iFlags)
if( iPlayer )
{
return iPlayer
}
else if( szTarget[0] == '@' )
{
new CsTeams:iTeam
switch( szTarget[1] )
{
case 't', 'T': iTeam = CS_TEAM_T
case 'c', 'C': iTeam = CS_TEAM_CT
case 'a', 'A': iTeam = CS_TEAM_UNASSIGNED
case 's', 'S': iTeam = CS_TEAM_SPECTATOR
default:return -1
}
new szFlags[3], n
if( iFlags & CMDTARGET_ONLY_ALIVE )
{
szFlags[n++] = 'a'
szFlags[n++] = 'h'
}
if( iFlags & CMDTARGET_NO_BOTS )
{
szFlags[n++] = 'c'
}
get_players(iPlayers, iNum, szFlags)
for(new i; i<iNum; i++)
{
iPlayer = iPlayers[i]
if( (iFlags & CMDTARGET_OBEY_IMMUNITY && get_user_flags(iPlayer) & ADMIN_IMMUNITY)
|| !(iTeam == CS_TEAM_UNASSIGNED || cs_get_user_team(iPlayer) == iTeam) )
{
iPlayers[i--] = iPlayers[--iNum]
continue
}
}
return 0
}
return -1
}
public ForkLift_Touch(iEnt, id)
{
if( is_user_alive(id) && !g_iForkLift[id] )
{
new iOwner = GetForkLiftOwner(iEnt)
ExecuteHam(Ham_TakeDamage, id, iEnt, iOwner, 200.0, DMG_CRUSH)
}
}
GiveForkLift(id)
{
new iEnt = create_entity("info_target") // func_vehicle ?
set_pev(iEnt, pev_classname, g_szClassName)
set_pev(iEnt, pev_owner, id)
set_pev(iEnt, pev_movetype, MOVETYPE_FOLLOW)
set_pev(iEnt, pev_aiment, id)
engfunc(EngFunc_SetModel, iEnt, g_szModel)
set_pev(iEnt, pev_sequence, iddle2)
set_pev(iEnt, pev_frame, 0.0)
set_pev(iEnt, pev_framerate, 1.0)
engfunc(EngFunc_SetSize, iEnt, {-36.0,-72.0,0.0}, {36.0, 72.0, 96.0})
set_pev(iEnt, pev_solid, SOLID_TRIGGER)
emit_sound(id, CHAN_AUTO, g_szSound, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
set_pev(iEnt, pev_nextthink, get_gametime() + THINK_DELAY)
g_iForkLift[id] = iEnt
if( user_has_weapon(id, CSW_C4) )
{
engclient_cmd(id, "drop", "weapon_c4")
}
strip_user_weapons(id)
set_pdata_int(id, 116, 0)
set_view(id, CAMERA_3RDPERSON)
set_user_godmode(id, 1)
set_user_footsteps(id, 1)
set_user_rendering(id, _, 0, 0, 0, kRenderTransAlpha, 0)
set_pev(id, pev_maxspeed, 320.0)
}
public CBasePlayer_ResetMaxSpeed_Post( id )
{
if( g_iForkLift[id] && is_user_alive(id) && get_user_maxspeed(id) != 1.0 )
{
set_pev(id, pev_maxspeed, 320.0)
}
}
public CBasePlayer_Spawn( id )
{
if( is_user_alive(id) )
{
emit_sound(id, CHAN_AUTO, g_szSound, VOL_NORM, ATTN_NORM, SND_STOP, PITCH_NORM)
if( !user_has_weapon(id, CSW_KNIFE) )
{
give_item(id, "weapon_knife")
}
}
}
public AddToFullPack(es, e, iEnt, id, hostflags, player, pSet)
{
if( player && get_orig_retval() && g_iForkLift[iEnt] )
{
if( iEnt != id )
{
new Float:fVecOrigin[3]
get_es(es, ES_Origin, fVecOrigin)
fVecOrigin[2] -= get_es(es, ES_eFlags) & FL_DUCKING ? 16.0 : 34.0
set_es(es, ES_Origin, fVecOrigin)
set_es(es, ES_RenderMode, kRenderTransColor)
}
set_es(es, ES_RenderAmt, 0)
}
}
public UpdateClientData(id, sendweapons, cd)
{
if( g_iForkLift[id] )
{
new Float:fVecOrigin[3]
get_cd(cd, CD_Origin, fVecOrigin)
fVecOrigin[2] -= get_cd(cd, CD_Flags) & FL_DUCKING ? 16.0 : 34.0
set_cd(cd, CD_Origin, fVecOrigin)
}
}
public EmitSound(id, iChannel, szSample[], Float:flVolume, Float:flAttenuation, iFlags, iPitch)
{
if( IsPlayer(id) && g_iForkLift[id] )
{
if( equal(szSample, "common/wpn_denyselect.wav") )
{
emit_sound(id, iChannel, g_szKlaxon, flVolume, flAttenuation, iFlags, iPitch)
new iEnt = g_iForkLift[id]
if( pev(iEnt, pev_sequence) == jockey )
{
set_pev(iEnt, pev_sequence, drive)
set_pev(iEnt, pev_nextthink, get_gametime() + THINK_DELAY)
}
else
{
set_pev(iEnt, pev_sequence, jockey)
set_pev(iEnt, pev_nextthink, get_gametime() + 10.0)
}
set_pev(iEnt, pev_frame, 0.0)
set_pev(iEnt, pev_framerate, 1.0)
}
return FMRES_SUPERCEDE
}
return FMRES_IGNORED
}
__________________
|
|