Beispiel #1
0
func RoleBuy(userInfo *model.UserInfo, reqData []byte) (ackData []byte, err error) {
	_req := &RoleBuyReq{}
	_ack := &RoleBuyAck{}
	err = decode(reqData, _req)
	if err != nil {
		log.Println("数据包格式不对", err)
		return nil, err
	}
	reCode := message.SUCCESS
	roleInfo := model.NewRoleInfo()
	err = roleInfo.GetRoleInfo(userInfo.Uid, _req.Role_id)
	if err != nil {
		log.Println(userInfo.Uid, "查询角色信息出错", err)
		reCode = message.ERR_BUYROLE
	}

	//说明还不拥有此角色
	if roleInfo.Id == 0 {
		err = userInfo.GetUserInfo(userInfo.Uid)
		//获取角色的信息(数值相关)
		cash := gamedata.GetInt("角色ID", strconv.Itoa(int(_req.Role_id)), "cash")
		diamond := gamedata.GetInt("角色ID", strconv.Itoa(int(_req.Role_id)), "diamond")
		log.Println("角色ID:", _req.Role_id, " cash:", cash)
		if userInfo.Cash > int32(cash) && userInfo.Diamond > int32(diamond) {
			err = userInfo.ChangeCash(userInfo.Uid, -cash)
			if err != nil {
				log.Println(userInfo.Uid, "购买角色信息出错", err)
				reCode = message.ERR_BUYROLE
			}
			err = userInfo.ChangeDiamond(userInfo.Uid, -diamond)
			if err != nil {
				log.Println(userInfo.Uid, "购买角色信息出错", err)
				reCode = message.ERR_BUYROLE
			}
			name := gamedata.GetString("角色ID", strconv.Itoa(int(_req.Role_id)), "角色名称")
			log.Println("角色ID:", _req.Role_id, " 角色名称:", name)
			err = roleInfo.AddRole(userInfo.Uid, _req.Role_id, name, 1, 1)
			if err != nil {
				log.Println(userInfo.Uid, "增加角色信息出错", err)
				reCode = message.ERR_BUYROLE
			}
		}
	}

	err = userInfo.ChangeRole(userInfo.Uid, _req.Role_id)
	if err != nil {
		log.Println(userInfo.Uid, "选择角色信息出错", err)
		reCode = message.ERR_BUYROLE
	}

	ackData = encode(userInfo.Uid, message.MSG_BUYROLE, reCode, _ack)
	return
}