AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Scripting Help (https://forums.alliedmods.net/forumdisplay.php?f=11)
-   -   freeze player (https://forums.alliedmods.net/showthread.php?t=298669)

InteX01 06-19-2017 15:38

freeze player
 
I searched and searched and i couldnt find anywhere.....
something like set_user_freeze (but its not that, i know :D)


Example, on command say /freezeme i cant move anywhere, but i can look around.
Code:

register_clcmd("say /freezeme", "freezeMe")

public freezeMe(id)
{
          ............code
}


Natsheh 06-19-2017 15:45

Re: freeze player
 
https://forums.alliedmods.net/showthread.php?t=296406

EFFx 06-19-2017 15:55

Re: freeze player
 
I made this with .inc file if you want:

1. Main plugin:

PHP Code:

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

#define PLUGIN "New Plug-In"
#define VERSION "1.0"
#define AUTHOR "author"

#define isFreezed(%1)            (is_user_alive(%1) && g_bIsFrozen[%1])

#if AMXX_VERSION_NUM < 183
#define MAX_PLAYERS 32
#endif

new bool:g_bIsFrozen[MAX_PLAYERS+1], g_iUserOldSpeed[MAX_PLAYERS+1], g_iUserSpeed[MAX_PLAYERS+1], Float:g_fPlayerViewAngles[MAX_PLAYERS+1][3]
const 
Ham:Ham_Player_ResetMaxSpeed =    Ham_Item_PreFrame

public plugin_init() 
{
    
register_plugin(PLUGINVERSIONAUTHOR)
    
    
RegisterHam(Ham_Player_ResetMaxSpeed"player""ham_Player_ResetMaxSpeed_Post"1)
}

public 
plugin_natives()
{
    
register_library("freeze.inc")
    
    
register_native("set_user_freeze""_set_user_freeze")
    
register_native("get_user_freeze""_get_user_freeze")
}

public 
_set_user_freeze()
{
    new 
id get_param(1)
    new 
bool:bIsForSet bool:get_param(2)
    new 
iType get_param(3)
    new 
iUserPev pev(idpev_flags)
    
    if(
bIsForSet)
    {
        if(!
g_bIsFrozen[id])
        {
            switch(
iType)
            {
                case 
1:
                {
                    
g_iUserOldSpeed[id] = get_cvar_num("sv_maxspeed")
                    
g_iUserSpeed[id] = 0
                
}
                case 
2:
                {
                    
pev(idpev_v_angleg_fPlayerViewAngles[id])
                    
set_pev(idpev_flagsiUserPev FL_FROZEN)
                }
            }
            
g_bIsFrozen[id] = true
        
}
    }
    else
    {
        if(
g_bIsFrozen[id])
        {
            
g_iUserSpeed[id] = g_iUserOldSpeed[id]
            
set_pev(idpev_flagsiUserPev & ~FL_FROZEN)
            
g_bIsFrozen[id] = false
        
}
    }
}

public 
_get_user_freeze()
{
    return 
g_bIsFrozen[get_param(1)]
}

public 
ham_Player_ResetMaxSpeed_Post(id)
{
    if(
isFreezed(id))
    {
        
fm_set_user_speed(idFloat:g_iUserSpeed[id])
    }
}

public 
client_PreThink(id)
{
    if(
isFreezed(id))
    {
        
set_pev(idpev_v_angleg_fPlayerViewAngles[id])
    }
}

fm_set_user_speed(idFloat:MSpeed = -1.0
{
    
engfunc(EngFunc_SetClientMaxspeedidMSpeed)
    
set_pev(idpev_maxspeedMSpeed)
    return 
1


2. Inc file:

Code:

#if defined _freeze_included
    #endinput
#endif

#define _freeze_included

/*
@id                        player's index to freeze
@bIsForSet                true if you want to freeze, false if not
@iType                        Totally freeze/only speed
*/
native set_user_freeze(id, bool:bIsForSet, iType = 1)

/*
@id                        player's index to check freeze
*/
native get_user_freeze(id)

The .inc file must be named as freeze.inc

3. Example usage:

- If you want only to change the player's speed to 0
PHP Code:

set_user_freeze(playertrue1

If you want block everything ( view angle, speed, duck... ( not everything at all ) )

PHP Code:

set_user_freeze(playertrue2

If you want to unfreeze:

PHP Code:

set_user_freeze(playerfalse

I didn't test it yet.


EDIT: Maybe you shoud use the Natsheh's link.

InteX01 06-19-2017 18:15

Re: freeze player
 
Im sorry.... but what should i do with those codes you gave me... first INC code.. i need to compile it somewhere or what... I dont know :D If you could explain step by step.. i would be greatful.

EFFx 06-19-2017 19:24

Re: freeze player
 
3 Attachment(s)
freeze.inc - Put it into the include folder in addons/amxmodx/scripting
freeze.sma - Compile it normally and put in plugins folder, guess I don't need to explain where it's.
FreezeTest - Same as freeze.sma

Tested and it works, only the view block wont block.

Step by step:

1. For check if the player is/ain't freezed.

- If he's freezed

PHP Code:

if(get_user_freeze(id)) 

- If he's not freezed

PHP Code:

if(!get_user_freeze(id)) 

2. For set/unset a completely freeze ( duck, weapon change, jump, shot and scope change )

- For set

PHP Code:

set_user_freeze(playeridtrue2

- For unset

PHP Code:

set_user_freeze(playeridfalse

3. For set/unset normal freeze ( only speed )

- For set

PHP Code:

set_user_freeze(playeridtrue1

- For unset

PHP Code:

set_user_freeze(playeridfalse


CrazY. 06-19-2017 21:44

Re: freeze player
 
EFFx, add a reset user maxspeed native.

EFFx 06-19-2017 23:09

Re: freeze player
 
Isn't the speed turning back when the user type /unfreeze?

CrazY. 06-19-2017 23:26

Re: freeze player
 
Mm, yeah, I did not see this little detail.

Don't is more easy and usefull set_user_maxspeed from fun?

Your code have a problem. If you unset freeze while round is freezed, the player will be allowed to move.

EFFx 06-20-2017 00:33

Re: freeze player
 
I'll check these issues. About set_user_maxspeed(), I don't like to hook CurWeapon, so...

Natsheh 06-20-2017 02:03

Re: freeze player
 
https://forums.alliedmods.net/showpo...42&postcount=9


All times are GMT -4. The time now is 23:08.

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