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

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

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

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

История благодарностей участнику Assault ::: Спасибо сказали: 6
Дата поста: В теме: За сообщение: Спасибо сказали:
21.2.2017, 19:19 Эксперты по стрельбе
Цитата(pc1x @ 20.2.2017, 4:17) *
Assault, А откуда такая интересная информация про -pingboost 3, ссылку можно?)

Достаточно изучить стэк вызова начиная со строчки rehlds/engine/net_ws.cpp#L1111

Реализации select для unix свои, напимер эта:

Код
595SYSCALL_DEFINE5(select, int, n, fd_set __user *, inp, fd_set __user *, outp,
596                fd_set __user *, exp, struct timeval __user *, tvp)
597{
598        struct timespec end_time, *to = NULL;
599        struct timeval tv;
600        int ret;
601
602        if (tvp) {
603                if (copy_from_user(&tv, tvp, sizeof(tv)))
604                        return -EFAULT;
605
606                to = &end_time;
607                if (poll_select_set_timeout(to,
608                                tv.tv_sec + (tv.tv_usec / USEC_PER_SEC),
609                                (tv.tv_usec % USEC_PER_SEC) * NSEC_PER_USEC))
610                        return -EINVAL;
611        }
612
613        ret = core_sys_select(n, inp, outp, exp, to);
614        ret = poll_select_copy_remaining(&end_time, tvp, 1, ret);
615
616        return ret;
617}

static inline long copy_from_user(void *to,
                const void __user * from, unsigned long n)
{
        might_sleep();
        if (access_ok(VERIFY_READ, from, n))
                return __copy_from_user(to, from, n);
        else
                return n;
}

static inline long copy_to_user(void __user *to,
                const void *from, unsigned long n)
{
        might_sleep();
        if (access_ok(VERIFY_WRITE, to, n))
                return __copy_to_user(to, from, n);
        else
                return n;
}

#ifndef __copy_to_user
static inline __must_check long __copy_to_user(void __user *to,
                const void *from, unsigned long n)
{
        if (__builtin_constant_p(n)) {
                switch(n) {
                case 1:
                        *(u8 __force *)to = *(u8 *)from;
                        return 0;
                case 2:
                        *(u16 __force *)to = *(u16 *)from;
                        return 0;
                case 4:
                        *(u32 __force *)to = *(u32 *)from;
                        return 0;
#ifdef CONFIG_64BIT
                case 8:
                        *(u64 __force *)to = *(u64 *)from;
                        return 0;
#endif
                default:
                        break;
                }
        }

        memcpy((void __force *)to, from, n);
        return 0;
}
#endif

259/**
260 * poll_select_set_timeout - helper function to setup the timeout value
261 * @to:         pointer to timespec variable for the final timeout
262 * @sec:        seconds (from user space)
263 * @nsec:       nanoseconds (from user space)
264 *
265 * Note, we do not use a timespec for the user space value here, That
266 * way we can use the function for timeval and compat interfaces as well.
267 *
268 * Returns -EINVAL if sec/nsec are not normalized. Otherwise 0.
269 */
270int poll_select_set_timeout(struct timespec *to, long sec, long nsec)
271{
272        struct timespec ts = {.tv_sec = sec, .tv_nsec = nsec};
273
274        if (!timespec_valid(&ts))
275                return -EINVAL;
276
277        /* Optimize for the zero timeout value here */
278        if (!sec && !nsec) {
279                to->tv_sec = to->tv_nsec = 0;
280        } else {
281                ktime_get_ts(to);
282                *to = timespec_add_safe(*to, ts);
283        }
284        return 0;
285}


а также понимать, что сетевая карта принимает пакеты постоянно и использует свои кэши, т.к. по другому ей работать не выгодно, поэтому эта умышленная задержка(sleep) помогает общей синхронизации игрового процесса.
HUNTERsp4x, pc1x
19.2.2017, 22:20 Эксперты по стрельбе
Никакие настройки не помогут, т.к. ошибки расчётов попадания в хитбоксы(в игроков) заложены в самом движке. Это самая корявая стрельба, которая только может быть в онлайн-играх, тем не менее она привлекает игроков, поэтому valve не стали заморачиваться и сделали CS:GO с корректной стрельбой.
Хитбоксы - это такие кубы, которые принимают пули.
Недавно исправили баг со снайперской стрельбой в Team Fortress 2 спустя десять лет https://geektimes.ru/post/286012/ ..... [видос]

Если сервак на unix, обратите внимание на параметр запуска -pingboost 3, который кэширует udp-траффик на уровне ядра, что позволяет быть уверенным в том, что стреляешь туда, куда целишься в единый момент времени. Остальное разруливает кривой движок игры.
esterio, Nebo
7.9.2008, 22:29 Csdm
юзай spawn_editor.amxx который идет в комплект с CSDM
Soccer