private void UpdateKillCount(NpcInfo npc) { if (null == npc) { return; } UserInfo killer = null; UserInfo user = UserManager.GetUserInfo(npc.KillerId); if (null != user) { killer = user; } else { NpcInfo parter = NpcManager.GetNpcInfo(npc.KillerId); if (null != parter && parter.OwnerId > 0) { killer = UserManager.GetUserInfo(parter.OwnerId); } } if (null != killer) { if (m_IsAttemptScene) { if ((int)NpcTypeEnum.BigBoss == npc.NpcType) { killer.GetCombatStatisticInfo().AddKillNpcCount(1); } } else { killer.GetCombatStatisticInfo().AddKillNpcCount(1); } } }
internal void DropNpc(int ownerId, int fromNpcId, DropOutType dropType, string model, string particle, int num) { if (ownerId > 0) { UserInfo user = UserManager.GetUserInfo(ownerId); if (null == user) { NpcInfo npc = NpcManager.GetNpcInfo(ownerId); while (null != npc) { user = UserManager.GetUserInfo(npc.OwnerId); if (null != user) { break; } else { npc = NpcManager.GetNpcInfo(npc.OwnerId); } } } if (null != user) { Data_Unit unit = new Data_Unit(); unit.m_Id = -1; switch (dropType) { case DropOutType.GOLD: unit.m_LinkId = (int)DropNpcTypeEnum.GOLD; break; case DropOutType.HP: unit.m_LinkId = (int)DropNpcTypeEnum.HP; break; case DropOutType.MP: unit.m_LinkId = (int)DropNpcTypeEnum.MP; break; case DropOutType.MULT_GOLD: unit.m_LinkId = (int)DropNpcTypeEnum.MUTI_GOLD; break; } unit.m_RotAngle = 0; NpcInfo npcInfo = NpcManager.AddNpc(unit); npcInfo.GetMovementStateInfo().SetFaceDir(0); npcInfo.GetMovementStateInfo().IsMoving = false; npcInfo.SetAIEnable(true); npcInfo.SetCampId(user.GetCampId()); npcInfo.OwnerId = user.GetId(); DropOutInfo dropInfo = new DropOutInfo(); dropInfo.DropType = dropType; dropInfo.Value = num; dropInfo.Model = model; dropInfo.Particle = particle; npcInfo.GetAiStateInfo().AiDatas.AddData <DropOutInfo>(dropInfo); npcInfo.SetModel(dropInfo.Model); User us = user.CustomData as User; if (null != us) { Msg_RC_DropNpc builder = DataSyncUtility.BuildDropNpcMessage(npcInfo, fromNpcId, (int)dropType, num, model); us.SendMessage(builder); } } } else { int ct = UserManager.Users.Count; int rd = CrossEngineHelper.Random.Next(0, ct); UserInfo user = null; if (UserManager.Users.TryGetValue(rd, out user)) { Data_Unit unit = new Data_Unit(); unit.m_Id = -1; switch (dropType) { case DropOutType.GOLD: unit.m_LinkId = (int)DropNpcTypeEnum.GOLD; break; case DropOutType.HP: unit.m_LinkId = (int)DropNpcTypeEnum.HP; break; case DropOutType.MP: unit.m_LinkId = (int)DropNpcTypeEnum.MP; break; case DropOutType.MULT_GOLD: unit.m_LinkId = (int)DropNpcTypeEnum.MUTI_GOLD; break; } unit.m_RotAngle = 0; NpcInfo npcInfo = NpcManager.AddNpc(unit); npcInfo.GetMovementStateInfo().SetFaceDir(0); npcInfo.GetMovementStateInfo().IsMoving = false; npcInfo.SetAIEnable(true); npcInfo.SetCampId(user.GetCampId()); npcInfo.OwnerId = user.GetId(); DropOutInfo dropInfo = new DropOutInfo(); dropInfo.DropType = dropType; dropInfo.Value = num; dropInfo.Model = model; dropInfo.Particle = particle; npcInfo.GetAiStateInfo().AiDatas.AddData <DropOutInfo>(dropInfo); npcInfo.SetModel(dropInfo.Model); User us = user.CustomData as User; if (null != us) { Msg_RC_DropNpc builder = DataSyncUtility.BuildDropNpcMessage(npcInfo, fromNpcId, (int)dropType, num, model); us.SendMessage(builder); } } } }
private void TickUsers() { for (LinkedListNode <UserInfo> linkNode = UserManager.Users.FirstValue; null != linkNode; linkNode = linkNode.Next) { UserInfo info = linkNode.Value; if (info.GetEquipmentStateInfo().EquipmentChanged) { RefreshItemSkills(info); } if (info.LevelChanged || info.GetSkillStateInfo().BuffChanged || info.GetEquipmentStateInfo().EquipmentChanged || info.GetLegacyStateInfo().LegacyChanged) { UserAttrCalculator.Calc(info); info.LevelChanged = false; info.GetSkillStateInfo().BuffChanged = false; info.GetEquipmentStateInfo().EquipmentChanged = false; info.GetLegacyStateInfo().LegacyChanged = false; } if (info.Hp <= 0) { if (info.DeadTime <= 0) { //计算击杀收益 CalcKillIncome(info); info.GetCombatStatisticInfo().AddDeadCount(1); //死亡计数+1 //解除控制 ReleaseControl(info); //发送玩家死亡消息 Msg_RC_Dead build = new Msg_RC_Dead(); build.role_id = info.GetId(); NotifyAllUser(build); PlayerLevelupExpConfig cfg = PlayerConfigProvider.Instance.GetPlayerLevelupExpConfigById(info.GetLevel()); info.SetStateFlag(Operate_Type.OT_AddBit, CharacterState_Type.CST_BODY); m_StorySystem.SendMessage("userkilled", info.GetId(), GetLivingUserCount()); TryFireAllUserKilled(); NoticeAttempRoomClosing(); info.DeadTime = TimeUtility.GetServerMilliseconds(); if (null != cfg && m_IsPvpScene) { info.ReviveTime = TimeUtility.GetServerMilliseconds() + cfg.m_RebornTime * 1000; } else { info.ReviveTime = TimeUtility.GetServerMilliseconds() + info.ReleaseTime + 2000; } NpcInfo npc = NpcManager.GetNpcInfo(info.PartnerId); if (null != npc && npc.NpcType == (int)NpcTypeEnum.Partner) { npc.NeedDelete = true; } } else { /* * long delta = TimeUtility.GetServerMilliseconds() - info.DeadTime; * if (delta > info.ReleaseTime) { * info.DeadTime = info.ReviveTime; * Msg_RC_Disappear build = new Msg_RC_Disappear(); * build.role_id = info.GetId(); * NotifyAllUser(build); * } */ } } } }