Skocz do zawartości

Nowy szablon forum

mygo.pl

Stworzyliśmy dla Was nowy wygląd forum. Z pewnością znajdziesz rzeczy, które wg Ciebie mogą zostać zmienione - wspomnij o tym w specjalnym wątku.

Czytaj więcej

Jak założyć własną sieć

serwerów CS

Zastanawiasz się nad prowadzeniem własnej sieci serwerów? Przeczytaj podstawowe informacje, na które należy zwrócić uwagę, przy takim projekcie.

Czytaj więcej

Tworzymy spis sieci

dodaj swoją

Dodaj sieć do której należysz, pozwoli to na promocję i budowę ogólnopolskiej bazy sieci CS.

Czytaj więcej

RSSD7 N4D JetPack


MYGO.pl
 Udostępnij

Rekomendowane odpowiedzi

  • RSSy
D i 5 7 i n c T's JetPack



687474703a2f2f6269742e6c792f4437496d6744
Non-player dependant JetPack entity.

Compatible with Zombie Plague 4.3(will add ZP5 support later).

Runs on any GoldSource(Half-Life 1) engine game.

Supports Counter-Strike: Condition Zero bots.

Short video:




687474703a2f2f6269742e6c792f4437496d6753
Command to buy: say jp
Command to give jetpack as an admin with amx_cvar access: say jp name

CVar list(they are self explanatory):
PHP Code:

D7N4DJPVelocityMax 265.0
D7N4DJPFuelRegenPercentage 3.757
D7N4DJPRemoveTime 600.0
D7N4DJPFuelRegenStartDelay 5
D7N4DJPFuelRegenInterval 0.1
D7N4DJPFuelConsumptionPercentage 1.0
D7N4DJPVelocityAcceleration 50.0
D7N4DJPThrustDelay 0.05
D7N4DJPPickUpCooldown 0.3
D7N4DJPCost 7500 



687474703a2f2f6269742e6c792f4437496d674c
None.



687474703a2f2f6269742e6c792f4437496d674e
This plug-in requires the following:
- BitSum stocks include file (bitsums.inc). Attached along below.
- Optional: Ham Bots API. Latest version as of 2015 December 22 of the script(cs_ham_bots_api.sma) and include(cs_ham_bots_api.inc) are attached along below.

To enable support for CZ bots(Ham Bots API required), simply uncomment the following line and recompile:
PHP Code:

//#include <cs_ham_bots_api> 

-->
PHP Code:

#include <cs_ham_bots_api> 

Get source and compile locally.



687474703a2f2f6269742e6c792f4437496d6743
yokomo - For his original N4D JetPack plug-in which mine is based on.
MeRcyLeZZ - For his HamSandwich register bots API.
dorin2oo7 - For his images I used to style up my post.
NiHiLaNTh, schmurgel1983, KliPPy, meTaLiCroSS - For being true friends and always helping and teaching me new stuff.



687474703a2f2f6269742e6c792f4437496d6743
Code:

T = needs testing
X = done
- = cancelled

[X] dead and/or zombie bit
[X] movetype_follow entity
[X] follow entity glow depending on fuel?
[X] make all the variable names descriptive
[X] upper the customization parts
[X] cs-like drop system
[X] time-based flight(+max thrusts per second)
[X] fix fuel regen task
[X] fix jetpack disappearing on spawn/new round sometimes
[X] fix incorrect rendering color?
[X] fix bots not fully using the fuel
[T] bypass the acceleration cvar if value is <= 180.0 and velocity is 0.0
[X] fix icon disappearing on resethud
[X] custom keys to press
[X] (re)pick up delay
[X] (re)pick up delay cvar
[-] velocity by aim remove X vector?
[T] fixed bug where dead players could fly with jetpack after not fully losing it on death(mode not started)
[T] fixed bug where enable pickup task would remain active after entity was removed after drop
[T] added removing the update hud task wherever it was necessary
[T] fixed bug where entity iID wouldn't be removed from the jetpack list array when entity was removed after drop
[T] changed the function which was removing all of the jetpacks to be able to remove only a single specified jetpack too
[T] fix jetpacks getting removed from players which died before round mode start
[-] initialize all information on entity create
[-] delete all information on entity remove?
v0.3.6
[T] add chat commands to buy and give jp as admin
[T] add support for zp 4
[T] add random chance for bot to buy
[T] hold jump to fly
[T] cvar to find servers running the plugin
[X] flame sprite reposition
[X] no fall damage for bots
[X] fix cvars not caching at the start of the map because round start doesn't trigger
v0.4.4
[ ] remove fakemeta or engine
[ ] remove unnecessary code
[ ] optimize
[ ] cvars for enabling/customizing icon
[ ] cvars for enabling/customizing player model
[ ] admin menu and/or commands to give/take/drop item
[ ] time-based jetpack (ac/de)celeration
[ ] cvar to bypass the max thrusts per second if velocity is < than a certain value(default 180.00001)
[ ] cooldown -1 = as soon as the player touches the ground
[ ] find out the player's exact deceleration rate for any gravity level
[ ] trail instead of sprite message
[ ] fix velocity_by_aim messing with our vertical velocity
[ ] custom touch forward
[ ] make a simple cvar for how long it should take to fully refuel and remove the rest?
[ ] add support for zp 5
[ ] multi lang



Code(for easy readability):
PHP Code:

// Modules - global
#include <amxmodx>
#include <engine>
#include <fakemeta>
#include <hamsandwich>

// Plug-in APIs
//#include <cs_ham_bots_api>

// Stocks
#include <amxmisc>
#include <bitsums>
//#include <D7Debug>

new const g_szConstVersion[] = "0.4.4";

// Natives
native cs_get_user_money(index);
native cs_set_user_money(indexmoneyflash 1);
native zp_register_extra_item(const name[], costteams)
native zp_force_buy_extra_item(iditemidignorecost 0)
native zp_get_user_zombie(id)

// Forwards
forward zp_extra_item_selected(iditemid)

#define ZP_PLUGIN_HANDLED 97
#define ZP_TEAM_ZOMBIE (1<<0)
#define ZP_TEAM_HUMAN (1<<1)
#define ZP_TEAM_NEMESIS (1<<2)
#define ZP_TEAM_SURVIVOR (1<<3)




//new const g_szEntityClassName[] = "info_target";
new const g_szClassNameJetPack[] = "D7N4DJetpack";

new const 
g_szModelPJetPack[] = "models/p_longjump.mdl";
new const 
g_szModelWJetPack[] = "models/w_longjump.mdl";
new const 
g_szSpriteJetPackFlame[] = "sprites/rjet1.spr"// rjet1, stmbal1, WXplo1, xsmoke1
new const g_szSoundJetPackPickUp[] = "items/gunpickup2.wav";
new const 
g_szSoundJetPackFly[] = "jetpack.wav";
new const 
g_szSoundJetPackEmpty[] = "jp_blow.wav";

new 
g_iIDSpriteFlame;

new 
g_iBsConnectedg_iBsAlive;

new 
g_iMaxPlayersg_iIDItem;

#define is_user_inserver(%1) ((1 <= %1 <= g_iMaxPlayers) && bitsum_get(g_iBsConnected, %1))

public plugin_natives()
{
    
set_native_filter("fwNativeFilter")
}

public 
fwNativeFilter(const szName[], const iID, const iTrap)
{
    return (!
iTrap) ? PLUGIN_HANDLED PLUGIN_CONTINUE
}

public 
plugin_precache()
{
    
g_iIDSpriteFlame precache_model(g_szSpriteJetPackFlame);
    
    
precache_sound(g_szSoundJetPackPickUp)
    
precache_sound(g_szSoundJetPackFly)
    
precache_sound(g_szSoundJetPackEmpty)
    
    
precache_model(g_szModelPJetPack)
    
precache_model(g_szModelWJetPack)
}

new 
g_iIDEntityJetPack[33];
new 
/*g_bitHoldingButtons, */g_iBsDeadOrZombieg_iBsBot;

const 
g_fFuelConsumed pev_fuser1;
const 
g_fNextThrust pev_fuser2;
const 
g_fNextRefuel pev_fuser3;
const 
g_fThrottleVelocity pev_fuser4//g_fNextAcceleration
const g_bIsRefueling pev_iuser2;
//const g_fNextDeceleration = pev_iuser3;
//const g_fThrottleVelocity = pev_iuser4;

enum (+= 10001)
{
    
g_iIDTaskEntityEnablePickUp 10000,
    
g_iIDTaskEntityRemove
}

new 
g_bEscapeMap;
new 
g_iIDPCVarVelocityMaxg_iIDPCVarFuelRegenPercentg_iIDPCVarFuelRegenCoolDown,
g_iIDPCVarFuelRegenIntervalg_iIDPCVarFuelConsumptionPcg_iIDPCVarVelocityAcceleration,
Float:g_fCachedVelocityMaxFloat:g_fCachedFuelRegenPercentFloat:g_fCachedFuelRegenCoolDown,
Float:g_fCachedFuelRegenIntervalFloat:g_fCachedFuelConsumptionPercentFloat:g_fCachedVelocityAcceleration;

new 
g_iIDPCVarRemoveAfterDropg_iIDPCVarThrustMinimumDelayg_iIDPCVarPickUpCoolDowng_iIDPCVarCost;

public 
plugin_init()
{
    
register_plugin("D7 N4D JetPack""0.3.6""D i 5 7 i n c T, Bad_Bud, ZmOutStanding, ConnorMcLeod, wbyokomo, NiHiLaNTh")
    
    
register_cvar("D7N4DJPVersion"g_szConstVersionFCVAR_SERVER FCVAR_SPONLY)
    
set_cvar_string("D7N4DJPVersion"g_szConstVersion)
    
    
register_event("HLTV""fwEvHLTVRoundStart""a""1=0""2=0")
    
register_event("ResetHUD""fwEventPlayerResetHUD""b")
    
    
register_touch(g_szClassNameJetPack"player""fwJetPackTouch")
    
register_think(g_szClassNameJetPack"fwJetPackThink")
    
    
RegisterHam(Ham_Spawn"player""fwHamSpawnPlayer"1)
    
RegisterHam(Ham_Killed"player""fwHamKilledPlayer"1)
    
//RegisterHam(Ham_TakeDamage, "player", "fwHamTakeDamagePlayer", 1)
    //RegisterHam(Ham_Player_Jump, "player", "fwHamPlayerJump")
    
    #if defined _cs_ham_bots_api_included
    
RegisterHamBots(Ham_Spawn"fwHamSpawnPlayer"1)
    
RegisterHamBots(Ham_TakeDamage"fwHamTakeDamagePlayerPre")
    
RegisterHamBots(Ham_Killed"fwHamKilledPlayer"1)
    
//RegisterHamBots(Ham_TakeDamage, "fwHamTakeDamagePlayer", 1)
    //RegisterHamBots(Ham_Player_Jump, "fwHamPlayerJump")
    #endif
    
    
g_iIDPCVarVelocityMax register_cvar("D7N4DJPVelocityMax""265.0")
    
g_iIDPCVarFuelRegenPercent register_cvar("D7N4DJPFuelRegenPercentage""3.757")
    
    
g_iIDPCVarRemoveAfterDrop register_cvar("D7N4DJPRemoveTime""600.0")
    
    
g_iIDPCVarFuelRegenCoolDown register_cvar("D7N4DJPFuelRegenStartDelay""5")
    
g_iIDPCVarFuelRegenInterval register_cvar("D7N4DJPFuelRegenInterval""0.1")
    
g_iIDPCVarFuelConsumptionPc register_cvar("D7N4DJPFuelConsumptionPercentage""1.0")
    
g_iIDPCVarVelocityAcceleration register_cvar("D7N4DJPVelocityAcceleration""50.0")
    
g_iIDPCVarThrustMinimumDelay register_cvar("D7N4DJPThrustDelay""0.05")
    
g_iIDPCVarPickUpCoolDown register_cvar("D7N4DJPPickUpCooldown""0.3")
    
g_iIDPCVarCost register_cvar("D7N4DJPCost""7500")
    
    
register_clcmd("drop""fwClCmdDrop")
    
register_clcmd("say""fwClCmdSay")
    
register_clcmd("say_team""fwClCmdSay")
    
    new 
szTemp[32];
    
get_mapname(szTempcharsmax(szTemp))
    
    if (
containi(szTemp"escape") != -|| containi(szTemp"ze_") != -|| containi(szTemp"atix") != -1)
        
g_bEscapeMap true;
    
    
//register_forward(FM_Touch, "fwFmTouch", 1)
    
    
g_iMaxPlayers get_maxplayers();
    
    
//register_message(g_iIDMsgDeath, "fwMsgDeathPre")
    
    
get_cvar_string("zp_version"szTempcharsmax(szTemp))
    
    if (
szTemp[0] && containi(szTemp"5.0.") == -&& containi(szTemp"5.1.") == -1)
        
g_iIDItem zp_register_extra_item("D7 JetPack"20ZP_TEAM_HUMAN ZP_TEAM_SURVIVOR);
    
    
//ftD7Log(_, _, "zp_version: ^"%s^". g_iIDItem: %d.", szTemp, g_iIDItem)
}

public 
plugin_cfg()
    
fwEvHLTVRoundStart()

public 
fwClCmdSay(const iID)
{
    new 
szTemp[31 1], iTemp;
    
read_args(szTempcharsmax(szTemp))
    
    
//ftD7Log(_, _, szTemp)
    
    
trim(szTemp)
    
remove_quotes(szTemp)
    
replace(szTempcharsmax(szTemp), "/""")
    
    
iTemp containi(szTemp" ");
    
    if (
iTemp > -1)
        
szTemp[iTemp] = EOS;
    
    if (!
equali(szTemp"jp") && !equali(szTemp"jetpack") && !equali(szTemp"jet"))
        return 
PLUGIN_CONTINUE;
/*    
    if (iTemp > -1)
    {
        //szTemp[iTemp] = ' ';
        format(szTemp, charsmax(szTemp), szTemp[iTemp + 1])
    }*/
    
    //ftD7Log(_, _, szTemp)
    
    
if (iTemp > -&& get_user_flags(iID) & ADMIN_CVAR)
    {
        
iTemp cmd_target(iIDszTemp[iTemp 1], CMDTARGET_ALLOW_SELF);
        
        if (!
iTemp)
        {
            
ftClientPrintChatColor(iID33"^3%L"iID"CL_NOT_FOUND")
        }
        else
            
ftJpGive(iTemp1)
    }
    else
        
ftJpBuy(iID)
    
    return 
PLUGIN_HANDLED_MAIN;
}

ftJpBuy(const iID)
{
    if (!
g_iIDItem)
    {
        new 
szTemp[8];
        
get_modname(szTempcharsmax(szTemp))
        
        if (
equali(szTemp"cstrike") || equali(szTemp"czero") || equali(szTemp"csv15") || equali(szTemp"cs13"))
        {
            if (
cs_get_user_money(iID) < get_pcvar_num(g_iIDPCVarCost))
                
ftClientPrintChatColor(iID33"^3You don't have enough money^1!")
            else if (
ftJpGive(iID))
            {
                
cs_set_user_money(iIDcs_get_user_money(iID) - get_pcvar_num(g_iIDPCVarCost))
            }
        }
    }
    else
        
zp_force_buy_extra_item(iIDg_iIDItem)
}

ftJpGive(const iID, const bDrop 0)
{
    if (
g_bEscapeMap && !(get_user_flags(iID) & ADMIN_CVAR))
    {
        
ftClientPrintChatColor(iID33"^3You can't use JetPack on escape maps^1!")
        
        return 
PLUGIN_CONTINUE;
    }
    else if (
g_iIDEntityJetPack[iID])
    {
        if (!
bDrop)
        {
            
ftClientPrintChatColor(iID33"^3You already have a JetPack^1!")
            
            return 
PLUGIN_CONTINUE;
        }
        else
            
DropJetPack(iID)
    }
    
    new 
iEntityID create_entity("info_target");
    
/*    #if defined DefDebug
    log_to_file(g_szFileDebug, "[Player %d] Has bought a jetpack. Entity created with ID %d.", iID, iEntityID)
    #endif
    */
    
if (!is_valid_ent(iEntityID))
        return 
PLUGIN_CONTINUE;
    
/*    #if defined DefDebug
    log_to_file(g_szFileDebug, "[Player %d] Jetpack entity %d is valid. Adding it to the entity list array.", iID, iEntityID)
    #endif
    */
    
remove_task(iID)
    
    
g_iIDEntityJetPack[iID] = iEntityID;
    
    new 
Float:fVecOrigin[3];
    
pev(iIDpev_originfVecOrigin)
    
    
//engfunc(EngFunc_SetOrigin, iEntityID, fVecOrigin)
    //engfunc(EngFunc_SetModel, iEntityID, g_szModelPJetPack)
    
entity_set_origin(iEntityIDfVecOrigin)
    
entity_set_model(iEntityIDg_szModelPJetPack)
    
    
set_pev(iEntityIDg_fFuelConsumed0.0)
    
set_pev(iEntityIDpev_movetypeMOVETYPE_FOLLOW)
    
set_pev(iEntityIDpev_aimentiID)
    
//set_pev(iEntityID, pev_classname, g_szClassNameJetPack)
    
entity_set_string(iEntityIDEV_SZ_classnameg_szClassNameJetPack)
    
set_pev(iEntityIDpev_solidSOLID_NOT)
    
set_pev(iEntityIDpev_iuser1iID)
    
set_pev(iEntityIDpev_owneriID)
    
set_pev(iEntityIDpev_rendermodekRenderNormal)
    
set_pev(iEntityIDpev_renderfxkRenderFxGlowShell)
    
set_pev(iEntityIDpev_renderamtrandom_float(5.777.57))
    
    
entity_set_float(iEntityIDEV_FL_nextthinkget_gametime())
    
    
//dllfunc(DLLFunc_Spawn, iEntityID)
    
    
ComputeColor(iEntityID0.0iIDfalse)
    
    
emit_sound(iIDCHAN_ITEMg_szSoundJetPackPickUpVOL_NORMATTN_NORM0PITCH_NORM)
    
    
ftClientPrintChatColor(iIDiID"^4You got a JetPack^1! Press and hold ^4JUMP^1 to ^4fly^1.^3 Loading bar = cooldown BEFORE refuel start^1.")
/*    
    #if defined DefDebug
    log_to_file(g_szFileDebug, "[Player %d] Entity %d succesfully created and alocated.", iID, iEntityID)
    #endif*/
    
    
return PLUGIN_HANDLED;
}

public 
zp_extra_item_selected(iIDitem)
{
    if (
item != g_iIDItem)
        return 
PLUGIN_CONTINUE;
    
    if (!
ftJpGive(iID))
        return 
ZP_PLUGIN_HANDLED;
    
    return 
PLUGIN_CONTINUE;
}
/*
public pfn_think(iIDEnt)
{
    static szClassName[32];
    entity_get_string(iIDEnt, EV_SZ_classname, szClassName, charsmax(szClassName))
    
    if (!equal(szClassName, g_szClassNameJetPack))
        return;
    
    fwJetPackEntityThink(iIDEnt)
    
    client_print(0, print_center, "[pfn_think] Triggered.")
}*/

public fwJetPackThink(const iIDEnt)
{
    
fwJetPackEntityThink(iIDEnt)
    
    
//client_print(0, print_center, "[fwJetPackThink] Triggered.")
    
    
entity_set_float(iIDEntEV_FL_nextthinkget_gametime() + 0.001)
}

fwJetPackEntityThink(const iEntityID)
{
    new 
Float:fGameTime get_gametime(), Float:fThrustMinimumDelay get_pcvar_float(g_iIDPCVarThrustMinimumDelay);
    
/*    #if defined DefDebug
    log_to_file(g_szFileDebug, "[JetPack think] Game time: %f | User: %d | Buttons: %d | Refuel time left: %f | Fuel consumed: %f.",
    fGameTime, iUserID, iBitSumButtons, fNextRefuel, fFuelConsumed)
    #endif
    */
    
new iUserID pev(iEntityIDpev_iuser1), Float:fFuelConsumedFloat:fNextRefuel;
    
    
//if (is_user_alive(iUserID))
        //client_print(iUserID, print_center, "[fwJetPackEntityThink] Triggered.")
    
    
pev(iEntityIDg_fFuelConsumedfFuelConsumed)
    
    new 
Float:fNextThrust;
    
pev(iEntityIDg_fNextThrustfNextThrust)
    
    if (
fNextThrust <= fGameTime)
    {
        if (
iUserID && iUserID 33 && fFuelConsumed 100.0)
        {
            new 
iBitSumButtons pev(iUserIDpev_button);
            
            if (
iBitSumButtons IN_JUMP || bitsum_get(g_iBsBotiUserID) && !pev(iEntityIDg_bIsRefueling))
            {
                new 
Float:fVelocity[3];
                
pev(iUserIDpev_velocityfVelocity)
                
                
#if defined DefDebug
                
if (!bitsum_get(g_iBsBotiUserID))
                    
log_to_file(g_szFileDebug"[JetPack think] Player current vertical velocity: %f."fVelocity[2])
                
#endif
                
                
if (fVelocity[2] < g_fCachedVelocityMax)
                {
/*                    #if defined DefDebug
                    log_to_file(g_szFileDebug, "[JetPack think] The current vertical velocity is above or equal to the max(%f). Skipping this frame.", g_fCachedVelocityMax)
                    #endif
                    */
                    
new Float:fVelocityUpNew fVelocity[2]/* + ((fVelocity[2] != 0.0) ? g_fCachedVelocityAcceleration : 181.0)*/;
                    
                    if (
iBitSumButtons IN_FORWARD)
                        
velocity_by_aim(iUserIDfloatround(g_fCachedVelocityMax), fVelocity)
                    else if (
iBitSumButtons IN_BACK)
                        
velocity_by_aim(iUserID, -floatround(g_fCachedVelocityMax), fVelocity)
                    
                    
pev(iEntityIDg_fThrottleVelocityfVelocity[2])
                    
                    
fVelocity[2] += g_fCachedVelocityAcceleration;
                    
                    
set_pev(iEntityIDg_fThrottleVelocityfVelocity[2])
                    
                    
fVelocity[2] += fVelocityUpNew;
                    
                    if (
fVelocity[2] > g_fCachedVelocityMax)
                        
fVelocity[2] = g_fCachedVelocityMax;
                    
                    
#if defined DefDebug
                    
if (!bitsum_get(g_iBsBotiUserID))
                        
log_to_file(g_szFileDebug"[JetPack think] New vertical velocity: %f."fVelocity[2])
                    
#endif
                    
                    
set_pev(iUserIDpev_velocityfVelocity)
                    
                    if (!
random_num(03))
                    {
                        new 
Float:fVecTemp[3];
                        
pev(iUserIDpev_originfVecTemp)
                        
velocity_by_aim(iUserID, -20fVelocity)
                        
                        
// Credits to Sylwester @ AlliedModders
                        //fVelocityUpNew = floatsqroot(fVelocity[0]*fVelocity[0]+fVelocity[1]*fVelocity[1]+fVelocity[2]*fVelocity[2]);
/*                        
                        if (iBitSumButtons & IN_FORWARD)
                        {
                            fVecTemp[0] -= fVelocity[0] * 50.0 / fVelocityUpNew;
                            fVecTemp[1] -= fVelocity[1] * 50.0 / fVelocityUpNew;
                            fVecTemp[2] -= fVelocity[2] * 50.0 / fVelocityUpNew;
                        }
                        else if (iBitSumButtons & IN_BACK)
                        {
                            fVecTemp[0] += fVelocity[0] * 50.0 / fVelocityUpNew;
                            fVecTemp[1] += fVelocity[1] * 50.0 / fVelocityUpNew;
                            fVecTemp[2] += fVelocity[2] * 50.0 / fVelocityUpNew;
                        }*/
                        
                        
fVecTemp[0] += fVelocity[0];
                        
fVecTemp[1] += fVelocity[1];
                        
fVecTemp[2] += fVelocity[2];
                        
fVecTemp[2] -= 20;
                        
                        
engfunc(EngFunc_MessageBeginMSG_PVSSVC_TEMPENTITYfVecTemp0)
                        
write_byte(TE_SPRITE)
                        
engfunc(EngFunc_WriteCoordfVecTemp[0])
                        
engfunc(EngFunc_WriteCoordfVecTemp[1])
                        
engfunc(EngFunc_WriteCoordfVecTemp[2])
                        
write_short(g_iIDSpriteFlame)
                        
write_byte(8//scale in 0.1's
                        
write_byte(157//brightness
                        
message_end()
                        
                        
emit_sound(iEntityIDCHAN_STREAM, (fFuelConsumed <= 75.0) ? g_szSoundJetPackFly g_szSoundJetPackEmptyVOL_NORMATTN_NORM0PITCH_NORM)
                    }
                    
                    
fFuelConsumed += g_fCachedFuelConsumptionPercent;
                    
                    if (
fFuelConsumed 100.0)
                        
set_pev(iEntityIDg_fNextThrustfGameTime fThrustMinimumDelay)
                    
                    
#if defined DefDebug
                    
if (!bitsum_get(g_iBsBotiUserID))
                        
log_to_file(g_szFileDebug"[JetPack think] New fuel consumption percentage: %f."fFuelConsumed)
                    
#endif
                    
                    
set_pev(iEntityIDg_fFuelConsumedfFuelConsumed)
                    
                    
#if defined DefDebug
                    
if (!bitsum_get(g_iBsBotiUserID))
                        
log_to_file(g_szFileDebug"[JetPack think] New thrust will be available in %f seconds."fThrustMinimumDelay)
                    
#endif
                    
                    
ComputeColor(iEntityIDfFuelConsumediUserIDfalse)
                    
                    
fNextRefuel fGameTime g_fCachedFuelRegenCoolDown;
                    
set_pev(iEntityIDg_fNextRefuelfNextRefuel)
                    
set_pev(iEntityIDg_bIsRefuelingfalse)
                    
                    
#if defined DefDebug
                    
if (!bitsum_get(g_iBsBotiUserID))
                        
log_to_file(g_szFileDebug"[JetPack think] New refuel will be available in %f seconds."g_fCachedFuelRegenCoolDown)
                    
#endif
                    
                    
ProgressBar(iUserIDfloatround(g_fCachedFuelRegenCoolDown))
                }
            }
        }
        
        
// Hasn't just been used
        
if (fNextRefuel == 0.0)
        {
            
pev(iEntityIDg_fThrottleVelocityfNextThrust)
            
            if (
fNextThrust 0.0)
            {
                
fNextThrust -= g_fCachedVelocityAcceleration;
                
                if (
fNextThrust 0.0)
                    
fNextThrust 0.0;
                
                
set_pev(iEntityIDg_fThrottleVelocityfNextThrust)
            }
        }
    }
    
    if (
fFuelConsumed 0.0 && fNextRefuel == 0.0)
    {
        
pev(iEntityIDg_fNextRefuelfNextRefuel)
        
        if (
fNextRefuel <= fGameTime)
        {
            
fNextRefuel -= fGameTime;
            
/*            #if defined DefDebug
            log_to_file(g_szFileDebug, "[JetPack think] It's time for the next refuel. Time left: %f.", fNextRefuel)
            log_to_file(g_szFileDebug, "[JetPack think] Current fuel consumption percentage: %f.", fFuelConsumed)
            #endif
            */
            
fFuelConsumed -= g_fCachedFuelRegenPercent;
            
            if (
fFuelConsumed <= 0.0)
            {
                
fFuelConsumed 0.0;
                
set_pev(iEntityIDg_fNextRefuel0.0)
                
set_pev(iEntityIDg_bIsRefuelingfalse)
                
ComputeColor(iEntityIDfFuelConsumediUserIDfalse)
            }
            else
            {
                
set_pev(iEntityIDg_fNextRefuelfGameTime fNextRefuel g_fCachedFuelRegenInterval)
                
set_pev(iEntityIDg_bIsRefuelingtrue)
                
ComputeColor(iEntityIDfFuelConsumediUserIDtrue)
            }
            
            
set_pev(iEntityIDg_fFuelConsumedfFuelConsumed)
            
            
#if defined DefDebug
            
log_to_file(g_szFileDebug"[JetPack think] New fuel consumption percentage: %f. Next refuel in %f seconds."fFuelConsumedfGameTime fNextRefuel g_fCachedFuelRegenInterval)
            
#endif
        
}
    }
}

public 
fwEvHLTVRoundStart()
{
    
RemoveJetPack()
    
    
g_fCachedVelocityMax get_pcvar_float(g_iIDPCVarVelocityMax);
    
g_fCachedFuelRegenPercent get_pcvar_float(g_iIDPCVarFuelRegenPercent);
    
    
g_fCachedFuelRegenCoolDown get_pcvar_float(g_iIDPCVarFuelRegenCoolDown);
    
g_fCachedFuelRegenInterval get_pcvar_float(g_iIDPCVarFuelRegenInterval);
    
g_fCachedFuelConsumptionPercent get_pcvar_float(g_iIDPCVarFuelConsumptionPc);
    
g_fCachedVelocityAcceleration get_pcvar_float(g_iIDPCVarVelocityAcceleration);
}

public 
client_putinserver(iID)
{
    
bitsum_add(g_iBsConnectediID)
    
bitsum_add(g_iBsDeadOrZombieiID)
    
    if (
is_user_bot(iID))
        
bitsum_add(g_iBsBotiID)
}

public 
fwEventPlayerResetHUD(iID)
{
    
remove_task(iID)
    
    
set_task(0.1"TaskResetHUD"iID)
}

public 
TaskResetHUD(const iID)
    if ((
<= iID <= g_iMaxPlayers) && bitsum_get(g_iBsAliveiID) && g_iIDEntityJetPack[iID])
        
ComputeColor(g_iIDEntityJetPack[iID], _iID)

public 
client_disconnect(iID)
{
/*    #if defined DefDebug
    log_to_file(g_szFileDebug, "[Player %d] Disconnected.", iID)
    #endif
    */
    
bitsum_del(g_iBsBotiID)
    
bitsum_add(g_iBsDeadOrZombieiID)
    
    
remove_task(iID g_iIDTaskEntityEnablePickUp)
    
    
DropJetPack(iID)
    
    
remove_task(iID)
    
    
bitsum_del(g_iBsAliveiID)
    
bitsum_del(g_iBsConnectediID)
}

public 
fwHamSpawnPlayer(iID)
{
    
remove_task(iID)
    
    if (!
is_user_alive(iID))
        return;
    
    
bitsum_add(g_iBsAliveiID)
    
    if (
g_iIDItem && zp_get_user_zombie(iID))
        return;
    
/*    #if defined DefDebug
    log_to_file(g_szFileDebug, "[Player %d] Ham spawn post.", iID)
    #endif
    */
    
bitsum_del(g_iBsDeadOrZombieiID)
    
    if (!
g_iIDEntityJetPack[iID])
    {
        if (
bitsum_get(g_iBsBotiID) && !random_num(04))
        {
            
ftJpBuy(iID)
        }
        
        return;
    }
    
/*    #if defined DefDebug
    log_to_file(g_szFileDebug, "[Player %d] Has jetpack with entity iID %d.", iID, g_iIDEntityJetPack[iID])
    #endif
    */
    
set_pev(g_iIDEntityJetPack[iID], pev_iuser1iID)
    
ProgressBar(iID0)
    
/*    #if defined DefDebug
    log_to_file(g_szFileDebug, "[Player %d] Setting fuel level to 0.", iID)
    #endif
    */
    
set_pev(g_iIDEntityJetPack[iID], g_fFuelConsumed0.0)
    
    
ComputeColor(g_iIDEntityJetPack[iID], 0.0iIDfalse)
}

public 
fwHamTakeDamagePlayerPre(const iID, const iIDAttacker, const iIDInflictor, const Float:fDamage, const iBsDamageType)
{
    if (
iBsDamageType != DMG_FALL || !bitsum_get(g_iBsBotiID) || !g_iIDEntityJetPack[iID])
        return 
HAM_IGNORED;
    
    return 
HAM_SUPERCEDE;
}

public 
fwClCmdDrop(iID)
{
    if (
bitsum_get(g_iBsDeadOrZombieiID) || get_user_weapon(iID) != CSW_KNIFE)
        return 
PLUGIN_CONTINUE;
    
    return 
DropJetPack(iID);
}

public 
fwJetPackTouch(iEntityIDiID)
{
    if (
g_iIDEntityJetPack[iID] || bitsum_get(g_iBsDeadOrZombieiID) || task_exists(iID g_iIDTaskEntityEnablePickUp))
        return;
    
    
remove_task(iID)
    
remove_task(iEntityID g_iIDTaskEntityRemove)
    
/*    #if defined DefDebug
    log_to_file(g_szFileDebug, "[Player %d] Touch jetpack entity with ID %d.", iID, iEntityID)
    #endif
    */
    
engfunc(EngFunc_SetModeliEntityIDg_szModelPJetPack)
    
set_pev(iEntityIDpev_movetypeMOVETYPE_FOLLOW)
    
set_pev(iEntityIDpev_aimentiID)
    
set_pev(iEntityIDpev_solidSOLID_NOT)
    
set_pev(iEntityIDpev_owneriID)
    
set_pev(iEntityIDpev_iuser1iID)
    
set_pev(iEntityIDpev_rendermodekRenderNormal)
    
set_pev(iEntityIDpev_renderfxkRenderFxGlowShell)
    
set_pev(iEntityIDpev_renderamtrandom_float(5.777.57))
    
    
g_iIDEntityJetPack[iID] = iEntityID;
    
    
ComputeColor(iEntityID_iID)
    
    
emit_sound(iIDCHAN_ITEMg_szSoundJetPackPickUpVOL_NORMATTN_NORM0PITCH_NORM)
    
    
ftClientPrintChatColor(iIDiID"^4You got a JetPack^1! Press and hold ^4JUMP^1 to ^4fly^1.^3 Loading bar = cooldown BEFORE refuel start^1.")
/*    
    #if defined DefDebug
    log_to_file(g_szFileDebug, "[Player %d] Touch. Entity %d succesfully attached to player.", iID, g_iIDEntityJetPack[iID])
    #endif*/
}

public 
zp_user_infected_post(iID)
{
    
bitsum_add(g_iBsDeadOrZombieiID)
    
DropJetPack(iID)
}

public 
zp_user_humanized_post(iID)
    
bitsum_del(g_iBsDeadOrZombieiID)

public 
fwHamKilledPlayer(iID)
{
    
bitsum_del(g_iBsAliveiID)
/*    #if defined DefDebug
    log_to_file(g_szFileDebug, "[Player %d] Ham killed post.", iID)
    #endif
    */
    
bitsum_add(g_iBsDeadOrZombieiID)
    
    
// Only lose the item permanently if the round has started
//    if (zp_has_round_started())
    
DropJetPack(iID)
/*    else
    {
        remove_task(iID)
        
        if (!g_iIDEntityJetPack[iID])
            return;
        
        ProgressBar(iID, 0)
        IconJetPackFuel(iID, _, 0)
        
        set_pev(g_iIDEntityJetPack[iID], pev_iuser1, iID + 32)
    }*/
}

DropJetPack(const iID)
{
    if (!
g_iIDEntityJetPack[iID])
        return 
PLUGIN_CONTINUE;
    
/*    #if defined DefDebug
    log_to_file(g_szFileDebug, "[Player %d] Drop jetpack with entity iID %d.", iID, g_iIDEntityJetPack[iID])
    #endif
    */
    
remove_task(iID)
    
ProgressBar(iID0)
    
IconJetPackFuel(iID_0)
    
/*    #if defined DefDebug
    log_to_file(g_szFileDebug, "[Player %d] Drop. Setting entity iuser1.", iID)
    #endif
    */
    
set_pev(g_iIDEntityJetPack[iID], pev_iuser10)
    
/*    #if defined DefDebug
    log_to_file(g_szFileDebug, "[Player %d] Drop. Setting entity model.", iID)
    #endif
    */
    
engfunc(EngFunc_SetModelg_iIDEntityJetPack[iID], g_szModelWJetPack)
    
/*    #if defined DefDebug
    log_to_file(g_szFileDebug, "[Player %d] Drop. Setting entity solid state.", iID)
    #endif
    */
    
set_pev(g_iIDEntityJetPack[iID], pev_solidSOLID_TRIGGER)
    
/*    #if defined DefDebug
    log_to_file(g_szFileDebug, "[Player %d] Drop. Setting entity move type.", iID)
    #endif
    */
    
set_pev(g_iIDEntityJetPack[iID], pev_movetypeMOVETYPE_TOSS)
    
/*    #if defined DefDebug
    log_to_file(g_szFileDebug, "[Player %d] Drop. Setting entity aiment.", iID)
    #endif
    */
    
set_pev(g_iIDEntityJetPack[iID], pev_aiment0)
    
/*    #if defined DefDebug
    log_to_file(g_szFileDebug, "[Player %d] Drop. Setting entity origin, velocity and angles.", iID)
    #endif
    */
    
new Float:fOrigin[3], Float:fVelocity[3];
    
    
pev(iIDpev_originfOrigin)
    
set_pev(g_iIDEntityJetPack[iID], pev_originfOrigin)
    
    
engfunc(EngFunc_SetSizeg_iIDEntityJetPack[iID], Float:{ -16.0, -16.0, -15.0 }, Float:{ 16.016.020.0 })
    
    
pev(iIDpev_anglesfOrigin)
    
fOrigin[0] = 0.0;
    
set_pev(g_iIDEntityJetPack[iID], pev_anglesfOrigin)
    
    
velocity_by_aim(iID250fOrigin)
    
pev(iIDpev_velocityfVelocity)
    
    
fVelocity[0] += fOrigin[0];
    
fVelocity[1] += fOrigin[1];
    
fVelocity[2] += fOrigin[2];
    
    
set_pev(g_iIDEntityJetPack[iID], pev_velocityfVelocity)
    
/*    #if defined DefDebug
    log_to_file(g_szFileDebug, "[Player %d] Drop. Setting entity next think.", iID)
    #endif
    */
    
set_task(get_pcvar_float(g_iIDPCVarPickUpCoolDown), "TaskPickUpEnable"iID g_iIDTaskEntityEnablePickUp// prevent drop/pickup exploit
    
set_task(get_pcvar_float(g_iIDPCVarRemoveAfterDrop), "TaskRemove"g_iIDEntityJetPack[iID] + g_iIDTaskEntityRemove)
    
    
g_iIDEntityJetPack[iID] = 0;
    
    return 
PLUGIN_HANDLED;
}

public 
TaskPickUpEnable()
{
    
/* Do nothing */
}

public 
TaskRemove(iEntityID)
{
    
iEntityID -= g_iIDTaskEntityRemove;
    
    
RemoveJetPack(iEntityID)
}

ComputeColor(const iIDFloat:fFuelConsumed = -1.0, const iUserIDbFlash = -1)
{
/*    #if defined DefDebug
    log_to_file(g_szFileDebug, "[Entity %d] Compute color.", iID)
    #endif
    */
    
if (fFuelConsumed == -1.0)
    {
/*        #if defined DefDebug
        log_to_file(g_szFileDebug, "[Entity %d] Compute color. Getting fuel consumption percentage since it's not defined.", iID)
        #endif
        */
        
pev(iIDg_fFuelConsumedfFuelConsumed)
    }
    
/*    #if defined DefDebug
    log_to_file(g_szFileDebug, "[Entity %d] Compute color. Calculating color amounts.", iID)
    #endif
    */
    
new Float:fColorAmounts[3];
    
    if (
fFuelConsumed 100)
        
fFuelConsumed 100.0;
    
    if (
fFuelConsumed != 100.0)
    {
        
fColorAmounts[0] = 255 fFuelConsumed 100// red
        
fColorAmounts[1] = 255 fColorAmounts[0]; // green
        
fColorAmounts[2] = 0.0;
    }
    else
    {
        
fColorAmounts[0] = 157.0;
        
fColorAmounts[1] = 157.0;
        
fColorAmounts[2] = 157.0;
    }
    
/*    #if defined DefDebug
    log_to_file(g_szFileDebug, "[Entity %d] Compute color. Setting entity rendering.", iID)
    #endif
    */
    
set_pev(iIDpev_rendercolorfColorAmounts)
    
    if (!
iUserID// || bitsum_get(g_iBsDeadOrZombie, iUserID)
    
{
/*        #if defined DefDebug
        log_to_file(g_szFileDebug, "[Entity %d] Compute color. User %d is invalid/zombie/dead.", iID, iUserID)
        #endif
        */
        
return;
    }
    
    new 
iColorAmounts[3];
    
    
iColorAmounts[0] = floatround(fColorAmounts[0]);
    
iColorAmounts[1] = floatround(fColorAmounts[1]);
    
iColorAmounts[2] = floatround(fColorAmounts[2]);
    
    if (
bFlash == -1)
    {
/*        #if defined DefDebug
        log_to_file(g_szFileDebug, "[Entity %d] Compute color. Icon flash unspecified. Finding if it should flash or not.", iID)
        #endif
        */
        
if (!pev(iIDg_bIsRefueling))
            
bFlash 0;
        else
            
bFlash 1;
    }
    
    
IconJetPackFuel(iUserIDiColorAmounts, !bFlash 2)
}

stock IconJetPackFuel(const iID, const iColorAmounts[3] = { 0255}, const iMode 1)
{
/*    #if defined DefDebug
    log_to_file(g_szFileDebug, "[Player %d] Icon display. Colors: %d, %d, %d. Display mode: %d.",
    iID, iColorAmounts[0], iColorAmounts[1], iColorAmounts[2], iMode)
    #endif
    */
    
static msgStatusIcon;
    if (!
msgStatusIcon)
        
msgStatusIcon get_user_msgid("StatusIcon");
    
    
message_begin(MSG_ONE_UNRELIABLEmsgStatusIcon_iID)
    
write_byte(iMode// status (0=hide, 1=show, 2=flash)
    
write_string("item_longjump"// sprite name
    
write_byte(iColorAmounts[0])
    
write_byte(iColorAmounts[1])
    
write_byte(iColorAmounts[2])
    
message_end()
}

stock ProgressBar(const iID, const iTime, const iStartPercent 0)
{
/*    #if defined DefDebug
    log_to_file(g_szFileDebug, "[Player %d] Progress bar message. Time: %d. Start position percentage: %d.", iID, iTime, iStartPercent)
    #endif
    */
    
static msgBarTime2;
    if (!
msgBarTime2)
        
msgBarTime2 get_user_msgid("BarTime2");
    
    
message_begin(MSG_ONE_UNRELIABLEmsgBarTime2_iID)
    
write_short(iTime)
    
write_short(iStartPercent)
    
message_end()
}

RemoveJetPack(iIDEnt 0)
{
    if (
iIDEnt && pev_valid(iIDEnt))
    {
        
remove_task(iIDEnt g_iIDTaskEntityRemove)
        
engfunc(EngFunc_RemoveEntityiIDEnt)
        
        return;
    }
    
    
iIDEnt = -1;
    
    while ((
iIDEnt engfunc(EngFunc_FindEntityByStringiIDEnt"classname"g_szClassNameJetPack)) != 0)
    {
        if (!
pev_valid(iIDEnt) || pev(iIDEntpev_iuser1))
            continue;
        
        
remove_task(iIDEnt g_iIDTaskEntityRemove)
        
engfunc(EngFunc_RemoveEntityiIDEnt)
    }
}

ftClientPrintChatColor(const iIDTarget, const iIDSender 0, const szMessage[], any:...)
{
    if (
iIDTarget && !is_user_inserver(iIDTarget))
        return;
    
    static 
szBuffer[192];
    
vformat(szBuffercharsmax(szBuffer), szMessage4)
    
    static const 
D7_CHAT_TAG[] = "^1[^4D7^1] ";
    
format(szBuffercharsmax(szBuffer), "%s%s"D7_CHAT_TAGszBuffer)
    
    static 
iIDMsgSayText;
    if (!
iIDMsgSayText)
        
iIDMsgSayText get_user_msgid("SayText");
    
    if (
iIDTarget)
        
message_begin(MSG_ONEiIDMsgSayText_iIDTarget)
    else
        
message_begin(MSG_ALLiIDMsgSayText)
    
    
write_byte(!iIDSender iIDTarget iIDSender)
    
write_string(szBuffer)
    
message_end()




687474703a2f2f6269742e6c792f4437496d6744
cs_ham_bots_api.sma
cs_ham_bots_api.inc
bitsums.inc

Attached Files
File Type: sma Get Plugin or Get Source (D7N4DJetPack.sma - 30.0 KB)

Przeczytaj cały wpis

Odnośnik do komentarza
Udostępnij na innych stronach

Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
 Udostępnij

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...