[Select Team Menu] Организовать рандом

Сообщения
1,032
Реакции
828
Помог
10 раз(а)
Доброго времени суток.
Подскажите, как грамотней организовать рандомный выбор команды в 3 пункте меню.
Числовое значение, как я понимаю не поддерживает функция rg_join_team, а по другому организовывать рандом(текстовый =D) мне еще не приходилось.

C++:
#include <amxmodx>
#include <reapi>

#pragma semicolon 1

const MENU_STRLEN = 512;
const TIME_MENU = INVALID_HANDLE;
const MENU_KEYS = MENU_KEY_0|MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4;

new const MENU_TAB[] =            "^t^t^t^t";

public plugin_init() {
    register_plugin("Select Team Menu", "1.0", "Javekson");
    register_message(get_user_msgid("VGUIMenu"), "MsgVGUIMenu");
    register_menucmd(register_menuid("_select_team_menu"), MENU_KEYS, "HandleSelectTeamMenu");
}

public MsgVGUIMenu(const iMsgID, const iDest, const iIndex) {
    ShowSelectMenuTeam(iIndex);
    return PLUGIN_HANDLED;
}

public ShowSelectMenuTeam(const id) {
    new sMenu[MENU_STRLEN], iLenMenu = formatex(sMenu, charsmax(sMenu), "%s\yМеню выбора команды^n^n", MENU_TAB);
    new bsKeys = MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4;
    iLenMenu += formatex(sMenu[iLenMenu], charsmax(sMenu) - iLenMenu, "%s\y1. \wТеррорист^n%s\y2. \wКонтр-террорист^n^n%s\y3. \wАвто-выбор^n%s\y4. \wНаблюдатель^n^n", MENU_TAB, MENU_TAB, MENU_TAB, MENU_TAB);
    if(get_member(id, m_iTeam) != TEAM_UNASSIGNED) {
        bsKeys |= MENU_KEY_0;
        formatex(sMenu[iLenMenu], charsmax(sMenu) - iLenMenu, "%s\y0. \wВыход", MENU_TAB);
    }
    return show_menu(id, bsKeys, sMenu, TIME_MENU, "_select_team_menu");
}

public HandleSelectTeamMenu(const id, const iKey) {
    switch(iKey) {
        case 0: {
            rg_join_team(id, TEAM_TERRORIST);
            rg_set_user_team(id, TEAM_TERRORIST, MODEL_AUTO);
        }
        case 1: {
            rg_join_team(id, TEAM_CT);
            rg_set_user_team(id, TEAM_CT, MODEL_AUTO);
        }
        case 2: {
            return PLUGIN_HANDLED;
        }
        case 3: {
            rg_join_team(id, TEAM_SPECTATOR);
        }
        case 9: {
            return PLUGIN_HANDLED;
        }
    }
    return PLUGIN_HANDLED;
}
23 Дек 2017
Еще чувствую я, что использования подряд две функции не есть грамотно (rg_join_team(id, TEAM_CT) и rg_set_user_team(id, TEAM_CT, MODEL_AUTO))
Но мне необходимо рандомно выбрать модель игрока и затем его спавнить.
 
Сообщения
219
Реакции
184
Помог
3 раз(а)
Мой плагин баланча возьми да посмотри.
23 Дек 2017
В функции есть аргумент установки модели на скок я помню
 
Сообщения
258
Реакции
262
Помог
5 раз(а)
Код:
rg_join_team(id, TeamName:random_num(_:TEAM_TERRORIST, _:TEAM_SPECTATOR));
 
Сообщения
1,032
Реакции
828
Помог
10 раз(а)
В функции есть аргумент установки модели на скок я помню
в rg_join_team самому установить модель нету возможности, в нем выполняется следующий код:
C++:
SET_MODEL(ENT(pPlayer->pev), "models/player.mdl");
Который мне одну и туже модель ставит, все террористы одинаковые =D
 
Сообщения
460
Реакции
68
Помог
7 раз(а)
Javekson, можете поделится готовым вашим творениям если не жалко? Это ж как я понял кастомное меню выбора команд?
 
Сообщения
43
Реакции
8
Помог
3 раз(а)
Javekson, можешь свалить на косяк реапи )
Выдай модель сам.
 
Сообщения
443
Реакции
319
Помог
13 раз(а)
joinclass 5 ne variant?
ulu kak tam eto pusheco
 
Сообщения
1,032
Реакции
828
Помог
10 раз(а)
Underground Player, engclient_cmd(id, "joinclass", ""), да это понятно, хочется просто через ReAPI, без всяких на то аргументов, увы.
Да и для организации рандома, кажется, придется свою константу делать с классами моделей в этом случае(это не сложно, просто к слову)
rg_set_user_team в ней есть все, что необходимо, но она не спавнит сразу.
Если бы добавили еще один булевой аргумент туда по типу:
const bool:force_join = true =D
24 Дек 2017
Best777, да, костомное, мне не жалко, просто для публичной версии нужно много нюансов учесть, а мне лень, для себя и простое пойдет ))
Если в таком виде устроит, то не жалко =D
 
Сообщения
460
Реакции
68
Помог
7 раз(а)
Javekson, если можно то да такой вид как раз что нужно :D без дополнений я прост не скриптер по особому но немного шарю по этому и прошу скиньте файлик целиком
 
Сообщения
2,143
Реакции
1,225
Помог
44 раз(а)
Так если тебе нужно спавн после выбора команды, то добавь опосля rg_round_respawn
 
Сообщения
1,032
Реакции
828
Помог
10 раз(а)
Minni, а он будет нормально работать с mp_roundrespawn_time ?
До этого времени нужно спавнить, после этого времени уже нет.
В принципе я проверю, просто, может быть ты уже знаешь ответ.
 

d3m37r4

111111
Сообщения
1,451
Реакции
1,177
Помог
10 раз(а)
Minni, она слишком быстро сработает:D с задержкой вроде норм работает.
 
Сообщения
1,032
Реакции
828
Помог
10 раз(а)
d3m37r4, да он вообще не спавнится у меня =D
Может быть потому, что rg_set_user_team просто присваивает значения, а для спавна необходимо зайти за команду, поэтому rg_round_respawn не срабатывает. Фиг знает.
 
Сообщения
2,143
Реакции
1,225
Помог
44 раз(а)
Minni, а он будет нормально работать с mp_roundrespawn_time ?
До этого времени нужно спавнить, после этого времени уже нет.
В принципе я проверю, просто, может быть ты уже знаешь ответ.
Она сразу спавнит. Делай необходимую тебе проверку на mp_roundrespawn_time для управления нативом.
 
Сообщения
1,032
Реакции
828
Помог
10 раз(а)
Minni, ответил выше, одновременно отправили.
 
Сообщения
1,032
Реакции
828
Помог
10 раз(а)
Best777, лови пока в таком виде, если буду что менять, скажу.
Единственные нюансы, которые я пока в голове прокрутил это:
  • При коннекте игрок может перекрыть меню выбора команды другим меню, придется снова нажать на "m", дабы выбрать команду, решил не учитывать это, мне это не нужно, левых меню у меня нету, кроме админки, но надеюсь додумаются еще раз клацнуть.
  • Не учитываю проверку на тиму, то есть во время игры можно выбрать еще раз команду террористы и если ты уже играешь за них - тебя убьет один фиг, если память не изменяет так и будет в обычном новом меню. Не хочу это учитывать, ибо вообще не знаю зачем это делать во время игры, но если такое произойдет это вина игрока, имхо.
  • При авто-выборе, модель игрока возьмется первая(в зависимости от команды), а не рандомная, не хочу там рандом делать ибо не думаю, что будут пользоваться авто-выбором, но если и случится- не критично.
  • Использую две нативы друг за другом, ибо до другого пока не додумался с помощью ReAPI =(
    • rg_join_team(id, TEAM_TERRORIST); // спавнит игрока за команду, при этом автоматически учитывает mp_roundrespawn_time
    • rg_set_user_team(id, TEAM_TERRORIST, MODEL_AUTO); // рандомно присваивает класс игроку. К сожалению в отдельности не спавнит.
В остальном вроде работает, как обычно, проверил на основном сервере, глюков не заметил.
 

Download all Attachments

Последнее редактирование:
Сообщения
460
Реакции
68
Помог
7 раз(а)
Javekson, спасибо большое робота супер!
Советую всем!
 

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу