package common import ( "crypto/md5" "encoding/hex" "io" "math/rand" "os" "regexp" "encoding/json" "math" "mongo.games.com/goserver/core/netlib" "mongo.games.com/goserver/srvlib" ) const ( RankServerType = 15 ) var seed int64 = 1 func GetSelfSrvType() int { return netlib.Config.SrvInfo.Type } func GetSelfSrvId() int { return netlib.Config.SrvInfo.Id } func GetSelfAreaId() int { return netlib.Config.SrvInfo.AreaID } func GetAccountSrvId() int { return srvlib.ServerSessionMgrSington.GetServerId(GetSelfAreaId(), srvlib.AccountServerType) } func GetGameSrvId() int { return srvlib.ServerSessionMgrSington.GetServerId(GetSelfAreaId(), srvlib.GameServerType) } func GetGameSrvIds() []int { return srvlib.ServerSessionMgrSington.GetServerIds(GetSelfAreaId(), srvlib.GameServerType) } func GetWorldSrvId() int { return srvlib.ServerSessionMgrSington.GetServerId(GetSelfAreaId(), srvlib.WorldServerType) } func GetRankSrvId() int { return srvlib.ServerSessionMgrSington.GetServerId(GetSelfAreaId(), srvlib.RankServerType) } func GetAppId() string { return Config.AppId } func GetClientSessionId(s *netlib.Session) srvlib.SessionId { param := s.GetAttribute(srvlib.SessionAttributeClientSession) if sid, ok := param.(srvlib.SessionId); ok { return sid } return srvlib.SessionId(0) } func GetRandInt(max int) int { seed++ rand.Seed(seed) return rand.Intn(max) } func Md5String(str string) string { h := md5.New() io.WriteString(h, str) return hex.EncodeToString(h.Sum(nil)) } func MakeMd5String(strs ...string) string { buff := md5.New() for _, value := range strs { io.WriteString(buff, value) } return hex.EncodeToString(buff.Sum(nil)) } func SetIntegerBit(num int32, index int32) int32 { return num | (1 << uint(index-1)) } func GetIntegerBit(num int32, index int32) bool { if num&(1< 0 { return true } else { return false } } // 校验身份证是否合法 var REGEXP_IPRule, _ = regexp.Compile(`^((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^([\da-fA-F]{1,4}:){6}((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^::([\da-fA-F]{1,4}:){0,4}((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^([\da-fA-F]{1,4}:):([\da-fA-F]{1,4}:){0,3}((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^([\da-fA-F]{1,4}:){2}:([\da-fA-F]{1,4}:){0,2}((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^([\da-fA-F]{1,4}:){3}:([\da-fA-F]{1,4}:){0,1}((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^([\da-fA-F]{1,4}:){4}:((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^([\da-fA-F]{1,4}:){7}[\da-fA-F]{1,4}$|^:((:[\da-fA-F]{1,4}){1,6}|:)$|^[\da-fA-F]{1,4}:((:[\da-fA-F]{1,4}){1,5}|:)$|^([\da-fA-F]{1,4}:){2}((:[\da-fA-F]{1,4}){1,4}|:)$|^([\da-fA-F]{1,4}:){3}((:[\da-fA-F]{1,4}){1,3}|:)$|^([\da-fA-F]{1,4}:){4}((:[\da-fA-F]{1,4}){1,2}|:)$|^([\da-fA-F]{1,4}:){5}:([\da-fA-F]{1,4})?$|^([\da-fA-F]{1,4}:){6}:$`) var ClubNameRule, _ = regexp.Compile("^[\u4e00-\u9fa5a-zA-Z-z0-9]+$") func IsValidIP(Ip string) bool { const UNKNOWIP = "0.0.0.0" if Ip == "" || Ip == UNKNOWIP { return false } if !REGEXP_IPRule.MatchString(Ip) { return false } return true } func JsonToStr(v interface{}) string { buff, _ := json.Marshal(v) return string(buff) } func PathExists(path string) (bool, error) { _, err := os.Stat(path) if err == nil { return true, nil } if os.IsNotExist(err) { return false, nil } return false, err } func MinI64(l int64, r int64) int64 { if l < r { return l } else { return r } } func AbsI64(l int64) int64 { if l >= 0 { return l } else { return -l } } // 如果结果为负,说明是玩家亏钱,结果为正,玩家赢钱。 // 图像上是一个分段函数,绝对值极值为1 func GetWinLossRate(win int64, loss int64) float64 { ret := float64(0) if win > loss { ret = float64(loss) / float64(win) } else { ret = -float64(win) / float64(loss) } return ret } // 得到一个初段慢,高段变快数 func GetSoftMaxNum(cur float64, maxValue float64) float64 { if cur > maxValue { return maxValue } return cur * math.Sin((cur/maxValue)*math.Pi/2) }