02.12.2013, 16:59
Вот сделал систему хелперов для сервера.
Описание: есть 5 уровней хелпера, 5 самый главный который может назначить хелпером когото.
Есть функция 3Д текстов над игроком в котором написан уровень хелпера игрока.
Команды:
/quest
/reply
/helpers
/hchat
/sethelperlevel
Описание: есть 5 уровней хелпера, 5 самый главный который может назначить хелпером когото.
Есть функция 3Д текстов над игроком в котором написан уровень хелпера игрока.
Команды:
/quest
/reply
/helpers
/hchat
/sethelperlevel
Код:
// 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; }