Ejemplo n.º 1
0
    public Creature GetPlayerCreature(int creatureId, PMazePlayer data)
    {
        CreatureInfo info = ConfigManager.Get <CreatureInfo>(creatureId);

        if (!info)
        {
            Logger.LogError("Get CreatureInfo failed, could not find template config: {0}", creatureId);
            return(null);
        }
        var prop = ConfigManager.Get <PropItemInfo>(data.fashion.weapon);

        if (prop)
        {
            info.weaponID     = prop.subType;
            info.weaponItemID = data.fashion.weapon;
        }
        Creature player = Creature.Create(info, Vector3.zero, new Vector3(0f, 90f, 0f), data.roleId.Equals(modulePlayer.roleInfo.roleId), false);

        if (data.pet != null && data.pet.itemTypeId != 0)
        {
            player.pet = PetCreature.Create(player, PetInfo.Create(data.pet), player.position_, player.eulerAngles, false, Module_Home.PET_OBJECT_NAME);
            if (player.pet != null)
            {
                if (!moduleAI.IsStartAI)
                {
                    moduleAI.StartAI();
                }
                player.pet.DisableSkills(true);
                moduleAI.AddPetAI(player.pet);
            }
        }
        return(player);
    }
Ejemplo n.º 2
0
    public void InitCreatureData(Creature creature, PMazePlayer info)
    {
        this.creature = creature;
        roleInfo      = info;
        PropItemInfo weaponInfo = ConfigManager.Get <PropItemInfo>(info.fashion.weapon);

        if (weaponInfo)
        {
            LoadPlayerRuntimeAnimator(Creature.GetAnimatorName(weaponInfo.subType, info.gender), weaponInfo.subType, info.gender);
        }
        CreatePlayerCollider();
        InitPVECreatureBehaviour();
        switch (playerType)
        {
        //随机坐标
        case LabyrinthCreatureType.OutLabyrinth:
            float x = Random.Range((float)Level.current.edge.x, (float)Level.current.edge.y);
            float z = Random.Range((float)Level.current.zEdge.x, (float)Level.current.zEdge.y);
            creaturePos = new Vector3(x, 0, z);
            break;

        //服务器返回的坐标
        case LabyrinthCreatureType.InLabyrinth:
            creaturePos = info.pos == null ? Vector3.zero : info.pos.ToVector3();
            break;
        }
    }
Ejemplo n.º 3
0
    public void SendLabyrinthSneak(PMazePlayer player)
    {
        var p = PacketObject.Create <CsMazeSneak>();

        p.uid = player.roleId;

        lastSneakPlayer = player;
        session.Send(p);
    }
Ejemplo n.º 4
0
    void _Packet(CScMazeScenePlayerMove p)
    {
        PMazePlayer player = GetTargetPlayer(p.roleId);

        if (player != null)
        {
            player.pos = p.pos;
        }

        DispatchModuleEvent(EventPlayerPosChange, p);
    }
Ejemplo n.º 5
0
    public static int GetProto(this PMazePlayer data)
    {
        if (data == null)
        {
            return((int)CreatureVocationType.Vocation1);
        }

        if (data.roleProto == (byte)CreatureVocationType.All)
        {
            data.roleProto = (byte)data.fashion.GetProto();
        }
        return(data.roleProto);
    }
Ejemplo n.º 6
0
    public void HandlePlayer(Creature player, PMazePlayer info, bool isPlayer = false)
    {
        Util.SetLayer(player.gameObject, Layers.MODEL);

        player.isPlayer          = isPlayer;
        player.enableUpdate      = false;
        player.behaviour.enabled = false;
        player.visible           = moduleLabyrinth.playerVisible || isPlayer;
        if (player.pet)
        {
            player.pet.visible = player.visible;
        }
        player.gameObject.name = isPlayer ? "self" : info.roleName;
        CharacterEquip.ChangeCloth(player, info.fashion);

        LabyrinthCreature lc = player.activeRootNode.GetComponentDefault <LabyrinthCreature>();

        lc.InitCreatureData(player, info);
        if (!isPlayer)
        {
            m_players.Add(lc);
        }
    }
Ejemplo n.º 7
0
    /// <summary>
    /// 服务器推送玩家信息,,推送回来的可能只是修改后的玩家信息
    /// </summary>
    /// <param name="p"></param>
    void _Packet(ScMazeScenePlayer p)
    {
        PMazePlayer[] players = null;
        p.playerList.CopyTo(ref players);

        //对玩家进行排序,并重新填充
        List <PMazePlayer> allPlayerList = new List <PMazePlayer>();

        //先填充已有数据
        if (areaPlayerDic != null)
        {
            Dictionary <EnumLabyrinthArea, List <PMazePlayer> > .Enumerator e = areaPlayerDic.GetEnumerator();
            while (e.MoveNext())
            {
                allPlayerList.AddRange(e.Current.Value);
            }
        }

        //再覆盖老数据
        List <PMazePlayer> needAddList = new List <PMazePlayer>();

        for (int i = 0; i < players.Length; i++)
        {
            PMazePlayer pp        = players[i];
            bool        isContain = false;
            for (int j = 0; j < allPlayerList.Count; j++)
            {
                if (pp.roleId == allPlayerList[j].roleId)
                {
                    allPlayerList[j] = pp;
                    isContain        = true;
                    break;
                }
            }

            if (!isContain)
            {
                needAddList.Add(pp);
            }
        }

        //将新增的数据直接填充到列表中
        allPlayerList.AddRange(needAddList);

        //将收到的玩家列表中自己的数据更新
        if (labyrinthSelfInfo != null)
        {
            for (int i = 0; i < allPlayerList.Count; i++)
            {
                if (allPlayerList[i].roleId == modulePlayer.id_)
                {
                    allPlayerList[i].mazeLayer = labyrinthSelfInfo.mazeLayer;
                    break;
                }
            }
        }

        foreach (var item in allPlayerList)
        {
            if (item.fashion == null)
            {
                Logger.LogError("roleId = {0} roleName = {1} fashion data is null", item.roleId, item.roleName);
                if (item.roleId == modulePlayer.id_)
                {
                    item.fashion = GetSelfFashion();
                }
                else
                {
                    item.fashion = GetRandomFashion(item.gender, item.roleProto);
                }
            }
        }

        //协议异常到连自己的信息都没有了
        if (allPlayerList.FindIndex(o => o.roleId == modulePlayer.id_) < 0)
        {
            var se = PacketObject.Create <PMazePlayer>();
            se.roleId        = modulePlayer.id_;
            se.roleName      = modulePlayer.roleInfo.roleName;
            se.roleProto     = (byte)modulePlayer.proto;
            se.gender        = (byte)modulePlayer.gender;
            se.mazeLayer     = m_labyrinthSelfInfo == null ? (byte)0 : m_labyrinthSelfInfo.mazeLayer;
            se.lastMazeLevel = 0;
            se.mazeState     = (byte)EnumLabyrinthPlayerState.Battle;
            se.fashion       = GetSelfFashion();
            if (modulePet.FightingPet != null)
            {
                se.pet = modulePet.FightingPet.Item;
            }
            allPlayerList.Add(se);
        }

        allPlayerList.Sort((a, b) =>
        {
            //层数相同先过关的玩家优先显示
            if (a.mazeLayer == b.mazeLayer)
            {
                return(a.layerTime.CompareTo(b.layerTime));
            }

            return(-a.mazeLayer.CompareTo(b.mazeLayer));
        });

        RefreshAreaPlayers(allPlayerList);
        DispatchModuleEvent(EventRefreshPlayers, areaPlayerDic);
        DispatchModuleEvent(EventCreatePlayers);
    }
Ejemplo n.º 8
0
 public void OnSneakSettleOver()
 {
     lastSneakPlayer   = null;
     sneakPlayerDetail = null;
     isSneakSuccess    = false;
 }