The pirate treasure: each player's own mound at their X, dug with a pickaxe; the drowned crew rise at night or when the chest comes up; the ship's compass, a spyglass, a cutlass and pirate gold; online too
This commit is contained in:
@@ -99,7 +99,7 @@ func _server_tick(w: Node3D, delta: float) -> void:
|
||||
|
||||
const PER_PACKET := 40
|
||||
const ENTRY := 23
|
||||
const KIND_IDS := ["rabbit", "deer", "boar", "wolf", "alpha", "bear", "crow", "fox", "guard", "old_stag", "spirit_wolf"]
|
||||
const KIND_IDS := ["rabbit", "deer", "boar", "wolf", "alpha", "bear", "crow", "fox", "guard", "old_stag", "spirit_wolf", "drowned"]
|
||||
const STATE_IDS := ["idle", "wander", "flee", "charge", "dead", "rest", "alert", "stalk", "lunge", "retreat", "home", "defend", "bash",
|
||||
"warn", "raid", "eat", "fly", "fly_off", "peck", "sneak", "carry", "circle", "telegraph", "stunned", "summon", "stomp"]
|
||||
|
||||
@@ -198,7 +198,7 @@ func _s2c_life(packed: PackedByteArray, fl: Array) -> void:
|
||||
var c: Node3D = got if is_instance_valid(got) else null
|
||||
if c == null:
|
||||
# (Kinds with their own look: the bear rears up, a crow flaps.)
|
||||
var script: Script = {"bear": BearScript, "crow": CrowScript, "guard": GuardScript, "old_stag": StagScript}.get(kind, Creature)
|
||||
var script: Script = {"bear": BearScript, "crow": CrowScript, "guard": GuardScript, "drowned": GuardScript, "old_stag": StagScript}.get(kind, Creature)
|
||||
c = script.new()
|
||||
c.puppet = true
|
||||
c.setup(kind, world, e[2], cid)
|
||||
|
||||
@@ -354,7 +354,11 @@ func _run(p: Node3D, what: String, a: Array) -> void:
|
||||
"hit":
|
||||
var n: Node3D = w.props.resource_nodes.get(_s(a, 0))
|
||||
var at: Vector3 = _v(a, 1)
|
||||
if n == null and w.tunnel != null:
|
||||
if n == null and _s(a, 0) == "treasure:" + String(p.player_id) and w.treasure != null:
|
||||
var m: Node3D = w.treasure.mound_for(String(p.player_id)) # (your own X: treasure.gd)
|
||||
if m != null and at.is_finite() and at.distance_to(m.global_position) < 2.5:
|
||||
Actions.harvest_hit(p, m, at)
|
||||
elif n == null and w.tunnel != null:
|
||||
var f: Node3D = w.tunnel.face_by_uid(_s(a, 0)) # (the cliff tunnel's seam or face)
|
||||
if f != null and at.is_finite():
|
||||
Actions.harvest_hit(p, f, at) # (the tunnel tells everyone: tunnel.gd)
|
||||
@@ -529,7 +533,7 @@ func _run(p: Node3D, what: String, a: Array) -> void:
|
||||
for m in w.get_tree().get_nodes_in_group("processor"):
|
||||
m.step(float(a[0]) if a.size() > 0 and (a[0] is float or a[0] is int) else 60.0)
|
||||
"debug_spawn":
|
||||
if cheats and Creature.KINDS.has(_s(a, 0)) and not (_s(a, 0) in ["wolf", "alpha", "bear", "crow", "fox", "guard", "old_stag", "spirit_wolf"]) and _v(a, 1).is_finite():
|
||||
if cheats and Creature.KINDS.has(_s(a, 0)) and not (_s(a, 0) in ["wolf", "alpha", "bear", "crow", "fox", "guard", "old_stag", "spirit_wolf", "drowned"]) and _v(a, 1).is_finite():
|
||||
w.creatures.spawn(_s(a, 0), _v(a, 1))
|
||||
"debug_boss":
|
||||
# Tests: ["hold", secs] stands the Old Stag still (stunned);
|
||||
|
||||
@@ -377,6 +377,18 @@ func tunnel_state(d: Dictionary) -> void:
|
||||
if Lands.hub:
|
||||
Lands.push_tunnel(int(d.get("dug", 0)))
|
||||
|
||||
## Whose treasure's been dug (and how far): everyone here sees their own
|
||||
## mound go down, or go.
|
||||
func treasure_state(d: Dictionary) -> void:
|
||||
_all("_s2c_treasure", [d])
|
||||
mark_changed()
|
||||
|
||||
@rpc("authority", "call_remote", "reliable")
|
||||
func _s2c_treasure(d: Dictionary) -> void:
|
||||
if not is_client() or world.treasure == null:
|
||||
return
|
||||
world.treasure.load_data(d)
|
||||
|
||||
## Who's had their share of the wreck's sea chest changed: everyone here
|
||||
## sees whether it's empty for them.
|
||||
func wreck_state(d: Dictionary) -> void:
|
||||
|
||||
Reference in New Issue
Block a user