fix: a lot of networking bugs
This commit is contained in:
@@ -137,7 +137,7 @@ func _on_hit(result: Dictionary) -> void:
|
||||
if not result.collider.has_method("take_damage"):
|
||||
if result.collider is StaticBody3D or result.collider is CSGShape3D:
|
||||
ImpactSpawner.spawn(get_tree(), "crater", result.position, result.normal, explosion_radius * 1.5)
|
||||
elif not owner_player or owner_player.is_multiplayer_authority():
|
||||
elif owner_player and owner_player.multiplayer.is_server():
|
||||
result.collider.take_damage(damage, result.position, owner_player)
|
||||
_explode(result.position)
|
||||
destroy()
|
||||
@@ -200,11 +200,11 @@ func _explode(pos: Vector3) -> void:
|
||||
if col == owner_player and not can_self_damage:
|
||||
# Skip self damage, but we still applied the knockback!
|
||||
pass
|
||||
elif not owner_player or owner_player.is_multiplayer_authority():
|
||||
elif owner_player and owner_player.multiplayer.is_server():
|
||||
col.take_damage(final_damage, target_pos, owner_player, dir * final_knockback)
|
||||
|
||||
# Broadcast Visual Explosion Effect to other peers
|
||||
if owner_player and owner_player.has_method("server_play_explosion") and owner_player.multiplayer.has_multiplayer_peer() and owner_player.multiplayer.multiplayer_peer is not OfflineMultiplayerPeer:
|
||||
if owner_player and owner_player.is_multiplayer_authority() and owner_player.has_method("server_play_explosion") and owner_player.multiplayer.has_multiplayer_peer() and owner_player.multiplayer.multiplayer_peer is not OfflineMultiplayerPeer:
|
||||
owner_player.server_play_explosion.rpc_id(1, pos, explosion_radius)
|
||||
|
||||
# Local Visual Effect
|
||||
|
||||
@@ -102,12 +102,19 @@ func _physics_process(delta: float) -> void:
|
||||
|
||||
if ignited and is_instance_valid(weapon_source):
|
||||
var target_dir: Vector3 = initial_aim_dir
|
||||
var is_painting = weapon_source.get("is_targeting")
|
||||
var is_painting = false
|
||||
var target: Vector3 = Vector3.ZERO
|
||||
|
||||
if is_painting != null and is_painting:
|
||||
var target: Vector3 = weapon_source.get("homing_target_pos")
|
||||
if target != null and target != Vector3.ZERO:
|
||||
target_dir = (target - global_position).normalized()
|
||||
if weapon_source.get("player") and weapon_source.player:
|
||||
is_painting = weapon_source.player.synced_is_targeting
|
||||
target = weapon_source.player.synced_homing_target_pos
|
||||
else:
|
||||
is_painting = weapon_source.get("is_targeting")
|
||||
if is_painting != null and is_painting:
|
||||
target = weapon_source.get("homing_target_pos")
|
||||
|
||||
if is_painting and target != Vector3.ZERO:
|
||||
target_dir = (target - global_position).normalized()
|
||||
|
||||
if target_dir != Vector3.ZERO:
|
||||
var current_dir = velocity.normalized()
|
||||
|
||||
@@ -58,7 +58,7 @@ func _on_hit(result: Dictionary) -> void:
|
||||
final_damage = lerpf(damage, min_damage, falloff_factor)
|
||||
|
||||
if result.collider.has_method("take_damage"):
|
||||
if not owner_player or owner_player.is_multiplayer_authority():
|
||||
if owner_player and owner_player.multiplayer.is_server():
|
||||
result.collider.take_damage(final_damage, result.position, owner_player)
|
||||
elif result.collider is StaticBody3D or result.collider is CSGShape3D:
|
||||
var size = 0.4 if impact_type == "plasma" else 0.15
|
||||
|
||||
@@ -90,10 +90,19 @@ func _process(delta: float) -> void:
|
||||
homing_target_pos = target
|
||||
(targeting_laser.mesh as CylinderMesh).height = 300.0
|
||||
targeting_laser.position.z = -150.0
|
||||
|
||||
if player and player.is_multiplayer_authority():
|
||||
player.synced_is_targeting = true
|
||||
player.synced_homing_target_pos = homing_target_pos
|
||||
else:
|
||||
if player and player.is_multiplayer_authority():
|
||||
player.synced_is_targeting = false
|
||||
|
||||
func unequip() -> void:
|
||||
is_targeting = false
|
||||
targeting_laser.visible = false
|
||||
if player and player.is_multiplayer_authority():
|
||||
player.synced_is_targeting = false
|
||||
|
||||
# Override fire to shoot 8 rockets at once
|
||||
func _fire() -> void:
|
||||
|
||||
Reference in New Issue
Block a user