Exemple #1
0
    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);
        }
    }
Exemple #4
0
    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);
        }
Exemple #6
0
    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;
        }
    }
Exemple #7
0
    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);
Exemple #8
0
        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> ();
 }
Exemple #11
0
 public virtual void Execute(SpellSystem actionSystem, SpellConfig config)
 {
 }
Exemple #12
0
    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);
        }
    }
Exemple #13
0
 private void Awake()
 {
     instance = this;
 }
Exemple #14
0
 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> ();
 }
Exemple #16
0
    // Use this for initialization
    void Awake()
    {
        _an = GetComponentInChildren<Animator>();

        _spellSys = new SpellSystem(transform.FindChild("Hand").GetComponent<Transform>(), GetComponent<Rigidbody2D>());
    }
 void Awake()
 {
     Instance = this;
 }