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

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

  • Страница 1 из 1
  • 1
Форум » SourceMod >> CS:Source >> CSGO » Обсуждение » Персональная Админка
Персональная Админка
Naykon Дата: Суббота, 01.09.2012, 23:02:15 | Сообщение # 1
Сообщений: 439
Репутация: -4 [ +/- ]
Написал небольшую админку в несколькими функциями: Бан Кик Слей Смена Телепорт и т д..
Проблема заключается в том что когда 2 пользователя одновременно заходят в админку и выбирают вместе вот такие пункты:
1 пользователь:
-Бан
--Выберите игрока (Unnamed) - Нажал кнопку первым
---Укажите причину (Читерство) - Нажал кнопку первым
----Укажите время (На всегда) - нажал кнопку вторым
и 2 пользователь
-Бан
--Выберите игрока (Torres) - нажал кнопку вторым
---Укажите причину (Оскорбления) - нажал кнопку вторым
----Укажите время (На 2 часа)- Нажал кнопку первым

Получается так что банит вот так:
Torres
Оскорбления
На всегда

Хотя должно было забанить 2 игрока. Я понимаю что плагин учитывает последние записаные данные т.е кто нажал последним (вторым), но к сожалению не имею понятия как это можно исправить чтоб Админкой могли пользоваться X человек не мешая друг-другу(((


Сообщение отредактировал Naykon - Суббота, 01.09.2012, 23:03:14
 
_wS_ Дата: Суббота, 01.09.2012, 23:27:49 | Сообщение # 2
Thanks
Обычные массивы.

Code
new MyTarget[MAXPLAYERS+1], MyTime[MAXPLAYERS+1];

MyTarget[admin_index] = 25;
MyTime[admin_index] = 0;
 
Naykon Дата: Суббота, 01.09.2012, 23:56:10 | Сообщение # 3
Сообщений: 439
Репутация: -4 [ +/- ]
Приведите пожалуйста небольшой пример, не часто имею с ними дело
 
_wS_ Дата: Воскресенье, 02.09.2012, 00:04:30 | Сообщение # 4
Thanks
Ну когда админ (client) выбирает время, например, в меню, пусть оно равно x, то:

Code
MyTime[client] = x;

А когда уже админ будет банить игрока, то просто получи значения с этих массивов.
MyTime[client] - время, MyTarget[client] - userid цели, кому бан даем.
 
Naykon Дата: Среда, 05.09.2012, 15:58:31 | Сообщение # 5
Сообщений: 439
Репутация: -4 [ +/- ]
Мучался -мучался вроде что-по получалось сначала, как закончил полная Ж вообще перестало банить и писать причину... я на всех глобальных переменных типа стинг ставил [MAXPLAYERS+1]... возможно я не до конца понял ...
Не сочтите за наглость но ниже я написал пример на котором построена вся админка.. исправте пожалуйста ощибку о которой я говорил в 1 посте...((

Code
#include <sourcemod>
#include <cstrike>
#include <sdktools>
#include <sdktools_entoutput>
#include <sdktools_functions>  

new String:BanID[25];
new String:BanName[65];
new String:Reason[65];
new String:TT[25];
new String:Time[65];   
new BanUser;

public OnPluginStart()
{
  RegConsoleCmd("sm_admin2", Command_Menu);
}

public Action:Command_Menu(admin, args)
{
      AdminMenu(admin);
      return Plugin_Handled;
}

AdminMenu(admin)
{
    new Handle:Menu = CreateMenu(AdminMenuSelect);
       SetMenuTitle(Menu, "Админская панель SORCEGaming.RU!\n \n");
    AddMenuItem(Menu, "1", "Забанить");
       SetMenuExitButton(Menu, true);
       DisplayMenu(Menu, admin, 0);
}  

public AdminMenuSelect(Handle:menu, MenuAction:action, admin, i)
{
       if (action == MenuAction_Select)
       {
     decl String:Info[25];
           GetMenuItem(menu, i, Info, sizeof(Info));
     if (StrEqual(Info, "1"))
     {
     BanMenuClient(admin);
     }
    }
}

BanMenuClient(admin)
{
    new Handle:Menu = CreateMenu(BanMenuClientSelect);
       SetMenuTitle(Menu, "Кого баним?:\n \n");
    decl String:SteamID[15]  
       decl String:UserName[MAX_NAME_LENGTH];
    for (new i = 1; i <= MaxClients; i++)
    {
     if (IsClientInGame(i))
     {
      IntToString(GetClientUserId(i), SteamID, sizeof(SteamID));
      GetClientName(i, UserName, sizeof(UserName));
      AddMenuItem(Menu, SteamID, UserName);
        }
    }
    //AddMenuItem(Menu, "2", "Назад");
       SetMenuExitButton(Menu, true);
       DisplayMenu(Menu, admin, 0);
}

public BanMenuClientSelect(Handle:menu, MenuAction:action, admin, i)
{
        if (action == MenuAction_Select)
        {    
     GetMenuItem(menu, i, BanID, sizeof(BanID), _, BanName, sizeof(BanName));
     new BanUser = GetClientOfUserId(StringToInt(BanID));
     if (BanUser > 0)
     {   
      GetMenuItem(menu, i, BanID, sizeof(BanID));
   PrintToChat(admin, "[АДМИН БАН] Игрок: %s", BanName);   
      BanClientReason(admin);
     }
     }
}  

BanClientReason(admin)
{
    new Handle:Menu = CreateMenu(BanClientReasonSelect);
    SetMenuTitle(Menu, "За что баним?\n \n");
    AddMenuItem(Menu, "2", "Оскарбления");
    AddMenuItem(Menu, "11", "Читерство");
       SetMenuExitButton(Menu, true);
       DisplayMenu(Menu, admin, 0);
}

public BanClientReasonSelect(Handle:menu, MenuAction:action, admin, i)
{
       if (action == MenuAction_Select)
       {
    decl String:Info[25];
    GetMenuItem(menu, i, Info, sizeof(Info), _, Reason, sizeof(Reason));
    PrintToChat(admin, "[АДМИН БАН] Игрок: %s! Причина: %s!", BanName, Reason);
    BanClientTime(admin);
    }
}

BanClientTime(admin)
{
    new Handle:Menu = CreateMenu(BanClientTimeSelect);
       SetMenuTitle(Menu, "На сколько баним?\n \n");
    AddMenuItem(Menu, "1", "Намек понял? (1 мин)");
    AddMenuItem(Menu, "3", "3 минуты");
    AddMenuItem(Menu, "120", "2 часа");
       SetMenuExitButton(Menu, true);
       DisplayMenu(Menu, admin, 0);  
}

public BanClientTimeSelect(Handle:menu, MenuAction:action, admin, i)
{
       if (action == MenuAction_Select)
       {
   GetMenuItem(menu, i, TT, sizeof(TT), _, Time, sizeof(Time));
   Realy(admin);
   PrintToChat(admin, "\x04[SG: \x01Админ-панель\x04] \x05Игрок: \x01%s. \x05Причина: \x01%s. \x05Время: \x01%s.", BanName, Reason, Time);
    }
}

Realy(admin)
{
    new Handle:Menu = CreateMenu(RealySelect);
       SetMenuTitle(Menu, "Вы уверены в правильности бана?\n \n");
    AddMenuItem(Menu, "yes", "Да!")
    AddMenuItem(Menu, "no", "Нет!");
       SetMenuExitButton(Menu, true);
       DisplayMenu(Menu, admin, 0);  
}

public RealySelect(Handle:menu, MenuAction:action, admin, i)
{
     if (action == MenuAction_Select)
     {
   decl String:Info[25];
         GetMenuItem(menu, i, Info, sizeof(Info));
   if (StrEqual(Info, "yes"))
   {  
    decl String:title[100];
    Format(title, sizeof(title), "БАН. Время: %s. Причина: %s", Time, Reason);  
    PrintToChatAll("\x04[SG: \x01Админ \x05%N\x04] \x05Забанил игрока: \x01%s. \x05Время: \x01%s. \x05Причина: \x01%s.", admin, BanName, Time, Reason);
     ServerCommand("banid %s %s", TT, BanID);
    ServerCommand("kickid %s %s", BanID, title);  
   }
   else PrintToChat(admin, "\x04[SG: \x01Админ-панель\x04] \x05Запрос бана отменен.");
  }
}
 
_wS_ Дата: Среда, 05.09.2012, 16:11:31 | Сообщение # 6
Thanks
Не буду исправлять, потому что ошибок полно.. Причем те же самые делаешь, научиться видимо не хочешь.
Да и массивы не знаешь как работают, а они очень часто используются в плагинах.
 
Naykon Дата: Среда, 05.09.2012, 16:53:59 | Сообщение # 7
Сообщений: 439
Репутация: -4 [ +/- ]
какие?:=0
 
Scarface_slv Дата: Среда, 05.09.2012, 17:16:57 | Сообщение # 8
Сообщений: 737
Репутация: 61 [ +/- ]
Почему ты по примеру не делаешь? Кидал ведь это:
правда добавил массив как ws написал.

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


Сообщение отредактировал Scarface_slv - Среда, 05.09.2012, 17:33:20
 
Форум » SourceMod >> CS:Source >> CSGO » Обсуждение » Персональная Админка
  • Страница 1 из 1
  • 1
Поиск: