Заказать игровой сервер Контакты (заказать плагин/исправить ошибки/другое) Пожертвовать Поиск

[ вход ]
[ последние сообщения ]

  • Страница 1 из 1
  • 1
Замена Чат значений
Sunday Дата: Воскресенье, 07.10.2012, 23:28:53 | Сообщение # 1
Сообщений: 186
Репутация: 24 [ +/- ]
Здравствуйте ребят, вот не плохой скрипт для замены SM значения в чате на ваше, возник такой вопрос в доработке скрипта, к примеру есть плагин [UMC] который тоже пишет в чате перед действием свое название, каким образом правильно добавить, что бы плагин реагировал не только на [SM] но и на другие заданные значения, например на [UMC]?

Вот сам скрипт:

Code
#include <sourcemod>
#pragma semicolon 1

#define MAXTEXTCOLORS 100

new CountColors = 0;
new String:TextColors[MAXTEXTCOLORS][256];

public OnPluginStart()
{
    HookUserMessage(GetUserMessageId("TextMsg"), TextMsg, true);
}

public OnConfigsExecuted()
{
    RefreshConfig();
}

stock RefreshConfig()
{
    for (new X = 0; X < MAXTEXTCOLORS; X++)
    {
     TextColors[X] = "";
    }
    decl String:sPaths[PLATFORM_MAX_PATH];
    BuildPath(Path_SM, sPaths, sizeof(sPaths),"configs/asp_replace.cfg");
    new Handle:hFile = OpenFile(sPaths, "r");
    new String:sBuffer[256];    
    CountColors = -1;
    while (ReadFileLine(hFile, sBuffer, sizeof(sBuffer)))
    {
     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;
      }
      if(StrContains(buffer, "\x03\x03[UMC]\x01") == 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];
    for(new i = 0; i < playersNum; i++)
    {
     players[i] = ReadPackCell(pack);
    }
    new String:buffer[255];
    ReadPackString(pack, buffer, sizeof(buffer));
    new String:QuickFormat[255];
    new ColorChoose = 0;
    Format(QuickFormat, sizeof(QuickFormat), "%s", TextColors[ColorChoose]);
    ReplaceStringEx(buffer, sizeof(buffer), "[SM]", QuickFormat);
    new Handle:bf = StartMessage("SayText2", players, playersNum, USERMSG_RELIABLE|USERMSG_BLOCKHOOKS);
    BfWriteByte(bf, -1);
    BfWriteByte(bf, true);
    BfWriteString(bf, buffer);
    EndMessage();
}


вот его конфиг asp_replace.cfg и строки внутри:
*FF0000AA*FF0000AA√*FF0000AA&EC95F6

И тут возник вопрос, можно ли сделать так что бы не добавлять в сам скрипт, а прописывать это в конфиге, к примеру что бы плагин реагировал на заданные в конфиге значения, предположим:

Code
sm_replase "[SM]"
{
*FF0000AA*FF0000AA√*FF0000AA&EC95F6 //Галочка означает на что заменить. Между ней значения параметров цвета.
}
sm_replase "[UMC]"
{
*FF0000AA*FF0000AA√*FF0000AA&EC95F6
}


Я это как то по своему вижу, возможно не совсем правильно но мысль думаю донес! Уверен после такой доработки, очень хороший плагин получиться, если это возможно.

Прилагаю скрипт и конфиг.

Добавлено (07.10.2012, 23:28:53)
---------------------------------------------
я сделал вот так:

Code

public Action:TextMsg(UserMsg:msg_id, Handle:bf, const players[], playersNum, bool:reliable, bool:init)
{
   if(CountColors != -1)
   {
    if(reliable)
    {
     new String:buffer[256];
     new Handle:pack;
     BfReadString(bf, buffer, sizeof(buffer));
     if(StrContains(buffer, "\x03[SM]") == 0)
     {
      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;
     }
     else if(StrContains(buffer, "\x03[UMC]") == 0)
     {
      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];
   for(new i = 0; i < playersNum; i++)
   {
    players[i] = ReadPackCell(pack);
   }
   new String:buffer[255];
   ReadPackString(pack, buffer, sizeof(buffer));
   new String:QuickFormat[255];
   new ColorChoose = 0;
   Format(QuickFormat, sizeof(QuickFormat), "%s", TextColors[ColorChoose]);

   ReplaceStringEx(buffer, sizeof(buffer), "[SM]", QuickFormat);
   ReplaceStringEx(buffer, sizeof(buffer), "[UMC]", QuickFormat);

   new Handle:bf = StartMessage("SayText2", players, playersNum, USERMSG_RELIABLE|USERMSG_BLOCKHOOKS);
   BfWriteByte(bf, -1);
   BfWriteByte(bf, true);
   BfWriteString(bf, buffer);
   EndMessage();
}


и это работает хорошо вроде но хотелось грамотнее это сделать и как выше описал, все в конфиге а не внутри кода.

Гости не могут скачивать файлы


Сообщение отредактировал Sunday - Воскресенье, 07.10.2012, 23:30:29
 
  • Страница 1 из 1
  • 1
Поиск: