public static void OnUpdate() { var target = GameObjects.EnemyHeroes.FirstOrDefault(x => x.IsValidTarget(SpellConfig.Q.Range)); if (target == null || Global.Orbwalker.IsWindingUp || Global.Player.IsDead) { return; } if (SpellConfig.Q.Ready && target.Health < Global.Player.GetSpellDamage(target, SpellSlot.Q) && MenuConfig.Killsteal["Q"].Enabled) { SpellConfig.CastQ(target); } else if (SpellConfig.E.Ready && target.Health < Global.Player.GetSpellDamage(target, SpellSlot.E) && MenuConfig.Killsteal["E"].Enabled) { var nearest = SoldierManager.GetSoldierNearestTo(target.ServerPosition); if (nearest != Vector3.Zero) { SpellConfig.E.Cast(nearest); } } }
public void Init() { var menuConfig = new MenuConfig(); var spellConfig = new SpellConfig(); var dmg = new Dmg(spellConfig); var combo = new Combo(spellConfig, menuConfig, dmg); var harass = new Harass(spellConfig, menuConfig); var laneclear = new LaneClear(spellConfig, menuConfig); var jungleclear = new JungleClear(menuConfig, spellConfig); var manager = new Manager(combo, harass, laneclear, jungleclear); var killsteal = new Killsteal(menuConfig, spellConfig); var drawManager = new DrawManager(menuConfig, dmg, spellConfig); var gapcloser = new AntiGapcloser(spellConfig); Game.OnUpdate += manager.OnUpdate; Game.OnUpdate += killsteal.OnUpdate; Global.Orbwalker.PostAttack += manager.OnPostAttack; Render.OnRender += drawManager.OnRender; Render.OnPresent += drawManager.OnPresent; Gapcloser.OnGapcloser += gapcloser.OnGapcloser; }
public static void OnUpdate() { var mob = GameObjects.Jungle.FirstOrDefault(x => x.IsValidTarget(SpellConfig.E.Range) && x.IsEnemy); if (mob == null) { return; } var distance = mob.Distance(Global.Player); if (SpellConfig.W.Ready && distance < SpellConfig.W.Range) { if (Extensions.Ferocity() == 4 && (Global.Player.HealthPercent() >= 35 || !MenuConfig.JungleClear["W"].Enabled)) { return; } SpellConfig.CastW(mob); } if (SpellConfig.E.Ready && Extensions.Ferocity() <= 3) { SpellConfig.CastE(mob); } }
/// <summary> /// Load the xml file! /// </summary> private void LoadXml() { // if the file doesn't exist create a blank one if (!File.Exists(filePathToConfig)) { XmlWriterSettings settings = new XmlWriterSettings(); settings.Indent = true; settings.NewLineOnAttributes = false; XmlWriter writer = XmlWriter.Create(filePathToConfig, settings); writer.Flush(); writer.Close(); } else { //Loads the xml! And its data if (loadAppConfig.LoadConfig <SpellConfig>(filePathToConfig)) { this.config = (SpellConfig)loadAppConfig.Settings; if (this.config.Spell != null) { foreach (var spell in this.config.Spell) { //Add each of the items, to be created list. spellsToCreate.Add(spell); } } } } }
public static void CheckSpellEffect(Spell spell, bool isLeft, LiveMonster target, Point mouse) { MemBaseSpell spl = new MemBaseSpell(spell); spl.CheckSpellEffect(isLeft, target, mouse); if (spell.Addon != 0 && (spl.SpellConfig.Cure > 0 || spl.SpellConfig.Damage > 0)) { BattleManager.Instance.FlowWordQueue.Add(new FlowWord(string.Format("{0}倍施法!", 1 + spell.Addon), mouse, 0, "Gold", 26, 0, 0, 2, 15), false); } SpellConfig spellConfig = spell.SpellConfig; if (spl.HintWord != "") { BattleManager.Instance.FlowWordQueue.Add(new FlowWord(spl.HintWord, mouse, 0, "Cyan", 26, 0, 0, 0, 15), false); } if (!string.IsNullOrEmpty(spellConfig.UnitEffect)) { if (BattleTargetManager.PlayEffectOnMonster(spellConfig.Target)) { BattleManager.Instance.EffectQueue.Add(new ActiveEffect(EffectBook.GetEffect(spellConfig.UnitEffect), target, false)); } if (BattleTargetManager.PlayEffectOnMouse(spellConfig.Target)) { BattleManager.Instance.EffectQueue.Add(new ActiveEffect(EffectBook.GetEffect(spellConfig.UnitEffect), mouse, false)); } } }
private void UpdateButton(Button btn, SpellConfig newSpell, int index = -1) { if (newSpell != null) { btn.image.sprite = newSpell.Icon; var ss = btn.spriteState; ss.highlightedSprite = newSpell.SelectedIcon; ss.selectedSprite = newSpell.SelectedIcon; ss.pressedSprite = newSpell.SelectedIcon; btn.spriteState = ss; if (index != -1) { btn.onClick.AddListener(delegate { SetSelectedSpell(index); }); } btn.gameObject.GetComponent <SpellContainer>().Spell = newSpell; } else { btn.image.sprite = null; var ss = btn.spriteState; ss.highlightedSprite = EmptySelectionSquare; ss.selectedSprite = EmptySelectionSquare; ss.pressedSprite = EmptySelectionSquare; btn.spriteState = ss; btn.gameObject.GetComponent <SpellContainer>().Spell = null; } }
public static void OnUpdate() { var target = Global.TargetSelector.GetTarget(SpellConfig.Q.Range + 400); if (target == null) { return; } var dist = target.Distance(Global.Player) - Global.Player.BoundingRadius - target.BoundingRadius; if (SpellConfig.Q.Ready && MenuConfig.Harass["Q"].Enabled && Global.Player.ManaPercent() > MenuConfig.Harass["Q"].Value && dist < SpellConfig.Q.Range + 200) { SpellConfig.CastQ(target); } if (SpellConfig.W.Ready && MenuConfig.Harass["W"].Enabled && Global.Player.ManaPercent() > MenuConfig.Harass["W"].Value) { SpellConfig.W.Cast(Global.Player.ServerPosition.Extend(target.ServerPosition, SpellConfig.W.Range)); } if (SpellConfig.E.Ready && MenuConfig.Harass["E"].Enabled && Global.Player.ManaPercent() > MenuConfig.Harass["E"].Value) { foreach (var soldier in SoldierManager.Soldiers) { var rect = new Geometry.Rectangle(Global.Player.ServerPosition.To2D(), soldier.ServerPosition.To2D(), SpellConfig.E.Width); var count = GameObjects.EnemyHeroes.Count(x => rect.IsInside(x.ServerPosition.To2D())); if (count >= 1) { SpellConfig.E.Cast(soldier.ServerPosition); } } } }
public static void OnPlayAnimation(Obj_AI_Base sender, Obj_AI_BasePlayAnimationEventArgs args) { if (sender == null || !sender.IsMe) { return; } switch (args.Animation) { case "Spell3": if (Extension.CurrentMode == Mode.Tornado) { SpellConfig.SetSkill(Mode.DashingTornado); } else { SpellConfig.SetSkill(Mode.Dashing); DelayAction.Queue(1000, () => { SpellConfig.SetSkill(Mode.Normal); }, new CancellationToken(false)); } break; } }
public static void BuffManagerOnOnAddBuff(Obj_AI_Base sender, Buff buff) { if (sender == null) { return; } if (sender.IsEnemy && (buff.Type == BuffType.Knockup || buff.Type == BuffType.Knockback)) { KnockUpHelper.Sender = sender; KnockUpHelper.KnockedUpTick = Game.TickCount; KnockUpHelper.BuffStart = (int)buff.StartTime; KnockUpHelper.BuffEnd = (int)buff.EndTime; } if (sender.IsMe) { switch (buff.Name) { case "YasuoQ3W": SpellConfig.SetSkill(Global.Player.IsDashing() ? Mode.DashingTornado : Mode.Tornado); break; } } }
public static Image GetSpellImage(int id, int width, int height) { SpellConfig spellConfig = ConfigData.GetSpellConfig(id); string fname = string.Format("Spell/{0}{1}x{2}", spellConfig.Icon, width, height); if (!ImageManager.HasImage(fname)) { Image image = PicLoader.Read("Spell", string.Format("{0}.JPG", spellConfig.Icon)); if (image == null) { NLog.Error(string.Format("GetWeaponImage {0} {1} not found", id, fname)); return(null); } #if DEBUG if (spellConfig.Remark.Contains("未完成")) { Graphics g = Graphics.FromImage(image); var icon = PicLoader.Read("System", "NotFinish.PNG"); g.DrawImage(icon, 0, 0, 180, 180); g.Save(); } #endif if (image.Width != width || image.Height != height) { image = image.GetThumbnailImage(width, height, null, new IntPtr(0)); } ImageManager.AddImage(fname, image); } return(ImageManager.GetImage(fname)); }
public Jinx() { var spellConfig = new SpellConfig(); spellConfig.Load(); var menuConfig = new MenuConfig(); menuConfig.Attach(); var combo = new Combo(spellConfig, menuConfig); var harass = new Harass(spellConfig, menuConfig); var laneclear = new LaneClear(menuConfig, spellConfig); var jungleclear = new JungleClear(menuConfig, spellConfig); var misc = new Misc(spellConfig, menuConfig); var gapcloser = new AntiGapcloser(spellConfig); var manager = new Manager(combo, harass, laneclear, jungleclear, spellConfig); var drawManager = new DrawManager(menuConfig, new Dmg(), spellConfig); Game.OnUpdate += manager.OnUpdate; Game.OnUpdate += misc.OnUpdate; Render.OnPresent += drawManager.OnPresent; Render.OnRender += drawManager.OnRender; Gapcloser.OnGapcloser += gapcloser.OnGapcloser; }
public Manager(Combo combo, Harass harass, LaneClear laneClear, JungleClear jungleClear, SpellConfig spellConfig) { this.combo = combo; this.harass = harass; this.laneClear = laneClear; this.jungleClear = jungleClear; this.spellConfig = spellConfig; }
public VirastarConfig() { CharConfiguration = new CharConfig(); WordConfiguration = new WordConfig(); WritingRuleConfiguration = new WritingRule(); IgnoreProcessConfiguration = new IgnoreProcessConfig(); SpellConfiguration = new SpellConfig(); }
private void SwapButtons(int idx1, int idx2, SpellConfig newSpell, SpellConfig spellToMove) { SpellBar.ChangeSpell(idx1, newSpell); UpdateButton(BoundButtons[idx1], newSpell); SpellBar.ChangeSpell(idx2, spellToMove); UpdateButton(BoundButtons[idx2], spellToMove); }
public static void OnRender() { if (Global.Player.IsDead) { return; } if (Global.Orbwalker.Mode != OrbwalkingMode.None && MenuConfig.Drawings["Debug"].Enabled) { var circle = new Geometry.Circle(Global.Player.GetDashInfo().EndPos, 200); Render.Circle(circle.Center.To3D(), circle.Radius, 100, Color.Yellow); Render.Circle(circle.Center.To3D(), circle.Radius / 2, 100, Color.Crimson); } if (SpellConfig.R.Ready && MenuConfig.Drawings["R"].Enabled) { Render.Circle(Global.Player.Position, SpellConfig.R.Range, (uint)MenuConfig.Drawings["Segments"].Value, Color.Cyan); } if (MenuConfig.Drawings["Range"].Enabled && MenuConfig.Combo["Dash"].Value == 0 && Global.Orbwalker.Mode != OrbwalkingMode.None) { Render.Circle(Game.CursorPos, MenuConfig.Combo["Range"].Value, (uint)MenuConfig.Drawings["Segments"].Value, Color.Yellow); } if (MenuConfig.Drawings["Debug"].Enabled) { if (SpellConfig.Q.Ready) { var t = GameObjects.EnemyHeroes.FirstOrDefault(x => x.IsValidTarget(2000)); if (t != null) { SpellConfig.Q3Rect(t)?.Draw(Color.Crimson); } } Render.WorldToScreen(Global.Player.Position, out var temp); Render.Text("Q Mode: " + Extension.CurrentMode + " | Range: " + SpellConfig.Q.Range, new Vector2(temp.X - 55, temp.Y + 40), RenderTextFlags.Center, Color.Cyan); } if (SpellConfig.E.Ready && MenuConfig.Drawings["Path"].Enabled) { if (MinionHelper.ExtendedMinion.IsZero || MinionHelper.ExtendedTarget.IsZero) { return; } Render.WorldToScreen(MinionHelper.ExtendedTarget, out var targetV2); Render.WorldToScreen(MinionHelper.ExtendedMinion, out var minionV2); Render.WorldToScreen(Global.Player.ServerPosition, out var playerV2); Render.Line(playerV2, minionV2, Color.DeepSkyBlue); Render.Line(minionV2, targetV2, Color.DeepPink); Render.Circle(MinionHelper.ExtendedMinion, 25, 300, Color.Crimson); Render.Circle(MinionHelper.ExtendedMinion, 50, 300, Color.Yellow); } }
public void RemoveSpell(SpellConfig spell) { var category = SpellCategories.First(c => c.Element == spell.Element); if (category.Spells.Contains(spell)) { category.Spells.Remove(spell); } }
public void AddSpell(SpellConfig spell) { var category = SpellCategories.First(c => c.Element == spell.Element); if (!category.Spells.Contains(spell)) { category.Spells.Add(spell); } }
public static void Init() { MenuConfig.Attach(); SpellConfig.Load(); Game.OnUpdate += Manager.OnUpdate; Global.Orbwalker.PostAttack += Manager.PostAttack; Render.OnRender += DrawManager.OnRender; Render.OnPresent += DrawManager.RenderDamage; }
private void CheckCursor() { string cursorname = "default"; magicRegion.Active = false; if (leftSelectCard != null) { if (leftSelectCard.CardType == CardTypes.Monster) { if (BattleLocationManager.IsPlaceCanSummon(leftSelectCard.CardId, mouseX, mouseY, true)) { cursorname = "summon"; magicRegion.Active = true; } else { var placeMon = BattleLocationManager.GetPlaceMonster(mouseX, mouseY); if (placeMon != null && placeMon.IsLeft && !placeMon.Avatar.MonsterConfig.IsBuilding) { if (MonsterBook.HasTag(leftSelectCard.CardId, "sidekicker") || MonsterBook.HasTag(placeMon.CardId, "sidekickee") || BattleManager.Instance.PlayerManager.LeftPlayer.SpikeManager.HasSpike("sidekickall")) { cursorname = "sidekick"; } } } } else if (leftSelectCard.CardType == CardTypes.Weapon) { LiveMonster lm = BattleLocationManager.GetPlaceMonster(mouseX, mouseY); if (lm != null && lm.CanAddWeapon() && lm.IsLeft) { cursorname = "equip"; } } else if (leftSelectCard.CardType == CardTypes.Spell) { if (mouseX > 0) { SpellConfig spellConfig = ConfigData.GetSpellConfig(leftSelectCard.CardId); if (BattleLocationManager.IsPlaceCanCast(mouseX, mouseY, spellConfig.Target)) { magicRegion.Active = true; cursorname = "cast"; } else { cursorname = "nocast"; } } } } myCursor.ChangeCursor(cursorname); }
private static void LoadMenu() { Config = MainMenu.AddMenu("Thresh", "thresh_menu"); SpellConfig = Config.AddSubMenu("Spell Settings", "SpellSettings"); SpellConfig.Add("autoQ", new CheckBox("Auto Q Dash Enemy", true)); SpellConfig.Add("dontQ2", new CheckBox("Don't Auto Q2", true)); SpellConfig.Add("dQ2if", new Slider("Don't Q2 if Enemies > allies", 1, 0, 5)); SpellConfig.Add("farmE", new CheckBox("Farm with E", true)); SpellConfig.AddLabel("Q BlackList :"); foreach (var hero in HeroManager.Enemies) { SpellConfig.Add("QList" + hero.NetworkId, new CheckBox("BlackList: " + hero.ChampionName, false)); } SpellConfig.Add("FlayPush", new KeyBind("Flay Push Key", false, KeyBind.BindTypes.HoldActive, 'T')); SpellConfig.Add("FlayPull", new KeyBind("Flay Pull Key", false, KeyBind.BindTypes.HoldActive, 'H')); FleeConfig = Config.AddSubMenu("Flee Settings", "FleeSettings"); FleeConfig.Add("flee", new KeyBind("Flee", false, KeyBind.BindTypes.HoldActive, 'Z')); FleeConfig.Add("autoEpush", new CheckBox("Auto E push", true)); PredictConfig = Config.AddSubMenu("Predict Settings", "PredictSettings"); PredictConfig.Add("PredictionMode", new ComboBox("Prediction Mode", 0, "Common", "OKTW", "SDK", "SPrediction")); PredictConfig.Add("HitChance", new ComboBox("Hit Chance", 0, "Very High", "High", "Medium")); BoxConfig = Config.AddSubMenu("Box Settings", "BoxSettings"); BoxConfig.Add("BoxCount", new Slider("Box Count", 2, 1, 6)); BoxConfig.Add("BoxMode", new ComboBox("Box Mode", 0, "Prediction", "Now")); SupportConfig = Config.AddSubMenu("Support Mode", "SupportMode"); SupportConfig.Add("SupportMode", new CheckBox("Suppor tMode", true)); SupportConfig.Add("SupportModeRange", new Slider("Support Mode Range", (int)Player.AttackRange + 200, (int)Player.AttackRange, 2000)); SupportConfig.Add("AttackADC", new CheckBox("Attack ADC's Target [TEST]", true)); DrawConfig = Config.AddSubMenu("Drawing Settings", "DrawingSettings"); DrawConfig.Add("Drawwhenskillisready", new CheckBox("Draw when skill is ready", true)); DrawConfig.Add("drawQ", new CheckBox("Draw Q Range", true)); DrawConfig.Add("drawW", new CheckBox("Draw W Range", true)); DrawConfig.Add("drawE", new CheckBox("Draw E Range", true)); DrawConfig.Add("drawR", new CheckBox("Draw R Range", true)); DrawConfig.Add("drawtg", new CheckBox("Draw Target", true)); SmartKeyConfig = Config.AddSubMenu("Smart Cast", "SmartCast"); SmartKeyConfig.Add("EnableFollow", new CheckBox("Enable Follow Options,Prss Q/W/E Auto Cast Spell", true)); SmartKeyConfig.Add("SmartCastQ", new CheckBox("Smart Cast Q", true)); SmartKeyConfig.Add("SmartCastW", new CheckBox("Smart Cast W", true)); SmartKeyConfig.Add("SmartCastE", new CheckBox("Smart Cast E", true)); TowerConfig = Config.AddSubMenu("Turret Settings", "TurretSettings"); TowerConfig.Add("QEallyTurrettarget", new CheckBox("Q/E ally Turret’s target", true)); TowerConfig.Add("QEtargetintoallyturret", new CheckBox("Q/E target into ally turret", true)); TowerConfig.Add("DontQ2inenemyturret", new CheckBox("Don't Q2 in enemy turret", true)); }
public void LockSpell(SpellConfig spell) { foreach (var category in SpellCategories) { var cfg = category.Spells.FirstOrDefault(d => d == spell); if (cfg) { cfg.IsUnlocked = false; break; } } }
public static void Init() { MenuConfig.Attach(); SpellConfig.Load(); Game.OnUpdate += Manager.OnUpdate; Game.OnUpdate += Killsteal.OnUpdate; Render.OnRender += DrawManager.OnRender; Render.OnPresent += DrawManager.OnPresent; Gapcloser.OnGapcloser += AntiGapcloser.OnGapcloser; }
public static string GetAttrByString(int id, string info) { SpellConfig spellConfig = ConfigData.GetSpellConfig(id); switch (info) { case "star": return(spellConfig.Star.ToString()); case "des": return(new Spell(id).Descript); } return(""); }
public VirastarConfig(CharConfig charConfiguration, WordConfig wordConfiguration, WritingRule writingRuleConfiguration, IgnoreProcessConfig ignoreProcessConfiguration, SpellConfig spellConfiguration) { CharConfiguration = charConfiguration; WordConfiguration = wordConfiguration; WritingRuleConfiguration = writingRuleConfiguration; IgnoreProcessConfiguration = ignoreProcessConfiguration; SpellConfiguration = spellConfiguration; }
public static void OnUpdate() { if (MenuConfig.LaneClear["Check"].Enabled && Global.Player.CountEnemyHeroesInRange(2000) > 0) { return; } var minion = GameObjects.EnemyMinions.FirstOrDefault(x => x.IsValidTarget(SpellConfig.E.Range) && x.IsEnemy); if (minion == null) { return; } var distance = minion.Distance(Global.Player); if (SpellConfig.Q.Ready && distance < SpellConfig.Q.Range) { if (minion.UnitSkinName.ToLower().Contains("cannon") && minion.Health > Global.Player.GetSpellDamage(minion, SpellSlot.Q)) { return; } if (Extensions.Ferocity() == 4 && !MenuConfig.LaneClear["Q"].Enabled) { return; } SpellConfig.CastQ(minion); } if (SpellConfig.W.Ready && distance < SpellConfig.W.Range) { if (Extensions.Ferocity() == 4 && !MenuConfig.LaneClear["W"].Enabled) { return; } SpellConfig.CastW(minion); } if (SpellConfig.E.Ready) { if (!MenuConfig.Combo["E"].Enabled && Extensions.Ferocity() == 4) { return; } SpellConfig.CastE(minion); } }
public static void Init() { MenuConfig.Attach(); SpellConfig.Load(); Game.OnUpdate += Manager.OnUpdate; Game.OnUpdate += Killsteal.OnUpdate; Obj_AI_Base.OnProcessSpellCast += Manager.OnProcessSpellCast; Global.Orbwalker.PostAttack += Manager.PostAttack; Global.Orbwalker.PreAttack += Manager.OnPreAttack; Render.OnRender += DrawManager.OnRender; Render.OnPresent += DrawManager.RenderDamage; }
public static void Init() { MenuConfig.Attach(); SpellConfig.Load(); Game.OnUpdate += Manager.OnUpdate; Game.OnUpdate += SpellManager.OnUpdate; Game.OnUpdate += Killsteal.OnUpdate; Global.Orbwalker.PostAttack += Manager.PostAttack; Obj_AI_Base.OnPlayAnimation += Animation.OnPlayAnimation; Obj_AI_Base.OnProcessSpellCast += SpellManager.OnProcessSpellCast; Render.OnRender += DrawManager.OnRender; Render.OnPresent += DrawManager.OnPresent; }
public static void Init() { MenuConfig.Attach(); SpellConfig.Load(); SoldierManager.Soldiers = new List <Obj_AI_Minion>(); Game.OnUpdate += Manager.OnUpdate; Game.OnUpdate += Killsteal.OnUpdate; Render.OnPresent += DrawManager.OnPresent; Render.OnRender += DrawManager.OnRender; GameObject.OnCreate += SoldierManager.OnCreate; GameObject.OnDestroy += SoldierManager.OnDelete; Obj_AI_Base.OnProcessSpellCast += AzirHelper.OnProcessSpellCast; Gapcloser.OnGapcloser += AntiGapcloser.OnGapcloser; }
public static void BuffManagerOnOnRemoveBuff(Obj_AI_Base sender, Buff buff) { if (sender == null) { return; } if (sender.IsMe) { switch (buff.Name) { case "YasuoQ3W": SpellConfig.SetSkill(Mode.Normal); break; } } }
public static void OnPostAttack() { var target = Global.TargetSelector.GetTarget(SpellConfig.R.Range); if (target == null) { return; } if (SpellConfig.R.Ready && KnockUpHelper.KnockedUp(target)) { SpellConfig.R.Cast(); } if (SpellConfig.Q.Ready) { var enemyHero = GameObjects.EnemyHeroes.FirstOrDefault(x => x.IsValidTarget(SpellConfig.Q.Range)); if (enemyHero != null) { SpellConfig.Q.Cast(enemyHero); } } if (!SpellConfig.E.Ready) { return; } var minion = MinionHelper.GetDashableMinion(target); if (minion != null && target.Distance(Global.Player) > Global.Player.AttackRange) { if (MenuConfig.Combo["Turret"].Enabled && minion.ServerPosition.PointUnderEnemyTurret() || MenuConfig.Combo["Dash"].Value == 0 && minion.Distance(Game.CursorPos) > MenuConfig.Combo["Range"].Value) { return; } SpellConfig.E.CastOnUnit(minion); } else if (!target.HasBuff("YasuoDashWrapper") && target.Distance(Global.Player) <= SpellConfig.E.Range && target.Distance(Global.Player) > SpellConfig.E.Range - target.BoundingRadius) { SpellConfig.CastE(target); } }
internal void Update(SpellConfig spellConfig) { Type = BattleTargetManager.GetRegionType(spellConfig.Target[2]); range = spellConfig.Range; CheckColor(spellConfig.Target[1]); }
public double Addon { get; set; }//法术强化造成的效果 public Spell(int sid) { SpellConfig = ConfigData.GetSpellConfig(sid); UpgradeToLevel1(); }