Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

Меню выбора команды, возрождение, но...

, Все внутри. Если сделаете, цены вам не будет.
Статус пользователя explosiondj
сообщение 4.7.2014, 23:58
Сообщение #1
Стаж: 14 лет

Сообщений: 44
Благодарностей: 1
Полезность: < 0

Всем доброго времени суток. Пробывал сам, но знаний не хватило.

Есть плагин с нужным меню https://c-s.net.ua/forum/topic64411.html
Есть плагин где игрока возрождает сразу https://c-s.net.ua/forum/topic64267.html (но меню не то)

А есть моя какашка, где копи паст, но баги остались. Соль то в чем?

А вот в чем: Игрока убили - смена команды - возрождение без прицела и ножа - смена команды (опять же, обратно) - возрождение вообще ни с чем, в народе говорят с х*ем остался psych.gif

Прошу у вас помощи в чем?

Запретите возрождение: когда игрок мертв (уже играет на сервере, а не только зашел), когда игрок хочет живым перейти в другую команду (тупо слэй дэфолтный и сиди жди)

Иными словами, хочу что бы игрок моментально возродился когда зашел на сервер (хз, фикс от "убили-зашел-снова живой" - это антиреконект на минуту, а то и две) и все, основное правило "никогда не возрождать игрока, только лишь когда зашел на сервер"

Моя какашка:
Код
                    Часть кода с обходом лимита предоставил Freedo.m, за что ему спасибо
*/

#include <amxmodx>
#include <cstrike>
#include <fakemeta>
#include <hamsandwich>

#pragma semicolon 1

new g_MapName[32], bool:g_VIPMap = false;

public plugin_init()
{
    register_plugin("Change Team", "1.1", "neygomon");
    register_clcmd("chooseteam", "ShowMenu");
    register_menucmd(register_menuid("Team Menu"), MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_5|MENU_KEY_6|MENU_KEY_0, "HandleMenu");
    register_message(96, "MessageShowMenu");
    register_message(114, "MessageVGUIMenu");
    get_mapname(g_MapName, charsmax(g_MapName));
    if(containi(g_MapName, "as_") != -1) g_VIPMap = true;
}

public ShowMenu(id)
{
    new szMenu[512], iLen = formatex(szMenu, charsmax(szMenu), "\yВыбор команды:^n^n"), iKeys = MENU_KEY_0;
    new iNumTe = get_teamplayersnum(CS_TEAM_T), iNumCt = get_teamplayersnum(CS_TEAM_CT), CsTeams:iTeam = cs_get_user_team(id);
    if(iNumTe > iNumCt) iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y1. \dТеррористы^n");
    else
    {
        iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y1. \wТеррористы^n");
        iKeys |= MENU_KEY_1;
    }
    if(iNumCt > iNumTe) iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y2. \dКонтр-террористы^n^n");
    else
    {
        iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y2. \wКонтр-террористы^n^n");
        iKeys |= MENU_KEY_2;
    }
    if(g_VIPMap)
    {
        if(iTeam != CS_TEAM_CT) iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y3. \dСтать VIP^n^n");
        else
        {
            iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y3. \wСтать VIP^n^n");
            iKeys |= MENU_KEY_3;
        }
    }
    if(CS_TEAM_UNASSIGNED < iTeam < CS_TEAM_SPECTATOR) iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y5. \dСлучайный выбор^n");
    else
    {
        iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y5. \wСлучайный выбор^n");
        iKeys |= MENU_KEY_5;
    }
    if(iTeam == CS_TEAM_SPECTATOR) iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y6. \dНаблюдение^n^n^n");
    else
    {
        iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y6. \wНаблюдение^n^n^n");
        iKeys |= MENU_KEY_6;
    }
    formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y0. \wВыход");
    return show_menu(id, iKeys, szMenu, -1, "Team Menu");
}

public HandleMenu(id, iKey)
{
    switch(iKey)
    {
        case 0:
        {
            set_pdata_int(id, 125, get_pdata_int(id, 125) & ~(1<<8));
            engclient_cmd(id, "jointeam", "1");
            set_task(2.0, "SpawnPlayer", id);
        }
        case 1:
        {
            set_pdata_int(id, 125, get_pdata_int(id, 125) & ~(1<<8));
            engclient_cmd(id, "jointeam", "2");
            set_task(2.0, "SpawnPlayer", id);
        }
        case 2:
        {
            set_pdata_int(id, 125, get_pdata_int(id, 125) & ~(1<<8));
            engclient_cmd(id, "jointeam", "3");
            set_task(2.0, "SpawnPlayer", id);
        }
        case 4:
        {
            set_pdata_int(id, 125, get_pdata_int(id, 125) & ~(1<<8));
            engclient_cmd(id, "jointeam", "5");
            set_task(2.0, "SpawnPlayer", id);
        }
        case 5:
        {
            user_kill(id, 1);
            engclient_cmd(id, "jointeam", "6");
            set_task(2.0, "SpawnPlayer", id);
        }
    }
    return PLUGIN_HANDLED;
}

public MessageShowMenu(iMsgId, iMsgDest, iReceiver)
{
    static szArg4[20]; get_msg_arg_string(4, szArg4, charsmax(szArg4));
    if(equal(szArg4, "#Team_Select", 12) || equal(szArg4, "#IG_Team_Select", 15) || equal(szArg4, "#IG_VIP_Team_Select", 19))
    {
        set_pdata_int(iReceiver, 205, 0);
        return ShowMenu(iReceiver);
    }
    return PLUGIN_CONTINUE;
}

public MessageVGUIMenu(iMsgId, iMsgDest, iReceiver)
{
    if(get_msg_arg_int(1) == 2)
    {
        set_pdata_int(iReceiver, 205, 0);
        return ShowMenu(iReceiver);
    }
    return PLUGIN_CONTINUE;
}

get_teamplayersnum(const CsTeams:iTeam)
{
    static players[32], iNum;
    get_players(players, iNum, "che", iTeam == CS_TEAM_T ? "TERRORIST" : "CT");    
    return iNum;
}
public SpawnPlayer(id)
{
    if(is_user_alive(id)) return;
    
    switch(get_pdata_int(id, 114))
    {
        case 1, 2: ExecuteHamB(Ham_Spawn, id);
    }
}



Мне кажется надо сделать через is_user_connected и дело с концом, но сомневаюсь.
Товарищ ставит на счетчик спавнов ( одно возрождение на один steam id ) так то же можно, но id_lan сможет когда угодно перезаходить туда сюда и сами понимаете.
Только от вас помощи и ждем)

Отредактировал: explosiondj, - 5.7.2014, 0:12
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Esecman
сообщение 5.7.2014, 3:00
Сообщение #2
Стаж: 12 лет

Сообщений: 945
Благодарностей: 208
Полезность: 0

Код:
is_user_connected(id)
не поможет, нужно отловить выбор команды игроком, потом спавнить

Отредактировал: Esecman, - 5.7.2014, 3:00
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
trollface
сообщение 5.7.2014, 9:15
Сообщение #3
Стаж: 12 лет

Сообщений: 1970
Благодарностей: 2423
Полезность: 0

explosiondj,
добавляй булевую переменную и при первом заходе ставь ей true

Собственно вот:
Код:
#include <amxmodx>
#include <cstrike>
#include <fakemeta>
#include <hamsandwich>

#pragma semicolon 1

new g_MapName[32], bool:g_VIPMap = false, bool:g_iFirstSpawn[33] = false;

public plugin_init()
{
register_plugin("Change Team", "1.1", "neygomon");
register_clcmd("chooseteam", "ShowMenu");
register_menucmd(register_menuid("Team Menu"), MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_5|MENU_KEY_6|MENU_KEY_0, "HandleMenu");
register_message(96, "MessageShowMenu");
register_message(114, "MessageVGUIMenu");
get_mapname(g_MapName, charsmax(g_MapName));
if(containi(g_MapName, "as_") != -1) g_VIPMap = true;
}

public ShowMenu(id)
{
new szMenu[512], iLen = formatex(szMenu, charsmax(szMenu), "\yВыбор команды:^n^n"), iKeys = MENU_KEY_0;
new iNumTe = get_teamplayersnum(CS_TEAM_T), iNumCt = get_teamplayersnum(CS_TEAM_CT), CsTeams:iTeam = cs_get_user_team(id);
if(iNumTe > iNumCt) iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y1. \dТеррористы^n");
else
{
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y1. \wТеррористы^n");
iKeys |= MENU_KEY_1;
}
if(iNumCt > iNumTe) iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y2. \dКонтр-террористы^n^n");
else
{
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y2. \wКонтр-террористы^n^n");
iKeys |= MENU_KEY_2;
}
if(g_VIPMap)
{
if(iTeam != CS_TEAM_CT) iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y3. \dСтать VIP^n^n");
else
{
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y3. \wСтать VIP^n^n");
iKeys |= MENU_KEY_3;
}
}
if(CS_TEAM_UNASSIGNED < iTeam < CS_TEAM_SPECTATOR) iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y5. \dСлучайный выбор^n");
else
{
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y5. \wСлучайный выбор^n");
iKeys |= MENU_KEY_5;
}
if(iTeam == CS_TEAM_SPECTATOR) iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y6. \dНаблюдение^n^n^n");
else
{
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y6. \wНаблюдение^n^n^n");
iKeys |= MENU_KEY_6;
}
formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y0. \wВыход");
return show_menu(id, iKeys, szMenu, -1, "Team Menu");
}

public HandleMenu(id, iKey)
{
switch(iKey)
{
case 0:
{
set_pdata_int(id, 125, get_pdata_int(id, 125) & ~(1<<8));
engclient_cmd(id, "jointeam", "1");
set_task(2.0, "SpawnPlayer", id);
}
case 1:
{
set_pdata_int(id, 125, get_pdata_int(id, 125) & ~(1<<8));
engclient_cmd(id, "jointeam", "2");
set_task(2.0, "SpawnPlayer", id);
}
case 2:
{
set_pdata_int(id, 125, get_pdata_int(id, 125) & ~(1<<8));
engclient_cmd(id, "jointeam", "3");
set_task(2.0, "SpawnPlayer", id);
}
case 4:
{
set_pdata_int(id, 125, get_pdata_int(id, 125) & ~(1<<8));
engclient_cmd(id, "jointeam", "5");
set_task(2.0, "SpawnPlayer", id);
}
case 5:
{
user_kill(id, 1);
engclient_cmd(id, "jointeam", "6");
set_task(2.0, "SpawnPlayer", id);
}
}
return PLUGIN_HANDLED;
}

public MessageShowMenu(iMsgId, iMsgDest, iReceiver)
{
static szArg4[20]; get_msg_arg_string(4, szArg4, charsmax(szArg4));
if(equal(szArg4, "#Team_Select", 12) || equal(szArg4, "#IG_Team_Select", 15) || equal(szArg4, "#IG_VIP_Team_Select", 19))
{
set_pdata_int(iReceiver, 205, 0);
return ShowMenu(iReceiver);
}
return PLUGIN_CONTINUE;
}

public MessageVGUIMenu(iMsgId, iMsgDest, iReceiver)
{
if(get_msg_arg_int(1) == 2)
{
set_pdata_int(iReceiver, 205, 0);
return ShowMenu(iReceiver);
}
return PLUGIN_CONTINUE;
}

get_teamplayersnum(const CsTeams:iTeam)
{
static players[32], iNum;
get_players(players, iNum, "che", iTeam == CS_TEAM_T ? "TERRORIST" : "CT");
return iNum;
}
public SpawnPlayer(id)
{
if(is_user_alive(id) || g_iFirstSpawn[id]) return;
g_iFirstSpawn[id] = true;
switch(get_pdata_int(id, 114))
{
case 1, 2: ExecuteHamB(Ham_Spawn, id);
}
}


и ты это....:
Код:
set_task(2.0, "SpawnPlayer", id);

сам же возрождаешь при переходе -_-
ко мне какие претензии? если не знаешь, то не трогай коды, окай?

ps.gif если из хендлера меню убрать строки set_task(2.0, "SpawnPlayer", id); , то и булевая нужна не будет

Отредактировал: trollface, - 5.7.2014, 9:18
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя explosiondj
сообщение 5.7.2014, 13:30
Сообщение #4
Стаж: 14 лет

Сообщений: 44
Благодарностей: 1
Полезность: < 0



Огромное спасибо тебе. Я не такое днище как ты думаешь, просто здесь не разобрался, а по форумам посмотрел, ты любитель делать добро, вот и надеялся на твой ответ. Спасибо еще раз. Щас вот еще на одну идейку попрошу помощи и буду на седьмом небе от счастья yahoo.gif

Отредактировал: explosiondj, - 5.7.2014, 13:30
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: