Здравствуйте, гость Вход | Регистрация
Наши новости:
|
| Дата поста: | В теме: | За сообщение: | Спасибо сказали: | ||
|---|---|---|---|---|---|
| 21.2.2017, 19:19 | Эксперты по стрельбе | Достаточно изучить стэк вызова начиная со строчки Реализации 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 спустя десять лет ..... Если сервак на unix, обратите внимание на параметр запуска -pingboost 3, который кэширует udp-траффик на уровне ядра, что позволяет быть уверенным в том, что стреляешь туда, куда целишься в единый момент времени. Остальное разруливает кривой движок игры. |
esterio, Nebo | ||
| 7.9.2008, 22:29 | Csdm | юзай spawn_editor.amxx который идет в комплект с CSDM |
Soccer | ||