M2.6: server rules (PvP, raiding, locks and friends, death penalty, difficulty, wolf grace), chat, admin commands, server console
This commit is contained in:
@@ -287,6 +287,38 @@ func melee(player: Node3D, target: Node3D) -> bool:
|
||||
notify.emit("Killed a %s" % target.display_name().to_lower())
|
||||
return true
|
||||
|
||||
## A melee blow at another player (online, with PvP on). Online only.
|
||||
func hit_player(player: Node3D, peer: int) -> bool:
|
||||
if _online():
|
||||
if not melee_stats(player).armed:
|
||||
notify.emit(NEED_WEAPON)
|
||||
return false
|
||||
return _ask("hit_player", [peer])
|
||||
if not Net.is_server() or not PlayerNet.proxies.has(peer) or player.get("peer") == peer:
|
||||
return false
|
||||
var target: Node3D = PlayerNet.proxies[peer]
|
||||
if not preload("res://scripts/net/rules.gd").pvp():
|
||||
notify.emit("PvP is off on this server")
|
||||
return false
|
||||
if target.survival.dead:
|
||||
return false
|
||||
var m := melee_stats(player)
|
||||
if not m.armed:
|
||||
notify.emit(NEED_WEAPON)
|
||||
return false
|
||||
# (Positions are where the server last heard you both were: a little slack.)
|
||||
if player.global_position.distance_to(target.global_position) > m.reach + 2.5:
|
||||
return false
|
||||
if Time.get_ticks_msec() < int(player.melee_ready_at):
|
||||
return false
|
||||
if not player.survival.use_stamina(m.stamina):
|
||||
notify.emit("Too tired")
|
||||
return false
|
||||
player.melee_ready_at = Time.get_ticks_msec() + int(m.cooldown * 1000.0 * 0.8)
|
||||
target.survival.damage(m.damage, player.global_position, String(player.display))
|
||||
notify.emit("Hit %s" % String(target.display))
|
||||
return true
|
||||
|
||||
## An arrow or thrown spear reaching an animal (projectile.gd).
|
||||
func projectile_hit(shooter: Node3D, target: Node3D, damage: float, at: Vector3, embed_id: String) -> void:
|
||||
if not is_instance_valid(target) or not target.is_in_group("creature"):
|
||||
|
||||
Reference in New Issue
Block a user