Dreizehnt
Доминик
- Сообщения
- 1,160
- Реакции
- 798
Поддержите скриптингом пожалуйста :tomato:Есть нужда в замене префикса [SM] на свой префикс, в DOD:S версия для CS:S не отзывается, блокирует вообще появление сообщения с префиксом, "конфиг" включения создаёт, ошибка такая:
[Any] "[SM]" Prefix changer! UPDATE: March 22, 2013 - AlliedModders
И ещё нужен был плагин для рекламы, но цвета отличаются между DOD:S и CS:S, использовал этот:
Adverts - Форум и он работает, но цвет светло-зелёного в плагине {DARKGREEN}... Возможно как-то узнать все цвета чата для DOD:S& - тёмно-красный и тёмно-зелёный по идее должны быть ещё...
C-подобный:
L 01/01/2017 - 08:37:05: [SM] [1] Line 136, D:\gmode.ru\addons\sourcemod\scripting\dod_Sourcemod_Prefix_Changer.sp::timer_strip
L 01/01/2017 - 08:37:07: [SM] Exception reported: Invalid message name: "SayText2"
L 01/01/2017 - 08:37:07: [SM] Blaming: dod_Sourcemod_Prefix_Changer.smx
[Any] "[SM]" Prefix changer! UPDATE: March 22, 2013 - AlliedModders
PHP:
#include <sourcemod>
#pragma semicolon 1
#define MAXTEXTCOLORS 100
// Plugin definitions
#define PLUGIN_VERSION "0.32"
public Plugin:myinfo =
{
name = "Default SM Text Replacer",
author = "Mitch/Bacardi",
description = "Replaces the '[SM]' text with more color!",
version = PLUGIN_VERSION,
url = ""
};
new Handle:cvar_randomcolor = INVALID_HANDLE;
new UseRandomColors = 0;
new CountColors = 0;
new String:TextColors[MAXTEXTCOLORS][256];
public OnPluginStart()
{
cvar_randomcolor = CreateConVar( "sm_textcol_random", "1", "Uses random colors that you defined. 1- random 0-Default" );
AutoExecConfig(true, "sm_textreplacer");
HookConVarChange(cvar_randomcolor, Event_CvarChange);
CreateConVar("sm_textreplacer_version", PLUGIN_VERSION, "text replacer version", FCVAR_PLUGIN|FCVAR_SPONLY|FCVAR_REPLICATED|FCVAR_NOTIFY);
RegAdminCmd("sm_reloadstc", Command_ReloadConfig, ADMFLAG_CONFIG, "Reloads Text color's config file");
HookUserMessage(GetUserMessageId("TextMsg"), TextMsg, true);
}
public Action:Command_ReloadConfig(client, args) {
RefreshConfig();
LogAction(client, -1, "Reloaded [SM] Text replacer config file");
ReplyToCommand(client, "[STC] Reloaded config file.");
return Plugin_Handled;
}
public OnConfigsExecuted()
{
RefreshConfig();
}
public Event_CvarChange(Handle:convar, const String:oldValue[], const String:newValue[])
{
RefreshConfig();
}
stock RefreshConfig()
{
UseRandomColors = GetConVarInt(cvar_randomcolor);
for (new X = 0; X < MAXTEXTCOLORS; X++)
{
//Format(TextColors[X], sizeof(TextColors), "");
TextColors[X] = "";
}
decl String:sPaths[PLATFORM_MAX_PATH];
BuildPath(Path_SM, sPaths, sizeof(sPaths),"configs/sm_textcolors.cfg");
new Handle:hFile = OpenFile(sPaths, "r");
new String:sBuffer[256];
//new len;
CountColors = -1;
while (ReadFileLine(hFile, sBuffer, sizeof(sBuffer)))
{
/*len = strlen(sBuffer);
if (sBuffer[len-1] == '\n')
sBuffer[--len] = '\0';*/
TrimString(sBuffer);
if(!StrEqual(sBuffer,"",false)){
ReplaceString(sBuffer, sizeof(sBuffer), "*", "\x08");
ReplaceString(sBuffer, sizeof(sBuffer), "&", "\x07");
CountColors++;
Format(TextColors[CountColors], sizeof(TextColors), "%s", sBuffer);
PrintToChatAll("\x01%s", sBuffer);
}
}
CloseHandle(hFile);
}
public Action:TextMsg(UserMsg:msg_id, Handle:bf, const players[], playersNum, bool:reliable, bool:init)
{
if(CountColors != -1)
{
if(reliable)
{
new String:buffer[256];
BfReadString(bf, buffer, sizeof(buffer));
if(StrContains(buffer, "\x03[SM]") == 0)
{
new Handle:pack;
CreateDataTimer(0.0, timer_strip, pack);
WritePackCell(pack, playersNum);
for(new i = 0; i < playersNum; i++)
{
WritePackCell(pack, players[i]);
}
WritePackString(pack, buffer);
ResetPack(pack);
return Plugin_Handled;
}
}
}
return Plugin_Continue;
}
public Action:timer_strip(Handle:timer, Handle:pack)
{
new playersNum = ReadPackCell(pack);
new players[playersNum];
new client, count;
for(new i = 0; i < playersNum; i++)
{
client = ReadPackCell(pack);
if(IsClientInGame(client))
{
players[count++] = client;
}
}
if(count < 1) return;
playersNum = count;
new String:buffer[255];
ReadPackString(pack, buffer, sizeof(buffer));
new String:QuickFormat[255];
new ColorChoose = 0;
if(UseRandomColors == 1) ColorChoose = GetRandomInt(0, CountColors);
Format(QuickFormat, sizeof(QuickFormat), "%s", TextColors[ColorChoose]);
ReplaceStringEx(buffer, sizeof(buffer), "[SM]", QuickFormat);
new Handle:bf = StartMessage("SayText2", players, playersNum, USERMSG_RELIABLE|USERMSG_BLOCKHOOKS);
//BfWriteString(bf, buffer);
BfWriteByte(bf, -1);
BfWriteByte(bf, true);
BfWriteString(bf, buffer);
EndMessage();
}
И ещё нужен был плагин для рекламы, но цвета отличаются между DOD:S и CS:S, использовал этот:
Adverts - Форум и он работает, но цвет светло-зелёного в плагине {DARKGREEN}... Возможно как-то узнать все цвета чата для DOD:S& - тёмно-красный и тёмно-зелёный по идее должны быть ещё...
PHP:
#include <sourcemod>
public Plugin:myinfo =
{
name = "Adverts",
author = "wS / Schmidt",
description = "Показ рекламы",
version = "1.1",
url = "http://world-source.ru/"
};
new Handle:KV,
Handle:adverts_delay,
Handle:adverts_timer,
Handle:mp_friendlyfire;
public OnPluginStart()
{
adverts_delay = CreateConVar("adverts_delay", "60");
mp_friendlyfire = FindConVar("mp_friendlyfire");
RegServerCmd("adverts_reload", adverts_reload);
LoadAdverts();
}
public Action:ShowAdvert_Timer(Handle:timer)
{
for (new i = 1; i <= MaxClients; i++)
{
if (IsClientInGame(i))
{
ShowAdvert();
adverts_timer = CreateTimer(GetConVarFloat(adverts_delay), ShowAdvert_Timer);
return;
}
}
adverts_timer = INVALID_HANDLE;
}
ShowAdvert()
{
decl String:text[250];
KvGetString(KV, "text", text, 250);
if (StrContains(text, "{FRAGPLAYER}") != -1)
{
new FRAGPLAYER = FindFRAGPLAYER();
if (FRAGPLAYER > 0)
{
decl String:x_str[65];
Format(x_str, 65, "%N (фрагов: %d)", FRAGPLAYER, GetClientFrags(FRAGPLAYER));
ReplaceString(text, 250, "{FRAGPLAYER}", x_str);
}
else
{
SetNextKey();
return;
}
}
if (StrContains(text, "{CASHPLAYER}") != -1)
{
new CASHPLAYER = FindCASHPLAYER();
if (CASHPLAYER > 0)
{
decl String:x_str[65];
Format(x_str, 65, "%N ($%d)", CASHPLAYER, GetEntProp(CASHPLAYER, Prop_Send, "m_iAccount"));
ReplaceString(text, 250, "{CASHPLAYER}", x_str);
}
else
{
SetNextKey();
return;
}
}
if (StrContains(text, "{HURTPLAYER}") != -1)
{
new HURTPLAYER = FindHURTPLAYER();
if (HURTPLAYER > 0)
{
decl String:x_str[65];
Format(x_str, 65, "%N (%d hp)", HURTPLAYER, GetClientHealth(HURTPLAYER));
ReplaceString(text, 250, "{HURTPLAYER}", x_str);
}
else
{
SetNextKey();
return;
}
}
if (StrContains(text, "{FF}") != -1)
{
if (GetConVarInt(mp_friendlyfire) == 1) ReplaceString(text, 250, "{FF}", "ДА");
else ReplaceString(text, 250, "{FF}", "НЕТ");
}
if (StrContains(text, "{CURRENTMAP}") != -1)
{
decl String:map[75];
GetCurrentMap(map, 75);
ReplaceString(text, 250, "{CURRENTMAP}", map);
}
if (StrContains(text, "{PLAYERS}") != -1)
{
decl String:str_players[5];
IntToString(GetClientCount(), str_players, 5);
ReplaceString(text, 250, "{PLAYERS}", str_players);
}
if (StrContains(text, "{TIMELEFT}") != -1)
{
new timeleft;
if (GetMapTimeLeft(timeleft) && timeleft > 0)
{
decl String:x_str[20];
Format(x_str, 20, "%d:%02d", timeleft / 60, timeleft % 60);
ReplaceString(text, 250, "{TIMELEFT}", x_str);
}
else ReplaceString(text, 250, "{TIMELEFT}", "0");
}
new type = KvGetNum(KV, "type");
if (type == 2) PrintHintTextToAll(text);
else if (type == 3) PrintCenterTextAll(text);
else
{
ReplaceString(text, 250, "{DEFAULT}", "\x01");
ReplaceString(text, 250, "{GREEN}", "\x04");
ReplaceString(text, 250, "{LIGHTGREEN}", "\x03");
ReplaceString(text, 250, "{DARKGREEN}", "\x05");
PrintToChatAll(text);
}
SetNextKey(false);
}
SetNextKey(bool:show_advert = true)
{
if (!KvGotoNextKey(KV))
{
KvRewind(KV);
KvGotoFirstSubKey(KV);
}
if (show_advert) ShowAdvert();
}
FindFRAGPLAYER()
{
new x = 0, best_client = 0, best_value;
for (new i = 1; i <= MaxClients; i++)
{
if (IsClientInGame(i) && (best_value = GetClientFrags(i)) > x)
{
x = best_value;
best_client = i;
}
}
return best_client;
}
FindCASHPLAYER()
{
new x = 800, best_client = 0, best_value;
for (new i = 1; i <= MaxClients; i++)
{
if (IsClientInGame(i) && (best_value = GetEntProp(i, Prop_Send, "m_iAccount")) > x)
{
x = best_value;
best_client = i;
}
}
return best_client;
}
FindHURTPLAYER()
{
new x = 100, best_client = 0, best_value;
for (new i = 1; i <= MaxClients; i++)
{
if (IsClientInGame(i) && IsPlayerAlive(i) && (best_value = GetClientHealth(i)) < x)
{
x = best_value;
best_client = i;
}
}
return best_client;
}
public OnClientPutInServer(client)
{
if (adverts_timer == INVALID_HANDLE) adverts_timer = CreateTimer(GetConVarFloat(adverts_delay), ShowAdvert_Timer);
}
public Action:adverts_reload(args)
{
if (args == 0)
{
if (LoadAdverts()) PrintToServer("Реклама успешно перезагружена");
else PrintToServer("Ошибка");
}
return Plugin_Handled;
}
bool:LoadAdverts()
{
if (adverts_timer != INVALID_HANDLE)
{
KillTimer(adverts_timer);
adverts_timer = INVALID_HANDLE;
}
if (KV != INVALID_HANDLE) CloseHandle(KV);
KV = CreateKeyValues("adverts");
if (!FileToKeyValues(KV, "cfg/adverts.txt") || !KvGotoFirstSubKey(KV))
{
CloseHandle(KV);
SetFailState("Проблема в cfg/adverts.txt");
return false;
}
adverts_timer = CreateTimer(3.0, ShowAdvert_Timer);
return true;
}