Пример #1
0
    public GameObject defeatEffect;    //撃墜時のエフェクト
    private void Update()
    {
        //戦闘中
        if (BattleVal.status == STATUS.BATTLE)
        {
            bool critflag  = false;
            bool dodgeflag = false;
            int  damage    = 0;
            switch (bstate)
            {
            case BATTLE_STATUS.SETVECT:
                //キャラの向きの調整
                Vector3 r0 = new Vector3();     //攻撃元
                Vector3 r1 = new Vector3();     //攻撃先
                Mapclass.TranslateMapCoordToPosition(ref r0, BattleVal.selectX, BattleVal.selectY);
                Mapclass.TranslateMapCoordToPosition(ref r1, attackedpos[0], attackedpos[1]);

                //攻撃対象の登録
                Unitdata temp = BattleVal.id2index[string.Format("{0},{1}", attackedpos[0], attackedpos[1])];
                damage = Calc_Damage(BattleVal.selectedUnit, temp);
                float dex  = Calc_Dexterity(BattleVal.selectedUnit, temp);
                float rate = Calc_CriticalRate(BattleVal.selectedUnit, temp);
                //当たった場合
                if (Is_Hit(dex))
                {
                    //クリティカル発生かどうか
                    if (Is_Hit(rate))
                    {
                        damage   = (int)(damage * 1.5f);
                        critflag = true;
                    }

                    temp.hp -= damage;     //ダメージ処理


                    string damagetext = string.Format("{0}", damage);
                    int    count      = 1;
                    //ダメージテキストの中心座標
                    Vector3 damage_center = Camera.main.WorldToScreenPoint(r1);

                    //テキストの登録
                    foreach (char a in damagetext)
                    {
                        int num = (int)char.GetNumericValue(a);     //数を取得

                        damagenum.Add(Instantiate(damagetextprefab, r1, Quaternion.identity));
                        damagenum[count - 1].text = a.ToString();
                        //サイズ取得
                        damagenum[count - 1].rectTransform.sizeDelta =
                            new Vector2(damagenum[count - 1].preferredWidth, damagenum[count - 1].preferredHeight);
                        damagenum[count - 1].rectTransform.sizeDelta =
                            new Vector2(damagenum[count - 1].preferredWidth, damagenum[count - 1].preferredHeight);
                        damagenum[count - 1].transform.SetParent(canvas.transform, false);
                        damagenum[count - 1].transform.localPosition = damage_center - new Vector3(canvas.GetComponent <RectTransform>().sizeDelta.x / 2, canvas.GetComponent <RectTransform>().sizeDelta.y / 2, 0);
                        //1桁当たりの文字ブロック
                        Vector3 numsize = damagenum[count - 1].GetComponent <RectTransform>().sizeDelta *damagenum[count - 1].GetComponent <RectTransform>().localScale;
                        numsize.y = 0;
                        numsize.z = 0;

                        damagenum[count - 1].transform.localPosition += (count - 1) * numsize;
                        damagenum[count - 1].transform.localPosition += new Vector3(0, 30, 0);
                        damagenum[count - 1].gameObject.SetActive(false);
                        damagenum[count - 1].color = new Vector4(1, 0, 0, 1);
                        count++;
                    }
                    //クリティカルの場合、そのテキストを表示
                    if (critflag)
                    {
                        damagenum.Add(Instantiate(damagetextprefab, r1, Quaternion.identity));
                        damagenum[count - 1].text = "Critical!";
                        //サイズ取得
                        damagenum[count - 1].rectTransform.sizeDelta =
                            new Vector2(damagenum[count - 1].preferredWidth, damagenum[count - 1].preferredHeight);
                        damagenum[count - 1].rectTransform.sizeDelta =
                            new Vector2(damagenum[count - 1].preferredWidth, damagenum[count - 1].preferredHeight);
                        damagenum[count - 1].transform.SetParent(canvas.transform, false);
                        damagenum[count - 1].transform.localPosition  = damage_center - new Vector3(canvas.GetComponent <RectTransform>().sizeDelta.x / 2, canvas.GetComponent <RectTransform>().sizeDelta.y / 2, 0);
                        damagenum[count - 1].transform.localPosition += new Vector3(0, 100, 0);
                        damagenum[count - 1].gameObject.SetActive(false);
                        damagenum[count - 1].color = new Color(1.0f, 1.0f, 0);
                        count++;
                    }
                }
                else
                {
                    dodgeflag = true;
                    //ダメージテキストの中心座標
                    Vector3 damage_center = Camera.main.WorldToScreenPoint(r1);

                    //テキストの登録
                    damagenum.Add(Instantiate(damagetextprefab, r1, Quaternion.identity));
                    damagenum[0].text = "DODGE!";
                    //サイズ取得
                    damagenum[0].rectTransform.sizeDelta =
                        new Vector2(damagenum[0].preferredWidth, damagenum[0].preferredHeight);
                    damagenum[0].rectTransform.sizeDelta =
                        new Vector2(damagenum[0].preferredWidth, damagenum[0].preferredHeight);
                    damagenum[0].transform.SetParent(canvas.transform, false);
                    damagenum[0].transform.localPosition  = damage_center - new Vector3(canvas.GetComponent <RectTransform>().sizeDelta.x / 2, canvas.GetComponent <RectTransform>().sizeDelta.y / 2, 0);
                    damagenum[0].transform.localPosition += new Vector3(0, 30, 0);
                    damagenum[0].gameObject.SetActive(false);
                    damagenum[0].color = new Vector4(1, 1, 1, 1);
                }
                //initialize
                nowtime = -1;

                //キャラ向きの調整(お互いに向き合う)
                float tempy = r1.y;
                r1.y = r0.y;
                BattleVal.selectedUnit.gobj.transform.LookAt(r1);
                r0.y = tempy;
                temp.gobj.transform.LookAt(r0);

                //行動スタックのクリア(1手戻し不可能に)
                BattleVal.actions.Clear();

                //state undate
                if (critflag)
                {
                    bstate = BATTLE_STATUS.EFFECT;
                    //クリティカル攻撃・構えモーション
                    BattleVal.selectedUnit.gobj.GetComponent <Animator>().Play("CriticalPre");
                }
                else
                {
                    bstate = BATTLE_STATUS.BATTLE;
                    //攻撃モーション開始
                    BattleVal.selectedUnit.gobj.GetComponent <Animator>().Play("Attack");
                }

                attackedAnimator  = temp.gobj.GetComponent <Animator>();
                attackedanimstate = "Damage";
                if (dodgeflag)
                {
                    attackedanimstate = "Dodge";
                }

                break;

            //クリティカル攻撃の演出
            case BATTLE_STATUS.EFFECT:

                //クリティカル攻撃・構えモーションが終了し、音声はなり終わったか?
                if (BattleVal.selectedUnit.gobj.GetComponent <Animator>().GetCurrentAnimatorStateInfo(0).normalizedTime >= 1 &&
                    !BattleVal.selectedUnit.gobj.GetComponent <CharaAnimation>().voiceSource.isPlaying &&
                    !BattleVal.selectedUnit.gobj.GetComponent <CharaAnimation>().seSource.isPlaying)
                {
                    //クリティカル攻撃モーションへ
                    BattleVal.selectedUnit.gobj.GetComponent <Animator>().Play("CriticalAttack");
                    bstate = BATTLE_STATUS.BATTLE;
                }


                break;

            case BATTLE_STATUS.BATTLE:
                //バトルのアニメーション
                //ヒット判定で効果音+被ダメージアニメーション
                if (BattleVal.selectedUnit.gobj.GetComponent <CharaAnimation>().isHit)
                {
                    attackedAnimator.Play(attackedanimstate);
                    if (attackedanimstate == "Dodge")
                    {
                        Operation.setSE(seDodge);
                    }
                    else
                    {
                        Operation.setSE(seHitN);
                        Vector3 effectpos = new Vector3();
                        Mapclass.TranslateMapCoordToPosition(ref effectpos, attackedpos[0], attackedpos[1]);
                        hitEffect = Instantiate(BattleVal.selectedUnit.attackeffect, effectpos, BattleVal.selectedUnit.attackeffect.transform.rotation);
                    }

                    //テキスト表示
                    foreach (Text a in damagenum)
                    {
                        a.gameObject.SetActive(true);
                    }
                }

                //攻撃者の攻撃モーションが終わったか?
                if (!BattleVal.selectedUnit.gobj.GetComponent <Animator>().GetCurrentAnimatorStateInfo(0).IsTag("Attack"))
                {
                    //ダメージテキストの表示
                    if (nowtime == -1)
                    {
                        nowtime = 0;
                    }
                    else if (nowtime >= battle_time - Time.deltaTime)
                    {
                        bstate = BATTLE_STATUS.AFTERBATTLE;

                        //ダメージ数値のテキストを消す処理
                        foreach (Text a in damagenum)
                        {
                            Destroy(a.gameObject);
                        }

                        damagenum.Clear();

                        //攻撃可能フラグをオフに
                        BattleVal.selectedUnit.atackable = false;
                    }
                    else
                    {
                        //ダメージ数値のテキストを消す処理
                        //damagetext.color -= new Color(0,0,0,Time.deltaTime);
                        foreach (Text a in damagenum)
                        {
                            a.color -= new Color(0, 0, 0, Time.deltaTime);
                            a.transform.position += new Vector3(0, 1, 0);
                        }
                        nowtime += Time.deltaTime;
                    }
                }
                break;

            //戦闘後処理
            case BATTLE_STATUS.AFTERBATTLE:
                //ヒットエフェクトの消去
                Destroy(hitEffect);
                //獲得経験値
                int getexp = 10;     //基本値

                //撃墜処理
                if (BattleVal.id2index[string.Format("{0},{1}", attackedpos[0], attackedpos[1])].hp <= 0)
                {
                    Vector3 effectpos = new Vector3();
                    Mapclass.TranslateMapCoordToPosition(ref effectpos, attackedpos[0], attackedpos[1]);

                    Unitdata unit = BattleVal.id2index[string.Format("{0},{1}", attackedpos[0], attackedpos[1])];
                    //撃墜エフェクト
                    StartCoroutine(UnitDefeat.DefeatHandle(unit, defeatEffect, effectpos));

                    //撃墜ボーナス
                    getexp += BattleVal.id2index[string.Format("{0},{1}", attackedpos[0], attackedpos[1])].status.needexp;

                    //ユニットデータを消去
                    ////BattleVal.unitlistから消去
                    for (int i = 0; i < BattleVal.unitlist.Count; i++)
                    {
                        if (BattleVal.unitlist[i].x == unit.x && BattleVal.unitlist[i].y == unit.y)
                        {
                            BattleVal.unitlist.RemoveAt(i);
                            break;
                        }
                    }
                    ////BattleVal.id2indexから消去
                    BattleVal.id2index.Remove(string.Format("{0},{1}", unit.x, unit.y));
                    ////mapdataからユニット情報の削除
                    BattleVal.mapdata[(int)MapdataList.MAPUNIT][unit.y][unit.x] = 0;
                }

                //ユニットセレクトに戻る
                bstate = BATTLE_STATUS.SETVECT;
                if (BattleVal.selectedUnit.team == 0)
                {
                    //経験値を獲得するキャラの場合
                    if (BattleVal.selectedUnit.status.needexp != 0 &&
                        BattleVal.selectedUnit.status.level < 99 && BattleVal.selectedUnit.status.level >= 1)
                    {
                        Operation.AddGetExp(BattleVal.selectedUnit, getexp);
                        BattleVal.status = STATUS.GETEXP;
                    }
                    else
                    {
                        BattleVal.status = STATUS.PLAYER_UNIT_SELECT;
                    }
                }
                else
                {
                    BattleVal.status = STATUS.ENEMY_UNIT_SELECT;
                }
                break;
            }
        }
    }
Пример #2
0
    //Update
    private void Update()
    {
        //戦闘中
        if (BattleVal.status == STATUS.USESKILL)
        {
            int damage = 0;
            switch (bstate)
            {
            case BATTLE_STATUS.SETVECT:
                //キャラの向き調整;攻撃元が発動場所を向く
                Vector3 r0     = new Vector3(); //攻撃元
                Vector3 rSkill = new Vector3();
                Mapclass.TranslateMapCoordToPosition(ref r0, BattleVal.selectX, BattleVal.selectY);
                Mapclass.TranslateMapCoordToPosition(ref rSkill, skillpos[0], skillpos[1]);
                rSkill.y = r0.y;
                BattleVal.selectedUnit.gobj.transform.LookAt(rSkill);

                /*
                 * //攻撃対象
                 * foreach (int[] attackedpos in attackedposlist)
                 * {
                 *  Vector3 r1 = new Vector3(); //攻撃先
                 *  Mapclass.TranslateMapCoordToPosition(ref r1, attackedpos[0], attackedpos[1]);
                 *  Unitdata temp = BattleVal.id2index[string.Format("{0},{1}", attackedpos[0], attackedpos[1])];
                 *  damage = Calc_Damage(BattleVal.selectedUnit, temp);
                 *
                 *  temp.hp -= damage; //ダメージ処理
                 *
                 *  string damagetext = string.Format("{0}", (int)Mathf.Abs(damage));
                 *  int count = 1;
                 *  //ダメージテキストの中心座標
                 *  Vector3 damage_center = Camera.main.WorldToScreenPoint(r1);
                 *
                 *  //テキストの登録
                 *  List<Text> damagenumtmp = new List<Text>();
                 *  foreach (char a in damagetext)
                 *  {
                 *      int num = (int)char.GetNumericValue(a); //数を取得
                 *
                 *      damagenumtmp.Add(Instantiate(damagetextprefab, r1, Quaternion.identity));
                 *      damagenumtmp[count - 1].text = a.ToString();
                 *      //サイズ取得
                 *      damagenumtmp[count - 1].rectTransform.sizeDelta =
                 *          new Vector2(damagenumtmp[count - 1].preferredWidth, damagenumtmp[count - 1].preferredHeight);
                 *      damagenumtmp[count - 1].rectTransform.sizeDelta =
                 *          new Vector2(damagenumtmp[count - 1].preferredWidth, damagenumtmp[count - 1].preferredHeight);
                 *      damagenumtmp[count - 1].transform.SetParent(canvas.transform, false);
                 *      damagenumtmp[count - 1].transform.localPosition = damage_center - new Vector3(canvas.GetComponent<RectTransform>().sizeDelta.x / 2, canvas.GetComponent<RectTransform>().sizeDelta.y / 2, 0);
                 *
                 *      //1桁当たりの文字ブロック
                 *      Vector3 numsize = damagenumtmp[count - 1].GetComponent<RectTransform>().sizeDelta * damagenumtmp[count - 1].GetComponent<RectTransform>().localScale;
                 *      numsize.y = 0;
                 *      numsize.z = 0;
                 *
                 *      damagenumtmp[count - 1].transform.localPosition += (count - 1) * numsize;
                 *      damagenumtmp[count - 1].transform.localPosition += new Vector3(0, 30, 0);
                 *      damagenumtmp[count - 1].color = new Vector4(1, 0, 0, 1);
                 *      if (damage < 0) damagenumtmp[count - 1].color = new Vector4(0.7f,1,0.7f,1);
                 *      damagenumtmp[count - 1].gameObject.SetActive(false);
                 *      count++;
                 *
                 *  }
                 *  damagenum.Add(damagenumtmp);
                 *
                 *  //アニメーション設定
                 *  attackedAnimator.Add(temp.gobj.GetComponent<Animator>());
                 *  if(damage > 0)
                 *      attackedanimstate.Add(hitAnimName);    //共通モーションだと思うが、一部キャラで回復・ダメージが混ざる将来性も加味する
                 *  else
                 *      attackedanimstate.Add(healAnimName); //暫定 Healモーションも作る
                 *  attackedCharaAnimation.Add(temp.gobj.GetComponent<CharaAnimation>());
                 * }
                 */
                nowtime = -1;     //initialize

                //スキルの消費
                selectedskill.Consume(1);
                //行動スタックのクリア(1手戻し不可能に)
                BattleVal.actions.Clear();

                //カットイン演出の場合
                if (selectedskill.is_cutscene)
                {
                    gobjCutin = Instantiate(selectedskill.prefab_cutin);
                    bstate    = BATTLE_STATUS.CUTIN;
                }
                else
                {
                    //通常スキルの場合
                    //スキル使用モーション再生
                    BattleVal.selectedUnit.gobj.GetComponent <Animator>().Play(selectedskill.animname);
                    //state update
                    bstate         = BATTLE_STATUS.EFFECT;
                    skilltext.text = selectedskill.skillname;
                    skillnamePanel.SetActive(true);
                }


                break;

            case BATTLE_STATUS.CUTIN:
                if (gobjCutin.GetComponent <CutinChecker>().cutinFinish)
                {
                    Destroy(gobjCutin);
                    //スキル使用モーション再生
                    BattleVal.selectedUnit.gobj.GetComponent <Animator>().Play(selectedskill.animname);
                    //state update
                    bstate         = BATTLE_STATUS.EFFECT;
                    skilltext.text = selectedskill.skillname;
                    skillnamePanel.SetActive(true);
                }
                break;

            case BATTLE_STATUS.EFFECT:
                //スキル使用モーションが終了し、音声はなり終わったか?

                /*
                 * if (BattleVal.selectedUnit.gobj.GetComponent<Animator>().GetCurrentAnimatorStateInfo(0).normalizedTime >= 1
                 *  && !BattleVal.selectedUnit.gobj.GetComponent<CharaAnimation>().voiceSource.isPlaying
                 *  && !BattleVal.selectedUnit.gobj.GetComponent<CharaAnimation>().seSource.isPlaying)
                 */
                if (!BattleVal.selectedUnit.gobj.GetComponent <Animator>().GetCurrentAnimatorStateInfo(0).shortNameHash.Equals(Animator.StringToHash(selectedskill.animname)) &&
                    !BattleVal.selectedUnit.gobj.GetComponent <CharaAnimation>().voiceSource.isPlaying &&
                    !BattleVal.selectedUnit.gobj.GetComponent <CharaAnimation>().seSource.isPlaying)
                {
                    Vector3 effectcampoint = new Vector3();
                    Mapclass.TranslateMapCoordToPosition(ref effectcampoint, skillpos[0], skillpos[1]);
                    CameraAngle.CameraPoint(effectcampoint);

                    //エフェクト再生へ
                    Vector3 reffect = new Vector3();
                    Mapclass.TranslateMapCoordToPosition(ref reffect, skillpos[0], skillpos[1]);
                    hitEffect = Instantiate(selectedskill.skillefect, reffect, selectedskill.skillefect.transform.rotation);
                    bstate    = BATTLE_STATUS.BATTLE;
                }
                break;

            case BATTLE_STATUS.BATTLE:
                //バトルのアニメーション

                //エフェクトの再生が終了したか?
                if (hitEffect == null)
                {
                    //被弾モーション再生
                    if (nowtime == -1)
                    {
                        //攻撃対象
                        foreach (int[] attackedpos in attackedposlist)
                        {
                            Vector3 r1 = new Vector3();     //攻撃先
                            Mapclass.TranslateMapCoordToPosition(ref r1, attackedpos[0], attackedpos[1]);
                            Unitdata temp = BattleVal.id2index[string.Format("{0},{1}", attackedpos[0], attackedpos[1])];
                            damage = Calc_Damage(BattleVal.selectedUnit, temp);

                            temp.hp -= damage;     //ダメージ処理

                            string damagetext = string.Format("{0}", (int)Mathf.Abs(damage));
                            int    count      = 1;
                            //ダメージテキストの中心座標
                            Vector3 damage_center = Camera.main.WorldToScreenPoint(r1);

                            //テキストの登録
                            List <Text> damagenumtmp = new List <Text>();
                            foreach (char a in damagetext)
                            {
                                int num = (int)char.GetNumericValue(a);     //数を取得

                                damagenumtmp.Add(Instantiate(damagetextprefab, r1, Quaternion.identity));
                                damagenumtmp[count - 1].text = a.ToString();
                                //サイズ取得
                                damagenumtmp[count - 1].rectTransform.sizeDelta =
                                    new Vector2(damagenumtmp[count - 1].preferredWidth, damagenumtmp[count - 1].preferredHeight);
                                damagenumtmp[count - 1].rectTransform.sizeDelta =
                                    new Vector2(damagenumtmp[count - 1].preferredWidth, damagenumtmp[count - 1].preferredHeight);
                                damagenumtmp[count - 1].transform.SetParent(canvas.transform, false);
                                damagenumtmp[count - 1].transform.localPosition = damage_center - new Vector3(canvas.GetComponent <RectTransform>().sizeDelta.x / 2, canvas.GetComponent <RectTransform>().sizeDelta.y / 2, 0);

                                //1桁当たりの文字ブロック
                                Vector3 numsize = damagenumtmp[count - 1].GetComponent <RectTransform>().sizeDelta *damagenumtmp[count - 1].GetComponent <RectTransform>().localScale;
                                numsize.y = 0;
                                numsize.z = 0;

                                damagenumtmp[count - 1].transform.localPosition += (count - 1) * numsize;
                                damagenumtmp[count - 1].transform.localPosition += new Vector3(0, 30, 0);
                                damagenumtmp[count - 1].color = new Vector4(1, 0, 0, 1);
                                if (damage < 0)
                                {
                                    damagenumtmp[count - 1].color = new Vector4(0.7f, 1, 0.7f, 1);
                                }
                                damagenumtmp[count - 1].gameObject.SetActive(false);
                                count++;
                            }
                            damagenum.Add(damagenumtmp);

                            //アニメーション設定
                            attackedAnimator.Add(temp.gobj.GetComponent <Animator>());
                            if (damage > 0)
                            {
                                attackedanimstate.Add(hitAnimName);        //共通モーションだと思うが、一部キャラで回復・ダメージが混ざる将来性も加味する
                            }
                            else
                            {
                                attackedanimstate.Add(healAnimName);     //暫定 Healモーションも作る
                            }
                            attackedCharaAnimation.Add(temp.gobj.GetComponent <CharaAnimation>());
                        }
                        for (int i = 0; i < attackedAnimator.Count; i++)
                        {
                            //Count不一致するかも?
                            attackedAnimator[i].Play(attackedanimstate[i]);
                            if (attackedanimstate[i] == hitAnimName)
                            {
                                attackedCharaAnimation[i].seSource.clip = seDamage;
                            }
                            else
                            {
                                attackedCharaAnimation[i].seSource.clip = seHeal;
                            }
                            attackedCharaAnimation[i].seSource.Play();
                        }
                        //テキスト表示
                        foreach (List <Text> damagenumtmp in damagenum)
                        {
                            foreach (Text a in damagenumtmp)
                            {
                                a.gameObject.SetActive(true);
                            }
                            //CameraAngle.CameraPoint(BattleVal.selectedUnit.gobj.transform.position);
                        }
                        nowtime = 0;
                    }
                    else if (nowtime >= battle_time - Time.deltaTime)
                    {
                        //戦闘後処理
                        bstate = BATTLE_STATUS.AFTERBATTLE;

                        //ダメージ数値のテキストを消す処理
                        foreach (List <Text> damagenumtmp in damagenum)
                        {
                            foreach (Text a in damagenumtmp)
                            {
                                Destroy(a.gameObject);
                            }
                        }
                        //戦闘用のダメージ表示などの判定が終了した後に、カメラの位置の移動
                        CameraAngle.CameraPoint(BattleVal.selectedUnit.gobj.transform.position);
                        //アニメーション関連の初期化
                        attackedAnimator.Clear();
                        attackedanimstate.Clear();
                        attackedCharaAnimation.Clear();
                        damagenum.Clear();
                        skillnamePanel.SetActive(false);
                        //攻撃可能フラグをオフに
                        BattleVal.selectedUnit.atackable = false;
                    }
                    else
                    {
                        //ダメージ数値のテキストを消す処理
                        //damagetext.color -= new Color(0,0,0,Time.deltaTime);
                        foreach (List <Text> damagenumtmp in damagenum)
                        {
                            foreach (Text a in damagenumtmp)
                            {
                                a.color -= new Color(0, 0, 0, Time.deltaTime);
                                a.transform.position += new Vector3(0, 1, 0);
                            }
                        }
                        nowtime += Time.deltaTime;
                    }
                }


                break;

            //戦闘後処理
            case BATTLE_STATUS.AFTERBATTLE:
                //獲得経験値
                int getexp = 10;     //基本値
                //撃墜処理
                foreach (int[] attackedpos in attackedposlist)
                {
                    Unitdata temp = BattleVal.id2index[string.Format("{0},{1}", attackedpos[0], attackedpos[1])];
                    //撃墜処理
                    if (temp.hp <= 0)
                    {
                        Vector3 defeatpos = new Vector3();
                        Mapclass.TranslateMapCoordToPosition(ref defeatpos, attackedpos[0], attackedpos[1]);
                        StartCoroutine(UnitDefeat.DefeatHandle(temp, defeatEffect, defeatpos));

                        //撃墜ボーナス
                        getexp += BattleVal.id2index[string.Format("{0},{1}", attackedpos[0], attackedpos[1])].status.needexp;

                        //ユニットデータを消去
                        ////BattleVal.unitlistから消去
                        for (int i = 0; i < BattleVal.unitlist.Count; i++)
                        {
                            if (BattleVal.unitlist[i].x == temp.x && BattleVal.unitlist[i].y == temp.y)
                            {
                                BattleVal.unitlist.RemoveAt(i);
                                break;
                            }
                        }
                        ////BattleVal.id2indexから消去
                        BattleVal.id2index.Remove(string.Format("{0},{1}", temp.x, temp.y));
                        ////mapdataからユニット情報の削除
                        BattleVal.mapdata[(int)MapdataList.MAPUNIT][temp.y][temp.x] = 0;
                    }
                    if (temp.hp > temp.status.maxhp)
                    {
                        temp.hp = temp.status.maxhp;
                    }
                }

                //必殺技の場合、獲得経験値が1.5倍ボーナス
                if (selectedskill.is_cutscene)
                {
                    getexp = (int)((float)getexp * 1.5f);
                }
                //ユニットセレクトに戻る
                bstate = BATTLE_STATUS.SETVECT;
                if (BattleVal.selectedUnit.team == 0)
                {
                    //経験値を獲得するキャラの場合
                    if (BattleVal.selectedUnit.status.needexp != 0 &&
                        BattleVal.selectedUnit.status.level < 99 && BattleVal.selectedUnit.status.level >= 1)
                    {
                        Operation.AddGetExp(BattleVal.selectedUnit, getexp);
                        BattleVal.status = STATUS.GETEXP;
                    }
                    else
                    {
                        BattleVal.status = STATUS.PLAYER_UNIT_SELECT;
                    }
                }
                else
                {
                    BattleVal.status = STATUS.ENEMY_UNIT_SELECT;
                }
                break;
            }
        }
        else
        {
        }
    }
Пример #3
0
    internal void tryStartNewBattle(int fleetid, int levelid, bool autostart, List<int> backshiplist)
    {
        if (isInBattle())
            {
                MessageBox.Show("已有舰队在战斗中");
                return;
            }
            battel_status = BATTLE_STATUS.PREPARE;
            battle_fleetid = fleetid;
            battle_levelid = levelid;
            battle_node_counter = 0;
            bcounter = 5;

            this.all_battle_ships.Clear();
            this.all_backupships.Clear();
            UserFleet uf = GameData.instance.GetFleetOfId(fleetid);
            if(uf == null)
            {
                MessageBox.Show("战斗开启参数错误,错误的舰队");
                return;
            }
            foreach(int sidbattle in uf.ships)
            {
                all_battle_ships.Add(sidbattle);
            }

            foreach (int i in backshiplist)
            {
                all_backupships.Add(i);
            }
            initing = true;
            autostart_battle = autostart;
            autobattlecheck.Checked = autostart_battle;
            initing = false;
            z.log("[准备开始战斗] " + (autostart ? "并开始自动执行此战斗" : ""));
    }
Пример #4
0
    private bool auto_battle()
    {
        if(!isInBattle())
            {
                if (autostart_battle == true)
                {

                    try
                    {

                        //if (this.bigbrokenhaiyaosuozi.Checked == true)
                        //{
                        //    log("[警告-警告-警告] 大破进击开关已经打开,请立即停止作死....请立即停止作死....",Color.Red);
                        //}

                        var uinfo = GameData.instance.UserInfo;

                        //黑暗炼钢
                        if(darkforge.Checked == true )
                        {
                            UserFleet ff = GameData.instance.GetFleetOfId(1);
                            if(ff == null
                                || GameData.instance.IsFleetInExplore(ff.id)
                                || GameData.instance.IsFleetInRepair(ff.id)
                                 )
                            {
                                initing = true;
                                darkforge.Checked = false;
                                autostart_battle = false;
                                autobattlecheck.Checked = false;
                                initing = false;
                                log("[黑暗炼钢不支持非1号舰队] 请让1号舰队舰娘待机...");
                                return false;
                            }
                            if(GameData.instance.UserInfo.detailInfo.shipNum > darkforgetotalshipnum.Value)
                            {
                                initing = true;
                                darkforge.Checked = false;
                                autostart_battle = false;
                                autobattlecheck.Checked = false;
                                initing = false;
                                log("[黑暗炼钢] 已经炼制太多少女,超过提督设定负荷极限 " +darkforgetotalshipnum.Value + "停止炼钢...");
                                return false;
                            }
                        }

                        if(darkforge.Checked == true)
                        {

                            List<UserShip> forgelist = new List<UserShip>();
                            bool need_new_forger = false;
                            //检查舰队
                            UserFleet forgefleet = GameData.instance.GetFleetOfId(1);
                            UserShip flagship = forgefleet.GetUserShips().First();

                            if(flagship.ship.type != ShipType.Destroyer
                                || flagship.level >5
                                || flagship.ship.star >2
                                || forgefleet.ships.Length >1
                                || flagship.battleProps.oil ==0
                                || flagship.battleProps.ammo == 0
                                || flagship.BrokenType == ShipBrokenType.bigBorken
                                || flagship.IsLocked == true
                                )
                            {
                                need_new_forger = true;
                            }
                            //更新预备队
                            if (need_new_forger == true)
                            {
                                foreach (var dfs in GameData.instance.UserShips)
                                {
                                    if (dfs.IsLocked == false
                                        && dfs.level == 1
                                        && dfs.ship.star < 3
                                        && dfs.ship.type == ShipType.Destroyer
                                        && dfs.BrokenType == ShipBrokenType.noBroken
                                        && dfs.battleProps.oil == dfs.battlePropsMax.oil
                                        && dfs.battleProps.ammo == dfs.battlePropsMax.ammo
                                        && dfs.fleetId == 0
                                        && dfs.IsInRepair == false
                                        )
                                    {
                                        forgelist.Add(dfs);
                                    }
                                }
                                if(forgelist.Count == 0)
                                {
                                    initing = true;
                                    darkforge.Checked = false;
                                    autostart_battle = false;
                                    autobattlecheck.Checked = false;
                                    initing = false;

                                    log("[黑暗炼钢] 缺少祭品,无法炼钢 =>" + forgelist.Count + "枚");
                                    return false;
                                }
                                log("[黑暗炼钢] 预备熔炼少女 =>" + forgelist.Count + "枚");

                                if (forgefleet.ships.Length >1)
                                {
                                    for (int i = 0; i < forgefleet.ships.Length - 1;i++ )
                                    {
                                        log("[黑暗炼钢]" + "移出其他舰队成员");
                                        ServerRequestManager.instance.ChangeFleetShip(forgefleet.id, 0, 0);
                                    }
                                }
                                UserShip forger = forgelist.First();
                                log("[黑暗炼钢]抛弃钢渣少女 => " + tools.helper.getstartstring(flagship.ship.star) + tools.helper.getshiptype(flagship.ship.type) + " "
                                        + flagship.ship.title + " Lv." + flagship.level
                                        + " HP: " + flagship.battleProps.hp + "/" + flagship.battlePropsMax.hp
                                        + " 油:" + flagship.battleProps.oil + " 弹:" + flagship.battleProps.ammo);

                                var ret =ServerRequestManager.instance.ChangeFleetShip(forgefleet.id, forger.id, 0);

                                if(ret!= null && ret.responseData != null && ret.responseData.eid == 0)
                                {
                                    log("[黑暗炼钢] 计划熔炼少女 => " + tools.helper.getstartstring(forger.ship.star) + tools.helper.getshiptype(forger.ship.type) + " "
                                        + forger.ship.title + " Lv." + forger.level
                                        + "HP: " + forger.battleProps.hp + "/" +forger.battlePropsMax.hp
                                        + " 油:" + forger.battleProps.oil + " 弹:" + forger.battleProps.ammo);
                                }
                                else
                                {
                                    initing = true;
                                    darkforge.Checked = false;
                                    autostart_battle = false;
                                    autobattlecheck.Checked = false;
                                    initing = false;

                                    log("[黑暗炼钢] 更换祭品失败,无法炼钢 " );
                                    return false;
                                }
                            }

                            //开始炼钢
                            PVELevel lv = PVEConfigs.instance.GetLevel(101);
                            UserFleet uf = GameData.instance.GetFleetOfId(1);
                            if (lv != null && uf != null && tools.helper.isFleetCanBattle(uf, battlechangetypecombo.SelectedIndex))
                            {
                                battle_fleetid = uf.id;
                                battle_levelid = lv.id;
                                battle_node_counter = 0;
                                battel_status = BATTLE_STATUS.PREPARE;
                                bcounter = 5;
                                var forger = uf.GetUserShips().First();
                                log("[黑暗炼钢] 开始熔炼少女 => " +tools.helper.getstartstring(forger.ship.star)+ tools.helper.getshiptype(forger.ship.type) + " "
                                    + forger.ship.title + " Lv." + forger.level
                                    + " HP: " + forger.battleProps.hp + "/" + forger.battlePropsMax.hp
                                    + " 油:"+ forger.battleProps.oil + " 弹:"+ forger.battleProps.ammo);
                            }
                            else
                            {
                                initing = true;
                                darkforge.Checked = false;
                                autostart_battle = false;
                                autobattlecheck.Checked = false;
                                initing = false;

                                log("[黑暗炼钢] 炼钢参数错误,无法炼钢 ");
                                return false;
                            }
                        }
                        else
                        {
                            //普通
                            if (uinfo.oil < 1000 || uinfo.ammo < 1000 || uinfo.steel < 1000 || uinfo.aluminium < 200)
                            {
                                log("[自动战斗] 油弹钢铝资源过低,休息30分钟...");
                                battle_counter += 3600;
                                return false;
                            }
                            PVELevel lv = PVEConfigs.instance.GetLevel(battle_levelid);
                            UserFleet uf = GameData.instance.GetFleetOfId(battle_fleetid);
                            if(tryFillBackupShips(uf) == true)
                            {
                                return true;
                            }
                            if (lv != null && uf != null && tools.helper.isFleetCanBattle(uf , battlechangetypecombo.SelectedIndex))
                            {
                                battle_fleetid = uf.id;
                                battle_levelid = lv.id;
                                battle_node_counter = 0;
                                battel_status = BATTLE_STATUS.PREPARE;
                                bcounter = 5;
                            }
                        }

                    }
                    catch (System.Exception ex)
                    {
                        return true;
                    }
                }

                return false;
            }
            switch(battel_status)
            {
                case BATTLE_STATUS.PREPARE:
                    if(darkforge.Checked == true)
                    {
                        setBattleStatus(BATTLE_STATUS.SUPPLY);
                        log("[黑暗炼钢] 炼钢少女不许吃喝....");
                    }
                    else if( supplyfleetbeforebattel_check.Checked == false)
                    {
                        setBattleStatus(BATTLE_STATUS.SUPPLY);
                        log("[自动战斗] 黑心提督不许软萌少女吃喝... ≡≡[。。]≡");
                    }
                    else
                    {
                        ServerRequestManager.instance.trySupplyFleet(battle_fleetid);
                    }

                    break;
                case BATTLE_STATUS.SUPPLY:
                    var startret = ServerRequestManager.instance.StartPVELevel(battle_levelid, battle_fleetid, battle_formation);
                    if (startret != null && startret.responseData != null && startret.responseData.eid == 0)
                    {
                        var blevel =PVEConfigs.instance.GetLevel(battle_levelid);
                        this.currentlevel = blevel;
                        this.currentNode = PVEConfigs.instance.GetNode(this.currentlevel.initNodeId);
                        this.currentNodeStatus = new Dictionary<string,int>();
                        this.passedNodes = new List<PVENode>();
                        this.passedNodes.Add(this.currentNode);
                        this.pveLevelEnd = false;
                        this.battle_retry_counter = 10;
                    }

                    break;
                case BATTLE_STATUS.STARTED:
                    if(CanBattle())
                    {
                        var ret =ServerRequestManager.instance.GetNextPVELevelNode();
                        if(ret != null && ret.responseData != null && ret.responseData.eid ==0)
                        {
                            GetNextNodeResponse r = (ret.responseData as GetNextNodeResponse);
                            if(r.node == 0)
                            {
                                log("[自动战斗] 关卡结束,返回港口....");
                                setBattleStatus(BATTLE_STATUS.FINISHED);
                                refreshUIData();
                                return true;
                            }

                            this.currentNode = PVEConfigs.instance.GetNode(r.node);
                            this.currentNodeStatus = r.nodeStatus;
                            this.passedNodes.Add(currentNode);

                            //战斗路点控制
                            if(battle_route.Text!=null && battle_route.Text != "")
                            {
                                char[] shcedule_route = battle_route.Text.ToArray();
                                if(this.passedNodes.Count <= shcedule_route.Length +1)
                                {
                                    string cur_schedule_route_point = shcedule_route[this.passedNodes.Count - 2].ToString().ToUpper();

                                    if (currentNode.flag.ToUpper() != cur_schedule_route_point)
                                    {
                                        string sroute = "";
                                        foreach(var nnn in this.passedNodes)
                                        {
                                            sroute += nnn.flag + " => ";
                                        }
                                        log("[自动战斗-路径控制] 前进路径 " + sroute + "不符合设定路径" + battle_route.Text + "回港重来....");
                                        ServerRequestManager.instance.NotifyPVEBackHome();
                                        break;
                                    }
                                }
                            }

                            if (this.passedNodes.Count > 2)
                            {
                                this.delay_counter += this.secondnodedelaymulti.Value;
                            }
                            else
                            {
                                this.delay_counter += this.battleresultdelayinput.Value;
                            }

                        }
                        else if ( battle_retry_counter >0)
                        {

                            battle_retry_counter--;

                                if (this.passedNodes.Count > 2)
                                {
                                    this.delay_counter += this.secondnodedelaymulti.Value/2;
                                }
                                else
                                {
                                    this.delay_counter += this.battleresultdelayinput.Value;
                                }

                            log("[自动战斗] 提督你肝少女们太快了...服务器响应失败...重试ing... 剩余次数 x " + battle_retry_counter);
                        }
                        else
                        {
                            ServerRequestManager.instance.NotifyPVEBackHome();
                            log("[自动战斗] 服务器娘已经肝倒....回港重来... ");
                        }

                    }else{
                        ServerRequestManager.instance.NotifyPVEBackHome();
                        setBattleStatus(BATTLE_STATUS.FINISHED);
                        log("[舰队有大破需要修理或者修理中] 停止自动战斗....");
                    }
                    break;
                case BATTLE_STATUS.VISIT_NODE:
                    if (currentNode.IsBattleNode == true)
                    {
                        var spyret = ServerRequestManager.instance.SearchPVELevelNode(currentNode.id);
                        if (spyret != null && spyret.responseData != null && spyret.responseData.eid == 0)
                        {
                            SearchEnemyResponse r = (spyret.responseData as SearchEnemyResponse);

                            //避战控制
                            if (avoidbattletext.Text != null && avoidbattletext.Text != "")
                            {
                                char[] shcedule_avoid = avoidbattletext.Text.ToArray();
                                if (this.passedNodes.Count <= shcedule_avoid.Length + 1)
                                {
                                    string cur_schedule_avoid_point = shcedule_avoid[this.passedNodes.Count - 2].ToString();

                                    if (cur_schedule_avoid_point == "1" && r.enemyVO.canSkip == 1)
                                    {
                                        log("[自动战斗-自动回避] 尝试回避 @ " + currentlevel.title + "#" + currentNode.flag);
                                        var skipret = ServerRequestManager.instance.SkipPVELevelNode(currentNode.id);
                                        if (skipret != null && skipret.responseData != null && skipret.responseData.eid == 0)
                                        {
                                            var sret = skipret.responseData as SkipWarResponse;
                                            if(sret.isSuccess == 1)
                                            {
                                                //避战成功,下一个点
                                                log("[自动战斗-自动回避] 回避成功 @ " + currentlevel.title + "#" + currentNode.flag);

                                                setBattleStatus(BATTLE_STATUS.STARTED);
                                                return true;
                                            }
                                            else
                                            {
                                                log("[自动战斗-自动回避] 回避失败 @ " + currentlevel.title + "#" + currentNode.flag);

                                            }
                                        }

                                    }

                                }
                            }
                            //战斗 敌人 舰队组成 控制
                            if (searchenemycase.Text != null && searchenemycase.Text != "")
                            {
                                char[] enemycase = searchenemycase.Text.ToArray();
                                if (this.passedNodes.Count <= enemycase.Length + 1)
                                {
                                    string cur_enemycase_point = enemycase[this.passedNodes.Count - 2].ToString().ToUpper();

                                    if (judge_enemy_case(r.enemyVO.enemyShips, cur_enemycase_point) == dofightinstedofback.Checked)
                                    {
                                        string sroute = "";
                                        foreach (var nnn in this.passedNodes)
                                        {
                                            sroute += nnn.flag + " => ";
                                        }
                                        log("[自动战斗-索敌控制] " + (dofightinstedofback.Checked? "不符合设定索敌条件, 回港重来....":"符合设定 避开 索敌条件, 回港重来....") );
                                        ServerRequestManager.instance.NotifyPVEBackHome();
                                    }
                                }
                            }
                        }
                        else
                        {
                            ServerRequestManager.instance.NotifyPVEBackHome();
                            log("[自动战斗]索敌错误,回港重来...");
                        }
                    }
                    else
                    {
                        log("[自动战斗-索敌控制] 资源点不索敌....");
                        setBattleStatus(BATTLE_STATUS.SPY_NODE);
                    }
                    break;

                case BATTLE_STATUS.SPY_NODE:
                    UserFleet buf = GameData.instance.GetFleetOfId(battle_fleetid);
                    UserShip[] nowshipstatus = new UserShip[buf.ships.Length];
                    for(int iii =0;iii < buf.ships.Length;iii++)
                    {
                        nowshipstatus[iii] = GameData.instance.GetShipById(buf.ships[iii]);
                    }
                    CurrentWarParameters.shipsbeforebattle = nowshipstatus;

                    int nodeformation = -1;
                    if (formation_control.Text != null && formation_control.Text != "")
                    {
                        char[] formation_controlpoint = formation_control.Text.ToArray();
                        if (this.passedNodes.Count <= formation_controlpoint.Length + 1)
                        {
                            string formation_control_point = formation_controlpoint[this.passedNodes.Count - 2].ToString();

                            if (formation_control_point != "")
                            {
                                nodeformation = int.Parse(formation_control_point);
                                if (nodeformation < 1 || nodeformation > 5)
                                {
                                    nodeformation = -1;
                                }
                            }
                        }
                    }
                    log("[自动战斗] 舰队阵型:" + tools.helper.getformationstring(((nodeformation == -1 ? battle_formation : (FleetFormation)nodeformation))));
                    var firstbattl = ServerRequestManager.instance.DealPVELevelNode(currentNode.id,battle_fleetid, nodeformation == -1 ? battle_formation:((FleetFormation)nodeformation));
                    if (firstbattl!= null && firstbattl.responseData!= null && firstbattl.responseData.eid==0)
                    {
                        var respone = (firstbattl.responseData as GetDealNodeResponse);

                        if (respone.pveLevelEnd != null && respone.pveLevelEnd == 1)
                        {
                            this.pveLevelEnd = true;
                        }

                        if (currentNode.IsBattleNode == true)
                        {
                            if (respone.warReport != null)
                            {
                                dealnode_enemyclearornot = respone.warReport.canDoNightWar == 0;
                            }
                            bool extranightwarswitch =false;
                            if(night_war_control.Text!=null && night_war_control.Text != "")
                            {
                                char[] night_war_controlpoint = night_war_control.Text.ToArray();
                                if (this.passedNodes.Count <= night_war_controlpoint.Length + 1)
                                {
                                    string night_war_control_point = night_war_controlpoint[this.passedNodes.Count - 2].ToString();

                                    if (night_war_control_point == "1")
                                    {
                                        extranightwarswitch = true;
                                    }
                                }
                            }

                            CurrentWarParameters.daybattleresult = respone;
                            if (detailbattlelog.Checked == true)
                            {
                                z.log( tools.helper.getDetailDayWarresultstring(respone, battle_fleetid));
                            }

                            if (dealnode_enemyclearornot)
                            {
                                log("[日战胜利!!]少女战利品回收中.. ");
                            }
                            else
                            {
                                log((this.nightwarcheck.Checked||extranightwarswitch) == true ? "[日战失利!!]提督判定大群少女继续夜战..... " : "[日战失利] 提督决定不参与夜战活动..");
                            }
                        }
                        else
                        {
                            if (this.currentNode.nodeType == PVENodeType.addItem)
                            {
                                if(currentNode.gain != null)
                                foreach (var gkv in currentNode.gain)
                                {
                                    log("[自动战斗] 在关卡"+currentlevel.title + " "+currentNode.flag + "点 遇到好心人,获得 " + tools.helper.getresourcetype(gkv.Key)+ " x " + gkv.Value);
                                }
                            }
                            else if (this.currentNode.nodeType == PVENodeType.loseItem)
                            {
                                if(currentNode.loss != null)
                                foreach (var gkv in currentNode.loss)
                                {
                                    log("[自动战斗] 在关卡"+currentlevel.title + " "+currentNode.flag + "点 遇到坏蛋,丢失 " + tools.helper.getresourcetype(gkv.Key)+ " x " + gkv.Value);
                                }
                            }
                            else if (this.currentNode.nodeType == PVENodeType.empty)
                            {
                                log("[自动战斗] 在关卡"+currentlevel.title + " "+currentNode.flag + "点 什么也没有发生............真的");
                            }
                            setBattleStatus(BATTLE_STATUS.STARTED);
                        }

                    }
                    else if (battle_retry_counter >0)
                    {

                        battle_retry_counter--;

                            if (this.passedNodes.Count > 2)
                            {
                                this.delay_counter += this.secondnodedelaymulti.Value;
                            }
                            else
                            {
                                this.delay_counter += this.battleresultdelayinput.Value;
                            }

                        log("[自动战斗] 提督你肝少女们太快了...服务器响应失败...重试ing... 剩余次数 x " + battle_retry_counter);
                    }
                    else
                    {
                        ServerRequestManager.instance.NotifyPVEBackHome();
                        log("[自动战斗] 服务器娘已经肝倒....回港重来... ");
                    }
                    this.delay_counter += this.battleresultdelayinput.Value;
                    break;
                case BATTLE_STATUS.NODE_BATTLE:

                        //夜战额外控制
                            bool dobattleextranightwarswitch =false;
                            if(night_war_control.Text!=null && night_war_control.Text != "")
                            {
                                char[] dobattlenight_war_controlpoint = night_war_control.Text.ToArray();
                                if (this.passedNodes.Count <= dobattlenight_war_controlpoint.Length + 1)
                                {
                                    string dobattlenight_war_control_point = dobattlenight_war_controlpoint[this.passedNodes.Count - 2].ToString();

                                    if (dobattlenight_war_control_point == "1")
                                    {
                                        dobattleextranightwarswitch = true;
                                    }
                                }
                            }

                    var battleret = ServerRequestManager.instance.GetPVEBattleResult( (!dealnode_enemyclearornot) && (battle_do_nightwar==1 ||dobattleextranightwarswitch) , battle_fleetid);
                    if (battleret != null && battleret.responseData != null && battleret.responseData.eid == 0)
                    {
                        z.instance.setBattleStatus(BATTLE_STATUS.BATTLE_RESULT);
                        var battleResult = battleret.responseData as GetBattleResultResponse;

                        if (detailbattlelog.Checked == true)
                        {
                            z.log(tools.helper.getDetailNightWarresultstring(battleResult, battle_fleetid));

                        }
                        z.log("[少女卖肉报酬入手]..." + tools.helper.getwarresultstring(battleResult, battle_fleetid));
                        tools.reporter.reportGotShip(battleResult, battle_fleetid, currentlevel.title, currentNode.flag);

                        //开关开了,5场 s ss 不掉船就停止捞船

                        if(stopbattlewhennodrop_check.Checked == true)
                        {
                            WarResultLevel wrl = (WarResultLevel)battleResult.warResult.resultLevel;
                            if(battleResult.newShipVO!= null && battleResult.newShipVO.Length >0)
                            {
                                nodropcounter = 0;
                            }
                            else if (wrl == WarResultLevel.s || wrl == WarResultLevel.ss)
                            {
                                nodropcounter++;
                                log("[自动战斗] S/SS胜无掉落...计数: " + nodropcounter + "  , 5次后停止自动战斗");

                            }

                            if(nodropcounter >=5 && autobattlecheck.Checked == true)
                            {

                                initing = true;
                                autostart_battle = false;
                                autobattlecheck.Checked = autostart_battle;
                                initing = false;
                            }
                        }

                    }
                    else if (battle_retry_counter >0)
                    {

                        battle_retry_counter--;
                        log("[自动战斗] 提督你肝少女们太快了...服务器响应失败...重试ing... 剩余次数 x " + battle_retry_counter);
                        this.delay_counter += this.battleresultdelayinput.Value;
                    }
                    else
                    {
                        ServerRequestManager.instance.NotifyPVEBackHome();
                        log("[自动战斗] 服务器娘已经肝倒....回港重来... ");
                    }
                    if ((!dealnode_enemyclearornot) && (battle_do_nightwar == 1 || dobattleextranightwarswitch))
                    {
                        this.delay_counter += this.battleresultdelayinput.Value;
                    }
                    break;
                case BATTLE_STATUS.BATTLE_RESULT:
                    //todo think logic
                    battle_node_counter++;
                    if(this.pveLevelEnd == true)
                    {
                        log("[自动战斗] 关卡结束,返回港口....");
                        setBattleStatus(BATTLE_STATUS.FINISHED);
                        refreshUIData();
                        return true;
                    }
                    if (battle_node_counter >= this.battlenodenuminput.Value)
                    {
                        ServerRequestManager.instance.NotifyPVEBackHome();
                    }
                    else
                    {
                        setBattleStatus(BATTLE_STATUS.STARTED);
                    }

                    refreshUIData();
                    break;

                default:
                    return false;
                    break;
            }
            return true;
    }
Пример #5
0
 public void setBattleStatus(BATTLE_STATUS s)
 {
     battel_status = s;
 }