Example #1
0
    /*
     *      gm给玩家上分,先扣gm的钱,若订单处理失败,需要把钱返还gm
     *      gm给玩家下分,先处理订单,若订单处理成功,则需要给gm钱
     */
    private void returnMoneyToGM(OrderInfo info)
    {
        if (info.m_gmAcc == "admin") // 操作者是管理员,不用返还
        {
            return;
        }

        long retMoney = 0;

        switch (info.m_orderState)
        {
        case PlayerReqOrderState.STATE_FINISH:     // 处理成功了,若是下分,需要返还
        {
            if (!ScropOpType.isAddScore(info.m_orderType))
            {
                retMoney = info.m_money;
            }
        }
        break;

        case PlayerReqOrderState.STATE_FAILED:     // 处理失败了,若是上分,需要返还
        {
            if (ScropOpType.isAddScore(info.m_orderType))
            {
                retMoney = info.m_money;
            }
        }
        break;
        }

        if (retMoney > 0)
        {
            SqlUpdateGenerator up = new SqlUpdateGenerator();
            up.addField("money",
                        string.Format("money+{0}", retMoney),
                        FieldType.TypeNumber);

            // 可以通知到web后台
            string cmd = up.getResultSql(TableName.GM_ACCOUNT, string.Format("acc='{0}'", info.m_gmAcc));
            m_sqlDb.executeOp(cmd, CMySqlDbName.DB_XIANXIA);
        }
    }
Example #2
0
    public override string doDyop(object param)
    {
        ParamScore p        = (ParamScore)param;
        long       oriScore = 0;

        if (!long.TryParse(p.m_score, out oriScore))
        {
            m_retData.Add("result", RetCode.RET_PARAM_NOT_VALID);
            return(Helper.genJsonStr(m_retData));
        }

        if (oriScore <= 0)
        {
            m_retData.Add("result", RetCode.RET_PARAM_NOT_VALID);
            return(Helper.genJsonStr(m_retData));
        }

        bool cres = createGMUser(p);

        if (!cres)
        {
            return(Helper.genJsonStr(m_retData));
        }

        if (!p.checkSign(m_gmUser))
        {
            m_retData.Add("result", RetCode.RET_SIGN_ERROR);
            return(Helper.genJsonStr(m_retData));
        }

        if (orderIdExists(p))
        {
            m_retData.Add("result", RetCode.RET_ORDER_EXISTS);
            return(Helper.genJsonStr(m_retData));
        }

        long score = Helper.saveMoneyValue(oriScore);

        int code = canDoScoreToPlayer(p.m_playerAcc, score, ScropOpType.isAddScore(p.m_op));

        // 在线,并且是下分,直接返回失败
        if (code == RetCode.RET_PLAYER_ONLINE && !ScropOpType.isAddScore(p.m_op))
        {
            m_retData.Add("result", RetCode.RET_PLAYER_ONLINE);
        }
        else if (code == RetCode.RET_PLAYER_ONLINE && ScropOpType.isAddScore(p.m_op)) // 玩家在线时提交上下分订单
        {
            //if (ScropOpType.isAddScore(p.m_op)) // 上分操作,先扣GM的钱,若订单最终处理失败,会返还GM这部分钱
            {
                decScore(score);
            }

            OrderGenerator or = new OrderGenerator();
            Dictionary <string, object> orData = or.genOrder(p.m_gmAccount, p.m_playerAcc, score, p.m_op,
                                                             AccType.ACC_PLAYER,
                                                             OrderGenerator.ORDER_FROM_API,
                                                             "",
                                                             p.m_userOrderId, p.m_apiCallBack);

            bool res = MongodbPlayer.Instance.ExecuteInsert(TableName.PLAYER_ORDER_REQ, orData);
            if (res)
            {
                m_retData.Add("orderId", Convert.ToString(orData["orderId"]));
                m_retData.Add("result", RetCode.RET_HAS_SUBMIT_ORDER);
            }
            else
            {
                m_retData.Add("result", RetCode.RET_DB_ERROR);
            }
        }
        else if (code == RetCode.RET_SUCCESS) // 玩家离线,可直接修改数据库上下分
        {
            bool res = doScorePlayer(p, score);
            if (res)
            {
                m_retData.Add("result", RetCode.RET_SUCCESS);
                m_retData.Add("playerAcc", p.m_playerAcc);
                m_retData.Add("score", oriScore);

                /*string cmd = string.Format(CONST.SQL_ORDER_ID, TableName.GM_SCORE, m_gmUser.m_acc, p.m_playerAcc, p.m_op);
                 *
                 * Dictionary<string, object> order = m_gmUser.sqlDb.queryOne(cmd, MySqlDbName.DB_XIANXIA);
                 * if (order != null)
                 * {
                 *  int orderId = Convert.ToInt32(order["opId"]);
                 *  m_retData.Add("orderId", orderId);
                 * }*/

                OrderInfo oinfo = writeOfflineOrderToMySql(p, score);
                m_retData.Add("orderId", oinfo.m_orderId);
                m_retData.Add("userOrderId", p.m_userOrderId);
            }
        }
        else
        {
            m_retData.Add("result", code);
        }
        return(Helper.genJsonStr(m_retData));
    }