[CS:S/CS:GO] BSD Fortune port for Sourcemod[v0.1]

Alraune

Участник
Сообщения
216
Реакции
52
Описание:
Плагин позволяет выводить в чат забавные фразы игрокам, написавшим соответствующие команды.

Для себя сделала изменение в исходнике команду - !fortune на !fraza ( показалось более уместным ) Вместо предложенного автором плагина текста выставила свои - короткие цитаты и шутки.
Из замечаний - фраз должно быть не менее 1500, иначе плагин их не показывает. Решила это банальным копированием списка неск. раз, временно.
На мой взгляд возможности использования плагина ограничиваются только фантазией ) Гадание, военные термины ( разьяснения военной терминологии ), обучение иностанным словам ...и т.д. если это вообще нужно ;)
Неприятный момент - в логе идет ошибка - [SM] [0] Line 96, F:\компелятор\addons\sourcemod\scripting\Fortune.sp::Fortune()
Я никак не скриптер и если кто то подскажет как это решить - буду рада :)
Взят отсюда
https://forums.alliedmods.net/showthread.php?p=2366449

Команды
/fortune, !fortune и sm_fortune

Cvar :

sm_fortunecomnoroff 1
Enable or Disable(1/0) /fortune, !fortune and sm_fortune.
 

Вложения

  • Fortune.7z
    208.4 КБ · Просмотры: 56
Последнее редактирование:

Alraune

Участник
Сообщения
216
Реакции
52
Типа ГОНОР?)) А зря. Вроде не с чего. Уж вам то точно, Tonki_Ton ;)
Но тем не менее ... Фразы ЛЮБЫЕ. Хоть гороскоп. Хоть предсказания. Хоть иностранные слова с переводом. Ограничено лишь допустимым количеством знаков в чате.
Например я поставила короткие забавные высказывания.
Править fortune.txt. Затем закинуть его в addons\sourcemod\data
smx в addons\sourcemod\plugins

Игрок пишет в чат !fortune и получает там же забавное высказывание вроде :
--------
Если во время дискуссии люди обмениваются знаниями,
то споря, они обмениваются невежеством.
--------

:)
 
Последнее редактирование:

Danyas

Участник
Сообщения
2,174
Реакции
1,072
Возможный фикс ошибки, так как сама ошибка не указана.

PHP:
 #pragma semicolon 1

#define PLUGIN_AUTHOR "RNR"
#define PLUGIN_VERSION "0.1"

#include <sourcemod>

char Path[PLATFORM_MAX_PATH];
Handle fortuneCommand = INVALID_HANDLE;

public Plugin myinfo = 
{
	name = "Fortune port :D",
	author = PLUGIN_AUTHOR,
	description = "Sourcemod port of Fortune",
	version = PLUGIN_VERSION,
	url = "www.sourcemod.net"
};

public void OnPluginStart()
{
	BuildPath(Path_SM, Path, sizeof(Path), "data/fortune.txt");
	fortuneCommand = CreateConVar("sm_fortunecomnoroff", "1", "Enable or Disable(1/0) /fortune, !fortune and sm_fortune.", FCVAR_NOTIFY | FCVAR_PLUGIN);
	if(GetConVarBool(fortuneCommand))
		RegConsoleCmd("sm_fortune", ReadAFortune);
}

public OnClientPutInServer(client)
{
	CreateTimer(15.0, Fortune, client);
}
public Action ReadAFortune(int client, int args)
{
	Handle file = OpenFile(Path, "r");
	decl String:text[4096], String:buffer[1024];
	int len = 0;
	int random, count = 0;
	if(file == INVALID_HANDLE)
	{
		LogError("Cannot connect to Fortune.txt");
		return Plugin_Handled;
	}
	random = GetRandomInt(1, 3518);
	
	while(!IsEndOfFile(file) && ReadFileLine(file, buffer, sizeof(buffer)))
	{
		if(buffer[0] == '%')
		{
			count++;
		}
		if(count == random)
		{
				if(buffer[0] != '%')
				{
					len += Format(text[len], sizeof(text)-len, "%s", buffer);
				}
		}
		if(count > random)
			break;
	}
	ReplyToCommand(client, "%s", text);
	
	return Plugin_Handled;
}

public Action Fortune(Handle Timer, any client)
{
	Handle file = OpenFile(Path, "r");
	decl String:text[4096], String:buffer[1024];
	int len = 0;
	int random, count = 0;
	if(file == INVALID_HANDLE)
	{
		LogError("Cannot connect to Fortune.txt");
		return Plugin_Handled;
	}
	random = GetRandomInt(1, 3518);
	
	while(!IsEndOfFile(file) && ReadFileLine(file, buffer, sizeof(buffer)))
	{
		if(buffer[0] == '%')
		{
			count++;
		}
		if(count == random)
		{
				if(buffer[0] != '%')
				{
					len += Format(text[len], sizeof(text)-len, "%s", buffer);
				}
		}
		if(count > random)
			break;
	}
	
	if (IsClientInGame(client)) PrintToChat(client, "%s", text);
	
	return Plugin_Handled;
}
 

Вложения

  • textljagkX.smx
    4.9 КБ · Просмотры: 12

Alraune

Участник
Сообщения
216
Реакции
52
читается каждый раз файл заново - ашипка
Каждый Следующий раунд - новая фраза. Если писать неск. раз подряд за раунд ,то фраза действительно дублируется. Видимо так задумано автором плагина.

Мой список. Может кому то пригодится...
 

Вложения

  • fortune.rar
    7.8 КБ · Просмотры: 17
Последнее редактирование:

Alraune

Участник
Сообщения
216
Реакции
52
Возможный фикс ошибки, так как сама ошибка не указана.

PHP:
 #pragma semicolon 1

#define PLUGIN_AUTHOR "RNR"
#define PLUGIN_VERSION "0.1"

#include <sourcemod>

char Path[PLATFORM_MAX_PATH];
Handle fortuneCommand = INVALID_HANDLE;

public Plugin myinfo = 
{
    name = "Fortune port :D",
    author = PLUGIN_AUTHOR,
    description = "Sourcemod port of Fortune",
    version = PLUGIN_VERSION,
    url = "www.sourcemod.net"
};

public void OnPluginStart()
{
    BuildPath(Path_SM, Path, sizeof(Path), "data/fortune.txt");
    fortuneCommand = CreateConVar("sm_fortunecomnoroff", "1", "Enable or Disable(1/0) /fortune, !fortune and sm_fortune.", FCVAR_NOTIFY | FCVAR_PLUGIN);
    if(GetConVarBool(fortuneCommand))
        RegConsoleCmd("sm_fortune", ReadAFortune);
}

public OnClientPutInServer(client)
{
    CreateTimer(15.0, Fortune, client);
}
public Action ReadAFortune(int client, int args)
{
    Handle file = OpenFile(Path, "r");
    decl String:text[4096], String:buffer[1024];
    int len = 0;
    int random, count = 0;
    if(file == INVALID_HANDLE)
    {
        LogError("Cannot connect to Fortune.txt");
        return Plugin_Handled;
    }
    random = GetRandomInt(1, 3518);
    
    while(!IsEndOfFile(file) && ReadFileLine(file, buffer, sizeof(buffer)))
    {
        if(buffer[0] == '%')
        {
            count++;
        }
        if(count == random)
        {
                if(buffer[0] != '%')
                {
                    len += Format(text[len], sizeof(text)-len, "%s", buffer);
                }
        }
        if(count > random)
            break;
    }
    ReplyToCommand(client, "%s", text);
    
    return Plugin_Handled;
}

public Action Fortune(Handle Timer, any client)
{
    Handle file = OpenFile(Path, "r");
    decl String:text[4096], String:buffer[1024];
    int len = 0;
    int random, count = 0;
    if(file == INVALID_HANDLE)
    {
        LogError("Cannot connect to Fortune.txt");
        return Plugin_Handled;
    }
    random = GetRandomInt(1, 3518);
    
    while(!IsEndOfFile(file) && ReadFileLine(file, buffer, sizeof(buffer)))
    {
        if(buffer[0] == '%')
        {
            count++;
        }
        if(count == random)
        {
                if(buffer[0] != '%')
                {
                    len += Format(text[len], sizeof(text)-len, "%s", buffer);
                }
        }
        if(count > random)
            break;
    }
    
    if (IsClientInGame(client)) PrintToChat(client, "%s", text);
    
    return Plugin_Handled;
}

:yahoo:Ваш фикс помог. СПАСИБО!!! )
Действительно пресловутая 96 строка
PrintToChat(client, "%s", text);
меняем на :
if (IsClientInGame(client)) PrintToChat(client, "%s", text);
 

R1KO

fuck society
Сообщения
9,460
Реакции
7,799
  • Команда форума
  • #9
The End Is Near..., тут 2 стороны медали... Либо открывать каждый раз нагружая проц либо держать столько инфы в памяти и занимать операривку.
Всё же 2-й вариант приемлимей.
Но это позволит юзать любое количество фраз
 

R1KO

fuck society
Сообщения
9,460
Реакции
7,799
  • Команда форума
  • #12
в плагине 2 утечки.
как минимум так:
PHP:
#pragma semicolon 1

#define PLUGIN_AUTHOR "RNR"
#define PLUGIN_VERSION "0.1"

#include <sourcemod>

char Path[PLATFORM_MAX_PATH];
ConVar fortuneCommand;

public Plugin myinfo = 
{
	name = "Fortune port :D",
	author = PLUGIN_AUTHOR,
	description = "Sourcemod port of Fortune",
	version = PLUGIN_VERSION,
	url = "www.sourcemod.net"
};

ArrayList g_hArray;

public void OnPluginStart()
{
	g_hArray = new ArrayList(ByteCountToCells(192));
	BuildPath(Path_SM, Path, sizeof(Path), "data/fortune.txt");
	fortuneCommand = CreateConVar("sm_fortunecomnoroff", "1", "Enable or Disable(1/0) /fortune, !fortune and sm_fortune.", FCVAR_NOTIFY | FCVAR_PLUGIN);
	
	RegConsoleCmd("sm_fortune", ReadAFortune);
}

public OnMapStart()
{
	g_hArray.Clear();

	Handle file = OpenFile(Path, "r");
	
	if(file == null)
	{
		SetFailState("Cannot connect to Fortune.txt");
	}
	
	char text[192];
	while(!IsEndOfFile(file) && ReadFileLine(file, text, sizeof(text)))
	{
		TrimString(text);
		if(text[0])
		{
			g_hArray.PushString(text);
		}
	}
	
	delete file;
}

public OnClientPutInServer(client)
{
	if(fortuneCommand.BoolValue)
	{
		CreateTimer(15.0, Timer_Fortune, GetClientUserId(client), TIMER_FLAG_NO_MAPCHANGE);
	}
}

public Action ReadAFortune(int client, int args)
{
	if(fortuneCommand.BoolValue)
	{
		Fortune(client);
	}

	return Plugin_Handled;
}

public Action Timer_Fortune(Handle hTimer, any userid)
{
	int client = GetClientOfUserId(userid);
	if(client)
	{
		Fortune(client);
	}
	
	return Plugin_Stop;
}

void Fortune(int client)
{
	char text[192];
	g_hArray.GetString(GetRandomInt(0, g_hArray.Length-1), text, sizeof(text));
	if(client)
	{
		PrintToChat(client, text);
	}
	else
	{
		PrintToServer(text);
	}
}
 
Последнее редактирование:

Alraune

Участник
Сообщения
216
Реакции
52
плагине 2 утечки.
как минимум так:
PHP:
#pragma semicolon 1

#define PLUGIN_AUTHOR "RNR"
#define PLUGIN_VERSION "0.1"

#include <sourcemod>

char Path[PLATFORM_MAX_PATH];
ConVar fortuneCommand;

public Plugin myinfo = 
{
    name = "Fortune port :D",
    author = PLUGIN_AUTHOR,
    description = "Sourcemod port of Fortune",
    version = PLUGIN_VERSION,
    url = "www.sourcemod.net"
};

ArrayList g_hArray;

public void OnPluginStart()
{
    g_hArray = new ArrayList(ByteCountToCells(192));
    BuildPath(Path_SM, Path, sizeof(Path), "data/fortune.txt");
    fortuneCommand = CreateConVar("sm_fortunecomnoroff", "1", "Enable or Disable(1/0) /fortune, !fortune and sm_fortune.", FCVAR_NOTIFY | FCVAR_PLUGIN);
    
    RegConsoleCmd("sm_fortune", ReadAFortune);
}

public OnMapStart()
{
    g_hArray.Clear();

    Handle file = OpenFile(Path, "r");
    
    if(file == null)
    {
        SetFailState("Cannot connect to Fortune.txt");
    }
    
    char text[192];
    while(!IsEndOfFile(file) && ReadFileLine(file, text, sizeof(text)))
    {
        TrimString(text);
        if(text[0])
        {
            g_hArray.PushString(text);
        }
    }
    
    delete file;
}

public OnClientPutInServer(client)
{
    if(fortuneCommand.BoolValue)
    {
        CreateTimer(15.0, Timer_Fortune, GetClientUserId(client), TIMER_FLAG_NO_MAPCHANGE);
    }
}

public Action ReadAFortune(int client, int args)
{
    if(fortuneCommand.BoolValue)
    {
        Fortune(client);
    }

    return Plugin_Handled;
}

public Action Timer_Fortune(Handle hTimer, any userid)
{
    int client = GetClientOfUserId(userid);
    if(client)
    {
        Fortune(client);
    }
    
    return Plugin_Stop;
}

void Fortune(int client)
{
    char text[192];
    g_hArray.GetString(GetRandomInt(0, g_hArray.Length), text, sizeof(text));
    if(client)
    {
        PrintToChat(client, text);
    }
    else
    {
        PrintToServer(text);
    }
}

Скомпелировала. Плагин так не работает к сожалению... Сервер css34
 

Hejter

xor ebx, ebx
Сообщения
1,759
Реакции
393
плагине 2 утечки.
как минимум так:
PHP:
#pragma semicolon 1

#define PLUGIN_AUTHOR "RNR"
#define PLUGIN_VERSION "0.1"

#include <sourcemod>

char Path[PLATFORM_MAX_PATH];
ConVar fortuneCommand;

public Plugin myinfo = 
{
	name = "Fortune port :D",
	author = PLUGIN_AUTHOR,
	description = "Sourcemod port of Fortune",
	version = PLUGIN_VERSION,
	url = "www.sourcemod.net"
};

ArrayList g_hArray;

public void OnPluginStart()
{
	g_hArray = new ArrayList(ByteCountToCells(192));
	BuildPath(Path_SM, Path, sizeof(Path), "data/fortune.txt");
	fortuneCommand = CreateConVar("sm_fortunecomnoroff", "1", "Enable or Disable(1/0) /fortune, !fortune and sm_fortune.", FCVAR_NOTIFY | FCVAR_PLUGIN);
	
	RegConsoleCmd("sm_fortune", ReadAFortune);
}

public OnMapStart()
{
	g_hArray.Clear();

	Handle file = OpenFile(Path, "r");
	
	if(file == null)
	{
		SetFailState("Cannot connect to Fortune.txt");
	}
	
	char text[192];
	while(!IsEndOfFile(file) && ReadFileLine(file, text, sizeof(text)))
	{
		TrimString(text);
		if(text[0])
		{
			g_hArray.PushString(text);
		}
	}
	
	delete file;
}

public OnClientPutInServer(client)
{
	if(fortuneCommand.BoolValue)
	{
		CreateTimer(15.0, Timer_Fortune, GetClientUserId(client), TIMER_FLAG_NO_MAPCHANGE);
	}
}

public Action ReadAFortune(int client, int args)
{
	if(fortuneCommand.BoolValue)
	{
		Fortune(client);
	}

	return Plugin_Handled;
}

public Action Timer_Fortune(Handle hTimer, any userid)
{
	int client = GetClientOfUserId(userid);
	if(client)
	{
		Fortune(client);
	}
	
	return Plugin_Stop;
}

void Fortune(int client)
{
	char text[192];
	g_hArray.GetString(GetRandomInt(0, g_hArray.Length), text, sizeof(text));
	if(client)
	{
		PrintToChat(client, text);
	}
	else
	{
		PrintToServer(text);
	}
}

Новый синтаксис работает на v34?
 

R1KO

fuck society
Сообщения
9,460
Реакции
7,799
  • Команда форума
  • #17
Последнее редактирование:

Alraune

Участник
Сообщения
216
Реакции
52
Вроде всё норм. у себя проверил. CSS OB (sm 1.7.3) - работает


С 1.7.
1.6.3 - это вроде кастрированная ( убраны недоступные для ноу стим 34 возможности ) версия 1.7. от мурены ( встроена в панель от хостинга ) По крайней мере компиляция с 1.7 полностью подходит
SourceMod 1.7.2 пробовала как то поставить , но сервер не запустился у меня... Пришлось бэкап делать. Больше не пыталась

В общем плагин то стоит, но он нафиг никому не встал на сервере :sad: . Одна я играюсь им
 
Сверху Снизу