Paweł 3 Napisano 30 Września 2019 (edytowane) 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: Only Knife.rarHej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami! firstblood_sound.mp3Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami! Edytowane 30 Września 2019 przez Yamakashi Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach