完善客户端功能并同步差距文档
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
# part_hiding.gd —— §4.1 修改 4:变身 / 时装的部位遮挡规则(InstanceBase.cpp 1:1)。
|
||||
#
|
||||
# 纯函数,无状态。EquipModel.refresh() 在解出身体 shape 后调用,决定武器 / 盾 / 头发
|
||||
# 是否该隐藏、身体 shape 是否被变身强制归零。远端角色换装走同一条路(EquipModel 是
|
||||
# 「渲染别的玩家用的同一条路」)。
|
||||
#
|
||||
# 参考 REF/UserInterface/InstanceBase*.cpp:
|
||||
# IsPoly() -> SetShape(0);SetWeapon / SetParts 提前 return
|
||||
# -> 身体 shape 归 0、无武器、无头发 / 挂件
|
||||
# __IsShapeAnimalWear() -> GetShape() ∈ {100,101,102,103};SetWeapon(:2747) 与
|
||||
# SetParts 返回 false -> 穿动物 / 怪物时装时武器 + 头发被抑制
|
||||
# IsWearingDress() -> m_eShape == 201(婚纱);__IsChangableWeapon(iWeaponID)
|
||||
# (:901) 除 c_iBouquets 外一律 false -> 非捧花时武器隐藏
|
||||
# (头发不受婚纱影响)
|
||||
# __ArmorVnumToShape() -> shape = item_proto values[3](vnum ∉ {0,1} 且
|
||||
# USE_ARMOR_SPECULAR),否则 shape = vnum
|
||||
extends RefCounted
|
||||
|
||||
const POLY_SHAPE := 0
|
||||
const ANIMAL_WEAR_SHAPES := [100, 101, 102, 103] # __IsShapeAnimalWear
|
||||
const WEDDING_DRESS_SHAPE := 201 # IsWearingDress
|
||||
const BOUQUET_VNUMS := [50201, 50202, 50203, 50204] # c_iBouquets(原表 0 结尾)
|
||||
|
||||
static func is_animal_wear(shape: int) -> bool:
|
||||
return shape in ANIMAL_WEAR_SHAPES
|
||||
|
||||
static func is_wearing_dress(shape: int) -> bool:
|
||||
return shape == WEDDING_DRESS_SHAPE
|
||||
|
||||
static func is_bouquet(weapon_vnum: int) -> bool:
|
||||
return weapon_vnum in BOUQUET_VNUMS
|
||||
|
||||
# __IsChangableWeapon:婚纱状态只有捧花可换,其它 shape 一律可换。
|
||||
static func is_changable_weapon(weapon_vnum: int, shape: int) -> bool:
|
||||
if is_wearing_dress(shape):
|
||||
return is_bouquet(weapon_vnum)
|
||||
return true
|
||||
|
||||
# 武器(含盾,走同一挂点规则)是否该隐藏:变身 / 动物时装 / 婚纱且非捧花。
|
||||
static func weapon_hidden(shape: int, is_poly: bool, weapon_vnum: int = 0) -> bool:
|
||||
if is_poly:
|
||||
return true
|
||||
if is_animal_wear(shape):
|
||||
return true
|
||||
if is_wearing_dress(shape) and not is_bouquet(weapon_vnum):
|
||||
return true
|
||||
return false
|
||||
|
||||
# 头发 / 挂件是否该隐藏:变身 / 动物时装(婚纱不影响头发)。
|
||||
static func hair_hidden(shape: int, is_poly: bool) -> bool:
|
||||
return is_poly or is_animal_wear(shape)
|
||||
|
||||
# 身体 shape:变身强制 0(SetShape(0)),否则原样(动物时装 100-103 保留,用来出时装体)。
|
||||
static func body_shape(shape: int, is_poly: bool) -> int:
|
||||
return POLY_SHAPE if is_poly else shape
|
||||
|
||||
# 有效武器 vnum:被隐藏则 0(SetWeapon 提前 return 的等效结果)。
|
||||
static func effective_weapon(weapon_vnum: int, shape: int, is_poly: bool) -> int:
|
||||
return 0 if weapon_hidden(shape, is_poly, weapon_vnum) else weapon_vnum
|
||||
Reference in New Issue
Block a user