📄 mysql.cpp
字号:
#include "..\stdAfx.h"
#include "DefaultHeader.h"
#include "NPC_Pattern.h"
#include "Map.h"
#include "Scrp_exe.h"
#include "Kein_Item.h"
#include "..\LowerLayers\MyLog.h"
#include "Ability.h"
#include "FileMgr.h"
#include "CItem.h"
#include "WeatherControl.h"//020610 lsw
#include "dungeon.h"
#include "eventmgr.h"
#include "teambattle.h"
#include "LogManager.h"
#include "UserManager.h"
#include "DualManager.h"
#include "GuildManager.h"
#include "ArenaManager.h"
#include "RegenManager.h"
#include "WarStartInfo.h"
#include "StepMigration.h"
#include "NationSys.h"
#define BLOCK_SIZE 6000
//class CGuardianGuild;
CGuardianGuild g_CGuardianGuild;
HENV hEnv = NULL;
HDBC hDBC = NULL;
HENV hEnv_ChrLogDB= NULL;
HDBC hDBC_ChrLogDB= NULL;
extern cNation* g_pNation;
extern void CheckFightMap( char *mapname, short int &x, short int &y, CHARLIST *ch ); // 0910 YGI
extern int GetTotalItemWeight( CHARLIST *ch );
extern int update_BinaryData_to_Chr_Info (UCHAR *ws, UCHAR *pa, UCHAR *akill, UCHAR *skill_exp, UCHAR *tac_skill_exp, UCHAR *script_var, UCHAR *inv, UCHAR *equip, UCHAR *quick, UCHAR *party,UCHAR *relation,UCHAR *employment,UCHAR *itemindex,char *, char *) ; //1219 YGI
extern int update_BinaryData_to_Chr_Info2 (UCHAR *bankitem, char *login_id, char *name); // 1225
void displaySQLError(SQLHSTMT) ;
int UpdateCharID_SQL( int char_id );
int InsertBBS( char *name, char *title, char *contents );
int GetTitleBBS( int count, char date[10][ FILENAME_MAX], char name[10][ FILENAME_MAX], char title[10][ FILENAME_MAX] );
int GetContentsBBS( char *date, char *con );
// 030919 HK YGI
bool CanSaveUserData(LPCHARLIST ch, const int iCallType)
{ //< CSD-040212
Dbg_Assert(ch != NULL);
int iErrorType = 0;
if (ch->GetLevel() == 0)
{
iErrorType = 1;
}
if (ch->HpMax == 0)
{
iErrorType = 2;
}
if (ch->ManaMax == 0)
{
iErrorType = 3;
}
if (ch->HungryMax == 0)
{
iErrorType = 4;
}
if (ch->updatable == 0)
{
iErrorType = 5;
}
// 030915 HK YGI
if( strcmp( ch->Name, connections[ch->GetServerID()].name ) != 0 )
{
iErrorType = 6;
}
// 眠啊绰 捞镑俊
// 030923 HK YGI
if (iErrorType == 0)
{
extern void SaveLoginLogoutLogByKein( CHARLIST *ch, int type, int );
SaveLoginLogoutLogByKein( ch, 0, iCallType );
return true;
}
MyLog(LOG_IMPORTANT,
"CanSaveUserData() Failed : Name(%s), CallType(%d), ErrorType(%d)",
ch->Name, iCallType, iErrorType);
return false;
} //> CSD-040212
void ConvertLoad(char* pData, int nSize = MAX_STEP)
{ //< CSD-TW-030620
CStepMigration stepMigration;
stepMigration.Load(pData);
} //> CSD-TW-030620
void ConvertSave(char* pData, int nSize = MAX_STEP)
{ //< CSD-TW-030620
CStepMigration stepMigration;
stepMigration.Save(pData);
} //> CSD-TW-030620
int Init_SQL(LPSTR szDSN, LPSTR szUID, LPSTR szUPW)
{
RETCODE retCode;
SQLAllocEnv(&hEnv);
SQLAllocConnect(hEnv, &hDBC);
retCode = SQLConnect(hDBC, (UCHAR *)szDSN, SQL_NTS, (UCHAR *)szUID, SQL_NTS, (UCHAR *)szUPW, SQL_NTS);
if(retCode == SQL_SUCCESS || retCode == SQL_SUCCESS_WITH_INFO)
{
return(1);
}
return(0);
};
// acer 2
int Release_ChrLogDB_SQL(void)
{
if(hDBC_ChrLogDB != NULL) SQLDisconnect(hDBC_ChrLogDB );
if(hDBC_ChrLogDB != NULL) SQLFreeConnect(hDBC_ChrLogDB);
if(hEnv_ChrLogDB != NULL) SQLFreeEnv(hEnv_ChrLogDB);
return(1);
};
// acer 2
int Release_SQL(void)
{
if(hDBC != NULL)
SQLDisconnect(hDBC);
SQLFreeConnect(hDBC);
SQLFreeEnv(hEnv);
Release_ChrLogDB_SQL();
return(1);
};
// 020430 acer 2
int Querry_SQL(LPSTR szQuerry, HDBC hdbc /*= NULL */)
{
HSTMT hStmt = NULL;
RETCODE retCode;
if( hdbc == NULL ) hdbc = hDBC;
SQLAllocStmt(hdbc, &hStmt);
retCode = SQLExecDirect(hStmt, (UCHAR *)szQuerry, SQL_NTS);
if(retCode == SQL_SUCCESS || retCode == SQL_SUCCESS_WITH_INFO)
{
SQLFreeStmt(hStmt, SQL_DROP);
return(1);
}
else {
MyLog( LOG_DEBUG, "\n SQL: %s", szQuerry) ;
displaySQLError(hStmt) ;
SQLFreeStmt(hStmt, SQL_DROP);
return(-1);
}
}
/////////////////////////////////////////////////////////////////////////////
//
// 窃荐汲疙: 某腐磐狼 binary(农扁啊 奴硅凯甸篮 binary肺 历厘窍绊 binary肺
// 佬绢柯促)甫 历厘(update)窍绰 窃荐.
//
// 颇扼固磐: ws; 某腐磐 沥焊吝 WS[200]硅凯狼 *, ps; PS[200]硅凯狼 *
// inv; inv[3][3][8]硅凯狼 *
// equip, quick; 秦寸 硅凯狼 *
// (曼绊: inv, equip, quick篮 ItemAttr Structure狼 硅凯捞促)
//
// 府畔蔼: update狼 己傍 咯何; 己傍(1), 角菩(ret < 0)
//
/////////////////////////////////////////////////////////////////////////////
int update_BinaryData_to_Chr_Info(UCHAR *ws, UCHAR *ps, UCHAR *skill, UCHAR *skill_exp, UCHAR *tac_skillEXP, UCHAR *script_var, UCHAR *inv, UCHAR *equip, UCHAR *quick,
UCHAR *party,
UCHAR *relation,
UCHAR *employment,
UCHAR *itemindex,
char *login_id, char *name) // 1219 YGI
{
SQLINTEGER cbdata = 200, cbvalue = SQL_DATA_AT_EXEC ;
SQLINTEGER cbwslen, cbpslen, cbskilllen, cbskillexplen,cbtacskillexplen, cbscriptvarlen, cbinvlen, cbquick, cbequip, cbparty, cbrelation, cbemployment, cbitemindex;
SQLRETURN retcode;
SQLHSTMT hstmt;
SQLPOINTER pParamData;
int n=0;
char aaa=20;
char query[256]={0,};
sprintf(query, "UPDATE chr_info SET ws=?, ps=?,skill=?, skill_exp=?, tac_skillEXP=?, script_var=?, inventory=?, equip=?, quick=?, party=?, relation=?, employment=?, itemindex=? WHERE name='%s'", name) ;
//printf("\nSQL: %s", query) ;
SQLAllocStmt(hDBC, &hstmt);
retcode = SQLPrepare(hstmt, (UCHAR *)query, SQL_NTS);
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) {
retcode= SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_BINARY,SQL_LONGVARBINARY, SIZE_OF_WS, 0, ws, 0, &cbwslen);
retcode= SQLBindParameter(hstmt, 2, SQL_PARAM_INPUT, SQL_C_BINARY,SQL_LONGVARBINARY, SIZE_OF_PS, 0, ps, 0, &cbpslen);
retcode= SQLBindParameter(hstmt, 3, SQL_PARAM_INPUT, SQL_C_BINARY,SQL_LONGVARBINARY, SIZE_OF_SKILL, 0, skill, 0, &cbskilllen);
retcode= SQLBindParameter(hstmt, 4, SQL_PARAM_INPUT, SQL_C_BINARY,SQL_LONGVARBINARY, SIZE_OF_SKILL_EXP, 0, skill_exp, 0, &cbskillexplen);
retcode= SQLBindParameter(hstmt, 5, SQL_PARAM_INPUT, SQL_C_BINARY,SQL_LONGVARBINARY, SIZE_OF_TAC_SKILL_EXP, 0, tac_skillEXP,0, &cbtacskillexplen);
retcode= SQLBindParameter(hstmt, 6, SQL_PARAM_INPUT, SQL_C_BINARY,SQL_LONGVARBINARY, SIZE_OF_SCRIPT_VAR, 0, script_var, 0, &cbscriptvarlen);
retcode= SQLBindParameter(hstmt, 7, SQL_PARAM_INPUT, SQL_C_BINARY,SQL_LONGVARBINARY, SIZE_OF_INV, 0, inv, 0, &cbinvlen);
retcode= SQLBindParameter(hstmt, 8, SQL_PARAM_INPUT, SQL_C_BINARY,SQL_LONGVARBINARY, SIZE_OF_EQUIP, 0, equip, 0, &cbequip);
retcode= SQLBindParameter(hstmt, 9, SQL_PARAM_INPUT, SQL_C_BINARY,SQL_LONGVARBINARY, SIZE_OF_QUICK, 0, quick, 0, &cbquick);
retcode= SQLBindParameter(hstmt, 10, SQL_PARAM_INPUT, SQL_C_BINARY,SQL_LONGVARBINARY, SIZE_OF_PARTY, 0, party, 0, &cbparty );
retcode= SQLBindParameter(hstmt, 11, SQL_PARAM_INPUT, SQL_C_BINARY,SQL_LONGVARBINARY, SIZE_OF_RELATION, 0, relation, 0, &cbrelation );
retcode= SQLBindParameter(hstmt, 12, SQL_PARAM_INPUT, SQL_C_BINARY,SQL_LONGVARBINARY, SIZE_OF_EMPLOYMENT, 0, employment, 0, &cbemployment);
retcode= SQLBindParameter(hstmt, 13, SQL_PARAM_INPUT, SQL_C_BINARY,SQL_LONGVARBINARY, SIZE_OF_ITEMINDEX, 0, itemindex, 0, &cbitemindex);
if(retcode != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO)
{
SQLFreeStmt(hstmt, SQL_DROP);
printf("\nBinding FAIL!!!") ;
return -5 ;
}
cbequip = SQL_LEN_DATA_AT_EXEC(0);
cbquick = SQL_LEN_DATA_AT_EXEC(0);
cbpslen = SQL_LEN_DATA_AT_EXEC(0);
cbwslen = SQL_LEN_DATA_AT_EXEC(0);
cbskilllen = SQL_LEN_DATA_AT_EXEC(0);
cbskillexplen = SQL_LEN_DATA_AT_EXEC(0);
cbtacskillexplen= SQL_LEN_DATA_AT_EXEC(0);
cbscriptvarlen = SQL_LEN_DATA_AT_EXEC(0);
cbinvlen = SQL_LEN_DATA_AT_EXEC(0);
cbparty = SQL_LEN_DATA_AT_EXEC(0);
cbrelation = SQL_LEN_DATA_AT_EXEC(0);
cbemployment = SQL_LEN_DATA_AT_EXEC(0);
cbitemindex = SQL_LEN_DATA_AT_EXEC(0);
retcode = SQLExecute(hstmt) ;
while(retcode == SQL_NEED_DATA)
{
retcode = SQLParamData(hstmt, &pParamData) ;
if(retcode == SQL_NEED_DATA)
{
if(pParamData == ws) SQLPutData(hstmt, ws, SIZE_OF_WS);
else if(pParamData == ps) SQLPutData(hstmt, ps, SIZE_OF_PS);
else if(pParamData == skill) SQLPutData(hstmt, skill, SIZE_OF_SKILL);
else if(pParamData == skill_exp) SQLPutData(hstmt, skill_exp, SIZE_OF_SKILL_EXP );
else if(pParamData == tac_skillEXP) SQLPutData(hstmt, tac_skillEXP, SIZE_OF_TAC_SKILL_EXP );
else if(pParamData == script_var ) SQLPutData(hstmt, script_var, SIZE_OF_SCRIPT_VAR );
else if(pParamData == inv) SQLPutData(hstmt, inv, SIZE_OF_INV);
else if(pParamData == equip) SQLPutData(hstmt, equip, SIZE_OF_EQUIP);
else if(pParamData == quick) SQLPutData(hstmt, quick, SIZE_OF_QUICK );
else if(pParamData == party ) SQLPutData(hstmt, party, SIZE_OF_PARTY );
else if(pParamData == relation) SQLPutData(hstmt, relation, SIZE_OF_RELATION);
else if(pParamData == employment ) SQLPutData(hstmt, employment, SIZE_OF_EMPLOYMENT );
else if(pParamData == itemindex ) SQLPutData(hstmt, itemindex, SIZE_OF_ITEMINDEX );
}
else break ;
}
retcode = SQLExecute(hstmt) ;
if(retcode == SQL_NEED_DATA)
{
retcode= SQLCancel(hstmt) ;// 020620 YGI
//retcode= SQLTransact(SQL_NULL_HENV, hDBC, SQL_COMMIT);
retcode= SQLFreeStmt(hstmt, SQL_DROP );
if(retcode != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO) {
MyLog(LOG_NORMAL, "Transact commit Error") ;
}
//printf("\nTransact & free") ;
return(1); // succeed
}
else
{
displaySQLError(hstmt) ;
//SQLTransact(SQL_NULL_HENV, hDBC, SQL_ROLLBACK);
SQLFreeStmt(hstmt, SQL_DROP);
return(-3);
}
}
SQLFreeStmt(hstmt, SQL_DROP);
return 1;
}
int update_BinaryData_to_Chr_Info2( UCHAR *bankitem, char *login_id, char *name) // 1225
{
SQLINTEGER cbdata = 200, cbvalue = SQL_DATA_AT_EXEC ;
SQLINTEGER cbbankitemlen;
SQLRETURN retcode;
SQLHSTMT hstmt;
SQLPOINTER pParamData;
int n=0;
char aaa=20;
char query[256]={0,};
sprintf(query, "UPDATE chr_info2 SET bankitem=? WHERE name='%s'", name) ;
SQLAllocStmt(hDBC, &hstmt);
retcode = SQLPrepare(hstmt, (UCHAR *)query, SQL_NTS);
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{
retcode= SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_BINARY,SQL_LONGVARBINARY, SIZE_OF_BANKITEM, 0, bankitem, 0, &cbbankitemlen );
if(retcode != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO)
{
SQLFreeStmt(hstmt, SQL_DROP);
printf("\nBinding FAIL!!!") ;
return -5 ;
}
cbbankitemlen = SQL_LEN_DATA_AT_EXEC(0);
retcode = SQLExecute(hstmt) ;
while(retcode == SQL_NEED_DATA)
{
retcode = SQLParamData(hstmt, &pParamData) ;
if(retcode == SQL_NEED_DATA)
{
if(pParamData == bankitem ) SQLPutData(hstmt, bankitem , SIZE_OF_BANKITEM );
}
else break ;
}
retcode = SQLExecute(hstmt) ;
if(retcode == SQL_NEED_DATA)
{
retcode= SQLCancel(hstmt) ;// 020620 YGI
//retcode= SQLTransact(SQL_NULL_HENV, hDBC, SQL_COMMIT);
retcode= SQLFreeStmt(hstmt, SQL_DROP );
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -