M2.3: the shared world (trees, pickups, pieces, chests, fires, doors, graves, clock on the server)
This commit is contained in:
@@ -144,8 +144,12 @@ func open(chest: Node) -> void:
|
||||
func close() -> void:
|
||||
if _cursor != null:
|
||||
var left: int = player.inventory.add(_cursor.id, _cursor.count)
|
||||
if left > 0 and container != null:
|
||||
left = container.inventory.add(_cursor.id, left)
|
||||
if left > 0 and container != null and is_instance_valid(container):
|
||||
if WorldNet.is_client():
|
||||
WorldNet.chest_put(container, {"id": _cursor.id, "count": left})
|
||||
left = 0
|
||||
else:
|
||||
left = container.inventory.add(_cursor.id, left)
|
||||
_cursor = null
|
||||
if container != null and is_instance_valid(container) and container.inventory.changed.is_connected(_refresh):
|
||||
container.inventory.changed.disconnect(_refresh)
|
||||
@@ -201,10 +205,28 @@ func _on_chest_slot(i: int, right: bool, shift: bool) -> void:
|
||||
return
|
||||
if shift:
|
||||
Actions.transfer(player, container.inventory, i, player.inventory, container)
|
||||
elif WorldNet.is_client():
|
||||
# A shared chest: the server does the click (someone else may be in
|
||||
# it too) and hands back what we're holding.
|
||||
if WorldNet.chest_busy:
|
||||
return
|
||||
var held = _cursor
|
||||
_cursor = null
|
||||
WorldNet.chest_click(container, i, held, right, _on_chest_cursor)
|
||||
else:
|
||||
_cursor = container.inventory.click(i, _cursor, right)
|
||||
_refresh()
|
||||
|
||||
func _on_chest_cursor(stack) -> void:
|
||||
if visible:
|
||||
_cursor = stack
|
||||
_refresh()
|
||||
elif stack != null:
|
||||
# Closed in the meantime: into our bag (or the ground).
|
||||
var left: int = player.inventory.add(stack.id, stack.count)
|
||||
if left > 0:
|
||||
player.get_parent().drop_item(stack.id, left, Transform3D(Basis(), player.global_position + Vector3(0, 0.1, 0)))
|
||||
|
||||
func _refresh() -> void:
|
||||
if player == null:
|
||||
return
|
||||
|
||||
Reference in New Issue
Block a user