Files
cs2_united/cs2_patch/Replace.cpp
世元 李 cf3a5c1d7d new vis
2020-03-14 15:24:11 +08:00

172 lines
4.2 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "pch.h"
#include "Replace.h"
int npID = 0;
extern HMODULE hModL;
extern "C" extern DLLAPI wchar_t ms_str[3096];
extern "C" extern DLLAPI int nID;
void BuildCV(TESTDATA* pcv, TESTDATA flt, DWORD posinCross, DWORD posInLine, DWORD m_count, WCHAR nchar)
{
pcv->ForCast = flt.ForCast;
pcv->nLine = posinCross;
pcv->nChar = nchar;
pcv->nCross = posInLine;
pcv->Flag1 = flt.Flag1;
pcv->Flag2 = flt.Flag2;
pcv->Flag3 = flt.Flag3;
pcv->Flag4 = flt.Flag4;
pcv->Flagn4 = flt.Flagn4;
pcv->Flag5 = flt.Flag5;
pcv->Flag6 = flt.Flag6;
pcv->count = m_count;
pcv->Flag7 = posInLine;
pcv->Flag8 = flt.Flag8;
pcv->Flagn8 = flt.Flagn8;
pcv->FlagnW = flt.FlagnW;
pcv->FlagnQ = flt.FlagnQ;
pcv->nWQ = flt.nWQ;
pcv->ntime = flt.ntime;
pcv->ntime2 = flt.ntime2;
pcv->Over1 = flt.Over1;
pcv->Over2 = flt.Over2;
return;
}
void ApplyStringToCV(LPCWSTR ws, DWORD pDf, int id)
{
wstring localString = ws;
if (!pDf)return;
if (!ws)return;
DWORD Df = *(DWORD*)pDf;//Df <20><><EFBFBD>ݵ<EFBFBD>ָ<EFBFBD><D6B8>
if (!Df)return;//Ϊ<><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>
TESTDATA* nCView = (TESTDATA*)Df;//ʹһ<CAB9><D2BB>TESTDATA*ָ<><D6B8>Df
DWORD pOld;
VirtualProtect(nCView, 10 + (localString.length() * 2), PAGE_READWRITE, &pOld);
TESTDATA loadFirst = *nCView;//<2F><><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int posInLine = 0;//<2F><><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
int posinCross = 0xD;//<2F><><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
// SetWindowTextW(m_hWnd, L"<22><><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD>");
for (int i = 0; i < localString.length(); i++)
{
if (localString[i] == L'\n')
{
BuildCV(nCView, loadFirst, posinCross, posInLine, i * 2, 0);
nCView++;
BuildCV(nCView, loadFirst, posinCross, posInLine, i * 2, 0XFFFF);
nCView++;
posinCross += 0x28;
posInLine = 0;
}
else
{
BuildCV(nCView, loadFirst, posinCross, posInLine, i * 2, localString[i]);
nCView++;
posInLine += 0X1A;
}
}
// SetWindowTextW(m_hWnd, L"<22><><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD>");
*(DWORD*)(pDf + 4) = (DWORD)nCView;
VirtualProtect(nCView, 10 + (localString.length() * 2), pOld, NULL);
}
int TranSplete(DWORD lp)
{
// MessageBox(0,L"Transplete start",L"",0);
if (!lp)return -1;
DWORD ppDf = *(DWORD*)(lp + 0x2B0);
if (!ppDf)return -1;
DWORD pDf = *(DWORD*)(ppDf + 8);
if (!pDf)return -1;
DWORD Df = *(DWORD*)pDf;
if (!Df)return -1;
DWORD pEnd = *(DWORD*)(pDf + 4);
if (!pEnd)return -1;
WCHAR sjp[1024];
WCHAR scn[1024];
DWORD Num = (pEnd - Df) / 96;
wstring nStr;
TESTDATA* nCView = (TESTDATA*)Df;
for (DWORD i = 0; i < Num; i++) {
if (nCView->nChar == 0xFFFF) {
}
else if (nCView->nChar == 0) {
nStr += L'\n';
}
else {
nStr += nCView->nChar;
}
nCView++;
}
npID++;
// MessageBoxW(0,L"0",L"",0);
WCHAR csjp[1024];
WCHAR cscn[1024];
int ppId = 0;
if (!GetDataByID(nID - 1, csjp, cscn)) {
if (nID != 0)
if (!GetDataByJP(&ppId, nStr.c_str(), cscn))
return -1;
}
// MessageBoxW(0, L"1", L"", 0);
if (lstrcmpW(nStr.c_str(), cscn) == 0) {
// MessageBoxW(0, nStr.c_str(), L"", 0);
return -1;
}
// MessageBoxW(0, L"2", L"", 0);
if (wcsstr(nStr.c_str(), L"………")) {
return -1;
}
if (wcsstr(nStr.c_str(), L"…ああ"))
return -1;
if (wcsstr(nStr.c_str(), L"ふふふっ"))
return -1;
lstrcpyW(ms_str, nStr.c_str());
if (!GetDataByID(nID, sjp, scn)) {
int pID = 0;
if (GetDataByJP(&pID, nStr.c_str(), scn)) {
nID = pID + 1;
ApplyStringToCV(scn, pDf, pID);
return 0;
}
}
else
{
if (lstrcmpW(sjp, nStr.c_str()) == 0) {
ApplyStringToCV(scn, pDf, nID);
}
else
{
int pID = 0;
if (GetDataByJP(&pID, nStr.c_str(), scn)) {
nID = pID + 1;
ApplyStringToCV(scn, pDf, pID);
return 0;
}
else
nID = pID;
}
}
nID++;
return 0;
}