Adaugare limita item | Problema !

Cereri de pluginuri noi, skinuri in CS, etc.

Moderators: Moderatori ajutatori, Moderatori, Echipa eXtreamCS.com

Post Reply
User avatar
kerasseN
Membru, skill 0
Membru, skill 0
Posts: 53
Joined: 04 Feb 2020, 00:00
Detinator Steam: Nu
Fond eXtream: 0
Has thanked: 1 time

01 Mar 2022, 16:32

Code: Select all

#include < amxmodx >
#include < hamsandwich >
#include < engine >
#include < zp50_core >
#include < zp50_items >
	
#define _MarkPlayerHasMask(%0)   _bitPlayerHasMask |= (1 << (%0 & 31))
#define _ClearPlayerWithMask(%0)  _bitPlayerHasMask &= ~(1 << (%0 & 31))
#define _PlayerHasMask(%0)       _bitPlayerHasMask & (1 << (%0 & 31))
	
#define _PLUGIN   "[ZP50] Extra item: Gas Mask"
#define _VERSION             "3.0"
#define _AUTHOR           "H.RED.ZONE"

#define EV_INT_nadetype     EV_INT_flTimeStepSound
#define NADETYPE_INFECTION  1111 

new _ItemID

new g_Limit[33]

new cvar_Mask_limit

new _bitPlayerHasMask

new _gMaxPlayers, _gIcon, _gMsgSayText

public plugin_init() {
	register_plugin( _PLUGIN, _VERSION, _AUTHOR )
	
	RegisterHam( Ham_Spawn, "player", "_FW_PlayerSpawn", 1 )
	RegisterHam( Ham_Killed, "player", "_FW_PlayerKilled" )

	cvar_Mask_limit = register_cvar("zp_Mask_limit", "2")
		
	_ItemID = zp_items_register( "\r|Item| \wGasMask", 30 )
	
	_gMaxPlayers = get_maxplayers( )
	_gIcon = get_user_msgid( "StatusIcon" ) 
	_gMsgSayText = get_user_msgid( "SayText" )
}

public plugin_precache() {
	RegisterHam( Ham_Think, "grenade", "_FW_ThinkGrenade", 1 ) 
}

public zp_fw_items_select_post( plr, itemid, ignorecost ) {
        
	if( itemid == _ItemID ) 
	{
		_MarkPlayerHasMask( plr )
		Icon_On( plr )
		ProtoChat(plr, "You now have Gas Mask.");
		g_Limit[plr]++
	}
}

public zp_fw_items_select_pre( plr, itemid ) 
{
	
	if( itemid == _ItemID ) 
	{
		
		if( zp_core_is_zombie(plr))
			return ZP_ITEM_DONT_SHOW;

		static text[32]
		formatex (text, charsmax(text), "[%d/%d]", g_Limit[plr], get_pcvar_num(cvar_Mask_limit))
		zp_items_menu_text_add(text)

		if (g_Limit[plr] >= get_pcvar_num(cvar_Mask_limit))
			return ZP_ITEM_NOT_AVAILABLE;
		
		return ZP_ITEM_AVAILABLE;
	}
	return ZP_ITEM_AVAILABLE;
}

public zp_round_ended(winteam) 
{   
    _bitPlayerHasMask = 0 
}

public NewRound() 
{   
    for (new plr; plr <= _gMaxPlayers; plr++) 
    {                     
        g_Limit[plr] = 0
    }
}

public _FW_ThinkGrenade( iEnt ) {
	
	if( is_valid_ent(iEnt) ) {
		
		if( entity_get_int(iEnt, EV_INT_nadetype) == NADETYPE_INFECTION ) {
			
			for( new plr = 1; plr <= _gMaxPlayers; plr++ ) {
				
				if( is_user_alive(plr) 
				
				&& _PlayerHasMask(plr) ) {
					
					if( get_entity_distance(iEnt, plr) <= 240 ) {
						
						_ClearPlayerWithMask( plr )
						remove_entity( iEnt )
						Icon_Off( plr )
						
						ProtoChat( plr, "Infect nade is removed, you don't have mask anymore." )
					}
				}
			}
		}
	}
}

public zp_fw_core_infect( plr ) {
	_ClearPlayerWithMask( plr ) 
	Icon_Off( plr )
}

public _FW_PlayerSpawn( plr ) {
	_ClearPlayerWithMask( plr ) 
	Icon_Off( plr )
}

public _FW_PlayerKilled( plr ) {
	_ClearPlayerWithMask( plr ) 
	Icon_Off( plr )
}

public client_disconnect( plr ) {
	Icon_Off( plr )
}

public Icon_On( plr ) {
	message_begin( MSG_ONE_UNRELIABLE, _gIcon, { 0, 0, 0 }, plr );
	write_byte( 1 )
	write_string( "dmg_gas" )
	write_byte( 0 )
	write_byte( 255 )
	write_byte( 0 )
	message_end( )
}

public Icon_Off( plr ) {
	message_begin( MSG_ONE_UNRELIABLE, _gIcon, { 0, 0, 0 }, plr )
	write_byte( 0 )
	write_string( "dmg_gas" )
	write_byte( 0 )
	write_byte( 255 )
	write_byte( 0 )
	message_end( )
}

ProtoChat( plr, const sFormat[], any:... ) {
	
	static i; i = plr ? plr : get_player( )
	
	if ( !i ) {
		return PLUGIN_HANDLED;
	}
	
	new sMessage[ 256 ]
	new len = formatex( sMessage, 255, "^x01[^x04ZP^x01] ")
	
	vformat( sMessage[len], 255-len, sFormat, 3 )
	sMessage[ 192 ] = '^0' 
	
	Make_SayText( plr, i, sMessage )
	
	return PLUGIN_CONTINUE
}

get_player( ) {
	for ( new plr; plr <= _gMaxPlayers; plr++ ) {
		if ( is_user_connected(plr) ) {
			return plr
		}
	}
	return PLUGIN_HANDLED
}

Make_SayText( Receiver, Sender, sMessage[] ) {
	if ( !Sender ) {
		return PLUGIN_HANDLED;
	}
	
	message_begin( Receiver ? MSG_ONE_UNRELIABLE : MSG_ALL, _gMsgSayText, {0,0,0}, Receiver )
	write_byte( Sender )
	write_string( sMessage )
	message_end( )
	
	return PLUGIN_CONTINUE;
}
Salut, am o problema am incercat sa pun limita la acest extra item sa il poti cumpara doar de 2 ori pe runda , treaba e ca desi am folosit

Code: Select all

public event_round_start()
{
	_bitPlayerHasMask = 0
}
nu se reseteaza numarul de cumparari al itemului.. chiar daca eu cumpar runda asta 2 gasmask-uri , dau restart la runda si imi arata ca am cumparat deja 2/2 gasmask-uri.. ce am gresit?
RoyalServer 2
lexz
Scripter eXtreamCS
Scripter eXtreamCS
Posts: 922
Joined: 02 Nov 2020, 01:57
Detinator Steam: Da
Fond eXtream: 0
Discord: lexzor#0630
Has thanked: 73 times
Been thanked: 137 times

01 Mar 2022, 22:19

Inregistreaza eventul de new round in plugin init pentru functia respectiva

Code: Select all

register_event("HLTV", "event_new_round", "a", "1=0", "2=0")
si care e scopul prefixului _bit ?

vrei sa faci limitarea pentru fiecare player in parte sau doar 2 masti/runda pentru toti jucatorii?

edit: din cate vad este deja facuta o limitare folosind

Code: Select all

g_Limit[plr]
User avatar
WISHEXEC
Membru, skill +4
Membru, skill +4
Posts: 1683
Joined: 12 Nov 2011, 19:37
Detinator Steam: Da
CS Status: AmxModX
Detinator server CS: DAEVA.RO
Reputatie: Fost Moderator ajutator
Nume anterior : ONEMDX
Location: România
Has thanked: 84 times
Been thanked: 85 times
Contact:

04 Mar 2022, 00:19

reseteaza limita in player spawn post , dupa ce se spawneaza sa fie 0
Post Reply

Return to “Cereri”

  • Information
  • Who is online

    Users browsing this forum: No registered users and 1 guest