void RPC_S2C_MonsterBook(uLink.BitStream stream, uLink.NetworkMessageInfo info)
    {
        bool ownerData = stream.Read <bool>();

        if (ownerData)
        {
            MonsterHandbookData.Deserialize(stream.Read <byte[]>());
        }
        else
        {
            MonsterHandbookData.AddMhByKilledMonsterID(stream.Read <int>());
        }
    }
    void OnEntityDeath(SkEntity entity, SkEntity caster)
    {
        CommonCmpt common = entity.GetComponent <CommonCmpt>();

        if (common != null)
        {
            if (common.entityProto.proto == EEntityProto.Doodad)
            {
                DestroyEntity(entity, 30.0f);
            }

            if (common.entityProto.proto == EEntityProto.Monster)
            {
                MonsterHandbookData.AddMhByKilledMonsterID(common.entityProto.protoId);
                if (common.GetComponent <TowerCmpt>() == null)
                {
                    float    reviveTime = 10;
                    PeEntity mon        = entity.GetComponent <PeEntity>();
                    if (mon != null)
                    {
                        if (StroyManager.Instance != null)
                        {
                            if (StroyManager.Instance.m_RecordKillMons.Count != 0)
                            {
                                foreach (var item in StroyManager.Instance.m_RecordKillMons.Values)
                                {
                                    if (item.type == KillMons.Type.fixedId && SceneEntityCreatorArchiver.Instance.GetEntityByFixedSpId(item.monId) == mon)
                                    {
                                        reviveTime = (item.reviveTime == 0 ? reviveTime : item.reviveTime);
                                        break;
                                    }
                                    else if (item.type == KillMons.Type.protoTypeId && Vector3.Distance(mon.position, item.center) <= item.radius &&
                                             (item.monId == -999 ? true : common.entityProto.protoId == item.monId))
                                    {
                                        reviveTime = (item.reviveTime == 0 ? reviveTime : item.reviveTime);
                                        break;
                                    }
                                }
                            }
                        }
                    }
                    DestroyEntity(entity, reviveTime);
                }
            }

            NpcCmpt npc = entity.GetComponent <NpcCmpt>();
            if (common.entityProto.proto == EEntityProto.Npc)
            {
                if (GameUI.Instance != null)
                {
                    if (GameUI.Instance.mNpcWnd.IsOpen() && GameUI.Instance.mNpcWnd.m_CurSelNpc.commonCmpt == common)
                    {
                        GameUI.Instance.mNpcWnd.Hide();
                    }
                }
                if (npc != null && npc.Type != ENpcType.Follower && npc.ReviveTime > 0)
                {
                    ReviveEntity(entity, 10.0f);
                }
                if (npc.ReviveTime <= 0)
                {
                    PeEntity npcentity = npc.GetComponent <PeEntity>();
                    if (MissionManager.Instance != null && MissionManager.Instance.m_PlayerMission != null)
                    {
                        MissionManager.Instance.m_PlayerMission.SetMissionState(npcentity, NpcMissionState.Max);
                    }

                    NpcMissionData missionData = npcentity.GetUserData() as NpcMissionData;
                    if (missionData != null)
                    {
                        missionData.m_MissionList.Clear();
                    }
                }
            }
            else if (common.entityProto.proto == EEntityProto.RandomNpc)
            {
                if (npc != null && !npc.IsServant)
                {
                    if (npc.ReviveTime > 0)
                    {
                        if (PeGameMgr.IsMultiStory)
                        {
                            if (entity._net is AiAdNpcNetwork)
                            {
                                int tempid            = ((AiAdNpcNetwork)(entity._net)).ExternId;
                                RandomNpcDb.Item item = RandomNpcDb.Get(tempid);
                                if (item != null)
                                {
                                    if (item.reviveTime != -1)
                                    {
                                        ReviveEntity(entity, item.reviveTime);
                                    }
                                }
                            }
                        }
                        else
                        {
                            ReviveEntity(entity, npc.ReviveTime);
                        }
                    }
                }

                //follower revive
//				if (npc != null && npc.IsServant)
//				{
//					ReviveEntity(entity, npc.ReviveTime + npc.FollowerReviceTime);
//				}
            }
        }
    }