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 |
|
| |