Exemplo n.º 1
0
 void DropPoint(int point, ObjPlayer player)
 {
     for (int i = 0; i < checkenTableList.Count; i++)
     {
         var itemChecken = checkenTableList[i];
         if (point >= itemChecken.ExData1)
         {
             var count = (int)Math.Floor((float)point / (float)itemChecken.ExData1);
             point = point % itemChecken.ExData1;
             if (point > 0 && i + 1 == checkenTableList.Count)
             {
                 count += 1;
             }
             Vector2 v2 = new Vector2(player.GetPosition().X + MyRandom.Random(-randomNum, randomNum), player.GetPosition().Y + MyRandom.Random(-randomNum, randomNum));
             CreateDropItem(4, new List <ulong>(), 0, itemChecken.ItemID[2], count, v2);
         }
         else
         {
             if (i + 1 == checkenTableList.Count) //last
             {
                 Vector2 v2 = new Vector2(player.GetPosition().X + MyRandom.Random(-randomNum, randomNum), player.GetPosition().Y + MyRandom.Random(-randomNum, randomNum));
                 CreateDropItem(4, new List <ulong>(), 0, itemChecken.ItemID[2], 1, player.GetPosition());
             }
         }
     }
 }
Exemplo n.º 2
0
        public override void OnPlayerDie(ObjPlayer player, ulong characterId = 0)
        {
            //死人了,重置一下trigger area的状态
            var playerPos = player.GetPosition();
            var area      = mAreaDict.Values.FirstOrDefault(a => a.IsInArea(playerPos));

            if (area != null)
            {
                OnTriggerAreaPlayersChanged(area);
            }

            //重生
            var waitSec = PlayerReliveTime[player.ObjId];

            if (waitSec < StaticVariable.ReliveTimeMax)
            {
                PlayerReliveTime[player.ObjId] = Math.Min(waitSec + StaticVariable.ReliveTimeAdd,
                                                          StaticVariable.ReliveTimeMax);
            }
            var reliveTime = DateTime.Now.AddSeconds(waitSec);

            CreateTimer(reliveTime, () => { PlayerRelive(player); });

            //通知死者,复活倒计时
            player.Proxy.NotifyBattleReminder(14,
                                              Utils.WrapDictionaryId(220516, new List <string> {
                waitSec.ToString()
            }), 1);
            player.Proxy.NotifyCountdown((ulong)reliveTime.ToBinary(), (int)eCountdownType.BattleRelive);

            //找出击杀者
            var caster = FindCharacter(characterId);

            if (caster == null)
            {
                return;
            }
            caster = caster.GetRewardOwner();
            var casterPlayer = caster as ObjPlayer;

            if (casterPlayer == null)
            {
                return;
            }
            //加公会贡献
            Utility.GetItem(casterPlayer.ObjId, (int)eResourcesType.Contribution, StaticVariable.PlayerContribution);
        }
Exemplo n.º 3
0
        private void FixPostion(ObjPlayer player)
        {
            var side = GetPlayerSide(player);

            if (side == 1)
            {
                player.SetPosition((float)TableSceneData.Entry_x, (float)TableSceneData.Entry_z);
            }
            else
            {
                player.SetPosition((float)TableSceneData.PVPPosX, (float)TableSceneData.PVPPosZ);
            }
            PlayerLog.WriteLog(player.ObjId, "----HSJDKBattle------FixPostion----------{0}", player.GetPosition());
        }
Exemplo n.º 4
0
        public override void OnPlayerDie(ObjPlayer player, ulong characterId = 0)
        {
            var side = GetPlayerSide(player);

            if (side == -1)
            {
                Logger.Error("OnPlayerDie GetPlayerSide  ObjOd{0}", player.ObjId);
                return;
            }
            PlayerLog.WriteLog(player.ObjId, "----HSJDKBattle------PlayerDie----------KillId={0}", characterId);
            //死人了,重置一下trigger area的状态
            var playerPos = player.GetPosition();
            var area      = mAreaDict.Values.FirstOrDefault(a => a.IsInArea(playerPos));

            if (area != null)
            {
                OnTriggerAreaPlayersChanged(area);
            }

            var reliveObj = SceneServerControl.Timer.CreateTrigger(DateTime.Now.AddSeconds(10.0f), () =>
            {
                if (mLeaveTrigger.ContainsKey(player.ObjId))
                {
                    return;
                }
                mReliveTrigger.Remove(player.ObjId);
                FixPostion(player);
                player.Relive();
                PlayerLog.WriteLog(player.ObjId, "----HSJDKBattle------PlayerRelive----------Time Over");
            });

            mReliveTrigger.Add(player.ObjId, reliveObj);

            var caster = FindCharacter(characterId);

            if (caster == null)
            {
                return;
            }
            caster = caster.GetRewardOwner();
            var strColor = "";

            if (side == 0)
            {
                strColor = "FF0000";//红色
            }
            else if (side == 1)
            {
                strColor = "2866E1";//蓝色
            }
            //
            var args = new List <string>();

            args.Add(strColor);
            args.Add(caster.GetName());
            var content = Utils.WrapDictionaryId(224008, args);

            player.Proxy.NotifyCountdown((ulong)DateTime.Now.AddSeconds(10f).ToBinary(),
                                         (int)eCountdownType.BattleRelive);

            player.Proxy.NotifyBattleReminder(14, content, 1);
            args.Clear();
            args.Add(caster.GetName());//此处 A 击杀了 B   player是被击杀者
            args.Add(player.GetName());
            string text = side == 1 ? Utils.WrapDictionaryId(61000, args) : Utils.WrapDictionaryId(61001, args);

            PushActionToAllPlayer(p =>
            {
                p.Proxy.NotifyBattleReminder(14, text, 1);
            });
        }
Exemplo n.º 5
0
        //拾取
        public bool Pickup(ObjDropItem _this, ObjPlayer picker)
        {
            if (picker.mIsDead)//死亡玩家尸体无法拾取
            {
                return(false);
            }
            var IsCan = false;

            if ((picker.GetPosition() - _this.GetPosition()).LengthSquared() > ObjDropItem.PickDistanceSquared)
            {
                return(false);
            }
            if (_this.IsOwnerList(picker.ObjId))
            {
                IsCan = true;
            }
            else
            {
                switch (_this.BelongType)
                {
                case 0:     //队内自由拾取
                {
                    if (DateTime.Now >= _this.mDropTime.AddSeconds(ObjDropItem.SafeSecondsByTeamFree))
                    {
                        IsCan = true;
                    }
                }
                break;

                case 1:     //队内伤害拾取
                {
                    if (_this.TeamId == 0)
                    {
//没有队
                        if (DateTime.Now >= _this.mDropTime.AddSeconds(ObjDropItem.TeamSecondsByTeamDamage))
                        {
                            IsCan = true;
                        }
                    }
                    else if (picker.GetTeamId() == _this.TeamId)
                    {
//本队成员
                        if (DateTime.Now >= _this.mDropTime.AddSeconds(ObjDropItem.SafeSecondsByTeamDamage))
                        {
                            IsCan = true;
                        }
                    }
                    else
                    {
//非本队成员
                        if (DateTime.Now >= _this.mDropTime.AddSeconds(ObjDropItem.TeamSecondsByTeamDamage))
                        {
                            IsCan = true;
                        }
                    }
                }
                break;

                case 2:     //队内分别拾取
                {
                }
                break;

                case 3:     //所有人分别拾取
                {
                }
                break;

                case 4:
                {
                    IsCan = true;
                }
                break;
                }
            }
            if (IsCan)
            {
                PushPick(_this, picker);
            }
            return(IsCan);
        }
Exemplo n.º 6
0
        public override void OnPlayerDie(ObjPlayer player, ulong characterId = 0)
        {
            var killer = FindPlayer(characterId);

            if (null == killer)
            {
                var obj = FindCharacter(characterId);
                if (null != obj && obj.GetObjType() == ObjType.RETINUE)
                {
                    var retinue = obj as ObjRetinue;
                    if (null != retinue.Owner && retinue.Owner.GetObjType() == ObjType.PLAYER)
                    {
                        killer = retinue.Owner as ObjPlayer;
                    }
                }

                if (null == killer)
                {
                    return;
                }
            }
            var  oldKills = GetContinuesKillRecord(player.ObjId);
            bool bfirst   = false;

            if (Msg.Int64List.Count > 0 && Msg.Int64List[0] == player.ObjId && oldKills >= 10)
            {
                bfirst = true;
            }
            AddKillOrDeadRecord(player.ObjId, false);
            AddKillOrDeadRecord(killer.ObjId, true);
            Dirty = true;


            CreateDropItem(99, new List <ulong> {
                characterId
            }, 0uL, 2, CalculateKillerGold(TableParam[ParamIdx_KillGoldBase], player.GetLevel(), oldKills, killer.GetLevel()), player.GetPosition());

            GiveItem(characterId, 1, CalculateKillerExp(TableParam[ParamIdx_KillExpBase], player.GetLevel(), oldKills, killer.GetLevel(), TableParam[ParamIdx_KillExpRate]));

            //移除死亡给叠加的buff
            foreach (var buffId in DieBuffId)
            {
                var datas = killer.BuffList.GetBuffById(buffId);
                foreach (var data in datas)
                {
                    MissBuff.DoEffect(this, killer, data);
                    killer.DeleteBuff(data, eCleanBuffType.EffectOver);
                }
            }

            AssignMsg();

            PushActionToAllPlayer(proxyPlayer =>
            {
                if (!proxyPlayer.Active)
                {
                    return;
                }
                AssignSelfMsg(proxyPlayer.ObjId);
                proxyPlayer.Proxy.NotifyRefreshDungeonInfo(Msg);
            });

            if (bfirst)
            {
                SceneServer.Instance.ServerControl.BroadcastSceneChat(EnumAllPlayerId(), killer.GetName() + "|" + player.GetName(), 272005);
            }

            var num = GetContinuesKillRecord(killer.ObjId);

            if (3 == num)
            {
                SceneServer.Instance.ServerControl.BroadcastSceneChat(EnumAllPlayerId(), killer.GetName() + "|" + player.GetName(), 272001);                //[{0}]正在大杀特杀!
            }
            else if (6 == num)
            {
                SceneServer.Instance.ServerControl.BroadcastSceneChat(EnumAllPlayerId(), killer.GetName() + "|" + player.GetName(), 272002);                //[{0}]已经主宰比赛了!
            }
            else if (8 == num)
            {
                SceneServer.Instance.ServerControl.BroadcastSceneChat(EnumAllPlayerId(), killer.GetName() + "|" + player.GetName(), 272003);                //[{0}]已经无人能挡!
            }
            else if (num >= 10 && num % 5 == 0)
            {
                SceneServer.Instance.ServerControl.BroadcastSceneChat(EnumAllPlayerId(), killer.GetName() + "|" + player.GetName(), 272004);                //[{0}]已经超越神了!
            }
        }