forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   Multiplayer.... (http://forum.boolean.name/showthread.php?t=3564)

Raiter 09.06.2007 00:56

Multiplayer....
 
Вложений: 8
Блин! Как же не хотел создавать тему! :''(( Но вынужден... :''((

В общем дело обстоит так... Делаю я маленькую игрушку. Рабочее название Fights Of Dragons (если что - в аттаче пару скринов). Как понятно из названия - это бои драконов. Игра по локальной сети и интернету. Сделал загрузку уровня (уровень пока взят из семплов), управление, кое-какую модель дракона (не доделанную, без текстур и анимации), сделал стрельбу файерболами, дыхание огнём, ускорение с моушн блуром, прикол аля хвост за самолётом (просто так... в финальной версии планировалось убрать), конфиг, в котором можно произвести некоторые настройки и другое... После этого занятся мультиплеером. Сделал по схеме коротая в аттаче. Реализовал список серверов. Делал через DirectPlay. Тестировал с айпи 127.0.0.1 - всё отлично. Дал людям потестировать - сказали что игра пошла - 2 человека играли вместе по нету (как оказалось пожже у них присутствовала локальная сеть :( ) Потом тестировал сам. Тестировал в клубе. По локальной сети всё отлично работает. Никаких глюков. Но по интернету игра вообще не идёт :( Просто не конектится. Что бы не было разговоров о правильности/не правильности кода, вот написал мелкий пример - по такому принцыпу делал в игре (а какой там может быть другой принцып - в DirectPlay :-) )

Для сервера:
Код:


GameName$ = Input$("Имя сервера: ")

Type PlayerType
Field Name$, ID
End Type

HostNetGame(GameName$)
CreatePlayer()

Print "Сервер запущен"
While Not KeyDown(1)
While RecvNetMsg()
MsgType = NetMsgType()
If MsgType = 100 Then
CreateEnemy()
End If
Wend
Wend

Function CreateEnemy.PlayerType()

Player.PlayerType = New PlayerType
Player\ID = NetMsgFrom()
Player\Name = NetPlayerName(Player\ID)

End Function

Function CreatePlayer.PlayerType()

Player.PlayerType = New PlayerType
Player\Name = GameName$ + " сервак"
Player\ID = CreateNetPlayer(Name$)

End Function

Для клиента:

Код:

GameName$ = Trim(Input$("Название игры: "))
ServerIP$ = Trim(Input$("IP адрес сервера: "))

Type PlayerType
Field Name$, ID
End Type

Global MyID, MyName$
Global Player.PlayerType

jng=JoinNetGame(GameName$,ServerIP$)
If jng= False Then RuntimeError "Connecting Failed"

Name$ = Input$("Ваше имя: ")

CreatePlayer()
MyID = Player\ID
MyName = Name$

Print "Подключение к серверу прошло успешно"
While Not KeyDown(1)
While RecvNetMsg()
MsgType = NetMsgType()
If MsgType = 100 Then
Createenemy()
End If
Wend
Wend

Function CreatePlayer.PlayerType()

Player.PlayerType = New PlayerType
Player\Name = Name$
Player\ID = CreateNetPlayer(Name$)

End Function

Function CreateEnemy.PlayerType()

Player.PlayerType = New PlayerType
Player\ID = NetMsgFrom()
Player\Name = NetPlayerName(Player\ID)

End Function

После нескольких дней извините *ботни с DirectPlay, по совету Tormoz' а, который сказал
Цитата:

директплэй ф топку
попытался заюзать K-NetLib... Результата никакого... Опять по*бался с либой и попробовал по совету Моки (MoKa) TCPStream... Разобрался вродь в нём. Попробовал сделать соединение - опять никакого результата.. При 127.0.0.1 - конектитсо, а если пытаюсь с кем-то по интернету - никак :(

Короче уже неделю парюсь с этой проблемой :wallbash:

Мне не нужно ничего, кроме того что бы хоть как-то установить соединение между двумя разными компами по интернету. Дальше я уже сам... Конечно очень стыдно об этом просить и на форуме я хотел о своем проекте рассказать только после "выхода" хоть какой-то работоспособной демо-версии ''(( :''(( :''(( ... Но люди добрые помогите мне несчастному! :SOS: Пытался даже забить на проект, что бы не просить сдесь помощи, но не могу! Я очень-очень-очень хочу довести его до конца! :wallbash: Даже не знаю почему, но это так...

Raiter 09.06.2007 01:40

Re: Multiplayer....
 
Через ТСП делал так:

Код:

MyMachine$ = Trim(Input$("Сервер/клиент 0/1 "))

If MyMachine = 0 Then

Game = CreateTCPServer(8080)
If Game <> 0 Then
Print "Сервер запущен"
Else
Print "Не удалось запустить сервер"
End If

ElseIf MyMachine$ = 1

IP$ = Trim(Input$("IP сервера: "))

Game = OpenTCPStream(IP$,8080)

If Game <> 0 Then
Print "Подключение прошло успешно"
Else
Print "Не удалось подключится к серверу"
End If

End If

WiteKey


Progger_Leo 09.06.2007 12:38

Re: Multiplayer....
 
Raiter єто великое ужасное ПРОКСИ! Сам незнаю что сделать с єтой проблемой. Много людей не могут подключатся к моей гаме. НО! Вроде бы, если СЕРВЕР не использует прокси, тогда КЛИЕНТ должен спокойно подключатся...Если я не ошибаюсь :dontknow:

ЛИБО

Фигня со списком серверов. А ты в клубе в Интернет выходил? Именно не по локалке, а вообще? И с кем-то, кто находился НЕ в клубе? Если, нет, то это однозначно прокси.

Raiter 09.06.2007 13:57

Re: Multiplayer....
 
Со списком серверов однозначно всё впорядке. Ибо в клубе играли. НО только по лан. Да и правильность работы списка я неоднократно проверял...

Progger_Leo 09.06.2007 14:07

Re: Multiplayer....
 
ПРОКСИ! :wild:
По ЛАНу не важно, но в Сети...

Raiter 09.06.2007 15:28

Re: Multiplayer....
 
хехе... ну вот... получилось. с использованием K-NetLib

я сколько искал проблему... знаете де она была???

KNL_Connect(MyName$,"",ServerIP$,1001,1) - тут, но не поверите в чем! в MyName$! когда я чисто ради эксперимента написал KNL_Connect("Client","",ServerIP$,1001,1) всё пошло...:pure_magic:

ппц просто... почему-то имя не считывалось и постоянно было "" :girl_cray2:

теперь всё нормально.... :@ :-)

Progger_Leo 09.06.2007 16:06

Re: Multiplayer....
 
Меня терзают смутные сомненья...

Лан, допустим ДиректПлэй не пахал. Но ТСР...Не верю! :dontknow:

Raiter 09.06.2007 16:11

Re: Multiplayer....
 
ДП... не допустим, а точно. HolyDel ошибок не нашёл.. мы с ним пробовали создать соединение... ничего не вышло...

Raiter 09.06.2007 17:01

Re: Multiplayer....
 
все... траблу решил! всем спасибо за помощь и её отстутствие! :-)
тему закрываю!


Часовой пояс GMT +4, время: 09:37.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot