28 lines
946 B
GDScript
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)
|