Тема для шарящих в плагин

Сообщение
Автор
tortman
Сержант
Сержант
Сообщения: 75
Зарегистрирован: 21.11.2010

#1 Сообщение 01.01.2011, 18:39

Суть вот в чем, у меня есть несколько плагов из которых я 1 собираю, так вот мне осталась последняя деталь которая не получается, 1 из плагов сверят Ваш SteamID со своей базой, если SteamID нету в базу, он вообще не пускает на сервер, но мне надо чтоб он пускал на сервер на 2 минуты, для этот надо создать таймер, выставить его на 2 минуты и через 2 минуты совершить команду KickClient, вот никак не получается, в коде есть команда KickClient, но он делает ее сразу,а надо оттянуть это на 2 минуты, чтоб за эти 2 минуты игрок сделал то, что ему будет указано.
Кто понимает C++ и sourcepawn помогите пожалуйста, для знающих людей это не является проблемой как для меня.
Изображение
Изображение

RU_6uK
Капитан
Капитан
Сообщения: 319
Зарегистрирован: 26.12.2009
Поблагодарили: 15 раз

#2 Сообщение 01.01.2011, 20:55

Код: Выделить всё

CreateTimer(120.0, KickPlayer, client); // Создаст таймер для определенного клиента.

KickPlayer(Handle:timer, any:client) // Совершит по истечении этого времени действие над этим клиентом.
{
KickClient(client);
}
Желательно добавлять проверки: подключился ли игрок, в игре ли.
ИзображениеИзображение
/.ZoZo./ Zombie Zone - Серверы Left 4 Dead 2, Team Fortress 2, Killing Floor. Всегда рады хорошим игрокам!

tortman
Сержант
Сержант
Сообщения: 75
Зарегистрирован: 21.11.2010

#3 Сообщение 02.01.2011, 00:02

проверка есть, спасибо ща проверю, а то я уже задрался, не могу поставить его, постоянно 2-3 ошибки в коде)

Добавлено спустя 1 минуту 33 секунды:
KickPlayer(Handle:timer, any:client) // Совершит по истечении этого времени действие над этим клиентом.


вот это я вообще не писал)

Добавлено спустя 49 минут 31 секунду:
А надо new handle делать?

Добавлено спустя 21 минуту 43 секунды:
единственная ошибка error 076: syntax error in the expression, or invalid function call
в этой команде CreateTimer(120.0, KickClient, client);
Изображение
Изображение

RU_6uK
Капитан
Капитан
Сообщения: 319
Зарегистрирован: 26.12.2009
Поблагодарили: 15 раз

#4 Сообщение 02.01.2011, 00:06

Если пишешь здесь CreateTimer(120.0, KickClient, client);
То и здесь тоже должно быть KickClient(Handle:timer, any:client)
ИзображениеИзображение
/.ZoZo./ Zombie Zone - Серверы Left 4 Dead 2, Team Fortress 2, Killing Floor. Всегда рады хорошим игрокам!

tortman
Сержант
Сержант
Сообщения: 75
Зарегистрирован: 21.11.2010

#5 Сообщение 02.01.2011, 00:12

так и есть
Изображение
Изображение

RU_6uK
Капитан
Капитан
Сообщения: 319
Зарегистрирован: 26.12.2009
Поблагодарили: 15 раз

#6 Сообщение 02.01.2011, 00:16

Напиши так.
public Action:KickClient(Handle:timer, any:client)
ИзображениеИзображение
/.ZoZo./ Zombie Zone - Серверы Left 4 Dead 2, Team Fortress 2, Killing Floor. Всегда рады хорошим игрокам!

tortman
Сержант
Сержант
Сообщения: 75
Зарегистрирован: 21.11.2010

#7 Сообщение 02.01.2011, 00:20

/**
* [ANY] Restrictions
* Created by Bigbuck
*
*/

/**
v1.0.0
- Initial Release
*/

// Force strict semicolon mode
#pragma semicolon 1

/**
* Includes
*
*/
#include <sourcemod>
#include <sdktools>

/**
* Defines
*
*/
#define PLUGIN_VERSION "1.0.0"
#define CVAR_FLAGS FCVAR_PLUGIN|FCVAR_SPONLY|FCVAR_NOTIFY

/**
* Handles
*
*/
new Handle: Kick_Message = INVALID_HANDLE;

/**
* Plugin information
*
*/
public Plugin: myinfo =
{
name = "[ANY]Restrictions",
author = "unknow",
description = "Restricts players on your server to the ones whose SteamID is on the list.",
version = PLUGIN_VERSION,
url = "odessa-game.sytes.net"
};

/**
* Setup plugins first run
*
*/
public OnPluginStart()
{
// Create convars
CreateConVar("player_restrictions_version", PLUGIN_VERSION, "[ANY]Restrictions", FCVAR_PLUGIN|FCVAR_SPONLY|FCVAR_NOTIFY|FCVAR_DONTRECORD);
Kick_Message = CreateConVar("pl_kick_message", "You're SteamID is not on the list of allowed players", "The message clients will get when they are kicked", CVAR_FLAGS);

// Load config
AutoExecConfig(true, "player_restrictions");
}

/**
* Called when a client gets a SteamID
*
* @parm: client - The client that has been authorized
* @String: auth - The clients SteamID
*
*/
public OnClientAuthorized(client, const String: auth[])
{
// We don't care about bots
if (IsFakeClient(client))
{
return;
}

// Setup
new String: kick_message[128];
GetConVarString(Kick_Message, kick_message, sizeof(kick_message));

// Create the keyvalues
new Handle: steamd_ids = CreateKeyValues("PlayerRestrictions");
if (!FileToKeyValues(steamd_ids, "addons/sourcemod/configs/player_restrictions.txt"))
{
LogError("Cannot find player_restrictions.txt");
}
CreateTimer(120.0, KickClient, client);

KickClient(Handle:timer, any:client);
{
public Action:KickClient(client);
}
// Check for the steam id
if (!KvJumpToKey(steamd_ids, auth))
{
LogMessage("Kicking client %N", client);
KickClient(client, kick_message);
}
else
{
LogMessage("Valid SteamID found, %s", auth);
}
}


вот весь плаг, может просто не туда вписал?
Изображение
Изображение

RU_6uK
Капитан
Капитан
Сообщения: 319
Зарегистрирован: 26.12.2009
Поблагодарили: 15 раз

#8 Сообщение 02.01.2011, 00:26

Код: Выделить всё

CreateTimer(120.0, KickClient, client);

public Action:KickClient(Handle:timer, any:client)
{
KickClient(client);
}
Добавлено спустя 4 минуты 34 секунды:
И еще, я мельком посмотрел. У тебя таймер создается внутри public OnClientAuthorized(client, const String: auth[]).
А выполняться он должен за пределами этой функции. Вынеси выполнение таймера в конец плагина. За фигурные скобки.
ИзображениеИзображение
/.ZoZo./ Zombie Zone - Серверы Left 4 Dead 2, Team Fortress 2, Killing Floor. Всегда рады хорошим игрокам!

tortman
Сержант
Сержант
Сообщения: 75
Зарегистрирован: 21.11.2010

#9 Сообщение 02.01.2011, 00:35

/**
* [ANY] Player Restrictions
* Created by Bigbuck
*
*/

/**
v1.0.0
- Initial Release
*/

// Force strict semicolon mode
#pragma semicolon 1

/**
* Includes
*
*/
#include <sourcemod>
#include <sdktools>

/**
* Defines
*
*/
#define PLUGIN_VERSION "1.0.0"
#define CVAR_FLAGS FCVAR_PLUGIN|FCVAR_SPONLY|FCVAR_NOTIFY

/**
* Handles
*
*/
new Handle: Kick_Message = INVALID_HANDLE;

/**
* Plugin information
*
*/
public Plugin: myinfo =
{
name = "[ANY] Player Restrictions",
author = "Bigbuck",
description = "Restricts players on your server to the ones whose SteamID is on the list.",
version = PLUGIN_VERSION,
url = "http://bigbuck-sm.assembla.com/spaces/d ... bigbuck-sm"
};

/**
* Setup plugins first run
*
*/
public OnPluginStart()
{
// Create convars
CreateConVar("player_restrictions_version", PLUGIN_VERSION, "[ANY] Player Restrictions", FCVAR_PLUGIN|FCVAR_SPONLY|FCVAR_NOTIFY|FCVAR_DONTRECORD);
Kick_Message = CreateConVar("pl_kick_message", "You're SteamID is not on the list of allowed players", "The message clients will get when they are kicked", CVAR_FLAGS);

// Load config
AutoExecConfig(true, "player_restrictions");
}

/**
* Called when a client gets a SteamID
*
* @parm: client - The client that has been authorized
* @String: auth - The clients SteamID
*
*/
public OnClientAuthorized(client, const String: auth[])
{
// We don't care about bots
if (IsFakeClient(client))
{
return;
}

// Setup
new String: kick_message[128];
GetConVarString(Kick_Message, kick_message, sizeof(kick_message));

// Create the keyvalues
new Handle: steamd_ids = CreateKeyValues("PlayerRestrictions");
if (!FileToKeyValues(steamd_ids, "addons/sourcemod/configs/player_restrictions.txt"))
{
LogError("Cannot find player_restrictions.txt");
}
// Check for the steam id
if (!KvJumpToKey(steamd_ids, auth))
{
LogMessage("Kicking client %N", client);
KickClient(client, kick_message);
}
else
{
LogMessage("Valid SteamID found, %s", auth);
}
}
CreateTimer(120.0, KickClient, client);

public Action:KickClient(Handle:timer, any:client)
{
KickClient(client);
}
}
}



error 021: symbol already defined: "CreateTimer"
error 021: symbol already defined: "KickClient"



как так? оО

Добавлено спустя 1 минуту 1 секунду:
якобы эти команды встречаються 2 раза?
Изображение
Изображение

RU_6uK
Капитан
Капитан
Сообщения: 319
Зарегистрирован: 26.12.2009
Поблагодарили: 15 раз

#10 Сообщение 02.01.2011, 00:36

Вот, по-быстрому исправил. Должно работать.

Код: Выделить всё

public OnClientAuthorized(client, const String: auth[])
{
// We don't care about bots
if (IsFakeClient(client))
{
return;
}

// Create the keyvalues
new Handle: steamd_ids = CreateKeyValues("PlayerRestrictions");
if (!FileToKeyValues(steamd_ids, "addons/sourcemod/configs/player_restrictions.txt"))
{
LogError("Cannot find player_restrictions.txt");
}

// Check for the steam id
if (!KvJumpToKey(steamd_ids, auth)) // Если стим айди не соответствует тому, что указан в файле
{
LogMessage("Kicking client %N", client);
// Создаем таймер
CreateTimer(120.0, KickClient, client);
}
else
{
LogMessage("Valid SteamID found, %s", auth);
}
}

public Action:KickClient(Handle:timer, any:client)
{
// Setup
new String: kick_message[128];
GetConVarString(Kick_Message, kick_message, sizeof(kick_message));

KickClient(client, kick_message);
}
ИзображениеИзображение
/.ZoZo./ Zombie Zone - Серверы Left 4 Dead 2, Team Fortress 2, Killing Floor. Всегда рады хорошим игрокам!

tortman
Сержант
Сержант
Сообщения: 75
Зарегистрирован: 21.11.2010

#11 Сообщение 02.01.2011, 00:42

куча ошибок =)
Изображение
Изображение

RU_6uK
Капитан
Капитан
Сообщения: 319
Зарегистрирован: 26.12.2009
Поблагодарили: 15 раз

#12 Сообщение 02.01.2011, 00:52

Скомпилировалось без проблем.

Код: Выделить всё

/**
* [ANY] Restrictions
* Created by Bigbuck
*
*/

/**
v1.0.0
- Initial Release
*/

// Force strict semicolon mode
#pragma semicolon 1

/**
* Includes
*
*/
#include <sourcemod>
#include <sdktools>

/**
* Defines
*
*/
#define PLUGIN_VERSION	"1.0.0"
#define CVAR_FLAGS	 FCVAR_PLUGIN|FCVAR_SPONLY|FCVAR_NOTIFY

/**
* Handles
*
*/
new Handle: Kick_Message	= INVALID_HANDLE;

/**
* Plugin information
*
*/
public Plugin: myinfo =
{
name = "[ANY]Restrictions",
author = "unknow",
description = "Restricts players on your server to the ones whose SteamID is on the list.",
version = PLUGIN_VERSION,
url = "odessa-game.sytes.net"
};

/**
* Setup plugins first run
*
*/
public OnPluginStart()
{
// Create convars
CreateConVar("player_restrictions_version", PLUGIN_VERSION, "[ANY]Restrictions", FCVAR_PLUGIN|FCVAR_SPONLY|FCVAR_NOTIFY|FCVAR_DONTRECORD);
Kick_Message	= CreateConVar("pl_kick_message", "You're SteamID is not on the list of allowed players", "The message clients will get when they are kicked", CVAR_FLAGS);

// Load config
AutoExecConfig(true, "player_restrictions");
}

public OnClientAuthorized(client, const String: auth[])
{
// We don't care about bots
if (IsFakeClient(client))
{
return;
}

// Create the keyvalues
new Handle: steamd_ids = CreateKeyValues("PlayerRestrictions");
if (!FileToKeyValues(steamd_ids, "addons/sourcemod/configs/player_restrictions.txt"))
{
LogError("Cannot find player_restrictions.txt");
}

// Check for the steam id
if (!KvJumpToKey(steamd_ids, auth)) // Если стим айди не соответствует тому, что указан в файле
{
LogMessage("Kicking client %N", client);
// Создаем таймер
CreateTimer(120.0, Action_KickClient, client);
}
else
{
LogMessage("Valid SteamID found, %s", auth);
}
}

public Action:Action_KickClient(Handle:timer, any:client)
{
// Setup
new String: kick_message[128];
GetConVarString(Kick_Message, kick_message, sizeof(kick_message));

KickClient(client, kick_message);
}
ИзображениеИзображение
/.ZoZo./ Zombie Zone - Серверы Left 4 Dead 2, Team Fortress 2, Killing Floor. Всегда рады хорошим игрокам!

tortman
Сержант
Сержант
Сообщения: 75
Зарегистрирован: 21.11.2010

#13 Сообщение 02.01.2011, 01:07

Ага))Спасибо большое за помощь, пойду проверю)
Изображение
Изображение

tortman
Сержант
Сержант
Сообщения: 75
Зарегистрирован: 21.11.2010

#14 Сообщение 02.01.2011, 12:22

Во) спустя 2 минуты выгнало)Слушай,ещё небольшой вопрос) у меня есть плагин, когда в чате вводишь register он в cfg записывает стим ид и ник, а вот этот плаг с таймером читает свой цфг. Я направил регистратор на этот цфг, они работают вместе, но можно как-то сделать чтоб формат ввода был в консоли типа sm_regname "nick" "password", и вход типа sm_enter "nick" "password"?
Знаю что переписывать много надо, это трудно будет?
Изображение
Изображение

RU_6uK
Капитан
Капитан
Сообщения: 319
Зарегистрирован: 26.12.2009
Поблагодарили: 15 раз

#15 Сообщение 02.01.2011, 18:20

Это долго будет. Разберись, какая функция в плагине куда обращается. Затем читай мануалы, как исправить плагин, чтобы он работал, как тебе надо.

http://wiki.alliedmods.net/index.php/Ca ... evelopment
ИзображениеИзображение
/.ZoZo./ Zombie Zone - Серверы Left 4 Dead 2, Team Fortress 2, Killing Floor. Всегда рады хорошим игрокам!

Ответить