public static void LevelUp(GameObject critter, Stat classStat) { if (!D20ClassSystem.Classes.ContainsKey(classStat)) { throw new ArgumentException($"{classStat} is not a valid class"); } var packet = new LevelupPacket { classCode = classStat }; var classCode = SpellSystem.GetSpellClass(classStat); foreach (var spell in GameSystems.Spell.AllSpells) { if (spell.SpellLevelForSpellClass(classCode) != -1) { packet.spellEnums.Add(spell.spellEnum); } } GameSystems.Level.LevelUpApply(critter, packet); packet.spellEnums.Clear(); // Memorize some spells and make it so they aren't used foreach (var spell in GameSystems.Spell.AllSpells) { if (GameSystems.Spell.IsSpellKnown(critter, spell.spellEnum)) { MemorizeSpell(critter, spell.spellEnum, classStat); } } }
public void use(int Item_sid) { if (!mybag.Query(Item_sid)) { MyCanvas.IssueDis("该物品,已缺失"); return; } int spell_id = Item.SpellID(Item_sid); string note = "使用了" + Item.Name(Item_sid); MyCanvas.IssueDis(note); SpellSystem.SpellCast(spell_id, this.gameObject); if (Item.Type(Item_sid) == "prop" || Item.Type(Item_sid) == "staticequi" || Item.Type(Item_sid) == "Building") { if (Item.IsCanTwiceSpell(Item_sid)) { mybag.Cast(Item_sid); Canvas_con(); } else { if (Item.Type(Item_sid) == "staticequi") { Equi(Item_sid); } else if (Item.Type(Item_sid) == "Building") { GameObject temp = mybag.GoEntity(Item_sid); Building(temp); } mybag.Sub(Item_sid); Canvas_con(); } } }
void Start() { spling = FindObjectOfType <SpellSystem> (); soundConfig = false; configGFX = false; quitScreenActive = false; if (pauseMenu != null) { pauseMenu.SetActive(false); } }
private static bool TryGetParentNodeForSpell(GameObject caster, int spellClass, int spellLevel, out RadialMenuStandardNode parentNode) { if (spellLevel >= NUM_SPELL_LEVELS) { parentNode = default; return(false); } List <int> spellClasses = new List <int>(); foreach (var classEnum in D20ClassSystem.ClassesWithSpellLists) { if (caster.GetStat(classEnum) > 0) { spellClasses.Add(SpellSystem.GetSpellClass(classEnum)); } } // domain spells go last if (GameSystems.Spell.IsDomainSpell(spellClass)) { parentNode = RadialMenuStandardNode.SpellsDomain + 1 + spellClasses.Count * NUM_SPELL_LEVELS + spellLevel; return(true); } for (var i = 0; i < spellClasses.Count; i++) { if (spellClasses[i] == spellClass) { parentNode = RadialMenuStandardNode.SpellsDomain + 1 + i * NUM_SPELL_LEVELS + spellLevel; return(true); } } Logger.Warn("No matching class found for memorized/known spell with class {0} and level {1}???", spellClass, spellLevel); parentNode = default; return(false); }
public bool Initialize() { if (playerData == null) { return(false); } _manaRefreshTimer = 0f; _transform = GetComponent <Transform>(); _rigidBody = GetComponent <Rigidbody>(); _playerMovement = GetComponent <PlayerController>(); _spellSystem = GetComponent <SpellSystem>(); InitPlayerStats(); var init = _playerMovement.Initialize() && _spellSystem.Initialize(); return(init); }
public void Execute(SpellSystem system) { Transform targetTransform = system.transform; var target = system.GetComponent <TargetingSystem>().targetable; if (target != null) { targetTransform = target.transform; } foreach (var behavior in behaviors) { behavior.Execute(system, this); } if (targetVfx != null) { var vfx = Instantiate(targetVfx.vfxPrefab, targetTransform); vfx.GetComponent <VfxSystem>().config = targetVfx; } }
private static void MemorizeSpell(GameObject critter, int spellEnum, Stat classStat) { if (!GameSystems.Spell.TryGetSpellEntry(spellEnum, out var spellEntry)) { return; } var classCode = SpellSystem.GetSpellClass(classStat); var level = spellEntry.SpellLevelForSpellClass(classCode); var spellsPerDay = GameSystems.Spell.GetSpellsPerDay(critter).Find(spd => spd.ClassCode == classCode); if (spellsPerDay == null) { return; } // Any free slots??? if (level >= 0 && level < spellsPerDay.Levels.Length && spellsPerDay.Levels[level].Slots.Any(slot => !slot.HasSpell)) { GameSystems.Spell.SpellMemorizedAdd(critter, spellEnum, classCode, level, default, default);
public bool Initialize() { AddListeners(); _uiPanels.Add(panelMainMenu); _uiPanels.Add(panelGameOverlay); _uiPanels.Add(panelSkills); bool init = panelMainMenu.Initialize() && panelGameOverlay.Initialize() && panelSkills.Initialize(); OpenPanel(panelMainMenu); GameManager.Instance.PlayerManager.DisableControls(); _spellSystem = GameManager.Instance.PlayerManager.SpellSystem; _playerManager = GameManager.Instance.PlayerManager; if (!init) { GameManager.LogMessage("UI Manager references Failed!"); } return(init); }
public override void Execute(SpellSystem system, SpellConfig config) { Debug.LogFormat("{0} {1} BurnSpellBehavior", system.name, config.spellName); }
public void Start() { spel = FindObjectOfType <SpellSystem> (); }
public virtual void Execute(SpellSystem actionSystem, SpellConfig config) { }
private void AddSpell(GameObject caster, SpellStoreData spData) { if (spData.spellStoreState.usedUp) { return; } if (!GameSystems.Spell.spellCanCast(caster, spData.spellEnum, spData.classCode, spData.spellLevel)) { return; } if (spData.classCode == SpellSystem.GetSpellClass(Stat.level_paladin) && GameSystems.D20.D20Query(caster, D20DispatcherKey.QUE_IsFallenPaladin)) { return; } if (!TryGetParentNodeForSpell(caster, spData.classCode, spData.spellLevel, out var specNode)) { return; } RadialMenuEntry entry; if (!GameSystems.Spell.SpellHasMultiSelection(spData.spellEnum)) { var d20SpellData = new D20SpellData(spData.spellEnum, spData.classCode, spData.spellLevel, -1, spData.metaMagicData); entry = RadialMenuEntry.CreateSpellAction(d20SpellData, D20ActionType.CAST_SPELL); entry.d20ActionData1 = 0; // TODO: Check the CAST_SPELL action whether this is needed var nodeIdx = GameSystems.D20.RadialMenu.AddToStandardNode(caster, ref entry, specNode); SetSpontaneousCastingAltNode(caster, nodeIdx, spData); return; } // Multiselection spells section entry = RadialMenuEntry.CreateParent(GameSystems.Spell.GetSpellName(spData.spellEnum)); // the parent node var parentNodeIdx = AddParentChildNode(caster, ref entry, GetStandardNode(specNode)); SetSpontaneousCastingAltNode(caster, parentNodeIdx, spData); // the options if (!GameSystems.Spell.TryGetMultiSelectOptions(spData.spellEnum, out var multiOptions)) { Logger.Error("Spell multiselect options not found!"); return; } // populate options for (var i = 0; i < multiOptions.Count; i++) { var op = multiOptions[i]; var d20SpellData = new D20SpellData(spData.spellEnum, spData.classCode, spData.spellLevel, -1, spData.metaMagicData); var castEntry = RadialMenuEntry.CreateSpellAction(d20SpellData, D20ActionType.CAST_SPELL); castEntry.d20ActionData1 = 0; // TODO: Check if this is really necessary or if it's okay what CreateSpellAction does SetCallbackCopyEntryToSelected(ref castEntry); if (op.isProto) { var protoId = op.value; entry.minArg = protoId; var protoObj = GameSystems.Proto.GetProtoById(protoId); entry.text = GameSystems.Description.Get(protoObj.GetInt32(obj_f.description)); } else { entry.text = GameSystems.Spell.GetSpellsRadialMenuOptions(op.value); entry.minArg = i + 1; } entry.AddAsChild(caster, parentNodeIdx); } }
private void Awake() { instance = this; }
public override void Execute(SpellSystem system, SpellConfig config) { Logging.LogFormat("{0} {1} TestSpellBehavior", system.name, config.spellName); }
void Start() { playerCon = GetComponent <PlayerControl> (); forceShield = GetComponent <SpellSystem> (); }
// Use this for initialization void Awake() { _an = GetComponentInChildren<Animator>(); _spellSys = new SpellSystem(transform.FindChild("Hand").GetComponent<Transform>(), GetComponent<Rigidbody2D>()); }
void Awake() { Instance = this; }