예제 #1
0
 protected virtual void OnTeleportStatusChanged(TeleportEventArgs e)
 {
     if (TeleportStatusChanged != null)
     {
         TeleportStatusChanged(this, e);
     }
 }
예제 #2
0
        private void Obj_AI_Base_OnTeleport(GameObject sender, TeleportEventArgs args)
        {
            var unit = sender as AIHeroClient;

            if (unit == null || !unit.IsValid || unit.IsAlly)
            {
                return;
            }

            var decoded = new RecallInf(unit.NetworkId, args.Status, args.Type, args.Duration, args.Start);

            if (unit.NetworkId == Hero.NetworkId && decoded.Type == TeleportType.Recall)
            {
                RecallStatus = decoded.Status;
                if (decoded.Status == TeleportStatus.Finish)
                {
                    BeforeRecallLocation = Hero.ServerPosition;
                    Obj_SpawnPoint enemySpawn = ObjectManager.Get <Obj_SpawnPoint>().FirstOrDefault(x => x.IsEnemy);
                    if (enemySpawn != null)
                    {
                        LastLocation      = enemySpawn.Position;
                        PredictedLocation = enemySpawn.Position;
                    }
                    LastSeen = Game.Time;
                }
            }
        }
예제 #3
0
        private static void OnTeleport(object sender, TeleportEventArgs args)
        {
            var unit = args.Object as AIHeroClient;

            if (unit == null || !unit.IsValid || unit.IsAlly)
            {
                return;
            }

            var ChampionInfoOne = ChampionInfoList.Find(x => x.NetworkId == unit.NetworkId);

            if (args.Type == TeleportType.Recall)
            {
                switch (args.Status)
                {
                case TeleportStatus.Start:
                    ChampionInfoOne.StartRecallTime = Game.Time;
                    break;

                case TeleportStatus.Abort:
                    ChampionInfoOne.AbortRecallTime = Game.Time;
                    break;

                case TeleportStatus.Finish:
                    ChampionInfoOne.FinishRecallTime = Game.Time;
                    ChampionInfoOne.LastVisiblePos   = GameObjects.EnemySpawnPoints.FirstOrDefault().Position;
                    break;
                }
            }
        }
예제 #4
0
 private void OnTeleport(object sender, TeleportEventArgs e)
 {
     if (sender != null)
     {
         Console.WriteLine("{0} recalled!", ((Obj_AI_Base)sender).CharData.BaseSkinName);
     }
 }
예제 #5
0
        void Self_TeleportProgress(object sender, TeleportEventArgs e)
        {
            if (!Client.Network.Connected)
            {
                return;
            }

            switch (e.Status)
            {
            case TeleportStatus.Progress:
                instance.MediaManager.PlayUISound(UISounds.Teleport);
                Client.Self.SphereEffect(Client.Self.GlobalPosition, Color4.White, 4f, teleportEffect);
                break;

            case TeleportStatus.Finished:
                Client.Self.SphereEffect(Vector3d.Zero, Color4.White, 0f, teleportEffect);
                SetRandomHeading();
                break;

            case TeleportStatus.Failed:
                instance.MediaManager.PlayUISound(UISounds.Error);
                Client.Self.SphereEffect(Vector3d.Zero, Color4.White, 0f, teleportEffect);
                break;
            }
        }
예제 #6
0
        private static void OnUnitTeleport(Obj_AI_Base sender, Obj_AI_BaseTeleportEventArgs e)
        {
            var eventArgs = new TeleportEventArgs
            {
                Status = TeleportStatus.Unknown,
                Type   = TeleportType.Unknown
            };

            if (sender == null)
            {
                return;
            }

            if (!TeleportDataNetId.ContainsKey(sender.NetworkId))
            {
                TeleportDataNetId[sender.NetworkId] = eventArgs;
            }

            if (!string.IsNullOrEmpty(e.DisplayName))
            {
                eventArgs.Status   = TeleportStatus.Start;
                eventArgs.Duration = GetDuration(e);
                eventArgs.Type     = GetType(e);
                eventArgs.Start    = Game.TickCount;

                TeleportDataNetId[sender.NetworkId] = eventArgs;
            }
            else
            {
                eventArgs        = TeleportDataNetId[sender.NetworkId];
                eventArgs.Status = Game.TickCount - eventArgs.Start < eventArgs.Duration - 250 ? TeleportStatus.Abort : TeleportStatus.Finish;
            }

            OnTeleport?.Invoke(sender, eventArgs);
        }
예제 #7
0
 private void Self_TeleportProgress(object sender, TeleportEventArgs e)
 {
     if (e.Status == TeleportStatus.Finished)
     {
         SetLookat();
     }
 }
예제 #8
0
 void Self_TeleportProgress(object sender, TeleportEventArgs e)
 {
     if (e.Status == TeleportStatus.Finished)
     {
         this.nearbyAvatars.Clear();
     }
 }
예제 #9
0
        void Self_TeleportProgress(object sender, TeleportEventArgs e)
        {
            if (InvokeRequired)
            {
                BeginInvoke(new MethodInvoker(() => Self_TeleportProgress(sender, e)));
                return;
            }

            statusLabel.Text = e.Message;

            switch (e.Status)
            {
            case TeleportStatus.Progress:
                IsTeleporting = true;
                break;

            case TeleportStatus.Cancelled:
            case TeleportStatus.Failed:
                statusLabel.Text = "Teleport failed: " + e.Message;
                IsTeleporting    = false;
                break;

            case TeleportStatus.Finished:
                IsTeleporting = false;
                Close();
                break;
            }
            RefreshControls();
        }
예제 #10
0
 void Self_TeleportProgress(object sender, TeleportEventArgs e)
 {
     if (e.Status == TeleportStatus.Progress || e.Status == TeleportStatus.Finished)
     {
         ResetAvatarList();
     }
 }
예제 #11
0
        void Self_TeleportProgress(object sender, TeleportEventArgs e)
        {
            if (InvokeRequired)
            {
                BeginInvoke(new MethodInvoker(() => Self_TeleportProgress(sender, e)));
                return;
            }

            switch (e.Status)
            {
            case TeleportStatus.Progress:
                lblStatus.Text = "Progress: " + e.Message;
                InTeleport     = true;
                break;

            case TeleportStatus.Start:
                lblStatus.Text = "Teleporting to " + txtRegion.Text;
                InTeleport     = true;
                break;

            case TeleportStatus.Cancelled:
            case TeleportStatus.Failed:
                InTeleport     = false;
                lblStatus.Text = "Failed: " + e.Message;
                if (Environment.TickCount - lastTick > 500)
                {
                    instance.TabConsole.DisplayNotificationInChat("Teleport failed");
                }
                lastTick = Environment.TickCount;
                break;

            case TeleportStatus.Finished:
                lblStatus.Text = "Teleport complete";
                if (Environment.TickCount - lastTick > 500)
                {
                    instance.TabConsole.DisplayNotificationInChat("Teleport complete");
                }
                lastTick   = Environment.TickCount;
                InTeleport = false;
                Network_SimChanged(null, null);
                if (mmap != null)
                {
                    mmap.ClearTarget();
                }
                break;

            default:
                InTeleport = false;
                break;
            }

            if (!InTeleport)
            {
                prgTeleport.Style = ProgressBarStyle.Blocks;
            }
        }
예제 #12
0
 /// <summary>
 /// Invoked whenever the player teleports.
 /// If their buildmode is on and they have ChaosState from Rod of Discord, heal the player.
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private static void OnTeleport(object sender, TeleportEventArgs e)
 {
     if (e.Player.IsBuildModeOn())
     {
         if (e.Player.TPlayer.FindBuffIndex(BuffID.ChaosState) > -1)
         {
             e.Player.Heal(100);
         }
     }
 }
예제 #13
0
        /// <inheritdoc />
        public void Execute(IEntity entity, SystemEventArgs args)
        {
            if (!(entity is IPlayerEntity player))
            {
                this._logger.LogError($"Cannot execute DeathSystem. {entity.Object.Name} is not a player.");
                return;
            }

            IMapRevivalRegion revivalRegion = player.Object.CurrentMap.GetNearRevivalRegion(player.Object.Position);

            if (revivalRegion == null)
            {
                this._logger.LogError($"Cannot find any revival region for map '{player.Object.CurrentMap.Name}'.");
                return;
            }

            decimal recoveryRate = GameResources.Instance.Penalities.GetRevivalPenality(player.Object.Level) / 100;
            var     jobData      = player.PlayerData.JobData;

            int strength     = player.Attributes[DefineAttributes.STR];
            int stamina      = player.Attributes[DefineAttributes.STA];
            int dexterity    = player.Attributes[DefineAttributes.DEX];
            int intelligence = player.Attributes[DefineAttributes.INT];

            player.Health.Hp = (int)(HealthFormulas.GetMaxOriginHp(player.Object.Level, stamina, jobData.MaxHpFactor) * recoveryRate);
            player.Health.Mp = (int)(HealthFormulas.GetMaxOriginMp(player.Object.Level, intelligence, jobData.MaxMpFactor, true) * recoveryRate);
            player.Health.Fp = (int)(HealthFormulas.GetMaxOriginFp(player.Object.Level, stamina, dexterity, strength, jobData.MaxFpFactor, true) * recoveryRate);

            if (player.Object.MapId != revivalRegion.MapId)
            {
                IMapInstance revivalMap = this._mapLoader.GetMapById(revivalRegion.MapId);

                if (revivalMap == null)
                {
                    this._logger.LogError($"Cannot find revival map with id '{revivalRegion.MapId}'.");
                    player.Connection.Server.DisconnectClient(player.Connection.Id);
                    return;
                }

                revivalRegion = revivalMap.GetRevivalRegion(revivalRegion.Key);
            }

            var teleportEvent = new TeleportEventArgs(revivalRegion.MapId, revivalRegion.RevivalPosition.X, revivalRegion.RevivalPosition.Z);

            player.NotifySystem <TeleportSystem>(teleportEvent);

            WorldPacketFactory.SendMotion(player, ObjectMessageType.OBJMSG_ACC_STOP | ObjectMessageType.OBJMSG_STOP_TURN | ObjectMessageType.OBJMSG_STAND);
            WorldPacketFactory.SendPlayerRevival(player);
            WorldPacketFactory.SendUpdateAttributes(player, DefineAttributes.HP, player.Health.Hp);
            WorldPacketFactory.SendUpdateAttributes(player, DefineAttributes.MP, player.Health.Mp);
            WorldPacketFactory.SendUpdateAttributes(player, DefineAttributes.FP, player.Health.Fp);

            this.ProcessDeathPenality(player);
        }
        //string message, TeleportStatus status, TeleportFlags flags
        public void On_Teleport(object sender, TeleportEventArgs e)
        {
            BotClient Client = TheBotClient;

            WriteLine(e + " " + e.Status);
            if (e.Status == TeleportStatus.Finished)
            {
                Client.Self.TeleportProgress -= On_Teleport;
                TeleportFinished.Set();
            }
        }
예제 #15
0
        public void Self_TeleportProgress(object sender, TeleportEventArgs e)
        {
            Hashtable item = new Hashtable();

            item.Add("MessageType", "Teleport");
            item.Add("Status", e.Status);
            item.Add("Flags", e.Flags);
            if (e.Status == TeleportStatus.Finished)
            {
                Client.Self.Movement.Camera.Far = 182f;
                Client.Self.Movement.Camera.SetPositionOrientation(new Vector3(128, 128, 0), 0, 0, 0);
                Client.Self.Movement.SendUpdate();
            }
            enqueue(item);
        }
예제 #16
0
        private void TP_Callback(object sender, TeleportEventArgs e)
        {
            if (e.Status == TeleportStatus.Finished)
            {
                //Thread.Sleep(8000);

                BeginInvoke((MethodInvoker) delegate
                {
                    //axWindowsMediaPlayer1.Ctlcontrols.stop();
                    axWindowsMediaPlayer1.URL = this.instance.Config.CurrentConfig.pURL;
                    //axWindowsMediaPlayer1.Ctlcontrols.play();

                    //this.Close();
                });
            }
        }
예제 #17
0
        void Self_TeleportProgress(object sender, TeleportEventArgs e)
        {
            if (e.Status == TeleportStatus.Finished || e.Status == TeleportStatus.Failed)
            {
                IsTeleporting = false;
            }

            if (CanSyncInvoke)
            {
                NetcomSync.BeginInvoke(new OnTeleportStatusRaise(OnTeleportStatusChanged), new object[] { e });
            }
            else
            {
                OnTeleportStatusChanged(e);
            }
        }
예제 #18
0
파일: Program.cs 프로젝트: wade1990/PortAIO
        private void Obj_AI_Base_OnTeleport(GameObject sender, TeleportEventArgs args)
        {
            var unit = sender as AIHeroClient;

            if (unit == null || !unit.IsValid || unit.IsAlly)
            {
                return;
            }

            var decoded = new RecallInf(unit.NetworkId, args.Status, args.Type, args.Duration, args.Start);

            if (unit.NetworkId == _hero.NetworkId && decoded.Type == TeleportType.Recall)
            {
                switch (decoded.Status)
                {
                case TeleportStatus.Start:
                    _begin    = Game.Time;
                    _duration = decoded.Duration;
                    _active   = true;
                    break;

                case TeleportStatus.Finish:
                    int    colorIndex = (int)((_hero.HealthPercent / 100) * 255);
                    string color      = (255 - colorIndex).ToString("X2") + colorIndex.ToString("X2") + "00";
                    Program.Instance().Notify(_hero.ChampionName + " has recalled with <font color='#" + color + "'>" + (int)_hero.HealthPercent + "&#37; HP</font>");
                    _active = false;
                    break;

                case TeleportStatus.Abort:
                    _active = false;
                    break;

                case TeleportStatus.Unknown:
                    Program.Instance()
                    .Notify(
                        _hero.ChampionName + " is <font color='#ff3232'>unknown</font> (" +
                        _hero.Spellbook.GetSpell(SpellSlot.Recall).Name + ")");
                    _active = false;
                    break;
                }
            }
        }
예제 #19
0
        private void netcom_TeleportStatusChanged(object sender, TeleportEventArgs e)
        {
            switch (e.Status)
            {
            case TeleportStatus.Start:
            case TeleportStatus.Progress:
                lblTeleportStatus.Text = e.Message;
                break;

            case TeleportStatus.Failed:
                RefreshControls();

                MessageBox.Show(e.Message, "Teleport", MessageBoxButtons.OK, MessageBoxIcon.Error);
                break;

            case TeleportStatus.Finished:
                this.Close();
                break;
            }
        }
예제 #20
0
        private void netcom_TeleportStatusChanged(object sender, TeleportEventArgs e)
        {
            switch (e.Status)
            {
            case TeleportStatus.Failed:
                MessageBox.Show(e.Message, "Teleport", MessageBoxButtons.OK, MessageBoxIcon.Error);
                break;

            case TeleportStatus.Finished:
                //try
                //{
                //    client.Appearance.SetPreviousAppearance(false);
                //}
                //catch (Exception exp)
                //{
                //    Logger.Log("TPTabWindow: " + exp.InnerException.ToString(), Helpers.LogLevel.Error);
                //}
                break;
            }
        }
예제 #21
0
        private void netcom_TeleportStatusChanged(object sender, TeleportEventArgs e)
        {
            switch (e.Status)
            {
            case TeleportStatus.Progress:
                label1.Text = e.Message;

                break;

            case TeleportStatus.Failed:
                label1.Text = "Teleport Failed";

                break;

            case TeleportStatus.Finished:
                label1.Text = "Teleport Successful";
                //this.Close();

                break;
            }
        }
예제 #22
0
        private static void OnUnitTeleport(Obj_AI_Base sender, GameObjectTeleportEventArgs args)
        {
            var eventArgs = new TeleportEventArgs
            {
                Status = TeleportStatus.Unknown,
                Type   = TeleportType.Unknown
            };

            if (sender == null)
            {
                return;
            }

            if (!TeleportDataNetId.ContainsKey(sender.NetworkId))
            {
                TeleportDataNetId[sender.NetworkId] = eventArgs;
            }

            if (!string.IsNullOrEmpty(args.RecallType))
            {
                eventArgs.Status   = TeleportStatus.Start;
                eventArgs.Duration = GetDuration(args);
                eventArgs.Type     = GetType(args);
                eventArgs.Start    = Core.GameTickCount;

                TeleportDataNetId[sender.NetworkId] = eventArgs;
            }
            else
            {
                eventArgs        = TeleportDataNetId[sender.NetworkId];
                eventArgs.Status = Core.GameTickCount - eventArgs.Start < eventArgs.Duration - 250
                    ? TeleportStatus.Abort
                    : TeleportStatus.Finish;
            }

            if (OnTeleport != null)
            {
                OnTeleport(sender, eventArgs);
            }
        }
예제 #23
0
        private void netcom_TeleportStatusChanged(object sender, TeleportEventArgs e)
        {
            if (InvokeRequired)
            {
                BeginInvoke(new MethodInvoker(() => netcom_TeleportStatusChanged(sender, e)));
                return;
            }

            try
            {
                switch (e.Status)
                {
                case TeleportStatus.Start:
                    RefreshControls();
                    pnlTeleporting.Visible    = true;
                    lblTeleportStatus.Visible = true;
                    break;

                case TeleportStatus.Progress:
                    lblTeleportStatus.Text = e.Message;
                    break;

                case TeleportStatus.Failed:
                    RefreshControls();
                    pnlTeleporting.Visible = false;
                    MessageBox.Show(e.Message, "Teleport", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    break;

                case TeleportStatus.Finished:
                    RefreshControls();
                    pnlTeleporting.Visible = false;
                    //lblTeleportStatus.Visible = false;
                    this.Close();
                    break;
                }
            }
            catch {; }
        }
예제 #24
0
        private void Self_OnTeleport(object sender, TeleportEventArgs ea)
        {
            try
            {
                if (ea.Status == TeleportStatus.Finished || ea.Status == TeleportStatus.Failed)
                {
                    teleporting = false;
                }

                if (netcomSync != null)
                {
                    netcomSync.BeginInvoke(new OnTeleportStatusRaise(OnTeleportStatusChanged), new object[] { ea });
                }
                else
                {
                    OnTeleportStatusChanged(ea);
                }
            }
            catch
            {
                ;
            }
        }
예제 #25
0
        void Self_TeleportProgress(object sender, TeleportEventArgs e)
        {
            if (!client.Network.Connected)
            {
                return;
            }

            if (e.Status == TeleportStatus.Progress)
            {
                client.Self.SphereEffect(client.Self.GlobalPosition, Color4.White, 4f, teleportEffect);
            }

            if (e.Status == TeleportStatus.Finished)
            {
                client.Self.SphereEffect(Vector3d.Zero, Color4.White, 0f, teleportEffect);
                SetRandomHeading();
            }

            if (e.Status == TeleportStatus.Failed)
            {
                client.Self.SphereEffect(Vector3d.Zero, Color4.White, 0f, teleportEffect);
            }
        }
예제 #26
0
        private static bool OnTeleport(Int16 id, byte f, float x, float y)
        {
            if (Teleport == null)
                return false;

            var args = new TeleportEventArgs
            {
                ID = id,
                Flag = f,
                X = x,
                Y = y
            };
            Teleport.Invoke(null, args);
            return args.Handled;
        }
 public override void Self_OnTeleport(object sender, TeleportEventArgs e)
 {
     base.Self_OnTeleport(sender, e);
 }
예제 #28
0
 private void OnPressTeleport()
 {
     if (_teleport != null)
     {
         TeleportEventArgs e = new TeleportEventArgs();
         _teleport(this, e);
     }
 }
 protected virtual void OnTeleportStatusChanged(TeleportEventArgs e)
 {
     TeleportStatusChanged?.Invoke(this, e);
 }
예제 #30
0
        public void UseBlinkwingItem(IPlayerEntity player, Item blinkwing)
        {
            if (player.Object.Level < blinkwing.Data.LimitLevel)
            {
                _logger.LogError($"Player {player.Object.Name} cannot use {blinkwing.Data.Name}. Level too low.");
                _textPacketFactory.SendDefinedText(player, DefineText.TID_GAME_USINGNOTLEVEL);
                return;
            }

            // TODO: Check if player is sit
            // TODO: Check if player is on Kebaras island
            // TODO: Check if player is in guild war map

            TeleportEventArgs teleportEvent;

            if (blinkwing.Data.ItemKind3 == ItemKind3.TOWNBLINKWING)
            {
                IMapRevivalRegion revivalRegion = player.Object.CurrentMap.GetNearRevivalRegion(player.Object.Position);

                if (revivalRegion == null)
                {
                    _logger.LogError($"Cannot find any revival region for map '{player.Object.CurrentMap.Name}'.");
                    return;
                }
                if (player.Object.MapId != revivalRegion.MapId)
                {
                    IMapInstance revivalMap = _mapManager.GetMap(revivalRegion.MapId);

                    if (revivalMap == null)
                    {
                        _logger.LogError($"Cannot find revival map with id '{revivalRegion.MapId}'.");
                        // TODO: disconnect client
                        //player.Connection.Server.DisconnectClient(player.Connection.Id);
                        return;
                    }

                    revivalRegion = revivalMap.GetRevivalRegion(revivalRegion.Key);
                }

                teleportEvent = new TeleportEventArgs(revivalRegion.MapId,
                                                      revivalRegion.RevivalPosition.X,
                                                      revivalRegion.RevivalPosition.Z,
                                                      revivalRegion.RevivalPosition.Y);
            }
            else
            {
                teleportEvent = new TeleportEventArgs(blinkwing.Data.WeaponTypeId,   // Map Id
                                                      blinkwing.Data.ItemAtkOrder1,  // X
                                                      blinkwing.Data.ItemAtkOrder3,  // Z
                                                      blinkwing.Data.ItemAtkOrder2,  // Y
                                                      blinkwing.Data.ItemAtkOrder4); // Angle
            }

            player.Inventory.ItemInUseActionId = player.Delayer.DelayAction(TimeSpan.FromMilliseconds(blinkwing.Data.SkillReadyType), () =>
            {
                _teleportSystem.Teleport(player, teleportEvent.MapId, teleportEvent.PositionX, teleportEvent.PositionY, teleportEvent.PositionZ, teleportEvent.Angle);
                _specialEffectSystem.SetStateModeBaseMotion(player, StateModeBaseMotion.BASEMOTION_OFF);
                player.Inventory.ItemInUseActionId = Guid.Empty;
                DecreaseItem(player, blinkwing);
            });

            _specialEffectSystem.SetStateModeBaseMotion(player, StateModeBaseMotion.BASEMOTION_ON, blinkwing);
        }
예제 #31
0
        public void Teleport(object sender, TeleportEventArgs e)
        {
            if (_wizard.Mana > 0)
            {
                bool flag = true;
                Coordinate coord = _coord;
                Coordinate coordOld = _coord;

                while (flag)
                {
                    coord = View.TeleportUI();
                    if (!(_world[coord._y, coord._x] is Way))
                    {
                        continue;
                    }

                    flag = false;
                }

                _coord = coord;
                _world.Move(coordOld, _coord);
                _wizard.Mana -= TeleportConsumptionMana;
            }

            else
            {
                View.PrintText("Need Mana!!!!");
            }
        }