Coldown на нож

AS TRO

Участник
Сообщения
1,159
Реакции
750
доброго времени суток) Ну вот, пригодилась и мне помощь с вашей стороны) если на форуме есть доброжелатели, нужно сделать простой плагин:

Чтобы был Coldown на ЛКМ и ПКМ у ножа. Тобишь, если 1 раз ударил с ножа ЛКМ, то следующий удар сможешь сделать только через определенное время(например 3 секунды). Тоже самое можно и сделать для ПКМ) буду очень благодарен)

Под ксго нужно данное чудо)

@AlmazON ты частенько помогаешь :)))
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,756

gibs

Фитиль народного волненья
Сообщения
722
Реакции
407
Мошенник
@AS TRO, это делается довольно просто, путём выставления нэтпропов для оружия:
C-подобный:
SetEntPropFloat(weapon, Prop_Send, "m_flNextPrimaryAttack", fNextPrimaryAttack);
SetEntPropFloat(weapon, Prop_Send, "m_flNextSecondaryAttack", fNextSecondaryAttack);
Где выставляемое значение - это следующее время атаки, как ты понял. Текущее время возвращается функцией GetGameTime(), то-есть через три секунды будет GetGameTime() + 3.0.
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,927
  • Команда форума
  • #5
Я для себя писал функцию на такие случаи.
PHP:
stock void SetNextAttack(int weapon, float duration = 0.0) {
    if (weapon <= MaxClients) return;
    if (!IsValidEntity(weapon)) return;
    float next = GetGameTime() + duration;
    SetEntPropFloat(weapon, Prop_Send, "m_flNextPrimaryAttack", next);
    SetEntPropFloat(weapon, Prop_Send, "m_flNextSecondaryAttack", next);
}
 

666FoX666

Участник
Сообщения
702
Реакции
211
Если такая пьянка пошла, мб мне кто-нибудь под шумок поможет запилить КД между использованием прыжка в воздухе на 2 секунды?)
Пожалуйста :D
 

Вложения

  • sm_doublejump.sp
    4.6 КБ · Просмотры: 5

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,756
КД между использованием прыжка в воздухе
[HIDE="1"]
PHP:
/*
 * Double Jump
 *
 * Description:
 *  Allows players to double-jump
 *  Original idea: NcB_Sav
 *
 * Convars:
 *  sm_doublejump_enabled [bool] : Enables or disable double-jumping. Default: 1
 *  sm_doublejump_boost [amount] : Amount to boost the player. Default: 250
 *  sm_doublejump_max [jumps]    : Maximum number of re-jumps while airborne. Default: 1
 *  sm_doublejump_coldown [time] : The minimum time of re-jumps allowed while already jumping. Default: 2.0
 *
 * Changelog:
 *  v1.0.1Coldown
 *   Add cvar sm_doublejump_coldown.
 *  v1.0.1
 *   Minor code optimization.
 *  v1.0.0
 *   Initial release.
 *
 * Known issues:
 *  Doesn't register all mouse-wheel triggered +jumps
 *
 * Todo:
 *  Employ upcoming OnClientCommand function to remove excess OnGameFrame-age.
 *
 * Contact:
 *  Paegus: paegus@gmail.com
 *  SourceMod: http://www.sourcemod.net
 *  Hidden:Source: http://www.hidden-source.com
 *  NcB_Sav: http://forums.alliedmods.net/showthread.php?t=99228
 */
#define PLUGIN_VERSION		"1.0.1Coldown"

#include <sdktools>


public Plugin:myinfo = {
	name		= "Double Jump",
	author		= "Paegus",
	description	= "Allows double-jumping.",
	version		= PLUGIN_VERSION,
	url			= ""
}

new
	Handle:g_cvJumpBoost	= INVALID_HANDLE,
	Handle:g_cvJumpEnable	= INVALID_HANDLE,
	Handle:g_cvJumpMax		= INVALID_HANDLE,
	Handle:g_cvJumpColdown	= INVALID_HANDLE,
	Float:g_flBoost			= 250.0,
	Float:g_flColdown,
	bool:g_bDoubleJump		= true,
	Float:g_fLastTime[MAXPLAYERS+1],
	g_fLastButtons[MAXPLAYERS+1],
	g_fLastFlags[MAXPLAYERS+1],
	g_iJumps[MAXPLAYERS+1],
	g_iJumpMax
	
public OnPluginStart() {
	CreateConVar(
		"sm_doublejump_version", PLUGIN_VERSION,
		"Double Jump Version",
		FCVAR_NOTIFY
	)
	
	g_cvJumpEnable = CreateConVar(
		"sm_doublejump_enabled", "1",
		"Enables double-jumping.",
		FCVAR_NOTIFY
	)
	
	g_cvJumpBoost = CreateConVar(
		"sm_doublejump_boost", "250.0",
		"The amount of vertical boost to apply to double jumps.",
		FCVAR_NOTIFY
	)
	
	g_cvJumpMax = CreateConVar(
		"sm_doublejump_max", "1",
		"The maximum number of re-jumps allowed while already jumping.",
		FCVAR_NOTIFY
	)
	
	g_cvJumpColdown = CreateConVar(
		"sm_doublejump_coldown", "2.0",
		"The minimum time of re-jumps allowed while already jumping.",
		FCVAR_NOTIFY, true, 0.0
	)
	
	HookConVarChange(g_cvJumpBoost,		convar_ChangeBoost)
	HookConVarChange(g_cvJumpEnable,	convar_ChangeEnable)
	HookConVarChange(g_cvJumpMax,		convar_ChangeMax)
	HookConVarChange(g_cvJumpColdown,		convar_ChangeColdown)
	
	g_bDoubleJump	= GetConVarBool(g_cvJumpEnable)
	g_flBoost		= GetConVarFloat(g_cvJumpBoost)
	g_iJumpMax		= GetConVarInt(g_cvJumpMax)
	g_flColdown		= GetConVarFloat(g_cvJumpColdown)
}

public convar_ChangeBoost(Handle:convar, const String:oldVal[], const String:newVal[]) {
	g_flBoost = StringToFloat(newVal)
}

public convar_ChangeEnable(Handle:convar, const String:oldVal[], const String:newVal[]) {
	if (StringToInt(newVal) >= 1) {
		g_bDoubleJump = true
	} else {
		g_bDoubleJump = false
	}
}

public convar_ChangeMax(Handle:convar, const String:oldVal[], const String:newVal[]) {
	g_iJumpMax = StringToInt(newVal)
}

public convar_ChangeColdown(Handle:convar, const String:oldVal[], const String:newVal[]) {
	g_flColdown = GetConVarFloat(convar)
}

public OnGameFrame() {
	if (g_bDoubleJump) {							// double jump active
		for (new i = 1; i <= MaxClients; i++) {		// cycle through players
			if (
				IsClientInGame(i) &&				// is in the game
				IsPlayerAlive(i)					// is alive
			) {
				DoubleJump(i)						// Check for double jumping
			}
		}
	}
}

stock DoubleJump(const any:client) {
	new
		fCurFlags	= GetEntityFlags(client),		// current flags
		fCurButtons	= GetClientButtons(client)		// current buttons
	
	if (g_fLastFlags[client] & FL_ONGROUND) {		// was grounded last frame
		if (
			!(fCurFlags & FL_ONGROUND) &&			// becomes airbirne this frame
			!(g_fLastButtons[client] & IN_JUMP) &&	// was not jumping last frame
			fCurButtons & IN_JUMP					// started jumping this frame
		) {
			OriginalJump(client)					// process jump from the ground
		}
	} else if (										// was airborne last frame
		fCurFlags & FL_ONGROUND						// becomes grounded this frame
	) {
		Landed(client)								// process landing on the ground
	} else if (										// remains airborne this frame
		!(g_fLastButtons[client] & IN_JUMP) &&		// was not jumping last frame
		fCurButtons & IN_JUMP						// started jumping this frame
	) {
		ReJump(client)								// process attempt to double-jump
	}
	
	g_fLastFlags[client]	= fCurFlags				// update flag state for next frame
	g_fLastButtons[client]	= fCurButtons			// update button state for next frame
}

stock OriginalJump(const any:client) {
	g_iJumps[client]++	// increment jump count
}

stock Landed(const any:client) {
	g_iJumps[client] = 0	// reset jumps count
}

stock ReJump(const any:client) {
	if((g_fLastTime[0] = GetEngineTime()) > g_fLastTime[client])
	if ( 1 <= g_iJumps[client] <= g_iJumpMax) {						// has jumped at least once but hasn't exceeded max re-jumps
		g_iJumps[client]++											// increment jump count
		decl Float:vVel[3]
		GetEntPropVector(client, Prop_Data, "m_vecVelocity", vVel)	// get current speeds
		
		vVel[2] = g_flBoost
		TeleportEntity(client, NULL_VECTOR, NULL_VECTOR, vVel)		// boost player
		g_fLastTime[client] = g_fLastTime[0] + g_flColdown
	}
}

//public OnClientPostAdminCheck(client) g_fLastTime[client] = 0.0;
[/HIDE]
 
Последнее редактирование:
Сверху Снизу