Страница 2 от 2

Преработка на плъгин "Leader"

Публикувано на: 14 Май 2019, 21:28
от blazz3rzbg
пробвай да замениш тази функция

Код за потвърждение: Избери целия код

SetLeader(id)
{
    new iPlayers[32], NumPlayers
    get_players(iPlayers, NumPlayers, "")
    give_item(id,"weapon_deagle")
    cs_set_user_bpammo(id,CSW_DEAGLE,35)
    give_item(id,"weapon_knife")
    give_item(id,"weapon_hegrenade")
    give_item(id,"weapon_flashbang")
    give_item(id,"weapon_smokegrenade")
    cs_set_user_bpammo(id,CSW_HEGRENADE,3)
    cs_set_user_bpammo(id,CSW_FLASHBANG,3)
    cs_set_user_bpammo(id,CSW_SMOKEGRENADE,3)
    //set_user_health(id,  100 + get_pcvar_num(pHp) * (NumPlayers-1))

    do_glow(id)

    get_user_name(id, g_iName[id], 31)

    if(get_user_team(id) == 1) {
        rgb[0] = 255;
        rgb[1] = 0;
        rgb[2] = 0;
    }
    else {
        rgb[0] = 0;
        rgb[1] = 0;
        rgb[2] = 255;
    }
}
с тази

Код за потвърждение: Избери целия код

SetLeader(id)
{
    //new iPlayers[32], NumPlayers
    //get_players(iPlayers, NumPlayers, "")

    if(!is_user_alive(id)) return;


    give_item(id,"weapon_deagle")
    cs_set_user_bpammo(id,CSW_DEAGLE,35)
    give_item(id,"weapon_knife")
    give_item(id,"weapon_hegrenade")
    give_item(id,"weapon_flashbang")
    give_item(id,"weapon_smokegrenade")
    cs_set_user_bpammo(id,CSW_HEGRENADE,3)
    cs_set_user_bpammo(id,CSW_FLASHBANG,3)
    cs_set_user_bpammo(id,CSW_SMOKEGRENADE,3)
    //set_user_health(id,  100 + get_pcvar_num(pHp) * (NumPlayers-1))

    do_glow(id)

    get_user_name(id, g_iName[id], 31)

    if(get_user_team(id) == 1) {
        rgb[0] = 255;
        rgb[1] = 0;
        rgb[2] = 0;
    }
    else {
        rgb[0] = 0;
        rgb[1] = 0;
        rgb[2] = 255;
    }
}

Преработка на плъгин "Leader"

Публикувано на: 15 Май 2019, 01:08
от OciXCrom
@blazz3rzbg - не е нужно да проверяваш дали играчът е конектиран след като вече си проверил дали е жив, понеже is_user_alive включва същата проверка както и is_user_connected.

Преработка на плъгин "Leader"

Публикувано на: 15 Май 2019, 01:13
от blazz3rzbg
OciXCrom написа: 15 Май 2019, 01:08 @blazz3rzbg - не е нужно да проверяваш дали играчът е конектиран след като вече си проверил дали е жив, понеже is_user_alive включва същата проверка както и is_user_connected.
това беше добре да го зная понеже имаше тема в alliedmodders в която някои хора получаваха invalid player с проверка ако е жив.. по принцип няма логика ако е жив да не е в сървъра но добавям и проверка дали е connected за всеки случай

може би в новите amxx версии това е фикснато

Преработка на плъгин "Leader"

Публикувано на: 15 Май 2019, 15:07
от OciXCrom
blazz3rzbg написа: 15 Май 2019, 01:13
OciXCrom написа: 15 Май 2019, 01:08 @blazz3rzbg - не е нужно да проверяваш дали играчът е конектиран след като вече си проверил дали е жив, понеже is_user_alive включва същата проверка както и is_user_connected.
това беше добре да го зная понеже имаше тема в alliedmodders в която някои хора получаваха invalid player с проверка ако е жив.. по принцип няма логика ако е жив да не е в сървъра но добавям и проверка дали е connected за всеки случай

може би в новите amxx версии това е фикснато
Отвинаги е било така. Грешката сигурно е идвала от другаде. Ето самия C++ код на функцията:

Код за потвърждение: Избери целия код

static cell AMX_NATIVE_CALL is_user_alive(AMX *amx, cell *params) /* 1 param */
{
	int index = params[1];

	if (index < 1 || index > gpGlobals->maxClients)
	{
		return FALSE;
	}

	CPlayer* pPlayer = GET_PLAYER_POINTER_I(index);

	if (!pPlayer->ingame)
	{
		return FALSE;
	}

	if (g_bmod_tfc)
	{
		edict_t *e = pPlayer->pEdict;
		if (e->v.flags & FL_SPECTATOR ||
			(!e->v.team || !e->v.playerclass))
		{
			return FALSE;
		}
	}

	return pPlayer->IsAlive() ? TRUE : FALSE;
}
Както виждаш, проверява дали индексът е валиден и дали играчът е в сървъра преди да прави другите проверки.