|
@@ -665,18 +665,47 @@ class PVPProc {
|
|
|
$bL = ceil($score * (1 - 0.2)); # 低于当前玩家积分20%
|
|
|
$aL = ceil($score * (1 + 0.05)); # 高于当前玩家积分5%
|
|
|
$aH = ceil($score * (1 + 0.2)); # 高于当前玩家积分20%
|
|
|
- $bPlayerUIDs = gMem()->zrevrangebyscore($key, $bH, $bL, true, true, 0, 1); # 取低于玩家积分的uids1个
|
|
|
- $mPlayerUIDs = gMem()->zrevrangebyscore($key, $aL, $bH, true, true, 0, 3); # 取玩家相当的uid2个(以防包含玩家自己)
|
|
|
- $aPlayerUIDs = gMem()->zrevrangebyscore($key, $aH, $aL, true, true, 0, 1); # 取高于玩家的uids1个
|
|
|
+ $bPlayerUIDs = gMem()->zrevrangebyscore($key, $bH, $bL, true, true, 0, 10); # 取低于玩家积分的uids1个
|
|
|
+ $mPlayerUIDs = gMem()->zrevrangebyscore($key, $aL, $bH, true, true, 0, 13); # 取玩家相当的uid2个(以防包含玩家自己)
|
|
|
+ $aPlayerUIDs = gMem()->zrevrangebyscore($key, $aH, $aL, true, true, 0, 10); # 取高于玩家的uids1个
|
|
|
if (array_key_exists($uid, $mPlayerUIDs)) { # 如果积分相近的那一组包含自己
|
|
|
unset($mPlayerUIDs[$uid]); # 剔除掉
|
|
|
} else { # 或者不包含自己
|
|
|
array_pop($mPlayerUIDs); # 那多一个人,踢掉一个
|
|
|
}
|
|
|
- $uidWithScore = array_merge($bPlayerUIDs, $mPlayerUIDs, $aPlayerUIDs); # 合并为玩家列表
|
|
|
+
|
|
|
+
|
|
|
+ $bPlayerUIDs = self::Array_Rand($bPlayerUIDs, 1);
|
|
|
+ $mPlayerUIDs = self::Array_Rand($mPlayerUIDs, 2);
|
|
|
+ $aPlayerUIDs = self::Array_Rand($aPlayerUIDs, 2);
|
|
|
+
|
|
|
+ $uidWithScore = array_merge($bPlayerUIDs, $mPlayerUIDs, $aPlayerUIDs); # 合并为玩家列表
|
|
|
+
|
|
|
return $uidWithScore; # 返回uid集合
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 数组随机
|
|
|
+ * @param type $arr
|
|
|
+ * @param type $intNum
|
|
|
+ */
|
|
|
+ static function Array_Rand($arr, $intNum = 0) {
|
|
|
+ $ret = (array) $arr;
|
|
|
+ if (is_array($ret)) {
|
|
|
+ $brd = shuffle($ret);
|
|
|
+ if (!$brd) {
|
|
|
+ die("shuffle 失败");
|
|
|
+ }
|
|
|
+ if ($intNum > 0) {
|
|
|
+ if ($intNum < count($ret)) {
|
|
|
+ $ret = array_slice($ret, 0, $intNum);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return $ret;
|
|
|
+ }
|
|
|
+ return $arr;
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 获取榜单玩家
|
|
|
* @param Credisutil $mem
|