コード例 #1
0
ファイル: Menu.cpp プロジェクト: l3op/GTA_Menu_Base
void menu::run_menu() {
	if (!is_open) return;
	reset_vars();

	static int a_int = 0;
	static float a_float = 0;
	static bool a_bool = false;

	switch (current_menu) {
		case Main_Menu: {
			sub_title = "Main Menu";
			option_count = 9;
			add_option_i("Edit Int", &a_int, 0, 100);
			add_option_f("Edit Float", &a_float, 0, 5);
			add_option_b("Toggle Bool", &a_bool);
			add_option_bc("Toggle Godmode", true, toggle_godmode, !*toggle_godmode());
			add_option_c("Explode Self", explode_player, PLAYER::PLAYER_ID());
			add_option_bc_arg("Spawn Adder", false, spawn_vehicle, true, "adder");
			add_option_bc_arg("Change Model to Alien", false, set_model, true, "S_M_M_MovAlien_01");
			add_option_c("Open Sub", change_menu, Sub_1);
			add_option_c("Players Menu", change_menu, Players);
			break;
		}
		case Sub_1: {
			sub_title = "Sub menu 1";
			option_count = 15 + 1;
			for (int i = 0; i < 15; i++) {
				add_option_n(string("Option ") + string(i + 1));
			}
			add_option_c("Open Nested Sub", change_menu, Sub_2);
			break;
		}
		case Sub_2: {
			sub_title = "A Nested Sub";
			option_count = 3;
			add_option_n("Option 1");
			add_option_n("Option 2");
			add_option_n("Option 3");
			break;
		}
		case Players: {
			sub_title = "Players Menu";
			option_count = get_players_count();
			for_player {
				char* name = PLAYER::GET_PLAYER_NAME(player);
				if (!strcmp(name, "**Invalid**")) continue;
				add_option_c(name, open_players_options, player);
			}
			break;
		}
		case Players_Options: {
			sub_title = PLAYER::GET_PLAYER_NAME(selected_player);
			option_count = 3;
			add_option_c("Blow Up", explode_player, selected_player);
			add_option_c("Teleport To", teleport, ENTITY::GET_ENTITY_COORDS(PLAYER::GET_PLAYER_PED(selected_player)));
			add_option_bc_arg("Drop Cash", true, toggle_cash_drop, !*toggle_cash_drop(0, selected_player), selected_player);
			break;
		}
	}
}
コード例 #2
0
void	game_sv_TeamDeathmatch::AutoBalanceTeams()
{
    if (!Get_AutoTeamBalance()) return;
    //calc team count
    s16 MinTeam, MaxTeam;
    u32 NumToMove;
    u32	cnt = get_players_count(), l_teams[2] = {0,0};
    for(u32 it=0; it<cnt; it++)	{
        xrClientData *l_pC = (xrClientData*)	m_server->client_Get	(it);
        game_PlayerState* ps	= l_pC->ps;
        if (!l_pC->net_Ready) continue;
        if (ps->IsSkip()) continue;
        if(ps->team>=1) ++(l_teams[ps->team-1]);
    };

    if (l_teams[0] == l_teams[1]) return;

    if (l_teams[0] > l_teams[1])
    {
        MinTeam = 1;
        MaxTeam = 0;
    }
    else
    {
        MinTeam = 0;
        MaxTeam = 1;
    };

    NumToMove = (l_teams[MaxTeam] - l_teams[MinTeam]) / 2;
    if (!NumToMove) return;
    ///////////////////////////////////////////////////////////////////////
    while (NumToMove)
    {
        ///////// get lowest score player from MaxTeam
        u32 LowestPlayer = 0;
        s16 LowestScore = 32767;
        for(u32 it=0; it<cnt; it++)	{
            xrClientData *l_pC = (xrClientData*)	m_server->client_Get	(it);
            game_PlayerState* ps	= l_pC->ps;
            if (!l_pC->net_Ready) continue;
            if (ps->IsSkip()) continue;
            if (ps->team-1 != MaxTeam) continue;

            if (ps->frags() < LowestScore)
            {
                LowestScore = ps->frags();
                LowestPlayer = it;
            };
        };
        ///////// move player to opposite team
        xrClientData *l_pC = (xrClientData*)	m_server->client_Get	(LowestPlayer);
        game_PlayerState* ps	= l_pC->ps;
        ps->team = u8((MinTeam+1) & 0x00ff);
        NumToMove--;
    }
};
コード例 #3
0
u8 game_sv_TeamDeathmatch::AutoTeam()
{
    u32	cnt = get_players_count(), l_teams[2] = {0,0};
    for(u32 it=0; it<cnt; it++)	{
        xrClientData *l_pC = (xrClientData*)	m_server->client_Get	(it);
        game_PlayerState* ps	= l_pC->ps;
        if (!l_pC->net_Ready) continue;
        if (ps->IsSkip() || ps->team == 0 || ps->testFlag(GAME_PLAYER_FLAG_SPECTATOR)) continue;
        if(ps->team>=1) ++(l_teams[ps->team-1]);
    }
    return (l_teams[0]>l_teams[1])?2:1;
}
コード例 #4
0
u32 game_sv_TeamDeathmatch::GetPlayersCountInTeams	(u8 team)
{
    u32	cnt = get_players_count(), TeamPlayersCount = 0;
    for(u32 it=0; it<cnt; it++)	{
        xrClientData *l_pC = (xrClientData*)	m_server->client_Get	(it);
        game_PlayerState* ps	= l_pC->ps;
        if (!l_pC->net_Ready) continue;
        if (ps->IsSkip() || ps->team == 0 || ps->testFlag(GAME_PLAYER_FLAG_SPECTATOR)) continue;
        if(ps->team>=team) TeamPlayersCount++;
    }
    return (TeamPlayersCount);
};
コード例 #5
0
void game_sv_TeamDeathmatch::AutoSwapTeams			()
{
    if (!Get_AutoTeamSwap()) return;

    u32		cnt = get_players_count();
    for		(u32 it=0; it<cnt; ++it)
    {
        // init
        xrClientData *l_pC = (xrClientData*)	m_server->client_Get	(it);
        if (!l_pC || !l_pC->net_Ready || !l_pC->ps) continue;
        game_PlayerState* ps	= l_pC->ps;
        if (ps->IsSkip()) continue;

        if (ps->team != 0)
            ps->team	=	(ps->team == 1) ? 2 : 1;
    }
}