Jump to content

[TF2] (Маска против вирусов) Covid-19 Mask


Recommended Posts

  • Administrator

Этот плагин позволяет игрокам носить маски, защищающие их от Covid-19. Внимание, плагин работает только в Team Fortress 2.

Пропишите команду !covid что бы использовать маску.

68747470733a2f2f692e696d6775722e636f6d2f364a67714d61732e706e67.png

Ниже код, на случай того, если я буду удалять файлы в своем профиле:

#include <sourcemod>
#include <tf2_stocks>
#include <clientprefs>
#include <morecolors>


#pragma semicolon 1
#pragma newdecls required

#define PLUGIN_VERSION "1.0"
#define MASK_INDEX 31163

Handle g_hWearableEquip;
Handle g_hCookie;

int g_Mask[MAXPLAYERS+1] = {false,...};

public Plugin myinfo = 
{
	name = "[TF2] Covid-19",
	author = "Tair",
	description = "Gives TF2 players mask against Covid-19",
	version = PLUGIN_VERSION,
	url = "https://forums.alliedmods.net"
}


public void OnPluginStart() 
{
    
	RegConsoleCmd("sm_covid", Command_Mask);
	HookEvent("post_inventory_application", OnResupply);
	g_hCookie  = RegClientCookie("covid_mask", "", CookieAccess_Private);

	GameData hTF2 = new GameData("sm-tf2.games"); // sourcemod's tf2 gamdata

	if (!hTF2)
		SetFailState("This plugin is designed for a TF2 dedicated server only.");

	StartPrepSDKCall(SDKCall_Player);
	PrepSDKCall_SetVirtual(hTF2.GetOffset("RemoveWearable") - 1);    // EquipWearable offset is always behind RemoveWearable, subtract its value by 1
	PrepSDKCall_AddParameter(SDKType_CBaseEntity, SDKPass_Pointer);
	g_hWearableEquip = EndPrepSDKCall();

	if (!g_hWearableEquip)
		SetFailState("Failed to create call: CBasePlayer::EquipWearable");

	delete hTF2; 
}


public Action OnResupply(Handle event, char[] name, bool dontBroadcast)
{
	int client = GetClientOfUserId(GetEventInt(event, "userid"));
	if(g_Mask[client])
    	CreateMask(client);
}


public Action Command_Mask(int client, int args)
{
	if (!g_Mask[client])
	{
		g_Mask[client] = true;
		SetClientCookie(client, g_hCookie, "true");
		CPrintToChat(client,"{gold}★ Covid-19 {white}| Mask is now on! Touch resupply to receive!");
	}
	else
	{
		g_Mask[client] = false;
		SetClientCookie(client, g_hCookie, "false");
		CPrintToChat(client,"{gold}★ Covid-19 {white}| Mask is now off. Touch resupply to remove it!");
	}

	return Plugin_Handled;
}


public void OnClientDisconnect(int client)
{
	g_Mask[client] = false;
}


public void OnClientCookiesCached(int client) 
{
   char value[9];
   GetClientCookie(client, g_hCookie, value, sizeof(value));
   if (StrEqual(value, "true"))
      g_Mask[client] = true;
}


bool CreateMask(int client)
{
	int hat = CreateEntityByName("tf_wearable");
	
	if (!IsValidEntity(hat))
	{
		return false;
	}
	
	char entclass[64];
	GetEntityNetClass(hat, entclass, sizeof(entclass));
	SetEntProp(hat, Prop_Send, "m_iItemDefinitionIndex", MASK_INDEX);	 
	SetEntProp(hat, Prop_Send, "m_bInitialized", 1);
	SetEntData(hat, FindSendPropInfo(entclass, "m_iEntityQuality"), 10);
	SetEntProp(hat, Prop_Send, "m_iEntityLevel", 1);
	
	DispatchSpawn(hat);
	SDKCall(g_hWearableEquip, client, hat);
	return true;
}

 

Covid.smx Covid.sp

Помните, IP-Gamers работает только благодаря вашим пожертвованиям!!!

Link to post

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Similar Content

    • By Ry@N
      Как я понял, администраторы делаю випам цветной чат. Если тот, у кого цветной чат использует специальный символ, например @, то цветное сообщение блокируется, и отправляется обычное. Плагин понравился тем, что у него простой и очень маленький код.
      /* [ Includes ] */ #include <sourcemod> /* [ Compiler Options ] */ #pragma newdecls required #pragma semicolon 1 /* [ Defines ] */ #define MAX_MESSAGE_LENGTH 512 /* [ Chars ] */ static const char g_sSymbols[][] = { "", "", "", "", "", "", "", "", "", "", "", " " }; // White | Green | Blue | Darkblue | Darkred | Gold | Grey | Lightgreen | Lightred | Lime | Purple | Yellow /* [ Plugin Author And Informations ] */ public Plugin myinfo = { name = "[CS:GO] Pawel - [ Block Color Chat ]", author = "Pawel", description = "Block color messages for CS:GO servers by Pawel.", version = "1.0.0", url = "https://steamcommunity.com/id/pawelsteam" }; /* [ Message Modify ] */ public Action OnChatMessage(int &iAuthor, Handle hRecipients, char[] sName, char[] sMessage) { for (int i = 0; i < sizeof(g_sSymbols); i++) { while (StrContains(sMessage, g_sSymbols[i]) != -1) { ReplaceString(sMessage, MAX_MESSAGE_LENGTH, g_sSymbols[i], ""); return Plugin_Changed; } } return Plugin_Continue; }  
      pBlockColorChat.sp pBlockColorChat.smx
    • By Ry@N
      Данный плагин добавляет команду !voice на сервер. Игрок ее прописывает, и после, для этого игрока отключаются микрофоны других игроков. Что бы снова активировать микрофоны надо снова прописать команду !voice.
      Так как мое файловое хранилище постоянно обновляется, и плагин может быть удален, выкладываю исходники в виде кода.
      voice.sp:
      #include <sdktools_voice> #include <clientprefs> ListenOverride g_userFlag[MAXPLAYERS + 1]; Handle g_hCookie; bool g_bVoiceEnable[MAXPLAYERS + 1] = true; public Plugin myinfo = { name = "Voice", author = "bat9xxx", version = "1.0", url = "vk.com/s_plus2018" }; public void OnPluginStart() { RegConsoleCmd("sm_voice", VoiceChange); LoadTranslations(GetEngineVersion() == Engine_SourceSDK2006 ? "voice_old.phrases" : "voice.phrases"); g_hCookie = RegClientCookie("voice_enable", "Включен/выключен", CookieAccess_Public); } public void OnClientCookiesCached(int iClient) { char szValue[4]; GetClientCookie(iClient, g_hCookie, szValue, sizeof(szValue)); if (szValue[0])g_bVoiceEnable[iClient] = view_as<bool>(StringToInt(szValue)); else g_bVoiceEnable[iClient] = true; } public Action VoiceChange(int iClient, int iArgs) { char szBuffer[128]; if (g_bVoiceEnable[iClient] == false) { g_bVoiceEnable[iClient] = true; SetClientCookie(iClient, g_hCookie, "1"); FormatEx(szBuffer, sizeof(szBuffer), "%t %t", "Prefix", "Enable"); g_userFlag[iClient] = Listen_Yes; } else { g_bVoiceEnable[iClient] = false; SetClientCookie(iClient, g_hCookie, "0"); FormatEx(szBuffer, sizeof(szBuffer), "%t %t", "Prefix", "Disable"); g_userFlag[iClient] = Listen_No; } PrintToChat2(iClient, szBuffer); for (int i = 1; i <= MaxClients; i++) { if (IsClientInGame(i) && !IsFakeClient(i)) { SetListenOverride(iClient, i, g_userFlag[iClient]); } } } public void OnClientPutInServer(int iClient) { g_userFlag[iClient] = g_bVoiceEnable[iClient] ? Listen_Yes : Listen_No; } stock void PrintToChat2(int iClient, char[] szMessage, any...) { static int iEngine = -1; static const int g_iColorsCSSOB[] = { 0xFFFFFF, 0xFF0000, 0x00AD00, 0x00FF00, 0x99FF99, 0xFF4040, 0xCCCCCC, 0xFFBD6B, 0xFA8B00, 0x99CCFF, 0x3D46FF, 0xFA00FA }; static const char g_sColorsOldBefore[][] = { "{DEFAULT}", "{TEAM}", "{GREEN}" }, g_sColorsOldCSS[][] = { "\x01", "\x03", "\x04" }, g_sColorsBefore[][] = { "{WHITE}", "{RED}", "{GREEN}", "{LIME}", "{LIGHTGREEN}", "{LIGHTRED}", "{GRAY}", "{LIGHTOLIVE}", "{OLIVE}", "{LIGHTBLUE}", "{BLUE}", "{PURPLE}" }, g_sColorsCSGO[][] = { "\x01", "\x02", "\x04", "\x05", "\x06", "\x07", "\x08", "\x09", "\x10", "\x0B", "\x0C", "\x0E" }; if (iClient && IsClientInGame(iClient) && !IsFakeClient(iClient)) { char szBuffer[PLATFORM_MAX_PATH], szNewMessage[PLATFORM_MAX_PATH]; if (iEngine == -1) { switch (GetEngineVersion()) { case Engine_CSGO:iEngine = 0; case Engine_CSS:iEngine = 1; case Engine_SourceSDK2006:iEngine = 2; } } Format(szBuffer, sizeof(szBuffer), !iEngine ? " \x01%s" : "\x01%s", szMessage); VFormat(szNewMessage, sizeof(szNewMessage), szBuffer, 3); if (!iEngine) { for (int i = 0; i < 12; i++) { ReplaceString(szNewMessage, sizeof(szNewMessage), g_sColorsBefore[i], g_sColorsCSGO[i]); } ReplaceString(szNewMessage, sizeof(szNewMessage), "{TEAM}", "\x03"); } else { if (iEngine == 1) { char sBuff[64]; switch (GetClientTeam(iClient)) { case 1:Format(sBuff, sizeof(sBuff), "\x07%06X", g_iColorsCSSOB[6]); case 2:Format(sBuff, sizeof(sBuff), "\x07%06X", g_iColorsCSSOB[5]); case 3:Format(sBuff, sizeof(sBuff), "\x07%06X", g_iColorsCSSOB[9]); } ReplaceString(szNewMessage, sizeof(szNewMessage), "{TEAM}", sBuff); for (int i = 0; i < 12; i++) { Format(sBuff, sizeof(sBuff), "\x07%06X", g_iColorsCSSOB[i]); ReplaceString(szNewMessage, sizeof(szNewMessage), g_sColorsBefore[i], sBuff); } } else { for (int i = 0; i < 3; i++) { ReplaceString(szNewMessage, sizeof(szNewMessage), g_sColorsOldBefore[i], g_sColorsOldCSS[i]); } } } Handle hBf = StartMessageOne("SayText2", iClient, USERMSG_RELIABLE | USERMSG_BLOCKHOOKS); if (hBf) { if (GetUserMessageType() == UM_Protobuf) { Protobuf hProtoBuffer = UserMessageToProtobuf(hBf); hProtoBuffer.SetInt("ent_idx", iClient); hProtoBuffer.SetBool("chat", true); hProtoBuffer.SetString("msg_name", szNewMessage); hProtoBuffer.AddString("params", ""); hProtoBuffer.AddString("params", ""); hProtoBuffer.AddString("params", ""); hProtoBuffer.AddString("params", ""); } else { BfWrite hBfBuffer = UserMessageToBfWrite(hBf); hBfBuffer.WriteByte(iClient); hBfBuffer.WriteByte(true); hBfBuffer.WriteString(szNewMessage); } } EndMessage(); } } voice.phrases:
      "Phrases" { "Prefix" { "en" "{RED}[Voice]" "ru" "{RED}[Voice]" } "Enable" { "en" "{BLUE}Now everyone can hear!" "ru" "{BLUE}Теперь слышно всех!" } "Disable" { "en" "{BLUE}Now you can't hear anyone" "ru" "{BLUE}Теперь никого не слышно!" } } voice_old.phrases:
      "Phrases" { "Prefix" { "en" "{TEAM}[Voice]" "ru" "{TEAM}[Voice]" } "Enable" { "en" "{GREEN}Now everyone can hear!" "ru" "{GREEN}Теперь слышно всех!" } "Disable" { "en" "{GREEN}Now you can't hear anyone" "ru" "{GREEN}Теперь никого не слышно!" } }  
      Voice.rar
    • By Ry@N
      Этот плагин добавляет в подсказку "Hint" ваше здоровье. Удобно настраивается через CFG, что бы плагин отображал хп только в том случае, если вас ударили. При первом запуске генерируется следующий CFG файл:
      // This file was auto-generated by SourceMod (v1.10.0.6492) // ConVars for plugin "showhealth.smx" // 0 - Выключено, 1 - Включено // - // Default: "1" // Minimum: "0.000000" // Maximum: "1.000000" sm_show_health "1" // 0 - Показать всегда, 1 - Показать когда ударили // - // Default: "1" // Minimum: "0.000000" // Maximum: "1.000000" sm_show_health_on_hit_only "1" // 1 - Отобразить внизу (Хинт), 2 - В центре вверху // - // Default: "1" // Minimum: "1.000000" // Maximum: "2.000000" sm_show_health_text_area "1" Компиляция была произведена на SM 1.10.0.6492
      Установка:
      Скомпилировать .sp файл и поместить плагин в /left4dead2/addons/sourcemod/plugins Либо уже готовый .smx файл поместить в /left4dead2/addons/sourcemod/plugins Файл showhealth.phrases поместить в /left4dead2/addons/sourcemod/translations Сделать рестарт сервера. showhealth.phrases.txt showhealth.sp showhealth.smx
    • By Ry@N
      При стрельбе игрок увидит искры от пуль. Выглядит динамичнее и атмосфернее.
      Плагин компилировался на версии SM 1.10.0.6492
      Установка:
      Скомпилируйте .sp файл и поместите его в /left4dead2/addons/sourcemod/plugins Или поместите уже готовый .smx файл в /left4dead2/addons/sourcemod/plugins Сделайте рестарт сервера.
  • Recently Browsing   0 members

    No registered users viewing this page.

  • Кто придумал фразу; «придумал фразу»?

×
×
  • Create New...