Example #1
0
        public void Add(SkCond colCond)
        {
            SkFuncInOutPara funcOut = new SkFuncInOutPara(_inst, colCond._para);
            SkCondColDesc   cols    = funcOut.GetColDesc();

            if (cols.colTypes[0] == SkCondColDesc.ColType.ColName)
            {
                foreach (string str in cols.colStrings[0])
                {
                    Collider col = _inst._caster.GetCollider(str);
                    if (col != null && !_colPositions.ContainsKey(col))
                    {
                        _colPositions[col] = new Positions(col.Pos());
                    }
                }
            }
            else
            {
                //TODO : Getcollider by layer
                Debug.LogError("Unimplemented code for getting collider from collayer cond");

                /*
                 * foreach(string str in cols.colStrings[0])
                 * {
                 *      Collider col = _inst._caster.GetCollider(str);
                 *      if(col != null && !_colPositions.ContainsKey(col))
                 *      {
                 *              _colPositions[col] = new Positions(col.Pos());
                 *      }
                 * }
                 */
            }
        }
        public static void LoadData()
        {
            if (s_SkTriggerEventTbl != null)
            {
                return;
            }

            SqliteDataReader reader = LocalDatabase.Instance.ReadFullTable("skTriggerEvent");

            //reader.Read(); // skip title if needed
            s_SkTriggerEventTbl = new Dictionary <int, SkTriggerEvent>();
            while (reader.Read())
            {
                SkTriggerEvent skEvent = new SkTriggerEvent();
                skEvent._id = Convert.ToInt32(reader.GetString(reader.GetOrdinal("_id")));

                skEvent._cond       = SkCond.Create(reader.GetString(reader.GetOrdinal("_cond")));
                skEvent._force      = Convert.ToSingle(reader.GetString(reader.GetOrdinal("_force")));
                skEvent._modsCaster = SkAttribsModifier.Create(reader.GetString(reader.GetOrdinal("_modsCaster")));
                skEvent._modsTarget = SkAttribsModifier.Create(reader.GetString(reader.GetOrdinal("_modsTarget")));
                SkEffect.s_SkEffectTbl.TryGetValue(Convert.ToInt32(reader.GetString(reader.GetOrdinal("_effOnHitCaster"))), out skEvent._effOnHitCaster);
                SkEffect.s_SkEffectTbl.TryGetValue(Convert.ToInt32(reader.GetString(reader.GetOrdinal("_effOnHitTarget"))), out skEvent._effOnHitTarget);

                try{
                    s_SkTriggerEventTbl.Add(skEvent._id, skEvent);
                }catch (Exception e)     {
                    Debug.LogError("Exception on skTriggerEvent " + skEvent._id + " " + e);
                }
            }
        }
Example #3
0
        void Awake()
        {
            SkData skDigTerrain = new SkData();

            skDigTerrain._condToLoop    = SkCond.Create("lasthit");
            skDigTerrain._pretimeOfMain = new float[] { 0.5f };
            skDigTerrain._postimeOfMain = new float[] { 0.5f };
            skDigTerrain._events        = new List <List <SkTriggerEvent> >();
            skDigTerrain._events.Add(new List <SkTriggerEvent>());
            SkTriggerEvent skDigEvent = new SkTriggerEvent();

            skDigEvent._cond       = SkCond.Create("CondToDig");
            skDigEvent._modsTarget = SkAttribsModifier.Create("mad,0,1,-1");
            skDigTerrain._events[0].Add(skDigEvent);
            SkData.s_SkillTbl = new Dictionary <int, SkData>();
            SkData.s_SkillTbl.Add(0, skDigTerrain);
        }
Example #4
0
        public static SkCond Create(string desc)
        {
            string[]      strCond = desc.Split(new char[] { ';' });
            List <SkCond> lstCond = new List <SkCond>();

            foreach (string condDesc in strCond)
            {
                try
                {
                    int cnt = Convert.ToInt32(condDesc);
                    if (lstCond.Count == 0)
                    {
                        lstCond.Add(CreateSub("true"));
                    }
                    for (int i = 1; i < cnt; i++)
                    {
                        lstCond.Add(lstCond[lstCond.Count - 1]);
                    }
                }
                catch
                {
                    lstCond.Add(CreateSub(condDesc));
                }
            }
            SkCond cond;

            if (lstCond.Count == 1)
            {
                cond = lstCond[0];
            }
            else
            {
                cond       = new SkCond();
                cond._para = lstCond;
                cond._cond = (SkInst inst, System.Object y) => {
                    List <SkCond> paraLstCond = y as List <SkCond>;
                    if (inst.GuideCnt > 0 && inst.GuideCnt <= paraLstCond.Count && paraLstCond[inst.GuideCnt - 1].Tst(inst))
                    {
                        return(new SkFuncInOutPara(inst, paraLstCond[inst.GuideCnt - 1]._retTars, true));
                    }
                    return(new SkFuncInOutPara(inst, y, false));
                };
            }

            return(cond);
        }
Example #5
0
        public static void LoadData()
        {
            if (s_SkillTbl != null)
            {
                return;
            }
#if DBG_COL_ATK
            SkDebug.LoadIds();
#endif
            SkEffect.LoadData();
            SkBuff.LoadData();
            SkTriggerEvent.LoadData();

            SqliteDataReader reader = LocalDatabase.Instance.ReadFullTable("skMain");
            //reader.Read(); // skip title if needed
            s_SkillTbl = new Dictionary <int, SkData>();
            while (reader.Read())
            {
                SkData skill = new SkData();
                skill._id                = Convert.ToInt32(reader.GetString(reader.GetOrdinal("_id")));
                skill._desc              = Convert.ToInt32(reader.GetString(reader.GetOrdinal("_desc")));
                skill._icon              = reader.GetString(reader.GetOrdinal("_icon"));
                skill._name              = reader.GetString(reader.GetOrdinal("_name"));
                skill._interruptable     = reader.GetString(reader.GetOrdinal("_interruptable")).Equals("1");
                skill._coolingTime       = Convert.ToSingle(reader.GetString(reader.GetOrdinal("_coolingTime")));
                skill._coolingTimeType   = Convert.ToInt32(reader.GetString(reader.GetOrdinal("_coolingTimeType")));
                skill._coolingTimeShared = Convert.ToSingle(reader.GetString(reader.GetOrdinal("_coolingTimeShared")));

                skill._pretimeOfPrepare = Convert.ToSingle(reader.GetString(reader.GetOrdinal("_pretimeOfPrepare")));
                skill._postimeOfPrepare = Convert.ToSingle(reader.GetString(reader.GetOrdinal("_postimeOfPrepare")));
                SkEffect.s_SkEffectTbl.TryGetValue(Convert.ToInt32(reader.GetString(reader.GetOrdinal("_effPrepare"))), out skill._effPrepare);

                skill._condToLoop      = SkCond.Create(reader.GetString(reader.GetOrdinal("_cond")));
                skill._pretimeOfMain   = ToSingleArray(reader.GetString(reader.GetOrdinal("_pretimeOfMain")));
                skill._timeOfMain      = ToSingleArray(reader.GetString(reader.GetOrdinal("_timeOfMain")));
                skill._postimeOfMain   = ToSingleArray(reader.GetString(reader.GetOrdinal("_postimeOfMain")));
                skill._effMainEachTime = ToSkEffectArray(reader.GetString(reader.GetOrdinal("_effMainEachTime")));
                SkEffect.s_SkEffectTbl.TryGetValue(Convert.ToInt32(reader.GetString(reader.GetOrdinal("_effMainOneTime"))), out skill._effMainOneTime);

                string[] strEventsList = reader.GetString(reader.GetOrdinal("_triggerEvents")).Split(';');
                foreach (string strEvents in strEventsList)
                {
                    List <SkTriggerEvent> curEvents = new List <SkTriggerEvent>();
                    string[] strCurEvents           = strEvents.Split(',');
                    foreach (string strEvent in strCurEvents)
                    {
                        int            eventId = Convert.ToInt32(strEvent);
                        SkTriggerEvent curEvent;
                        SkTriggerEvent.s_SkTriggerEventTbl.TryGetValue(eventId, out curEvent);
                        if (curEvent != null)
                        {
                            curEvents.Add(curEvent);
                        }
                    }
                    skill._events.Add(curEvents);
                }

                skill._pretimeOfEnding = Convert.ToSingle(reader.GetString(reader.GetOrdinal("_pretimeOfEnding")));
                skill._postimeOfEnding = Convert.ToSingle(reader.GetString(reader.GetOrdinal("_postimeOfEnding")));
                SkEffect.s_SkEffectTbl.TryGetValue(Convert.ToInt32(reader.GetString(reader.GetOrdinal("_effEnding"))), out skill._effEnding);

                try{
                    s_SkillTbl.Add(skill._id, skill);
                }catch (Exception e)     {
                    Debug.LogError("Exception on skMain " + skill._id + " " + e);
                }
            }

            new Thread(new ThreadStart(SkInst.s_ExpCompiler.Compile)).Start();
            //SkInst.s_ExpCompiler.Compile();
        }
Example #6
0
        private static SkCond CreateSub(string desc)
        {
            SkCond cond = new SkCond();

            try{
                string[] strCond = desc.Split(new char[] { ',' }, 2);
                switch (strCond[0].ToLower())
                {
                case "loopcnt":
                    cond._cond = (SkInst inst, System.Object y) => new SkFuncInOutPara(inst, y,
                                                                                       inst.GuideCnt > 0 && inst.GuideCnt < Convert.ToInt32(strCond[1]));
                    break;

                case "key":
                    cond._cond = (SkInst inst, System.Object y) => new SkFuncInOutPara(inst, y,
                                                                                       //Input.GetKey(strCond[1]));
                                                                                       Input.GetKey(KeyCode.Q));
                    break;

                case "lasthit":
                    cond._cond = (SkInst inst, System.Object y) => new SkFuncInOutPara(inst, y,
                                                                                       inst.LastHit);
                    break;

                case "col":
                    cond._para = strCond[1];
                    cond._cond = TstCol;
                    cond._type = CondType.TypeRTCol;
                    break;

                case "colname":
                    cond._para = strCond[1];
                    cond._cond = TstColName;
                    cond._type = CondType.TypeRTCol;
                    break;

                case "collayer":
                    cond._para = strCond[1];
                    cond._cond = TstColLayer;
                    cond._type = CondType.TypeRTCol;
                    break;

                case "colinfo":
                    cond._cond = TstColInfo;
                    cond._type = CondType.TypeRTCol;
                    break;

                case "range":
                    cond._para = strCond[1];
                    cond._cond = TstInRange;
                    break;

                case "true":
                    cond._cond = (SkInst inst, System.Object y) => new SkFuncInOutPara(inst, y, true);
                    break;

                case "false":
                    cond._cond = (SkInst inst, System.Object y) => new SkFuncInOutPara(inst, y, false);
                    break;

                default:
                    cond._para = strCond;
                    cond._cond = TstExternalFunc;
                    break;
                }
            }
            catch
            {
                Debug.LogError("[SKERR]Unrecognized sk cond:" + desc);
            }
            return(cond);
        }