1

Тема: Сервер для гри з NPC та мобами

Хай. От зіштовхнувся з проблемою написання саме такого серверу. Як ви знаєте, в мене вже є недосервер, котрий передає інформацію між клієнтами та виконує ще деякі функції. Але як створити мобів? Тобто жучків-черв'ячків, котрі існували б в ігровому світі незалежно від того, чи підключений якийсь клієнт до гри, чи ні. Адже потрібно розраховувати позицію цього жучка-черв'ячка і це неможливо без логіки/функціоналу того ігрового рушія, на котрому пишеться клієнт. Було дві ідеї:
1) Зробити сервер у вигляді клієнту. Постворювати на ньому мобів в вигляді примітивів, рухати їх, а позицію передавати клієнтам. З клієнтами так само, коли один з них підключається до серверу, то створюється примітив, коли користувач тисне кнопку W, то це відправляється на сервер, далі до примітиву персонажа цього користувача приміняється метод Move(), котрий рухає персонажа з урахуванням нерівностей поверхності та іншого, і після цього позиція цього примітиву передається всім клієнтам.
Недолік цієї системи в тому, що сервер буде потребувати багато ресурсів включно з ресурсами відеокарти, адже ігровий рушій використовує і освітлення, і шейдери, це можна вимкнути, але все одно будуть використовуватися непотрібні ресурси. Також проблема в тому, що я проектував та писав сервер з урахуванням більшості можливостей мови C# та технології .Net, а ігровий рушій використовує застарілу версію .Net і ключові моменти ігрового серверу неможливо інтегрувати в клієнт.
2) Зробити карту висот для рельєфа ігрового світу. Це означає, що ми малюємо мапу в сірих тонах, де в кожному пікселі буде відбиватись певна точка в ігровому світі. Позиція пікселю та його колір - це точка в ігровому світі. Звісно, колір тут відповідає за висоту. Далі ми можемо створювати мобів, і рухати їх опираючись на карту висот, тобто якщо моб на висоті 100 і треба піти вперед, а піксель зпереду має висоту 200, то очевидно, що моб туди зайти не може, а якщо висота наступного пікселю 101, то можна пройти. Недоліки такої системи в тому, що не зрозуміло, наскільки детальною має бути ця карта, наприклад, в мене є карта 100x100 метрів, а персонаж та моб можуть бути різної довжини та широти, і може статись так, що персонаж стоїть наполовину в стіні. Також я не кажу вже про різні будинки та дірки в горах, така карта не зможе показати пещеру абощо.
Діліться своїми ідеями та роздумами на рахунок такого серверу. Дякую.

Говоріть українською! Живіть українською! Відчувайте українською!

2 Востаннє редагувалося quez (22.05.2014 18:55:16)

Re: Сервер для гри з NPC та мобами

Далі ми можемо створювати мобів,

Оцей момент треба розкрити. Боти самописні? Світ дозволяє їм знаходитись наполовину в стіні? Як взагалі описується їхнє положення?

МАКЕ ЦКЯАІИЕ БЯЕАТ АБАІИ

3

Re: Сервер для гри з NPC та мобами

quez написав:

Далі ми можемо створювати мобів,

Оцей момент треба розкрити. Боти самописні? Світ дозволяє їм знаходитись наполовину в стіні? Як взагалі описується їхнє положення?

звісно самописні, хто ж їх за мене напише? треба, щоб не дозволяв. Положення описується трьома змінними X, Y та Z.

Говоріть українською! Живіть українською! Відчувайте українською!

4 Востаннє редагувалося quez (22.05.2014 19:07:35)

Re: Сервер для гри з NPC та мобами

Маловато буде трьох змінних. Хіба що для мобів у вигляді стафілококів. Для палички Коха треба як мінімум п’ять. Але у вас, я так розумію, моби складніші.

Чи це майнкрафт, де кожен знаходиться в одній точці, незалежно від своєї форми? Написав дурницю, тоді він не може бути наполовину в стіні.

МАКЕ ЦКЯАІИЕ БЯЕАТ АБАІИ
Подякували: koala1

5

Re: Сервер для гри з NPC та мобами

quez написав:

Маловато буде трьох змінних. Хіба що для мобів у вигляді стафілококів. Для палички Коха треба як мінімум п’ять. Але у вас, я так розумію, моби складніші.

Чи це майнкрафт, де кожен знаходиться в одній точці, незалежно від своєї форми? Написав дурницю, тоді він не може бути наполовину в стіні.

ну моб має ширину і довжину, ви це маєте на увазі? тоді дивіться,  у нас є точка, котра відповідає за позицію, також ми маємо ширину та довжину моба, і якщо та точка всередині моба, то ми можете обчислити, де знаходиться жопа та голова, та боки моба.

Говоріть українською! Живіть українською! Відчувайте українською!

6

Re: Сервер для гри з NPC та мобами

FakiNyan написав:
quez написав:

Маловато буде трьох змінних. Хіба що для мобів у вигляді стафілококів. Для палички Коха треба як мінімум п’ять. Але у вас, я так розумію, моби складніші.

Чи це майнкрафт, де кожен знаходиться в одній точці, незалежно від своєї форми? Написав дурницю, тоді він не може бути наполовину в стіні.

ну моб має ширину і довжину, ви це маєте на увазі? тоді дивіться,  у нас є точка, котра відповідає за позицію, також ми маємо ширину та довжину моба, і якщо та точка всередині моба, то ми можете обчислити, де знаходиться жопа та голова, та боки моба.

Саме тому для лінії достатньо п’яти координат, для чогось складнішого треба ще більше. Кількість потрібних координат називають кількістю степеней свободи, навіть формулу для цього придумали:
https://upload.wikimedia.org/math/4/9/2/492e385e56cc1ffe6ec67f3190daba92.png
де N — кількість точок, а n — кількість зв’язків.
Зрозуміло, що у вашому випадку цього не може бути, тому мають бути ще обмеження, які дозволять за невеликою кількістю точок визначити всі потрібні координати.

МАКЕ ЦКЯАІИЕ БЯЕАТ АБАІИ

7

Re: Сервер для гри з NPC та мобами

quez написав:
FakiNyan написав:
quez написав:

Маловато буде трьох змінних. Хіба що для мобів у вигляді стафілококів. Для палички Коха треба як мінімум п’ять. Але у вас, я так розумію, моби складніші.

Чи це майнкрафт, де кожен знаходиться в одній точці, незалежно від своєї форми? Написав дурницю, тоді він не може бути наполовину в стіні.

ну моб має ширину і довжину, ви це маєте на увазі? тоді дивіться,  у нас є точка, котра відповідає за позицію, також ми маємо ширину та довжину моба, і якщо та точка всередині моба, то ми можете обчислити, де знаходиться жопа та голова, та боки моба.

Саме тому для лінії достатньо п’яти координат, для чогось складнішого треба ще більше. Кількість потрібних координат називають кількістю степеней свободи, навіть формулу для цього придумали:
https://upload.wikimedia.org/math/4/9/2/492e385e56cc1ffe6ec67f3190daba92.png
де N — кількість точок, а n — кількість зв’язків.
Зрозуміло, що у вашому випадку цього не може бути, тому мають бути ще обмеження, які дозволять за невеликою кількістю точок визначити всі потрібні координати.

Ну слухайте, мені теж вистачить 5 точок, адже колайдер для кожного мобу не має повторювати його форму, буде просто прямокутник

Говоріть українською! Живіть українською! Відчувайте українською!

8

Re: Сервер для гри з NPC та мобами

Вже краще. Тепер ми маємо прямокутник з п’ятьма точками і карту висот. Нічого кращого за проходження всіх (або майже всіх) точок карти, які відповідають x та y прямокутника, придумати не можу. Та й топорно це все якось, чесно кажучи.

МАКЕ ЦКЯАІИЕ БЯЕАТ АБАІИ

9

Re: Сервер для гри з NPC та мобами

То вигадайте щось краще, що перше приходить в голову?

Говоріть українською! Живіть українською! Відчувайте українською!

10

Re: Сервер для гри з NPC та мобами

Так.
По-перше, карта може мати якісь обмеження — наприклад, не мати різких піків. Тоді для того, щоб розмістити прямокутник, потрібно перевірити набагато менше точок.
По-друге, при переміщенні треба перевіряти тільки точки, на яких прямокутника до цього не було, а після переміщення з’явиться.

МАКЕ ЦКЯАІИЕ БЯЕАТ АБАІИ

11 Востаннє редагувалося FakiNyan (22.05.2014 20:29:37)

Re: Сервер для гри з NPC та мобами

quez написав:

Так.
По-перше, карта може мати якісь обмеження — наприклад, не мати різких піків. Тоді для того, щоб розмістити прямокутник, потрібно перевірити набагато менше точок.
По-друге, при переміщенні треба перевіряти тільки точки, на яких прямокутника до цього не було, а після переміщення з’явиться.

Наскільки різких піків не має бути?
Ліл, ото ви смішне сказали. Нехай персонаж в точці (1,2), користувач тисне W, це значить, треба йти вперед, то очевидно, що перевірятись буде точка (2,2), ну чи (1,3), залежить від того, яка компонента за що відповідає, але ж ніяк не точка (666,100500).
аааа, я зрозумів. Кхм, але ж у нас уже є готова карта, на котрій написано, чи може тут пройти персонаж, чи не може, тобто нам не треба нічого кешувати, тому що перевірка без кешування буде щось на зразок

if(abs(field[2][2]-field[1][2])<2) {
Move(); }

А з кешуванням треба створювати свій масив для кожного персонажу, так, розрахунків буде менше, тому що після проходження кожної точки в масив буде просто додаватись позиція та true, якщо в точку можна зайти, або false, якщо не можна, але й ті розрахунки не такі вже й ресурсоємкі, це вже не до початкового питання відноситься, а до оптимізації

Говоріть українською! Живіть українською! Відчувайте українською!

12

Re: Сервер для гри з NPC та мобами

Ліл, ото ви смішне сказали. Нехай персонаж в точці (1,2), користувач тисне W, це значить, треба йти вперед, то очевидно, що перевірятись буде точка (2,2), ну чи (1,3), залежить від того, яка компонента за що відповідає, але ж ніяк не точка (666,100500).

Неуважно читаєте.
Наприклад є куб з вершинами в (0,0,0) і (2,2,2). Коли ми його ставимо, треба перевірити дев’ять точок: (x, y, 0), 0 ≤ x, y < 3. Коли ми його рухаємо — тільки три: (3, y, 0), 0 ≤ y < 3.

МАКЕ ЦКЯАІИЕ БЯЕАТ АБАІИ

13

Re: Сервер для гри з NPC та мобами

quez написав:

Ліл, ото ви смішне сказали. Нехай персонаж в точці (1,2), користувач тисне W, це значить, треба йти вперед, то очевидно, що перевірятись буде точка (2,2), ну чи (1,3), залежить від того, яка компонента за що відповідає, але ж ніяк не точка (666,100500).

Неуважно читаєте.
Наприклад є куб з вершинами в (0,0,0) і (2,2,2). Коли ми його ставимо, треба перевірити дев’ять точок: (x, y, 0), 0 ≤ x, y < 3. Коли ми його рухаємо — тільки три: (3, y, 0), 0 ≤ y < 3.

а, точно хД

Говоріть українською! Живіть українською! Відчувайте українською!