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

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

  • Страница 4 из 5
  • «
  • 1
  • 2
  • 3
  • 4
  • 5
  • »
Меню выбора игроков
Scarface_slv Дата: Четверг, 19.04.2012, 12:00:15 | Сообщение # 46
Сообщений: 737
Репутация: 61 [ +/- ]
как то странно среди игроков, кнопка 2 назад, ты так хочешь сделать?)
так что ли попробуй:
Code
  
       else if (action == MenuAction_Cancel)
  {
        AdminMenu(admin);  
  }
 
Naykon Дата: Воскресенье, 22.04.2012, 09:02:28 | Сообщение # 47
Сообщений: 439
Репутация: -4 [ +/- ]
Code
stock ShowMOTDPanel(client, const String:title[], const String:msg[], type=MOTDPANEL_TYPE_INDEX)


Как я понимаю так открывается !motd ... не пойму нафиг нужно это:
Code
const String:title[], const String:msg[], type=MOTDPANEL_TYPE_INDEX
 
nynCuKaH Дата: Воскресенье, 22.04.2012, 13:45:58 | Сообщение # 48
Сообщений: 110
Репутация: 0 [ +/- ]
а мне не помогаешь :(
 
Naykon Дата: Среда, 25.04.2012, 12:43:01 | Сообщение # 49
Сообщений: 439
Репутация: -4 [ +/- ]
сорр я просто не знаю такой функции которая ловит действия на карте... тебе нужно просто найти эту функцию http://docs.sourcemod.net/api/ и поставить условие.... Я не настолько опытный скриптер (((

Добавлено (25.04.2012, 12:41:26)
---------------------------------------------

Code
FREEClient(client)
{
    Menu = CreateMenu(FREEClientSelect);
       SetMenuTitle(Menu, "Кому?\n \n");
    decl String:SteamID[15];
       decl String:UserName[MAX_NAME_LENGTH];
    for (new i = 1; i <= MaxClients; i++)
    {
     if (IsClientInGame(i) && IsPlayerAlive(i) && GetClientTeam(i) == 2)
     {
      IntToString(GetClientUserId(i), SteamID, sizeof(SteamID));
      GetClientName(i, UserName, sizeof(UserName));
      AddMenuItem(Menu, SteamID, UserName);
        }
    }
       SetMenuExitButton(Menu, true);
       DisplayMenu(Menu, ct_client, 0);
}

public FREEClientSelect(Handle:menu, MenuAction:action, client, option)
{
       if (action == MenuAction_Select)
       {   
    GetMenuItem(menu, option, FreeID, sizeof(FreeID), _, FreeName, sizeof(FreeName));
    UserFree = GetClientOfUserId(StringToInt(FreeID));
    if (UserFree > 0)
    {  
     PrintToChatAll("UserFree = %N", UserFree)
     FREEplayer(UserFree);
    }
    else PrintToChatAll("UserFree < 0 - %N", UserFree);
    }
}

FREEplayer(client)
{
       fMenu = CreateMenu(FREEplayerSelect);
       SetMenuTitle(fMenu, "олололл?\n \n");
    AddMenuItem(fMenu, "1", "1!");  
    AddMenuItem(fMenu, "2", "2!");  
       SetMenuExitButton(pMenu, false);
       DisplayMenu(fMenu, client, 0);
}  

public FREEplayerSelect(Handle:menu, MenuAction:action, client, option)
{
       if (action == MenuAction_Select)
       {
           decl String:Info[25];
           GetMenuItem(menu, option, Info, sizeof(Info));
     if (StrEqual(Info, "1"))
     {
     PrintToChatAll("\x04Игрок %s  ;)", client);
     SetEntityRenderColor(client, 100, 50, 50, 50);
     }
     if (StrEqual(Info, "2"))
     {
    PrintToChatAll("Игрок %s отказалася", client);
     }
       }
       else if (action == MenuAction_End) CloseHandle(menu);
}


Не доганяю че не работает гляньте((

Добавлено (25.04.2012, 12:43:01)
---------------------------------------------
Т.е не показывает меню FREEplayer(UserFree);

 
_wS_ Дата: Среда, 25.04.2012, 14:22:44 | Сообщение # 50
Тебе же говорили сколько раз уже, что не x = CreateMenu(), а new Handle:x = CreateMenu(). И ты создал fMenu, а делаешь SetMenuExitButton(pMenu, false); - детские ошибки. И в циклах лучше не делать sizeof(), если знаешь размер массива, то лучше сразу укажи число, или сохрани значение sizeof() в другой переменной и ее вставляй. И ты сделал decl String:SteamID[15] - разве 15 символов достаточно для стима? Там 20 может быть и больше, я 25 ставлю часто. И у тебя функция такая FREEClient(client), а ты делаешь DisplayMenu(Menu, ct_client, 0);

И если меню сохранено в глобальной переменной, то не надо делать if (action == MenuAction_End) CloseHandle(menu); (делать CloseHandle нужно в другой момент), потому что если ты троим отправил меню и кто-то первый что-то в нем сделал и оно закрылось, сработает MenuAction_End и другие два игрока уже ничего не смогут сделать. И ты делаешь PrintToChatAll("Игрок %s отказалася", client); - на те же грабли наступаешь, не надоело?

И еще ты делаешь if (UserFree < 1) PrintToChatAll("UserFree < 0 - %N", UserFree); - это значит что игрок не найден, но ты почему то хочешь как-то его имя получить.. %N

Code
if (UserFree > 0)  
{   
     // ...
}  
else
{
     // Ты тут пишешь, что UserFree < 0.. Но UserFree <= 0 или UserFree < 1
     // Так что моё мнение о том, что у тебя чувства логики нет, еще крепче стало.
}


Кода мало, а ошибок миллион.. Может я и резко разговариваю, зато правду говорю.
 
Naykon Дата: Воскресенье, 29.04.2012, 00:13:05 | Сообщение # 51
Сообщений: 439
Репутация: -4 [ +/- ]
это все потому что я копирую некоторые части когда чтоб не перепечатывать, на счет глобальной переменное - хорошая инфа =) спс

Добавлено (29.04.2012, 00:13:05)
---------------------------------------------
Цель: Когда за Т никого нет пишет сообщение "Нет игроков за Т", когда есть высвечивает меню выбора игрока!
Проблема: Независимо от того если ли игрок за Т или нету при нажатие меню "Действие" пишет в чат "Нет игроков за Т"
PS. специально написал отдельный плагин!

Code
new String:FreeID[25];
new String:FreeName[65];
new UserFree;
new Handle:Menu;
new Handle:cMenu;

public OnPluginStart()
{
  HookEvent("player_say", Say);
}

public Say(Handle:event, const String:name[], bool:dontBroadcast)
{
       new i = GetClientOfUserId(GetEventInt(event, "userid"));
       decl String:text[7];
       GetEventString(event, "text", text, sizeof(text));
       if (IsClientInGame(i) && IsPlayerAlive(i) && StrEqual(text, "!lol")) Menu1(i);
}  

Menu1(client)
{
       cMenu = CreateMenu(Menu1Select);
       SetMenuTitle(cMenu, "Панель\n \n");
    AddMenuItem(cMenu, "menu2", "Действие");  
       SetMenuExitButton(cMenu, true);
       DisplayMenu(cMenu, client, 0);
}  

public Menu1Select(Handle:menu, MenuAction:action, client, option)
{
       if (action == MenuAction_Select)
       {
           decl String:Info[25];
           GetMenuItem(menu, option, Info, sizeof(Info));
     if (StrEqual(Info, "menu2"))
     {
       for (new i = 1; i <= MaxClients; i++)
     {
      if (IsClientInGame(i) && IsPlayerAlive(i) && GetClientTeam(i) == 2)
      {
       ClientMenu(client);
      }
      else PrintToChatAll("Нет игроков за Т");
     }  
     }
       }
       else if (action == MenuAction_End) CloseHandle(menu);
}

ClientMenu(client)
{
  Menu = CreateMenu(ClientMenuSelect);
  SetMenuTitle(Menu, "Кто?\n \n");
  decl String:SteamID[150];
  decl String:UserName[MAX_NAME_LENGTH];
  for (new i = 1; i <= MaxClients; i++)
  {
   if (IsClientInGame(i) && IsPlayerAlive(i) && GetClientTeam(i) == 2 && UserFree != i)
   {
    IntToString(GetClientUserId(i), SteamID, sizeof(SteamID));
    GetClientName(i, UserName, sizeof(UserName));
    AddMenuItem(Menu, SteamID, UserName);
   }
  }
  //AddMenuItem(Menu, "2", "Назад");
  SetMenuExitButton(Menu, true);
  DisplayMenu(Menu, client, 0);
}

public ClientMenuSelect(Handle:menu, MenuAction:action, client, option)
{
       if (action == MenuAction_Select)
       {   
    GetMenuItem(menu, option, FreeID, sizeof(FreeID), _, FreeName, sizeof(FreeName));
    UserFree = GetClientOfUserId(StringToInt(FreeID));
    if (UserFree > 0)
    {  
     PrintToChatAll("Получилось");
    }
    }
}


Почему?????
 
_wS_ Дата: Воскресенье, 29.04.2012, 00:55:39 | Сообщение # 52
Потому что у тебя чувства логики нет, я уже говорил, и видимо это не исправить =)
Попробую объяснить:

Индекс игрока может быть от 1 до MaxClients. С помощью цикла for, мы от 1 до MaxClients проверяем каждый индекс, 1,2,3,4, 5 и тд, есть ли игрок в игре, жив, и террорист ли он. И как только индекс не проходит твою проверку, ты делаешь 'Нет игроков за Т'.. Так надо делать:

Code
for (new i = 1; i <= MaxClients; i++)
{
     if (IsClientInGame(i) && IsPlayerAlive(i) && GetClientTeam(i) == 2)
     {
         // Вот мы нашли живого террориста. Показываем меню и разрываем цикл.
         ClientMenu(client);
         return;
     }
}
// Если этот код продолжил выполняться, значит return; не сработало = нет живых террористов.
PrintToChat(client, "Нет ЖИВЫХ игроков за Т");


И зачем запускать цикл, искать живых т и потом снова запускать этот цикл для создания меню? Сразу создай меню, если есть нужные игроки, добавь, нет, так и напиши в меню, что их нет. С помощью короткого дурацкого тест-скрипта, можно понять как работают циклы..

И зачем все эти глобальные переменные:

Quote
new String:FreeID[25];
new String:FreeName[65];
new UserFree;
new Handle:Menu;
new Handle:cMenu;


В них просто нет никакой необходимости.. Если бы ты владел хоть одним языком нормально (ты хвастался), то на таких моментах не спотыкался бы, потому что оно очень просто. У меня нет терпения на такие глупости. Если бы ты усваивал, исправлял свои ошибки, ладно еще, но тебе по барабану, одни и те же ошибки.
 
Naykon Дата: Понедельник, 30.04.2012, 13:57:59 | Сообщение # 53
Сообщений: 439
Репутация: -4 [ +/- ]
спс понял на счет цикла for..
На счет переменных они мне нужны в более крупном скрипте.. сюда я просто вырезал необходимое.
Все приходит с опытом =)

Добавлено (30.04.2012, 13:57:59)
---------------------------------------------

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

new String:FreeID[25];
new String:FreeName[65];
new UserFree = 0;
new Fr;
new String:UnFreeID[25]  
new String:UnFreeName[65];
new UnUserFree;
new Handle:Menu;
new Handle:UnMenu;
new playersFreeDay = 0;

public OnPluginStart()
{
  HookEvent("round_start", Round_Start, EventHookMode_PostNoCopy);
  HookEvent("player_say", Say);
}

public Round_Start(Handle:event, const String:name[], bool:dontBroadcast)
{
  UserFree = 0;
  playersFreeDay = 0;
}

public Say(Handle:event, const String:name[], bool:dontBroadcast)
{
       new i = GetClientOfUserId(GetEventInt(event, "userid"));
       decl String:text[7];
       GetEventString(event, "text", text, sizeof(text));
    if (StrEqual(text, "free")) FreePlayer(i);
    if (StrEqual(text, "unfree"))  
    {
     UnFreePlayer(i);
   PrintToChatAll("usususu");
    }
}  

UnFreePlayer(client)
{
  UnMenu = CreateMenu(UnFreePlayerSelect);
  SetMenuTitle(UnMenu, "Снять свободу:\n \n");
  decl String:SteamID[150];
  decl String:UserName[MAX_NAME_LENGTH];
  for (new i = 1; i <= MaxClients; i++)
  {
   if (IsClientInGame(i) && IsPlayerAlive(i) && GetClientTeam(i) == 2 && (i == UserFree))
   {
    IntToString(GetClientUserId(i), SteamID, sizeof(SteamID));
    GetClientName(i, UserName, sizeof(UserName));
    AddMenuItem(UnMenu, SteamID, UserName);
   }
  }
   //AddMenuItem(Menu, "2", "Назад");
   SetMenuExitButton(UnMenu, true);
   DisplayMenu(UnMenu, client, 0);
}

public UnFreePlayerSelect(Handle:menu, MenuAction:action, client, option)
{
       if (action == MenuAction_Select)
       {   
    GetMenuItem(menu, option, FreeID, sizeof(FreeID), _, FreeName, sizeof(FreeName));
    UnUserFree = GetClientOfUserId(StringToInt(FreeID));
    if (UnUserFree > 0)
    {  
     PrintToChatAll("%N свобода снята", UnUserFree);
     SetEntityRenderColor(UnUserFree, 255, 255, 255, 255);
     playersFreeDay -= 1;
     UnUserFree != UserFree;
     UserFree = 0;
    }
    else PrintToChatAll("UnUserFree < 0 - %s", UnUserFree);
    }
}

FreePlayer(client)
{
  Menu = CreateMenu(FreePlayerSelect);
  SetMenuTitle(Menu, "Дать свободу?\n \n");
  decl String:SteamID[150];
  decl String:UserName[MAX_NAME_LENGTH];
  for (new i = 1; i <= MaxClients; i++)
  {
   if (IsClientInGame(i) && IsPlayerAlive(i) && GetClientTeam(i) == 2 && (i != UserFree) && (playersFreeDay < 2))
   {
    IntToString(GetClientUserId(i), SteamID, sizeof(SteamID));
    GetClientName(i, UserName, sizeof(UserName));
    AddMenuItem(Menu, SteamID, UserName);
   }
  }
   //AddMenuItem(Menu, "2", "Назад");
   SetMenuExitButton(Menu, true);
   DisplayMenu(Menu, client, 0);
}

public FreePlayerSelect(Handle:menu, MenuAction:action, client, option)
{
       if (action == MenuAction_Select)
       {   
    GetMenuItem(menu, option, FreeID, sizeof(FreeID), _, FreeName, sizeof(FreeName));
    UserFree = GetClientOfUserId(StringToInt(FreeID));
    if (UserFree > 0)
    {  
     PrintToChatAll("%N свободен", UserFree);
     SetEntityRenderColor(UserFree, 204, 51, 204, 10);
     playersFreeDay += 1;
      
    }
    else PrintToChatAll("UserFree < 0 - %s", UserFree);
    }
}


Почему когда выбрал 2 игрока free, в меню unfree остается только 1 ??? Как можно сиправить? ВИжу что UserFree - запомнило только 1 игрока.. так как запомнить в 1 перменной 2 игроков?? => они должны добавиться в unfree
 
Scarface_slv Дата: Понедельник, 30.04.2012, 23:58:35 | Сообщение # 54
Сообщений: 737
Репутация: 61 [ +/- ]
Quote (Naykon)
так как запомнить в 1 перменной 2 игроков??

а такое возможно? xd
 
Naykon Дата: Понедельник, 30.04.2012, 23:59:39 | Сообщение # 55
Сообщений: 439
Репутация: -4 [ +/- ]
Подскажите решение этой проблемы я лично раньше с этим не сталкивался((

Добавлено (30.04.2012, 23:59:39)
---------------------------------------------
ну я образно выразился на счет 1 переменная = 2 игрока... просто не пойму как решит... вижу ты тоже(((

 
Scarface_slv Дата: Вторник, 01.05.2012, 09:53:10 | Сообщение # 56
Сообщений: 737
Репутация: 61 [ +/- ]
эээ незнаю как с переменными,но можно через базу данных или через keyvalues. При выборе игрока из меню этот игрок сохраняется в базе его стим ид и ник а потом можно просмотреть удалить и т.д. через любую другую менюшку игроков из базы...
 
Naykon Дата: Вторник, 01.05.2012, 15:08:55 | Сообщение # 57
Сообщений: 439
Репутация: -4 [ +/- ]
Блин в гору лесть а обойти можно?? keyvalues - записывает в txt данные .. преодположим я запишу туда 1 выбранного UserFree а потом сразу же 2 выбранного UserFree .. после добавлю их в меню UnFreePlayer:
2 вопроса:
1) Как записать UserFree в keyvalues??? в уроке написано как можно написать скрипт чтоб по нему создался txt но как засунуть UserFree в KvSetString чтоб потом его использовать + какое далжно быть KvJumpToKey ?
 
Scarface_slv Дата: Вторник, 01.05.2012, 18:10:26 | Сообщение # 58
Сообщений: 737
Репутация: 61 [ +/- ]
http://world-source.ru/forum/102-2379-1 Вот тут обсуждалось про меню и keyvalues
 
Scarface_slv Дата: Вторник, 01.05.2012, 20:23:15 | Сообщение # 59
Сообщений: 737
Репутация: 61 [ +/- ]
вот пример просмотра стим ида и ника должен быть файл cstrike/banlist.cfg
и в banlist.cfg это:
Code

"banlist"
{
  "STEAM_0:0:516847243"
  {
   "name"  "Царь Вахтан"
   "reason"  "Аимбот"
   "time"  "0"
   "admin"  "Scarface"
  }
}

не проверял на работоспособность

Гости не могут скачивать файлы
 
Naykon Дата: Четверг, 03.05.2012, 11:40:04 | Сообщение # 60
Сообщений: 439
Репутация: -4 [ +/- ]
та мне нужно как омнить id игрока в keyvalve вот код:
Code
#include <sourcemod>
#include <cstrike>
#include <sdktools>
#include <sdktools_entoutput>
#include <sdktools_functions>   

new String:FreeID[25];
new String:FreeName[65];
new UserFree = 0;
new Fr;
new String:UnFreeID[25]   
new String:UnFreeName[65];
new UnUserFree;
new Handle:Menu;
new Handle:UnMenu;
new playersFreeDay = 0;

public OnPluginStart()
{
   HookEvent("round_start", Round_Start, EventHookMode_PostNoCopy);
   HookEvent("player_say", Say);
}

public Round_Start(Handle:event, const String:name[], bool:dontBroadcast)
{
   UserFree = 0;
   playersFreeDay = 0;
}

public Say(Handle:event, const String:name[], bool:dontBroadcast)
{
        new i = GetClientOfUserId(GetEventInt(event, "userid"));
        decl String:text[7];
        GetEventString(event, "text", text, sizeof(text));
     if (StrEqual(text, "free")) FreePlayer(i);
     if (StrEqual(text, "unfree"))   
     {
      UnFreePlayer(i);
    PrintToChatAll("usususu");
     }
}   

UnFreePlayer(client)
{
   UnMenu = CreateMenu(UnFreePlayerSelect);
   SetMenuTitle(UnMenu, "Снять свободу:\n \n");
   decl String:SteamID[150];
   decl String:UserName[MAX_NAME_LENGTH];
   for (new i = 1; i <= MaxClients; i++)
   {
    if (IsClientInGame(i) && IsPlayerAlive(i) && GetClientTeam(i) == 2 && (i == UserFree))
    {
     IntToString(GetClientUserId(i), SteamID, sizeof(SteamID));
     GetClientName(i, UserName, sizeof(UserName));
     AddMenuItem(UnMenu, SteamID, UserName);
    }
   }
    //AddMenuItem(Menu, "2", "Назад");
    SetMenuExitButton(UnMenu, true);
    DisplayMenu(UnMenu, client, 0);
}

public UnFreePlayerSelect(Handle:menu, MenuAction:action, client, option)
{
        if (action == MenuAction_Select)
        {    
     GetMenuItem(menu, option, FreeID, sizeof(FreeID), _, FreeName, sizeof(FreeName));
     UnUserFree = GetClientOfUserId(StringToInt(FreeID));
     if (UnUserFree > 0)
     {   
      PrintToChatAll("%N свобода снята", UnUserFree);
      SetEntityRenderColor(UnUserFree, 255, 255, 255, 255);
      playersFreeDay -= 1;
      UnUserFree != UserFree;
      UserFree = 0;
     }
     else PrintToChatAll("UnUserFree < 0 - %s", UnUserFree);
     }
}

FreePlayer(client)
{
   Menu = CreateMenu(FreePlayerSelect);
   SetMenuTitle(Menu, "Дать свободу?\n \n");
   decl String:SteamID[150];
   decl String:UserName[MAX_NAME_LENGTH];
   for (new i = 1; i <= MaxClients; i++)
   {
    if (IsClientInGame(i) && IsPlayerAlive(i) && GetClientTeam(i) == 2 && (i != UserFree) && (playersFreeDay < 2))
    {
     IntToString(GetClientUserId(i), SteamID, sizeof(SteamID));
     GetClientName(i, UserName, sizeof(UserName));
     AddMenuItem(Menu, SteamID, UserName);
    }
   }
    //AddMenuItem(Menu, "2", "Назад");
    SetMenuExitButton(Menu, true);
    DisplayMenu(Menu, client, 0);
}

public FreePlayerSelect(Handle:menu, MenuAction:action, client, option)
{
        if (action == MenuAction_Select)
        {    
     GetMenuItem(menu, option, FreeID, sizeof(FreeID), _, FreeName, sizeof(FreeName));
     UserFree = GetClientOfUserId(StringToInt(FreeID));
     if (UserFree > 0)
     {   
      PrintToChatAll("%N свободен", UserFree);
      SetEntityRenderColor(UserFree, 204, 51, 204, 10);
      playersFreeDay += 1;
        
     }
     else PrintToChatAll("UserFree < 0 - %s", UserFree);
     }
}
 
  • Страница 4 из 5
  • «
  • 1
  • 2
  • 3
  • 4
  • 5
  • »
Поиск: