# socket_glow_fx_system.gd —— Metin2 40250 装备多孔镶嵌宝石发光流光粒子视觉系统 1:1 # 对照 40250 客户端 ItemData.h, PythonItem.cpp, InstanceBaseEffect.cpp class_name SocketGlowFxSystem extends RefCounted signal glow_profile_updated(item_vnum: int, intensity: float, color: Color) # +4 经典灵石发光光谱 (色调与波长) const STONE_COLORS: Dictionary = { 28430: {"name": "战士灵石+4", "color": Color(1.0, 0.2, 0.15), "glow": 1.2}, # 炽热炽红 28431: {"name": "忍者灵石+4", "color": Color(0.2, 1.0, 0.35), "glow": 1.2}, # 剧毒翡翠 28432: {"name": "修罗灵石+4", "color": Color(0.75, 0.15, 1.0), "glow": 1.3}, # 幽冥暗紫 28433: {"name": "萨满灵石+4", "color": Color(1.0, 0.75, 0.1), "glow": 1.2}, # 太阳金橙 28435: {"name": "怪物灵石+4", "color": Color(1.0, 0.05, 0.05), "glow": 1.4}, # 嗜血深红 28436: {"name": "施法灵石+4", "color": Color(1.0, 0.95, 0.2), "glow": 1.5}, # 耀金雷光 28438: {"name": "守护灵石+4", "color": Color(0.2, 0.65, 1.0), "glow": 1.1}, # 霜华幽蓝 28440: {"name": "生命灵石+4", "color": Color(0.1, 0.95, 0.65), "glow": 1.1} # 生命碧绿 } # +7/+8/+9 装备基础强化光效配置 const REFINE_GLOW_TIERS: Dictionary = { 7: {"intensity": 0.6, "particles": 12, "pulse": 1.0, "swirl": false, "trail": false}, 8: {"intensity": 1.2, "particles": 28, "pulse": 1.6, "swirl": false, "trail": true}, 9: {"intensity": 2.2, "particles": 55, "pulse": 2.2, "swirl": true, "trail": true} } # 计算装备完整的流光与发光特效数据 func calculate_equipment_glow(item: Dictionary) -> Dictionary: if item.is_empty(): return _empty_glow() var vnum: int = int(item.get("vnum", 0)) var refine: int = int(item.get("refine_level", 0)) var sockets: Array = item.get("sockets", []) # 1. 解析宝石镶嵌颜色 var stone_colors: Array = [] var stone_glow_boost: float = 0.0 for s in sockets: if s != null and STONE_COLORS.has(int(s)): var cfg = STONE_COLORS[int(s)] stone_colors.append(cfg["color"]) stone_glow_boost += float(cfg["glow"]) * 0.35 # 2. 混合计算主光色与副光色 var primary_color := Color(1.0, 0.95, 0.85) # 默认神圣白金色 var secondary_color := primary_color if not stone_colors.is_empty(): var total_r := 0.0 var total_g := 0.0 var total_b := 0.0 for c in stone_colors: total_r += c.r total_g += c.g total_b += c.b var n = float(stone_colors.size()) primary_color = Color(total_r / n, total_g / n, total_b / n) secondary_color = stone_colors[0] # 首颗灵石为主导特征色 # 3. 强化等级基础光效 var base_intensity: float = 0.0 var particle_rate: int = 0 var pulse_speed: float = 0.8 var has_trail: bool = false var swirl_enabled: bool = false if REFINE_GLOW_TIERS.has(refine): var r_cfg = REFINE_GLOW_TIERS[refine] base_intensity = r_cfg["intensity"] particle_rate = r_cfg["particles"] pulse_speed = r_cfg["pulse"] has_trail = r_cfg["trail"] swirl_enabled = r_cfg["swirl"] elif not stone_colors.is_empty(): # 未到 +7 但镶嵌了灵石,产生轻微宝石微光 base_intensity = 0.3 particle_rate = 6 var final_intensity: float = base_intensity + stone_glow_boost var is_glowing: bool = final_intensity > 0.05 var result: Dictionary = { "is_glowing": is_glowing, "refine_level": refine, "stone_count": stone_colors.size(), "glow_intensity": final_intensity, "primary_color": primary_color, "secondary_color": secondary_color, "pulse_speed": pulse_speed, "particle_rate": particle_rate, "has_trail": has_trail, "swirl_enabled": swirl_enabled } glow_profile_updated.emit(vnum, final_intensity, primary_color) return result # 将发光材质参数直接应用至 Godot 3D 材质 func apply_to_material(mat: StandardMaterial3D, glow_data: Dictionary) -> void: if not mat or not glow_data.get("is_glowing", false): if mat: mat.emission_enabled = false return mat.emission_enabled = true mat.emission = glow_data["primary_color"] mat.emission_energy_multiplier = glow_data["glow_intensity"] func _empty_glow() -> Dictionary: return { "is_glowing": false, "refine_level": 0, "stone_count": 0, "glow_intensity": 0.0, "primary_color": Color.WHITE, "secondary_color": Color.WHITE, "pulse_speed": 1.0, "particle_rate": 0, "has_trail": false, "swirl_enabled": false }