예제 #1
0
        public bool Request(ItemAsset.ItemObject item)
        {
            if (null == item)
            {
                return(false);
            }

            if (item.protoId == ReviveItemProtoId)
            {
                return(false);
            }

            Pathea.SkAliveEntity a = Entity.GetCmpt <Pathea.SkAliveEntity>();
            if (a != null)
            {
                if (a.isDead)
                {
                    return(false);
                }
            }

            //net
            if (NetworkInterface.IsClient && null != mNet)
            {
                float cd = GetCdByItemProtoId(item.protoId);
                if (cd > 0)
                {
                    return(false);
                }

                //ConsumeItem(item.GetCmpt<ItemAsset.Consume>());
                ItemAsset.Equip equip = item.GetCmpt <ItemAsset.Equip>();
                if (null != equip)
                {
                    if (mNet.network is PlayerNetwork)
                    {
                        Pathea.EquipmentCmpt cmpt = (mNet.network as PlayerNetwork).PlayerEntity.GetCmpt <Pathea.EquipmentCmpt>();
                        if (null != cmpt)
                        {
                            if (!cmpt.NetTryPutOnEquipment(item))
                            {
                                return(false);
                            }
                        }
                    }
                }
                LearnReplicatorFormula(item.GetCmpt <ItemAsset.ReplicatorFormula>(), false);
                LearnMetalScan(item.GetCmpt <ItemAsset.MetalScan>(), false);
                mNet.RequestUseItem(item.instanceId);
                return(true);
            }
            else
            {
                return(Use(item));
            }
        }
 public override void InitEquipment(PeEntity entity, ItemAsset.ItemObject itemObj)
 {
     base.InitEquipment(entity, itemObj);
     m_MotionEquip = m_Entity.GetCmpt <Motion_Equip>();
     m_MotionMgr   = m_Entity.GetCmpt <MotionMgrCmpt>();
     m_Durability  = itemObj.GetCmpt <ItemAsset.Durability>();
 }
예제 #3
0
        public static RailwayTrain GetTrain(int itemInstanceId)
        {
            ItemAsset.ItemObject trainItem = ItemAsset.ItemMgr.Instance.Get(itemInstanceId);
            if (null == trainItem)
            {
                return(null);
            }

            ItemAsset.Instantiate train = trainItem.GetCmpt <ItemAsset.Instantiate>();
            if (null == train)
            {
                return(null);
            }

            GameObject obj = train.CreateViewGameObj(null);

            if (null == obj)
            {
                return(null);
            }

            obj.transform.parent = railRoot;

            return(obj.GetComponent <RailwayTrain>());
        }
예제 #4
0
 public override void InitEquipment(Pathea.PeEntity entity, ItemAsset.ItemObject itemObj)
 {
     base.InitEquipment(entity, itemObj);
     m_Equip.SetJetPackLogic(this);
     m_ItemAttr         = itemObj.GetCmpt <ItemAsset.JetPkg>();
     m_Time             = new UTimer();
     m_Time.ElapseSpeed = -1f;
     m_Time.Second      = GameConfig.NetUpdateInterval;
     m_LastNetValue     = enCurrent;
 }
예제 #5
0
    public static ItemAsset.Drag CreateItemDrag(int protoId)
    {
        ItemAsset.ItemObject itemObj = ItemAsset.ItemMgr.Instance.CreateItem(protoId);
        if (null == itemObj)
        {
            Debug.LogError("create item failed, protoId:" + protoId);
            return(null);
        }

        return(itemObj.GetCmpt <ItemAsset.Drag>());
    }
예제 #6
0
        public bool Use(ItemAsset.ItemObject item)
        {
            CheckMainPlayerUseItem(item.protoId);
            bool destroy = false;

            destroy = ExtractBundle(item.GetCmpt <ItemAsset.Bundle>()) || destroy;
            destroy = ConsumeItem(item.GetCmpt <ItemAsset.Consume>()) || destroy;
            destroy = LearnReplicatorFormula(item.GetCmpt <ItemAsset.ReplicatorFormula>()) || destroy;
            destroy = LearnMetalScan(item.GetCmpt <ItemAsset.MetalScan>()) || destroy;

            bool remove = TakeOnEquipment(item.GetCmpt <ItemAsset.Equip>());

            if (mPkg != null)
            {
                if (destroy)
                {
                    mPkg.DestroyItem(item, 1);
                }
                else if (remove)
                {
                    mPkg.Remove(item);
                }
            }

            bool ret = destroy || remove;

            if (ret)
            {
                eventor.Dispatch(new EventArg()
                {
                    itemObj = item
                }, this);
            }

            return(ret);
        }
    protected void PutDown(bool isCreation = false)
    {
        ItemAsset.Drag dragging = itemDragging;

        //some item stack count > 1, seed eg.
        if (itemDragging.itemObj.stackCount > 1)
        {
            ItemAsset.ItemObject itemobj = ItemAsset.ItemMgr.Instance.CreateItem(itemDragging.itemObj.protoId);
            dragging = itemobj.GetCmpt <ItemAsset.Drag>();
        }

        /*DragArticleAgent agent = */
        DragArticleAgent.Create(dragging, transform.position, transform.localScale, transform.rotation, SceneMan.InvalidID, null, isCreation);

        RemoveFromBag();
    }
예제 #8
0
    void RPC_SO_InitData(uLink.BitStream stream, uLink.NetworkMessageInfo info)
    {
        ItemAsset.ItemObject itemObj = stream.Read <ItemAsset.ItemObject>();
        transform.position = stream.Read <Vector3>();
        transform.rotation = stream.Read <Quaternion>();

        if (null == itemObj)
        {
            return;
        }

        ItemAsset.Drag drag = itemObj.GetCmpt <ItemAsset.Drag>();
        if (null == drag)
        {
            return;
        }

        DragArticleAgent item = DragArticleAgent.Create(drag, transform.position, transform.localScale, transform.rotation, Id, this);

        if (item.itemLogic != null)
        {
            DragItemLogicFlag flag = item.itemLogic as DragItemLogicFlag;
            if (flag != null)
            {
                _entity = Pathea.EntityMgr.Instance.Get(Id);
                OnSpawned(flag.gameObject);
            }
        }

        if (null == _flagPos)
        {
            _flagPos            = new PeMap.StaticPoint();
            _flagPos.icon       = PeMap.MapIcon.FlagIcon;
            _flagPos.fastTravel = true;
            _flagPos.text       = "Flag_" + Id;
            //_flagPos.campId = TeamId;
            _flagPos.position = transform.position;

            PeMap.LabelMgr.Instance.Add(_flagPos);
        }

        StartCoroutine(RefreshFlag());
    }
예제 #9
0
    void RPC_SO_InitData(uLink.BitStream stream, uLink.NetworkMessageInfo info)
    {
        ItemAsset.ItemObject itemObj = stream.Read <ItemAsset.ItemObject>();
        _pos = transform.position = stream.Read <Vector3>();
        rot  = transform.rotation = stream.Read <Quaternion>();

        if (null == itemObj)
        {
            return;
        }

        ItemAsset.Drag drag = itemObj.GetCmpt <ItemAsset.Drag>();
        if (null == drag)
        {
            return;
        }

        DragArticleAgent item = DragArticleAgent.Create(drag, _pos, transform.localScale, rot, Id, this);

        if (item.itemLogic != null)
        {
            DragItemLogicFlag flag = item.itemLogic as DragItemLogicFlag;
            if (flag != null)
            {
                OnSpawned(flag.gameObject);

                Pathea.PeEntity FlagEntity = flag.gameObject.GetComponent <Pathea.PeEntity>();
                if (null != FlagEntity)
                {
                    Pathea.NetCmpt net = FlagEntity.GetCmpt <Pathea.NetCmpt>();
                    if (null == net)
                    {
                        net = FlagEntity.Add <Pathea.NetCmpt>();
                    }

                    net.network = this;
                }
            }
        }

        OnResetFlag();
    }
예제 #10
0
    IEnumerator WaitForMainPlayer()
    {
        while (null == PlayerNetwork.mainPlayer)
        {
            yield return(null);
        }

        if (hasOwnerAuth)
        {
            if (-1 == _missionId && -1 == _targetId)
            {
                ItemAsset.ItemObject item = ItemAsset.ItemMgr.Instance.Get(Id);
                if (null == item)
                {
                    yield break;
                }

                ItemAsset.Drag drag = item.GetCmpt <ItemAsset.Drag>();
                if (null == drag)
                {
                    yield break;
                }

                DragArticleAgent.Create(drag, _pos, Vector3.one, Quaternion.identity, Id, this);
                StartCoroutine(WaitForActivate());
            }
            else
            {
                SceneEntityCreator.self.AddMissionPoint(_missionId, _targetId, Id);
                StartCoroutine(WaitForActivate());
            }
        }
        else
        {
            RPCServer(EPacketType.PT_InGame_TDInitData);
        }
    }
예제 #11
0
    public override void InitEquipment(PeEntity entity, ItemAsset.ItemObject itemObj)
    {
        base.InitEquipment(entity, itemObj);
        m_Equip.SetEnergyGunLogic(this);

        m_ItemAmmoAttr = itemObj.GetCmpt <ItemAsset.GunAmmo>();
        if (null != m_ItemAmmoAttr)
        {
            if (null != m_Magazine)
            {
                if (m_ItemAmmoAttr.count < 0)
                {
                    m_ItemAmmoAttr.count = (int)magazineSize;
                }

                m_Magazine.m_Value = m_ItemAmmoAttr.count;
            }
        }

        m_Time             = new UTimer();
        m_Time.ElapseSpeed = -1f;
        m_Time.Second      = GameConfig.NetUpdateInterval;
        m_LastNetValue     = enCurrent;
    }
예제 #12
0
        /// <summary>
        /// 仅在创建游戏实体时初始化, 拖拽效果不会调用
        /// </summary>
        public void InitController(int itemInstanceId)
        {
            _creationController = GetComponent <CreationController>();
            _srcItem            = ItemAsset.ItemMgr.Instance.Get(itemInstanceId);
            _lifeCmpt           = _srcItem.GetCmpt <ItemAsset.LifeLimit>();
            _energyCmpt         = _srcItem.GetCmpt <ItemAsset.Energy>();

            // PeEntity

            int id = WorldInfoMgr.Instance.FetchNonRecordAutoId();

            _creationPeEntity         = EntityMgr.Instance.InitEntity(id, gameObject);
            _creationPeEntity.carrier = this as CarrierController;

            // ViewCmpt
            var view = gameObject.AddComponent <CreationViewCmpt>();

            _creationPeEntity.viewCmpt = view;
            view.Init(creationController);

            // PeTrans

            PeTrans tr = gameObject.AddComponent <PeTrans>();

            _creationPeEntity.peTrans = tr;
            tr.SetModel(transform);
            tr.bound = _creationController.bounds;

            // SkEntity

            _creationSkEntity = gameObject.AddComponent <CreationSkEntity>();
            _creationSkEntity.Init(this);
            _creationPeEntity.skEntity = _creationSkEntity;
            _creationSkEntity.m_Attrs  = new PESkEntity.Attr[5];
            for (int i = 0; i < _creationSkEntity.m_Attrs.Length; i++)
            {
                _creationSkEntity.m_Attrs[i] = new PESkEntity.Attr();
            }

            _creationSkEntity.m_Attrs[0].m_Type  = AttribType.Hp;
            _creationSkEntity.m_Attrs[0].m_Value = _lifeCmpt.floatValue.current;

            _creationSkEntity.m_Attrs[1].m_Type  = AttribType.HpMax;
            _creationSkEntity.m_Attrs[1].m_Value = _lifeCmpt.valueMax;

            _creationSkEntity.m_Attrs[2].m_Type  = AttribType.CampID;
            _creationSkEntity.m_Attrs[2].m_Value = 0;

            _creationSkEntity.m_Attrs[3].m_Type  = AttribType.DamageID;
            _creationSkEntity.m_Attrs[3].m_Value = 0;

            _creationSkEntity.m_Attrs[4].m_Type  = AttribType.DefaultPlayerID;
            _creationSkEntity.m_Attrs[4].m_Value = 99;

            _creationSkEntity.onHpChange += (skEntity, deltaHp) =>
            {
                _lifeCmpt.floatValue.current = _creationSkEntity.GetAttribute(AttribType.Hp);
                OnHpChange(deltaHp, _lifeCmpt.floatValue.current <= 0);
            };

            _creationSkEntity.InitEntity();

            // Physics

            _rigidbody              = gameObject.AddComponent <Rigidbody>();
            _rigidbody.mass         = mass;
            _rigidbody.centerOfMass = centerOfMass;
            // 椭球体的惯性张量 作为基数
            var size = creationController.bounds.size;

            _rigidbody.inertiaTensor = Vector3.Scale(
                inertiaTensorScale,
                _rigidbody.mass * 0.05f * new Vector3(
                    size.y * size.y + size.z * size.z,
                    size.x * size.x + size.z * size.z,
                    size.x * size.x + size.y * size.y));
            _rigidbody.collisionDetectionMode = CollisionDetectionMode.Continuous;
            _rigidbody.interpolation          = RigidbodyInterpolation.None;
            _rigidbody.useGravity             = true;
            _rigidbody.isKinematic            = true;
            _rigidbody.maxAngularVelocity     = PEVCConfig.instance.maxRigidbodyAngularSpeed;
            InitDrags(out _standardDrag, out _underwaterDrag, out _standardAngularDrag, out _underwaterAngularDrag);

            // Network

            InitNetwork();

            // Weapons

            LoadParts(ref _weapons);
            for (int i = 0; i < _weapons.Length; i++)
            {
                _weapons[i].Init(i);
            }

            SetOwner(null);

            // InitOtherThings
            InitOtherThings();

            // Damage Controller
            gameObject.AddComponent <CreationDamageController>().Init(this);

            // LOD
            gameObject.AddComponent <DragCreationLodCmpt>();
            gameObject.AddComponent <DragItemLogicCreation>();
        }
예제 #13
0
 public void UseFromNet(ItemAsset.ItemObject item)
 {
     ConsumeItem(item.GetCmpt <ItemAsset.Consume>());
 }