Example #1
0
        public void Clear()
        {
            LastUpdated          = DateTime.MinValue;
            LastSlowUpdate       = DateTime.MinValue;
            LastVerySlowUpdate   = DateTime.MinValue;
            IsIncapacitated      = false;
            IsRooted             = false;
            IsInTown             = false;
            CurrentHealthPct     = 0;
            PrimaryResource      = 0;
            PrimaryResourcePct   = 0;
            SecondaryResource    = 0;
            SecondaryResourcePct = 0;
            Position             = Vector3.Zero;
            MyDynamicID          = -1;
            Level       = -1;
            ActorClass  = ActorClass.Invalid;
            BattleTag   = String.Empty;
            SceneId     = -1;
            LevelAreaId = -1;
            Scene       = new SceneInfo()
            {
                SceneId    = -1,
                LastUpdate = DateTime.UtcNow
            };

            Summons = new SummonInfo();
        }
Example #2
0
 private void OnTriggerEnter(Collider collision)
 {
     if (collision.gameObject.GetComponent <EnemyInformation>())
     {
         EnemyInformation enemy = collision.gameObject.GetComponent <EnemyInformation>();
         enemy.PlayerHealth -= damage;
         //Call PopupDamage Function.
         //Debug.Log("Hit Enemy");
         //text = GameObject.FindGameObjectWithTag("UiManager").GetComponent<FloatingText>();
         //text.DamageText(gameObject.transform.position, damage, collision.gameObject);
         GameObject temp = Instantiate(Resources.Load <GameObject>("FloatingText/TextPrefab"));
         temp.GetComponent <TextMesh>().text = damage.ToString();
         temp.transform.position             = new Vector3(collision.transform.position.x, GameObject.FindGameObjectWithTag("Player").transform.position.y + 3.0f, collision.transform.position.z);
         Destroy(temp, 0.6f);
         Destroy(this.gameObject);
     }
     else if (collision.gameObject.tag == "Player")
     {
         Debug.Log(this.gameObject);
         GameInformation.PlayerHealth -= damage;
         Destroy(this.gameObject);
     }
     else if (collision.gameObject.tag == "Summon")
     {
         SummonInfo summon = collision.GetComponent <SummonsAi>().summon;
         summon.SummonHealth -= damage;
         Debug.Log(summon.SummonHealth);
         Destroy(this.gameObject);
     }
     //Destroy(this.gameObject);
 }
Example #3
0
    public string attackProjector = "RangedAttackProjector"; // going to be more then one projector later for certian abilites
    // No heal projector in this one
    public HealingAttackTurret()
    {
        info = new SummonInfo();
        SummonAbilites abilites = new SummonAbilites(info);

        info.HealingCalc(healingDone);
        //Debug.Log(info.HealAmount);
    }
Example #4
0
 void CalculateSummonStats(SummonInfo info)
 {
     info.SummonHealth = GameInformation.PlayerHealth / 2.5f;
     info.SummonEnergy = GameInformation.PlayerEnergy;
     info.CritChance   = GameInformation.CritChance + 0.05f;
     info.SummonShield = 0;
     info.CritDamage   = GameInformation.CritDamage;
 }
Example #5
0
 private void OnTriggerEnter(Collider collision)
 {
     // <- gotta check for max hp
     if (collision.gameObject.GetComponent <EnemyInformation>() && user.GetComponent <EnemyInformation>())
     {
         EnemyInformation enemy = collision.gameObject.GetComponent <EnemyInformation>();
         if (enemy.PlayerHealth + heal > enemy.PlayerMaxHealth)
         {
             enemy.PlayerHealth = enemy.PlayerMaxHealth;
         }
         else
         {
             enemy.PlayerHealth += heal;
         }
         text = GameObject.FindGameObjectWithTag("UiManager").GetComponent <FloatingText>();
         text.DamageText(gameObject.transform.position, heal, collision.gameObject, Color.green);
         Destroy(this.gameObject);
     }
     else if (collision.gameObject.tag == "Player")
     {
         Debug.Log(this.gameObject);
         if (GameInformation.PlayerHealth + heal > GameInformation.PlayerMaxHp)
         {
             GameInformation.PlayerHealth = GameInformation.PlayerMaxHp;
         }
         else
         {
             GameInformation.PlayerHealth += heal;
         }
         Debug.Log("Healed: " + heal);
         Destroy(this.gameObject);
     }
     else if (collision.gameObject.tag == "Summon")
     {
         SummonInfo summon = collision.GetComponent <SummonsAi>().summon;
         if (summon.SummonHealth + heal > summon.SummonMaxHealth)
         {
             summon.SummonHealth = summon.SummonMaxHealth;
         }
         else
         {
             summon.SummonHealth += heal;
         }
         if (summon.SummonHealth > summon.SummonMaxHealth)
         {
             summon.SummonHealth = summon.SummonMaxHealth;
         }
         text = GameObject.FindGameObjectWithTag("UiManager").GetComponent <FloatingText>();
         text.DamageText(gameObject.transform.position, heal, collision.gameObject, Color.green);
         Debug.Log(summon.SummonHealth);
         Destroy(this.gameObject);
     }
     //Destroy(this.gameObject);
 }
Example #6
0
    public static void SetMultiEnemyDeck(int number, int level)
    {
        if (4 <= Setting.EnemyDeck.Count)
        {
            Setting.EnemyDeck.Clear();
        }

        SummonInfo summonInfo = SummonInfoManager.summonInfo[number];

        Setting.EnemyDeck.Add(GetUnitData(summonInfo, level));

        UnityEngine.Debug.Log("EnemyDeck.Add");
    }
Example #7
0
 private static UnitData GetUnitData(SummonInfo summonInfo, int level)
 {
     return(new UnitData(summonInfo.number,
                         level,
                         summonInfo.pattern,
                         summonInfo.fieldType,
                         summonInfo.attackType,
                         summonInfo.colliderCenter,
                         summonInfo.colliderSize,
                         summonInfo.attackSpeed,
                         summonInfo.airDamage * summonInfo.growthRateOfAirDam * level,
                         summonInfo.groundDamage * summonInfo.growthRateOfGroundDam * level,
                         summonInfo.health * summonInfo.growthRateOfHealth * level,
                         summonInfo.armor * summonInfo.growthRateOfArmor * level,
                         summonInfo.isBuff,
                         ConstructBuff(summonInfo.number),
                         SummonSpriteManager.sprite[summonInfo.number]
                         ));
 }
Example #8
0
    public bool    AddSummon(SummonInfo info, int iUniqueID)
    {
        Hashtable     table  = m_summonInfo[info.summonID] as Hashtable;
        string        prefab = table["SummonEffect"] as string;
        ResLoadParams param  = new ResLoadParams();

        param.pos       = info.pos;
        param.scale     = info.scale;
        param.rot       = info.rotate;
        param.userdata0 = info.summonID;
        param.userdata1 = info.userdata;
        param.userdata2 = info.skillID;
        param.userdata3 = info.bParabola;
        param.userdata4 = info.bFly;
        param.userdata5 = info.targetPos;
        param.petInt    = iUniqueID;

        sdResourceMgr.Instance.LoadResourceImmediately(prefab, OnLoadSummon, param);
        return(true);
    }
Example #9
0
    void SummonWindow(SummonInfo info)
    {
        Vector2 StartSize = ComputeSize(info.startSize);
        Vector2 EndSize   = ComputeSize(info.endSize);

        float availableSpaceX = ScreenCanvas.sizeDelta.x - Margin.x * 2 - Mathf.Max(StartSize.x, EndSize.x);

        Vector2 Pos = new Vector2(0, 0);

        for (int i = 0; i < info.scaler.Length; ++i)
        {
            if (info.pos != 0)
            {
                Pos.x = availableSpaceX * (info.scaler[i] / ((float)info.pos + 1));
            }
            else
            {
                Pos.x = 0.0f;
            }

            CreatePopUp(Pos, StartSize).AnimateResize(info.resizeTime, EndSize);
        }
    }
    // Use this for initialization
    void Start()
    {
        foreach (var kv in scrollsSprite)
        {
            CurrencyTypes         currency     = kv.Key;
            SummonInfo            info         = kv.Value;
            SummonButtonContainer summonChoice = this.Clone <SummonButtonContainer>(BtnSummonTemplate);

            summonChoice.btn.onClick.AddListener(() => BtnAction_Summon(summonChoice));
            summonChoice.label.text  = info.label + " SUMMON";
            summonChoice.icon.sprite = info.sprite;
            summonChoice.currency    = currency;
            summonChoice.summonType  = CurrencyManager.ConvertCurrencyToSummonType(currency);

            summonChoice.UpdateCounter();

            _summonButtons.Add(summonChoice);
        }

        BtnSummonTemplate.SetActive(false);

        PlayerManager.signals.OnChangedCurrency += OnChangedCurrency;
    }
Example #11
0
 public void SetSummonInfo(SummonInfo sum)
 {
     summon = sum;
 }
Example #12
0
    public static bool    Do(sdActorInterface actor, OpParameter param)
    {
        Hashtable table = sdConfDataMgr.Instance().GetTable("operation");

        Operation op = (Operation)table[param.id];

        switch (op.byOperationType)
        {
        case (int)HeaderProto.EOpreationType.OPREATION_TYPE_NONE: {
            return(true);
        }

        case (int)HeaderProto.EOpreationType.OPREATION_TYPE_FOREVER: {
            if (param.doType == (int)HeaderProto.EDoOperationType.DO_OPERATION_TYPE_START ||
                param.doType == (int)HeaderProto.EDoOperationType.DO_OPERATION_TYPE_ADD
                )
            {
                if (actor == null)
                {
                    return(false);
                }
                Hashtable dst = actor.GetProperty();
                switch (op.dwOperationPara1)
                {
                case (int)HeaderProto.EOpreationFlag.OPREATION_FLAG_ADD: {
                    AddProperty(actor, dst, op, param);
                } break;

                case (int)HeaderProto.EOpreationFlag.OPREATION_FLAG_REDUCE: {
                    param.data = -param.data;
                    AddProperty(actor, dst, op, param);
                } break;

                case (int)HeaderProto.EOpreationFlag.OPREATION_FLAG_SET: {} break;
                }
            }
        } break;

        case (int)HeaderProto.EOpreationType.OPREATION_TYPE_STATE: {
            if (actor == null)
            {
                return(false);
            }
            if (param.doType == (int)HeaderProto.EDoOperationType.DO_OPERATION_TYPE_START)
            {
                HeaderProto.ECreatureActionState state = (HeaderProto.ECreatureActionState)param.data;
                actor.AddDebuffState(state);
            }
            else if (param.doType == (int)HeaderProto.EDoOperationType.DO_OPERATION_TYPE_REMOVE)
            {
                HeaderProto.ECreatureActionState state = (HeaderProto.ECreatureActionState)param.data;
                actor.RemoveDebuffState(state);
            }
        } break;

        case (int)HeaderProto.EOpreationType.OPREATION_TYPE_ADD_BUFF: {
            if (actor == null)
            {
                return(false);
            }
            actor.AddBuff(param.data, param.data1, param.attackActor);
        } break;

        case (int)HeaderProto.EOpreationType.OPREATION_TYPE_DISPEL: {
            if (actor == null)
            {
                return(false);
            }
            if (op.dwOperationPara0 == 0)
            {
                actor.RemoveBuffbyClassType(op.dwOperationPara1);
            }
            else if (op.dwOperationPara0 == 1)
            {
                actor.RemoveBuff(op.dwOperationPara1, op.dwOperationPara2);
            }
            else if (op.dwOperationPara0 == 2)
            {
                actor.RemoveBuffbyID(param.data);
            }
            else if (op.dwOperationPara0 == 3)
            {
                actor.RemoveBuffbyProperty(op.dwOperationPara1);
            }
            else if (op.dwOperationPara0 == 4)
            {
            }
            else if (op.dwOperationPara0 == 5)
            {
                actor.RemoveAllBuff();
            }
        } break;

        case (int)HeaderProto.EOpreationType.OPREATION_TYPE_DO_BUFF_DAMAGE:
        {
            if (param.targetActor == null)
            {
                return(false);
            }
            Hashtable action = sdConfDataMgr.Instance().m_BuffAction[param.data]       as Hashtable;

            int strikeType = (int)action["byAoeAreaType"];
            int nCombo     = 0;
            if (strikeType == 0)
            {
                HeaderProto.ESkillEffect skilleffect = HeaderProto.ESkillEffect.SKILL_EFFECT_DAMAGE_HP;
                if (action.ContainsKey("bySkillEffect"))
                {
                    skilleffect = (HeaderProto.ESkillEffect)(action["bySkillEffect"]);
                }
                action["ParentID"] = 0;
                DamageResult dr = sdGameLevel.instance.battleSystem.testHurt(param.attackActor,
                                                                             action,
                                                                             param.targetActor,
                                                                             0,
                                                                             skilleffect);
                if (Bubble.IsHurtOther(dr.bubbleType))
                {
                    nCombo++;
                }
            }
            else
            {
                nCombo = sdGameLevel.instance.battleSystem.DoSDAttack(
                    param.attackActor,
                    action,
                    param.targetActor.transform.position,
                    0,
                    null);
            }
            if (param.attackActor == sdGameLevel.instance.mainChar && nCombo > 0)
            {
                sdUICharacter.Instance.ShowComboWnd(true, nCombo);
            }
        } break;

        case (int)HeaderProto.EOpreationType.OPREATION_TYPE_CLEAR_SKILL_COOLDOWN:
        {
            sdGameActor gameActor = (sdGameActor)actor;
            if (op.dwOperationPara0 == 0)                    //某个技能aa
            {
                int     skillID = param.data / 100;
                sdSkill skill   = gameActor.skillTree.getSkill(skillID);
                if (skill != null)
                {
                    if (op.dwOperationPara1 == 0)
                    {
                        skill.skillState = (int)sdSkill.State.eSS_OK;
                    }
                    else if (op.dwOperationPara1 == 1)
                    {
                        int time = CalculateSkillCoolDown(op.dwOperationPara2, op.dwOperationPara3, skill.GetCD(), param.data1);
                        sdUICharacter.Instance.SetShortCutCd(param.data, time, true);
                        skill.cooldown = time;
                        skill.Setct(0.0f);
                    }
                }
            }
            else if (op.dwOperationPara0 == 1)                   //某种形态的技能aa
            {
                foreach (DictionaryEntry de in gameActor.skillTree.AllSkill)
                {
                    sdSkill skill = de.Value as sdSkill;
                    if (skill.skillProperty.ContainsKey("byShape"))
                    {
                        int byShape = (int)skill.skillProperty["byShape"];
                        if (byShape == param.data)
                        {
                            if (op.dwOperationPara1 == 0)
                            {
                                skill.skillState = (int)sdSkill.State.eSS_OK;
                            }
                            else if (op.dwOperationPara1 == 1)
                            {
                                int time = CalculateSkillCoolDown(op.dwOperationPara2, op.dwOperationPara3, skill.cooldown, param.data1);
                                sdUICharacter.Instance.SetShortCutCd(skill.id, time, true);
                                skill.cooldown = time;
                                skill.Setct(0.0f);
                            }
                        }
                    }
                }
            }
            else if (op.dwOperationPara0 == 2)                   //所有技能aa
            {
                foreach (DictionaryEntry de in gameActor.skillTree.AllSkill)
                {
                    sdSkill skill = de.Value as sdSkill;
                    if (op.dwOperationPara1 == 0)
                    {
                        skill.skillState = (int)sdSkill.State.eSS_OK;
                    }
                    else if (op.dwOperationPara1 == 1)
                    {
                        int time = CalculateSkillCoolDown(op.dwOperationPara2, op.dwOperationPara3, skill.cooldown, param.data1);
                        sdUICharacter.Instance.SetShortCutCd(skill.id, time, true);
                        skill.cooldown = time;
                        skill.Setct(0.0f);
                    }
                }
            }
        } break;

        case (int)HeaderProto.EOpreationType.OPREATION_TYPE_SUMMON_MONSTER:                  //operator.txt byOperationType
        {
            iSummonUniqueID++;
            if (op.dwOperationPara0 == 1)
            {
                int     iAngle       = op.dwOperationPara2;
                int     iSummonID    = param.data;
                int     iSommonCount = param.data1;
                int     skillID      = param.data2;
                Vector3 v            = param.attackActor.GetDirection();
                v.y = 0.0f;
                v.Normalize();
                Quaternion tempQ = Quaternion.FromToRotation(new Vector3(0, 0, 1), v);
                if (v.z < -0.9999f)
                {
                    tempQ = Quaternion.AngleAxis(180.0f, new Vector3(0, 1, 0));
                }

                List <sdActorInterface> lstActor = null;
                if (op.dwOperationPara3 == 1 || op.dwOperationPara3 == 2)                        //1 方向并跟踪目标  2.方向不跟踪aaa
                {
                    List <sdActorInterface> actorList = null;
                    if (iAngle == 360)
                    {
                        actorList = sdGameLevel.instance.actorMgr.FindActor(
                            param.attackActor,
                            HeaderProto.ESkillObjType.SKILL_OBJ_ENEMY,
                            param.attackActor.transform.position,
                            Vector3.zero,
                            1,
                            0,
                            15.0f,
                            true);
                    }
                    else
                    {
                        actorList = sdGameLevel.instance.actorMgr.FindActor(
                            param.attackActor,
                            HeaderProto.ESkillObjType.SKILL_OBJ_ENEMY,
                            param.attackActor.transform.position,
                            param.attackActor.GetDirection(),
                            5,
                            iAngle,
                            15.0f,
                            true);
                    }
                    lstActor = sdGameLevel.instance.actorMgr.SortActor(param.attackActor.transform.position, actorList);
                }

                int i = 0;
                if (op.dwOperationPara3 == 1)
                {
                    for (; i < iSommonCount && i < lstActor.Count; i++)
                    {
                        sdActorInterface target  = lstActor[i];
                        SummonInfo       sumInfo = new SummonInfo();
                        Vector3          vDir    = target.transform.position - param.attackActor.transform.position;
                        vDir.y = 0.0f;
                        vDir.Normalize();
                        if (v.z < -0.99999f)
                        {
                            sumInfo.rotate = Quaternion.AngleAxis(180.0f, new Vector3(0, 1, 0));
                        }
                        else
                        {
                            sumInfo.rotate = Quaternion.FromToRotation(new Vector3(0, 0, 1), vDir);
                        }
                        sumInfo.pos      = param.trans.position;
                        sumInfo.userdata = target;
                        sumInfo.summonID = iSummonID;
                        sumInfo.skillID  = skillID;
                        param.attackActor.AddSummon(sumInfo, iSummonUniqueID);
                    }
                }
                else if (op.dwOperationPara3 == 2)
                {
                    for (; i < iSommonCount && i < lstActor.Count; i++)
                    {
                        sdActorInterface target = lstActor[i];
                        Vector3          vDir   = target.transform.position - param.attackActor.transform.position;
                        vDir.y = 0.0f;
                        vDir.Normalize();
                        SummonInfo sumInfo = new SummonInfo();
                        if (v.z < -0.99999f)
                        {
                            sumInfo.rotate = Quaternion.AngleAxis(180.0f, new Vector3(0, 1, 0));
                        }
                        else
                        {
                            sumInfo.rotate = Quaternion.FromToRotation(new Vector3(0, 0, 1), vDir);
                        }
                        sumInfo.pos      = param.trans.position;
                        sumInfo.summonID = iSummonID;
                        sumInfo.skillID  = skillID;
                        param.attackActor.AddSummon(sumInfo, iSummonUniqueID);
                    }
                }
                if (i < iSommonCount)
                {
                    if (iAngle == 360)
                    {
                        float iPerAngle = (float)iAngle / (float)(iSommonCount - i);
                        for (int j = 0; j < iSommonCount - i; j++)
                        {
                            SummonInfo sumInfo = new SummonInfo();
                            sumInfo.rotate   = Quaternion.AngleAxis(iPerAngle * j, new Vector3(0, 1, 0)) * tempQ;
                            sumInfo.pos      = param.trans.position;
                            sumInfo.summonID = iSummonID;
                            sumInfo.skillID  = skillID;
                            param.attackActor.AddSummon(sumInfo, iSummonUniqueID);
                        }
                    }
                    else
                    {
                        float iPerAngle   = (float)iAngle / (float)(iSommonCount - i + 1);
                        float iAngleStart = -iAngle * 0.5f + iPerAngle;
                        for (int j = 0; j < iSommonCount - i; j++)
                        {
                            SummonInfo sumInfo = new SummonInfo();
                            sumInfo.rotate   = Quaternion.AngleAxis(iAngleStart + iPerAngle * j, new Vector3(0, 1, 0)) * tempQ;
                            sumInfo.pos      = param.trans.position;
                            sumInfo.summonID = iSummonID;
                            sumInfo.skillID  = skillID;
                            param.attackActor.AddSummon(sumInfo, iSummonUniqueID);
                        }
                    }
                }
            }
        } break;

        case (int)HeaderProto.EOpreationType.OPREATION_TYPE_TELEPORT:
        {
            TeleportInfo tpInfo = new TeleportInfo();
            tpInfo.Type = op.dwOperationPara0;
            tpInfo.PlayActionProbality = op.dwOperationPara1;
            tpInfo.TeleportState       = (op.dwOperationPara2 == 1);
            tpInfo.MoveSpeed           = (float)param.data * 0.001f;
            tpInfo.MoveTime            = (float)param.data1 * 0.001f;
            tpInfo.castActor           = param.attackActor;
            tpInfo.castCenter          = param.attackActor.transform.position;
            if (actor != null)
            {
                actor.SetTeleportInfo(tpInfo);
            }
            else
            {
                float dis = tpInfo.MoveSpeed * tpInfo.MoveTime;
                List <sdActorInterface> lstActor = sdGameLevel.instance.actorMgr.FindActor(param.attackActor, HeaderProto.ESkillObjType.SKILL_OBJ_ENEMY, tpInfo.castCenter, Vector3.zero, 1, 0, dis, true);
                if (lstActor != null)
                {
                    foreach (sdActorInterface a in lstActor)
                    {
                        a.SetTeleportInfo(tpInfo);
                    }
                }
            }
        } break;

        case (int)HeaderProto.EOpreationType.OPREATION_TYPE_DOACTION:
        {
            sdGameActor gameActor = (sdGameActor)(param.attackActor);
            sdBaseState baseState = (sdBaseState)gameActor.logicTSM.states[param.data];
            if (baseState != null)
            {
                int nCombo = sdGameLevel.instance.battleSystem.DoSDAttack(gameActor, baseState.stateData, gameActor.transform.position, 0, baseState);
                baseState.playEffectNow(gameActor);
                baseState.PlayAudioNow(gameActor);
                if (gameActor == sdGameLevel.instance.mainChar && nCombo > 0)
                {
                    sdUICharacter.Instance.ShowComboWnd(true, nCombo);
                }
            }
        }
        break;

        case (int)HeaderProto.EOpreationType.OPREATION_TYPE_COMBO:
        {
            if (param.attackActor.GetActorType() == ActorType.AT_Player)
            {
                sdGameActor gameActor = (sdGameActor)(param.attackActor);
                sdBaseState baseState = (sdBaseState)gameActor.logicTSM.states[param.data];
                if (baseState != null)
                {
                    baseState.bEnable = (param.data1 == 1);
                }
            }
        }
        break;

        case (int)HeaderProto.EOpreationType.OPREATION_TYPE_ATTACKGETHP:
        {
            AttackRestore data = new AttackRestore();
            data.upperLimit  = op.dwOperationPara1 * 0.0001f;
            data.restoreHp   = (op.dwOperationPara0 == 0);
            data.monsterType = op.dwOperationPara2;
            data.ratio       = param.data * 0.0001f;
            data.actionID    = param.data1;
            sdGameActor gameActor = (sdGameActor)(param.attackActor);
            gameActor.AddAttackRestore(data);
        }
        break;

        case (int)HeaderProto.EOpreationType.OPERATION_TYPE_SUMMON:
        {
            iSummonUniqueID++;
            switch (op.dwOperationPara0)
            {
            case 0:
            case 1:
                PointSummon(actor, param, op);
                break;

            case 2:
            case 3:
                RandomSummon(actor, param, op);
                break;

            case 4:
            case 5:
                RoundSummon(actor, param, op);
                break;
            }
        }
        break;

        case (int)HeaderProto.EOpreationType.OPERATION_TYPE_HIDESHOW:
        {
            HideShowInfo info = new HideShowInfo();
            info.actor     = param.attackActor;
            info.fHideTime = param.data * 0.001f;
            info.fDistance = param.data1 * 0.001f;
            sdHideShowMgr.Instance.AddActor(info);
        }
        break;

        case (int)HeaderProto.EOpreationType.OPERATION_TYPE_FLASH:
        {
            float fFront = 1.0f;
            if ((op.dwOperationPara0 & 1) == 1)
            {
                fFront = -1.0f;
            }
            float fDistance = (float)op.dwOperationPara3 * 0.001f;

            sdActorInterface castActor = param.attackActor;

            int playerLayer  = 1 << LayerMask.NameToLayer("Player");
            int petLayer     = 1 << LayerMask.NameToLayer("Pet");
            int monsterLayer = 1 << LayerMask.NameToLayer("Monster");
            int mask         = ~(playerLayer | petLayer | monsterLayer);

            switch (op.dwOperationPara0)
            {
            case 0:
            case 1:
            {
                fDistance = (float)param.data1 * 0.001f;
                Vector3 dir = castActor.GetDirection() * fFront;
                Vector3 pos = castActor.transform.position;



                int   oldLayer = castActor.gameObject.layer;
                int[] layer    = new int[] {
                    LayerMask.NameToLayer("Monster"),
                    LayerMask.NameToLayer("Pet"),
                    LayerMask.NameToLayer("Player")
                };
                bool[] oldcollision = new bool[3];
                for (int i = 0; i < 3; i++)
                {
                    oldcollision[i] = Physics.GetIgnoreLayerCollision(oldLayer, layer[i]);
                    Physics.IgnoreLayerCollision(oldLayer, layer[i]);
                }

                ((sdGameActor)castActor).moveInternal(dir * fDistance / Time.deltaTime);

                for (int i = 0; i < 3; i++)
                {
                    Physics.IgnoreLayerCollision(oldLayer, layer[i], oldcollision[i]);
                }
                castActor.gameObject.layer = oldLayer;

                Vector3 newPos = castActor.transform.position;

                sdGameLevel.instance.actorMgr.ManualCheckTrigger((sdGameActor)castActor, pos, newPos - pos);

                if (param.data > 0)
                {
                    HideShowInfo info = new HideShowInfo();
                    info.actor     = castActor;
                    info.fHideTime = param.data * 0.001f;
                    info.fDistance = 0.0f;
                    sdHideShowMgr.Instance.AddActorNoRandomPosition(info);
                }
            }
            break;

            case 2:
            case 3:
            {
                float fResearchDistance           = param.data1 * 0.001f;
                int   iAngle                      = op.dwOperationPara1;
                List <sdActorInterface> actorList = null;
                if (iAngle == 360)
                {
                    actorList = sdGameLevel.instance.actorMgr.FindActor(
                        param.attackActor,
                        HeaderProto.ESkillObjType.SKILL_OBJ_ENEMY,
                        param.attackActor.transform.position,
                        Vector3.zero,
                        1,
                        0,
                        fResearchDistance,
                        true);
                }
                else
                {
                    actorList = sdGameLevel.instance.actorMgr.FindActor(
                        param.attackActor,
                        HeaderProto.ESkillObjType.SKILL_OBJ_ENEMY,
                        param.attackActor.transform.position,
                        param.attackActor.GetDirection(),
                        5,
                        iAngle,
                        fResearchDistance,
                        true);
                }

                sdActorInterface targetActor = null;
                if (actorList != null)
                {
                    if (actorList.Count > 0)
                    {
                        if (op.dwOperationPara2 == 0)
                        {
                            targetActor = actorList[0];
                            float min = (castActor.transform.position - targetActor.transform.position).sqrMagnitude;
                            for (int i = 1; i < actorList.Count; i++)
                            {
                                Vector3 v = castActor.transform.position - actorList[i].transform.position;
                                if (v.sqrMagnitude < min)
                                {
                                    min         = v.sqrMagnitude;
                                    targetActor = actorList[i];
                                }
                            }
                        }
                        else
                        {
                            int index = Random.Range(0, actorList.Count);
                            if (index >= actorList.Count)
                            {
                                index = 0;
                            }
                            targetActor = actorList[index];
                        }
                    }
                }

                if (targetActor != null)
                {
                    if (fDistance < targetActor.getRadius() + castActor.getRadius())
                    {
                        fDistance = targetActor.getRadius() + castActor.getRadius();
                    }
                    Vector3    dir = targetActor.GetDirection() * fFront;
                    Vector3    pos = targetActor.transform.position + new Vector3(0, 0.1f, 0);
                    RaycastHit hit;
                    if (Physics.Raycast(pos, dir, out hit, fDistance * 2, mask))
                    {
                        if (hit.distance < fDistance)
                        {
                            fDistance = hit.distance;
                        }
                    }

                    castActor.transform.position = targetActor.transform.position + dir * fDistance;

                    dir.y = 0.0f;
                    dir.Normalize();

                    ((sdGameActor)castActor).spinToTargetDirection(-dir, true);
                    if (param.data > 0)
                    {
                        HideShowInfo info = new HideShowInfo();
                        info.actor     = castActor;
                        info.fHideTime = param.data * 0.001f;
                        info.fDistance = 0.0f;
                        sdHideShowMgr.Instance.AddActorNoRandomPosition(info);
                    }
                }
            } break;
            }
        }
        break;
        }
        return(true);
    }
Example #13
0
        private SummonInfo GetPlayerSummonCounts()
        {
            var info = new SummonInfo();

            // todo, create a units only collection in ActorsCache so we dont have to iterate all RActors.

            foreach (var actor in Core.Actors.Actors)
            {
                if (!actor.IsSummonedByPlayer)
                {
                    continue;
                }

                var actorSnoId = actor.ActorSnoId;
                var distance   = actor.Distance;

                switch (ActorClass)
                {
                case ActorClass.Monk:
                    if (GameData.MysticAllyIds.Contains(actorSnoId))
                    {
                        info.MysticAllyCount++;
                    }
                    break;

                case ActorClass.DemonHunter:
                    if (GameData.DemonHunterPetIds.Contains(actorSnoId))
                    {
                        info.DHPetsCount++;
                    }
                    if (GameData.DemonHunterSentryIds.Contains(actorSnoId) && distance < 60f)
                    {
                        info.DHSentryCount++;
                    }
                    break;

                case ActorClass.Wizard:
                    if (GameData.WizardHydraIds.Contains(actorSnoId) && distance < 60f)
                    {
                        info.HydraCount++;
                    }
                    break;

                case ActorClass.Witchdoctor:
                    if (GameData.SpiderPetIds.Contains(actorSnoId) && distance < 100f)
                    {
                        info.SpiderPetCount++;
                    }
                    if (GameData.GargantuanIds.Contains(actorSnoId))
                    {
                        info.GargantuanCount++;
                    }
                    if (GameData.ZombieDogIds.Contains(actorSnoId))
                    {
                        info.ZombieDogCount++;
                    }
                    if (GameData.FetishArmyIds.Contains(actorSnoId))
                    {
                        info.FetishArmyCount++;
                    }
                    break;

                case ActorClass.Barbarian:
                    if (GameData.AncientIds.Contains(actorSnoId))
                    {
                        info.AncientCount++;
                    }
                    break;
                }
            }

            return(info);
        }
Example #14
0
        internal void UpdateFastChangingData()
        {
            var commonData = _me.CommonData;

            if (_me.IsInCombat)
            {
                LastInCombatTime = DateTime.UtcNow;
            }
            IsInParty                       = ZetaDia.Service.Party.NumPartyMembers > 1;
            AcdId                           = _me.ACDId;
            RActorGuid                      = _me.RActorId;
            LastUpdated                     = DateTime.UtcNow;
            IsInTown                        = GameData.TownLevelAreaIds.Contains(LevelAreaId);
            IsInRift                        = GameData.RiftWorldIds.Contains(WorldSnoId);
            IsDead                          = _me.IsDead;
            IsIncapacitated                 = _me.IsFeared || _me.IsStunned || _me.IsFrozen || _me.IsBlind || IsPowerUseDisabled;
            IsRooted                        = _me.IsRooted;
            CurrentHealthPct                = _me.HitpointsCurrentPct;
            PrimaryResource                 = GetCurrentPrimaryResource();
            PrimaryResourcePct              = PrimaryResource / PrimaryResourceMax;
            PrimaryResourceMissing          = PrimaryResourceMax - PrimaryResource;
            SecondaryResource               = _me.CurrentSecondaryResource;
            SecondaryResourcePct            = SecondaryResource / SecondaryResourceMax;
            SecondaryResourceMissing        = SecondaryResourceMax - SecondaryResource;
            Position                        = _me.Position;
            Rotation                        = _me.Movement.Rotation;
            DirectionVector                 = _me.Movement.DirectionVector;
            MovementSpeed                   = (float)Core.PlayerHistory.MoveSpeed;
            IsMoving                        = _me.Movement.IsMoving;
            IsInCombat                      = _me.IsInCombat;
            MaxBloodShards                  = 500 + commonData.GetAttribute <int>(ActorAttributeType.HighestSoloRiftLevel) * 10;
            IsMaxCriticalChance             = _me.CritPercentBonusUncapped > 0 || Math.Abs(_me.CritDamagePercent - 100) < float.Epsilon;
            CriticalChancePct               = _me.CritDamagePercent;
            IsJailed                        = _me.HasDebuff(SNOPower.MonsterAffix_JailerCast);
            IsFrozen                        = _me.IsFrozen;
            ParticipatingInTieredLootRun    = _me.IsParticipatingInTieredLootRun;
            TieredLootRunlevel              = _me.InTieredLootRunLevel;
            IsCasting                       = _me.LoopingAnimationEndTime > 0;
            IsInteractingWithGizmo          = commonData.GetAttribute <bool>(ActorAttributeType.PowerBuff0VisualEffectNone, (int)SNOPower.Axe_Operate_Gizmo);
            CurrentAnimation                = commonData.CurrentAnimation;
            IsInventoryLockedForGreaterRift = ZetaDia.Storage.RiftStarted && ZetaDia.Storage.CurrentRiftType == RiftType.Greater && !ZetaDia.Storage.RiftCompleted;
            ShieldHitpoints                 = commonData.GetAttribute <float>(ActorAttributeType.DamageShieldAmount);

            Summons = GetPlayerSummonCounts();

            //var direction = ZetaDia.Me.Movement.DirectionVector;
            //         var directionRadians = Math.Atan2(direction.X, direction.Y);
            //var directionDegrees = directionRadians * 180/Math.PI;

            //Core.Logger.Log("Player DirectionVector={0}{1} Radians={2} (DB: {3}) Degrees={4} (DB: {5})",
            //             DirectionVector.X,
            //             DirectionVector.Y,
            //             directionRadians,
            //             ZetaDia.Me.Movement.Rotation,
            //             directionDegrees,
            //             ZetaDia.Me.Movement.RotationDegrees
            //             );

            var wasCastingPortal = IsCastingPortal;

            IsCastingPortal = IsCasting && wasCastingPortal || IsCastingTownPortalOrTeleport();

            CurrentHealth     = _me.HitpointsCurrent;
            IsInBossEncounter = _me.IsInBossEncounter;

            HealthHistory.Add(CurrentHealth);
            while (HealthHistory.Count > 5)
            {
                HealthHistory.RemoveAt(0);
            }

            var averageHealth = HealthHistory.Average();

            IsTakingDamage = averageHealth > CurrentHealth;

            // For WD Angry Chicken
            IsHidden = _me.IsHidden;
        }
Example #15
0
 public string attackProjector = "RangedAttackProjector"; // going to be more then one projector later for certian abilites
 // No heal projector in this one
 public HealingTurretAbility()
 {
     info = new SummonInfo();
     SummonAbilites abilites = new SummonAbilites(info);
 }
Example #16
0
    public void Init(int ID)
    {
        GameObject          projector      = null;
        GameObject          healProjector  = null;
        AbilityCreatorClass abilityCreator = new AbilityCreatorClass(); // This will create the summonInfo Dynically
        var  classInfo = abilityCreator.GetAbility(ID);
        Type type      = classInfo.GetType();

        summonInfo = new SummonInfo();
        int damage   = 0;
        int duration = 0;

        foreach (var f in type.GetFields().Where(f => f.IsPublic))
        {
            if (f.Name == "baseDamage")
            {
                var temp = f.GetValue(classInfo).ToString();
                damage = int.Parse(temp);
            }
            if (f.Name == "range")
            {
                var temp = f.GetValue(classInfo).ToString();
                range = int.Parse(temp);
            }
            if (f.Name == "info")
            {
                var temp = f.GetValue(classInfo) as SummonInfo;
                summonInfo = temp;
            }
            if (f.Name == "name")
            {
                name = f.GetValue(classInfo).ToString();
            }
            if (f.Name == "attackProjector")
            {
                var temp = f.GetValue(classInfo).ToString();
                projector      = Instantiate(Resources.Load <GameObject>("Projectors/" + temp));
                projector.name = temp;
            }
            if (f.Name == "healProjector")
            {
                var temp = f.GetValue(classInfo) as GameObject;
                healProjector = temp;
            }
            if (f.Name == "duration")
            {
                var temp = f.GetValue(classInfo).ToString();
                duration = int.Parse(temp);
            }
        }
        GameInformation.SummonsUp++;
        summonInfo.SummonName = name;
        summon = Instantiate(Resources.Load <GameObject>("Summons/" + name));
        projector.transform.parent   = summon.transform;
        summon.transform.position    = new Vector3(circleProjector.transform.position.x, transform.position.y, circleProjector.transform.position.z);
        projector.transform.position = new Vector3(summon.transform.position.x, projector.transform.position.y + 20f, summon.transform.position.z);
        //projector.transform.rotation = new Vector3(summon.transform.rotation.x, projector.transform.rotation.y);
        var rotationVector = summon.transform.rotation.eulerAngles;

        rotationVector.x             = 90f;
        rotationVector.z             = 90f;
        projector.transform.rotation = Quaternion.Euler(rotationVector);
        if (projector != null)
        {
            summon.GetComponent <SummonsAi>().SetDamageProjector(projector);
        }
        if (healProjector != null)
        {
            summon.GetComponent <SummonsAi>().SetHealProjector(healProjector);
        }
        summon.GetComponent <SummonsAi>().baseDamage  = summonInfo.BaseDamage;
        summon.GetComponent <SummonsAi>().attackRange = range;
        summon.GetComponent <SummonsAi>().duration    = duration;
        summonInfo.CalculateEnergy();
        summonInfo.CalculateHealth();
        summonInfo.CalculateCrit();
        summonInfo.CalculateDamage(damage);
        summon.GetComponent <SummonsAi>().SetSummonInfo(summonInfo);
        Debug.Log(summonInfo.HealAmount);
    }
Example #17
0
    //目标点等距离圆形或者扇形aaa
    public static void RoundSummon(sdActorInterface actor, OpParameter param, Operation op)
    {
        //int summonID = param.data;  //召唤物id
        //int skillId = param.data2;
        int   summonCount = param.data1;                  //召唤数量aaa
        float alarmTime   = op.dwOperationPara4 * 0.001f; //预警特效时间aaa

        alarmTime = 0.5f;
        float alarmRadius = op.dwOperationPara2 * 0.001f; //预警半径aaa
        int   iAngle      = op.dwOperationPara1;          //召唤物在多少角度范围内召唤aaa
        float radius      = op.dwOperationPara3 * 0.001f;

        Vector3 v = param.attackActor.GetDirection();

        v.y = 0.0f;
        v.Normalize();
        Quaternion tempQ = Quaternion.FromToRotation(new Vector3(0, 0, 1), v);

        if (v.z < -0.9999f)
        {
            tempQ = Quaternion.AngleAxis(180.0f, new Vector3(0, 1, 0));
        }

        float iPerAngle   = 0.0f;
        float iAngleStart = 0.0f;

        if (iAngle == 360)
        {
            iPerAngle = (float)iAngle / (float)(summonCount);
        }
        else
        {
            iPerAngle   = (float)iAngle / (float)(summonCount + 1);
            iAngleStart = -iAngle * 0.5f + iPerAngle;
        }

        for (int j = 0; j < summonCount; j++)
        {
            SummonInfo sumInfo = new SummonInfo();
            sumInfo.summonID = param.data;
            sumInfo.skillID  = param.data2;
            ResLoadParams alarmParam = new ResLoadParams();
            Quaternion    rot        = Quaternion.AngleAxis(iAngleStart + iPerAngle * j, new Vector3(0, 1, 0)) * tempQ;
            if (op.dwOperationPara0 == 4)           //指定点召唤东西aaa
            {
                sumInfo.pos = param.trans.position + rot * v * radius;
                Vector3 hitpos = Vector3.zero;
                if (sdTuiTuLogic.NavMesh_RayCast(sumInfo.pos, ref hitpos))
                {
                    sumInfo.pos = hitpos + new Vector3(0.0f, 0.1f, 0.0f);
                }
                sumInfo.bFly   = false;
                alarmParam.pos = sumInfo.pos;
            }
            else            //指定点丢东西aaa
            {
                sumInfo.pos       = param.trans.position;
                sumInfo.targetPos = param.trans.position + rot * Vector3.forward * radius;
                Vector3 hitpos = Vector3.zero;
                if (sdTuiTuLogic.NavMesh_RayCast(sumInfo.targetPos, ref hitpos))
                {
                    sumInfo.targetPos = hitpos + new Vector3(0.0f, 0.1f, 0.0f);
                }
                sumInfo.bParabola = true;
                sumInfo.bFly      = true;
                alarmParam.pos    = sumInfo.targetPos;
            }

            param.attackActor.AddSummon(sumInfo, iSummonUniqueID);
            alarmParam.userdata0 = alarmTime;
            alarmParam.userdata1 = alarmRadius;
            sdResourceMgr.Instance.LoadResourceImmediately("Effect/MainChar/$Tongyong/yujing/FX_yujing.prefab", OnLoadAlarmEffect, alarmParam);
        }
    }
Example #18
0
    //朝目标点召唤aaa
    public static void PointSummon(sdActorInterface actor, OpParameter param, Operation op)
    {
        //int summonID = param.data;  //召唤物id
        //int skillId = param.data2;
        int   iSommonCount = param.data1;                  //召唤数量aaa
        float alarmTime    = op.dwOperationPara4 * 0.001f; //预警特效时间aaa
        float alarmRadius  = op.dwOperationPara2 * 0.001f; //预警半径aaa
        int   iAngle       = op.dwOperationPara1;          //召唤物在多少角度范围内召唤aaa
        float radius       = op.dwOperationPara3 * 0.001f;

        Vector3 v = param.attackActor.GetDirection();

        v.y = 0.0f;
        v.Normalize();
        Quaternion tempQ = Quaternion.FromToRotation(new Vector3(0, 0, 1), v);

        if (v.z < -0.9999f)
        {
            tempQ = Quaternion.AngleAxis(180.0f, new Vector3(0, 1, 0));
        }

        List <sdActorInterface> actorList = null;
        List <sdActorInterface> lstActor  = null;

        if (iAngle == 360)
        {
            actorList = sdGameLevel.instance.actorMgr.FindActor(
                param.attackActor,
                HeaderProto.ESkillObjType.SKILL_OBJ_ENEMY,
                param.attackActor.transform.position,
                Vector3.zero,
                1,
                0,
                radius,
                true);
        }
        else
        {
            actorList = sdGameLevel.instance.actorMgr.FindActor(
                param.attackActor,
                HeaderProto.ESkillObjType.SKILL_OBJ_ENEMY,
                param.attackActor.transform.position,
                param.attackActor.GetDirection(),
                5,
                iAngle,
                radius,
                true);
        }
        lstActor = sdGameLevel.instance.actorMgr.SortActor(param.attackActor.transform.position, actorList);
        int i = 0;

        for (; i < iSommonCount && i < lstActor.Count; i++)
        {
            sdActorInterface target     = lstActor[i];
            SummonInfo       sumInfo    = new SummonInfo();
            ResLoadParams    alarmParam = new ResLoadParams();
            sumInfo.summonID = param.data;
            sumInfo.skillID  = param.data2;
            if (op.dwOperationPara0 == 0)           //朝目标所在直接召唤aaa
            {
                sumInfo.pos    = target.gameObject.transform.position;
                alarmParam.pos = sumInfo.pos;
                sumInfo.bFly   = false;
            }
            else            //朝目标所在点丢东西aaa
            {
                sumInfo.pos       = param.trans.position;
                sumInfo.targetPos = target.gameObject.transform.position;
                alarmParam.pos    = sumInfo.targetPos;
                sumInfo.bParabola = true;
                sumInfo.bFly      = true;
            }
            param.attackActor.AddSummon(sumInfo, iSummonUniqueID);
            alarmParam.userdata0 = alarmTime;
            alarmParam.userdata1 = alarmRadius;
            sdResourceMgr.Instance.LoadResourceImmediately("Effect/MainChar/$Tongyong/yujing/FX_yujing.prefab", OnLoadAlarmEffect, alarmParam);
        }

        if (i < iSommonCount)
        {
            float iPerAngle   = 0.0f;
            float iAngleStart = 0.0f;
            if (iAngle == 360)
            {
                iPerAngle = (float)iAngle / (float)(iSommonCount - i);
            }
            else
            {
                iPerAngle   = (float)iAngle / (float)(iSommonCount - i + 1);
                iAngleStart = -iAngle * 0.5f + iPerAngle;
            }
            for (int j = 0; j < iSommonCount - i; j++)
            {
                SummonInfo sumInfo = new SummonInfo();
                sumInfo.summonID = param.data;
                sumInfo.skillID  = param.data2;
                ResLoadParams alarmParam2 = new ResLoadParams();
                sumInfo.pos = param.trans.position;
                Quaternion rot = Quaternion.AngleAxis(iAngleStart + iPerAngle * j, new Vector3(0, 1, 0)) * tempQ;
                if (op.dwOperationPara0 == 0)               //朝目标所在直接召唤aaa
                {
                    sumInfo.pos = param.trans.position + rot * Vector3.forward * radius;
                    Vector3 hitpos = Vector3.zero;
                    if (sdTuiTuLogic.NavMesh_RayCast(sumInfo.pos, ref hitpos))
                    {
                        sumInfo.pos = hitpos + new Vector3(0.0f, 0.1f, 0.0f);
                    }
                    alarmParam2.pos = sumInfo.pos;
                    sumInfo.bFly    = false;
                }
                else                //朝目标所在点丢东西aaa
                {
                    sumInfo.pos       = param.trans.position;
                    sumInfo.targetPos = param.trans.position + rot * Vector3.forward * radius;
                    Vector3 hitpos = Vector3.zero;
                    if (sdTuiTuLogic.NavMesh_RayCast(sumInfo.targetPos, ref hitpos))
                    {
                        sumInfo.targetPos = hitpos + new Vector3(0.0f, 0.1f, 0.0f);
                    }
                    sumInfo.bFly      = true;
                    sumInfo.bParabola = true;
                    alarmParam2.pos   = sumInfo.targetPos;
                }
                param.attackActor.AddSummon(sumInfo, iSummonUniqueID);

                alarmParam2.userdata0 = alarmTime;
                alarmParam2.userdata1 = alarmRadius;
                sdResourceMgr.Instance.LoadResourceImmediately("Effect/MainChar/$Tongyong/yujing/FX_yujing.prefab", OnLoadAlarmEffect, alarmParam2);
            }
        }
    }
Example #19
0
 /// <summary>
 /// Dont forget to declear the name before this function
 /// </summary>
 /// <param name="info"></param>
 public SummonAbilites(SummonInfo info)
 {
     CalculateSummonStats(info);
 }