// 超级管理员操作 private OpRes doScoreSuperAdmin(ParamScore p, long score, GMUser user) { OpRes res = OpRes.op_res_failed; if (p.isAddScore()) // 加分 { if (p.isToPlayer()) { res = addScorePlayer(p, score, user); } else { res = addScore(p.m_toAcc, score, user); } } else { if (p.isToPlayer()) { res = decScorePlayer(p, score, user); } else { res = decScore(p.m_toAcc, score, user); } } if (res == OpRes.opres_success) { addScoreToOnlineGM(p, score); scoreLog(TableName.GM_SCORE, p, score, user); } return(res); }
private void scoreLog(string tableName, ParamScore p, long score, GMUser user) { long remainMoney = ItemHelp.getRemainMoney(p.m_toAcc, p.isToPlayer(), user); // 操作账号余额 long opSrcRemainMoney = ItemHelp.getRemainMoney(user.m_user, false, user); /*string cmd = string.Format(SqlStrCMD.SQL_CMD_PLAYER_SCORE, * tableName, * DateTime.Now.ToString(ConstDef.DATE_TIME24), * user.m_user, * p.m_toAcc, * p.m_op, * score, * user.m_moneyType, * user.m_depth, * user.m_createCode, * p.isToPlayer() ? AccType.ACC_PLAYER : 0, * remainMoney); * * user.sqlDb.executeOp(cmd, user.getMySqlServerID(), MySqlDbName.DB_XIANXIA); */ // 生成上下分记录 OrderInfo oinfo = OrderGenerator.genOfflineSuccessOrder(user.m_user, p.m_toAcc, score, p.m_op, p.isToPlayer() ? AccType.ACC_PLAYER : 0, remainMoney, p.m_orderFrom); // 生成上下分记录 string cmd = OrderGenerator.genSqlForLogScore(oinfo, user.m_createCode, opSrcRemainMoney); user.sqlDb.executeOp(cmd, user.getMySqlServerID(), MySqlDbName.DB_XIANXIA); }
// 上分,下分 public static void doScore(HttpRequest Request, HttpResponse Response, int op) { ParamScore param = new ParamScore(); param.m_gmAccount = Request.QueryString["gmAcc"]; param.m_gmPwd = Request.QueryString["gmPwd"]; param.m_playerAcc = Request.QueryString["playerAcc"]; param.m_score = Request.QueryString["score"]; param.m_op = op; param.m_userOrderId = Request.QueryString["userOrderId"]; param.m_apiCallBack = Request.QueryString["apiCallBack"]; param.m_sign = Request.QueryString["sign"]; if (!param.isParamValid()) { Dictionary <string, object> data = new Dictionary <string, object>(); data.Add("result", RetCode.RET_PARAM_NOT_VALID); Response.Write(Helper.genJsonStr(data)); return; } DyOpScore dy = new DyOpScore(); string retStr = dy.doDyop(param); Response.Write(retStr); }
private bool doScorePlayer(ParamScore p, long score) { bool res = false; if (p.m_op == 0) // 加分 { if (m_gmUser.m_money < score) { m_retData.Add("result", RetCode.RET_MONEY_NOT_ENOUGH); return(false); } res = addScorePlayer(p.m_playerAcc, score); if (res) { decScore(score); } else { m_retData.Add("result", RetCode.RET_DB_ERROR); return(false); } } else { res = decScorePlayer(p.m_playerAcc, score); if (res) { addScore(score); } else { m_retData.Add("result", RetCode.RET_DB_ERROR); return(false); } } /*if (res) * { * long remainMoney = Helper.getRemainMoney(p.m_playerAcc, m_gmUser); * SqlInsertGenerator gen = new SqlInsertGenerator(); * gen.addField("opTime", DateTime.Now.ToString(ConstDef.DATE_TIME24), FieldType.TypeString); * gen.addField("opSrc", m_gmUser.m_acc, FieldType.TypeString); * gen.addField("opDst", p.m_playerAcc, FieldType.TypeString); * gen.addField("opType", p.m_op, FieldType.TypeNumber); * gen.addField("opScore", score, FieldType.TypeNumber); * gen.addField("moneyType", m_gmUser.m_moneyType, FieldType.TypeNumber); * gen.addField("opSrcDepth", m_gmUser.m_depth, FieldType.TypeNumber); * gen.addField("opSrcCreateCode", m_gmUser.m_createCode, FieldType.TypeString); * gen.addField("opDstType", AccType.ACC_PLAYER, FieldType.TypeNumber); * gen.addField("opDstRemainMoney", remainMoney, FieldType.TypeNumber); * gen.addField("userOrderId", p.m_userOrderId, FieldType.TypeString); * * string cmd = gen.getResultSql(TableName.GM_SCORE); * m_gmUser.sqlDb.executeOp(cmd, MySqlDbName.DB_XIANXIA); * }*/ return(res); }
private OrderInfo writeOfflineOrderToMySql(ParamScore p, long score) { long remainMoney = Helper.getRemainMoney(p.m_playerAcc, m_gmUser); OrderInfo oinfo = OrderGenerator.genOfflineSuccessOrder(p.m_gmAccount, p.m_playerAcc, score, p.m_op, AccType.ACC_PLAYER, remainMoney, OrderGenerator.ORDER_FROM_API, p.m_userOrderId); // 生成上下分记录 string cmd = OrderGenerator.genSqlForLogScore(oinfo, m_gmUser.m_createCode, m_gmUser.m_money); m_gmUser.sqlDb.executeOp(cmd, MySqlDbName.DB_XIANXIA); return(oinfo); }
void scoreToPlayer(int op) { ParamScore param = new ParamScore(); param.m_op = op; param.m_toAcc = m_acc.Text; param.m_score = m_score.Text; param.scoreToPlayer(); GMUser user = (GMUser)Session["user"]; OpRes res = user.doDyop(param, DyOpType.opTypeDyOpScore); m_scoreRes.InnerText = OpResMgr.getInstance().getResultString(res); }
public void ProcessRequest(HttpContext context) { RightMgr.getInstance().opCheck(RIGHT.SCORE, context.Session, context.Response); GMUser user = (GMUser)context.Session["user"]; ParamScore param = new ParamScore(); param.m_op = Convert.ToInt32(context.Request.Form["op"]); param.m_toAcc = context.Request.Form["acc"]; param.m_score = context.Request.Form["param"]; int targetType = Convert.ToInt32(context.Request.Form["targetType"]); if (targetType == AccType.ACC_PLAYER) { param.scoreToPlayer(); } else { param.scoreToMgr(); } OpRes res = user.doDyop(param, DyOpType.opTypeDyOpScore); string str = OpResMgr.getInstance().getResultString(res); long remainScoreFixBug = -1; if (targetType == AccType.ACC_SUPER_ADMIN || targetType == AccType.ACC_SUPER_ADMIN_SUB) { remainScoreFixBug = 0; } else { remainScoreFixBug = ItemHelp.getRemainMoney(param.m_toAcc, targetType == AccType.ACC_PLAYER, user); } Dictionary <string, object> ret = new Dictionary <string, object>(); ret.Add("result", (int)res); ret.Add("resultInfo", str); string rs = (user.m_accType == AccType.ACC_SUPER_ADMIN || user.m_accType == AccType.ACC_SUPER_ADMIN_SUB) ? "0" : ItemHelp.toStrByComma(ItemHelp.showMoneyValue(user.m_money)); ret.Add("remainScoreStr", rs); ret.Add("remainScore", ItemHelp.showMoneyValue(user.m_money)); ret.Add("remainScoreFixBug", ItemHelp.showMoneyValue(remainScoreFixBug)); str = BaseJsonSerializer.genJsonStr(ret); context.Response.ContentType = "text/plain"; context.Response.Write(str); }
private void addScoreToOnlineGM(ParamScore p, long score) { GMUser dstUser = AccountSys.getInstance().getUser(p.m_toAcc); if (dstUser != null) { if (p.isAddScore()) { dstUser.m_money += score; } else { dstUser.m_money -= score; } } }
// 提交玩家在线时订单 private bool submitPlayerOnlineOrder(ParamScore p, long score, GMUser user) { OrderGenerator or = new OrderGenerator(); Dictionary <string, object> orData = or.genOrder(user.m_user, p.m_toAcc, score, p.m_op, AccType.ACC_PLAYER, p.m_orderFrom, p.m_orderId); if (string.IsNullOrEmpty(p.m_orderId)) { p.m_orderId = Convert.ToString(orData["orderId"]); } bool code = DBMgr.getInstance().insertData(TableName.PLAYER_ORDER_REQ, orData, user.getDbServerID(), DbName.DB_PLAYER); return(code); }
// 订单id是否处理过 private bool orderIdExists(ParamScore p) { List <IMongoQuery> queryList = new List <IMongoQuery>(); queryList.Add(Query.EQ("gmAcc", BsonValue.Create(p.m_gmAccount))); queryList.Add(Query.EQ("apiOrderId", BsonValue.Create(p.m_userOrderId))); IMongoQuery imq = Query.And(queryList); bool res = MongodbPlayer.Instance.KeyExistsByQuery(TableName.PLAYER_ORDER_REQ, imq); if (res) { return(true); } string cond = string.Format(" userOrderId='{0}' and opSrc='{1}' ", p.m_userOrderId, p.m_gmAccount); res = m_gmUser.sqlDb.keyExists(TableName.GM_SCORE, cond, MySqlDbName.DB_XIANXIA); return(res); }
OpRes execOrder(ResultPlayerOrderItem item, GMUser user) { if (item.m_orderState != OrderState.STATE_WAIT) { return(OpRes.opres_success); } ParamScore param = new ParamScore(); param.m_op = item.m_orderType; param.m_toAcc = item.m_playerAcc; param.m_score = item.m_orderMoney.ToString(); param.m_orderFrom = OrderGenerator.ORDER_FROM_PLAYER_ORDER; param.m_orderId = item.m_orderId; param.scoreToPlayer(); OpRes res = user.doDyop(param, DyOpType.opTypeDyOpScore); if (res == OpRes.opres_success /*|| * res == OpRes.op_res_player_in_game*/) { OpRes code = removeWait(item, user); if (code == OpRes.opres_success) { if (res == OpRes.opres_success) { addFinish(item, user, OrderState.STATE_FINISH); } else { addFinish(item, user, OrderState.STATE_HAS_SUB); } } } else if (res == OpRes.op_res_player_in_game) { string cmd = CPlayerOrder.genUpdateSql(item.m_orderId, OrderState.STATE_HAS_SUB); int count = user.sqlDb.executeOp(cmd, user.getMySqlServerID(), MySqlDbName.DB_XIANXIA); // 返回成功,界面可以重刷订单 res = OpRes.opres_success; } return(res); }
private OpRes doScore(ParamScore p, long score, GMUser user) { OpRes res = OpRes.op_res_failed; if (p.isAddScore()) // 加分 { if (user.m_money < score) { return(OpRes.op_res_money_not_enough); } res = addScore(p.m_toAcc, score, user); if (res == OpRes.opres_success) { addScoreToOnlineGM(p, score); user.m_money -= score; decScoreDirect(user.m_user, score, user); } } else { res = decScore(p.m_toAcc, score, user); if (res == OpRes.opres_success) { addScoreToOnlineGM(p, score); user.m_money += score; addScoreDirect(user.m_user, score, user); } } if (res == OpRes.opres_success) { scoreLog(TableName.GM_SCORE, p, score, user); } return(res); }
// score传正数 private OpRes decScorePlayer(ParamScore p, long score, GMUser user) { OpRes res = canDoScoreToPlayer(p.m_toAcc, score, false, user); if (res == OpRes.op_res_player_in_game) // 玩家在游戏内,提交订单请求 { // bool code = submitPlayerOnlineOrder(p, score, user); // return code ? OpRes.op_res_player_in_game : OpRes.op_res_db_failed; return(OpRes.op_res_player_in_game_cannot_subscore); } else if (res == OpRes.opres_success) { string cmd = string.Format(SqlStrCMD.SQL_DEC_SCORE_TO_PLAYER_BYPASS, TableName.PLAYER_ACCOUNT_XIANXIA, score, p.m_toAcc, PlayerState.STATE_IDLE, score); int count = user.sqlDb.executeOp(cmd, user.getMySqlServerID(), MySqlDbName.DB_XIANXIA); return(count > 0 ? OpRes.opres_success : OpRes.op_res_db_failed); } return(res); }
private OpRes doScorePlayer(ParamScore p, long score, GMUser user) { OpRes res = OpRes.op_res_failed; if (p.isAddScore()) // 加分 { if (user.m_money < score) { return(OpRes.op_res_money_not_enough); } res = addScorePlayer(p, score, user); if (res == OpRes.opres_success || res == OpRes.op_res_player_in_game) // 玩家在线时,先扣gm的钱,若实时给玩家加分失败,订单服务器会返还这部分钱 { user.m_money -= score; decScoreDirect(user.m_user, score, user); } } else { res = decScorePlayer(p, score, user); if (res == OpRes.opres_success) // 玩家在线时,先实时给扣玩家分数,成功后,订单服务器会返还这部分钱 { user.m_money += score; addScoreDirect(user.m_user, score, user); } } if (res == OpRes.opres_success) { scoreLog(TableName.GM_SCORE, p, score, user); } return(res); }
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)); }
public override OpRes doDyop(object param, GMUser user) { ParamScore p = (ParamScore)param; long score = 0; if (!long.TryParse(p.m_score, out score)) { return(OpRes.op_res_param_not_valid); } if (score < 0) { return(OpRes.op_res_param_not_valid); } if (!RightMap.hasRight(user.m_accType, RIGHT.SCORE, user.m_right)) { return(OpRes.op_res_no_right); } score = ItemHelp.saveMoneyValue(score); OpRes res = OpRes.op_res_failed; try { HttpContext.Current.Application.Lock(); if (user.m_accType == AccType.ACC_SUPER_ADMIN || user.m_accType == AccType.ACC_SUPER_ADMIN_SUB) { res = doScoreSuperAdmin(p, score, user); } else { if (p.isToPlayer()) // 给玩家上分下分 { res = doScorePlayer(p, score, user); } else // 给管理,上分下分 { res = doScore(p, score, user); } } } catch (System.Exception ex) { CLOG.Info("DyOpScore.doDyop, 出现异常:{0}", ex.ToString()); res = OpRes.op_res_happend_exception; } finally { HttpContext.Current.Application.UnLock(); } // 后续处理 对于来自订单的操作,由于订单Id不会变化,采取轮循会有问题 if (res == OpRes.op_res_player_in_game && p.m_orderFrom == OrderGenerator.ORDER_FROM_BG_OP) { QueryOrderState qos = new QueryOrderState(); int state = qos.queryOrderState(p.m_orderId, user.sqlDb.getServer(user.getMySqlServerID()).queryOne, 10, 1000); if (state != PlayerReqOrderState.STATE_PROCESSING) { res = (state == PlayerReqOrderState.STATE_FINISH) ? OpRes.opres_success : OpRes.op_res_failed; } } return(res); }