Заявка за добяване на лимит на плъгин [ZP] Extra Item Knife Blink + [ZP] Extar Item Survivor

В този раздел можете да подавате всякакви заявки за намиране, изработка или преработка на плъгини/модове.
Аватар
`eXp
Извън линия
Потребител
Потребител
Мнения: 21
Регистриран на: 28 Юли 2018, 10:43
Местоположение: Burgas , Sinemorets (Working at the beach for the summer)
Се отблагодари: 2 пъти
Получена благодарност: 25 пъти
Обратна връзка:

Заявка за добяване на лимит на плъгин [ZP] Extra Item Knife Blink + [ZP] Extar Item Survivor

Мнение от `eXp » 22 Авг 2020, 21:34

Здравейте! :)
Добър вечер! :)

Бих искал ако може да се добави лимит към плъгина и да може да се копува само два пъти на рунд, и когато достигнеш дадения лимит предмета да стане сив в менюто и когато пробваш да закупиш пак да излезне това съобщение - [ZP] You have reached the limit of this item.

Код за потвърждение: Избери целия код

/*================================================================================
	
	-------------------------------------------
	-*- [ZP] Extra Item: Knife Blink 1.2 -*-
	-------------------------------------------
	
	~~~~~~~~~~~~~~~
	- Description -
	~~~~~~~~~~~~~~~
	
	This item/upgrade gives zombies the possibility to move rapidly towards a human over a short distance, when aiming at him and holding down the attack button.
	
================================================================================*/

#include <amxmodx>
#include <fakemeta>
#include <zombieplague>
#include <chr_engine>
#include <cromchat>

#define MIN_DISTANCE 50

/*================================================================================
 [Plugin Customization]
=================================================================================*/

new const g_item_name[] = { "Knife Blink (once)" }
const g_item_cost = 2
const g_iMaxDistance = 300;

/*============================================================================*/

new Float:g_fSpeed = 1000.0;
new Float:g_fDelay = 1.0;

new g_iMaxPlayers;
new g_iEnemy[33];
new g_iInBlink[33];
new Float:g_fLastSlash[33];
new g_iCanceled[33];
new g_iSlash[33];
new g_iBlinks[33];
new g_itemid_blink;

public plugin_init(){
	
	register_plugin("[ZP] Extra Item: Knife Blink", "1.2", "pharse");
	
	g_iMaxPlayers = get_maxplayers();
	
	g_itemid_blink = zp_register_extra_item(g_item_name, g_item_cost, ZP_TEAM_ZOMBIE);
	
	register_forward(FM_TraceLine, "FW_TraceLine_Post", 1);
	register_forward(FM_PlayerPreThink, "FW_PlayerPreThink");
	
	register_event("HLTV", "EVENT_round_start", "a", "1=0", "2=0")
}

// ================================================== //
// 			FORWARDS / EVENTS
// ================================================== //

public FW_TraceLine_Post(Float:start[3], Float:end[3], conditions, id, trace){
	
	if (!CHECK_ValidPlayer(id))
		return FMRES_IGNORED;
	
	new iWeaponID = get_user_weapon(id);
	
	if ( iWeaponID != CSW_KNIFE ){
		
		OP_Cancel(id);
		return FMRES_IGNORED;
	}
	
	new enemy = g_iEnemy[id];
	
	if (!enemy){
		
		enemy = get_tr2(trace, TR_pHit);
		
		if ( !CHECK_ValidPlayer(enemy) || zp_get_user_zombie(enemy) ){
			
			OP_Cancel(id);
			return FMRES_IGNORED;
		}
		
		g_iEnemy[id] = enemy;
	}
	
	return FMRES_IGNORED;
}

public FW_PlayerPreThink(id){
	
	if (!CHECK_ValidPlayer(id))
		return FMRES_IGNORED;
	
	new iWeaponID = get_user_weapon(id);
	
	if ( iWeaponID != CSW_KNIFE || !zp_get_user_zombie(id) ){
		
		OP_Cancel(id);
		return FMRES_IGNORED;
	}
	
	if ( g_iBlinks[id] == 0 )
		return FMRES_IGNORED;
	
	new button = pev(id,pev_button);
	
	if ( !(button & IN_ATTACK) && !(button & IN_ATTACK2) ){
		
		OP_Cancel(id)
		return FMRES_IGNORED;
	}
	
	if (g_iSlash[id])
		g_iSlash[id] = 0;
	
	OP_NearEnemy(id);
	
	if( g_iInBlink[id] ){
		
		OP_SetBlink(id);
		OP_Blink(id);
		g_iCanceled[id] = 0;
	}

	return FMRES_IGNORED;
}

// Player buys our upgrade, add one blink
public zp_extra_item_selected(player, itemid)
{
	if (itemid == g_itemid_blink){
		
		g_iBlinks[player] += 1;
		new name[32]
		get_user_name(player, name, 31)
		CC_SendMessage(0, "^4[ZP]^3 %s^1 bought ^4%d Knife Blinks", name, g_iBlinks[player]);
	}
}

// Reset blinks for all players on newround
public EVENT_round_start()
{
	for (new id; id <= 32; id++) g_iBlinks[id] = 0;
}

// ================================================== //
// 			OPERATIONS
// ================================================== //

public OP_NearEnemy(id){
	
	new enemy = g_iEnemy[id];
	new Float:time = get_gametime();
	
	if (!enemy || g_fLastSlash[id]+g_fDelay>time){
		
		g_iInBlink[id] = 0;
		return;
	}
	
	new origin[3], origin_enemy[3];
	
	get_user_origin(id, origin, 0);
	get_user_origin(enemy, origin_enemy, 0);
	
	new distance = get_distance(origin, origin_enemy);
	
	if ( MIN_DISTANCE<=distance<=g_iMaxDistance){
		
		g_iInBlink[id] = 1;
		return;
		
	}else if (MIN_DISTANCE>distance && g_iInBlink[id])
	{
		OP_Slash(id);
	}
	OP_Cancel(id);
}

public OP_Blink(id){
	
	new Float:new_velocity[3];
	new enemy = g_iEnemy[id];
	new Float:origin_enemy[3];
	
	pev(enemy, pev_origin, origin_enemy);
	entity_set_aim(id, origin_enemy);
	
	get_speed_vector2(id, enemy, g_fSpeed, new_velocity)
	set_pev(id, pev_velocity, new_velocity);
}

public OP_Cancel(id){
	
	g_iInBlink[id] = 0;
	g_iEnemy[id] = 0;
	if (!g_iCanceled[id]){
		
		OP_SetBlink(id);
		g_iCanceled[id] = 1;
	}
}

public OP_Slash(id){
	
	set_pev(id, pev_velocity, {0.0,0.0,0.0});		// stop player's blink
	
	new weaponID = get_user_weapon(id, _, _);
	
	if(weaponID == CSW_KNIFE){
		
		new weapon[32]
		
		get_weaponname(weaponID,weapon,31)
		
		new ent = fm_find_ent_by_owner(-1,weapon,id)
		
		if(ent){
			
			set_pdata_float(ent,46, 0.0);
			set_pdata_float(ent,47, 0.0);
			g_iSlash[id] = 1;
			g_fLastSlash[id] = get_gametime();
			g_iBlinks[id] -= 1;
			new name[32];
			get_user_name(id,name,31)
			CC_SendMessage(0, "^4[ZP]^3 %s^1 just used a^4 Knife Blink^1 [^1Blinks remaining:^4 %d^1 ]", name, g_iBlinks[id]);
		}
	}  
}

public OP_SetBlink(id){
	
	new blink = g_iInBlink[id];
	
	if (blink>1)
		return;
	
	if (blink)
		g_iInBlink[id] += 1;
}

// ================================================== //
// 			CHECKS
// ================================================== //

public CHECK_ValidPlayer(id){
	
	if (1<=id<=g_iMaxPlayers && is_user_alive(id))
		return 1;
	
	return 0;
}

// from fakemeta_util.inc
stock fm_find_ent_by_owner(index, const classname[], owner, jghgtype = 0) {
	new strtype[11] = "classname", ent = index;
	switch (jghgtype) {
		case 1: strtype = "target";
		case 2: strtype = "targetname";
	}

	while ((ent = engfunc(EngFunc_FindEntityByString, ent, strtype, classname)) && pev(ent, pev_owner) != owner) {}

	return ent;
}
[\code]
Последно промяна от `eXp на 24 Авг 2020, 17:44, променено общо 1 път.
Mercedes-Benz

Аватар
`eXp
Извън линия
Потребител
Потребител
Мнения: 21
Регистриран на: 28 Юли 2018, 10:43
Местоположение: Burgas , Sinemorets (Working at the beach for the summer)
Се отблагодари: 2 пъти
Получена благодарност: 25 пъти
Обратна връзка:

Заявка за добяване на лимит на плъгин [ZP] Extra Item Knife Blink + [ZP] Extar Item Survivor

Мнение от `eXp » 22 Авг 2020, 21:43

Бих искал ако може да се направи survivor-a да може да се копува веднъж на всеки пет рунда и да неможе да се копува по време на игра, и например ако някой пробва да закупи по време на игра да излезне това съобщение - [ZP] You can buy Survivor only before the round start! и ако някой например вече е закупил и пробва да купи отново да изпише колко рунда остават за да може да закупиш отново survivor.

Код за потвърждение: Избери целия код

#include <amxmodx>
#include <zombieplague>

#define PLUGIN "[ZP] Extra Item: Survivor"
#define VERSION "0.1"
#define AUTHOR "aOx"

new g_buysurv
new g_msgSayText
new g_maxplayers

new pcvar_enabled, pcvar_cost, pcvar_hudtime

public plugin_init()
{
	register_plugin( PLUGIN, VERSION, AUTHOR )
	
	pcvar_enabled = register_cvar( "zp_surv_buy", "1" )
	pcvar_cost = register_cvar( "zp_surv_cost", "80" )
	pcvar_hudtime = register_cvar( "zp_surv_hudtime", "2.0" )
	
	g_buysurv = zp_register_extra_item( "Survivor", get_pcvar_num( pcvar_cost ) , ZP_TEAM_ANY )
	
	g_maxplayers = get_maxplayers()
	g_msgSayText = get_user_msgid( "SayText" )
	
	register_cvar( "zp_extra_survivor", VERSION, FCVAR_SERVER|FCVAR_EXTDLL|FCVAR_UNLOGGED|FCVAR_SPONLY )
}

public zp_extra_item_selected( id, item )
{
	if( !get_pcvar_num( pcvar_enabled ) )
		return PLUGIN_HANDLED
	
	if( item == g_buysurv )
	{
	// Rus : Уберите коменты что бы можно было покупать выжевшего только в начале раунда
	// En  : Would clean Comments that it was possible to buy Survivor only in the round beginning
//	if( zp_has_round_started() )
//	{
//		colored_print( id, "^x04[ZP]^x01 Need buy Survivor prior to the beginning of a round!" )
//		return ZP_PLUGIN_HANDLED
//	}

		zp_make_user_survivor( id )
		colored_print( id, "^x04[ZP]^x01 Вы купили Выжевшего!" )
		set_task( get_pcvar_float( pcvar_hudtime ), "survivor_message", id )
	}
	return PLUGIN_HANDLED
}

public survivor_message( id )
{
	new szName[ 32 ]
	get_user_name( id, szName, 31 )
	set_hudmessage( 255, 0, 0, 0.05, 0.45, 1, 0.0, 5.0, 1.0, 1.0, -1 )
	show_hudmessage( 0, "%s Buy survivor!", szName )
}

stock colored_print( target, const message[],  any:... )
{
	static buffer[ 512 ]

	if( !target )
	{
		static player
		for( player = 1; player <= g_maxplayers; player++ )
		{
			if ( !is_user_connected( player ) )
				continue;
			
			vformat( buffer, charsmax( buffer ), message, 3 )
			
			message_begin( MSG_ONE_UNRELIABLE, g_msgSayText, _, player )
			write_byte( player )
			write_string( buffer )
			message_end()
		}
	}

	else
	{
		vformat( buffer, charsmax( buffer ), message, 3 )
		
		message_begin( MSG_ONE, g_msgSayText, _, target )
		write_byte( target )
		write_string( buffer )
		message_end()
	}
}

		
	
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ ansicpg1251\\ deff0\\ deflang1049{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ f0\\ fs16 \n\\ par }
*/
[\code]
Mercedes-Benz

Публикувай отговор
  • Подобни теми
    Отговори
    Преглеждания
     Последно мнение

Обратно към “Заявки за плъгини”

Кой е на линия

Потребители разглеждащи този форум: Bing [Bot] и 2 госта