public override void CollidedByObject(Physics phy) { if (phy is SimpleBomb) { SimpleBomb simpleBomb = phy as SimpleBomb; simpleBomb.Owner.PickBox(this); } }
public bool ShootImp(int bombId, int x, int y, int force, int angle, int bombCount) { BallInfo ballInfo = BallMgr.FindBall(bombId); Tile shape = BallMgr.FindTile(bombId); BombType ballType = BallMgr.GetBallType(bombId); //if (ballInfo != null && shape != null) if (ballInfo != null)//某些炸弹无图 { GSPacketIn pkg = new GSPacketIn((byte)ePackageType.GAME_CMD, Id); pkg.Parameter1 = Id; pkg.WriteByte((byte)eTankCmdType.FIRE); pkg.WriteInt(bombCount); float lifeTime = 0; for (int i = 0; i < bombCount; i++) { double reforce = 1; int reangle = 0; if (i == 1) { reforce = 0.9; reangle = -5; } else if (i == 2) { reforce = 1.1; reangle = 5; } int vx = (int)(force * reforce * Math.Cos((double)(angle + reangle) / 180 * Math.PI)); int vy = (int)(force * reforce * Math.Sin((double)(angle + reangle) / 180 * Math.PI)); //Console.WriteLine(string.Format("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< vx:{0} vy:{1}", vx, vy)); SimpleBomb bomb = new SimpleBomb(m_game.PhysicalId++, ballType, this, m_game, ballInfo, shape, ControlBall); bomb.SetXY(x, y); bomb.setSpeedXY(vx, vy); m_map.AddPhysical(bomb); bomb.StartMoving(); pkg.WriteInt(0); pkg.WriteInt(0); pkg.WriteBoolean(bomb.DigMap); pkg.WriteInt(bomb.Id); pkg.WriteInt(x); pkg.WriteInt(y); pkg.WriteInt(vx); pkg.WriteInt(vy); ////FUnny gun //var random = Game.Random.Next(0, 2); //switch (random) //{ // case 0: pkg.WriteInt(51); // break; // case 1: pkg.WriteInt(67); // break; // case 2: pkg.WriteInt(16); // break; //} pkg.WriteInt(bomb.BallInfo.ID); //FlyingPartical //pkg.WriteString(bomb.BallInfo.FlyingPartical); pkg.WriteString(""); pkg.WriteInt(5); pkg.WriteInt(5); //pkg.WriteInt(0); pkg.WriteInt(bomb.Actions.Count); foreach (BombAction ac in bomb.Actions) { pkg.WriteInt((ac.TimeInt != null) ? ac.TimeInt : 0); pkg.WriteInt((ac.Type != null) ? ac.Type : 0); pkg.WriteInt((ac.Param1 != null) ? ac.Param1 : 0); pkg.WriteInt((ac.Param2 != null) ? ac.Param2 : 0); pkg.WriteInt((ac.Param3 != null) ? ac.Param3 : 0); pkg.WriteInt((ac.Param3 != null) ? ac.Param4 : 0); } lifeTime = Math.Max(lifeTime, bomb.LifeTime); } //TrieuLSL //pkg.WriteInt(new Random().Next(50)); pkg.WriteInt(new Random().Next(50)); m_game.SendToAll(pkg); //客户端有爆炸效果,多等待2秒 m_game.WaitTime((int)((lifeTime + 2 + bombCount / 3) * 1000)); return(true); } return(false); }
public bool ShootImp(int bombId, int x, int y, int force, int angle, int bombCount, int shootCount) { BallInfo ballInfo = BallMgr.FindBall(bombId); Tile shape = BallMgr.FindTile(bombId); BombType ballType = BallMgr.GetBallType(bombId); int _wind = (int)(m_map.wind * 10); if (ballInfo != null)//某些炸弹无图 { GSPacketIn pkg = new GSPacketIn((byte)ePackageType.GAME_CMD, Id); pkg.Parameter1 = Id; pkg.WriteByte((byte)eTankCmdType.FIRE); pkg.WriteInt(_wind); pkg.WriteBoolean(_wind > 0); pkg.WriteByte(m_game.GetVane(_wind, 1)); pkg.WriteByte(m_game.GetVane(_wind, 2)); pkg.WriteByte(m_game.GetVane(_wind, 3)); pkg.WriteInt(bombCount); float lifeTime = 0; for (int i = 0; i < bombCount; i++) { double reforce = 1; int reangle = 0; if (i == 1) { reforce = 0.9; reangle = -5; } else if (i == 2) { reforce = 1.1; reangle = 5; } int vx = (int)(force * reforce * Math.Cos((double)(angle + reangle) / 180 * Math.PI)); int vy = (int)(force * reforce * Math.Sin((double)(angle + reangle) / 180 * Math.PI)); SimpleBomb bomb = new SimpleBomb(m_game.PhysicalId++, ballType, this, m_game, ballInfo, shape, ControlBall); bomb.SetXY(x, y); bomb.setSpeedXY(vx, vy); m_map.AddPhysical(bomb); bomb.StartMoving(); pkg.WriteInt(1);//number = _loc_2.readInt(); pkg.WriteInt(1);//shootCount = _loc_2.readInt(); pkg.WriteBoolean(bomb.DigMap); pkg.WriteInt(bomb.Id); pkg.WriteInt(x); pkg.WriteInt(y); pkg.WriteInt(vx); pkg.WriteInt(vy); pkg.WriteInt(bomb.BallInfo.ID); pkg.WriteString(bomb.BallInfo.FlyingPartical); pkg.WriteInt((bomb.BallInfo.Radii*1000)/4);//trminhpc pkg.WriteInt((int)bomb.BallInfo.Power*1000);//trminhpc pkg.WriteInt(bomb.Actions.Count); foreach (BombAction ac in bomb.Actions) { pkg.WriteInt(ac.TimeInt); pkg.WriteInt(ac.Type); pkg.WriteInt(ac.Param1); pkg.WriteInt(ac.Param2); pkg.WriteInt(ac.Param3); pkg.WriteInt(ac.Param4); } lifeTime = Math.Max(lifeTime, bomb.LifeTime); } //pet Attack pkg.WriteInt(0); //foreach (BombAction ac in bombPet.Actions) //{ pkg.WriteInt(1);//_loc_27 = _loc_2.readInt();//target pkg.WriteInt(300);//_loc_29 = _loc_2.readInt//damage pkg.WriteInt(500);//_loc_30 = _loc_2.readInt();//hp pkg.WriteInt(10);//_loc_31 = _loc_2.readInt();//dander //} pkg.WriteInt(102);//_loc_2.readInt();//attackid m_game.SendToAll(pkg); m_game.WaitTime((int)((lifeTime + 2 + bombCount / 3) * 1000)); return true; } return false; }
public bool ShootImp(int bombId, int x, int y, int force, int angle, int bombCount, int shootCount) { BallInfo ballInfo = BallMgr.FindBall(bombId); Tile shape = BallMgr.FindTile(bombId); BombType ballType = BallMgr.GetBallType(bombId); int _wind = (int)(m_map.wind * 10); if (ballInfo != null)//某些炸弹无图 { GSPacketIn pkg = new GSPacketIn((byte)ePackageType.GAME_CMD, Id); pkg.Parameter1 = Id; pkg.WriteByte((byte)eTankCmdType.FIRE); pkg.WriteInt(_wind); pkg.WriteBoolean(_wind > 0); pkg.WriteByte(m_game.GetVane(_wind, 1)); pkg.WriteByte(m_game.GetVane(_wind, 2)); pkg.WriteByte(m_game.GetVane(_wind, 3)); pkg.WriteInt(bombCount); float lifeTime = 0; for (int i = 0; i < bombCount; i++) { double reforce = 1; int reangle = 0; if (i == 1) { reforce = 0.9; reangle = -5; } else if (i == 2) { reforce = 1.1; reangle = 5; } int vx = (int)(force * reforce * Math.Cos((double)(angle + reangle) / 180 * Math.PI)); int vy = (int)(force * reforce * Math.Sin((double)(angle + reangle) / 180 * Math.PI)); SimpleBomb bomb = new SimpleBomb(m_game.PhysicalId++, ballType, this, m_game, ballInfo, shape, ControlBall); bomb.SetXY(x, y); bomb.setSpeedXY(vx, vy); m_map.AddPhysical(bomb); bomb.StartMoving(); pkg.WriteInt(1); //number = _loc_2.readInt(); pkg.WriteInt(1); //shootCount = _loc_2.readInt(); pkg.WriteBoolean(bomb.DigMap); pkg.WriteInt(bomb.Id); pkg.WriteInt(x); pkg.WriteInt(y); pkg.WriteInt(vx); pkg.WriteInt(vy); pkg.WriteInt(bomb.BallInfo.ID); pkg.WriteString(bomb.BallInfo.FlyingPartical); pkg.WriteInt((bomb.BallInfo.Radii * 1000) / 4); //trminhpc pkg.WriteInt((int)bomb.BallInfo.Power * 1000); //trminhpc pkg.WriteInt(bomb.Actions.Count); foreach (BombAction ac in bomb.Actions) { pkg.WriteInt(ac.TimeInt); pkg.WriteInt(ac.Type); pkg.WriteInt(ac.Param1); pkg.WriteInt(ac.Param2); pkg.WriteInt(ac.Param3); pkg.WriteInt(ac.Param4); } lifeTime = Math.Max(lifeTime, bomb.LifeTime); } //pet Attack pkg.WriteInt(0); //foreach (BombAction ac in bombPet.Actions) //{ pkg.WriteInt(1); //_loc_27 = _loc_2.readInt();//target pkg.WriteInt(300); //_loc_29 = _loc_2.readInt//damage pkg.WriteInt(500); //_loc_30 = _loc_2.readInt();//hp pkg.WriteInt(10); //_loc_31 = _loc_2.readInt();//dander //} pkg.WriteInt(102);//_loc_2.readInt();//attackid m_game.SendToAll(pkg); m_game.WaitTime((int)((lifeTime + 2 + bombCount / 3) * 1000)); return(true); } return(false); }
public bool ShootImp(int bombId, int x, int y, int force, int angle, int bombCount) { BallInfo ballInfo = BallMgr.FindBall(bombId); Tile shape = BallMgr.FindTile(bombId); BombType ballType = BallMgr.GetBallType(bombId); //if (ballInfo != null && shape != null) if (ballInfo != null)//某些炸弹无图 { GSPacketIn pkg = new GSPacketIn((byte)ePackageType.GAME_CMD, Id); pkg.Parameter1 = Id; pkg.WriteByte((byte)eTankCmdType.FIRE); pkg.WriteInt(bombCount); float lifeTime = 0; for (int i = 0; i < bombCount; i++) { double reforce = 1; int reangle = 0; if (i == 1) { reforce = 0.9; reangle = -5; } else if (i == 2) { reforce = 1.1; reangle = 5; } int vx = (int)(force * reforce * Math.Cos((double)(angle + reangle) / 180 * Math.PI)); int vy = (int)(force * reforce * Math.Sin((double)(angle + reangle) / 180 * Math.PI)); //Console.WriteLine(string.Format("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< vx:{0} vy:{1}", vx, vy)); SimpleBomb bomb = new SimpleBomb(m_game.PhysicalId++, ballType, this, m_game, ballInfo, shape, ControlBall); bomb.SetXY(x, y); bomb.setSpeedXY(vx, vy); m_map.AddPhysical(bomb); bomb.StartMoving(); pkg.WriteInt(0); pkg.WriteInt(0); pkg.WriteBoolean(bomb.DigMap); pkg.WriteInt(bomb.Id); pkg.WriteInt(x); pkg.WriteInt(y); pkg.WriteInt(vx); pkg.WriteInt(vy); ////FUnny gun //var random = Game.Random.Next(0, 2); //switch (random) //{ // case 0: pkg.WriteInt(51); // break; // case 1: pkg.WriteInt(67); // break; // case 2: pkg.WriteInt(16); // break; //} pkg.WriteInt(bomb.BallInfo.ID); //FlyingPartical //pkg.WriteString(bomb.BallInfo.FlyingPartical); pkg.WriteString(""); pkg.WriteInt(5); pkg.WriteInt(5); //pkg.WriteInt(0); pkg.WriteInt(bomb.Actions.Count); foreach (BombAction ac in bomb.Actions) { pkg.WriteInt((ac.TimeInt != null) ? ac.TimeInt : 0); pkg.WriteInt((ac.Type != null) ? ac.Type : 0); pkg.WriteInt((ac.Param1 != null) ? ac.Param1 : 0); pkg.WriteInt((ac.Param2 != null) ? ac.Param2 : 0); pkg.WriteInt((ac.Param3 != null) ? ac.Param3 : 0); pkg.WriteInt((ac.Param3 != null) ? ac.Param4 : 0); } lifeTime = Math.Max(lifeTime, bomb.LifeTime); } //TrieuLSL //pkg.WriteInt(new Random().Next(50)); pkg.WriteInt(new Random().Next(50)); m_game.SendToAll(pkg); //客户端有爆炸效果,多等待2秒 m_game.WaitTime((int)((lifeTime + 2 + bombCount / 3) * 1000)); return true; } return false; }
public bool ShootImp(int bombId, int x, int y, int force, int angle, int bombCount, int shootCount) { BallInfo ballInfo = BallMgr.FindBall(bombId); Tile shape = BallMgr.FindTile(bombId); BombType ballType = BallMgr.GetBallType(bombId); int num = (int)(this.m_map.wind * 10f); if (ballInfo != null) { GSPacketIn gSPacketIn = new GSPacketIn(91, base.Id); gSPacketIn.Parameter1 = base.Id; gSPacketIn.WriteByte(2); gSPacketIn.WriteInt(num); gSPacketIn.WriteBoolean(num > 0); gSPacketIn.WriteByte(this.m_game.GetVane(num, 1)); gSPacketIn.WriteByte(this.m_game.GetVane(num, 2)); gSPacketIn.WriteByte(this.m_game.GetVane(num, 3)); gSPacketIn.WriteInt(bombCount); float num2 = 0f; SimpleBomb simpleBomb = null; for (int i = 0; i < bombCount; i++) { double num3 = 1.0; int num4 = 0; if (i == 1) { num3 = 0.9; num4 = -5; } else { if (i == 2) { num3 = 1.1; num4 = 5; } } int num5 = (int)((double)force * num3 * Math.Cos((double)(angle + num4) / 180.0 * 3.1415926535897931)); int num6 = (int)((double)force * num3 * Math.Sin((double)(angle + num4) / 180.0 * 3.1415926535897931)); simpleBomb = new SimpleBomb(this.m_game.PhysicalId++, ballType, this, this.m_game, ballInfo, shape, this.ControlBall); simpleBomb.SetXY(x, y); simpleBomb.setSpeedXY(num5, num6); this.m_map.AddPhysical(simpleBomb); simpleBomb.StartMoving(); gSPacketIn.WriteInt(0); gSPacketIn.WriteInt(0); gSPacketIn.WriteBoolean(simpleBomb.DigMap); gSPacketIn.WriteInt(simpleBomb.Id); gSPacketIn.WriteInt(x); gSPacketIn.WriteInt(y); gSPacketIn.WriteInt(num5); gSPacketIn.WriteInt(num6); gSPacketIn.WriteInt(simpleBomb.BallInfo.ID); gSPacketIn.WriteString(simpleBomb.BallInfo.FlyingPartical); gSPacketIn.WriteInt(simpleBomb.BallInfo.Radii * 1000 / 4); gSPacketIn.WriteInt((int)simpleBomb.BallInfo.Power * 1000); gSPacketIn.WriteInt(simpleBomb.Actions.Count); foreach (BombAction current in simpleBomb.Actions) { gSPacketIn.WriteInt(current.TimeInt); gSPacketIn.WriteInt(current.Type); gSPacketIn.WriteInt(current.Param1); gSPacketIn.WriteInt(current.Param2); gSPacketIn.WriteInt(current.Param3); gSPacketIn.WriteInt(current.Param4); } num2 = Math.Max(num2, simpleBomb.LifeTime); } int num7 = 0; int count = simpleBomb.PetActions.Count; if (count > 0 && this.PetBaseAtt > 0) { gSPacketIn.WriteInt(count); foreach (BombAction current2 in simpleBomb.PetActions) { gSPacketIn.WriteInt(current2.Param1); gSPacketIn.WriteInt(current2.Param2); gSPacketIn.WriteInt(current2.Param4); gSPacketIn.WriteInt(current2.Param3); } gSPacketIn.WriteInt(1); num7 = 2; } else { gSPacketIn.WriteInt(0); gSPacketIn.WriteInt(0); } this.m_game.SendToAll(gSPacketIn); this.m_game.WaitTime((int)((num2 + 2f + (float)num7 + (float)(bombCount / 3)) * 1000f)); return(true); } return(false); }
public bool ShootImp(int bombId, int x, int y, int force, int angle, int bombCount) { BallInfo ballInfo = BallMgr.FindBall(bombId); Tile shape = BallMgr.FindTile(bombId); BombType ballType = BallMgr.GetBallType(bombId); bool result; if (ballInfo != null) { GSPacketIn pkg = new GSPacketIn(91); pkg.Parameter1 = base.Id; pkg.WriteByte(2); pkg.WriteInt(bombCount); float lifeTime = 0f; for (int i = 0; i < bombCount; i++) { double reforce = 1.0; int reangle = 0; if (i == 1) { reforce = 0.9; reangle = -5; } else { if (i == 2) { reforce = 1.1; reangle = 5; } } int vx = (int)((double)force * reforce * Math.Cos((double)(angle + reangle) / 180.0 * 3.1415926535897931)); int vy = (int)((double)force * reforce * Math.Sin((double)(angle + reangle) / 180.0 * 3.1415926535897931)); SimpleBomb bomb = new SimpleBomb(this.m_game.physicalId++, ballType, this, this.m_game, ballInfo, shape, this.ControlBall || this.GemControlBall); bomb.SetXY(x, y); bomb.setSpeedXY(vx, vy); this.m_map.AddPhysical(bomb); bomb.StartMoving(); pkg.WriteBoolean(bomb.DigMap); pkg.WriteInt(bomb.Id); pkg.WriteInt(x); pkg.WriteInt(y); pkg.WriteInt(vx); pkg.WriteInt(vy); pkg.WriteInt(bomb.BallInfo.ID); if (this.FlyingPartical != 0) { pkg.WriteString(this.FlyingPartical.ToString()); } else { pkg.WriteString(ballInfo.FlyingPartical); } pkg.WriteInt(bomb.Actions.Count); foreach (BombAction ac in bomb.Actions) { pkg.WriteInt(ac.TimeInt); pkg.WriteInt(ac.Type); pkg.WriteInt(ac.Param1); pkg.WriteInt(ac.Param2); pkg.WriteInt(ac.Param3); pkg.WriteInt(ac.Param4); } lifeTime = Math.Max(lifeTime, bomb.LifeTime); } this.m_game.SendToAll(pkg); this.m_game.WaitTime((int)((lifeTime + 2f + (float)(bombCount / 3)) * 1000f)); result = true; } else { Living.log.Error(string.Format("Living ShootImpl ballInfo is null. bombId : {0}", bombId)); result = false; } return(result); }