// Добавить в sql базу VIP игрока. // Если он уже в базе, можно изменить группу и продлить время. bool:GiveVip(target, vip_min, const String:vip_group[], bool:need_change_group = false, bool:need_extend_time = true, admin = 0) { new flags = VIP_GetFlags(target); if (!(flags & VCF_AUTHORIZED)) { if (admin) { PrintToChat(admin, "%N не авторизован%s", target, (flags & VCF_VIPPAUSE) ? " (должен перезайти)" : ""); } return false; } decl String:steamid[32]; if (!GetClientAuthId(target, AuthIdType:AuthId_Steam2, steamid, sizeof(steamid))) { if (admin) { PrintToChat(admin, "GetClientAuthId error"); } return false; } // -2 = нет VIP прав // -1 = вечный VIP доступ // x = оставшиеся секунды VIP доступа new const access_sec = VIP_GetSeconds(target); // Если у игрока нет vip прав или они временные (VIP_SetTemporaryGroup) (vip права не прописаны в базе) if (access_sec == -2 || (flags & VCF_VIPTEMPORARY)) { ServerCommand("sm_vipadd \"%s\" %d \"%s\"", steamid, vip_min, vip_group); return true; } // Это VIP игрок и права прописаны в базе // Если у игрока вечный доступ if (access_sec == -1) { return need_change_group ? change_group(target, vip_group, steamid) : false; } // Осталось access_sec секунд доступа new const bool:group_changed = need_change_group && change_group(target, vip_group, steamid); if (need_extend_time ) { ServerCommand("sm_viptime + %d \"%s\"", vip_min, steamid); } return (group_changed || need_extend_time); } bool:change_group(target, const String:vip_group[], const String:steamid[]) { decl String:cur_gr[GROUP_LENGTH]; if (VIP_GetGroupName(target, cur_gr, sizeof(cur_gr)) && strcmp(cur_gr, vip_group, true)) { // Если группа не равна текущей, перемещаем в новую: ServerCommand("sm_vipgroupset \"%s\" \"%s\"", steamid, vip_group); return true; } return false; }