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()); } } } }
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); }
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()); }
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); }); }
//拾取 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); }
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}]已经超越神了! } }