Server.gd 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. extends Node
  2. var net = NetworkedMultiplayerENet.new()
  3. var api = MultiplayerAPI.new()
  4. var port = 8081
  5. var maxplayer = 4
  6. export(NodePath) var database
  7. func _ready():
  8. print('listening to port: ' + str(port))
  9. net.create_server(port, maxplayer)
  10. self.set_custom_multiplayer(api)
  11. custom_multiplayer.set_root_node(self)
  12. custom_multiplayer.set_network_peer(net)
  13. net.connect("peer_disconnected",self,"disc")
  14. net.connect("peer_connected",self,"conn")
  15. pass # Replace with function body.
  16. func _process(_delta):
  17. custom_multiplayer.poll()
  18. var playerphsyics = preload('res://playerphysics.tscn')
  19. func conn(id):
  20. print('client connected, id: ' + str(id))
  21. yield(get_tree(),"physics_frame")
  22. rpc_id(0,'ping')
  23. print('clients connected: ' + str(custom_multiplayer.get_network_connected_peers().size()))
  24. var instance = playerphsyics.instance()
  25. instance.name = str(id)
  26. $players.add_child(instance)
  27. remote func connected_peer():
  28. print('syncing clients')
  29. rpc_id(0,'_On_Peer_Connected')
  30. func makedummmy():
  31. var node = api.get_rpc_sender_id()
  32. $players.get_node(str(node)).add_to_group('dummy')
  33. remote func send_clients():
  34. rpc_id(api.get_rpc_sender_id(), 'client_data', custom_multiplayer.get_network_connected_peers())
  35. # extra
  36. func disc(arg):
  37. print('client disconnected, id: ' + str(arg))
  38. rpc_id(0,'_On_Player_Disconnect',arg)
  39. remote func latency(arg):
  40. rpc_id(api.get_rpc_sender_id(), 'returnping', arg)
  41. remote func input_handler(arg):
  42. var id = api.get_rpc_sender_id()
  43. if $players.has_node(str(id)):
  44. $players.get_node(str(id)).input = arg
  45. var tick = 0
  46. export var tickrate = 3
  47. func _physics_process(delta):
  48. var position_datachunk = {}
  49. for i in $players.get_children():
  50. position_datachunk[i.name] = i.global_position
  51. rpc_unreliable_id(0, 'player_position', position_datachunk)
  52. var animation_datachunk = {}
  53. for i in $players.get_children():
  54. animation_datachunk[i.name] = i.animation
  55. rpc_unreliable_id(0, 'player_animation', animation_datachunk)
  56. # tick += 1
  57. # if fmod(tick,tickrate) == 0:
  58. # var enemies_datachunk = PoolByteArray()
  59. # for i in $enemies.dict.arraypos.size():
  60. # if $enemies.dict.arrayvida[i] > 0:
  61. # var pos = $enemies.dict.arraypos[i]
  62. # enemies_datachunk.append_array( return_int16(pos.x) )
  63. # enemies_datachunk.append_array( return_int16(pos.y) )
  64. # var bytetest : PoolByteArray
  65. # bytetest.append($enemies.dict.type[i] )
  66. # enemies_datachunk.append_array( bytetest )
  67. # rpc_unreliable_id(0, 'enemies_position_2', enemies_datachunk)
  68. func return_int16(number):
  69. var int16 = number + 32768
  70. var bytetest : PoolByteArray
  71. var byte1:int = int(int16/255)
  72. var byte2:int = int(fmod(int16,255))
  73. bytetest.append(byte1)
  74. bytetest.append(byte2)
  75. return bytetest
  76. func player_anim(attack,arg):
  77. rpc_id( 0,'attack_anim', attack, int(arg) )
  78. func hp_update(vida, id):
  79. rpc_id( 0,'atr_update', {id:{'hp':vida}})
  80. func kill_update(kill, xp, lv, nxt, id):
  81. rpc_id( 0,'atr_update', {id:{'k':kill, 'xp':xp, 'lv':lv, 'nxt':nxt}})
  82. func level_up(lv, maxhp, gain, dmgup, id):
  83. rpc_id( 0,'level_up', lv, id)
  84. $players.get_node(str(id)).regenhp(gain)
  85. $players.get_node(str(id)).dmg += dmgup
  86. rpc_id( 0,'atr_update', {id:{'maxhp':maxhp}})
  87. # gen_power_queue(str(id))
  88. #powerup code
  89. var queue_powermenu_request = {
  90. # 'id' : {'power':['a','b','c'],'client':0}
  91. }
  92. func gen_power_queue(client):
  93. var time = str(OS.get_system_time_msecs())+str(client)
  94. queue_powermenu_request[time] = {}
  95. queue_powermenu_request[time]['power'] = gen_power()
  96. queue_powermenu_request[time]['client'] = client
  97. rpc_id( int(client), 'powerpick', queue_powermenu_request[time]['power'] , time )
  98. _pauser_gen(false)
  99. remote func optionpick(id, choice):
  100. var client = api.get_rpc_sender_id()
  101. if queue_powermenu_request.has(id):
  102. var power = queue_powermenu_request[id]['power'][choice]
  103. print(power)
  104. if $players.has_node(str(client)):
  105. $players.get_node(str(client)).add_power(power)
  106. queue_powermenu_request.erase(id)
  107. print(queue_powermenu_request)
  108. _pauser_gen(true)
  109. func _pauser_gen(arg):
  110. set_physics_process(arg)
  111. $enemies.set_physics_process(arg)
  112. for i in $players.get_children():
  113. i.set_physics_process(arg)
  114. func gen_power():
  115. return ['a','b','c']