Написание плагинов

The End Is Near...

Russian Roulette
Сообщения
874
Реакции
691
1. Название плагина: На усмотрение
2. Детальное описание:
Есть префиксы по флагам доступа

Нужно сделать префиксы по админ группам
Настройки либо вывести в cfg наподобии
PHP:
"PrefGroup" 
{ 
     "group"  "ADMIN" 
     "pref"  "[ADMIN]"
}
{ 
     "group"  "ROOT" 
     "pref"  "[ROOT]"
}
}

Или редактировать это все в исходнике, желательно 2 примера в нем, дальше разберусь:)

Попробуй, не проверял только V2
sm_acp_path <Путь до файла>
PHP:
#include <sourcemod>

new Handle:g_hPath = INVALID_HANDLE;

new Handle:KeyValues = INVALID_HANDLE;

new String:colors[3][20] = {"0xCCCCCC", "0xFF4040", "0x99CCFF"};

new String:Prefix[MAXPLAYERS + 1][256];

public Plugin:myinfo = 
{
	name = "AGCP",
	author = "The End Is Near..., NoTiCE",
	version = "1.0"
}

public OnPluginStart()
{
	g_hPath = CreateConVar("sm_acp_path", "addons/sourcemod/configs/acp_path.cfg", "Укажите путь до файла");

	KeyValues = CreateKeyValues("ACP_GROUP");

	AddCommandListener(CallBack, "say");
}

public OnMapStart()
{
	decl String:path[256];
	GetConVarString(g_hPath, path, sizeof(path));

	if (!FileToKeyValues(KeyValues, path))
	{
		SetFailState("File '%s' not found!", path);
	}
}

public OnClientPostAdminCheck(client)
{
	new AdminId:admin = GetUserAdmin(client);

	if (admin != INVALID_ADMIN_ID)
	{
		new count = GetAdminGroupCount(admin);

		decl String:group[256];
		for (new i = 0; i < count; i++)
		{
			if (GetAdminGroup(admin, i, group, sizeof(group)) != INVALID_GROUP_ID)
			{
				if (KvJumpToKey(KeyValues, group, false))
				{
					KvGetString(KeyValues, "prefix", group, sizeof(group));

					strcopy(Prefix[client], sizeof(Prefix), group);
				}
			}
		}
	}
}

public Action:CallBack(client, const String:command[], args)
{
	if (client > 0)
	{
		if (GetUserAdmin(client) != INVALID_ADMIN_ID)
		{
			if (args > 0)
			{
				decl String:text[256];
				GetCmdArgString(text, sizeof(text));
				StripQuotes(text);

				if (text[0] != '/')
				{
					PrintToChatAll("\x01%s \x07%s%N \x01: %s", Prefix[client], colors[GetClientTeam(client) - 1], client, text);
					return Plugin_Handled;
				}
			}
		}
	}

	return Plugin_Continue;
}

PHP:
// Пример
"ACP_GROUP"
{
	"ROOT"
	{
		"prefix" "[ROOT]"
	}

	"OTHER"
	{
		"prefix"	"[PTHER]"
	}

}
P.S. NoTiCE
P.S.S. wS
 
Последнее редактирование:

_wS_

Участник
Сообщения
383
Реакции
760
Косяков куча. Например:

1. Утечко

PHP:
public OnMapStart()
{
    KeyValues = CreateKeyValues("ACP_GROUP");

2. Такие проверки не раньше OnClientPostAdminCheck делать надо

PHP:
public OnClientAuthorized(client, const String:auth[])
{
    new AdminId:admin = GetUserAdmin(client);
    if (admin != INVALID_ADMIN_ID)
    {
 

The End Is Near...

Russian Roulette
Сообщения
874
Реакции
691
Igor Dmitriev
Не знаю как найти, вообщем спроси у него, если сможешь, про выполнение запроса, то есть получение времени
 

Roma0345

Участник
Сообщения
2
Реакции
0
The End Is Near..., Привет, можешь написать !shop с трейлами скинами моделями гранат, скины гранат, при Убийстве выпадают подарки(Не бесплатно) если будешь писать пожалуйста добавь в skype karengust18 или напиши свой
 

★$$StOk$$★

Участник
Сообщения
629
Реакции
187
The End Is Near..., Привет, можешь написать !shop с трейлами скинами моделями гранат, скины гранат, при Убийстве выпадают подарки(Не бесплатно) если будешь писать пожалуйста добавь в skype karengust18 или напиши свой
37741-135935-facepalmjpg-620x.jpg


Добавлено через 1 минуту
Нужно сделать хилке чтобы когда кт писал !hl хилка отбрасывалась на метр а не падала под ноги.Потом чтобы хилка эта при ее поднятии не пропадала, а была долгоиспользуема.
Если возмешься пожалуйста напиши.
Заранее благодарю
 
Последнее редактирование:

Eseth

Участник
Сообщения
75
Реакции
8
The End Is Near..., Как насчёт моего запроса по изменению плагина? Хотел бы знать если мне стоит подождать или ты уже ни занимаешься им. Единственное что осталось сделать это возможность прописывать ID в текстовый файл.
Спасибо!
 

The End Is Near...

Russian Roulette
Сообщения
874
Реакции
691
The End Is Near..., Как насчёт моего запроса по изменению плагина? Хотел бы знать если мне стоит подождать или ты уже ни занимаешься им. Единственное что осталось сделать это возможность прописывать ID в текстовый файл.
Спасибо!

Пробуй.
Путь до файла: addons/sourcemod/configs/cssbank/steamid.txt
Каждый SteamID на новой строке
Заменить и скомпилировать
 

Вложения

  • commands.sp
    8.9 КБ · Просмотры: 14
  • cssbank.sp
    24.4 КБ · Просмотры: 12

★$$StOk$$★

Участник
Сообщения
629
Реакции
187
The End Is Near..,
Что там насчет моей просьбы?Возмешься ?
Заранее благодарю!
 

Ваня Олейник

Участник
Сообщения
74
Реакции
12
Привет.Ты не подскажешь как в этом плагине можно сделать рандомные звуки при броске гранаты?Играет только один звук.Суть плагина в том что он заменяет стандартные радио сообщение "GoGoGo", "Sector clear" и тд. http://rghost.ru/47581280
 

Черная вдова

Участник
Сообщения
2,795
Реакции
670
The End Is Near...,
Можешь написать простую статистику где считается только убийства и время в игре,
команды : rank,topkill,toptime
 

KorDen

Atra esterní ono thelduin!
Сообщения
2,142
Реакции
1,424
Черная вдова, запросы халявы растут с экспоненциальной зависимостью...
 

The End Is Near...

Russian Roulette
Сообщения
874
Реакции
691
Нужно сделать хилке чтобы когда кт писал !hl хилка отбрасывалась на метр а не падала под ноги.Потом чтобы хилка эта при ее поднятии не пропадала, а была долгоиспользуема.
Если возмешься пожалуйста напиши.
Заранее благодарю

Пробуй
PHP:
#include <sourcemod>
#include <sdktools>

#define MODEL "models/items/healthkit.mdl"
#define HEALTH 25

public Plugin:myinfo = 
{
	name	= "Health Kit",
	author	= "wS / Schmidt",
	version	= "1.1",
	url		= "http://world-source.ru/"
};

public OnPluginStart()
{
	RegConsoleCmd("hl", CallBack)
}

public OnConfigsExecuted()
{
	PrecacheModel(MODEL, true);
}

public Action:CallBack(client, args)
{
	if (client > 0)
	{
		if (GetClientTeam(client) > 1)
		{
			if (IsPlayerAlive(client))
			{
				new ent = CreateEntityByName("prop_physics");
				if (ent > 0)
				{
					decl Float:pos[3];
					GetClientAbsOrigin(client, pos);

					pos[0] += 35.0; pos[2] += 75.0;

					DispatchKeyValue(ent, "model", MODEL);
					DispatchKeyValueVector(ent, "origin", pos);
					DispatchKeyValue(ent, "solid", "6");
					DispatchKeyValue(ent, "spawnflags", "18");
					DispatchSpawn(ent);

					HookSingleEntityOutput(ent, "OnStartTouch", OnStartTouch);
				}
			}
		}
	}

	return Plugin_Handled;
}

public OnStartTouch(const String:output[], ent, client, Float:delay)
{
	if (0 < client <= MaxClients)
	{
		SetEntProp(client, Prop_Send, "m_iHealth", GetClientHealth(client) + HEALTH);
	}
}

p.s. Использован код wS

Добавлено через 45 минут
Идея из темы http://hlmod.ru/forum/counter-strike-source/19029-plagin-kotoryi-zabiraet-adminku.html

Пробуем
PHP:
#include <sourcemod>

#define FILE "addons/sourcemod/configs/admin_time.cfg"

new Handle:KeyValues = INVALID_HANDLE;

new String:date[][] = {"YEAR", "MONTH", "DAY", "HOUR", "MINUTE"},
	String:char[][] = {"%Y", "%m", "%d", "%H", "%M"};

public OnPluginStart()
{
	KeyValues = CreateKeyValues("ADMIN_TIME");
} 

public OnMapStart()
{
	if (!FileToKeyValues(KeyValues, FILE))
	{
		SetFailState("File '%s' not found!", FILE);
	}
}

public OnClientPostAdminCheck(client)
{
	new AdminId:admin = GetUserAdmin(client);

	if (admin != INVALID_ADMIN_ID)
	{
		decl String:buffer[30];
		if (GetClientAuthString(client, buffer, sizeof(buffer)))
		{
			if (KvJumpToKey(KeyValues, buffer, false))
			{
				decl String:time[256];
				for (new i = 0; i < 5; i++)
				{
					KvGetString(KeyValues, date[i], buffer, sizeof(buffer));
					FormatTime(time, sizeof(time), char[i]);

					if (StringToInt(time) > StringToInt(buffer))
					{
						RemoveAdmin(admin);
						break;
					}
				}
			}
		}
	}
}

Путь до файла: addons/sourcemod/configs/admin_time.cfg

Примерное заполнение файла:
PHP:
"ADMIN_TIME"
{
	"STEAM_0:0:1" // SteamID игрока
	{
		"YEAR"		"2013"	// Год
		"MONTH"		"12"	// Месяц
		"DAY"		"31"	// День
		"HOUR"		"15"	// Час
		"MINUTE"	"30"	// Минута
	}
}
 
Последнее редактирование:

golova209

Думать – самая трудная работа
Сообщения
251
Реакции
72
Если можно
1)Модуль для http://hlmod.ru/forum/showthread.php?t=7319
2)Модуль который позволяет админам покупать одно количество мин, а игроки другое.Потом, чтоб у админ мины ещё могли отталкивать ,а у игроков нет.
P.S.Если возможно то можно сделать команду которая включает/выключает отталкивание у админа и если можно то у админа, который её прописал
 

ALЬTAIR

Участник
Сообщения
335
Реакции
160
Привет,напиши пожалуйста если возможно такой плагин:
Админ(flag BAN) может скрывать своё присутствие на сервере,например командой в чате !hide чтобы вернуть своё присутствие например команда !hideoff
 

The End Is Near...

Russian Roulette
Сообщения
874
Реакции
691
ALЬTAIR
PHP:
#include <sourcemod> 
#include <sdktools> 
#include <sdkhooks> 

new g_hVisible[MAXPLAYERS + 1] = {1, ...};
new g_iIsConnectedOffset = -1;

public Plugin:myinfo = 
{
	name = "HideMe",
	author = "blodia, LordMarqus",
    description = "",
    version = "1.0.0",
    url = "http://www.sourcemod.net/"
}

public OnPluginStart()
{
	RegAdminCmd("hide", CallBack, ADMFLAG_BAN);
}

public OnMapStart() 
{
	g_iIsConnectedOffset = FindSendPropOffs("CCSPlayerResource", "m_bConnected");
	if (g_iIsConnectedOffset == -1)
	{
		SetFailState("CCSPlayerResource.m_bConnected offset is invalid");
	}

	new CSPlayerManager = FindEntityByClassname(-1, "cs_player_manager");

	if (CSPlayerManager > 0)
	{
		SDKHook(CSPlayerManager, SDKHook_ThinkPost, OnThinkPost);
	}
} 

public OnThinkPost(entity) 
{
	decl isConnected[65];
	
	GetEntDataArray(entity, g_iIsConnectedOffset, isConnected, 65);
	for (new i = 1; i <= MaxClients; ++i)
	{
		if (IsClientInGame(i))
		{
			isConnected[i] = g_hVisible[i];
		}
	}
	SetEntDataArray(entity, g_iIsConnectedOffset, isConnected, 65);
}

public Action:CallBack(client, args)
{
	if (client > 0)
	{
		g_hVisible[client] = !g_hVisible[client];
	}
	
	return Plugin_Handled;
}
 

ALЬTAIR

Участник
Сообщения
335
Реакции
160
The End Is Near...
Спасибо работает.
 
Последнее редактирование:
Сверху Снизу