Hey Guys, Having a few issues with multisync, we have created a server to handle everyone's requests ect; ect; but we keep kicking each other out with object already exists or object doesn't exist, or array out of bounds.
loader(float, string) is just a function to show a progress bar.
.. SYNC CODE ..
#constant SENDGAP 0
#constant MAXIMUM_PLAYERS 10
#constant MESSAGE_ID_NAME 0
#constant MESSAGE_ID_GENERAL 1
#constant MESSAGE_ID_GENERALFULL 2
#constant MESSAGE_ID_PLAYERJOINED 3
#constant MESSAGE_ID_PLAYERQUIT 4
.. MAIN MENU SCREEN > CLICK ON JOIN GAME..
loader(0,"Logging In...")
result = net connect("xxx.xxx.xxx.xxx")
if not result
loader(0,"Could not connect: "+net get error()+". Press any key to try again.")
username$=""
passname$=""
wait key
current=1
goto MAIN_MENU
endif
type local_player
id as float
exis as float
name as string
velo as float
rota as float
roll as float
pitc as float
xpos as float
ypos as float
zpos as float
endtype
type player_type
id as float
exis as float
name as string
velo as float
rota as float
roll as float
pitc as float
xpos as float
ypos as float
zpos as float
endtype
GLOBAL NAME as string
GLOBAL PLAYER as local_player
GLOBAL DIM OPPONENT(100) as player_type
NAME = username$
net put byte MESSAGE_ID_NAME
net put string NAME
net send
loader(100,"Logged In!")
goto MAIN_GAME
.. INITIALISE PLANETS AND SET DEFAULT VARIABLES ..
PLAYER.name = username$
net put byte MESSAGE_ID_GENERAL
NET PUT STRING PLAYER.name
NET PUT FLOAT PLAYER.velo
NET PUT FLOAT PLAYER.rota
NET PUT FLOAT PLAYER.roll
NET PUT FLOAT PLAYER.pitc
NET PUT FLOAT PLAYER.xpos
NET PUT FLOAT PLAYER.ypos
NET PUT FLOAT PLAYER.zpos
NET SEND
loader(100,"Communicating with VOID")
while net get message()
select net get byte()
case MESSAGE_ID_GENERAL
playerNum = NET GET FLOAT()
OPPONENT(playerNum).name = NET GET STRING()
OPPONENT(playerNum).velo = NET GET FLOAT()
OPPONENT(playerNum).rota = NET GET FLOAT()
OPPONENT(playerNum).roll = NET GET FLOAT()
OPPONENT(playerNum).pitc = NET GET FLOAT()
OPPONENT(playerNum).xpos = NET GET FLOAT()
OPPONENT(playerNum).ypos = NET GET FLOAT()
OPPONENT(playerNum).zpos = NET GET FLOAT()
objectid = playerNum + 1000
load object "media\shipA_3DS.3DS",objectid
scale object objectid,10,10,10
position object objectid, OPPONENT(playerNUM).xpos, OPPONENT(playerNUM).ypos, OPPONENT(playerNUM).zpos
PITCH OBJECT UP objectid, OPPONENT(playerNum).pitc
ROLL OBJECT RIGHT objectid, OPPONENT(playerNum).roll
TURN OBJECT RIGHT objectid, OPPONENT(playerNUM).rota
endcase
endselect
endwhile
.. START GAMELOOP and move local player ..
while net get message()
select net get byte()
case MESSAGE_ID_GENERAL
playerNum = NET GET FLOAT()
OPPONENT(playerNum).name = NET GET STRING()
OPPONENT(playerNum).velo = NET GET FLOAT()
OPPONENT(playerNum).rota = NET GET FLOAT()
OPPONENT(playerNum).roll = NET GET FLOAT()
OPPONENT(playerNum).pitc = NET GET FLOAT()
OPPONENT(playerNum).xpos = NET GET FLOAT()
OPPONENT(playerNum).ypos = NET GET FLOAT()
OPPONENT(playerNum).zpos = NET GET FLOAT()
objectid = playerNum + 1000
if OBJECT EXIST(objectid)=0
load object "media\shipA_3DS.3DS",objectid
ENDIF
position object objectid, OPPONENT(playerNUM).xpos, OPPONENT(playerNUM).ypos, OPPONENT(playerNUM).zpos
PITCH OBJECT UP objectid, OPPONENT(playerNum).pitc
ROLL OBJECT RIGHT objectid, OPPONENT(playerNum).roll
TURN OBJECT RIGHT objectid, OPPONENT(playerNUM).rota
endcase
endselect
endwhile
net put byte MESSAGE_ID_GENERAL
NET PUT STRING username$
NET PUT FLOAT PLAYER.velo
NET PUT FLOAT PLAYER.rota
NET PUT FLOAT PLAYER.roll
NET PUT FLOAT PLAYER.pitc
NET PUT FLOAT PLAYER.xpos
NET PUT FLOAT PLAYER.ypos
NET PUT FLOAT PLAYER.zpos
NET SEND
Loop
.. FUNCTION CODE HERE ..
Error normally occurs around: OPPONENT(playerNum).name = NET GET STRING() with object 1001 or 1002 exists, but we don't always get this line, is this the code or the server?
Many Thanks
http://feedit.me - Live feed platform, useful for events and shows!