Hey, so I've been working with multisync for about two weeks now and it's been a smooth ride. However, I currently have a problem where Player One (who also hosts the server through a second program on same computer) doesn't receive a second player's name who joins the server. The server sees everyone connected and everyone's name AND when player two joins they receive player one's name. I just can't seem to figure this one out.
By the way, I connect with Net Connect 127.0.0.1 for Player One and use a 192.168.1.X for all other players.
Can anyone take a look at this code and tell me what I'm doing wrong. I think the messages are sending incorrectly or I'm canceling out a variable somewhere. It's maddening because the server receives all the information but players aren't getting it all.
Server code:
Do
CLS
text 0,0,"Server Number of players: "+str$(net get player amount())
text 0,20,"Map: "+map_name$
text 0,40,"Player One: "+player_name$(1)+" connected: "+str$(net player connected(1))+" ip: "+net get player ip(1)
text 0,60,"Player Two: "+player_name$(2)+" connected: "+str$(net player connected(2))+" ip: "+net get player ip(2)
text 0,80,"Player Three: "+player_name$(3)+" connected: "+str$(net player connected(3))+" ip: "+net get player ip(3)
text 0,100,"Player Four: "+player_name$(4)+" connected: "+str$(net player connected(4))+" ip: "+net get player ip(4)
text 0,120,"Player Five: "+player_name$(5)+" connected: "+str$(net player connected(5))+" ip: "+net get player ip(5)
text 0,140,"Player Six: "+player_name$(6)+" connected: "+str$(net player connected(6))+" ip: "+net get player ip(6)
text 0,180,"Game in progress: "+str$(multi_begin)
`Get new player id for list
p_joined=net player joined()
if p_joined>0
net put int 2 `signifies joining message from server
net put int p_joined `sents player number to new player
net send p_joined
write string 2,"("+server_time()+") Player "+str$(p_joined)+" joined game"
write string 2,"---Number of players: "+str$(net get player amount())
endif
`Remove player from list of id
p_left=net player left()
if p_left>0
player_name$(p_left)="" `erase player name when they leave
`ends server exe if player one leaves
if p_left=1
for p=2 to 6
if net player connected(p)=1 then net kick p `disconnect all other players
NEXT
write string 2,"("+server_time()+") Host left server closing"
close file 1
end
endif
endif
`Send general server information (number of players, map name, and starting game)
for p=1 to net get player amount()
`Sending server info to all players
net put int 1 `signifies general server message
net put int net get player amount() `amount of players connected
net put int logged_start
net put string map_name$
r=rnd(4)+1
net put int r
net send p
next p
`Send gameplay data here
if multi_begin>0
ENDIF
`Getting data sent
`net_get=net get message()
`if net_get>0
while net get message()
message_id=net get int() `determines what kind of message
if message_id=3 `start game message from "Host"
multi_begin=net get int() `flag of 1 starts game
map_name$=net get string()
if logged_start=0 and multi_begin=1
write string 2,"("+server_time()+") Host has started game"
write string 2,"-- Map: "+map_name$
write string 2,"---"+player_name$(1)
write string 2,"---"+player_name$(2)
write string 2,"---"+player_name$(3)
write string 2,"---"+player_name$(4)
write string 2,"---"+player_name$(5)
write string 2,"---"+player_name$(6)
logged_start=1 `flags logging of started game
endif
endif
if message_id=4 `receiving player name from each player
temp_id=net get int() `receive player id number
temp_name$=net get string() `receive player name
`checks if player name slot is empty, if it is then write to log
if temp_id>0 and temp_name$<>"" and player_name$(temp_id)=""
write string 2,"---Player "+str$(temp_id)+" name: "+temp_name$
endif
`adds player name to player slot
player_name$(temp_id)=temp_name$
`Send player name to everyone else
for p=1 to net get player amount()
net put int 5
net put int temp_id
net put string player_name$(temp_id)
if p<>temp_id
net send p
endif
NEXT p
endif
`Collect all date from players here
`(score, deaths, respawns for players and items)
endwhile
`endif
LOOP
Lobby code (all players):
Do
CLS
text 0,0,"Lobby Number of players: "+str$(number_of_players)
text 0,20,"Press BACKSPACE to exit lobby"
text 0,60,"Map: "+multi_map_name$
text 0,80,"Player One: "+player_name$(1)
text 0,100,"Player Two: "+player_name$(2)
text 0,120,"Player Three: "+player_name$(3)
text 0,140,"Player Four: "+player_name$(4)
text 0,160,"Player Five: "+player_name$(5)
text 0,180,"Player Six: "+player_name$(6)
text 0,220,"You are Player "+str$(multi_player_number)
if multi_player_number=1 `display for player 1 Host only
text 0,200,"Press HOME to begin game."
text 0,260,"Host IP: "+multi_host_ip$
endif
text 0,300,"begin: "+str$(multi_begin)
text 0,320,"timer: "+str$(multi_timer)
text 0,350,"test: "+str$(randoms)
text 0,370,"error: "+NET GET ERROR()
`Message IDs
`1 = Server message (players connected, player names, game start flag)
`2 = Join message (server)
`3 = Game start (player 1 -> server)
`4 = Name message (all players to server)
`--Get server info--
net_get=net get message()
if net_get>0
message_id=net get int() `determines what kind of message
if message_id=1 `general server message (amt of players, map name, start game)
number_of_players=net get int() `# of players
if multi_player_number>1 `Player one "Host" doesn't need to retrieve map name
multi_begin=net get int() `game start flag
multi_map_name$=net get string()
else
temp_var=net get int()
temp_var$=net get string() `stores map name in throw away string
endif
randoms=net get int()
endif
if message_id=2 `join message from server (player ID)
multi_player_number=net get int() `global ID for each player
player_name$(multi_player_number)=player_id$ `sets your name in the correct player name slot
endif
if message_id=5 `Receive other player names from server
num=net get int()
player_name$(num)=net get string()
endif
endif
`--Send player name to server (all players)--
net put int 4
net put int multi_player_number
net put string player_id$
net send
`--Player one message and control--
if multi_player_number=1
`Start Game w/ HOME key (Player One is considered the host)
if scancode()=199
multi_begin=1 `flags to begin game
endif
`Only player one sends this message
net put int 3 `ID to signify message is from "Host"
net put int multi_begin `flag to begin game
net put string multi_map_name$ `sends map name to server
net send `send signal to server that game has begun
endif
`Press BACKSPACE to exit lobby
if scancode()=14
net disconnect
goto revenge_menu
endif
`Starts game
if multi_begin=1
`Does countdown timer, allows "multi_begin" flag to be sent a few times to server
if multi_timer>0 then multi_timer=multi_timer-1
if multi_timer=0
multi_timer=multi_timer_limit `reset multiplayer timer
`exit
endif
ENDIF
`If server is disconnected, move to main menu
if net connected()=0 then goto revenge_menu
LOOP
Any tips for multisync? Am I not sending data correctly?
BioFox Games