commonFunc.go 2.82 KB
package common

import (
	"bytes"
	"errors"
	"fmt"
	"github.com/garyburd/redigo/redis"
	"math"
	"pro2d/common/db/redisproxy"
	"strconv"
	"strings"
)

func GetNextRoleId() (string, error) {
	relay, err := redisproxy.HGET(fmt.Sprintf(AutoIncrement, GlobalSconf.ID), "role")
	if err != nil {
		return "", err
	}
	ID, err := redis.Int64(relay, err)
	if err != nil {
		return "", err
	}

	//roleID的范围 [GlobalSconf.ID*MaxRoleNum, GlobalSconf.ID*MaxRoleNum + MaxRoleNum]
	if ID-GlobalSconf.ID*MaxRoleNum >= MaxCommNum-1 {
		return "", errors.New("DB_FULL")
	}

	relay, err = redisproxy.HINCRBY(fmt.Sprintf(AutoIncrement, GlobalSconf.ID), "role", 1)
	ID, err = redis.Int64(relay, err)
	if err != nil {
		return "", err
	}
	return fmt.Sprintf("%d", ID), nil
}

func GetNextUId() (string, error) {
	relay, err := redisproxy.HGET(fmt.Sprintf(AutoIncrement, GlobalSconf.ID), "uid")
	if err != nil {
		return "", err
	}

	var ID int64 = 0
	if relay == nil {
		ID = 90000
		redisproxy.HSET(fmt.Sprintf(AutoIncrement, GlobalSconf.ID), "uid", ID)
	} else {
		relay, err = redisproxy.HINCRBY(fmt.Sprintf(AutoIncrement, GlobalSconf.ID), "uid", 1)
		ID, err = redis.Int64(relay, err)
		if err != nil {
			return "", err
		}
	}
	return fmt.Sprintf("%d", ID), nil
}

type IMapString map[string]interface{}
type IMapStringNum map[string]int32

func MapToString(params IMapString) string {
	var items bytes.Buffer
	for k, v := range params {
		items.WriteString(k)
		items.WriteString("=")
		items.WriteString(fmt.Sprintf("%v", v))
		items.WriteString(" ")
	}
	return items.String()
}

func StringToMap(items string, num bool) IMapString {
	backPack := make(map[string]interface{})
	for _, v := range strings.Split(items, " ") {
		ii := strings.Split(v, "=")
		if len(ii) < 2 {
			continue
		}
		if num {
			c, err := strconv.Atoi(ii[1])
			if err != nil {
				continue
			}
			backPack[ii[0]] = uint32(c)
		} else {
			backPack[ii[0]] = ii[1]
		}
	}
	return backPack
}

func MapNumToString(params IMapStringNum) string {
	var items bytes.Buffer
	for k, v := range params {
		items.WriteString(k)
		items.WriteString("=")
		items.WriteString(fmt.Sprintf("%v", v))
		items.WriteString(" ")
	}
	return items.String()
}

func StringToMapNum(items string) IMapStringNum {
	backPack := make(IMapStringNum)
	for _, v := range strings.Split(items, " ") {
		ii := strings.Split(v, "=")
		if len(ii) < 2 {
			continue
		}
		c, err := strconv.Atoi(ii[1])
		if err != nil {
			continue
		}
		backPack[ii[0]] = int32(c)
	}
	return backPack
}

func EquipmentTyp(typ int32) int32 {
	return int32(math.Floor(float64(typ / EquipmentInterval)))
}

func EquipmentPosToTyp(t int32) int32 {
	switch t {
	case WeaponPos:
		return Weapon
	case MailPos:
		return Mail
	case ShosePos:
		return Shose
	case NecklacePos:
		return Necklace
	case RingPosL:
		return Ring
	case RingPosR:
		return Ring
	default:
		return -1
	}
}