#include <amxmodx>
#include <cstrike>
#include <engine>
#include <fakemeta>
#include <fakemeta_util>
#include <hamsandwich>
#include <fun>
#include "furien.inc"
#define m_rgpPlayerItems_wpnbx_Slot5 39
#define IsPlayer(%1) ( FIRST_PLAYER_ID <= %1 <= g_iMaxPlayers )
#define IsWeaponBoxC4(%1) ( get_pdata_cbase(%1, m_rgpPlayerItems_wpnbx_Slot5, XO_WEAPONBOX) > 0 )
#define PLUGIN "Furien Mod"
#define VERSION "1.1"
#define AUTHOR "DaNNe." //edited scosmyn
#define XO_WEAPONBOX 4
#define FURIEN_GRAVITY 0.4
#define FURIEN_SPEED 700.0
#define TEAM_FURIEN 1
#define TEAM_ANTIFURIEN 2
new g_iPickUp = 2
new g_iMaxPlayers
#define SWITCH_TASK 112233
#define FIRST_PLAYER_ID 1
new bool:MakeVisible[33], Float:Wallorigin[33][3];
// ----- | Parachute | ------ //
#define PARACHUTE_CLASS "Parachute"
new ParaENT[33];
new CsTeams:g_iFuriensTeam = CS_TEAM_T
new cvar_gamedescription, furienspawnhp, antifurienspawnhp
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
cvar_gamedescription = register_cvar("furien_gamename", "Furien CSO Mod")
antifurienspawnhp = register_cvar("antifurien_spawnhp", "135")
furienspawnhp = register_cvar("furien_spawnhp", "100")
register_forward(FM_PlayerPreThink, "Player_PreThink");
register_forward(FM_AddToFullPack, "FWD_AddToFullPack", 1);
register_forward(FM_PlayerPreThink, "FWD_ParachutePreThink");
register_forward(FM_GetGameDescription, "FWD_GameDescription")
RegisterHam(Ham_Touch, "weaponbox", "CWeaponBox_Touch")
RegisterHam(Ham_Touch, "armoury_entity", "GroundWeapon_Touch")
RegisterHam(Ham_Touch, "weapon_shield", "GroundWeapon_Touch")
RegisterHam(Ham_Spawn, "player", "HAM_Spawn_Post", 1);
register_event("SendAudio", "EVENT_TeamSwap", "a", "1=0", "2=%!MRAD_ctwin");
//Register_BlockBuy()
g_iMaxPlayers = get_maxplayers()
}
public plugin_natives()
{
register_library("furien")
register_native("furien_get_user_team", "fr_get_user_team")
}
public fr_get_user_team(/*iPlugin, iParams*/)
{
return __get_user_team( get_param(1) )
}
__get_user_team(id)
{
new CsTeams:iTeam = cs_get_user_team(id)
if( CS_TEAM_T <= iTeam <= CS_TEAM_CT )
{
if( iTeam == g_iFuriensTeam )
{
return Furien
}
return AntiFurien
}
return -1
}
/*public plugin_precache() {
remove_entity_name("info_map_parameters");
remove_entity_name("func_buyzone");
new Entity = create_entity("info_map_parameters");
DispatchKeyValue(Entity, "buying", "3");
DispatchSpawn(Entity);
}*/
public HAM_Spawn_Post(id) {
if(is_user_alive(id) && !is_user_bot(id)) {
strip_user_weapons(id)
fm_give_item(id, "weapon_knife")
switch(get_user_team(id)) {
case TEAM_FURIEN: {
fm_give_item(id, "weapon_hegrenade")
fm_give_item(id, "weapon_flashbang")
set_user_footsteps(id, 0)
//fm_give_item(id, "weapon_knife")
fm_set_user_health(id, get_pcvar_num(furienspawnhp))
}
case TEAM_ANTIFURIEN: {
fm_give_item(id, "weapon_hegrenade")
fm_give_item(id, "weapon_flashbang")
set_user_footsteps(id, 0)
fm_give_item(id,"weapon_usp")
cs_set_user_bpammo(id,CSW_USP,250)
//fm_give_item(id, "weapon_knife")
fm_set_user_health(id, get_pcvar_num(antifurienspawnhp))
}
}
}
}
public Player_PreThink(id) {
if(is_user_connected(id)) {
if(get_user_team(id) == TEAM_FURIEN) {
if(pev(id, pev_gravity) > FURIEN_GRAVITY && pev(id, pev_gravity) > 0.1)
set_pev(id, pev_gravity, FURIEN_GRAVITY)
if(pev(id, pev_maxspeed) < FURIEN_SPEED && pev(id, pev_maxspeed) > 1.0) {
set_pev(id, pev_maxspeed, FURIEN_SPEED)
set_user_footsteps(id, 1)
}
}
}
}
public FWD_AddToFullPack(es, e, ent, host, host_flags, player, p_set) {
if(is_user_connected(ent) && is_user_connected(host) && is_user_alive(ent)) {
if(is_user_alive(host) && get_user_team(ent) == 1 && get_user_team(host) == 1
|| !is_user_alive(host) && get_user_team(ent) == 1 && pev(host, pev_iuser2) == ent
|| get_user_team(ent) == 1 && pev(ent, pev_maxspeed) <= 1.0) {
set_es(es, ES_RenderFx, kRenderFxNone);
set_es(es, ES_RenderMode, kRenderTransTexture);
set_es(es, ES_RenderAmt, 255);
}
else if(get_user_team(ent) == 1) {
set_es(es, ES_RenderFx, kRenderFxNone);
set_es(es, ES_RenderMode, kRenderTransTexture);
static Float:Origin[3]
pev(ent, pev_origin, Origin)
if(get_user_weapon(ent) == CSW_KNIFE && !MakeVisible[ent] && fm_get_speed(ent) <= 5 || get_user_weapon(ent) == CSW_KNIFE && !MakeVisible[ent] && Origin[0] == Wallorigin[ent][0] && Origin[1] == Wallorigin[ent][1] && Origin[2] == Wallorigin[ent][2])
set_es(es, ES_RenderAmt, 0);
else
set_es(es, ES_RenderAmt, 255);
}
}
}
public GroundWeapon_Touch(iWeapon, id)
{
if( IsPlayer(id) )
{
if( !g_iPickUp )
{
remove_entity(iWeapon)
return HAM_SUPERCEDE
}
if( !is_user_alive(id) )
{
return HAM_SUPERCEDE
}
new iTeam = __get_user_team(id)
if( ( iTeam == -1 )
|| (iTeam == Furien && g_iPickUp != 1)
|| (iTeam == AntiFurien && g_iPickUp != 2) )
{
return HAM_SUPERCEDE
}
}
return HAM_IGNORED
}
public CWeaponBox_Touch(iWeaponBox, id)
{
if( IsPlayer(id) )
{
if( !is_user_alive(id) )
{
return HAM_SUPERCEDE
}
if( IsWeaponBoxC4(iWeaponBox) )
{
return HAM_IGNORED
}
if( !g_iPickUp )
{
remove_entity(iWeaponBox)
return HAM_SUPERCEDE
}
new iTeam = __get_user_team(id)
if( ( iTeam == -1 )
|| (iTeam == Furien && g_iPickUp != 1)
|| (iTeam == AntiFurien && g_iPickUp != 2) )
{
return HAM_SUPERCEDE
}
}
return HAM_IGNORED
}
public FWD_GameDescription() {
static GameName[32]
get_pcvar_string(cvar_gamedescription, GameName, 31)
forward_return(FMV_STRING, GameName)
return FMRES_SUPERCEDE
}
public FWD_ParachutePreThink(id) {
if(is_user_alive(id) && get_user_team(id) == TEAM_ANTIFURIEN) {
new Float:FallSpeed = -50.0;
new Float:Frame;
new Button = pev(id, pev_button);
new OldButton = pev(id, pev_oldbuttons);
new Flags = pev(id, pev_flags);
if(ParaENT[id] > 0 &&(Flags & FL_ONGROUND)) {
if(pev(ParaENT[id],pev_sequence) != 2) {
set_pev(ParaENT[id], pev_sequence, 2);
set_pev(ParaENT[id], pev_gaitsequence, 1);
set_pev(ParaENT[id], pev_frame, 0.0);
set_pev(ParaENT[id], pev_fuser1, 0.0);
set_pev(ParaENT[id], pev_animtime, 0.0);
return;
}
pev(ParaENT[id],pev_fuser1, Frame);
Frame += 2.0;
set_pev(ParaENT[id],pev_fuser1,Frame);
set_pev(ParaENT[id],pev_frame,Frame);
if(Frame > 254.0) {
engfunc(EngFunc_RemoveEntity, ParaENT[id]);
ParaENT[id] = 0;
}
else {
engfunc(EngFunc_RemoveEntity, ParaENT[id]);
ParaENT[id] = 0;
}
return;
}
if(Button & IN_USE) {
new Float:Velocity[3];
pev(id, pev_velocity, Velocity);
if(Velocity[2] < 0.0) {
if(ParaENT[id] <= 0) {
ParaENT[id] = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"));
if(ParaENT[id] > 0) {
set_pev(ParaENT[id],pev_classname, PARACHUTE_CLASS);
set_pev(ParaENT[id], pev_aiment, id);
set_pev(ParaENT[id], pev_owner, id);
set_pev(ParaENT[id], pev_movetype, MOVETYPE_FLY);
set_pev(ParaENT[id], pev_sequence, 0);
set_pev(ParaENT[id], pev_gaitsequence, 1);
set_pev(ParaENT[id], pev_frame, 0.0);
set_pev(ParaENT[id], pev_fuser1, 0.0);
}
}
if(ParaENT[id] > 0) {
set_pev(id, pev_sequence, 3);
set_pev(id, pev_gaitsequence, 1);
set_pev(id, pev_frame, 1.0);
set_pev(id, pev_framerate, 1.0);
Velocity[2] = (Velocity[2] + 40.0 < FallSpeed) ? Velocity[2] + 40.0 : FallSpeed;
set_pev(id, pev_velocity, Velocity);
if(pev(ParaENT[id],pev_sequence) == 0) {
pev(ParaENT[id],pev_fuser1, Frame);
Frame += 1.0;
set_pev(ParaENT[id],pev_fuser1,Frame);
set_pev(ParaENT[id],pev_frame,Frame);
if(Frame > 100.0) {
set_pev(ParaENT[id], pev_animtime, 0.0);
set_pev(ParaENT[id], pev_framerate, 0.4);
set_pev(ParaENT[id], pev_sequence, 1);
set_pev(ParaENT[id], pev_gaitsequence, 1);
set_pev(ParaENT[id], pev_frame, 0.0);
set_pev(ParaENT[id], pev_fuser1, 0.0);
}
}
}
}
else if(ParaENT[id] > 0) {
engfunc(EngFunc_RemoveEntity, ParaENT[id]);
ParaENT[id] = 0;
}
}
else if((OldButton & IN_USE) && ParaENT[id] > 0) {
engfunc(EngFunc_RemoveEntity, ParaENT[id]);
ParaENT[id] = 0;
}
}
}
public EVENT_TeamSwap() {
new iPlayers[32], iNum;
get_players(iPlayers, iNum, "ch");
if(iNum) {
new id;
for(--iNum; iNum >= 0; iNum--) {
id = iPlayers[iNum];
BeginDelayedTeamChange(id);
}
}
}
public BeginDelayedTeamChange(id) {
switch(id) {
case 1..6: set_task(0.1, "ChangeUserTeamWithDelay", id + SWITCH_TASK);
case 7..13: set_task(0.2, "ChangeUserTeamWithDelay", id + SWITCH_TASK);
case 14..20: set_task(0.3, "ChangeUserTeamWithDelay", id + SWITCH_TASK);
case 21..26: set_task(0.4, "ChangeUserTeamWithDelay", id + SWITCH_TASK);
case 27..32: set_task(0.5, "ChangeUserTeamWithDelay", id + SWITCH_TASK);
}
}
public ChangeUserTeamWithDelay(id) {
id -= SWITCH_TASK;
if(!is_user_connected(id)) return 1;
switch(cs_get_user_team(id)) {
case CS_TEAM_T:cs_set_user_team(id, CS_TEAM_CT);
case CS_TEAM_CT:cs_set_user_team(id, CS_TEAM_T);
}
return 0;
}
/*public Register_BlockBuy() {
register_clcmd("buy", "CMDCheckAndBlockBuy")
register_clcmd("Buy", "CMDCheckAndBlockBuy")
register_clcmd("BUY", "CMDCheckAndBlockBuy")
register_clcmd("bUy", "CMDCheckAndBlockBuy")
register_clcmd("buY", "CMDCheckAndBlockBuy")
register_clcmd("jointeam", "CMD_BlockJoinTeam")
register_clcmd("jointeam 1", "CMD_BlockJoinTeam")
register_clcmd("jointeam 2", "CMD_BlockJoinTeam")
register_clcmd("jointeam 3", "CMD_BlockJoinTeam")
register_clcmd("chooseteam", "CMD_BlockChooseTeam")
}
public CMDCheckAndBlockBuy(id) {
console_print(id, "*** Nu ai voie sa foloseti BUY ! ***")
return PLUGIN_HANDLED_MAIN
}
public CMD_BlockJoinTeam(id) {
console_print(id, "*** Nu ai voie sa foloseti JoinTeam ! ***")
return 1;
}
public CMD_BlockChooseTeam(id) {
console_print(id, "*** Nu ai voie sa foloseti JoinTeam ! ***")
return 1;
}*/