03.12.2013, 11:48
Привет всем хочу поделиться скриптом сделаным мною вчера.
Система хелперов: есть 5 уровней хелпера, № 5 может давать и убирать хелперку у других.
Команды:
/quest
/reply
/helpers
/hchat
/sethelperlevel
Скрипт нуждаеться в инклудах: a_samp, zcmd, sscanf2 и Dini
Как вам?
Сам скрипт
Система хелперов: есть 5 уровней хелпера, № 5 может давать и убирать хелперку у других.
Команды:
/quest
/reply
/helpers
/hchat
/sethelperlevel
Скрипт нуждаеться в инклудах: a_samp, zcmd, sscanf2 и Dini
Как вам?
Сам скрипт
pawn Code:
// This is a comment
// uncomment the line below if you want to write a filterscript
//#define FILTERSCRIPT
#include <a_samp>
#include <zcmd>
#include <sscanf2>
#include <Dini>
#define DialogHelpersOnline 1069
#define HelperFile "HelperDats/%s.ini"
new bool:LoggedSkin[MAX_PLAYERS];
new Text3D:HelperLevel3D[MAX_PLAYERS];
enum InfoHelperData
{
HelperLevel,
bool:Helper,
HelperName
}
new HelperData[MAX_PLAYERS][InfoHelperData];
new InfoHelperLevel[6][60] =
{
{" [ этот игрок не являеться хелпером ]"},
{"{FF0000}Начальный хелпер[1]{FFFFFF}"},
{"{00FF00}Модератор хелперов[2]{FFFFFF}"},
{"{FFFF00}Хелпер[3]{FFFFFF}"},
{"{0000FF}Заместитель главного хелпера[4]{FFFFFF}"},
{"{FF0000}Главный хелпер[5]{FFFFFF}"}
};
HelperFile_Create(playerid)
{
new file[100], File:PFile, Name[24], LineForFile[100];
format(Name, sizeof(Name), HelperData[playerid][HelperName]);
format(file, sizeof(file), HelperFile, Name);
PFile = fopen(file, io_write);
format(LineForFile, 100, "Level %i\r\n", 0);
fwrite(PFile, LineForFile);
fclose(PFile);
return 1;
}
// This function will load the player's datafile (used when a player connects to the server)
HelperFile_Load(playerid)
{
// Setup local variables
new file[100], File:PFile, Name[24], LineFromFile[100], ParameterName[50], ParameterValue[50];
format(Name, sizeof(Name), HelperData[playerid][HelperName]); // Get the playername
format(file, sizeof(file), HelperFile, Name); // Construct the complete filename for this player's account
// Check if the player's datafile exists
if (fexist(file))
{
PFile = fopen(file, io_read); // Open the playerfile for reading
fread(PFile, LineFromFile); // Read the first line of the file
// Keep reading until the end of the file is found (no more data)
while (strlen(LineFromFile) > 0)
{
StripNewLine(LineFromFile); // Strip any newline characters from the LineFromFile
sscanf(LineFromFile, "s[50]s[50]", ParameterName, ParameterValue); // Extract parametername and parametervalue
if (strcmp(ParameterName, "Level", false) == 0) // If the parametername is correct ("Level")
HelperData[playerid][HelperLevel] = strval(ParameterValue); // Store the playerlevel
}
fclose(PFile); // Close the file
return 1; // Return if the file was read correctly
}
else
return 0; // Return 0 if the file couldn't be read (doesn't exist)
}
HelperFile_Save(playerid)
{
new file[100], File:PFile, Name[24], LineForFile[100];
format(Name, sizeof(Name), HelperData[playerid][HelperName]);
format(file, sizeof(file), HelperFile, Name);
PFile = fopen(file, io_write);
format(LineForFile, 100, "Level %i\r\n",HelperData[playerid][HelperLevel]);
fwrite(PFile, LineForFile);
return 1;
}
Update3DTextLabel(playerid)
{
new msg[60];
format(msg, 60, "%s", InfoHelperLevel[playerid][HelperData[playerid][HelperLevel]]);
HelperLevel3D[playerid] = Create3DTextLabel(msg, 0xFFFFFFFF, 0.0,0.0, 0.0, 20.0, 0, 0);
Attach3DTextLabelToPlayer(HelperLevel3D[playerid], playerid, 0.0, 0.0, 0.0);
}
public OnPlayerConnect(playerid)
{
GetPlayerName(playerid, HelperData[playerid][HelperName], 24);
LoggedSkin[playerid] = false;
HelperData[playerid][Helper] = false;
if (HelperFile_Create(playerid) > 1)
SendClientMessage(playerid, 0xFF0000FF, "____________________________________________________________");
else
HelperFile_Create(playerid);
SetPlayerVirtualWorld(playerid, 0);
SetPlayerInterior(playerid, 0);
return 1;
}
public OnPlayerDisconnect(playerid)
{
HelperFile_Save(playerid);
Delete3DTextLabel(HelperLevel3D[playerid]);
HelperData[playerid][Helper] = false;
HelperData[playerid][HelperLevel] = 0;
}
public OnPlayerSpawn(playerid)
{
if (HelperData[playerid][HelperLevel] >= 1)
HelperData[playerid][Helper] = true;
LoggedSkin[playerid] = true;
HelperFile_Load(playerid);
Update3DTextLabel(playerid);
SendClientMessage(playerid, 0xFF0000FF, "Helper System {0000FF}By Trucker_98_{FF0000} загружена!");
return 1;
}
public OnPlayerText(playerid, text[])
{
new mes[1024], name[24];
GetPlayerName(playerid, name, 24);
if(HelperData[playerid][HelperLevel] >= 1)
{
format(mes, 1024, "..::[%s]::..%s[%d]: {00FF00}%s", InfoHelperLevel[playerid][HelperData[playerid][HelperLevel]], name, playerid, text);
SendClientMessageToAll(0xFFFFFFFF, mes);
}
else
return 0;
return 0;
}
COMMAND:helpers(playerid, params[])
{
new HelperName1[24], ShowHelpers[1024];
if (IsPlayerConnected(playerid))
{
for(new i; i < MAX_PLAYERS; i++)
{
if (HelperData[i][Helper] == true)
{
GetPlayerName(i, HelperName1, 24);
format(ShowHelpers, 1024, "%s _[]_ %s\r\n",InfoHelperLevel[playerid][HelperData[playerid][HelperLevel]], HelperName1);
}
if(strlen(ShowHelpers) > 0)
ShowPlayerDialog(playerid, DialogHelpersOnline, DIALOG_STYLE_LIST, "Хелперы Онлайн", ShowHelpers, "Закрыть", "");
else
ShowPlayerDialog(playerid, DialogHelpersOnline, DIALOG_STYLE_MSGBOX, "Message", "В данный момент на сервере нету хелперов.", "Закрыть", "");
}
}
else
return 0;
return 1;
}
COMMAND:quest(playerid, params[])
{
new Question[100], Name[24], MessageToHelpers[150];
if (IsPlayerConnected(playerid))
{
if (sscanf(params, "s[100]", Question)) SendClientMessage(playerid, 0xFF0000FF, "ВВЕДИТЕ ПРАВЕЛЬНО КОМАНДУ: /quest [опрос]");
else
{
GetPlayerName(playerid, Name, 24);
format(MessageToHelpers, 150, "Опрос от: {0000FF}%s:{00FF00} %s", Name, Question);
SendClientMessage(playerid, 0x00FF00FF, "Ваш опрос отправлен хелперам!");
SendClientMessage(playerid, 0x00FF00FF, "Если вам не приходит ответ, пожалуйста проверьте есть ли хелперы на сервере!>> /quest [опрос] <<");
for (new i; i < MAX_PLAYERS; i++)
{
if (HelperData[i][Helper] == true)
{
SendClientMessage(i, 0xFF0000FF, MessageToHelpers);
GameTextForPlayer(i, "New Question", 3, 3000);
}
}
}
}
else
return 0;
return 1;
}
COMMAND:reply(playerid, params[])
{
new Reply[100], ID, Name[24], MessageToPlayer[150];
if (IsPlayerConnected(playerid))
{
if (HelperData[playerid][Helper] == true)
{
if (LoggedSkin[playerid] == true)
{
if (sscanf(params, "i, s[100]",ID, Reply)) SendClientMessage(playerid, 0xFF0000FF, "ВВЕДИТЕ ПРАВЕЛЬНО КОМАНДУ: /reply [ID игрока] [ответ]");
else
{
if (IsPlayerConnected(ID))
{
GetPlayerName(playerid, Name, 24);
format(MessageToPlayer, 150, "Ответ от:{00FF00}%s:{FFFF00} %s", Name, Reply);
SendClientMessage(ID, 0xFF0000FF, MessageToPlayer);
GameTextForPlayer(ID, "]]OTBET OT XELIIEPA]]", 3, 3000);
}
else
SendClientMessage(playerid, 0xFF0000FF, "Игрок под этом ID-ом не находиться на сервере.");
}
}
else
SendClientMessage(playerid, 0xFF0000FF, "Что-бы пользоваться этой командой вы должны спавниться!");
}
else
SendClientMessage(playerid, 0xFF0000FF, "Вы не являетесь хелпером на этом сервере.");
}
else
return 0;
return 1;
}
COMMAND:hchat(playerid, params[])
{
new Name[24], Message[456], text[128];
if (IsPlayerConnected(playerid))
{
if (HelperData[playerid][Helper] == true)
{
if (LoggedSkin[playerid] == true)
{
if (sscanf(params, "s[128]", text)) SendClientMessage(playerid, 0xFF0000FF, "ВВЕДИТЕ ПРАВЕЛЬНО КОМАНДУ: /hctat [text]");
else
{
GetPlayerName(playerid, Name, 24);
format(Message, 1024, "[HELPER CHAT]{00FF00}%s[%d]: {9933FF}%s", Name, playerid, text);
}
for(new i; i < MAX_PLAYERS; i++)
{
if (HelperData[i][Helper] == true)
{
SendClientMessage(i, 0xFFFFFFFF, Message);
}
}
}
else
SendClientMessage(playerid, 0xFF0000FF, "Что-бы пользоваться этой командой вы должны спавниться!");
}
else
SendClientMessage(playerid, 0xFF0000FF, "Вы не являетесь хелпером на этом сервере.");
}
else
return 0;
return 1;
}
COMMAND:sethelpervelev(playerid, params[])
{
new P_Name[24], H_Name[24], Msg[500], NEWLEVEL, ID;
if (IsPlayerConnected(playerid))
{
if (LoggedSkin[playerid] == true)
{
if (HelperData[playerid][HelperLevel] == 5)
{
if (sscanf(params, "ii", ID, NEWLEVEL)) SendClientMessage(playerid, 0xFF0000FF, "ВВЕДИТЕ ПРАВЕЛЬНО КОМАНДУ: /sethelperlevel [id] [level]");
else
{
GetPlayerName(playerid, P_Name, 24);
GetPlayerName(ID, H_Name, 24);
HelperData[ID][HelperLevel] = NEWLEVEL;
format(Msg, 500, "Главный хелпер {00FF00}%s{FFFFFF} дал хелперу/игроку {FFFF00}%s{FF0000} уровень {FF0000}%i{FFFFFF} (%s).", P_Name, H_Name,NEWLEVEL, InfoHelperLevel[ID][HelperData[ID][HelperLevel]]);
SendClientMessageToAll(0xFFFFFFFF, Msg);
GameTextForPlayer(ID, "Watch the chat please", 2, 3000);
HelperFile_Save(ID);
Update3DTextLabel(playerid);
}
}
else
SendClientMessage(playerid, 0xFF0000FF, "Вы не являетесь главным хелпером этого сервера.");
}
else
SendClientMessage(playerid, 0xFF0000FF, "Что-бы пользоваться этой командой вы должны спавниться!");
}
else
SendClientMessage(playerid, 0xFF0000FF, "Вы не являетесь хелпером на этом сервере.");
return 1;
}