Введение в SourcePawn программирование

Черная вдова

Участник
Сообщения
2,795
Реакции
670
Мне не хватает навыка в скриптинге что бы понять почему боты не отображаются,
Зато я понял почему админы только с флагом root не отображаются,
И странно почему то получается, что если у админа флаг root, то это не значит, что у него флаг reservation, мб не так понял, но суть такая
На счет who щас лень делать
А вот про время я сделал на случай если произойдет копирование ник и замены 1 буквы
Что бы случайно не забанить нормального игрока
Вот что бы показывало админов с флагом root
 

Вложения

  • adminmenu.sp
    8.1 КБ · Просмотры: 36

psyhyatr

Участник
Сообщения
111
Реакции
7
извините что вклинился..так мне что изучать надо? си и си плюс? чтоб писать плагины? а плагин для виндовс и линуха будут подходить? или для каждого свой? или все равно? не зависит от оси?
 

semjef

semjef.ru
Сообщения
993
Реакции
444
psyhyatr, Сам SourcePawn это вариация С++, получившаяся после создания прослойки между игрой и плагинами.
Самое лучшее это писать плагины на С++, они уже не будут задействовать функции sourcemod.
 

psyhyatr

Участник
Сообщения
111
Реакции
7
psyhyatr, Сам SourcePawn это вариация С++, получившаяся после создания прослойки между игрой и плагинами.
Самое лучшее это писать плагины на С++, они уже не будут задействовать функции sourcemod.

я понял.спасибо.но я начну с си потом перейду на си плюс и тогда уже на спавн,правильно? и я так понимаю что плагины будут работать и на окнах и на линухе ?
 

The Night Fury

Участник
Сообщения
1,300
Реакции
1,395
psyhyatr, не-не-не.
Плагины нигде, кроме серверов работать не будут. Если не подкорректировать. SourceMod использует свои функции и операторы, хотя и основан на C. Ты можешь вырвать оттуда часть, но не весь плагин.
 

stas-1997

Участник
Сообщения
120
Реакции
10
Не подскажите сайт, где можно выучить язык c++ ?
 

The End Is Near...

Russian Roulette
Сообщения
874
Реакции
691
Так и быть
Последняя версия...
PHP:
#pragma semicolon 1
#include <sourcemod>
#include <sdktools>
#include <voiceannounce_ex>
#include <basecomm>

public bool:OnClientSpeakingEx(client)
{	
	new ctspeac = 0;
	for (new i = 1; i <= MaxClients; i++)
	{
		if (IsClientInGame(i) && !IsFakeClient(i) && IsClientSpeaking(i))
		{
			new team = GetClientTeam(i);
			if(team == 3) ++ctspeac;
			
			if(team == 2 && ctspeac != 0)
			{
				if(GetUserFlagBits(i) & ADMFLAG_ROOT) return;
				BaseComm_SetClientMute(i, true);
				CreateTimer(1.0, muteoff, i);
				PrintCenterText(i, "Вы не можете перебить CT");
			}
		}
	}
}

public Action:muteoff(Handle:timer, any:i)
{
	if(IsClientInGame(i) && !IsFakeClient(i) &&	BaseComm_IsClientMuted(i))
	{
		BaseComm_SetClientMute(i, false);
	}
}
 
Сообщения
2,587
Реакции
1,345
DoK_1997, Оффтоп
 
Сообщения
2,587
Реакции
1,345
DoK_1997, Оффтоп
 

The End Is Near...

Russian Roulette
Сообщения
874
Реакции
691
☆★☆БАТЯ☆★☆™
Я тебе предлагал помощь? Нет, ну вот и сиди молчи, начинаешь бесить, твои оффтопы ни к чему, адЪес
 
Сообщения
2,587
Реакции
1,345
DoK_1997, Оффтоп
 

The End Is Near...

Russian Roulette
Сообщения
874
Реакции
691
ilga80
То есть проблема только в тексте?
----
вот попроб
PHP:
#pragma semicolon 1
#include <sourcemod>
#include <sdktools>
#include <voiceannounce_ex>
#include <basecomm>

public bool:OnClientSpeakingEx(client)
{	
	new ctspeac = 0;
	for(new i = 1; i <= MaxClients; i++)
	{
		if(IsClientInGame(i) && !IsFakeClient(i) && IsClientSpeaking(i))
		{
			new team = GetClientTeam(i);
			if(team == 3)
			{
				++ctspeac;
			}
			if(team == 2 && ctspeac != 0)
			{
				if(GetUserFlagBits(i) & ADMFLAG_ROOT)
				{
					return false;
				}
				else
				{
					BaseComm_SetClientMute(i, true);
					CreateTimer(0.5, muteoff, i);
					PrintCenterText(i, "Вы не можете перебить CT");
					return true;
				}
			}
		}
	}
	return true;
}

public Action:muteoff(Handle:timer, any:i)
{
	if(IsClientInGame(i) && !IsFakeClient(i) && BaseComm_IsClientMuted(i))
	{
		BaseComm_SetClientMute(i, false);
	}
}
 
Последнее редактирование:

The End Is Near...

Russian Roulette
Сообщения
874
Реакции
691
попробуй еще
PHP:
#pragma semicolon 1
#include <sourcemod>
#include <sdktools>
#include <voiceannounce_ex>
#include <basecomm>

public bool:OnClientSpeakingEx(client)
{	
	if(BaseComm_IsClientMuted(client))
	{
		return false;
	}
	new ctspeak = 0;
	for (new i = 1; i <= MaxClients; i++)
	{
		if (IsClientInGame(i) && 
			!IsFakeClient(i) && 
			IsClientSpeaking(i) && 
			!BaseComm_IsClientMuted(client) && 
			GetClientTeam(i) == 3)
				++ctspeak;
	}
	if(ctspeak != 0 && GetClientTeam(client) == 2)
	{
		if(GetUserFlagBits(client) & ADMFLAG_ROOT)
		{
			return false;
		}
		else
		{
			BaseComm_SetClientMute(client, true);
			CreateTimer(0.5, mute, client);
			PrintCenterText(client, "Вы не можете перебить CT");
			return false;
		}
	}
	else
	{
		return true;
	}
}

public Action:mute(Handle:timer, any:client)
{
	if (IsClientInGame(client) && !IsFakeClient(client) &&	BaseComm_IsClientMuted(client))
	{
		BaseComm_SetClientMute(client, false);
	}
}
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,756
Что за штука такая INVALID_HANDLE, например:
PHP:
new Handle:h_primer = INVALID_HANDLE;
Что она даёт, когда нужна, а когда нет? Смотрю так, где-то стоит, а где-то нет... Логики толковой не наблюдаю. Думаю, связано с 0 и 1, ограничением. Короче, есть точный ответ? :)
 

_wS_

Участник
Сообщения
383
Реакции
760
PHP:
public OnPluginStart()
{
	new Handle:h1;
	new Handle:h2 = INVALID_HANDLE;
	PrintToServer("%x = %x (%s)", h1, h2, h1 == h2 ? "yes" : "no");
}

C-подобный:
] sm plugins load z
0 = 0 (yes)
[SM] Loaded plugin z.smx successfully.

Я, например, пишу просто для уверенности, а так, разницы нет.
new x; или new x = 0;
new Float:y; или new Float:y = 0.0; тот же случай.
 

Raimund Mafulex

Участник
Сообщения
33
Реакции
0
C чего начать учится создавать плагины? Может пытаться редактировать простенькие плагины?
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,756
учится создавать плагины
Перечитать введение, создавать простые функции/вычисления с выводом в консоль/чат сервера.
пытаться редактировать простенькие плагины?
У меня и со сложного получилось. Нужно лишь уловить логику и дальше всё куда яснее.
Будет время и настроение, выложу описание работы своего плагина.

И, собственно, мой вопрос:
"Как узнать, прописан ли какой квар в файл конфигурации? Точнее, построчно (считать, на какой строке он конкретно - не надо) считывать, есть ли такие-то слова/квары в нужном файле?".
Поиск кваров не предлагать - это совсем не то.
Например, нужно узнать, есть ли в файле квар Reset_settings_round. Если нет, то дописать его со всеми значениями (просто вписывание строчек мне известно).
PrintToServer("%x = %x (%s)", h1, h2, h1 == h2 ? "yes" : "no");
Кстати, об этой штучке подробно может кто рассказать? Как называется и предназначение.
 
Сверху Снизу