예제 #1
0
    // Use this for initialization
    void Start()
    {
        if (instance == null)
        {
            instance = this;
        }

        Button btn = this.GetComponent <Button> ();

        btn.onClick.AddListener(OnClick);
    }
예제 #2
0
 public void ReplaceSkill(int index, UseSkill skill)
 {
     if (index >= 0 && index < useSkills.Count)
     {
         if (useSkills[index] != null)
         {
             useSkills[index].Release();
         }
         useSkills[index] = skill;
     }
 }
        public static bool OnFinishWork_BloodBath(ref UseSkill skill)
        {
            CreatureFeelingState currentFeelingState = skill.GetCurrentFeelingState();

            if (currentFeelingState == CreatureFeelingState.BAD)
            {
                skill.agent.Die();
                return(false);
            }
            return(true);
        }
예제 #4
0
        public static bool OnEnterRoom_ShyThing(ShyThing __instance, ref UseSkill skill)
        {
            int faceType = __instance.animScript.GetFaceType() + 1;

            if (skill.agent.level <= faceType)
            {
                skill.agent.Die();
                return(false);
            }

            return(true);
        }
예제 #5
0
        public static bool OnEnterRoom_BloodBath(ref UseSkill skill)
        {
            int fortitudeLevel  = skill.agent.fortitudeLevel;
            int temperanceLevel = skill.agent.temperanceLevel;

            if (fortitudeLevel > temperanceLevel)
            {
                skill.agent.Die();
                return(false);
            }
            return(true);
        }
        public static bool OnReleaseWork_Mhz_1_76(Mhz_1_76 __instance, ref UseSkill skill)
        {
            CreatureFeelingState currentFeelingState = skill.GetCurrentFeelingState();

            if (currentFeelingState == CreatureFeelingState.NORM)
            {
                if (__instance.Prob(50))
                {
                    var rand = new Random();
                    List <CreatureModel> list = new List <CreatureModel>();
                    foreach (CreatureModel creatureModel in CreatureManager.instance.GetCreatureList())
                    {
                        if (creatureModel.qliphothCounter > 0 && creatureModel.script.GetQliphothCounterMax() > 0)
                        {
                            list.Add(creatureModel);
                        }
                    }
                    if (list.Count > 0)
                    {
                        list[rand.Next(0, list.Count)].SetQliphothCounter(0);
                    }
                }
            }
            else if (currentFeelingState == CreatureFeelingState.BAD)
            {
                var rand = new Random();
                List <CreatureModel> list = new List <CreatureModel>();
                foreach (CreatureModel creatureModel in CreatureManager.instance.GetCreatureList())
                {
                    if (creatureModel.qliphothCounter > 0 && creatureModel.script.GetQliphothCounterMax() > 0)
                    {
                        list.Add(creatureModel);
                    }
                }
                if (list.Count > 0)
                {
                    var Exnum = rand.Next(2, 6);
                    for (int i = 0; i < Exnum; i++)
                    {
                        var Num = rand.Next(0, list.Count);
                        list[Num].SetQliphothCounter(0);
                        list.RemoveAt(Num);
                        if (list.Count == 0)
                        {
                            break;
                        }
                    }
                }
            }

            return(true);
        }
예제 #7
0
 public static bool OnFinishWork_OneBadManyGood(ref UseSkill skill)
 {
     if (skill.skillTypeInfo.rwbpType == RwbpType.W)
     {
         if (skill.agent.temperanceLevel == 1 || skill.agent.prudenceLevel <= 2)
         {
             skill.agent.mental = 0;
             skill.agent.Panic();
             return(false);
         }
     }
     return(true);
 }
예제 #8
0
        public static bool OnReleaseWork_Baku(Baku __instance, ref UseSkill skill)
        {
            CreatureFeelingState currentFeelingState = skill.GetCurrentFeelingState();

            if (currentFeelingState == CreatureFeelingState.NORM)
            {
                if (__instance.Prob(50))
                {
                    __instance.model.SubQliphothCounter();
                }
            }

            return(true);
        }
예제 #9
0
    //Transition to target selection for skill
    static public void UseSkillState(ISkill skill)
    {
        UseSkill useSkill = new UseSkill(curCharacter, skill);

        if (skill.targetsAllies)
        {
            UI.TargetP.Init(playerChars, useSkill);
        }
        else
        {
            UI.TargetP.Init(monsters, useSkill);
        }

        ChangeState(ActionState.TARGET);
    }
예제 #10
0
 public Perk()
 {
     Name        = "Perk";
     Explanation = (h) => "";
     Number      = (h) => Double.NaN;
     baseGetter  = (g) => g;
     baseSetter  = (s) => s;
     //Stats
     GetMaxHp         = baseGetter;
     SetMaxHp         = baseSetter;
     GetHp            = baseGetter;
     SetHp            = baseSetter;
     GetArmor         = baseGetter;
     SetArmor         = baseSetter;
     GetResist        = baseGetter;
     SetResist        = baseSetter;
     GetRegen         = baseGetter;
     SetRegen         = baseSetter;
     GetAbilityPower  = baseGetter;
     SetAbilityPower  = baseSetter;
     GetAttackDamage  = baseGetter;
     SetAttackDamage  = baseSetter;
     GetAttackSpeed   = baseGetter;
     SetAttackSpeed   = baseSetter;
     GetAttackRange   = baseGetter;
     SetAttackRange   = baseSetter;
     GetMovementSpeed = baseGetter;
     SetMovementSpeed = baseSetter;
     GetEnergy        = baseGetter;
     SetEnergy        = baseSetter;
     GetEnergyRegen   = baseGetter;
     SetEnergyRegen   = baseSetter;
     GetMaxEnergy     = baseGetter;
     SetMaxEnergy     = baseSetter;
     GetMoney         = baseGetter;
     SetMoney         = baseSetter;
     GetCDReduction   = baseGetter;
     SetCDReduction   = baseSetter;
     //Fns
     GetDamage = (a) => a;
     GetHeal   = (a) => a;
     StartTurn = (a) => a;
     EndTurn   = (a) => a;
     Init      = (a) => a;
     LevelUp   = (a) => a;
     //Skills
     SkillFix = (s) => s;
 }
예제 #11
0
 public static bool OnEnterRoom_OldLady(OldLady __instance, ref UseSkill skill)
 {
     if (skill.skillTypeInfo.rwbpType == RwbpType.P)
     {
         skill.agent.mental = 0;
         skill.agent.Panic();
         return(false);
     }
     else if ((4 - __instance.model.qliphothCounter) >= skill.agent.temperanceLevel)
     {
         skill.agent.mental = 0;
         skill.agent.Panic();
         return(false);
     }
     return(true);
 }
예제 #12
0
        public static UseSkill getSkillWhenNoSkill()
        {
            UseSkill boming = (sender, args) =>
            {
                BaseRoleAction        source    = (BaseRoleAction)sender;
                List <BaseRoleAction> baseRoles = ((UseSkillEventArgs)args).targets;
                var baseRole = baseRoles[0];
                //TODO 让target受到伤害。反射判断target有没有受伤害都脚本
                //                baseRole.attacked();的动画
                var hp = (int)Math.Round(source.GetMaxHp() * 0.1, 0);
                baseRole.SetHp(baseRole.GetHp() - hp);
                source.SetHp(source.GetHp() - hp);
                return(new ReturnDTO(RETURN_CODE.SUCCESS));
            };

            return(boming);
        }
예제 #13
0
        public static bool OnReleaseWork_Ppodae(Ppodae __instance, ref UseSkill skill)
        {
            if (skill.skillTypeInfo.rwbpType != RwbpType.R)
            {
                skill.agent.Die();
            }
            CreatureFeelingState currentFeelingState = skill.GetCurrentFeelingState();

            if (currentFeelingState == CreatureFeelingState.NORM)
            {
                if (__instance.Prob(50))
                {
                    __instance.model.SubQliphothCounter();
                }
            }
            return(true);
        }
예제 #14
0
        public static bool OnFinishWork_SpiderMom(ref UseSkill skill)
        {
            CreatureFeelingState currentFeelingState = skill.GetCurrentFeelingState();

            if (currentFeelingState == CreatureFeelingState.BAD)
            {
                skill.agent.Die();
                return(true);
            }

            skill.agent.hp -= (60 - (skill.agent.temperanceLevel * 10));
            if (skill.agent.hp <= 0)
            {
                skill.agent.Die();
                return(true);
            }
            return(true);
        }
예제 #15
0
        /// <summary>
        /// 直伤卡牌
        /// </summary>
        /// <returns></returns>
        public BaseSkill getDamangeSkill(int number)
        {
            //还要消耗栏
            UseSkill cardEffect1 = CommonSkillFactory.checkMpIsEnough(number);
            UseSkill cardEffect2 = (sender, args) =>
            {
                List <BaseRoleAction> baseRoles = ((UseSkillEventArgs)args).targets;
                var baseRole = baseRoles[0];
                //TODO 让target受到伤害。反射判断target有没有受伤害都脚本
                //                baseRole.attacked();的动画
                baseRole.SetHp(baseRole.GetHp() - number);
                return(new ReturnDTO(RETURN_CODE.SUCCESS));
            };
            BaseSkill card = new BaseSkill(1, "炫酷火球", "", 1, 1, 1, false, number, null,
                                           "你不觉得火球作为demo很炫酷吗", new UseSkill[] { cardEffect1, cardEffect2 });

            card.IsAvailable = true;
            return(card);
        }
예제 #16
0
        public static UseSkill checkMpIsEnough(int mp)
        {
            //还要消耗栏
            UseSkill cardEffect1 = (sender, args) =>
            {
                BaseRoleAction baseRole = (BaseRoleAction)sender;
                if (baseRole.GetMp() >= mp)
                {
                    baseRole.SetMp(baseRole.GetMp() - mp);
                    return(new ReturnDTO(RETURN_CODE.SUCCESS));
                }
                else
                {   //打断
                    Console.WriteLine("法力值不足");
                    return(new ReturnDTO(RETURN_CODE.BATTLE_HAS_NO_MP));
                }
            };

            return(cardEffect1);
        }
예제 #17
0
        public static bool OnReleaseWork_Cosmos(Cosmos __instance, ref UseSkill skill)
        {
            CreatureFeelingState currentFeelingState = skill.GetCurrentFeelingState();

            if (currentFeelingState == CreatureFeelingState.NORM)
            {
                __instance.model.SubQliphothCounter();
            }
            else if (currentFeelingState == CreatureFeelingState.BAD)
            {
                __instance.model.SubQliphothCounter();
                __instance.model.SubQliphothCounter();
            }

            if (skill.agent.fortitudeLevel >= 3)
            {
                __instance.model.SubQliphothCounter();
            }
            return(true);
        }
예제 #18
0
 public bool PutWarpPrefab()
 {
     if (putWarpPairNum < putAbleWarpPairNum)
     {
         if (!putWarp)
         {
             SEManager.PlayPutObjectSound1();
             warp = (GameObject)Instantiate(warpPrefab, transform.position, Quaternion.identity);
             warp.GetComponent <Warp>().SetPutter(this.GetComponent <PutObject>());
             try
             {
                 UseSkill us = this.transform.parent.transform.gameObject.GetComponent <UseSkill>();
                 us.SetSkillCountTime(2.5f);
             }
             catch
             {
             }
         }
         else
         {
             SEManager.PlayPutObjectSound1();
             GameObject exitwarp = (GameObject)Instantiate(exitWarpPrefab, transform.position, Quaternion.identity);
             warp.GetComponent <Warp>().SetPareWarp(exitwarp);
             exitwarp.GetComponent <Warp>().SetPareWarp(warp);
             exitwarp.GetComponent <Warp>().SetPutter(this.GetComponent <PutObject>());
             putWarpPairNum++;
             StartCoroutine(DelayMethod(10f, () =>
             {
                 exitwarp.GetComponent <Warp>().DestroyWarp();
             }));
         }
         putWarp = !putWarp;
         return(true);
     }
     return(false);
 }
예제 #19
0
        public void Update()
        {
            // check for activating skills
            if (ActivatingSkill != null)
            {
                if (ActivatingSkillTimestamp + ActivatingSkillLeadTime <= Global.Now)
                {
                    SkillCommandProcessor.UseSkillNow(this, ActivatingSkill);
                    ActivatingSkill = null;
                }
            }
            // check for queued skills
            else if (SkillQueue.Count > 0)
            {
                ActivatingSkill = SkillQueue.Dequeue();
            }

            if (Target != null)
            {
                CombatUpdate();
            }
            else if (Client == null)
            {
                BehaviourUpdate();
            }
            else
            {
                if (Global.Now - LastMoveUpdate > TimeSpan.FromSeconds(1) &&
                    (MobileState == EnumMobileState.Running ||
                     MobileState == EnumMobileState.Walking))
                {
                    SetMobileState(EnumMobileState.Standing);
                }
            }
            HealUpdate();
        }
예제 #20
0
    private void EnemyBattleAround()
    {
        UpdatePokemonDatas();
        if (CanBattle && null != battleState)
        {
            DebugHelper.Log("敌方开始了行动");
            EnemyCurPokemonData.ChooseSkillType = SkillType.NULL;

            if (NeedReplaceSKill.context.ContainsKey(EnemyCurPokemonData.ID))
            {
                EnemyChooseSkillID = NeedReplaceSKill.context[EnemyCurPokemonData.ID];
            }
            if (ResourceController.Instance.allSkillDic.ContainsKey(EnemyChooseSkillID))
            {
                Skill EnemySkill = ResourceController.Instance.allSkillDic[EnemyChooseSkillID];
                if (null != EnemySkill)
                {
                    BattlePause = true;
                    EnemyCurPokemonData.ChooseSkillType = EnemySkill.type;
                    UseSkill.Attack(EnemySkill, EnemyCurPokemonData, PlayerCurPokemonData);
                }
            }
        }
    }
예제 #21
0
        public static void ProcessUseSkill(ClientConnection client, UseSkill message)
        {
            var avatar = client.Avatar as MobileAvatar;

            if (avatar == null)
            {
                client.LogMessage("Requested a skill, but doesn't have an avatar.");
                return;
            }
            Schema.EnumSkillRow esr = Global.ModelSchema.EnumSkill.FindByEnumSkillID(message.SkillId);
            if (esr == null)
            {
                client.LogMessage("Requested an invalid skill " + message.SkillId);
                return;
            }

            // If already performing a skill invocation, just queue the request for later.
            if (avatar.ActivatingSkill != null)
            {
                avatar.SkillQueue.Enqueue(message);
                return;
            }

            if (esr.LeadTime <= 0)
            {
                // process it now
                UseSkillNow(avatar, message);
            }
            else
            {
                // process it later, after lead-time has elapsed
                avatar.ActivatingSkill          = message;
                avatar.ActivatingSkillTimestamp = Global.Now;
                avatar.ActivatingSkillLeadTime  = TimeSpan.FromSeconds(esr.LeadTime);
            }
        }
예제 #22
0
        public static bool OnReleaseWork_Wellcheers(ref UseSkill skill)
        {
            int skillLevel = 0;

            if (skill.skillTypeInfo.rwbpType == RwbpType.R) // 용기
            {
                skillLevel = skill.agent.fortitudeLevel;
            }
            else if (skill.skillTypeInfo.rwbpType == RwbpType.W)
            {
                skillLevel = skill.agent.prudenceLevel;
            }
            else if (skill.skillTypeInfo.rwbpType == RwbpType.B)
            {
                skillLevel = skill.agent.temperanceLevel;
            }
            else
            {
                skillLevel = skill.agent.justiceLevel;
            }

            bool Check1 = skillLevel >= skill.agent.fortitudeLevel;
            bool Check2 = skillLevel >= skill.agent.prudenceLevel;
            bool Check3 = skillLevel >= skill.agent.temperanceLevel;
            bool Check4 = skillLevel >= skill.agent.justiceLevel;

            if (Check1 && Check2 && Check3 && Check4)
            {
                return(true);
            }
            else
            {
                skill.agent.Die();
                return(true);
            }
        }
예제 #23
0
        //private static RoundDecision AG(Game game)
        //{

        //    var roundDecision = new RoundDecision()
        //    {
        //        ReaperAction = reaperAction,
        //        DestroyerAction = destroyerAction,
        //        DoofAction = doofAction,
        //    };
        //    return roundDecision;
        //}

        private static RoundDecision Heuristic(Game game)
        {
            var groups = BuildGroups(game.Wrecks, game.Me.Reaper.Pos);

            ConsoleHelper.Debug(groups.Count);
            groups.Debug();

            var ennemies          = game.Players.Skip(1).OrderByDescending(p => p.Score).ToArray();
            var bestEnnemyPlayer  = ennemies[0];
            var worstEnnemyPlayer = ennemies[1];

            // Destroyer
            var closestTanker = game.Tankers
                                .Select(tanker => new { Tanker = tanker, NextPos = tanker.EstimateNextPosition() })
                                .Where(tanker => tanker.NextPos.IsInRange2(Center, (int)(Radius2 * 0.9)))
                                .OrderBy(tanker => tanker.NextPos.Dist2(game.Me.Destroyer.Pos))
                                .ThenByDescending(tanker => tanker.Tanker.AvailableWater)
                                .FirstOrDefault();
            IAction destroyerAction     = new Wait();
            var     ennemyCloseToReaper = game.Me.Reaper.CountNearEntity(SkillRange2, game.Players[1].Destroyer,
                                                                         game.Players[1].Doof, game.Players[2].Destroyer, game.Players[2].Doof);

            if (game.Me.Rage >= 150 &&
                game.Me.Reaper.Pos.IsInRange2(game.Me.Destroyer.Pos, SkillRange2) &&
                ennemyCloseToReaper > 1)
            {
                destroyerAction = new UseSkill {
                    Target = game.Me.Reaper.Pos
                };
            }
            else if (closestTanker != null)
            {
                var nextPos = closestTanker.NextPos;
                var move    = game.Me.Destroyer.ComputeMove(nextPos);
                destroyerAction = move;
            }

            // Reaper
            var closestReaper = game.Wrecks
                                .OrderBy(wreck => wreck.Dist2(game.Me.Reaper))
                                .ThenByDescending(wreck => wreck.AvailableWater)
                                .FirstOrDefault();
            var closestGroup = groups
                               .OrderByDescending(g => g.BestPosWeight - g.BestPos.Dist2(game.Me.Reaper.Pos) / 1000)
                               .FirstOrDefault();
            IAction reaperAction = destroyerAction;

            if (closestGroup != null)
            {
                //var nextPos = game.Me.Reaper.GetClosest(closestGroup.Wrecks).Pos;
                var nextPos = closestGroup.BestPos;
                // if i'm in => protect
                if (game.Me.Reaper.Pos.IsInRange2(nextPos, 1000000))
                {
                    var limitPos = closestGroup.GetLimit(bestEnnemyPlayer.Reaper);
                    ConsoleHelper.Debug($"PROTECT : {nextPos} to {limitPos} (for {bestEnnemyPlayer.Reaper.Id})");
                    nextPos = limitPos;
                }
                else
                {
                    // if someone block me => go out
                    ConsoleHelper.Debug($"NEXT POS={nextPos}");
                    var units = new List <Unit>(game.Tankers)
                    {
                        game.Players[1].Destroyer,
                        game.Players[1].Doof,
                        game.Players[2].Destroyer,
                        game.Players[2].Doof
                    };
                    const int delta  = 20;
                    var       alphas = new Queue <double>();
                    alphas.Enqueue(0);
                    for (var alpha = delta; alpha < 360; alpha += delta)
                    {
                        alphas.Enqueue(alpha);
                        alphas.Enqueue(-alpha);
                    }
                    var ok = false;
                    while (!ok)
                    {
                        if (alphas.Count == 0)
                        {
                            break;
                        }

                        var alpha = alphas.Dequeue();
                        var cos   = Math.Cos(alpha);
                        var sin   = Math.Sin(alpha);
                        var dx    = nextPos.X - game.Me.Reaper.Pos.X;
                        var dy    = nextPos.Y - game.Me.Reaper.Pos.Y;
                        var x     = game.Me.Reaper.Pos.X + dx * cos + dy * sin;
                        var y     = game.Me.Reaper.Pos.Y + dy * cos + dx * sin;
                        var pos   = new Position((int)x, (int)y);
                        ConsoleHelper.Debug($"CHECK alpha={alpha} pos={pos}");
                        var realNextPos = game.Me.Reaper.SimulateNextPosition(pos);
                        ConsoleHelper.Debug($"realpos={realNextPos}");
                        var segment = new Segment(game.Me.Reaper.Pos, realNextPos, game.Me.Reaper.Radius);

                        var blockers = units.Where(u => segment.IsBlocker(u)).ToList();
                        if (blockers.Count == 0)
                        {
                            ok      = true;
                            nextPos = pos;
                        }
                        else
                        {
                            var ids = string.Join(";", blockers.Select(b => b.Id));
                            ConsoleHelper.Debug($"BLOCKER count={blockers.Count} {ids}");
                        }
                    }

                    var tankerOnBestPos = game.Tankers
                                          .Where(t => closestGroup.BestPos.Dist2(t.Pos) <= t.Radius * t.Radius).ToList();
                    if (tankerOnBestPos.Count > 1)
                    {
                        ConsoleHelper.Debug("PROBLEM : Multiple Tankers on best pos");
                        // change dest
                    }
                    else if (tankerOnBestPos.Count == 1)
                    {
                        ConsoleHelper.Debug("PROBLEM : Tanker on best pos");
                        // adapt pos
                    }

                    // if oil problem
                    if (game.Oils.Count > 0 && game.Oils.Min(o => closestGroup.BestPos.Dist2(o.Pos)) <= SkillRange2)
                    {
                        ConsoleHelper.Debug("OIL PROBLEM");
                    }
                }
                var move = game.Me.Reaper.ComputeMove(nextPos);
                reaperAction = move;
            }
            else if (closestReaper != null)
            {
                var nextPos = closestReaper.Pos;
                var move    = game.Me.Reaper.ComputeMove(nextPos);
                reaperAction = move;
            }

            // Doof
            // focus on 1st or 2nd ?
            var ennemyToFocus = game.Me.Score < worstEnnemyPlayer.Score ? worstEnnemyPlayer : bestEnnemyPlayer;
            var doofMove      = game.Me.Doof.ComputeMove(ennemyToFocus.Reaper.Pos);

            doofMove.Acc = 300;
            IAction doofAction = doofMove;

            if (game.Me.Rage >= 30 &&
                game.Me.Doof.Pos.IsInRange2(ennemyToFocus.Reaper.Pos, SkillRange2) &&
                game.Wrecks.Any(w => w.Pos.IsInRange2(ennemyToFocus.Reaper.Pos, w.Radius * w.Radius) &&
                                !game.Me.Reaper.Pos.IsInRange2(ennemyToFocus.Reaper.Pos, SkillRange2)))
            {
                doofAction = new UseSkill {
                    Target = ennemyToFocus.Reaper.Pos
                };
            }

            var roundDecision = new RoundDecision()
            {
                ReaperAction    = reaperAction,
                DestroyerAction = destroyerAction,
                DoofAction      = doofAction,
            };

            return(roundDecision);
        }
 public static bool GetCurrentFeelingState(UseSkill __instance)
 {
     __instance.successCount /= 2;
     return(true);
 }
예제 #25
0
 public static bool OnEnterRoom_Bald(ref UseSkill skill)
 {
     skill.agent.mental *= 0.4f;
     return(true);
 }
예제 #26
0
파일: Form1.cs 프로젝트: alien88/wrenbot
        public void _SendHandler(ProxySocket Socket, uint Serial, NewProxy Proxy, ref MemoryStream Buffer)
        {
            Packet Packet = new Packet(Buffer.ToArray());

            switch ((ClientAction)Packet.Action)
            {
                #region Walking
            case ClientAction.Walking:
            {
                Walking WalkingDirection = Packet.Read <Walking>(0);
                Clients[Serial].Aisling.Location.Direction = WalkingDirection.Direction;
                switch (Clients[Serial].Aisling.Location.Direction)
                {
                case FaceDirection.Down:
                    Clients[Serial].Aisling.Location.Y++;
                    break;

                case FaceDirection.Up:
                    Clients[Serial].Aisling.Location.Y--;
                    break;

                case FaceDirection.Left:
                    Clients[Serial].Aisling.Location.X--;
                    break;

                case FaceDirection.Right:
                    Clients[Serial].Aisling.Location.X++;
                    break;
                }
            } break;

                #endregion
                #region Turning
            case ClientAction.Turning:
            {
                Direction TurnDirection = Packet.Read <Direction>(0);
                Clients[Serial].Aisling.Location.Direction = TurnDirection.FaceDirection;
            } break;

                #endregion
                #region Skill Used
            case ClientAction.UseSkill:
            {
                UseSkill SkillInfo = Packet.Read <UseSkill>(0);
            } break;

                #endregion
                #region Entity Clicked
            case ClientAction.ClickEntity:
            {
                ClickEntity Subject = Packet.Read <ClickEntity>(0);
            } break;

                #endregion
                #region Last Refresh
            case (ClientAction)0x38:
            {
                Clients[Serial].Aisling.LastRefresh = DateTime.Now;
            } break;

                #endregion
            default:
            {
            } break;
            }
        }
예제 #27
0
        public void UpdateSkills(ShipModel model)
        {
            string[] skills = model.Skills;

            List <int> removedIndices = new List <int>();

            for (int i = 0; i < this.useSkills.Count; i++)
            {
                if (false == skills.Contains(this.useSkills[i].ID))
                {
                    removedIndices.Add(i);
                }
            }

            foreach (int removeIndex in removedIndices)
            {
                if (this.useSkills[removeIndex] != null)
                {
                    this.useSkills[removeIndex].Release();
                }

                this.useSkills[removeIndex] = new EmptySkill();
            }

            List <int> freeIndices = new List <int>();

            for (int i = 0; i < this.useSkills.Count; i++)
            {
                if (this.useSkills[i].IsEmpty)
                {
                    freeIndices.Add(i);
                }
            }

            Dictionary <int, string> newSkills = new Dictionary <int, string>();
            int counter = 0;

            foreach (string skill in skills)
            {
                if (false == this.IsUseSkill(skill))
                {
                    newSkills.Add(freeIndices[counter++], skill);
                }
            }

            foreach (var pair in newSkills)
            {
                UseSkill s = this.GetAvailableSkill(pair.Value);
                if (s != null)
                {
                    this.useSkills[pair.Key] = s;
                }
            }

            if (string.IsNullOrEmpty(model.Sets.FullSetSkill))
            {
                this.useSkills[5] = EmptySkill.Get;
            }
            else
            {
                UseSkill skill = this.GetAvailableSkill(model.Sets.FullSetSkill);
                this.useSkills[5] = (skill != null) ? skill : EmptySkill.Get;
            }

            //generate update skills event when method colled
            if (_owner != null)
            {
                MmoActor actor = this._owner as MmoActor;
                if (actor != null)
                {
                    actor.EventOnSkillsUpdated();
                }
            }
            //owner sent skills updated
        }
 public static void InitUseSkillAction(ref UseSkill __result)
 {
     __result.workSpeed *= 2;
 }
예제 #29
0
    // Update is called once per frame
    void Update()
    {
        // イメージ画像が存在していれば
        if (moveImage)
        {
            // ボタンを離した瞬間
            if (Input.GetMouseButtonUp(0))
            {
                // 配列分繰り返す
                for (int i = 0; i < col.Length; i++)
                {
                    // マウスのポジションがコライダーの上にあるとき
                    if (col[i].OverlapPoint(Input.mousePosition))
                    {
                        // もし先に何かスキルがセットされていたら
                        if (skills[i] != moveImage)
                        {
                            // そのスキルを削除する
                            GameObject.Destroy(skills[i]);
                        }

                        // スキル配列にスキルの画像をセットする
                        skills[i] = GameObject.Instantiate(moveImage);
                        GameObject.Destroy(moveImage);

                        // 親を自分に設定する
                        skills[i].transform.SetParent(this.transform);

                        // 位置を調整し、サイズを変更する
                        skills[i].transform.position   = col[i].bounds.center;
                        skills[i].transform.localScale = new Vector3(1f, 1f, 1f);
                        skills[i].GetComponent <RectTransform>().sizeDelta = new Vector2(80f, 80f);

                        // 動かすコンポーネントをオフにする
                        skills[i].GetComponent <MoveSprite>().enabled = false;

                        // アイテムを使うクラスの変数定義
                        UseItem useItem;
                        // そのセットされたものがアイテムならば
                        if ((useItem = skills[i].GetComponent <UseItem>()))
                        {
                            // アイテムを使うスクリプトに番号をセットする
                            useItem.enabled            = true;
                            useItem.skillPaletteNumber = i;
                            skillorItemFlag[i]         = PALETTE_CODE.ITEM;

                            // アイテムの使用フラグが立っていれば
                            if (UseItem.itemCoolTimeFlag)
                            {
                                // クールタイムのオブジェクトをアクティブにする
                                itemCoolTimeObjects[i].SetActive(true);
                            }
                        }
                        else
                        {
                            // スキルを使うコンポーネントを取得する
                            UseSkill useSkill = skills[i].GetComponent <UseSkill>();
                            // セットされたものはスキルとする
                            skillorItemFlag[i] = PALETTE_CODE.SKILL;
                            // スキルがセットされているパレットの番号をセットする
                            useSkill.skillPaletteNumber = i;
                            // スキルを使えるようにする
                            useSkill.enabled = true;
                            // スキルを使うコンポーネントをセットする
                            skillCoolTimeObjects[i].GetComponent <UpdateSkillCoolTime>().useSkill = useSkill;
                            // スキルのクールタイムオブジェクトをアクティブ化する
                            skillCoolTimeObjects[i].SetActive(true);
                        }

                        // 離れるコンポーネントをオンにする
                        RemoveSprite skillComponent = skills[i].GetComponent <RemoveSprite>();
                        skillComponent.enabled         = true;
                        skillComponent.parentColliders = col[i];

                        // 参照を解放する
                        moveImage = null;
                        break;
                    }
                }
            }
        }
    }
 public static bool FinishWorkSuccessfully(UseSkill __instance)
 {
     __instance.successCount *= 2;
     return(true);
 }