Skocz do zawartości
Paweł

[CS:GO] Only Knife

Rekomendowane odpowiedzi

O Pluginie:

  • Plugin pozwala na używanie jedynie noża oraz granatów.
  • Plugin wprowadza 4 różne typy rund na serwer.

 

ConVary:

Spoiler

// Ilość zdrowia przy starcie rundy.
// -
// Default: "35"
onlyknife_max_health "35"

// Szansa randomowy typ rundy (1/X)
// -
// Default: "10"
onlyknife_round_chance "10"

 

 

Kod:

Spoiler
/********* [ ChangeLog ] *********

	1.0 - Pierwsze wydanie pluginu.
	
********** [ ChangeLog ] *********/

/* [ Includes ] */
#include <sourcemod>
#include <sdktools>
#include <sdkhooks>
#include <multicolors>
#include <OnlyKnife>

/* [ Compiler Options ] */
#pragma newdecls required
#pragma semicolon 1

/* [ Defines ] */
#define PluginTag 	"{lime}★{green} Only Knife {lime}★{default}"

/* [ ConVars] */
ConVar g_cvRoundChance;
ConVar g_cvHealth;

/* [ Handles ] */
Handle g_hHud;

/* [ Booleans ] */
bool g_bIsGravityRound;
bool g_bIsBhopRound;
bool g_bIsSpeedRound;
bool g_bFirstBlood;

/* [ Chars ] */
char g_sWeaponsCanUse [][] =
{
	"weapon_knife",
	"weapon_decoy",
	"weapon_flashbang",
	"weapon_hegrenade",
	"weapon_smokegrenade",
	"weapon_healthshot",
	"weapon_molotov",
	"weapon_incgrenade",
	"weapon_knife_karambit",
	"weapon_knife_m9_bayonet",
	"weapon_bayonet",
	"weapon_knife_butterfly",
	"weapon_knife_push",
	"weapon_knife_ursus",
	"weapon_knife_stiletto",
	"weapon_knife_gypsy_jackknife",
	"weapon_knife_widowmaker",
	"weapon_knife_gut",
	"weapon_knife_flip",
	"weapon_knife_falchion",
	"weapon_knife_survival_bowie",
	"weapon_knife_tactical"
};
	
/* [ Plugin Author and Informations ] */
public Plugin myinfo =
{
	name = "[CS:GO] Yamakashi - Only Knife [ CORE ]",
	author = Plugin_Author,
	description = "Autorski silnik na serwery typu Only Knife.",
	version = "1.0",
	url = Author_SteamUrl
};

/* [ Plugin Startup ] */
public void OnPluginStart()
{
	/* [ ConVars ] */
	g_cvRoundChance = CreateConVar("onlyknife_round_chance", "10", "Szansa randomowy typ rundy (1/X)");
	g_cvHealth = CreateConVar("onlyknife_max_healt", "35", "Ilość zdrowia przy starcie rundy.");
	
	/* [ Hud ] */
	g_hHud = CreateHudSynchronizer();
	
	/* [ Hooks ] */
	HookEvent("round_start", Event_RoundStart);
	HookEvent("round_end", Event_RoundEnd);
	HookEvent("player_spawn", Event_PlayerSpawn);
	HookEvent("player_death", Event_PlayerDeath);
	
	/* [ Check Player ] */
	LoopClients(i)
		OnClientPutInServer(i);
}

/* [ Standart Actions ] */
public void OnMapStart()
{
	g_bIsGravityRound = false;
	g_bIsBhopRound = false;
	g_bIsSpeedRound = false;
	g_bFirstBlood = false;
	
	AutoExecConfig(true, "OnlyKnife_Core", "yPlugins");
	LoadSounds();
}

public void OnClientPutInServer(int client)
{
	SDKHook(client, SDKHook_WeaponCanUse, WeaponCanUse);
}

public void OnClientDisconnect(int client)
{
	SDKUnhook(client, SDKHook_WeaponCanUse, WeaponCanUse);
}

/* [ Events ] */
public Action Event_RoundStart(Event event, const char[] sName, bool dontBroadcast)
{
	g_bIsGravityRound = false;
	g_bIsBhopRound = false;
	g_bIsSpeedRound = false;
	g_bFirstBlood = false;
	
	int chance = g_cvRoundChance.IntValue;
	int round_type = GetRandomInt(1, chance);
	CPrintToChatAll("%s {darkred}======>> Losowanie Rundy <<======", PluginTag);
	CPrintToChatAll("-"), CPrintToChatAll("-"), CPrintToChatAll("-");
	switch(round_type)
	{
		case 1: {
			g_bIsGravityRound = true;
			CPrintToChatAll("%s Aktualnie gramy rundę ze zmniejszoną{lime}grawitacyją{default}.", PluginTag);
		}
		case 2:{
			g_bIsBhopRound = true;
			CPrintToChatAll("%s Aktualnie gramy rundę {lime}BHOP{default}.", PluginTag);
			SetBhopRound();
		}
		case 3:{
			g_bIsSpeedRound = true;
			CPrintToChatAll("%s Aktualnie gramy rundę ze zwiększoną{lime}prędkością{default}.", PluginTag);
		}
		default: {
			CPrintToChatAll("%s Aktualnie gramy rundę {lime}normalną{default}.", PluginTag);
		}
	}
	CPrintToChatAll("%s {darkred}======>> Losowanie Rundy <<======", PluginTag);
}

public Action Event_RoundEnd(Event event, const char[] sName, bool dontBroadcast)
{
	if(g_bIsBhopRound)
		RemoveBhop();
}

public Action Event_PlayerSpawn(Event event, const char[] sName, bool dontBroadcast)
{
	LoopClients(i)
	{
		int health = g_cvHealth.IntValue;
		SetEntityHealth(i, health);
		
		if(g_bIsGravityRound)
			SetEntityGravity(i, 0.80);
		if(g_bIsSpeedRound)
			SetEntPropFloat(i, Prop_Send, "m_flLaggedMovementValue", 1.3);
	}
}

public Action Event_PlayerDeath(Event event, const char[] sName, bool dontBroadcast)
{
	if(!g_bFirstBlood)
	{
		char sBuffer[16];
		Format(sBuffer, sizeof(sBuffer), "Pierwsza Krew!");
		SetHudTextParams(-1.0, -1.0, 5.0, 255, 0, 0, 255, 0, 0.25, 0.1, 0.8);
		LoopClients(i)
		{
			if(IsPlayerAlive(i))
				PrintHintText(i, "<font size='54'><font color='#ff0000'><b> Pierwsza Krew!</b></font>");
			else
				ShowSyncHudText(i, g_hHud, sBuffer);
					
			EmitSoundToClient(i, "onlyknife_yamakashi/firstblood_sound.mp3");
		}
		g_bFirstBlood = true;
	}
}

/* [ Hook ] */
public Action WeaponCanUse(int client, int weapon)
{
	if(!IsValidClient(client) || !IsPlayerAlive(client))
		return Plugin_Continue;

	char sWeapons[32];
	GetEdictClassname(weapon, sWeapons, sizeof(sWeapons));
	
	for(int i = 0; i < sizeof(g_sWeaponsCanUse); i++)
	{
		if(StrEqual(g_sWeaponsCanUse[i], sWeapons))
			return Plugin_Continue;
	}
	
	return Plugin_Handled;
}

/* [ Helpers ] */
public void SetBhopRound()
{
	SetConVar("sv_enablebunnyhopping", "1");
	SetConVar("sv_autobunnyhopping", "1");
	SetConVar("sv_staminamax", "0");
	SetConVar("sv_airaccelerate", "2000");
	SetConVar("sv_staminajumpcost", "0");
	SetConVar("sv_staminalandcost", "0");
}
	
public void RemoveBhop()
{
	ResetConVarValue("sv_enablebunnyhopping");
	ResetConVarValue("sv_autobunnyhopping");
	ResetConVarValue("sv_staminamax");
	ResetConVarValue("sv_airaccelerate");
	ResetConVarValue("sv_staminajumpcost");
	ResetConVarValue("sv_staminalandcost");
}

public void ResetConVarValue(char[] sCvar)
{
	char sDefault[128];
	ConVar cvar = FindConVar(sCvar);
	if(cvar)
	{
		cvar.GetDefault(sDefault, sizeof(sDefault));
		SetConVarString(cvar, sDefault, true);
	}
}

stock void SetConVar(char[] sCvar, char[] sValue)
{
	ConVar cvar = FindConVar(sCvar);
	SetConVarString(cvar, sValue, true);
	
	int flags = GetConVarFlags(cvar);
	SetConVarFlags(cvar, flags & ~FCVAR_NOTIFY);
}

stock void LoadSounds()
{
	char szSoundPath[PLATFORM_MAX_PATH];
	Format(szSoundPath, sizeof(szSoundPath), "sound/onlyknife_yamakashi/");
	DirectoryListing dlPlugins = OpenDirectory(szSoundPath);
	
	if(dlPlugins != null)
	{
		char sFile[128];
		while(dlPlugins.GetNext(sFile, sizeof(sFile)))
		{
			if(StrContains(sFile, ".mp3", false))
			{
				char szSound[128];
				Format(szSound, sizeof(szSound), "sound/onlyknife_yamakashi/%s", sFile);
				AddFileToDownloadsTable(szSound);
				
				Format(szSound, sizeof(szSound), "onlyknife_yamakashi/%s", sFile);
				PrecacheSound(szSound, true);
			}
		}
	}
	
}

 

 

Download:

firstblood_sound.mp3
Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami!

Edytowane przez Yamakashi

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić obrazków. Dodaj lub załącz obrazki z adresu URL.


×
×
  • Dodaj nową pozycję...