Example #1
0
        //---------------------------------------------------------------------
        void longFire(float elapsed_tm)
        {
            mfTotalSecond += elapsed_tm;

            if (mfTotalSecond - mfLastFireSecond > mfFireTimeSpan)
            {
                mfLastFireSecond = mfTotalSecond;

                float random = getRandom01();
                if (random < 0.1f)
                {
                    mTurret.c2sEndLongpress();
                    change2observeState();
                }

                int cur_gold = mScene.getListener().onLogicSceneGetPlayerGold(mTurret.getScenePlayerInfo().et_player_rpcid);
                if (cur_gold < mTurret.getTurretRate())
                {
                    mTurret.c2sEndLongpress();
                    change2observeState();
                    return;
                }
                else
                {
                    autoFire();
                }
            }
        }
Example #2
0
        //---------------------------------------------------------------------
        // 计算鱼死亡分值并更新玩家状态
        void _calculateFishScore(uint et_player_rpcid, CLogicTurret turret, CLogicFish fish, int rate, int bullet_objid)
        {
            // 计算鱼的死亡概率,鱼死亡则销毁
            int score = 1;// 分值
            int effect_fish_vib_id = -1;

            bool fish_die = fish.hit(et_player_rpcid, rate, ref score, ref effect_fish_vib_id);

            if (fish_die)
            {
                // 奖励金币
                if (turret.getBufferPower())
                {
                    rate *= 2;
                }
                int total_score = rate * score;

                _tScenePlayer player   = turret.getScenePlayerInfo();
                int           cur_gold = mScene.getListener().onLogicSceneGetPlayerGold(player.et_player_rpcid);
                cur_gold += total_score;
                mScene.getListener().onLogicSceneSetPlayerGold(player.et_player_rpcid, cur_gold, fish.FishVibId, "FishLord", rate);

                // 通知其他模块鱼死亡
                mScene.getListener().onLogicSceneFishDie(et_player_rpcid, fish.FishVibId, total_score);

                // 服务端广播鱼死亡
                mScene.getProtocol().s2allcFishDie(et_player_rpcid,
                                                   total_score, bullet_objid, fish.FishObjId, effect_fish_vib_id, rate);
            }
        }
Example #3
0
        //---------------------------------------------------------------------
        // 服务端广播玩家进入
        public void s2allcPlayerEnter(CLogicTurret turret)
        {
            List <string> vec_param = new List <string>();

            vec_param.Add(((byte)_eProtocolDesktop.s2allcPlayerEnter).ToString());

            _tScenePlayer scene_player = turret.getScenePlayerInfo();

            vec_param.Add(scene_player.et_player_rpcid.ToString());
            vec_param.Add(scene_player.nickname);
            int player_gold = mScene.getListener().onLogicSceneGetPlayerGold(scene_player.et_player_rpcid);

            vec_param.Add(player_gold.ToString());
            vec_param.Add(scene_player.rate.ToString());
            vec_param.Add(turret.getTurretId().ToString());
            vec_param.Add(turret.getBufferPower().ToString());
            vec_param.Add(turret.getBufferFreeze().ToString());
            vec_param.Add(turret.getBufferLongpress().ToString());
            vec_param.Add(turret.getBufferRapid().ToString());
            vec_param.Add(turret.getTurretAngle().ToString());
            vec_param.Add(turret.getTurretRate().ToString());
            vec_param.Add(turret.getTurretType().ToString());
            vec_param.Add(turret.getLockFishObjId().ToString());

            mQueProtocol.Enqueue(vec_param);
        }
Example #4
0
        //-------------------------------------------------------------------------
        // 被击中,返回是否鱼死亡
        public bool hit(uint et_player_rpcid, int bullet_rate, ref int score, ref int effect_fish_vib_id)
        {
            if (IsDie)
            {
                return(false);      // 死鱼是打不死的
            }
            double random_double = mScene.getLevel().getRandomScore();
            double die_chance    = 1.0;

            // 鱼自身概率
            if (mFishData.FishDieChance >= 0)
            {
                die_chance = 1.0 / (double)mFishData.FishDieChance;
            }

            // 系统抽水率+玩家动态概率提升
            CLogicTurret turret = mScene.getTurret(et_player_rpcid);

            if (turret != null)
            {
                die_chance *= mScene.getPumpingRate() * turret.getScenePlayerInfo().rate;
            }

            if (mScene.isFishMustDie())
            {
                // 调试需要,鱼必死
            }
            else if (random_double > die_chance)
            {
                // 根据概率计算,鱼不一定死
                return(false);
            }

            // 使用固定分值
            score = mFishData.FishScore;

            // 极速发炮时命中鱼后有一定概率获得能量炮状态
            if (turret != null && turret.getBufferRapid())
            {
                if (mScene.getLevel().getRandoNumber(0, 10000) < 50)
                {
                    turret.activeBufferPower();
                }
            }

            // 需要在特效参数前加入销毁列表,aoe会根据这个列表判断鱼是不是已经死了死了就不计算。
            signDestroy();

            foreach (var it in mFishData.Effects)
            {
                int vib_compose_id = it.Id;
                if (vib_compose_id > 0)
                {
                    Dictionary <string, object> param = new Dictionary <string, object>();
                    param.Add("SourcePosition", mMassEntity.Position);
                    param.Add("PlayerID", et_player_rpcid);
                    param.Add("BulletRate", bullet_rate);
                    param.Add("RedFishObjId", mFishObjId);
                    param.Add("DieFishObjId", mFishObjId);

                    List <List <object> > obj = mScene.addEffect(vib_compose_id, param, EffectTypeEnum.Server);
                    if (obj == null)
                    {
                        continue;
                    }
                    foreach (var l in obj)
                    {
                        if (l.Count == 0)
                        {
                            continue;
                        }

                        string effect_name = (string)l[0];
                        if (effect_name == "Lighting")
                        {
                            score += (int)l[1];
                            effect_fish_vib_id = (int)l[2];
                        }
                        else if (effect_name == "FullScreenBomb")
                        {
                            score += (int)l[1];
                        }
                        else if (effect_name == "EffectAOE")
                        {
                            score += (int)l[1];
                        }
                    }
                }
            }

            return(true);
        }