lancelot
Новичок
Админка и система авторизации на mxINI не сохраняет деньги, с банами всё впорядке.
PHP:
#include <a_samp>
#include <mxINI>
#define DialogLogin 100
#define DialogRegiser 101
#define DialogPlayer 102
#define DialogClickPlayer 103
#define DialogAdminMsg 104
#define DialogSetHP 105
#define DialogSetAR 106
#define DialogSetMN 107
#define DialogKick 108
#define DialogBans 109
#define DialogFreeze 110
#define DialogMuted 111
#define DialogHealth 112
#define DialogArmour 113
#define DialogMoney 114
#define DialogKills 115
#define DialogRazban 116
#define DialogDostup 117
#define ADMIN_SPEC_TYPE_NONE 0
#define ADMIN_SPEC_TYPE_PLAYER 1
#define ADMIN_SPEC_TYPE_VEHICLE 2
#pragma tabsize 0
forward TimeOutMute(playerid);
forward SaveAccounts();
enum pInfo
{
pMoney,
pBanned,
pAdmin
};
new Player[MAX_PLAYERS][pInfo];
new ClickID[MAX_PLAYERS];
new TimeMute[MAX_PLAYERS];
new gSpectateID[MAX_PLAYERS];
new gSpectateType[MAX_PLAYERS];
public OnPlayerConnect(playerid)
{
new pString[64];
format(pString,64,"users/%s.ini",PlayerName(playerid));
if (fexist(pString))
{
ShowPlayerDialog(playerid,DialogLogin, DIALOG_STYLE_INPUT,
"Авторизация","Добро пожаловать на сервер!\nВведите пароль указанный при регистрации:", "Ввод", "Выход");
}
else
{
ShowPlayerDialog(playerid,DialogRegiser, DIALOG_STYLE_INPUT,
"Регистрация","Добро пожаловать на сервер!\nВаш ник не зарегестрирован\n\
Пожалуйста, введите пароль для регистрации на сервере:", "Ввод", "Выход");
}
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
for(new x=0; x<MAX_PLAYERS; x++)
{
if(GetPlayerState(x) == PLAYER_STATE_SPECTATING && gSpectateID[x] == playerid)
{
AdvanceSpectate(x);
}
}
GetPlayerMoney(Player[playerid][pMoney]);
new sString[64];
format(sString, 64, "users/%s.ini", PlayerName(playerid));
new iniFile = ini_openFile(sString);
ini_setInteger(iniFile, "Money", Player[playerid][pMoney]);
ini_closeFile(iniFile);
return 1;
}
public OnPlayerDeath(playerid, killerid, reason)
{
for(new x=0; x<MAX_PLAYERS; x++)
{
if(GetPlayerState(x) == PLAYER_STATE_SPECTATING && gSpectateID[x] == playerid)
{
AdvanceSpectate(x);
}
}
return 1;
}
public OnPlayerText(playerid, text[])
{
if(GetPVarInt(playerid,"Muted") == 1)return false;
return 1;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid == DialogLogin)
{
if(response)
{
new pString[64],Pass[64];
format(pString, 64, "users/%s.ini", PlayerName(playerid));
new iniFile = ini_openFile(pString);
ini_getString(iniFile, "Password", Pass);
if(!strcmp(inputtext,Pass,true) && (strlen(inputtext) != 0))
{
ini_getInteger(iniFile,"Money",Player[playerid][pMoney]);
ini_getInteger(iniFile,"Banned",Player[playerid][pBanned]);
ini_getInteger(iniFile,"Admin",Player[playerid][pAdmin]);
GivePlayerMoney(playerid,Player[playerid][pMoney]);
ini_closeFile(iniFile);
if(Player[playerid][pBanned] == 1)
{
SendClientMessage(playerid,0xF6F6F6AA,"Извените, Но {F60000}ваш аккаунт забанен {F6F6F6}на сервере.");
SendClientMessage(playerid,0xF6F6F6AA,"Соединение с сервером {F60000}закрыто.");
SendClientMessage(playerid,0xF6F6F6AA,"Наберите {F60000}/q {F6F6F6}для выхода.");
Kick(playerid);
return true;
}
else if(Player[playerid][pAdmin] == 0)
{
SetPVarInt(playerid,"ADMINKA",0);
SendClientMessage(playerid,0xF6F6F6AA,"Авторизация прошла {F60000}успешно!");
}
else if(Player[playerid][pAdmin] == 1)
{
SetPVarInt(playerid,"ADMINKA",1);
SendClientMessage(playerid,0xF6F6F6AA,"Авторизация прошла {F60000}успешно!");
SendClientMessage(playerid,0xF6F6F6AA,"Вы зашли как {F60000}Модератор.");
}
else if(Player[playerid][pAdmin] == 2)
{
SetPVarInt(playerid,"ADMINKA",2);
SendClientMessage(playerid,0xF6F6F6AA,"Авторизация прошла {F60000}успешно!");
SendClientMessage(playerid,0xF6F6F6AA,"Вы зашли как {F60000}Администратор.");
}
return true;
}
else
{
ShowPlayerDialog(playerid,DialogLogin, DIALOG_STYLE_INPUT,
"Авторизация","Введенный пароль не соответствует указанному при регистрации.\nВведите пароль:", "Ввод", "Выход");
return true;
}
}
else
{
new kString[145];
format(kString,sizeof(kString),"%s[ID:%d] {F6F6F6}Кикнут с сервера. Причина: {F60000}Отказ от авторизации",PlayerName(playerid),playerid);
SendClientMessageToAll(0xF60000AA,kString);
Kick(playerid);
}
return true;
}
if(dialogid == DialogRegiser)
{
if(response)
{
new pString[64];
format(pString, 64, "users/%s.ini", PlayerName(playerid));
new iniFile = ini_createFile(pString);
if(iniFile < 0) ini_openFile(pString);
ini_setString(iniFile, "Password", inputtext);
ini_setInteger(iniFile,"Money",0);
ini_setInteger(iniFile,"Banned",0);
ini_setInteger(iniFile,"Admin",0);
ini_closeFile(iniFile);
new rString[145];
format(rString,sizeof(rString),"Вы успешно {F60000}зарегестрировались {F6F6F6}с паролем {F60000}%s {F6F6F6}Удачной игры!",inputtext);
SendClientMessage(playerid,0xF6F6F6AA,rString);
return true;
}
else
{
new kString[145];
format(kString,sizeof(kString),"%s[ID:%d] {F6F6F6}Кикнут с сервера. Причина: {F60000}Отказ от регистрации",PlayerName(playerid),playerid);
SendClientMessageToAll(0xF60000AA,kString);
Kick(playerid);
return true;
}
}
/*============================Админ панель====================================*/
if(dialogid == DialogPlayer)
{
if(response)
{
if(listitem == 0)
{
for(new i=0;i<95;i++)SendClientMessageToAll(-1," ");
new cString[144];
format(cString,sizeof(cString),"[Инфо]: Чат очищен администратором {F60000}%s[ID:%d]",PlayerName(playerid),playerid);
SendClientMessageToAll(0xF6F6F6AA,cString);
return true;
}
if(listitem == 1)
{
if(GetPVarInt(playerid,"ADMINKA") < 1)return SendClientMessage(playerid,0xF6F6F6AA,"[Инфо]: {F60000}Ограничены права доступа");
ShowPlayerDialog(playerid,DialogAdminMsg,DIALOG_STYLE_INPUT,"Послать адм сообщение","Введите текст сообщения:","Отправить","Отмена");
return true;
}
if(listitem == 2)
{
if(GetPVarInt(playerid,"ADMINKA") < 1)return SendClientMessage(playerid,0xF6F6F6AA,"[Инфо]: {F60000}Ограничены права доступа");
ShowPlayerDialog(playerid,DialogSetHP,DIALOG_STYLE_INPUT,"Установить всем HP","Введите количество здоровья:","Установить","Отмена");
return true;
}
if(listitem == 3)
{
if(GetPVarInt(playerid,"ADMINKA") < 1)return SendClientMessage(playerid,0xF6F6F6AA,"[Инфо]: {F60000}Ограничены права доступа");
ShowPlayerDialog(playerid,DialogSetAR,DIALOG_STYLE_INPUT,"Установить всем AR","Введите количество брони:","Установить","Отмена");
return true;
}
if(listitem == 4)
{
if(GetPVarInt(playerid,"ADMINKA") < 1)return SendClientMessage(playerid,0xF6F6F6AA,"[Инфо]: {F60000}Ограничены права доступа");
ShowPlayerDialog(playerid,DialogSetMN,DIALOG_STYLE_INPUT,"Установить всем Деньги","Введите количество денег:","Установить","Отмена");
return true;
}
if(listitem == 5)
{
if(GetPVarInt(playerid,"ADMINKA") < 2)return SendClientMessage(playerid,0xF6F6F6AA,"[Инфо]: {F60000}Ограничены права доступа");
for(new i;i <GetMaxPlayers();i++)
{
SpawnPlayer(i);
}
new hString[144];
format(hString,sizeof(hString),"[Инфо]: Администратор {F60000}%s[ID:%d] {F6F6F6}заспавнил всех игроков",PlayerName(playerid),playerid);
SendClientMessageToAll(0xF6F6F6AA,hString);
return true;
}
if(listitem == 6)
{
if(GetPVarInt(playerid,"ADMINKA") < 2)return SendClientMessage(playerid,0xF6F6F6AA,"[Инфо]: {F60000}Ограничены права доступа");
for(new i = 0; i < MAX_VEHICLES; i++)
{
SetVehicleToRespawn(i);
}
new hString[144];
format(hString,sizeof(hString),"[Инфо]: Администратор {F60000}%s[ID:%d] {F6F6F6}заспавнил весь транспорт",PlayerName(playerid),playerid);
SendClientMessageToAll(0xF6F6F6AA,hString);
return true;
}
if(listitem == 7)
{
if(GetPVarInt(playerid,"ADMINKA") < 1)return SendClientMessage(playerid,0xF6F6F6AA,"[Инфо]: {F60000}Ограничены права доступа");
new Float:x,Float:y,Float:z;
GetPlayerPos(playerid,x,y,z);
for(new i;i <GetMaxPlayers();i++)
{
SetPlayerPos(i,x+random(10),y+random(10),z);
}
new hString[144];
format(hString,sizeof(hString),"[Инфо]: Администратор {F60000}%s[ID:%d] {F6F6F6}телепортировал всех игроков к себе",PlayerName(playerid),playerid);
SendClientMessageToAll(0xF6F6F6AA,hString);
return true;
}
if(listitem == 8)
{
if(GetPVarInt(playerid,"ADMINKA") < 2)return SendClientMessage(playerid,0xF6F6F6AA,"[Инфо]: {F60000}Ограничены права доступа");
new hString[144];
format(hString,sizeof(hString),"[Инфо]: Администратор {F60000}%s[ID:%d] {F6F6F6}сделал рестарт сервера",PlayerName(playerid),playerid);
SendClientMessageToAll(0xF6F6F6AA,hString);
SendRconCommand("gmx");
return true;
}
if(listitem == 9)
{
if(GetPVarInt(playerid,"ADMINKA") < 2)return SendClientMessage(playerid,0xF6F6F6AA,"[Инфо]: {F60000}Ограничены права доступа");
ShowPlayerDialog(playerid,DialogRazban,DIALOG_STYLE_INPUT,"Разбанить аккаунт","Введите ник","Разбан","Отмена");
return true;
}
}
return true;
}
if(dialogid == DialogAdminMsg)
{
if(response)
{
new aString[144];
format(aString,sizeof(aString),"Администратор {F60000}%s[ID:%d]{F6F6F6}: %s",PlayerName(playerid),playerid,inputtext);
SendClientMessageToAll(0xF6F6F6AA,aString);
return true;
}
}
if(dialogid == DialogSetHP)
{
if(response)
{
new var = strval(inputtext);
for(new i;i <GetMaxPlayers();i++)
{
SetPlayerHealth(i,var);
}
new hString[144];
format(hString,sizeof(hString),"[Инфо]: Администратор {F60000}%s[ID:%d] {F6F6F6}Установил всем кол-во здоровья на {F60000}%s",PlayerName(playerid),playerid,inputtext);
SendClientMessageToAll(0xF6F6F6AA,hString);
return true;
}
}
if(dialogid == DialogSetAR)
{
if(response)
{
new var = strval(inputtext);
for(new i;i <GetMaxPlayers();i++)
{
SetPlayerArmour(i,var);
}
new hString[144];
format(hString,sizeof(hString),"[Инфо]: Администратор {F60000}%s[ID:%d] {F6F6F6}Установил всем кол-во брони на {F60000}%s",PlayerName(playerid),playerid,inputtext);
SendClientMessageToAll(0xF6F6F6AA,hString);
return true;
}
}
if(dialogid == DialogSetMN)
{
if(response)
{
new var = strval(inputtext);
for(new i;i <GetMaxPlayers();i++)
{
ResetPlayerMoney(i);
GivePlayerMoney(i,var);
}
new hString[144];
format(hString,sizeof(hString),"[Инфо]: Администратор {F60000}%s[ID:%d] {F6F6F6}Установил всем кол-во денег на {F60000}%s",PlayerName(playerid),playerid,inputtext);
SendClientMessageToAll(0xF6F6F6AA,hString);
return true;
}
}
if(dialogid == DialogRazban)
{
if(response)
{
new rString[64];
format(rString,sizeof(rString),"users/%s.ini",inputtext);
if (fexist(rString))
{
new iniFile = ini_openFile(rString);
ini_setInteger(iniFile,"Banned",0);
ini_closeFile(iniFile);
new uString[144];
format(uString,sizeof(uString),"[Инфо]: Аккаунт {F60000}%s {F6F6F6}успешно разбанен!");
SendClientMessage(playerid,0xF6F6F6AA,uString);
return true;
}
else
{
ShowPlayerDialog(playerid,DialogRazban,DIALOG_STYLE_INPUT,"Разбанить аккаунт","Аккаунта не существует\nВведите ник","Разбан","Отмена");
}
return true;
}
}
/*===========================Админ панель=====================================*/
if(dialogid == DialogClickPlayer)
{
if(response)
{
if(listitem == 0)
{
SetPlayerHealth(ClickID[playerid],0.0);
new dString[144];
format(dString,sizeof(dString),"[Инфо]: Администратор {F60000}%s[ID:%d] {F6F6F6}убил Вас",PlayerName(playerid),playerid);
SendClientMessage(ClickID[playerid],0xF6F6F6AA,dString);
}
if(listitem == 1)
{
new Float:x,Float:y,Float:z;
GetPlayerPos(ClickID[playerid],x,y,z);
SetPlayerPos(ClickID[playerid],x,y,z+5);
new sString[144];
format(sString,sizeof(sString),"[Инфо]: Администратор {F60000}%s[ID:%d] {F6F6F6}пнул Вас",PlayerName(playerid),playerid);
SendClientMessage(ClickID[playerid],0xF6F6F6AA,sString);
}
if(listitem == 2)
{
if(GetPVarInt(playerid,"ADMINKA") < 1)return SendClientMessage(playerid,0xF6F6F6AA,"[Инфо]: {F60000}Ограничены права доступа");
ShowPlayerDialog(playerid,DialogKick,DIALOG_STYLE_INPUT,"Кикнуть игрока","Введите причину:","Кикнуть","Отмена");
}
if(listitem == 3)
{
if(GetPVarInt(playerid,"ADMINKA") < 1)return SendClientMessage(playerid,0xF6F6F6AA,"[Инфо]: {F60000}Ограничены права доступа");
ShowPlayerDialog(playerid,DialogBans,DIALOG_STYLE_INPUT,"Забанить игрока","Введите причину:","Забанить","Отмена");
}
if(listitem == 4)
{
if(GetPVarInt(ClickID[playerid],"Freeze") == 0)
{
ShowPlayerDialog(playerid,DialogFreeze,DIALOG_STYLE_INPUT,"Заморозить игрока","Введите причину:","Заморозка","Отмена");
}
if(GetPVarInt(ClickID[playerid],"Freeze") == 1)
{
new hString[144];
format(hString,sizeof(hString),"[Инфо]: Администратор {F60000}%s[ID:%d] {F6F6F6}разморозил Вас",
PlayerName(playerid),playerid);
SendClientMessage(ClickID[playerid],0xF6F6F6AA,hString);
TogglePlayerControllable(ClickID[playerid],false);
SetPVarInt(ClickID[playerid],"Freeze",0);
}
return true;
}
if(listitem == 5)
{
if(GetPVarInt(ClickID[playerid],"Muted") == 0)
{
ShowPlayerDialog(playerid,DialogMuted,DIALOG_STYLE_INPUT,"Выключить чат игроку","Введите время в минутах","Выключить","Отмена");
}
if(GetPVarInt(ClickID[playerid],"Muted") == 1)
{
SetPVarInt(ClickID[playerid],"Muted", 0);
KillTimer(TimeMute[ClickID[playerid]]);
new GiveNamePlayer[MAX_PLAYER_NAME];
GetPlayerName(ClickID[playerid],GiveNamePlayer,sizeof(GiveNamePlayer));
new hString[144];
format(hString,sizeof(hString),"[Инфо]: Администратор {F60000}%s[ID:%d] {F6F6F6}Включил чат игроку %s[ID:%d]",
PlayerName(playerid),playerid,GiveNamePlayer,ClickID[playerid]);
SendClientMessageToAll(0xF6F6F6AA,hString);
}
return true;
}
if(listitem == 6)
{
ShowPlayerDialog(playerid,DialogHealth,DIALOG_STYLE_INPUT,"Установить HP","Введите кол-во","Установить","Отмена");
return true;
}
if(listitem == 7)
{
ShowPlayerDialog(playerid,DialogArmour,DIALOG_STYLE_INPUT,"Установить AR","Введите кол-во","Установить","Отмена");
return true;
}
if(listitem == 8)
{
StartSpectate(playerid,ClickID[playerid]);
}
if(listitem == 9)
{
new Float:x,Float:y,Float:z;
GetPlayerPos(ClickID[playerid],x,y,z);
SetPlayerPos(playerid,z,y,z);
new tString[144];
new GiveNamePlayer[MAX_PLAYER_NAME];
GetPlayerName(ClickID[playerid],GiveNamePlayer,sizeof(GiveNamePlayer));
format(tString,sizeof(tString),"[Инфо]: Вы телепортировались к игроку {F60000}%s[ID:%d]",GiveNamePlayer,ClickID[playerid]);
SendClientMessage(playerid,0xF6F6F6AA,tString);
return true;
}
if(listitem == 10)
{
if(GetPVarInt(playerid,"ADMINKA") < 1)return SendClientMessage(playerid,0xF6F6F6AA,"[Инфо]: {F60000}Ограничены права доступа");
new Float:x,Float:y,Float:z;
GetPlayerPos(playerid,x,y,z);
SetPlayerPos(ClickID[playerid],x,y+1.0,z);
new tString[144];
format(tString,sizeof(tString),"[Инфо]: Администратор {F60000}%s[ID:%d] {F6F6F6}телепортировал Вас к себе",PlayerName(playerid),playerid);
SendClientMessage(ClickID[playerid],0xF6F6F6AA,tString);
return true;
}
if(listitem == 11)
{
if(GetPVarInt(playerid,"ADMINKA") < 2)return SendClientMessage(playerid,0xF6F6F6AA,"[Инфо]: {F60000}Ограничены права доступа");
ShowPlayerDialog(playerid,DialogDostup,DIALOG_STYLE_LIST,"Установить Права доступа",
"Снять полномочия\n\
Установить статус Модератор\n\
Установить статус Администратор","Выбор","Отмена");
return true;
}
}
}
if(dialogid == DialogKick)
{
if(response)
{
Kick(ClickID[playerid]);
new GiveNamePlayer[MAX_PLAYER_NAME];
GetPlayerName(ClickID[playerid],GiveNamePlayer,sizeof(GiveNamePlayer));
new hString[144];
format(hString,sizeof(hString),"[Инфо]: Администратор {F60000}%s[ID:%s] {F6F6F6}кикнул игрока {F60000}%s[ID:%d] {F6F6F6}Причина: {F60000}%s",
PlayerName(playerid),playerid,GiveNamePlayer,ClickID[playerid],inputtext);
SendClientMessageToAll(0xF6F6F6AA,hString);
}
}
if(dialogid == DialogBans)
{
if(response)
{
new GiveNamePlayer[MAX_PLAYER_NAME];
GetPlayerName(ClickID[playerid],GiveNamePlayer,sizeof(GiveNamePlayer));
new hString[144];
format(hString,sizeof(hString),"[Инфо]: Администратор {F60000}%s[ID:%d] {F6F6F6}забанил игрока {F60000}%s[ID:%d] {F6F6F6}Причина: {F60000}%s",
PlayerName(playerid),playerid,GiveNamePlayer,ClickID[playerid],inputtext);
SendClientMessageToAll(0xF6F6F6AA,hString);
new pString[64];
format(pString, 64, "users/%s.ini", PlayerName(ClickID[playerid]));
new iniFile = ini_openFile(pString);
ini_setInteger(iniFile,"Banned",1);
ini_closeFile(iniFile);
Ban(ClickID[playerid]);
}
}
if(dialogid == DialogFreeze)
{
if(response)
{
new hString[144];
format(hString,sizeof(hString),"[Инфо]: Администратор {F60000}%s[ID:%d] {F6F6F6}заморозил Вас Причина: {F60000}%s",
PlayerName(playerid),playerid,inputtext);
SendClientMessage(ClickID[playerid],0xF6F6F6AA,hString);
TogglePlayerControllable(ClickID[playerid],true);
SetPVarInt(ClickID[playerid],"Freeze",1);
return true;
}
}
if(dialogid == DialogMuted)
{
if(response)
{
new var = strval(inputtext);
TimeMute[ClickID[playerid]] = SetTimerEx("TimeOutMute",var*60000,0,"d",ClickID[playerid]);
SetPVarInt(ClickID[playerid],"Muted", 1);
new GiveNamePlayer[MAX_PLAYER_NAME];
GetPlayerName(ClickID[playerid],GiveNamePlayer,sizeof(GiveNamePlayer));
new hString[144];
format(hString,sizeof(hString),"[Инфо]: Администратор {F60000}%s[ID:%d] {F6F6F6}выключил чат игроку {F60000}%s[ID:%d] на: {F60000}%d минут",
PlayerName(playerid),playerid,GiveNamePlayer,ClickID[playerid],var);
SendClientMessageToAll(0xF6F6F6AA,hString);
return true;
}
}
if(dialogid == DialogHealth)
{
if(response)
{
new var = strval(inputtext);
SetPlayerHealth(ClickID[playerid],var);
new hString[144];
format(hString,sizeof(hString),"[Инфо]: Администратор {F60000}%s[ID:%d] {F6F6F6}установил Вам HP {F60000}%d",
PlayerName(playerid),playerid,inputtext);
SendClientMessage(ClickID[playerid],0xF6F6F6AA,hString);
}
}
if(dialogid == DialogArmour)
{
if(response)
{
new var = strval(inputtext);
SetPlayerArmour(ClickID[playerid],var);
new hString[144];
format(hString,sizeof(hString),"[Инфо]: Администратор {F60000}%s[ID:%d] {F6F6F6}установил Вам AR {F60000}%d",
PlayerName(playerid),playerid,inputtext);
SendClientMessage(ClickID[playerid],0xF6F6F6AA,hString);
}
}
if(dialogid == DialogDostup)
{
if(response)
{
new GiveNamePlayer[MAX_PLAYER_NAME];
GetPlayerName(ClickID[playerid],GiveNamePlayer,sizeof(GiveNamePlayer));
new hString[144];
if(listitem == 0)
{
format(hString,sizeof(hString),"[Инфо]: Администратор {F60000}%s[ID:%d] {F6F6F6}снял полномочия с игрока {F60000}%s[ID:%d]",
PlayerName(playerid),playerid,GiveNamePlayer,ClickID[playerid]);
SendClientMessageToAll(0xF6F6F6AA,hString);
new pString[64];
format(pString, 64, "users/%s.ini", PlayerName(ClickID[playerid]));
new iniFile = ini_openFile(pString);
ini_setInteger(iniFile,"Admin",0);
ini_closeFile(iniFile);
SetPVarInt(ClickID[playerid],"ADMINKA",0);
return true;
}
if(listitem == 1)
{
format(hString,sizeof(hString),"[Инфо]: Администратор {F60000}%s[ID:%d] {F6F6F6}установил статус модератора игроку {F60000}%s[ID:%d]",
PlayerName(playerid),playerid,GiveNamePlayer,ClickID[playerid]);
SendClientMessageToAll(0xF6F6F6AA,hString);
new pString[64];
format(pString, 64, "users/%s.ini", PlayerName(ClickID[playerid]));
new iniFile = ini_openFile(pString);
ini_setInteger(iniFile,"Admin",1);
ini_closeFile(iniFile);
SetPVarInt(ClickID[playerid],"ADMINKA",1);
return true;
}
if(listitem == 2)
{
format(hString,sizeof(hString),"[Инфо]: Администратор {F60000}%s[ID:%d] {F6F6F6}установил статус администоратора игроку {F60000}%s[ID:%d]",
PlayerName(playerid),playerid,GiveNamePlayer,ClickID[playerid]);
SendClientMessageToAll(0xF6F6F6AA,hString);
new pString[64];
format(pString, 64, "users/%s.ini", PlayerName(ClickID[playerid]));
new iniFile = ini_openFile(pString);
ini_setInteger(iniFile,"Admin",2);
ini_closeFile(iniFile);
SetPVarInt(ClickID[playerid],"ADMINKA",2);
return true;
}
}
}
return 1;
}
public OnPlayerClickPlayer(playerid, clickedplayerid, source)
{
ClickID[playerid] = clickedplayerid;
if(GetPVarInt(playerid,"ADMINKA") >= 1)
{
if(clickedplayerid == playerid)
{
ShowPlayerDialog(playerid,DialogPlayer, DIALOG_STYLE_LIST,
"Админ панель сервера",
"[1] Очистить чат\n\
[2] Послать адм сообщ\n\
[3] Установить всем HP\n\
[4] Установить всем AR\n\
[5] Установить всем Деньги\n\
[6] Заспавнить всех игроков\n\
[7] Заспавнить весь транспорт\n\
[8] Телепортировать всех к себе\n\
[9] Перезагрузить мод сервера\n\
[10] Разбанить аккаунт игрока", "Выбор", "Отмена");
}
if(clickedplayerid != playerid)
{
ShowPlayerDialog(playerid,DialogClickPlayer,DIALOG_STYLE_LIST,"Админ панель сервера",
"[1] Убить игрока\n\
[2] Пнуть игрока\n\
{F60000}[3] Кикнуть игрока\n\
{F60000}[4] Забанить игрока\n\
{F6F6F6}[5] Заморозить игрока\n\
[6] Выключить чат ироку\n\
[7] Установить HP игрока\n\
[8] Установить AR игрока\n\
[9] Наблюдать за игроком\n\
[10] Телепортироваться к игроку\n\
[11] Телепортировать игрока к себе\n\
[12] Установить права доступа","Выбор","Отмена");
}
return true;
}
return true;
}
stock PlayerName(playerid)
{
new pName[MAX_PLAYER_NAME];
GetPlayerName(playerid,pName,sizeof(pName));
return pName;
}
public TimeOutMute(playerid)
{
new tString[144];
format(tString,sizeof(tString),"[Инфо]: У игрока {F60000}%s[ID:%d] {F6F6F6}автоматически включился чат.",PlayerName(playerid),playerid);
SendClientMessageToAll(0xF6F6F6AA,tString);
SetPVarInt(ClickID[playerid],"Muted", 0);
}
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
if(GetPlayerState(playerid) == PLAYER_STATE_SPECTATING && gSpectateID[playerid] != INVALID_PLAYER_ID)
{
if(newkeys == KEY_JUMP)
{
AdvanceSpectate(playerid);
}
else if(newkeys == KEY_SPRINT)
{
ReverseSpectate(playerid);
}
else if(newkeys == 1024)
{
StopSpectate(playerid);
}
}
return 1;
}
public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
{
new x = 0;
while(x!=MAX_PLAYERS)
{
if( IsPlayerConnected(x) && GetPlayerState(x) == PLAYER_STATE_SPECTATING &&
gSpectateID[x] == playerid && gSpectateType[x] == ADMIN_SPEC_TYPE_PLAYER )
{
SetPlayerInterior(x,newinteriorid);
}
x++;
}
}
public OnPlayerEnterVehicle(playerid, vehicleid)
{
for(new x=0; x<MAX_PLAYERS; x++)
{
if(GetPlayerState(x) == PLAYER_STATE_SPECTATING && gSpectateID[x] == playerid)
{
TogglePlayerSpectating(x, 1);
PlayerSpectateVehicle(x, vehicleid);
gSpectateType[x] = ADMIN_SPEC_TYPE_VEHICLE;
}
}
return 1;
}
public OnPlayerExitVehicle(playerid, vehicleid)
{
for(new x=0; x<MAX_PLAYERS; x++)
{
if(GetPlayerState(x) == PLAYER_STATE_SPECTATING && gSpectateID[x] == playerid && gSpectateType[x] == ADMIN_SPEC_TYPE_VEHICLE)
{
TogglePlayerSpectating(x, 1);
PlayerSpectatePlayer(x, playerid);
gSpectateType[x] = ADMIN_SPEC_TYPE_PLAYER;
}
}
return 1;
}
public OnPlayerStateChange(playerid, newstate, oldstate)
{
switch(newstate)
{
case PLAYER_STATE_ONFOOT:
{
switch(oldstate)
{
case PLAYER_STATE_DRIVER:OnPlayerExitVehicle(playerid,255);
case PLAYER_STATE_PASSENGER:OnPlayerExitVehicle(playerid,255);
}
}
}
return 1;
}
stock StartSpectate(playerid, specid)
{
for(new x=0; x<MAX_PLAYERS; x++)
{
if(GetPlayerState(x) == PLAYER_STATE_SPECTATING && gSpectateID[x] == playerid)
{
AdvanceSpectate(x);
}
}
if(IsPlayerInAnyVehicle(specid))
{
SetPlayerInterior(playerid,GetPlayerInterior(specid));
TogglePlayerSpectating(playerid, 1);
PlayerSpectateVehicle(playerid, GetPlayerVehicleID(specid));
gSpectateID[playerid] = specid;
gSpectateType[playerid] = ADMIN_SPEC_TYPE_VEHICLE;
}
else
{
SetPlayerInterior(playerid,GetPlayerInterior(specid));
TogglePlayerSpectating(playerid, 1);
PlayerSpectatePlayer(playerid, specid);
gSpectateID[playerid] = specid;
gSpectateType[playerid] = ADMIN_SPEC_TYPE_PLAYER;
}
new string[100], name[24];
GetPlayerName(specid,name,sizeof(name));
format(string,sizeof(string),"~n~~n~~n~~n~~n~~n~~n~~n~~w~%s - ID:%d~n~< Sprint - Jump >", name,specid);
GameTextForPlayer(playerid,string,9999999999,3);
return 1;
}
stock StopSpectate(playerid)
{
TogglePlayerSpectating(playerid, 0);
gSpectateID[playerid] = INVALID_PLAYER_ID;
gSpectateType[playerid] = ADMIN_SPEC_TYPE_NONE;
GameTextForPlayer(playerid,"~n~~n~~n~~n~~n~~n~~n~~n~~w~Spectate off",1000,3);
return 1;
}
stock AdvanceSpectate(playerid)
{
if(ConnectedPlayers() == 2)
{
StopSpectate(playerid);
return 1;
}
if(GetPlayerState(playerid) == PLAYER_STATE_SPECTATING && gSpectateID[playerid] != INVALID_PLAYER_ID)
{
for(new x=gSpectateID[playerid]+1; x<=MAX_PLAYERS; x++)
{
if(x == MAX_PLAYERS)
{
x = 0;
}
if(IsPlayerConnected(x) && x != playerid)
{
if(GetPlayerState(x) == PLAYER_STATE_SPECTATING && gSpectateID[x] != INVALID_PLAYER_ID ||
(GetPlayerState(x) != 1 && GetPlayerState(x) != 2 && GetPlayerState(x) != 3))
{
continue;
}
else
{
StartSpectate(playerid, x);
break;
}
}
}
}
return 1;
}
stock ReverseSpectate(playerid)
{
if(ConnectedPlayers() == 2)
{
StopSpectate(playerid);
return 1;
}
if(GetPlayerState(playerid) == PLAYER_STATE_SPECTATING && gSpectateID[playerid] != INVALID_PLAYER_ID)
{
for(new x=gSpectateID[playerid]-1; x>=0; x--)
{
if(x == 0)
{
x = MAX_PLAYERS;
}
if(IsPlayerConnected(x) && x != playerid)
{
if(GetPlayerState(x) == PLAYER_STATE_SPECTATING && gSpectateID[x] != INVALID_PLAYER_ID ||
(GetPlayerState(x) != 1 && GetPlayerState(x) != 2 && GetPlayerState(x) != 3))
{
continue;
}
else
{
StartSpectate(playerid, x);
break;
}
}
}
}
return 1;
}
stock ConnectedPlayers()
{
new count;
for(new x=0; x<MAX_PLAYERS; x++)
{
if(IsPlayerConnected(x))
{
count++;
}
}
return count;
}
stock adminspec_strtok(const string[], &index)
{
new length = strlen(string);
while ((index < length) && (string[index] <= ' '))
{
index++;
}
new offset = index;
new result[20];
while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
{
result[index - offset] = string[index];
index++;
}
result[index - offset] = EOS;
return result;
}
