CS 1.6 Custom 3rd Person View - AlliedModders
Nie jestem autorem tej funkcji. Tylko tutaj wrzucam.
Wersja <engine>
Create_PlayerCamera( id ) { new entid; while( (entid = find_ent_by_class(entid, "PlayerCamera")) != 0) if( entity_get_edict( entid, EV_ENT_owner ) == id ) { attach_view( id, entid ); return; } entid = create_entity("info_target"); if(entid) { entity_set_string(entid,EV_SZ_classname,"PlayerCamera"); entity_set_model(entid,"models/w_usp.mdl"); entity_set_int( entid, EV_INT_solid, SOLID_TRIGGER); entity_set_int( entid, EV_INT_movetype, MOVETYPE_FLY ); entity_set_edict( entid, EV_ENT_owner, id ); entity_set_int( entid, EV_INT_rendermode, kRenderTransTexture); entity_set_float( entid, EV_FL_renderamt, 0.0); attach_view( id, entid ); entity_set_float( entid, EV_FL_nextthink, get_gametime() ); } } public Think_PlayerCamera( entid ) { new id = entity_get_edict( entid, EV_ENT_owner ); //Kill our entity if we hit USE key new buttons = entity_get_int( id, EV_INT_button ); if(buttons & IN_USE) { attach_view( id, id ); remove_entity(entid); return; } new Float:origin[3], Float:angle[3], Float:vBack[3]; entity_get_vector( id, EV_VEC_origin, origin ); entity_get_vector( id, EV_VEC_v_angle, angle ); angle_vector( angle, ANGLEVECTOR_FORWARD, vBack ); origin[2] += 20.0; origin[0] += (-vBack[0] * 150.0); origin[1] += (-vBack[1] * 150.0); origin[2] += (-vBack[2] * 150.0); entity_set_origin( entid, origin ); entity_set_vector( entid, EV_VEC_angles, angle ); entity_set_float( entid, EV_FL_nextthink, get_gametime() ); }
Wersja <fakemeta> + komenda
new const g_sCamclass[] = "PlayerCamera"; public plugin_init() { register_clcmd( "say /cam", "cmdCam" ); register_forward( FM_Think, "Think_PlayerCamera" ); } public cmdCam( id ) Create_PlayerCamera( id ); Create_PlayerCamera( id ) { new iEnt; static const sClassname[] = "classname"; while( ( iEnt = engfunc( EngFunc_FindEntityByString, iEnt, sClassname, g_sCamclass ) ) != 0 ) { if( pev( iEnt, pev_owner) == id ) { engfunc( EngFunc_SetView, id, iEnt ); return; } } static const sInfo_target[] = "info_target"; iEnt = engfunc( EngFunc_CreateNamedEntity, engfunc( EngFunc_AllocString, sInfo_target ) ) if( !iEnt ) return; static const sCam_model[] = "models/w_usp.mdl"; set_pev( iEnt, pev_classname, g_sCamclass ); engfunc( EngFunc_SetModel, iEnt, sCam_model ); set_pev( iEnt, pev_solid, SOLID_TRIGGER ); set_pev( iEnt, pev_movetype, MOVETYPE_FLY ); set_pev( iEnt, pev_owner, id ); set_pev( iEnt, pev_rendermode, kRenderTransTexture ); set_pev( iEnt, pev_renderamt, 0.0 ); engfunc( EngFunc_SetView, id, iEnt ); set_pev( iEnt, pev_nextthink, get_gametime() ); } public Think_PlayerCamera( iEnt ) { static sClassname[32]; pev( iEnt, pev_classname, sClassname, sizeof sClassname - 1 ); if( !equal( sClassname, g_sCamclass ) ) return FMRES_IGNORED; static iOwner; iOwner = pev( iEnt, pev_owner ); if( !is_user_alive( iOwner ) ) return FMRES_IGNORED; static iButtons; iButtons = pev( iOwner, pev_button ); if( iButtons & IN_USE ) { engfunc( EngFunc_SetView, iOwner, iOwner ); engfunc( EngFunc_RemoveEntity, iEnt ); return FMRES_IGNORED; } static Float:fOrigin[3], Float:fAngle[3]; pev( iOwner, pev_origin, fOrigin ); pev( iOwner, pev_v_angle, fAngle ); static Float:fVBack[3]; angle_vector( fAngle, ANGLEVECTOR_FORWARD, fVBack ); fOrigin[2] += 20.0; fOrigin[0] += ( -fVBack[0] * 150.0 ); fOrigin[1] += ( -fVBack[1] * 150.0 ); fOrigin[2] += ( -fVBack[2] * 150.0 ); engfunc( EngFunc_SetOrigin, iEnt, fOrigin ); set_pev( iEnt, pev_angles, fAngle ); set_pev( iEnt, pev_nextthink, get_gametime() ); return FMRES_HANDLED; }
Niedługo opiszę. Akurat wrzucałem to kiedy już nie miałem siły...
Użytkownik Harsay edytował ten post 21.09.2010 07:37