public override void SerializeItem(Item item) { base.SerializeItem(item); var skill = item as Skill; Cooldown = skill.Cooldown; StaminaCost = skill.StaminaCost; ManaCost = skill.ManaCost; DurabilityCost = skill.DurabilityCost; DurabilityCostPercent = skill.DurabilityCostPercent; HealthCost = skill.HealthCost; VFXOnStart = skill.VFXOnStart; StopStartVFXOnEnd = skill.StopVFX; RequiredPlayerType = skill.RequiredPType; if (skill.StartVFX) { StartVFX = SL_PlayVFX.GetVFXSystemEnum(skill.StartVFX); } if (skill.RequiredItems != null) { var list = new List <SkillItemReq>(); foreach (Skill.ItemRequired itemReq in skill.RequiredItems) { if (itemReq.Item != null) { list.Add(new SkillItemReq { ItemID = itemReq.Item.ItemID, Consume = itemReq.Consume, Quantity = itemReq.Quantity }); } } RequiredItems = list.ToArray(); } }
public virtual void SerializeStatus(StatusEffect status) { var preset = status.GetComponent <EffectPreset>(); this.NewStatusID = preset?.PresetID ?? -1; this.TargetStatusIdentifier = status.IdentifierName; this.StatusIdentifier = status.IdentifierName; this.IgnoreBuildupIfApplied = status.IgnoreBuildUpIfApplied; this.BuildupRecoverySpeed = status.BuildUpRecoverSpeed; this.DisplayedInHUD = status.DisplayInHud; this.IsHidden = status.IsHidden; this.Lifespan = status.StatusData.LifeSpan; this.RefreshRate = status.RefreshRate; this.AmplifiedStatusIdentifier = status.AmplifiedStatus?.IdentifierName ?? ""; this.PlayFXOnActivation = status.PlayFXOnActivation; this.ComplicationStatusIdentifier = status.ComplicationStatus?.IdentifierName; this.FXOffset = status.FxOffset; this.IgnoreBarrier = status.IgnoreBarrier; this.IsMalusEffect = status.IsMalusEffect; this.NormalizeDamageDisplay = status.NormalizeDamageDisplay; this.PlaySpecialFXOnStop = status.PlaySpecialFXOnStop; this.RemoveRequiredStatus = status.RemoveRequiredStatus; this.RequiredStatusIdentifier = status.RequiredStatus?.IdentifierName; this.SpecialSFX = status.SpecialSFX; this.VFXInstantiationType = status.FxInstantiation; this.ActionOnHit = status.ActionOnHit; this.Priority = (int)At.GetField(status, "m_priority"); this.DelayedDestroyTime = status.DelayedDestroyTime; this.Purgeable = status.Purgeable; CustomStatusEffects.GetStatusLocalization(status, out Name, out Description); var tags = At.GetField(status, "m_tagSource") as TagListSelectorComponent; if (tags) { Tags = tags.Tags.Select(it => it.TagName).ToArray(); } var vfx = status.FXPrefab?.GetComponent <VFXSystem>(); if (vfx) { VFXPrefab = SL_PlayVFX.GetVFXSystemEnum(vfx); } // PARSE EFFECT FAMILY FamilyMode = status.FamilyMode; if (status.EffectFamily != null) { if (FamilyMode == StatusEffect.FamilyModes.Bind) { BindFamily = SL_StatusEffectFamily.ParseEffectFamily(status.EffectFamily); } else { ReferenceFamilyUID = status.EffectFamily.UID; } } // For existing StatusEffects, the StatusData contains the real values, so we need to SetValue to each Effect. var statusData = status.StatusData.EffectsData; var components = status.GetComponentsInChildren <Effect>(); for (int i = 0; i < components.Length; i++) { var comp = components[i]; if (comp && comp.Signature.Length > 0) { comp.SetValue(statusData[i].Data); } } var effects = new List <SL_EffectTransform>(); Transform signature; if (status.transform.childCount > 0) { signature = status.transform.GetChild(0); if (signature.transform.childCount > 0) { foreach (Transform child in signature.transform) { var effectsChild = SL_EffectTransform.ParseTransform(child); if (effectsChild.HasContent) { effects.Add(effectsChild); } } } } Effects = effects.ToArray(); }