|
@@ -38,6 +38,8 @@ namespace ET.Server
|
|
|
self.HuResult = -1;
|
|
|
self.CardList = new List<int>();
|
|
|
self.UpdateTime = 0;
|
|
|
+
|
|
|
+ self.Difen = 1;
|
|
|
|
|
|
|
|
|
for (int i = 0; i < 4; i++)
|
|
@@ -1282,7 +1284,251 @@ namespace ET.Server
|
|
|
|
|
|
private static void SettlementHu(this HGHHComponent self)
|
|
|
{
|
|
|
+ Room room = self.GetParent<Room>();
|
|
|
+ if (room == null)
|
|
|
+ {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ G2C_HGHHSettlementPush push = new ();
|
|
|
+ push.CurRound = self.CurrentRound;
|
|
|
+ push.PlayerInfo = new List<PlayerInfo>();
|
|
|
+
|
|
|
+ switch (self.HuResult)
|
|
|
+ {
|
|
|
+ case (int)HGHHConst.Result.DIANPAO:
|
|
|
+ if (self.ClickHuIds.Count > 0)
|
|
|
+ {
|
|
|
+ long loseFen = 0;
|
|
|
+ foreach (long winId in self.ClickHuIds)
|
|
|
+ {
|
|
|
+ Player winPlayer = room.GetPlayer(winId);
|
|
|
+ if (winPlayer == null)
|
|
|
+ {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ int multiple = HGHHConst.ScoreType[winPlayer.HuType];
|
|
|
+ if (self.ZhuangPos == self.DisCardPlayer.Pos && self.DisCardPlayer.DiscardCount == 1)
|
|
|
+ {
|
|
|
+ multiple *= 64;
|
|
|
+ }
|
|
|
+ int n = 0;
|
|
|
+ long fen = 0;
|
|
|
+ if (multiple * (long) Math.Pow(2, n) < 64) {
|
|
|
+ fen = self.Difen * multiple * (long) Math.Pow(2, n);
|
|
|
+ } else {
|
|
|
+ fen = self.Difen * 64;
|
|
|
+ }
|
|
|
+
|
|
|
+ PlayerInfo playerInfo = self.SettlementWin(winPlayer, fen);
|
|
|
+ if (playerInfo != null)
|
|
|
+ {
|
|
|
+ push.PlayerInfo.Add(playerInfo);
|
|
|
+ }
|
|
|
+
|
|
|
+ loseFen += fen;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ PlayerInfo loseInfo = self.SettlementLose(self.DisCardPlayer, loseFen);
|
|
|
+ if (loseInfo != null)
|
|
|
+ {
|
|
|
+ push.PlayerInfo.Add(loseInfo);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case (int)HGHHConst.Result.ZIMO:
|
|
|
+ if (self.ClickHuIds.Count > 0 && self.OperableList.Count <= 0)
|
|
|
+ {
|
|
|
+ Player winPlayer = room.GetAllPlayers()[self.ClickHuIds.First()];
|
|
|
+ if (winPlayer != null)
|
|
|
+ {
|
|
|
+ long winFen = 0;
|
|
|
+ int multiple = 0;
|
|
|
+ foreach (Player player in room.GetAllPlayers().Values.Where(player => player != null && player.Id != winPlayer.Id))
|
|
|
+ {
|
|
|
+ multiple = HGHHConst.ScoreType[winPlayer.HuType];
|
|
|
+ if (winPlayer.DiscardCount > 0)
|
|
|
+ {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (winPlayer.Pos == self.ZhuangPos)
|
|
|
+ {
|
|
|
+ Log.Debug($"天湖结算...");
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ Log.Debug($"地胡结算...");
|
|
|
+ }
|
|
|
+
|
|
|
+ multiple *= 64;
|
|
|
+
|
|
|
+ int n = 1;
|
|
|
+ long fen = 0;
|
|
|
+ if (multiple * (long) Math.Pow(2, n) < 64) {
|
|
|
+ fen = self.Difen * multiple * (long) Math.Pow(2, n);
|
|
|
+ } else {
|
|
|
+ fen = self.Difen * 64;
|
|
|
+ }
|
|
|
+
|
|
|
+ PlayerInfo loseInfo = self.SettlementLose(player, fen);
|
|
|
+ if (loseInfo != null)
|
|
|
+ {
|
|
|
+ push.PlayerInfo.Add(loseInfo);
|
|
|
+ }
|
|
|
+ winFen += fen;
|
|
|
+ }
|
|
|
+
|
|
|
+ PlayerInfo playerInfo = self.SettlementWin(winPlayer, winFen);
|
|
|
+ if (playerInfo != null)
|
|
|
+ {
|
|
|
+ push.PlayerInfo.Add(playerInfo);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case (int)HGHHConst.Result.QIANGGANG:
|
|
|
+
|
|
|
+ if (self.ClickHuIds.Count > 0 && self.OperableList.Count <= 0)
|
|
|
+ {
|
|
|
+ long loseFen = 0;
|
|
|
+ int multiple = 0;
|
|
|
+ foreach (long winId in self.ClickHuIds)
|
|
|
+ {
|
|
|
+ Player winPlayer = room.GetPlayer(winId);
|
|
|
+ if (winPlayer == null)
|
|
|
+ {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ multiple = HGHHConst.ScoreType[winPlayer.HuType];
|
|
|
+ if (multiple < 8) {
|
|
|
+ multiple = 8;
|
|
|
+ }
|
|
|
+
|
|
|
+ int n = 0;
|
|
|
+ long fen = 0;
|
|
|
+ if (multiple * (long) Math.Pow(2, n) < 64) {
|
|
|
+ fen = self.Difen * multiple * (long) Math.Pow(2, n);
|
|
|
+ } else {
|
|
|
+ fen = self.Difen * 64;
|
|
|
+ }
|
|
|
+
|
|
|
+ PlayerInfo playerInfo = self.SettlementWin(winPlayer, fen);
|
|
|
+ if (playerInfo != null)
|
|
|
+ {
|
|
|
+ push.PlayerInfo.Add(playerInfo);
|
|
|
+ }
|
|
|
+ loseFen += fen;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ PlayerInfo loseInfo = self.SettlementLose(self.GangPlayer, loseFen);
|
|
|
+ if (loseInfo != null)
|
|
|
+ {
|
|
|
+ push.PlayerInfo.Add(loseInfo);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case (int)HGHHConst.Result.GANGKAI:
|
|
|
+
|
|
|
+ if (self.ClickHuIds.Count > 0 && self.OperableList.Count <= 0)
|
|
|
+ {
|
|
|
+ Player winPlayer = room.GetAllPlayers()[self.ClickHuIds.First()];
|
|
|
+ if (winPlayer != null)
|
|
|
+ {
|
|
|
+ long winFen = 0;
|
|
|
+ int multiple = 0;
|
|
|
+ foreach (Player player in room.GetAllPlayers().Values.Where(player => player != null && player.Id != winPlayer.Id))
|
|
|
+ {
|
|
|
+ multiple = HGHHConst.ScoreType[winPlayer.HuType];
|
|
|
+ if (multiple < 8) {
|
|
|
+ multiple = 8;
|
|
|
+ }
|
|
|
+
|
|
|
+ int n = 1;
|
|
|
+ long fen = 0;
|
|
|
+ if (multiple * (long) Math.Pow(2, n) < 64) {
|
|
|
+ fen = self.Difen * multiple * (long) Math.Pow(2, n);
|
|
|
+ } else {
|
|
|
+ fen = self.Difen * 64;
|
|
|
+ }
|
|
|
+
|
|
|
+ PlayerInfo loseInfo = self.SettlementLose(player, fen);
|
|
|
+ if (loseInfo != null)
|
|
|
+ {
|
|
|
+ push.PlayerInfo.Add(loseInfo);
|
|
|
+ }
|
|
|
+ winFen += fen;
|
|
|
+ }
|
|
|
+
|
|
|
+ PlayerInfo playerInfo = self.SettlementWin(winPlayer, winFen);
|
|
|
+ if (playerInfo != null)
|
|
|
+ {
|
|
|
+ push.PlayerInfo.Add(playerInfo);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ foreach (Player p in room.GetAllPlayers().Values.Where(p => p != null))
|
|
|
+ {
|
|
|
+ MessageHelper.SendToClient(p, push);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ private static PlayerInfo SettlementWin(this HGHHComponent self, Player winPlayer, long winFen) {
|
|
|
+
|
|
|
+ Room room = self.GetParent<Room>();
|
|
|
+ if (room == null)
|
|
|
+ {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ winPlayer.Diamond += winFen;
|
|
|
+
|
|
|
+ return ProtoHelper.PlayerInfoToProto(room, winPlayer, true);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ private static PlayerInfo SettlementLose(this HGHHComponent self, Player losePlayer, long loseFen)
|
|
|
+ {
|
|
|
+ Room room = self.GetParent<Room>();
|
|
|
+ if (room == null)
|
|
|
+ {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (losePlayer.Diamond < loseFen)
|
|
|
+ {
|
|
|
+ losePlayer.Diamond = 0L;
|
|
|
+ } else {
|
|
|
+ losePlayer.Diamond -= loseFen;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ if (losePlayer.Diamond <= self.Difen * 2)
|
|
|
+ {
|
|
|
+ Log.Debug($"输家不够底分2倍,强制认输...");
|
|
|
+ }
|
|
|
|
|
|
+ return ProtoHelper.PlayerInfoToProto(room, losePlayer, true);
|
|
|
}
|
|
|
|
|
|
|