AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Scripting Help (https://forums.alliedmods.net/forumdisplay.php?f=11)
-   -   single use parachute extra item (https://forums.alliedmods.net/showthread.php?t=347522)

xAlecsu 05-02-2024 18:19

single use parachute extra item
 
Hello .I have this plugin for parachute ,and i have 2 problem .
1.I already have parachute without buying from shop.
2.I want to make single use parachute then need to buy again.

PHP Code:

#include <amxmodx>
#include <customshop>
#include <fakemeta>
#include <hamsandwich>

additem ITEM_PARACHUTE
#define PARACHUTE_MODEL "models/parachute.mdl"
#define MAX_PLAYERS    32
#define MarkUserHasParachute(%0)    g_bitHasParachute |= (1<<(%0&31))
#define ClearUserHasParachute(%0)    g_bitHasParachute &= ~(1<<(%0&31))
#define HasUserParachute(%0)        g_bitHasParachute & (1<<(%0&31))

#define _PLUGIN         "[ZP] Parachute"
#define _VERSION             "1.0"
#define _AUTHOR           "H.RED.ZONE"

new g_bitHasParachute 

new g_iUserParachute[MAX_PLAYERS+1]

new 
Float:g_flEntityFrame[MAX_PLAYERS+1]

new 
g_iModelIndex
new g_pCvarFallSpeed

new const PARACHUTE_CLASS[] = "parachute"

enum {
    
deploy,
    
idle,
    
detach
}

public 
plugin_init() 
{
    
register_plugin(_PLUGIN_VERSION_AUTHOR)

    
g_pCvarFallSpeed register_cvar("parachute_fallspeed""30")

    
register_forwardFM_CmdStart"fw_Start" )
    
    
RegisterHam(Ham_Spawn"player""Ham_CBasePlayer_Spawn_Post"1)
    
RegisterHam(Ham_Killed"player""Ham_CBasePlayer_Killed_Post"1)
}

public 
plugin_precache()
{
    
ITEM_PARACHUTE cshop_register_item("Parachute""Parachute (One use)"26001)
    
g_iModelIndex precache_model(PARACHUTE_MODEL)
}

public 
client_putinserver(id) {
    if( 
HasUserParachute(id) ) {
        new 
iEnt g_iUserParachute[id]
        if( 
iEnt ) {
            
RemoveUserParachute(idiEnt)
        }
        
ClearUserHasParachute(id)
    }
}

public 
client_disconnect(id) {
    if( 
HasUserParachute(id) ) {
        new 
iEnt g_iUserParachute[id]
        if( 
iEnt ) {
            
RemoveUserParachute(idiEnt)
        }
        
ClearUserHasParachute(id)
    }
}
public 
Ham_CBasePlayer_Killed_Postid ) {
    if( 
HasUserParachute(id) ) {
        new 
iEnt g_iUserParachute[id]
        if( 
iEnt ) {
            
RemoveUserParachute(idiEnt)
        }
        
ClearUserHasParachute(id)
    }
}

public 
Ham_CBasePlayer_Spawn_Post(id) {
    if( 
is_user_alive(id) ) {
        if( 
HasUserParachute(id) ) {
            new 
iEnt g_iUserParachute[id]
            if( 
iEnt ) {
                
RemoveUserParachute(idiEnt)
            }
        }
        
MarkUserHasParachute(id)
    }
}

RemoveUserParachute(idiEnt) {
    
engfunc(EngFunc_RemoveEntityiEnt)
    
g_iUserParachute[id] = 0
}
    
public 
cshop_item_selected(idiItem)
{
    if(
iItem == ITEM_PARACHUTE)
        
g_iUserParachute[id] = true
}

public 
cshop_item_removed(idiItem)
{
    if(
iItem == ITEM_PARACHUTE)
        
g_iUserParachute[id] = false
}


CreateParachute(id) {
    static 
iszInfoTarget
    
if( !iszInfoTarget ) {
        
iszInfoTarget engfunc(EngFunc_AllocString"info_target")
    }

    new 
iEnt engfunc(EngFunc_CreateNamedEntityiszInfoTarget)
    if( 
iEnt 0) {
        static 
iszClass 0
        
if( !iszClass ) {
            
iszClass engfunc(EngFunc_AllocStringPARACHUTE_CLASS)
        }
        
set_pev_string(iEntpev_classnameiszClass)
        
set_pev(iEntpev_aimentid)
        
set_pev(iEntpev_ownerid)
        
set_pev(iEntpev_movetypeMOVETYPE_FOLLOW)

        static 
iszModel 0
        
if( !iszModel ) {
            
iszModel engfunc(EngFunc_AllocStringPARACHUTE_MODEL)
        }
        
set_pev_string(iEntpev_modeliszModel)
        
set_pev(iEntpev_modelindexg_iModelIndex)

        
set_pev(iEntpev_sequencedeploy)
        
set_pev(iEntpev_gaitsequence1)
        
set_pev(iEntpev_frame0.0)
        
g_flEntityFrame[id] = 0.0
        g_iUserParachute
[id] = iEnt
        MarkUserHasParachute
(id)
        new 
Float:fVecOrigin[3]
        
pev(idpev_originfVecOrigin)
        
        return 
iEnt
    
}
    return 
0
}

public 
fw_Start(id) {
    if( ~
HasUserParachute(id) || !is_user_alive(id) ) {
        return
    }

    new 
Float:flFrame
    
new iEnt g_iUserParachute[id]

    if(
iEnt && pev(idpev_flags) & FL_ONGROUND) {

        if( 
pev(iEntpev_sequence) != detach ) {
            
set_pev(iEntpev_sequencedetach)
            
set_pev(iEntpev_gaitsequence1)
            
set_pev(iEntpev_frame0.0)
            
g_flEntityFrame[id] = 0.0
            set_pev
(iEntpev_animtime0.0)
            
set_pev(iEntpev_framerate0.0)
            return
        }

        
pev(iEntpev_frameflFrame)
        if( 
flFrame 252.0 ) {
            
RemoveUserParachute(idiEnt)
            return
        }

        
flFrame += 2.0

        g_flEntityFrame
[id] = flFrame
        set_pev
(iEntpev_frameflFrame)

        return
    }

    if( 
pev(idpev_button) & IN_USE ) {
        new 
Float:fVecVelocity[3], Float:fVelocity_z
        pev
(idpev_velocityfVecVelocity)
        
fVelocity_z fVecVelocity[2]

        if( 
fVelocity_z 0.0 ) {
            if(
iEnt <= 0) {
                
iEnt CreateParachute(id)
            }

            
fVelocity_z floatmin(fVelocity_z 15.0, -get_pcvar_float(g_pCvarFallSpeed))
            
fVecVelocity[2] = fVelocity_z
            set_pev
(idpev_velocityfVecVelocity)

            if( 
pev(iEntpev_sequence) == deploy ) {
                
flFrame g_flEntityFrame[id]++

                if( 
flFrame 100.0 ) {
                    
set_pev(iEntpev_animtime0.0)
                    
set_pev(iEntpev_framerate0.4)
                    
set_pev(iEntpev_sequenceidle)
                    
set_pev(iEntpev_gaitsequence1)
                    
set_pev(iEntpev_frame0.0)
                    
g_flEntityFrame[id] = 0.0
                
}
                else {
                    
set_pev(iEntpev_frameflFrame)
                }
            }
        }
        else if(
iEnt 0) {
            
RemoveUserParachute(idiEnt)
        }
    }
    else if( 
iEnt && pev(idpev_oldbuttons) & IN_USE ) {
        
RemoveUserParachute(idiEnt)
    }



fysiks 05-03-2024 00:27

Re: single use parachute extra item
 
It looks like you might be able to add:

Code:

ClearUserHasParachute(id)
to the end of the function RemoveUserParachute(). Then remove all uses of MarkUserHasParachute().

Then you need a way to give the parachute. I'm not sure how your shop works so you just need to create whatever it would take to be called by the shop to call MarkUserHasParachute().

This might not be the only changes required but it's a good start. You'll just need to test it. Probably test it by itself without the shop stuff and just have a command to give yourself the parachute for testing purposes.

xAlecsu 05-04-2024 11:55

Re: single use parachute extra item
 
ty ,now it works :)


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

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