Тема: Multiplayer....
Показать сообщение отдельно
Старый 09.06.2007, 00:56   #1
Raiter
Гигант индустрии
 
Регистрация: 04.08.2006
Сообщений: 2,642
Написано 53 полезных сообщений
(для 92 пользователей)
Печаль Multiplayer....

Блин! Как же не хотел создавать тему! Но вынужден...

В общем дело обстоит так... Делаю я маленькую игрушку. Рабочее название 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 - конектитсо, а если пытаюсь с кем-то по интернету - никак

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

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