MRMJ-1: Messenger & Skills fixes
This commit is contained in:
@@ -96,9 +96,9 @@ void CItemCache::OnFlush()
|
||||
{
|
||||
iLen += snprintf(szColumns + iLen, sizeof(szColumns) - iLen, ", socket0, socket1, socket2");
|
||||
iValueLen += snprintf(szValues + iValueLen, sizeof(szValues) - iValueLen,
|
||||
", %lu, %lu, %lu", p->alSockets[0], p->alSockets[1], p->alSockets[2]);
|
||||
", %lu, %lu, %lu", static_cast<unsigned long>(p->alSockets[0]), static_cast<unsigned long>(p->alSockets[1]), static_cast<unsigned long>(p->alSockets[2]));
|
||||
iUpdateLen += snprintf(szUpdate + iUpdateLen, sizeof(szUpdate) - iUpdateLen,
|
||||
", socket0=%lu, socket1=%lu, socket2=%lu", p->alSockets[0], p->alSockets[1], p->alSockets[2]);
|
||||
", socket0=%lu, socket1=%lu, socket2=%lu", static_cast<unsigned long>(p->alSockets[0]), static_cast<unsigned long>(p->alSockets[1]), static_cast<unsigned long>(p->alSockets[2]));
|
||||
}
|
||||
|
||||
if (isAttr)
|
||||
|
||||
@@ -458,7 +458,7 @@ void CClientManager::QUERY_QUEST_SAVE(CPeer * pkPeer, TQuestTable * pTable, DWOR
|
||||
{
|
||||
snprintf(szQuery, sizeof(szQuery),
|
||||
"REPLACE INTO quest%s (dwPID, szName, szState, lValue) VALUES(%d, '%s', '%s', %ld)",
|
||||
GetTablePostfix(), pTable->dwPID, pTable->szName, pTable->szState, pTable->lValue);
|
||||
GetTablePostfix(), pTable->dwPID, pTable->szName, pTable->szState, static_cast<long>(pTable->lValue));
|
||||
}
|
||||
|
||||
CDBManager::instance().ReturnQuery(szQuery, QID_QUEST_SAVE, pkPeer->GetHandle(), NULL);
|
||||
@@ -683,7 +683,7 @@ void CClientManager::RESULT_SAFEBOX_LOAD(CPeer * pkPeer, SQLMsg * msg)
|
||||
|
||||
dwSkillVnum = m_vec_skillTable[dwSkillIdx].dwVnum;
|
||||
|
||||
if (!dwSkillVnum > 120)
|
||||
if (dwSkillVnum > 120)
|
||||
continue;
|
||||
|
||||
break;
|
||||
@@ -1297,9 +1297,9 @@ void CClientManager::QUERY_ITEM_SAVE(CPeer * pkPeer, const char * c_pData)
|
||||
p->pos,
|
||||
p->count,
|
||||
p->vnum,
|
||||
p->alSockets[0],
|
||||
p->alSockets[1],
|
||||
p->alSockets[2],
|
||||
static_cast<long>(p->alSockets[0]),
|
||||
static_cast<long>(p->alSockets[1]),
|
||||
static_cast<long>(p->alSockets[2]),
|
||||
p->aAttr[0].bType, p->aAttr[0].sValue,
|
||||
p->aAttr[1].bType, p->aAttr[1].sValue,
|
||||
p->aAttr[2].bType, p->aAttr[2].sValue,
|
||||
|
||||
@@ -347,6 +347,7 @@ bool CClientManager::InitializeMobTable()
|
||||
|
||||
mob_table->dwDropItemVnum = tempTable->dwDropItemVnum;
|
||||
mob_table->dwResurrectionVnum = tempTable->dwResurrectionVnum;
|
||||
|
||||
for (int i = 0; i < MOB_ENCHANTS_MAX_NUM; ++i)
|
||||
mob_table->cEnchants[i] = tempTable->cEnchants[i];
|
||||
|
||||
@@ -357,7 +358,6 @@ bool CClientManager::InitializeMobTable()
|
||||
mob_table->dwSummonVnum = tempTable->dwSummonVnum;
|
||||
mob_table->dwDrainSP = tempTable->dwDrainSP;
|
||||
mob_table->dwPolymorphItemVnum = tempTable->dwPolymorphItemVnum;
|
||||
|
||||
|
||||
mob_table->Skills[0].bLevel = tempTable->Skills[0].bLevel;
|
||||
mob_table->Skills[0].dwVnum = tempTable->Skills[0].dwVnum;
|
||||
@@ -400,20 +400,22 @@ bool CClientManager::InitializeMobTable()
|
||||
//파일 다시 읽어오기.
|
||||
test_data.Destroy();
|
||||
isTestFile = true;
|
||||
test_data;
|
||||
if(!test_data.Load("mob_proto_test.txt",'\t'))
|
||||
|
||||
if (!test_data.Load("mob_proto_test.txt",'\t'))
|
||||
{
|
||||
fprintf(stderr, "테스트 파일이 없습니다. 그대로 진행합니다.\n");
|
||||
isTestFile = false;
|
||||
}
|
||||
if(isTestFile) {
|
||||
|
||||
if (isTestFile) {
|
||||
test_data.Next(); //설명 로우 넘어가기.
|
||||
|
||||
while (test_data.Next()) //테스트 데이터 각각을 훑어나가며,새로운 것을 추가한다.
|
||||
{
|
||||
//중복되는 부분이면 넘어간다.
|
||||
set<int>::iterator itVnum;
|
||||
itVnum=vnumSet.find(atoi(test_data.AsStringByIndex(0)));
|
||||
itVnum = vnumSet.find(atoi(test_data.AsStringByIndex(0)));
|
||||
|
||||
if (itVnum != vnumSet.end()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -51,7 +51,7 @@ void CClientManager::SetEventFlag(TPacketSetEventFlag* p)
|
||||
char szQuery[1024];
|
||||
snprintf(szQuery, sizeof(szQuery),
|
||||
"REPLACE INTO quest%s (dwPID, szName, szState, lValue) VALUES(0, '%s', '', %ld)",
|
||||
GetTablePostfix(), p->szFlagName, p->lValue);
|
||||
GetTablePostfix(), p->szFlagName, static_cast<long>(p->lValue));
|
||||
szQuery[1023] = '\0';
|
||||
|
||||
//CDBManager::instance().ReturnQuery(szQuery, QID_QUEST_SAVE, 0, NULL);
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
|
||||
|
||||
#include "stdafx.h"
|
||||
|
||||
#include "ClientManager.h"
|
||||
@@ -126,9 +126,9 @@ size_t CreatePlayerSaveQuery(char * pszQuery, size_t querySize, TPlayerTable * p
|
||||
pkTab->y,
|
||||
pkTab->z,
|
||||
pkTab->lMapIndex,
|
||||
pkTab->lExitX,
|
||||
pkTab->lExitY,
|
||||
pkTab->lExitMapIndex,
|
||||
static_cast<long>(pkTab->lExitX),
|
||||
static_cast<long>(pkTab->lExitY),
|
||||
static_cast<long>(pkTab->lExitMapIndex),
|
||||
pkTab->hp,
|
||||
pkTab->sp,
|
||||
pkTab->stamina,
|
||||
@@ -151,7 +151,7 @@ size_t CreatePlayerSaveQuery(char * pszQuery, size_t querySize, TPlayerTable * p
|
||||
pkTab->parts[PART_MAIN],
|
||||
pkTab->parts[PART_HAIR],
|
||||
pkTab->skill_group,
|
||||
pkTab->lAlignment,
|
||||
static_cast<long>(pkTab->lAlignment),
|
||||
pkTab->horse.bLevel,
|
||||
pkTab->horse.bRiding,
|
||||
pkTab->horse.sHealth,
|
||||
@@ -414,28 +414,34 @@ void CClientManager::ItemAward(CPeer * peer,char* login)
|
||||
TItemAward * pItemAward = *(it++);
|
||||
char* whyStr = pItemAward->szWhy; //why 콜룸 읽기
|
||||
char cmdStr[100] = ""; //why콜룸에서 읽은 값을 임시 문자열에 복사해둠
|
||||
strcpy(cmdStr,whyStr); //명령어 얻는 과정에서 토큰쓰면 원본도 토큰화 되기 때문
|
||||
strcpy(cmdStr, whyStr); //명령어 얻는 과정에서 토큰쓰면 원본도 토큰화 되기 때문
|
||||
|
||||
char command[20] = "";
|
||||
strcpy(command,GetCommand(cmdStr)); // command 얻기
|
||||
if( !(strcmp(command,"GIFT") )) // command 가 GIFT이면
|
||||
strcpy(command,GetCommand(cmdStr)); // command 얻기
|
||||
|
||||
if (!(strcmp(command,"GIFT"))) // command 가 GIFT이면
|
||||
{
|
||||
TPacketItemAwardInfromer giftData;
|
||||
strcpy(giftData.login, pItemAward->szLogin); //로그인 아이디 복사
|
||||
strcpy(giftData.command, command); //명령어 복사
|
||||
giftData.vnum = pItemAward->dwVnum; //아이템 vnum도 복사
|
||||
ForwardPacket(HEADER_DG_ITEMAWARD_INFORMER,&giftData,sizeof(TPacketItemAwardInfromer));
|
||||
ForwardPacket(HEADER_DG_ITEMAWARD_INFORMER, &giftData, sizeof(TPacketItemAwardInfromer));
|
||||
}
|
||||
}
|
||||
}
|
||||
char* CClientManager::GetCommand(char* str)
|
||||
{
|
||||
char command[20] = "";
|
||||
static char command[20] = "";
|
||||
char* tok;
|
||||
|
||||
if( str[0] == '[' )
|
||||
if (str[0] == '[')
|
||||
{
|
||||
tok = strtok(str,"]");
|
||||
strcat(command,&tok[1]);
|
||||
tok = strtok(str, "]");
|
||||
strlcpy(command, &tok[1], sizeof(command));
|
||||
}
|
||||
else
|
||||
{
|
||||
command[0] = '\0';
|
||||
}
|
||||
|
||||
return command;
|
||||
@@ -579,12 +585,15 @@ void CClientManager::RESULT_COMPOSITE_PLAYER(CPeer * peer, SQLMsg * pMsg, DWORD
|
||||
if (temp1 == NULL)
|
||||
break;
|
||||
|
||||
CLoginData* pLoginData1 = GetLoginDataByAID(temp1->account_id); //
|
||||
CLoginData* pLoginData1 = GetLoginDataByAID(temp1->account_id);
|
||||
|
||||
if (pLoginData1 == NULL)
|
||||
break;
|
||||
|
||||
//독일 선물 기능
|
||||
if( pLoginData1->GetAccountRef().login == NULL)
|
||||
break;
|
||||
if( pLoginData1 == NULL )
|
||||
if (pLoginData1->GetAccountRef().login[0] == '\0')
|
||||
break;
|
||||
|
||||
sys_log(0,"info of pLoginData1 before call ItemAwardfunction %d",pLoginData1);
|
||||
ItemAward(peer,pLoginData1->GetAccountRef().login);
|
||||
}
|
||||
@@ -893,7 +902,6 @@ void CClientManager::__QUERY_PLAYER_CREATE(CPeer *peer, DWORD dwHandle, TPlayerC
|
||||
packet->player_table.ht,
|
||||
packet->player_table.job);
|
||||
|
||||
//tw1x1: Buffer overflow (14.11.2025 / 21:08 GMT)
|
||||
static char text[8192 + 1];
|
||||
|
||||
CDBManager::instance().EscapeString(text, packet->player_table.skills, sizeof(packet->player_table.skills));
|
||||
@@ -1191,10 +1199,10 @@ void CClientManager::QUERY_ADD_AFFECT(CPeer * peer, TPacketGDAddAffect * p)
|
||||
p->dwPID,
|
||||
p->elem.dwType,
|
||||
p->elem.bApplyOn,
|
||||
p->elem.lApplyValue,
|
||||
static_cast<long>(p->elem.lApplyValue),
|
||||
p->elem.dwFlag,
|
||||
p->elem.lDuration,
|
||||
p->elem.lSPCost);
|
||||
static_cast<long>(p->elem.lDuration),
|
||||
static_cast<long>(p->elem.lSPCost));
|
||||
|
||||
CDBManager::instance().AsyncQuery(queryStr);
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
#ifndef Assert
|
||||
#include <assert.h>
|
||||
#define Assert assert
|
||||
#define LogToFile (void)(0);
|
||||
#define LogToFile(...) ((void)0)
|
||||
#endif
|
||||
|
||||
namespace
|
||||
|
||||
@@ -128,7 +128,18 @@ int CDBManager::Connect(int iSlot, const char * db_address, const int db_port, c
|
||||
|
||||
SQLMsg * CDBManager::DirectQuery(const char * c_pszQuery, int iSlot)
|
||||
{
|
||||
return m_directSQL[iSlot]->DirectQuery(c_pszQuery);
|
||||
//return m_directSQL[iSlot]->DirectQuery(c_pszQuery);
|
||||
|
||||
// DirectQuery LPHeart debuging trace 15/11/2015 06:38AM GMT
|
||||
DWORD t = get_dword_time();
|
||||
SQLMsg* p = m_directSQL[iSlot]->DirectQuery(c_pszQuery);
|
||||
DWORD dt = get_dword_time() - t;
|
||||
|
||||
if (dt > 200) {
|
||||
sys_err("[SLOW-DB] DirectQuery(%d) took %u ms: %s", iSlot, dt, c_pszQuery);
|
||||
}
|
||||
|
||||
return p;
|
||||
}
|
||||
|
||||
extern CPacketInfo g_query_info;
|
||||
|
||||
@@ -1063,7 +1063,7 @@ bool CGuildManager::ReserveWar(TPacketGuildWar * p)
|
||||
snprintf(szQuery, sizeof(szQuery),
|
||||
"INSERT INTO guild_war_reservation (guild1, guild2, time, type, warprice, initscore, power1, power2, handicap) "
|
||||
"VALUES(%u, %u, DATE_ADD(NOW(), INTERVAL 180 SECOND), %u, %ld, %ld, %ld, %ld, %ld)",
|
||||
GID1, GID2, p->bType, p->lWarPrice, p->lInitialScore, t.lPowerFrom, t.lPowerTo, t.lHandicap);
|
||||
GID1, GID2, p->bType, static_cast<long>(p->lWarPrice), static_cast<long>(p->lInitialScore), static_cast<long>(t.lPowerFrom), static_cast<long>(t.lPowerTo), static_cast<long>(t.lHandicap));
|
||||
|
||||
std::unique_ptr<SQLMsg> pmsg(CDBManager::instance().DirectQuery(szQuery));
|
||||
|
||||
|
||||
@@ -129,7 +129,7 @@ bool CMonarch::AddMoney(int Empire, int64_t Money)
|
||||
int64_t Money64 = m_MonarchInfo.money[Empire];
|
||||
|
||||
char szQuery[1024];
|
||||
snprintf(szQuery, sizeof(szQuery), "UPDATE monarch set money=%lld where empire=%d", Money64, Empire);
|
||||
snprintf(szQuery, sizeof(szQuery), "UPDATE monarch set money=%lld where empire=%d", static_cast<long long>(Money64), Empire);
|
||||
|
||||
CDBManager::instance().AsyncQuery(szQuery);
|
||||
|
||||
@@ -145,7 +145,7 @@ bool CMonarch::DecMoney(int Empire, int64_t Money)
|
||||
int64_t Money64 = m_MonarchInfo.money[Empire];
|
||||
|
||||
char szQuery[1024];
|
||||
snprintf(szQuery, sizeof(szQuery), "UPDATE monarch set money=%lld where empire=%d", Money64, Empire);
|
||||
snprintf(szQuery, sizeof(szQuery), "UPDATE monarch set money=%lld where empire=%d", static_cast<long long>(Money64), Empire);
|
||||
|
||||
CDBManager::instance().AsyncQuery(szQuery);
|
||||
return true;
|
||||
@@ -163,12 +163,12 @@ bool CMonarch::TakeMoney(int Empire, DWORD pid, int64_t Money)
|
||||
|
||||
char szQuery[1024];
|
||||
snprintf(szQuery, sizeof(szQuery),
|
||||
"UPDATE monarch set money=%lld; where empire=%d", m_MonarchInfo.money[Empire], Empire);
|
||||
"UPDATE monarch set money=%lld where empire=%d", static_cast<long long>(m_MonarchInfo.money[Empire]), Empire);
|
||||
|
||||
CDBManager::instance().AsyncQuery(szQuery);
|
||||
|
||||
if (g_test_server)
|
||||
sys_log(0, "[MONARCH] Take money empire(%d) money(%lld)", Empire, m_MonarchInfo.money[Empire]);
|
||||
sys_log(0, "[MONARCH] Take money empire(%d) money(%lld)", Empire, static_cast<long long>(m_MonarchInfo.money[Empire]));
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -198,7 +198,7 @@ bool CMonarch::LoadMonarch()
|
||||
strlcpy(p->date[Empire], row[idx++], sizeof(p->date[Empire]));
|
||||
|
||||
if (g_test_server)
|
||||
sys_log(0, "[LOAD_MONARCH] Empire %d pid %d money %lld windate %s", Empire, p->pid[Empire], p->money[Empire], p->date[Empire]);
|
||||
sys_log(0, "[LOAD_MONARCH] Empire %d pid %d money %lld windate %s", Empire, p->pid[Empire], static_cast<long long>(p->money[Empire]), p->date[Empire]);
|
||||
}
|
||||
|
||||
delete pMsg;
|
||||
@@ -231,13 +231,13 @@ bool CMonarch::SetMonarch(const char * name)
|
||||
p->money[Empire] = atoll(row[idx++]);
|
||||
|
||||
if (g_test_server)
|
||||
sys_log(0, "[Set_MONARCH] Empire %d pid %d money %lld windate %s", Empire, p->pid[Empire], p->money[Empire], p->date[Empire]);
|
||||
sys_log(0, "[Set_MONARCH] Empire %d pid %d money %lld windate %s", Empire, p->pid[Empire], static_cast<long long>(p->money[Empire]), p->date[Empire]);
|
||||
}
|
||||
delete pMsg;
|
||||
|
||||
//db¿¡ ÀÔ·Â
|
||||
snprintf(szQuery, sizeof(szQuery),
|
||||
"REPLACE INTO monarch (empire, name, windate, money) VALUES(%d, %d, now(), %lld)", Empire, p->pid[Empire], p->money[Empire]);
|
||||
"REPLACE INTO monarch (empire, name, windate, money) VALUES(%d, %d, now(), %lld)", Empire, p->pid[Empire], static_cast<long long>(p->money[Empire]));
|
||||
|
||||
CDBManager::instance().AsyncQuery(szQuery, SQL_PLAYER);
|
||||
return true;
|
||||
|
||||
Reference in New Issue
Block a user