SourceMod Прошу проверить на ошибки.

Primo

типа серьёзный тип
Сообщения
1,532
Реакции
759
Доброго времени суток.
Я занимался скриптингом на amxmodx и только сегодня перешол на sourcemod.
Написал достаточно простой плагин, но не уверен, что он работает, т.к. не во всех функциях sm разобрался.

И еще. Я не знаю как исправляется ошибка:
Error 100: function prototypes do not match

Warning'и прошу не брать в серьёз. Брал переменную ClientID для будущих нужд.

PHP:
#include <sourcemod>
  
new GameValue
new UserID
new UserIDT
new ClientID
 
public Plugin:myinfo =
{
	name = "VErtoe MiniMode",
	author = "Primo",
	description = "Random modes",
	version = "1.0",
}
 
public OnPluginStart()
{
	HookEvent("round_start", VErtoe_Round_Start);
	HookEvent("player_spawned", VErtoe_PlayerSpawn);
	RegAdminCmd("ghost_on", Command_ghoston);
	RegConsoleCmd("ghost_off", Command_ghostoff);
}

public VErtoe_Round_Start(Handle:event, const String:name[], bool:dontBroadcast)
{
	UserID = GetEventInt(event, "userid")
	ClientID = GetClientOfUserId(UserID)
	//GameValue = GetRandomInt(0, 1);
	if(GameValue == 1)
	{
		PrintCenterTextAll("Активирован режим призраков")
	}
}

public VErtoe_Round_End(Handle:event, const String:name[], bool:dontBroadcast)
{
	return;
}

public GhostGame()
{
	SetEntityRenderMode(UserIDT, RenderMode:RENDER_TRANSCOLOR);  
	SetEntityRenderColor(UserIDT, 255, 255, 255, 0); 
}
public VErtoe_PlayerSpawn(Handle:event, const String:name[], bool:dontBroadcast)
{
	if(GameValue == 1)
	{
		if(GetClientTeam(UserID) == 2)
		{
			UserIDT = GetEventInt(event, "userid")
			GhostGame();
		}
	}
	return;
}

public Command_ghoston(client, args)
{
	GameValue = 1
	return;
}

public Command_ghostoff(client, args)
{
	GameValue = 0
	return;
}

P.S. Если есть ошибки, а они точно есть, то прошу писать без грубостей...
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #2
Primo,
PHP:
public VErtoe_Round_Start(Handle:event, const String:name[], bool:dontBroadcast) 
{ 
    UserID = GetEventInt(event, "userid") 
    ClientID = GetClientOfUserId(UserID) 
    //GameValue = GetRandomInt(0, 1); 
    if(GameValue == 1) 
    { 
        PrintCenterTextAll("Активирован режим призраков") 
    } 
}

Ты не можешь получить индекс клиента из хандла эвента старта раунда.

PHP:
HookEvent("player_spawned", VErtoe_PlayerSpawn);
Нет такого эвента, есть player_spawn.

PHP:
public VErtoe_Round_End(Handle:event, const String:name[], bool:dontBroadcast) 
{ 
    return; 
}
Это что вообще?

PHP:
public GhostGame() 
{ 
    SetEntityRenderMode(UserIDT, RenderMode:RENDER_TRANSCOLOR);   
    SetEntityRenderColor(UserIDT, 255, 255, 255, 0);  
}
Ты не передал аргумента, чтобы присваивать ему цвет.

PHP:
public Command_ghoston(client, args) 
{ 
    GameValue = 1 
    return; 
} 

public Command_ghostoff(client, args) 
{ 
    GameValue = 0 
    return; 
}
return Plugin_Handled; пиши. И еще это Action
PHP:
 RegAdminCmd("ghost_on", Command_ghoston);
Нет 3-го аргумента - флага доступа.
Исправленый код:
PHP:
#include <sourcemod> 
   
new GameValue 
  
public Plugin:myinfo = 
{ 
    name = "VErtoe MiniMode", 
    author = "Primo", 
    description = "Random modes", 
    version = "1.0", 
} 
  
public OnPluginStart() 
{ 
    HookEvent("round_start", VErtoe_Round_Start); 
    HookEvent("player_spawn", VErtoe_PlayerSpawn); 
    RegAdminCmd("ghost_on", Command_ghoston, ADMFLAG_BAN); 
    RegAdminCmd("ghost_off", Command_ghostoff, ADMFLAG_BAN); 
} 

public VErtoe_Round_Start(Handle:event, const String:name[], bool:dontBroadcast) 
{ 
	if(GameValue == 1) PrintCenterTextAll("Активирован режим призраков") 
} 

public GhostGame(client) 
{ 
    SetEntityRenderMode(client, RenderMode:RENDER_TRANSCOLOR);   
    SetEntityRenderColor(client, 255, 255, 255, 0);  
} 

public VErtoe_PlayerSpawn(Handle:event, const String:name[], bool:dontBroadcast) 
{ 
    if(GameValue == 1) 
    {
		new client = GetClientOfUserId(GetEventInt(event, "userid"))
        if(GetClientTeam(client) == 2) GhostGame(client); 
    } 
} 

public Action:Command_ghoston(client, args) 
{ 
    GameValue = 1 
    return Plugin_Handled; 
} 

public Action:Command_ghostoff(client, args) 
{ 
    GameValue = 0 
	return Plugin_Handled; 
}
 

KorDen

Atra esterní ono thelduin!
Сообщения
2,142
Реакции
1,424
Primo, спаун игрока - player_spawn (а не player_spawned)

UserID = GetEventInt(event, "userid")
ClientID = GetClientOfUserId(UserID)

Традиционно userid нигде не используется, поэтому сразу обычно делают client = GetClientOfUserId(GetEventInt(event, "userid"))
В RoundStart нет никакого userid, нужно в playerspawn это делать


SetEntityRenderMode, SetEntityRenderColor, GetClientTeam, и вообще почти все функции, использующие ID игрока - в них надо ClientId а не UserId передавать

function prototypes do not match - это на какую строчку ругается?
 

Primo

типа серьёзный тип
Сообщения
1,532
Реакции
759
Я использовал традиционную wiki по Sourcemod, там был эвент player_spawned, ну он так назывался...
Спасибо за уделённое время.

Добавлено через 5 часов 13 минут
Ошибки понял, разобрался.
Но не разобрался кое в чем. При данном коде должен, по идеи, при спавне террорист становится невидимым, если GameValue = 1, также писать в чат соответствующее сообщение, но это не работает.
PHP:
#include <sourcemod> 
   
new GameValue 
  
public Plugin:myinfo = 
{ 
    name = "VErtoe MiniMode", 
    author = "Primo", 
    description = "Random modes", 
    version = "1.0", 
} 
  
public OnPluginStart() 
{ 
    HookEvent("round_start", VErtoe_Round_Start); 
    HookEvent("player_spawned", VErtoe_PlayerSpawn); 
    RegAdminCmd("ghost_on", Command_ghoston, ADMFLAG_BAN); 
    RegAdminCmd("ghost_off", Command_ghostoff, ADMFLAG_BAN); 
} 

public VErtoe_Round_Start(Handle:event, const String:name[], bool:dontBroadcast) 
{ 
    if(GameValue == 1) PrintCenterTextAll("Активирован режим призраков") 
} 

public VErtoe_PlayerSpawn(Handle:event, const String:name[], bool:dontBroadcast) 
{ 
    if(GameValue == 1) 
    {
		new client = GetClientOfUserId(GetEventInt(event, "userid"))
		if(GetClientTeam(client) == 2)
		{
			PrintToChatAll("Активирован режим призраков, террористы будут призраками");
			SetEntityRenderMode(client, RenderMode:RENDER_TRANSCOLOR);   
			SetEntityRenderColor(client, 255, 255, 255, 0);  
		}
    } 
} 

public Action:Command_ghoston(client, args) 
{ 
	PrintToChatAll("Активирован режим призраков");
	GameValue = 1 
	return Plugin_Handled; 
} 

public Action:Command_ghostoff(client, args) 
{ 
	PrintToChatAll("Деактивирован режим призраков");
	GameValue = 0 
	return Plugin_Handled; 
}
 
Последнее редактирование:

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #5
Это наоборот видимый
PHP:
SetEntityRenderColor(client, 255, 255, 255, 0);
Вот
PHP:
SetEntityRenderColor(client, 0, 0, 0, 0);
 

Primo

типа серьёзный тип
Сообщения
1,532
Реакции
759
Хорошо. Но а то, что
PHP:
PrintToChatAll("Активирован режим призраков, террористы будут призраками");
должно писаться всегда, когда кто-то спавнится за террористов?
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #7
PHP:
    HookEvent("player_spawn", VErtoe_PlayerSpawn);
Говорили уже
 

Primo

типа серьёзный тип
Сообщения
1,532
Реакции
759
Я пишу для cs go, и, как говорит wiki, там player_spawned

Wiki
 

NagarD

Участник
Сообщения
411
Реакции
184
Это наоборот видимый
PHP:
SetEntityRenderColor(client, 255, 255, 255, 0);
Вот
PHP:
SetEntityRenderColor(client, 0, 0, 0, 0);
Там прозрачность нулевая, т.ч. там всё равно, черная или белая будет модель.

Primo, там нету ничего что должно не работать, больше склоняюсь в евенту спавна. Замени на
PHP:
HookEvent("player_spawn", VErtoe_PlayerSpawn);
и увидишь что все работает
 

Primo

типа серьёзный тип
Сообщения
1,532
Реакции
759
Там прозрачность нулевая, т.ч. там всё равно, черная или белая будет модель.

Primo, там нету ничего что должно не работать, больше склоняюсь в евенту спавна. Замени на
PHP:
HookEvent("player_spawn", VErtoe_PlayerSpawn);
и увидишь что все работает

Тогда чем регулировать прозрачность, если прозрачным не становятся таким способом?
 

Primo

типа серьёзный тип
Сообщения
1,532
Реакции
759
Это я всё знаю, но проблема в том, что прозрачность не устанавливается, или я что-то не так делаю...
 

Primo

типа серьёзный тип
Сообщения
1,532
Реакции
759
Не работает в КС гоу прозрачность!

Сказали бы сразу...

Тогда другой вопрос.
Как я понял, функция, отвечающая за удаление оружия - RemovePlayerItem(client, item);?

Если это так, то 2 аргумент указывать слот игрока или определённое оружие weapon_*? Мне нужно, чтобы все оружия пропадали.
 

KorDen

Atra esterní ono thelduin!
Сообщения
2,142
Реакции
1,424

Primo

типа серьёзный тип
Сообщения
1,532
Реакции
759
Какой функцией можно проверить на бота? Т.е. является ли игрок ботом или нет.

Нужно отсеять ботов от людей, а функции найти не могу. Под носом вертится только IsClientAuthorized
 

Primo

типа серьёзный тип
Сообщения
1,532
Реакции
759
Попробую

Добавлено через 16 часов 54 минуты
Знает ли кто, как вызывать функцию ClientCommand(client, "r_screenoverlay *.vmt") безc sv_cheats 1?
 
Последнее редактирование:
Сверху Снизу