コード例 #1
0
        public void SendEdu(EduEvent ev, string key)
        {
            var transaction  = GetOrCreateTransactionForDest(ev.destination);
            var existingItem = transaction.edus.FindIndex(edu => edu.InternalKey == key);

            if (existingItem >= 0)
            {
                transaction.edus.RemoveAt(existingItem);
            }

            ev.InternalKey = key;
            SendEdu(ev);
        }
コード例 #2
0
        public static FederationStreamRow FromRaw(string rawDataString)
        {
            var parsed    = JsonConvert.DeserializeObject <List <dynamic> >(rawDataString);
            var typeId    = "";
            var streamRow = new FederationStreamRow();

            for (var i = 0; i < parsed.Count; i++)
            {
                if (i == 0)
                {
                    typeId = parsed[0];
                }
                else if (typeId == "k") // KeyedEduRow
                {
                    var edu = new EduEvent
                    {
                        edu_type    = parsed[i].edu.edu_type,
                        destination = parsed[i].edu.destination,
                        origin      = parsed[i].edu.origin,
                        content     = parsed[i].edu.content
                    };

                    string[] key = parsed[i].key.ToObject <string[]>();
                    streamRow.keyedEdus.Add(key, edu);
                }
                else if (typeId == "p") // PresenceRow
                {
                    streamRow.presence.Add(((JObject)parsed[i]).ToObject <PresenceState>());
                }
                else if (typeId == "e") // EduRow
                {
                    streamRow.edus.Add(new EduEvent
                    {
                        edu_type    = parsed[i].edu_type,
                        destination = parsed[i].destination,
                        origin      = parsed[i].origin,
                        content     = parsed[i].content
                    });
                }
                else if (typeId == "d") // DeviceRow
                {
                    string destination = parsed[i]["destination"].Value;
                    streamRow.devices.Add(destination);
                }
            }

            return(streamRow);
        }
コード例 #3
0
        /// <summary>
        /// 养成模式静态数据
        /// </summary>
        public static List <EduEvent> GetStaticEduEvents()
        {
            List <EduEvent> events = new List <EduEvent>();
            string          path   = Constants.DEBUG ? Constants.EDU_DEBUG_PATH : Constants.EDU_PATH;

            foreach (TextAsset text in Resources.LoadAll <TextAsset>(path))
            {
                JsonData jsondata = JsonMapper.ToObject(text.text);
                foreach (JsonData data in jsondata)
                {
                    EduEvent ee = new EduEvent(data);
                    //Debug.Log("读取:" + ee.name);
                    events.Add(ee);
                }
            }
            return(events);
        }
コード例 #4
0
        public void SendEdu(EduEvent obj)
        {
            if (obj.destination == _serverName)
            {
                return;
            }

            // Prod device messages if we've not seen this destination before.
            if (!_destLastDeviceMsgStreamId.ContainsKey(obj.destination))
            {
                SendDeviceMessages(obj.destination);
            }

            var transaction = GetOrCreateTransactionForDest(obj.destination);

            transaction.edus.Add(obj);
            AttemptTransaction(obj.destination);
        }
コード例 #5
0
    /// <summary>
    /// 养成按钮触发
    /// </summary>
    /// <param name="x">养成按钮编号</param>
    public void Execute(int x)
    {
        Debug.Log("你选择了" + allEvents[x].name);
        EduEvent selectEvent = allEvents[x];
        string   foreclass   = defaultEnum[forenoon];
        string   afterclass  = defaultEnum[afternoon];
        //由体力决定成功率
        float successrate = player.energyPoint * 0.9f;

        //符合课表 增加成功率
        if (selectEvent.name.Contains(foreclass) ||
            selectEvent.name.Contains(afterclass))
        {
            successrate += 0.1f;
        }
        float seed    = UnityEngine.Random.Range(0f, 1f);
        bool  success = seed < successrate;
        //系数1 成功则1.5倍 失败减半
        float index1 = success ? 1.51f : 0.5f;
        //系数2 课表加成
        float index2 = 1f;

        //TODO:假日的判定有课才加倍?
        if (!DataManager.GetInstance().IsHoliday())
        {
            if (selectEvent.name.Contains(foreclass))
            {
                index2 = foreindex;
            }
            if (selectEvent.name.Contains(afterclass))
            {
                index2 = afterindex;
            }
        }
        //执行各项属性值 加倍
        int[] change = new int[5] {
            0, 0, 0, 0, 0
        };
        foreach (KeyValuePair <string, EduStatistic> kv in selectEvent.statistic)
        {
            EduStatistic es = kv.Value;
            if (es == null)
            {
                continue;
            }
            //养成初始区间内随机值
            float final = UnityEngine.Random.Range(es.min, es.max);
            //正数 才乘以系数
            if (final > 0)
            {
                final *= index1;
                if (kv.Key == foreclass || kv.Key == afterclass)
                {
                    final *= index2;
                }
            }
            int i = Array.IndexOf(defaultEnum, kv.Key);
            change[i] = (int)Math.Round(final);
        }
        int energyCost = selectEvent.ap;

        //动画显示(养成Q版与数值跳跃)
        StartCoroutine(ShowResult(selectEvent.name, change, energyCost, success));
        //数值更新
        for (int i = 0; i < 5; i++)
        {
            player.AddBasicStatus(defaultEnum[i], change[i]);
        }
        player.AddEnergy(energyCost);
    }
コード例 #6
0
    /// <summary>
    /// 养成按钮得触发
    /// </summary>
    /// <param name="x">养成按钮编号</param>
    public void Execute(int x)
    {
        Debug.Log("你选择了" + allEvents[x].name);
        //执行计算并更改
        EduEvent selectEvent = allEvents[x];
        //由体力决定成功率(体力即成功率)
        float successrate = player.energyPoint * 0.9f;

        if (selectEvent.name.Contains(foreclass) || selectEvent.name.Contains(afterclass))
        {
            successrate += 0.1f;
        }
        //成功则加倍 失败减半
        float seed    = UnityEngine.Random.Range(0f, 1f);
        bool  success = seed < successrate;
        //系数1 成功
        float index1 = success ? 1.5f : 0.5f;
        //系数2 课表加成
        float index2 = 1f;

        //TODO:假日的判定有课才加倍
        if (!DataManager.GetInstance().IsHoliday())
        {
            if (selectEvent.name.Contains(foreclass))
            {
                index2 = foreindex;
            }
            if (selectEvent.name.Contains(afterclass))
            {
                index2 = afterindex;
            }
        }
        //执行各项属性值 加倍
        Dictionary <string, int> change = new Dictionary <string, int>();

        foreach (KeyValuePair <string, EduStatistic> kv in selectEvent.statistic)
        {
            if (kv.Value != null)
            {
                //养成区间内随机值
                float final = UnityEngine.Random.Range(kv.Value.min, kv.Value.max);
                //正数 才乘以系数
                if (final > 0)
                {
                    final *= index1;
                    if (kv.Key == foreclass || kv.Key == afterclass)
                    {
                        final *= index2;
                    }
                }
                change.Add(kv.Key, (int)final);
            }
        }
        int energyCost = selectEvent.ap;

        //养成Q版动画显示
        StartCoroutine(ShowResult(selectEvent.name, change, energyCost, success));
        //数值更新
        foreach (KeyValuePair <string, int> kv in change)
        {
            player.AddBasicStatus(kv.Key, kv.Value);
        }
        player.AddEnergy(energyCost);
    }