Raised This Month: $ Target: $400
 0% 

Colliding even when SOLID_NOT | Player invicible (SOLID_NOT)


  
 
 
Thread Tools Display Modes
Prev Previous Post   Next Post Next
Author Message
edon1337
Penguin Enthusiast
Join Date: Jun 2016
Location: Macedonia
Old 08-14-2018 , 03:37   Colliding even when SOLID_NOT | Player invicible (SOLID_NOT)
Reply With Quote #1

Hey,

I have this code where an airplane entity is created (SOLID_NOT) and players attached to it are SOLID_NOT too, but sometimes when players get spawned to the airplane, some get pushed sideways, and they start floating around in the sky, why does this happen when players are SOLID_NOT same as the airplane?

Part of the code where airplane is created and players are attached to it:
PHP Code:
MakeAirPlane( )
{
    new 
Float:fOrigin], Float:fAngle] , Float:fVelocity];
    
GetPlaneDirectionfOriginfAnglefVelocity ) ;
    
    
g_iAirPlaneEnt create_entity"info_target" );
    
    
set_pevg_iAirPlaneEntpev_classnameAIRPLANE_CLASSNAME );
    
set_pevg_iAirPlaneEntpev_solidSOLID_NOT ); // we dont want it to collide with players who jump
    
set_pevg_iAirPlaneEntpev_movetypeMOVETYPE_FLY ); // its gonna fly, so..
    
engfuncEngFunc_SetModelg_iAirPlaneEntg_iDataAirPlaneAirPlane_Model ] );
    
engfuncEngFunc_SetOriging_iAirPlaneEntfOrigin );
    
set_pevg_iAirPlaneEntpev_anglesfAngle ); // set correct angles, we don't want a plane going backwards
    
set_pevg_iAirPlaneEntpev_velocityfVelocity );
    
    
fOrigin] -= 5.0// reduce the Z axi a little bit, find the best place for players to stand
    
    
new szPlayers32 ], iNumiTempID;
    
get_playersszPlayersiNum"ach" );
    
    for( new 
iiNumi++ )
    {
        
iTempID szPlayers];
        
        
AttachPlayerToPlaneiTempIDfOriginfAnglefVelocity ); // attach the players to the plane
    
}
}

AttachPlayerToPlaneidFloat:fOrigin], Float:fAngle], Float:fVelocity] )
{
    
client_cmdid"spk sound/misc/plane_drone.wav" );

    
set_pevidpev_solidSOLID_NOT ); // make him SOLID_NOT so he doesnt collide with the others
    
    
set_user_renderingidkRenderFxGlowShell000kRenderTransAlpha); // make player invisibile
    
    
engfuncEngFunc_SetOriginidfOrigin );
    
set_pevidpev_anglesfAngle );
    
set_pevidpev_fixangle); // idk if its really needed
    
set_pevidpev_velocityfVelocity );
    
set_pevidpev_gravity0.00001 ); // 0.0 doesnt work so lets set an extra small value
    
set_pevidpev_maxspeed0.00001 ); // same as above
    
    
g_bIsPlayerInParachuteid ] = false// player isnt in parachute
    
g_bPlayerInPlaneid ] = true// but hes in airplane

2. Sometimes a player is made invisible and sometimes invicible (unkillable) for some reason, I believe he is SOLID_NOT because I was able to go through him, but when a player lands on the ground he is set to SOLID_SLIDEBOX...

Part of the code that gets called when player lands on the ground/ in the water and is set to SOLID_SLIDEBOX
PHP Code:
public client_PreThinkid )
{
    if( ! 
is_user_aliveid ) )
    return 
PLUGIN_CONTINUE;
    
    if( 
g_bIsPlayerInParachuteid ] )
    {
        new 
Float:fVelocity]; 
        
pevidpev_velocityfVelocity ); 
        
        if( ! 
g_bLandedPlayerid ] && ( ( pevidpev_flags ) & FL_ONGROUND ) || ( pevidpev_flags ) & FL_INWATER ) ) ) // player has landed on ground/ in water
        
{
            
g_bIsPlayerInParachuteid ] = false// not in parachute anymore
            
set_pevidpev_sequencedetach );
            
set_pevidpev_solidSOLID_SLIDEBOX );
            
set_pevidpev_movetypeMOVETYPE_WALK );
            
            
set_user_renderingid );
            
            
client_cmdid"spk sound/%s"g_iSoundsLanding_Sound ] ); // emit landing sound
            
            
g_bLandedPlayerid ] = true;
        }
        
        else if( 
fVelocity] < 0.0 // still in air
        
{
            
fVelocity] = g_fCachedParachuteVelocity;
            
set_pevidpev_velocityfVelocity );
        } 
    }
    return 
PLUGIN_CONTINUE;

Full code in case someone needs it to check something
PHP Code:
#include <     amxmodx                          >
#include <     amxmisc                          >
#include <     cstrike                          >
#include <     hamsandwich                      >
#include <     fakemeta                         >
#include <     fun                              >
#include <     rog                              >
#include <     stripweapons                     >
#include <     cs_battleroyale_faketeams        >
#include <     cs_battleroyale_roundmanager     >
#include <     orpheu                           >
#include <     orpheu_stocks                    >
#include <     orpheu_advanced                  >

#define VERSION "2.1"

#define HIDE_ROUND_TIMER ( 1<<4 )

#if !defined CSW_GLOCK
#define CSW_GLOCK 2
#endif

//#define DUMP_ORIGIN_DATA

#define DEFAULT_MAXSPEED   250.0
#define DEFAULT_GRAVITY    1.0

#define MAX_ORIGINS 100

#define AIRDROP_CLASSNAME  "ent_airdrop"
#define AIRPLANE_CLASSNAME "ent_airplane"

enum
{
    
VIEW_NONE,
    
VIEW_3RDPERSON
};

enum ( += 8764 )
{
    
TASK_PARACHUTE_DEPLOY 6436,
    
TASK_AIRDROP,
    
TASK_AIRDROP_AFK
};

enum 
{
    
deploy,
    
idle,
    
detach
};

enum _:AirDropData
{
    
AirDrop_Model_Flying128 ],
    
AirDrop_Model_Ground128 ]
};

enum _:AirPlaneData
{
    
AirPlane_Model128 ]
};

enum
{
    
RARITY_GREY 1,
    
RARITY_GREEN,
    
RARITY_BLUE,
    
RARITY_PURPLE,
    
RARITY_GOLD
};

enum _:WeaponData
{
    
Weapon_Name32 ],
    
Weapon_Rarity
};

enum _:SoundEffects
{
    
Parachute_Deploy_Sound128 ],
    
Landing_Sound128 ],
    
AirDrop_Appear_Sound128 ],
    
AirDrop_Land_Sound128 ]
};

enum _:AmmoIndexData
{
    
AmmoIndex,
    
AmmoCount
};

new 
g_iSprite;
new 
g_iAirDrops;
new 
g_iSpriteIndexExplosion;
new 
g_iAirPlaneEnt;
new 
g_iDummyResult;
new 
g_iMsgHideWeapon;

new 
g_iFwOpenAirDrop;
new 
g_iFwJumpPlane;
new 
g_iFwUrgentJumpPlane;
new 
g_iFwDeployParachute;

new 
Float:g_fCachedParachuteVelocity;
new 
Float:g_fCachedAirDropVelocity;

new 
IntClassNameString;
new 
OrpheuFunction:HandleCreateNamedEntityFunc;
new 
OrpheuFunction:HandlePackWeaponFunc;
new 
CWeaponBoxKill_Address;

new 
g_iDataAirDropAirDropData ];
new 
g_iDataAirPlaneAirPlaneData ];
new 
g_iSoundsSoundEffects ];
new 
g_eAmmoIndex31 ][ AmmoIndexData ];

new 
g_iPlayerView33 ];
new 
g_iCvars10 ];
new 
g_IntAmmoNames16 ];

new 
bool:g_bPlayerInPlane33 ];
new 
bool:g_bIsPlayerInParachute33 ];
new 
bool:g_bLandedPlayer33 ];

new const 
g_szGameSounds[ ]  = "GameSounds.ini";
new const 
g_szGameModels[ ]  = "GameModels.ini";
new const 
g_szGameWeapons[ ] = "GameWeapons.ini";

new const 
g_szObjectiveEnts[ ][ ] =
{
    
"func_bomb_target",
    
"info_bomb_target",
    
"hostage_entity",
    
"monster_scientist",
    
"func_hostage_rescue",
    
"info_hostage_rescue",
    
"info_vip_start",
    
"func_vip_safetyzone",
    
"func_escapezone"
}

new const 
g_szValues[ ][ ] =
{
    
"RARITY_GREY",
    
"RARITY_GREEN",
    
"RARITY_BLUE",
    
"RARITY_PURPLE",
    
"RARITY_GOLD"
};

new const 
g_iValues[ ] =
{
    
RARITY_GREY,
    
RARITY_GREEN,
    
RARITY_BLUE,
    
RARITY_PURPLE,
    
RARITY_GOLD
};

new const 
g_szPossibleAirDropWeapons[ ] =
{
    
CSW_M249,
    
CSW_AWP,
    
CSW_G3SG1,
    
CSW_SG550
};

new Array:
g_aWeaponData;
new 
Trie:g_tRarityTrie;

new const 
g_szMaxBpAmmo[ ] =
{ -
152, -1901321100901120100100909090100120,
    
301202003290120902359090, -1100
};

new const 
g_szAmmoType[ ][ ] =
"""357sig""""762nato""""buckshot""""45acp""556nato""""9mm""57mm""45acp",
    
"556nato""556nato""556nato""45acp""9mm""338magnum""9mm""556natobox""buckshot",
    
"556nato""9mm""762nato""""50ae""556nato""762nato""""57mm"
};

new const 
WeaponBoxModels[ ][ ] = 

    
"""models/w_p228.mdl",  ""
    
"models/w_scout.mdl",  "models/w_hegrenade.mdl""models/w_xm1014.mdl"
    
"""models/w_mac10.mdl""models/w_aug.mdl""models/w_smokegrenade.mdl"
    
"models/w_elite.mdl""models/w_fiveseven.mdl",  "models/w_ump45.mdl",  
    
"models/w_sg550.mdl""models/w_galil.mdl",  "models/w_famas.mdl",  
    
"models/w_usp.mdl""models/w_glock18.mdl""models/w_awp.mdl",  
    
"models/w_mp5.mdl""models/w_m249.mdl",  "models/w_m3.mdl"
    
"models/w_m4a1.mdl""models/w_tmp.mdl""models/w_g3sg1.mdl",  
    
"models/w_flashbang.mdl""models/w_deagle.mdl""models/w_sg552.mdl""models/w_ak47.mdl"
    
"""models/w_p90.mdl",  """" 
};

new const 
g_szForbiddenWeapons[ ][ ] =
{
    
"weapon_c4",
    
"weapon_glock",
    
"weapon_knife",
    
"weapon_kevlar"
};

new const 
m_rgpPlayerItems_CWeaponBox] = { 3435, ... }; 

new const 
g_szStringAmmoNames[ ][ ] = 
{
    
""
    
"338Magnum"
    
"762Nato",
    
"556NatoBox"
    
"556Nato",
    
"buckshot"
    
"45ACP"
    
"57mm"
    
"50AE"
    
"357SIG",
    
"9mm"
    
"Flashbang",
    
"HEGrenade"
    
"SmokeGrenade"
    
"C4"
};

new 
g_pGameRules;

new 
OrpheuFunction:HandlePackAmmoFunc;

const 
XO_CWEAPONBOX 4;
const 
m_iId 43;
const 
m_pfnThink =  4;
const 
m_iType 34;
const 
m_iCount 35;
const 
m_bHasPrimary 116;
const 
m_pActiveItem  373;

new const 
SKIP_THESE_WEAPONS = ( ( << CSW_KNIFE ) | ( << CSW_HEGRENADE ) | ( << CSW_FLASHBANG ) | ( << CSW_SMOKEGRENADE ) | ( << CSW_C4 ) | ( << CSW_GLOCK ) );

public 
plugin_init( )
{
    
register_plugin"CS Battle Royale Core"VERSION"DoNii" );
        
    
register_dictionary"cs_battleroyale.txt" );
    
    
register_cvar"cs_battleroyale_version"VERSIONFCVAR_SERVER FCVAR_SPONLY FCVAR_UNLOGGED );
    
    
g_iMsgHideWeapon get_user_msgid"HideWeapon" );
    
    
register_messageg_iMsgHideWeapon"MsgHideWeapon" );
    
register_event"ResetHUD""OnResetHUD""b" );
    
    
set_msg_blockget_user_msgid"RoundTime" ), BLOCK_SET );
    
    
OrpheuRegisterHookFromObjectg_pGameRules"GiveC4""CGameRules""CGameRules_OnGiveC4" );
    
OrpheuRegisterHookFromObjectg_pGameRules"CheckWinConditions""CGameRules""CGameRules_CheckWinConditions" );
    
    
ROGInitialize500.0"CheckOrigin" );
    
    
#if defined DUMP_ORIGIN_DATA
    
ROGDumpOriginData( );
    
#endif
    
    
register_messageget_user_msgid"StatusIcon" ), "OnMessageStatusIcon" ); // Hook StatusIcon
    
    
set_msg_blockget_user_msgid"Radar" ), BLOCK_SET ); // Block radar, we don't want players cheating
    
    // Orpheu
    
IntClassNameString engfuncEngFunc_AllocString"weaponbox" ); // Allocate weaponbox ent
    
    
HandleCreateNamedEntityFunc OrpheuGetFunction"CREATE_NAMED_ENTITY" );
    
HandlePackWeaponFunc OrpheuGetFunction"PackWeapon""CWeaponBox" );
    
    
CWeaponBoxKill_Address OrpheuGetFunctionAddressOrpheuGetFunction"Kill""CWeaponBox" ) );
    
HandlePackAmmoFunc OrpheuGetFunction"PackAmmo""CWeaponBox" );
    
    
// cvars
    
g_iCvars]  =  register_cvar"csbr_parachute_deploy_time""1.0" );      // time to deploy parachute after spawning (seconds)
    
g_iCvars]  =  register_cvar"csbr_parachute_fall_speed""-250.0" );    // player parachute fall speed
    
g_iCvars]  =  register_cvar"csbr_camera_switch""1" );                // allow camera switch
    
g_iCvars]  =  register_cvar"csbr_airdrop_freq_min""15.0" );          // minimum time of an airdrop
    
g_iCvars]  =  register_cvar"csbr_airdrop_freq_max""30.0" );          // maximum time of an airdrop, ex: 180.0, 360.0 --> random_float(180.0, 360.0)
    
g_iCvars]  =  register_cvar"csbr_airdrop_count""3" );                // number of airdrops in 1 round
    
g_iCvars]  =  register_cvar"csbr_airdrop_velocity""-50.0" );         // airdrop fall velocity
    
g_iCvars]  =  register_cvar"csbr_airdrop_open_distance""100.0" );    // distance to allow opening of airdrop
    
g_iCvars]  =  register_cvar"csbr_airplane_disappear_time""20.0" );   // time task for the airplane to disappear
    
g_iCvars]  =  register_cvar"csbr_glow_extra_damage""2" );            // extra damage to give to each glow
    
    // register_logevent FORWARDS
    
register_logevent"OnNewRound"2"1=Round_Start" ); // hook new round
    
    // HAM FORWARDS
    
RegisterHamHam_TakeDamage"player""@HamTakeDamage_Pre");
    
RegisterHamHam_Player_ImpulseCommands"player""@HamPlayerImpulseCommands_Pre");
    
RegisterHamHam_Player_Jump"player""@HamPlayerJump_Post");
    
RegisterHamHam_Spawn"player""@HamSpawn_Post");
    
    
// FM FORWARDS    
    
register_forwardFM_CmdStart"@CmdStart" );
    
register_forwardFM_SetModel"@SetModel" );
    
register_forwardFM_AddToFullPack"@AddToFullPack_Post");
    
    
// Engine FORWARDS
    
register_thinkAIRDROP_CLASSNAME"@AirDropThink" ); // make airdrop think
    
    // Remove Armoury
    
remove_entity_name"armoury_entity" ); // remove all armoury_entity in the map
    
    
g_iFwOpenAirDrop       =   CreateMultiForward"PlayerOpenAirDrop",     ET_IGNOREFP_CELLFP_CELL );
    
g_iFwJumpPlane         =   CreateMultiForward"PlayerJumpPlane",       ET_IGNOREFP_CELL          );
    
g_iFwUrgentJumpPlane   =   CreateMultiForward"PlayerUrgentJump",      ET_IGNOREFP_CELL          );
    
g_iFwDeployParachute   =   CreateMultiForward"PlayerDeployParachute"ET_IGNOREFP_CELL          );
}

public 
plugin_precache( )
{
    
OrpheuRegisterHookOrpheuGetFunction"InstallGameRules" ), "OnInstallGameRules"OrpheuHookPost );

    
register_forwardFM_Spawn"@FM_Spawn" );
    
    
g_aWeaponData ArrayCreateWeaponData ); // create array for weapons
    
g_tRarityTrie TrieCreate( ); // create trie -> int map
    
    
RegisterWeaponList( .id get_user_msgid"WeaponList" ) );
    
    new 
i;
    for( 
0sizeof g_szValuesi++ )
    {
        
TrieSetCellg_tRarityTrieg_szValues], g_iValues] ); // assign int values to trie
    
}
    
    for( 
1sizeof g_szStringAmmoNamesi++)
    {
        
g_IntAmmoNames] = engfuncEngFunc_AllocStringg_szStringAmmoNames] ); // allocate ammo names
    
}
    
    
precache_sound"misc/plane_drone.wav" ); // idk if this is needed either, its default sound but anyways
    
    
precache_model"models/rpgrocket.mdl" ); // needed for camera view, server will crash without precaching it    
    
g_iSpriteIndexExplosion precache_model"sprites/zerogxplode.spr" ); // airdrop explosion effect
    
g_iSprite precache_model"sprites/Arrow_Icon.spr" ); // arrow icon to show on teammates head
    
    
ReadModels( ); // read our models
    
ReadSounds( ); // read our sounds
    
ReadWeapons( ); // read our weapons
}

public @
FM_SpawniEnt )
{
    if( ! 
pev_validiEnt ) )
    return 
FMRES_IGNORED;

    static 
szClassName32 ], i
    pev
iEntpev_classnameszClassNamecharsmaxszClassName ) );
    
    for( 
0sizeof g_szObjectiveEnts; ++)
    {
        if( 
equalszClassNameg_szObjectiveEnts] ) )
        {
            
engfuncEngFunc_RemoveEntityiEnt );
            return 
FMRES_SUPERCEDE;
        }
    }

    return 
FMRES_IGNORED;
}

public 
OnInstallGameRules( )
{
    
g_pGameRules OrpheuGetReturn( );
}

public 
OrpheuHookReturn:CGameRules_OnGiveC4g_pGameRulesid )
{
    return 
OrpheuSupercede;
}

public 
OrpheuHookReturn:CGameRules_CheckWinConditions( ) 
{
    return 
OrpheuSupercede;
}

public 
MsgHideWeapon( )
{
    
set_msg_arg_int1ARG_BYTEget_msg_arg_int) | HIDE_ROUND_TIMER );
}

public 
OnResetHUDid )
{
    
message_beginMSG_ONEg_iMsgHideWeapon_id )
    
write_byteHIDE_ROUND_TIMER )
    
message_end( )
}

public 
CheckOriginFloat:fOrigin] )
{
    if( 
fOrigin] < -425.0 // we don't want our entities to be spawned in the under-ground area
    
{
        return 
0;
    }
    return 
1;
}

@
RegUserMsg( const szName[ ], const iSize )
{
    if( 
equalszName"WeaponList" ) )
    {
        
RegisterWeaponList( .id get_orig_retval( ) );
    }
}

RegisterWeaponList( const id )
{
    static 
iForwardHandle = -1;

    if( ! 
id )
    {
        
iForwardHandle register_forwardFM_RegUserMsg"@RegUserMsg", ._post true );
        return;
    }

    if( 
iForwardHandle != -)
    {
        
unregister_forwardFM_RegUserMsgiForwardHandle, .post true );
    }

    
register_messageid"@OnMessageWeaponList" );
}

@
OnMessageWeaponList( const iMsgId, const iMsgType, const iEnt )
{
    new 
iAmmoIndex get_msg_arg_int); // get ammo index
    
new iAmmoCount get_msg_arg_int); // get ammo count
    
new iWeaponID get_msg_arg_int);  // get weapon id
    
    
g_eAmmoIndexiWeaponID ][ AmmoIndex ] = iAmmoIndex// save ammo index
    
g_eAmmoIndexiWeaponID ][ AmmoCount ] = iAmmoCount// save ammo count
}

@
HamPlayerJump_Postid // player jump
{
    if( ! 
g_bPlayerInPlaneid ] ) // if hes not in airplane, no need to continue
    
return HAM_IGNORED;

    
client_cmdid"stopsound" );
    
    
set_pevidpev_movetypeMOVETYPE_TOSS ); // set MOVETYPE_TOSS when hes in the sky
    
    
g_bPlayerInPlaneid ] = false// player left plane
    
g_bIsPlayerInParachuteid ] = true// player is in parachute now
    
    
set_user_renderingid ); // reset his rendering (make him visible)
    
    
set_pevidpev_gravityDEFAULT_GRAVITY ); // reset his gravity to default
    
set_user_maxspeedidDEFAULT_MAXSPEED );   // reset his speed to default
    
    
g_iPlayerViewid ] = VIEW_NONE// reset player camera view

    
set_pevidpev_sequencedeploy ); // make new sequence
    
    
set_taskget_pcvar_floatg_iCvars] ), "OnDeployParachute"id+TASK_PARACHUTE_DEPLOY ); // task for parachute
    
client_cmdid"spk sound/%s"g_iSoundsParachute_Deploy_Sound ] ); // emit parachute deploy sound
    
    
ExecuteForwardg_iFwJumpPlaneg_iDummyResultid );    
    return 
HAM_IGNORED;
}

@
AddToFullPack_PostES_HandleEiEntiHostiHostFlagsiPlayeriSet)
{
    if( ! 
is_user_aliveiEnt ) || ! is_user_aliveiHost ) )
    return 
FMRES_IGNORED;
    
    if( 
GetPlayerTeamiEnt ) == GetPlayerTeamiHost ) && ( iEnt != iHost ) ) // check if the player in sight is our teammate and is not the host himself
    
{
        
message_beginMSG_ONE_UNRELIABLESVC_TEMPENTITY_iHost )
        
write_byteTE_PLAYERATTACHMENT );
        
write_byteiEnt );
        
write_coord45 );
        
write_shortg_iSprite ); 
        
write_short20 );
        
message_end( ); 
    }
    return 
FMRES_IGNORED;
}  

public 
OnDeployParachuteid )
{
    
id -= TASK_PARACHUTE_DEPLOY;

    
g_bIsPlayerInParachuteid ] = true;
    
ExecuteForwardg_iFwDeployParachuteg_iDummyResultid );
    
    
remove_taskid TASK_PARACHUTE_DEPLOY );
}

@
HamSpawn_Postid )
{
    if( 
is_user_aliveid ) )
    {
        
strip_user_weaponsid ); // remove all weapons
        
give_itemid"weapon_knife" ); // give him a knife, poor guy
        
        
set_viewidCAMERA_NONE ); // set his camera to default
        
g_iPlayerViewid ] = VIEW_NONE// assign default view to var
    
}
    return 
HAM_IGNORED;
}

public 
RoundEnded( )
{
    
RemoveAllWeaponBox( );

    
remove_entity_nameAIRDROP_CLASSNAME ); // remove all airdrops
    
remove_entity_nameAIRPLANE_CLASSNAME ); // remove airplane
    
    
remove_taskTASK_AIRDROP ); // end task airdrop
    
    
g_iAirDrops 0;    
    
g_iAirPlaneEnt 0;
}

public 
OnNewRound( )
{
    
g_fCachedParachuteVelocity get_pcvar_floatg_iCvars] ); // cache our parachute velocity, we dont wanna retrieve same value every frame
    
g_fCachedAirDropVelocity get_pcvar_floatg_iCvars] ); // same as above

    
ROGShuffleOrigins( ); // randomize our origins

    
RemoveAllWeaponBox( );
    
    
remove_entity_nameAIRDROP_CLASSNAME ); // remove all airdrops
    
remove_entity_nameAIRPLANE_CLASSNAME ); // remove airplane
    
    
remove_taskTASK_AIRDROP ); // end task airdrop
    
    
g_iAirDrops 0;    
    
g_iAirPlaneEnt 0;
    
    new 
szPlayers32 ], iNumiTempID;
    
get_playersszPlayersiNum"h" );
    
    for( new 
iiNumi++ )
    {
        
iTempID szPlayers];
        
        
remove_taskiTempID TASK_PARACHUTE_DEPLOY ); // just to make sure
        
g_bLandedPlayeriTempID ] = false;
    }
    
    return 
PLUGIN_CONTINUE;
}

public 
RoundStarted( )
{    
    
MakeAirPlane( ); // create airplane
    
set_taskget_pcvar_floatg_iCvars] ), "DropAfkPlayers"TASK_AIRDROP_AFK ); // if there's AFK players who forgot to jump, force them to jump
    
    
new Float:fOrigin], WeaponEntityiArraySize ArraySizeg_aWeaponData ), eDataWeaponData ];
    
    for( new 
iiArraySizei++ )
    {
        
ArrayGetArrayg_aWeaponDataieData );
        
        
ROGGetOriginfOrigin );
        
        new 
WeaponBoxEntity OrpheuCallHandleCreateNamedEntityFuncIntClassNameString ) ;
        if( 
pev_validWeaponBoxEntity ) != )
        {
            continue;
        }
        
        
engfuncEngFunc_SetOriginWeaponBoxEntityfOrigin );
        
ExecuteHamHam_SpawnWeaponBoxEntity );
        
        
WeaponEntity create_entityeDataWeapon_Name ] );
        
        if( 
pev_validWeaponEntity ) != )
        {
            
remove_entityWeaponEntity );
        }

        
ExecuteHamBHam_SpawnWeaponEntity );
        new 
WeaponID cs_get_weapon_idWeaponEntity );
        
        if( 
WeaponID <= )
        {
            
remove_entityWeaponEntity );
            continue;
        }
        
        
OrpheuCallHandlePackWeaponFuncWeaponBoxEntityWeaponEntity );
        if( 
WeaponBoxModelsWeaponID ][ ] != EOS 
        { 
            
engfuncEngFunc_SetModelWeaponBoxEntityWeaponBoxModelsWeaponID ] );
        }
        
        
set_pdata_intWeaponBoxEntitym_pfnThinkCWeaponBoxKill_Address);
        
        new 
iAmmoIndex g_eAmmoIndexWeaponID ][ AmmoIndex ];
        new 
iAmmoCount g_eAmmoIndexWeaponID ][ AmmoCount ];
        
        if( 
iAmmoIndex )
        {
            
OrpheuCallHandlePackAmmoFuncWeaponBoxEntityg_IntAmmoNamesiAmmoIndex ], iAmmoCount );
        }
        
        
set_pevWeaponEntitypev_iuser2eDataWeapon_Rarity ] );
        
GlowWeaponWeaponBoxEntityeDataWeapon_Rarity ] );
    }
    new 
Float:fTimeAirDrop random_floatget_pcvar_floatg_iCvars] ), get_pcvar_floatg_iCvars] ) ); // random time between 2 cvar floats
    
set_taskfTimeAirDrop"OnCreateAirDrop"TASK_AIRDROP__"b" );
    
    return 
PLUGIN_CONTINUE;
}

public 
DropAfkPlayers( )
{
    
engfuncEngFunc_RemoveEntityg_iAirPlaneEnt ); // remove airplane
    
    
new szPlayers32 ], iNumiTempID;
    
get_playersszPlayersiNum"ah" );

    for( new 
iiNumi++ )
    {
        
iTempID szPlayers];

        if( 
g_bPlayerInPlaneiTempID ] )
        {
            
ExecuteHamBHam_Player_JumpiTempID ); // make them jump
            
client_printiTempIDprint_center"%L"iTempID"EMERGENCY_DROP" );
            
            
ExecuteForwardg_iFwUrgentJumpPlaneg_iDummyResultiTempID );
        }
    }
}

@
SetModeliEnt, const szModel[ ] ) // set weapons glow
{
    if( ! 
pev_validiEnt ) )
    return 
FMRES_IGNORED;

    new 
szClassName32 ];
    
peviEntpev_classnameszClassNamecharsmaxszClassName ) );
    
    if( ! 
equalszClassName"weaponbox" ) )
    return 
FMRES_IGNORED;
    
    new 
iWeaponEntity GetWeaponBoxWeaponTypeiEnt ); // get weapon entity
    
    
new iRarity peviWeaponEntitypev_iuser2 );
    
    if( 
iRarity )
    
GlowWeaponiEntiRarity ); // set glow
    
    
return FMRES_IGNORED;
}

public 
OnMessageStatusIconiMsgIdiMsgDestid )
{
    static 
szIcon];
    
get_msg_arg_string2szIconcharsmaxszIcon ) );

    if( 
equalszIcon"buyzone" ) && get_msg_arg_int) ) // block buyzone, not needed in this mod
    
{
        
set_pdata_intid235get_pdata_intid235 ) & ~ ( << ) );
        return 
PLUGIN_HANDLED;
    }
    return 
PLUGIN_CONTINUE;
}

@
CmdStartidiHandle // when opening airdrop, you have to press IN_USE
{
    if( ! 
is_user_aliveid ) )
    return 
FMRES_IGNORED;

    static 
iButtons;
    
iButtons get_uciHandleUC_Buttons );
    
    if( 
iButtons IN_USE )
    {
        new 
Float:fOriginPlayer], Float:fOriginEnt], iEnt = -1;
        
pevidpev_originfOriginPlayer );
        
        while( ( 
iEnt find_ent_by_classiEntAIRDROP_CLASSNAME ) ) )
        {
            
peviEntpev_originfOriginEnt );
            
            if( ( 
get_distance_ffOriginPlayerfOriginEnt ) <= get_pcvar_floatg_iCvars] ) ) && ( peviEntpev_flags ) & FL_ONGROUND ) ) // check if distance between player and airdrop is lower than cvar and airdrop has landed
            
{
                
OpenAirDropidiEnt ); // open the airdrop
            
}
        }
    }
    return 
FMRES_IGNORED;
}

@
HamTakeDamage_PreiVictimiInflicteriAttackerFloat:fDamage // give extra damage to each glow
{
    if( ! 
is_user_connectediAttacker ) )
    return 
HAM_IGNORED;
    
    new 
iEnt get_pdata_cbaseiAttackerm_pActiveItem );
    
    if( ! 
pev_validiEnt ) )
    return 
HAM_IGNORED;
    
    new 
iWeaponId cs_get_weapon_idiEnt );
    
    if( 
iWeaponId <= )
    return 
HAM_IGNORED;
    
    if( 
iWeaponId == CSW_FLASHBANG || iWeaponId == CSW_SMOKEGRENADE )
    return 
HAM_IGNORED;
    
    new 
iGlow peviEntpev_iuser2 );
    
    if( ! 
iGlow )
    return 
HAM_IGNORED;
    
    new 
iExtraDamage GetExtraDamageiGlow );
    
    
SetHamParamFloat4fDamage iExtraDamage );
    return 
HAM_IGNORED;
}

@
AirDropThinkiEnt )
{
    if( 
pev_validiEnt ) != )
    return 
PLUGIN_CONTINUE;
    
    new 
Float:fVelocity];
    
peviEntpev_velocityfVelocity );
    
    
set_peviEntpev_nextthinkget_gametime( ) + 0.01 );
    
    if( ( 
peviEntpev_flags ) & FL_ONGROUND ) || ( peviEntpev_flags ) & FL_INWATER ) ) // has landed on ground / in water
    
{
        if( ! 
peviEntpev_iuser2 ) )
        {
            
engfuncEngFunc_SetModeliEntg_iDataAirDropAirDrop_Model_Ground ] ); 
            
engfuncEngFunc_SetSizeiEntFloat:{ -35.0, -40.0, -65.0 }, Float:{ 35.040.065.0 } );
            
            
set_peviEntpev_solidSOLID_BBOX );
            
set_peviEntpev_movetypeMOVETYPE_TOSS );
            
            
client_cmd0"spk sound/%s"g_iSoundsAirDrop_Land_Sound ] );
            
            
set_peviEntpev_iuser2);
        }
    }
    
    else if( 
fVelocity] < 0.0 // still in air
    
{
        
fVelocity] = g_fCachedAirDropVelocity;
        
set_peviEntpev_velocityfVelocity );    
    }
    return 
PLUGIN_CONTINUE;
}

public 
OnCreateAirDrop( )
{
    if( 
g_iAirDrops <= get_pcvar_numg_iCvars] ) ) // create as many AirDrops as described in the cvar
    
{
        
MakeAirDropEnt( );
        
g_iAirDrops++;
    }
    
    else
    {
        
remove_taskTASK_AIRDROP ); // remove airdrop task, no more airdrops needed
    
}
}

public 
client_PreThinkid )
{
    if( ! 
is_user_aliveid ) )
    return 
PLUGIN_CONTINUE;
    
    if( 
g_bIsPlayerInParachuteid ] )
    {
        new 
Float:fVelocity]; 
        
pevidpev_velocityfVelocity ); 
        
        if( ! 
g_bLandedPlayerid ] && ( ( pevidpev_flags ) & FL_ONGROUND ) || ( pevidpev_flags ) & FL_INWATER ) ) ) // player has landed on ground/ in water
        
{
            
g_bIsPlayerInParachuteid ] = false// not in parachute anymore
            
set_pevidpev_sequencedetach );
            
set_pevidpev_solidSOLID_SLIDEBOX );
            
set_pevidpev_movetypeMOVETYPE_WALK );
            
            
set_user_renderingid );
            
            
client_cmdid"spk sound/%s"g_iSoundsLanding_Sound ] ); // emit landing sound
            
            
g_bLandedPlayerid ] = true;
        }
        
        else if( 
fVelocity] < 0.0 // still in air
        
{
            
fVelocity] = g_fCachedParachuteVelocity;
            
set_pevidpev_velocityfVelocity );
        } 
    }
    return 
PLUGIN_CONTINUE;
}

@
HamPlayerImpulseCommands_Preid // block spray and replace it with camera
{
    if( ! 
is_user_aliveid ) )
    return 
HAM_IGNORED;
    
    if( ! 
get_pcvar_numg_iCvars] ) )
    return 
HAM_IGNORED;
    
    if( 
pevidpev_impulse ) == 201 )
    {
        
g_iPlayerViewid ] = g_iPlayerViewid ] == VIEW_3RDPERSON VIEW_NONE VIEW_3RDPERSON;
        
set_viewidg_iPlayerViewid ] );
        
        
set_pevidpev_impulse);
    }
    return 
HAM_IGNORED;
}

public 
client_connectid // reset vars
{    
    
ResetVarsid );
}

ReadWeapons( ) // read our weapons from .ini
{
    new 
szConfigsName256 ], szFilename512 ], eDataWeaponData ], szWeaponName32 ], szRarity18 ], szData128 ];
    
get_configsdirszConfigsNamecharsmaxszConfigsName ) );
    
    
formatexszFilenamecharsmaxszFilename ), "%s/%s"szConfigsNameg_szGameWeapons );
    
    new 
iFile fopenszFilename"rt" );
    
    if( 
iFile )
    {        
        while( ! 
feofiFile ) )
        {            
            
fgetsiFileszDatacharsmaxszData ) );
            
trimszData );
            
            switch( 
szData] )
            {
            case 
EOS'#'';''/':
                {
                    continue;
                }
                
            default:
                {
                    if( 
parseszDataszWeaponNamecharsmaxszWeaponName ), szRaritycharsmaxszRarity ) ) < )
                    continue;
                    
                    for( new 
isizeof g_szForbiddenWeaponsi++ )
                    {
                        if( 
equalszWeaponNameg_szForbiddenWeapons] ) )
                        {
                            continue;
                        }
                    }
                    
                    new 
iRarity;
                    if( 
TrieGetCellg_tRarityTrieszRarityiRarity ) )
                    {
                        if( ! ( 
RARITY_GREY <= iRarity <= RARITY_GOLD ) )
                        {
                            continue;
                        }
                    }    
                    
                    
eDataWeapon_Rarity ] = iRarity;                    
                    
eDataWeapon_Name ] = szWeaponName;
                    
                    
ArrayPushArrayg_aWeaponDataeData );        
                }
            }
        }
        
fcloseiFile );
    }
}

ReadModels( ) // read our models from .ini
{
    new 
szConfigsName256 ], szFilename512 ];
    
get_configsdirszConfigsNamecharsmaxszConfigsName ) );
    
    
formatexszFilenamecharsmaxszFilename ), "%s/%s"szConfigsNameg_szGameModels );
    
    new 
iFile fopenszFilename"r" );
    
    if( 
iFile )
    {
        new 
szData128 ], szValue64 ], szKey32 ];
        
        while( ! 
feofiFile ) )
        {
            
fgetsiFileszDatacharsmaxszData ) );
            
trimszData );
            
            switch( 
szData] )
            {
            case 
EOS'#'';''/'
                continue;
                
            default:
                {
                    
strtokszDataszKeycharsmaxszKey ), szValuecharsmaxszValue ), '=' );
                    
trimszKey ); 
                    
trimszValue );
                    
                    if( ! 
szValue] )
                    continue;
                    
                    if( 
equalszKey"AIRDROP_MODEL_FLYING" ) )
                    {
                        
g_iDataAirDropAirDrop_Model_Flying ] = szValue;
                        
precache_modelszValue );
                    }
                    
                    else if( 
equalszKey"AIRDROP_MODEL_GROUND" ) )
                    {
                        
g_iDataAirDropAirDrop_Model_Ground ] = szValue;
                        
precache_modelszValue );
                    }
                    
                    else if( 
equalszKey"AIRPLANE_MODEL" ) )
                    {
                        
g_iDataAirPlaneAirPlane_Model ] = szValue;
                        
precache_modelszValue );
                    }
                }
            }
        }
    }
    
fcloseiFile );
}

ReadSounds( ) // read our sounds from .ini
{
    new 
szConfigsName256 ], szFilename512 ];
    
get_configsdirszConfigsNamecharsmaxszConfigsName ) );
    
    
formatexszFilenamecharsmaxszFilename ), "%s/%s"szConfigsNameg_szGameSounds );
    
    new 
iFile fopenszFilename"r" );
    
    if( 
iFile )
    {
        new 
szData128 ], szValue64 ], szKey32 ];
        
        while( ! 
feofiFile ) )
        {
            
fgetsiFileszDatacharsmaxszData ) );
            
trimszData );
            
            switch( 
szData] )
            {
            case 
EOS'#'';''/'
                continue;
                
            default:
                {
                    
strtokszDataszKeycharsmaxszKey ), szValuecharsmaxszValue ), '=' );
                    
trimszKey ); 
                    
trimszValue );
                    
                    if( ! 
szValue] )
                    continue;
                    
                    if( 
equalszKey"PARACHUTE_DEPLOY_SOUND" ) )
                    {
                        
g_iSoundsParachute_Deploy_Sound ] = szValue;
                        
precache_soundszValue );
                    }
                    
                    else if( 
equalszKey"LANDING_SOUND" ) )
                    {
                        
g_iSoundsLanding_Sound ] = szValue;
                        
precache_soundszValue );
                    }
                    
                    else if( 
equalszKey"AIRDROP_APPEAR_SOUND" ) )
                    {
                        
g_iSoundsAirDrop_Appear_Sound ] = szValue;
                        
precache_soundszValue );
                    }
                    
                    else if( 
equalszKey"AIRDROP_LAND_SOUND" ) )
                    {
                        
g_iSoundsAirDrop_Land_Sound ] = szValue;
                        
precache_soundszValue );
                    }
                }
            }
        }
    }
    
fcloseiFile );
}

MakeAirPlane( )
{
    new 
Float:fOrigin], Float:fAngle] , Float:fVelocity];
    
GetPlaneDirectionfOriginfAnglefVelocity ) ;
    
    
g_iAirPlaneEnt create_entity"info_target" );
    
    
set_pevg_iAirPlaneEntpev_classnameAIRPLANE_CLASSNAME );
    
set_pevg_iAirPlaneEntpev_solidSOLID_NOT ); // we dont want it to collide with players who jump
    
set_pevg_iAirPlaneEntpev_movetypeMOVETYPE_FLY ); // its gonna fly, so..
    
engfuncEngFunc_SetModelg_iAirPlaneEntg_iDataAirPlaneAirPlane_Model ] );
    
engfuncEngFunc_SetOriging_iAirPlaneEntfOrigin );
    
set_pevg_iAirPlaneEntpev_anglesfAngle ); // set correct angles, we don't want a plane going backwards
    
set_pevg_iAirPlaneEntpev_velocityfVelocity );
    
    
fOrigin] -= 5.0// reduce the Z axi a little bit, find the best place for players to stand
    
    
new szPlayers32 ], iNumiTempID;
    
get_playersszPlayersiNum"ach" );
    
    for( new 
iiNumi++ )
    {
        
iTempID szPlayers];
        
        
AttachPlayerToPlaneiTempIDfOriginfAnglefVelocity ); // attach the players to the plane
    
}
}

AttachPlayerToPlaneidFloat:fOrigin], Float:fAngle], Float:fVelocity] )
{
    
client_cmdid"spk sound/misc/plane_drone.wav" );

    
set_pevidpev_solidSOLID_NOT ); // make him SOLID_NOT so he doesnt collide with the others
    
    
set_user_renderingidkRenderFxGlowShell000kRenderTransAlpha); // make player invisibile
    
    
engfuncEngFunc_SetOriginidfOrigin );
    
set_pevidpev_anglesfAngle );
    
set_pevidpev_fixangle); // idk if its really needed
    
set_pevidpev_velocityfVelocity );
    
set_pevidpev_gravity0.00001 ); // 0.0 doesnt work so lets set an extra small value
    
set_pevidpev_maxspeed0.00001 ); // same as above
    
    
g_bIsPlayerInParachuteid ] = false// player isnt in parachute
    
g_bPlayerInPlaneid ] = true// but hes in airplane
}

GetPlaneDirectionFloat:fOrigin] , Float:fAngle], Float:fVelocity] ) // get a random hard-coded direction for the plane, impossible to do without hard-coding
{
    switch( 
random_num1) )
    {
    case 
1:
        {
            
fOrigin] = 3284.0;
            
fOrigin] = -3284.3;
            
fOrigin] = 3931.9;

            
fAngle] = -0.6;
            
fAngle] = 137.1;
            
fAngle] = 0.0;

            
fVelocity] = -219.9;
            
fVelocity] = 203.7;
            
fVelocity] = -10.0;
        }

    case 
2:
        {
            
fOrigin] = -2767.5;
            
fOrigin] = -1382.9;
            
fOrigin] = 3931.9;

            
fAngle] = -1.3;
            
fAngle] = 20.5;
            
fAngle] = 0.0;

            
fVelocity] = 280.2;
            
fVelocity] = 104.8;
            
fVelocity] = -20.8;
        }
    }
}

MakeAirDropEnt( )
{
    new 
iEnt engfuncEngFunc_CreateNamedEntityengfuncEngFunc_AllocString"info_target" ) );

    new 
Float:fOrigin];
    
ROGGetOriginfOrigin ); // get a valid origin

    
fOrigin] = 3850.0// max height, as we're gonna stick to one map, hard-code it
    
engfuncEngFunc_SetOriginiEntfOrigin );
    
    
set_peviEntpev_classnameAIRDROP_CLASSNAME );
    
    
set_peviEntpev_movetypeMOVETYPE_TOSS ); // if it lands on the moving boat, to follow the boat instead of levitating
    
set_peviEntpev_solidSOLID_NOT );
    
    
engfuncEngFunc_SetModeliEntg_iDataAirDropAirDrop_Model_Flying ] ); 
    
engfuncEngFunc_SetSizeiEntFloat:{ -35.0, -40.0, -5.0 }, Float:{ 35.040.05.0 } );

    
set_peviEntpev_nextthinkget_gametime( ) + 0.01 ); // make it think
    
    
client_cmd0"spk sound/%s"g_iSoundsAirDrop_Appear_Sound ] ); // emit airdrop appear sound
    
    
client_print0print_center"%L"LANG_PLAYER"AIRDROP_ARRIVED" );
}

OpenAirDropidiEnt // player is opening airdrop
{
    new 
Float:fOrigin];
    
peviEntpev_originfOrigin );

    
message_beginMSG_BROADCASTSVC_TEMPENTITY )
    
write_byteTE_EXPLOSION ); // make effect
    
engfuncEngFunc_WriteCoordfOrigin] );
    
engfuncEngFunc_WriteCoordfOrigin] );
    
engfuncEngFunc_WriteCoordfOrigin] );
    
write_shortg_iSpriteIndexExplosion );
    
write_byte30 );
    
write_byte15 );
    
write_byteTE_EXPLFLAG_NONE );
    
message_end( );
    
    
engfuncEngFunc_RemoveEntityiEnt ); // remove the ent
    
    
new iWeapon g_szPossibleAirDropWeaponsrandomsizeof g_szPossibleAirDropWeapons ) ]; // retrieve a random entry
    
    
StripWeaponsidPrimaryfalse ); // strip his primary weapon
    
    
GivePlayerSpecialWeaponidiWeapon ); // give him a special weapon
    
return PLUGIN_CONTINUE;
}

GivePlayerSpecialWeaponidiWeapon )
{
    new 
szWeaponName32 ], iNumWeaponsiWeaponIDszWeapons32 ];
    
get_weaponnameiWeaponszWeaponNamecharsmaxszWeaponName ) );

    new 
iEnt give_itemidszWeaponName );
    
    if( 
pev_validiEnt ) )
    {
        
set_peviEntpev_iuser2RandomGlowByChance( ) );
        
        
get_user_weaponsidszWeaponsiNumWeapons );
        
        for( new 
iiNumWeaponsi++ )
        {
            
iWeaponID szWeapons];
            
            if ( ( 
<< iWeapon ) & SKIP_THESE_WEAPONS )
            continue;
            
            
ExecuteHamBHam_GiveAmmoidg_szMaxBpAmmoiWeaponID ], g_szAmmoTypeiWeaponID ], g_szMaxBpAmmoiWeaponID ] );
        }
        
        
ExecuteForwardg_iFwOpenAirDropg_iDummyResultidiWeapon );
    }
}

RandomGlowByChance( ) // stock to pick a glow by chances
{
    new 
iReturnValue;
    
    const 
iPercentage 100;
    new 
iRandomNum random_num0iPercentage );

    switch( 
iRandomNum )
    {

    case 
.. 40:
        
iReturnValue RARITY_BLUE;

    case 
41 .. 75:
        
iReturnValue RARITY_PURPLE;

    case 
76 .. 100:
        
iReturnValue RARITY_GOLD;
    }
    return 
iReturnValue
}

GlowWeaponiEntiColor // glow the weapon
{
    switch( 
iColor )
    {
    case 
RARITY_GREY:
        
set_renderingiEntkRenderFxGlowShell192192192kRenderNormal50 );

    case 
RARITY_GREEN:
        
set_renderingiEntkRenderFxGlowShell02550kRenderNormal50 );    
        
    case 
RARITY_BLUE:
        
set_renderingiEntkRenderFxGlowShell0181255kRenderNormal50 );

    case 
RARITY_PURPLE:
        
set_renderingiEntkRenderFxGlowShell1280128kRenderNormal50 );

    case 
RARITY_GOLD:
        
set_renderingiEntkRenderFxGlowShell2552150kRenderNormal50 );
    }
}

GetExtraDamageiGlowColor // get damage according to glow
{
    return 
iGlowColor get_pcvar_numg_iCvars] );
}

RemoveAllWeaponBox( )
{
    new 
iEnt = -1;
    while( ( 
iEnt find_ent_by_classiEnt"weaponbox" ) ) != )
    {
        
set_pdata_intiEntm_pfnThinkCWeaponBoxKill_Address);
    }
}

GetWeaponBoxWeaponTypeiEnt )
{
    new 
iWeapon;
    for( new 
1<= 5i++ )
    {
        
iWeapon get_pdata_cbaseiEntm_rgpPlayerItems_CWeaponBox], XO_CWEAPONBOX );
        if( 
iWeapon 
        {
            return 
iWeapon;
        }
    }
    return 
0;
}

ResetVars( const id )
{
    
g_iPlayerViewid ] = VIEW_NONE;
    
g_bIsPlayerInParachuteid ] = false;
    
g_bPlayerInPlaneid ] = false;
    
g_bLandedPlayerid ] = false;

Thanks
__________________
edon1337 is offline
 


Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 12:18.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode