#1 16-07-2009 10:31

009
From: Кемерово
Registered: 06-03-2009
Posts: 46
Website

Four-MultiPlayer

Здравствуйте все.
Команда русских разработчиков во главе с WNeZRoS разрабатывает мультиплеер для GTA IV,и не помешала бы помощь listener'a и Seemann'a т.к. вы работаете с внутренностями гта намного дольше нас всех=)

WNeZRoS wrote:

[center]FOUR-MP
Russian GTA IV Multiplayer[/center]

FOUR-MP v0.03
В новой версии добавлено:
Синхронизация прыжков
Синхронизация приседаний
Чат (с русским у него плохо, очень чувствительные буквы (shift работает но плохо))
Список игроков на экране (Now at screen)

ищутся люди способные перевести сервер под Widows в сервер под linux

Скоро будет v0.1b
Скриптовой язык SQUIRREL
Поддержка чатом русского языка есть
Поддержки версии 1C нет (может будет) (поверх 1С 1.0.3.1 становится 1.0.4.0)

Сейчас в мп использован GTA IV C++ Script Hook ,но нужен собственный чтобы его можно было редактировать и была поддержка всех версий,вы принимали участие в разработке GTA IV C++ Script Hook может поможете нам сделать хук для мп?=)

Офф сайт разработки: four-mp.com

Last edited by 009 (16-07-2009 16:24)

Offline

#2 16-07-2009 11:27

listener
From: Vice City
Registered: 09-11-2006
Posts: 616
Website

Re: Four-MultiPlayer

@009 - Уф-ф-ф... Все гораздо проще.
В игре есть штатный механизм синхронизации. Очень большой, очень подробный и очень сложный. (~10-15% от всего игрового кода). Если хочется сделать собственный мультиплеер - гораздо проще заюзать его, заменив только сетевую часть.
Более того, все, что не касается match-making, ranking и прочих масштабных вещей - обертки вокруг самых обычных сокетов. Я специально оставлял в исходниках xliveless комментарии к этим функциям.

Так что, все упирается в написание маленькой dll (можно, как стартовую точку взять тот же xliveless - он public domain), которая будет заниматься перенаправкой соответствующих вызовов в winsock, плюс какая-то минимальная логика для организации матчей.

Offline

#3 16-07-2009 11:51

009
From: Кемерово
Registered: 06-03-2009
Posts: 46
Website

Re: Four-MultiPlayer

сетевая часть это RakNet...а вот как нам заюзать механизм синхронизации игры???(эт я от себя спрашиваю,мож кто из команды разрабов и понял но я вот хз:D)

Offline

#4 16-07-2009 15:29

WNeZRoS
Registered: 16-07-2009
Posts: 1
Website

Re: Four-MultiPlayer

Присоединяюсь к вопросу 009
+ вопрос:
что такое match-making

Last edited by WNeZRoS (16-07-2009 15:29)

Offline

#5 16-07-2009 18:03

listener
From: Vice City
Registered: 09-11-2006
Posts: 616
Website

Re: Four-MultiPlayer

Включется синхронизация автоматически, как только выставляется флаг, что началась сетевая игра.
После этого, любое действие в игре (включая погоду, радиостанции, время и т.д.) начинает синхронизироваться на всех участников игры.


@WNeZRoS - match-making - подбор участников игры (по рейтингу, friend/non-friend, бан читеров и т.д.)

Offline

#6 16-07-2009 18:06

009
From: Кемерово
Registered: 06-03-2009
Posts: 46
Website

Re: Four-MultiPlayer

listener wrote:

Включется синхронизация автоматически, как только выставляется флаг, что началась сетевая игра.
После этого, любое действие в игре (включая погоду, радиостанции, время и т.д.) начинает синхронизироваться на всех участников игры.


@WNeZRoS - match-making - подбор участников игры (по рейтингу, friend/non-friend, бан читеров и т.д.)

начинает синхронизироваться но стандартными методами игры,да?и нам получается надо будет перенаправить данные на наш сетевой двиг,верно,или нет?=)

P.S.

extern "C"  SOCKET __stdcall xlive_3 (int af, int type, int protocol) { // XSocketCreate
	trace ("xlive_3: XCreateSocket (%d, %d, %d)\n", af, type, protocol);
	return INVALID_SOCKET;
}

extern "C"  int __stdcall xlive_4 (SOCKET s) {	// XSocketClose
	trace ("xlive_4: XSockeClose)\n");
	return 0;
}

extern "C"  int __stdcall xlive_5 (SOCKET s, int how) {	// XSocketShutdown
	trace ("xlive_5: XSocketShutdown\n");
	return 0;
}

extern "C"  int __stdcall xlive_6 (SOCKET s, long cmd, long * argp) { // XSocketIOCTLSocket
	trace ("xlive_6: XSocketIOCTLSocket\n");
	return 0;
}

extern "C"  int __stdcall xlive_7 (SOCKET s, DWORD, DWORD, DWORD, DWORD) {	// XSocketSetSockOpt	
	trace ("xlive_7: XSocketSetSockOpt\n");
	return 0;
}

extern "C"  int __stdcall xlive_9 (SOCKET s, sockaddr_in * name, int * namelen) { // XSocketGetSockName
	trace ("xlive_9: XSocketGetSockName\n");
	if (namelen && name && *namelen == sizeof (sockaddr_in)) 
		memset (name, 0, sizeof (sockaddr_in));
	return 0;
}

extern "C"  SOCKET __stdcall xlive_11 (SOCKET s, sockaddr_in * addr, int * addrlen) {// XSocketBind
	trace ("xlive_11: XSocketBind\n");
	return INVALID_SOCKET;
}

extern "C"  int __stdcall xlive_12 (SOCKET s, sockaddr_in * addr, int * addrlen) {// XSocketConnect
	trace ("xlive_12: XSocketConnect\n");
	return 0;
}

extern "C"  int __stdcall xlive_13 (SOCKET s, int backlog) { // XSocketListen
	trace ("xlive_13: XSocketListen\n");
	return 0;
}

extern "C"  SOCKET __stdcall xlive_14 (SOCKET s, sockaddr_in * addr, int * addrlen) { // XSocketAccept
	trace ("xlive_14: XSocketAccept\n");
	return INVALID_SOCKET;
}

extern "C"  int __stdcall xlive_15 (int n, void *, void *, void *, void *) { // XSocketSelect
	trace ("xlive_15: XSocketSelect\n");
	return 0;
}

extern "C"  int __stdcall xlive_18 (SOCKET s, char * buf, int len, int flags) { // XSocketRecv
	return 0;
}

extern "C"  int __stdcall xlive_20 (SOCKET s, char * buf, int len, int flags, sockaddr_in * from, int fromlen) { // XSocketRecvFrom
	return 0;
}

extern "C"  int __stdcall xlive_22 (SOCKET s, char * buf, int len, int flags) { // XSocketSend
	return 0;
}

extern "C"  int __stdcall xlive_24 (SOCKET s, char * buf, int len, int flags, sockaddr_in * to, int tolen) { // XSocketSendTo
	return 0;
}

extern "C"  int __stdcall xlive_26 (char *) { // XSocketInet_Addr
	trace ("xlive_26: XSocketInet_Addr\n");
	return 0;
}

это для использования сокетов игрового сетевого движка?

Last edited by 009 (16-07-2009 18:12)

Offline

Board footer

Powered by FluxBB