Files
mmo/systems/loot_system.gd
Marek Le 2d4002bd3f refactor
2026-05-09 23:37:26 +02:00

28 lines
946 B
GDScript

extends Node
const LOOT_SCENE: PackedScene = preload("res://scenes/entities/loot/loot_drop.tscn")
func _loot_root() -> Node3D:
var n: Node = get_node_or_null("/root/World/EntityRoot/Loot")
if n == null:
n = get_node_or_null("/root/Dungeon/EntityRoot/Loot")
return n
func drop_loot_for(entity: Node, pos: Vector3) -> void:
if not (multiplayer.is_server() or multiplayer.multiplayer_peer == null):
return
var root := _loot_root()
if root == null:
return
var amount: int = 1
var item_id: StringName = &"essence"
if entity.is_in_group("boss"):
amount = 5 + randi() % 5
var loot: Area3D = LOOT_SCENE.instantiate()
loot.item_id = item_id
loot.amount = amount
loot.name = "Loot_%d" % (Time.get_ticks_msec() + randi() % 1000)
root.add_child(loot, true)
loot.global_position = pos + Vector3(randf_range(-0.5, 0.5), 0.4, randf_range(-0.5, 0.5))
EventBus.loot_dropped.emit([item_id], loot.global_position)