示例#1
0
    /// <param name="playerId">玩家id</param>
    /// <param name="startStarId">出发星球</param>
    /// <param name="endStarId">目标星球</param>
    /// <param name="isSelfProduce">1表示只出战自产兵,0表示全部出战</param>
    /// <param name="soldierTypeList">出战兵种id列表</param>
    /// <param name="percent">出战兵种数量百分比,0表示只出战一个</param>
    public void SendSoldier(LuaTable lt)
    {
        uint        _playerId           = Convert.ToUInt32(lt["0"]);
        UnitStar    _StartStar          = GetUnitStarById(Convert.ToInt32(lt["1"]));
        UnitStar    _endStar            = GetUnitStarById(Convert.ToInt32(lt["2"]));
        int         isSelfProduce       = Convert.ToInt32(lt["3"]);
        LuaTable    soldierTypeluatable = lt["4"] as LuaTable;
        float       percent             = (float)Convert.ToDouble(lt["5"]);
        int         _soldierType        = 0;
        UnitSoldier _soldier;

        MapUtil.RoutePlanResult _result = MapUtil.Plan(_StartStar, _endStar);
        for (int i = 0; i < soldierTypeluatable.Count; i++)
        {
            _soldierType = Convert.ToInt32(soldierTypeluatable[i.ToString()]);

            _soldier = _StartStar.GetSoldierById(_playerId, _soldierType);

            if (_soldier == null)
            {
                continue;
            }

            if (isSelfProduce == 1 && _soldier.SelfProduceEnergy <= 0)
            {
                continue;
            }

            _soldier = _StartStar.RemoveSoldier(_playerId, _soldierType);

            int _moveOrdinaryEnergy;
            int _OrdinaryEnergy = _soldier.CurEnergy - _soldier.SelfProduceEnergy;
            if (isSelfProduce == 0)//移动全部士兵
            {
                _moveOrdinaryEnergy = (int)(_OrdinaryEnergy * percent);
            }
            else
            {//移动自产士兵
                _moveOrdinaryEnergy = 0;
            }
            int _moveSelfProduceEnergy = (int)(_soldier.SelfProduceEnergy * percent);

            /*if (_soldier.BaseSoldierData.id == 1)
             * {
             *  LoggerHelper.Error("_moveSelfProduceEnergy:" + _moveSelfProduceEnergy + " percent:" + percent + " _soldier.SelfProduceEnergy:" + _soldier.SelfProduceEnergy);
             * }*/
            int _leftOrinaryEnergy     = _OrdinaryEnergy - _moveOrdinaryEnergy;
            int _leftSelfProduceEnergy = _soldier.SelfProduceEnergy - _moveSelfProduceEnergy;
            _soldier.RemoveSoldier(_leftOrinaryEnergy, false);
            _soldier.RemoveSoldier(_leftSelfProduceEnergy);
            if (_leftOrinaryEnergy > 0)
            {
                addSoldierToStar(_playerId, _StartStar.UnitId, _soldierType, _leftOrinaryEnergy, 0, false);
            }
            if (_leftSelfProduceEnergy > 0)
            {
                addSoldierToStar(_playerId, _StartStar.UnitId, _soldierType, _leftSelfProduceEnergy, 1, false);
            }

            if (_soldier != null)
            {
                _soldier.MovePath = _result;
                MoveSoldierList.Add(_soldier);
            }
        }
    }
示例#2
0
    /// <summary>
    /// 攻击士兵
    /// </summary>
    /// <param name="_starID"></param>
    /// <param name="_buildingTime"></param>
    public void AttackSoldier(uint _playerId, int _starID, int _soldierType, int _Energy, int _type)
    {
        /*LoggerHelper.Error("_playerId:" + _playerId + "_starID:" + _starID +
         *  "_soldierType:" + _soldierType + "_Energy:" + _Energy );*/
        if (_Energy < 0)
        {
            _Energy = 0;
        }
        UnitStar    _star    = GetUnitStarById(_starID);
        UnitSoldier _Soldier = _star.GetSoldierById(_playerId, _soldierType);

        if (_Soldier != null)
        {
            _Soldier.RemoveSoldier(_Energy);
            //LoggerHelper.Error(_Soldier.BaseSoldierData.energy + " CurEnergy:" + _Soldier.CurEnergy);
            if (_star.IsExplore && (_Energy >= _Soldier.BaseSoldierData.energy))
            {
                ShowFloatText(string.Concat(-(_Energy / _Soldier.BaseSoldierData.energy)), _Soldier.PositionX, _Soldier.PositionY, _Soldier.BaseSoldierData.float_color);
            }
            //LoggerHelper.Error("_playerId:" + _playerId + " _Energy" + (_Energy / _Soldier.BaseSoldierData.energy));
        }
        else
        {
            //LoggerHelper.Debug("没有该类士兵");
            return;
        }

        switch (_type)
        { //0建筑 1hit 2侵入
        case 0:
            _Soldier.OnIntrusion(_Energy);
            break;

        case 1:
            if (_Soldier.CurEnergy <= 0)
            {
                _Soldier.OnDead();
                _star.showAttackSoldierEffect(_playerId, _Soldier.UnitGO.transform.localPosition);
            }
            else
            {
                _Soldier.OnHit();
                _star.showAttackSoldierEffect(_playerId, _Soldier.UnitGO.transform.localPosition);
            }

            break;

        case 2:
            _Soldier.OnIntrusion(_Energy);
            break;
        }
        //type 类型士兵全军覆没
        if (_Soldier.CurEnergy <= 0)
        {
            _star.RemoveSoldier(_playerId, _soldierType);
            _Soldier.ClearUnit();

            IsAttackStar(_star);
        }
        _star.CulAllSoldierAttack();

        m_starDataManager.StarOrEndStartFighting(_star);
    }