📄 mysql.cpp
字号:
#include "StdAfx.h"
#include "MAIN.H"
#include "NPC_Pattern.h"
#include "Map.h"
#include "Scrp_exe.h"
#include "monitor.h"
#include "MyLog.h"
#include "ChrLog.h"
#ifdef _GAME_SERVER_
#include "Hong_Area.h"
#include "Kein_Item.h"
#endif
#include "Citem.h"
#include "StepMigration.h"
#define BLOCK_SIZE 6000
#define SIZE_OF_ITEMLIST sizeof(ITEMLIST) * 1000
#define SIZE_OF_NPCLIST sizeof(CHARLIST) * 500
HENV hEnv = NULL;
HDBC hDBC = NULL;
HENV hEnv_TotalDB = NULL;
HDBC hDBC_TotalDB = NULL;
HENV hEnv_ChrLogDB = NULL;
HDBC hDBC_ChrLogDB = NULL;
HENV hEnv_NGCDB = NULL;//030207 lsw
HDBC hDBC_NGCDB = NULL;
int FREE_LEVEL_ = 0; // CSD-040127
NPCLev_to_Exp NPC_Lev_Ref[Num_Of_NPC_Lev]; // CSD-TW-030606
extern int var[ DRAGON_MAX_CONNECTIONS][ _SCRIPT_VARABLE_POINT_ ];
extern int calcAC( CHARLIST *ch );
extern int calcDefenceRate( CHARLIST *ch );
extern int calcAttackPowerMax( CHARLIST *ch );
extern int dexDefenseCor( CHARLIST *d ); // 0129 KHS
extern int GetTotalItemWeight( CHARLIST *ch );
extern int get_BinaryData_from_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);
extern int get_BinaryData_from_Chr_Info2 (UCHAR *bankitem, char *login_id, char *name);
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
extern int FREE_LVELE_; // CSD-040127
int CreateChar2_SQL(t_connection c[], int cn );
int UpdateCharID_SQL( int char_id );
int GetCharID_SQL( void );
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 );
char tempdate [10][ FILENAME_MAX];
char tempname [10][ FILENAME_MAX];
char temptitle[10][ FILENAME_MAX];
char tempbbs [10][ FILENAME_MAX];
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
typedef struct tag_Updating // 泅犁 Updateing窍绊 乐绰 Character俊 措茄 Table捞促.
{ // GameServer肺 Access Join窍妨绰 Client啊 乐阑锭,
char id[ ID_LENGTH]; // 捞 Table俊 绢恫 蔼捞 乐促搁 泪矫扁促妨具 茄促.
}UPDATE, *LPUPDATE;
int CurUpdateChar;
UPDATE UpdateChar[ MAX_UPDATE_CHARACTER_];
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
void ConvertQueryString(const char* szStr, char* szResult, const int iMaxString = MAX_STEP)
{// ' 巩磊甫 茫绊 '' 肺 官层霖促
// if(!szStr){return;}
// const int iLen = ::strlen(szStr);
int i = 0, j = 0;
for(; iMaxString > i; i++,j++)
{
::memcpy(szResult+j,szStr+i,sizeof(char));
if(*(szStr+i) == '\'')
{
j++;
::memcpy(szResult+j,szStr+i,sizeof(char));
}
}
::memset(szResult+j,0,sizeof(char));
return;//
}
void DisplaySQLError(SQLHDBC hDBC, HSTMT hStmt)
{
UCHAR szSqlState[100];
UCHAR szErrorMsg[100];
SQLINTEGER fNativeError = 0;
SWORD cbErrorMsg = 100;
RETCODE rc;
rc = SQLError(hEnv,
hDBC,
hStmt,
szSqlState,
&fNativeError,
szErrorMsg,
100,
&cbErrorMsg
);
if (rc != SQL_NO_DATA_FOUND || rc != SQL_ERROR)
{
if (fNativeError != 0x1645) // ignore change database to master context message
{
char Buffer[256];
wsprintf(Buffer,"Error Message: %s SqlState: %s, fNativeError: %x",szErrorMsg, szSqlState,fNativeError);
MessageBox(GetActiveWindow(),Buffer,"SQLError",MB_OK);
}
}
else
{
MessageBox(GetActiveWindow(),"SQLError() failed: , NO_DATA_FOUND OR SQL_ERROR","SQLError",MB_OK);
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int SQLExecDirect_kein( HSTMT hstmt, UCHAR *szQuery, int sql_type )
{
/*
char query[100];
strncpy( query, (char *)szQuery, 99 );
query[99] = 0;
MyLog(LOG_DEBUG, "Query : %s", query );*/
return SQLExecDirect( hstmt, szQuery, sql_type );
}
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);
}
int Release_SQL(void)
{
if(hDBC != NULL)
SQLDisconnect(hDBC);
SQLFreeConnect(hDBC);
SQLFreeEnv(hEnv);
return(1);
}
int Init_TotalDB_SQL(LPSTR szDSN, LPSTR szUID, LPSTR szUPW )
{
RETCODE retCode;
SQLAllocEnv(&hEnv_TotalDB);
SQLAllocConnect(hEnv_TotalDB, &hDBC_TotalDB);
retCode = SQLConnect(hDBC_TotalDB, (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);
}
int Release_TotalDB_SQL(void)
{
if(hDBC_TotalDB != NULL)
SQLDisconnect(hDBC_TotalDB);
SQLFreeConnect(hDBC_TotalDB);
SQLFreeEnv(hEnv_TotalDB);
return(1);
}
int Init_NGCDB_SQL(LPSTR szDSN, LPSTR szUID, LPSTR szUPW )//030207 lsw
{
RETCODE retCode;
SQLAllocEnv(&hEnv_NGCDB);
SQLAllocConnect(hEnv_NGCDB, &hDBC_NGCDB);
retCode = SQLConnect(hDBC_NGCDB, (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);
}
int Release_NGCDB_SQL(void)//030207 lsw
{
if(hDBC_NGCDB != NULL)
SQLDisconnect(hDBC_NGCDB);
SQLFreeConnect(hDBC_NGCDB);
SQLFreeEnv(hEnv_NGCDB);
return(1);
}
int Init_ChrLogDB_SQL(LPSTR szDSN, LPSTR szUID, LPSTR szUPW )
{
RETCODE retCode;
SQLAllocEnv(&hEnv_ChrLogDB);
SQLAllocConnect(hEnv_ChrLogDB, &hDBC_ChrLogDB);
retCode = SQLConnect(hDBC_ChrLogDB, (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);
};
int Release_ChrLogDB_SQL(void)
{
if(hDBC_ChrLogDB != NULL) SQLDisconnect(hDBC_ChrLogDB );
SQLFreeConnect(hDBC_ChrLogDB);
SQLFreeEnv(hEnv_ChrLogDB);
return(1);
};
int Querry_SQL(LPSTR szQuerry, HDBC hdbc)
{ //< CSD-030804
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;
}
SQLFreeStmt(hStmt, SQL_DROP);
return -1;
} //> CSD-030804
// chr_log_info 抛捞喉俊辑 某腐磐捞抚阑 茫绰促.
int GetCharacterNameInID( LPSTR id, char name[4][20] )
{
HSTMT hStmt = NULL;
RETCODE retCode;
SDWORD cbValue;
char szQuerry[255];
sprintf( szQuerry, "login_id = '%s'", id );
if( !IsExitRecordOfDB( "chr_log_info", szQuerry ) )
{
// 货肺款 某腐磐
sprintf( szQuerry, "INSERT chr_log_info ( login_id, vote, passwd ) VALUES ( '%s', 0, 'make by db_demon' )", id );
retCode = Querry_SQL( szQuerry );
}
//sprintf(szQuerry, "select name1, name2, name3, name4 "
// " from chr_log_info where login_id='%s'", id );
/////////////////////////////////////////////////////////////////////////////
sprintf(szQuerry, "EXEC up_get_char_all_name '%s'", id);
/////////////////////////////////////////////////////////////////////////////
SQLAllocStmt(hDBC, &hStmt);
retCode = SQLExecDirect(hStmt, (UCHAR *)szQuerry, SQL_NTS);
if(retCode == SQL_SUCCESS || retCode == SQL_SUCCESS_WITH_INFO)
{
retCode = SQLFetch(hStmt);
//"select name, lev, job, class, gender, bodyr, bodyg, bodyb, "
retCode = SQLGetData(hStmt, 1, SQL_C_CHAR, name[0], NM_LENGTH, &cbValue);
retCode = SQLGetData(hStmt, 2, SQL_C_CHAR, name[1], NM_LENGTH, &cbValue);
retCode = SQLGetData(hStmt, 3, SQL_C_CHAR, name[2], NM_LENGTH, &cbValue);
retCode = SQLGetData(hStmt, 4, SQL_C_CHAR, name[3], NM_LENGTH, &cbValue);
SQLFreeStmt(hStmt, SQL_DROP);
return(1);
}
SQLFreeStmt(hStmt, SQL_DROP); // 0308 YGI
return(-1);
}
// GetCharacterNameInID( LPSTR id, char *name[4] )俊辑 茫篮 捞抚阑 啊瘤绊 扁夯沥焊甫 惶酒辰促.
int GetCharInfo_SQL2( char *realid, char name[4][20], t_packet *packet) // 1027 YGI
{
HSTMT hStmt = NULL;
RETCODE retCode;
SDWORD cbValue;
char szQuerry[255];
int i;
char id[ 20];
int Level, Job, Class, Gender;
int bodyr, bodyg, bodyb, clothr, clothg, clothb;
DWORD money;
int age;
int acc_equip1, acc_equip2, acc_equip3, acc_equip4;
int nation[4];
t_server_accept_login *tp;
tp = &packet->u.server_accept_login;
for( i = 0 ; i < 4 ; i ++)
{
if( name[i][0] == 0 )
{
tp->name[i][0] = 0;
continue;
}
sprintf(szQuerry, "select login_id, lev, job, class, gender, bodyr, bodyg, bodyb, "
"clothr,clothg, clothb, money, age, "
"acc_equip1, acc_equip2, acc_equip3, acc_equip4, nation "
" from chr_info where name='%s'", name[i] );
// sprintf(szQuerry, "EXEC up_get_char_info2 '%s'", name[i]);
SQLAllocStmt(hDBC, &hStmt);
retCode = SQLExecDirect(hStmt, (UCHAR *)szQuerry, SQL_NTS);
if(retCode == SQL_SUCCESS || retCode == SQL_SUCCESS_WITH_INFO)
{
retCode = SQLFetch(hStmt);
// 010301 KHS chr_log_info has name, but There isn't name in chr_info
if( retCode == SQL_NO_DATA )
{
tp->name[i][0] = 0;
}
else
{
//"select login_id, name, lev, job, class, gender, bodyr, bodyg, bodyb, "
retCode = SQLGetData(hStmt, 1, SQL_C_CHAR, &id, 20, &cbValue);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -