저자:meh321마지막 업데이트:2024-02-14 09:19:5421.1M2.3MB
# 'versiondb.h' 포함
void * MyAddress = NULL;
서명 없는 긴 긴 myoffset = 0;
bool InitializeOffsets ()
{
//스택에서 할당하므로 이 함수를 종료할 때 해제됩니다.
//전체 데이터베이스를 로드하고 이유 없이 메모리를 사용할 필요가 없습니다.
버전 db db;
//현재 실행 가능 버전으로 데이터베이스를 로드합니다.
if (! db.Load ())
{
_FATALERROR ("현재 실행 파일의 버전 데이터베이스를 로드하지 못했습니다!");
}
아니면
{
//"SkyrimSE.exe", "1.5.97.0"
_MESSAGE("%s version %s for loaded database. ", db.GetModuleName (). c_str (), db.GetLoadedVersionString (). c_str ());
}
//이 주소에는 이미 모듈의 기본 주소가 포함되어 있으므로 우리는 이 주소를 직접 사용할 수 있습니다.
MyAddress=db.FindAddressById(123);
if (MyAddress== NULL)
{
_FATALERROR("주소를 찾을 수 없습니다! ");
false 반환;
}
//이 간격띄우기에는 기본 주소가 포함되지 않습니다. 실제 주소는 modulebase + MyOffset입니다.
if (! db.FindOffsetById(123, MyOffset))
{
_FATALERROR ("내 물건의 간격띄우기를 찾을 수 없다!");
}
//모든 것이 성공적이었습니다.
참으로 돌아가다;
}
# 'versiondb.h' 포함
부울 덤프 SpecificVersion ()
{
버전 db db;
//실행 파일 버전에 관계없이 버전 1.5.62.0의 데이터베이스를 로드하십시오.
if (! db.Load(1,5,62,0))
{
_FATALERROR ("1.5.62.0 데이터베이스를 로드하지 못했습니다!");
false 반환;
}
//offsets-1.5.62.0.txt라는 파일을 작성합니다. 여기서 각 행은 ID와 offset입니다.
db.Dump("offsets-1.5.62.0.txt ");
_MESSAGE('1.5.62.0에 대한 덤핑 오프셋');
참으로 돌아가다;
}
void * addressOf142F4DEF8 = db.FindAddressById(517014);
bool Dump(const std:: string & path); //현재 로드된 데이터베이스를 파일로 덤프
bool 로드(int major, int minor, int revision, int build); //data/SKSE/plugins 디렉토리에 db-major-minor-revision-build.bin이 있는 경우 특정 버전을 로드합니다.
bool Load (); //현재 응용 프로그램의 버전 로드
void Clear (); //현재 로드된 데이터베이스 지우기
void GetLoadedVersion(int & major, int & minor, int & revision, int & build) const; //우리가 지금 로드한 데이터베이스 파일의 버전을 가져오기
bool GetExecutableVersion(int & major, int & minor, int & revision, int & build) const; //현재 실행 중인 응용 프로그램의 버전 가져오기
const std:: string & GetModuleName () const; //현재 로드된 데이터베이스 모듈의 이름을 얻으면 "SkyrimSE.exe"가 표시되어야 합니다.
const std:: string & GetLoadedVersionString () const; //현재 로드된 버전을 문자열으로 가져오기 (예: "1.5.62.0")
const std::map<unsigned long long, unsigned long long>& GetOffsetMap () const; //수동으로 반복해야 할 경우 간격띄우기 ID의 맵을 가져와
void*FindAddressById(서명 없는 긴 긴 ID) const; //ID로 주소를 찾으면 이미 기본 주소가 포함되고 올바른 주소가 됩니다. 찾을 수 없으면 null을 반환합니다!
bool FindOffsetById(서명 없는 긴 긴 ID, 서명 없는 긴 긴 & result) const; //ID로 간격띄우기를 찾으면, 기준을 포함하지 않고 간격띄우기가 됩니다.
bool FindIdByAddress(void * ptr, unsigned long long & result) const; //주소별로 ID를 찾으면 주소를 ID로 변환하기 위해 역검색을 시도합니다.
bool FindIdByOffset (서명 없는 긴 긴 오프셋, 서명 없는 긴 긴 & result) const; //간격띄우기로 ID를 찾으면 역검색을 시도하여 간격띄우기를 ID로 변환합니다.
bool LoadAll (std:: 벡터<VersionDb*>전체 (D)
{
정적 int 버전 [] = {3, 16, 23, 39, 50, 53, 62, 73, 80, 97, -1};
for (int i=0; version[i] > = 0; i ++)
{
VersionDb * db = new VersionDb ();
if (! db-> Load(1, 5, 버전 [i], 0))
{
db 삭제;
false 반환;
}
all.push_back(db);
}
참으로 돌아가다;
}
bool existensinall (std:: 벡터<VersionDb*>모든, 서명이 없는 긴 긴 ID)
{
서명 없는 긴 긴 결과 = 0;
{
if (! db-> FindOffsetById(id, result))
}
참으로 돌아가다;
}
void FreeAll(std:: vector<VersionDb*>전체 (D)
{
for(자동 db:all)
db 삭제;
all.clear ();
}
부울 IsOk ()
{
std:: 벡터<VersionDb*>모두;
if (! LoadAll (all))
{
_FATALERROR ("현재 실행 파일에 대해 하나 이상의 버전 데이터베이스를 로드하지 못했습니다!");
FreeAll (all);
false 반환;
}
if (! existensinall(all, 517014))
{
_FATALERROR("517014는 데이터베이스의 모든 버전에 존재하지 않습니다! ");
}
FreeAll (all);
//좋아!
참으로 돌아가다;
}
int major = 0, minor = 0, revision = 0, build = 0;
if (! db.GetExecutableVersion(major, minor, revision, build))
{
_FATALERROR ("뭔가 잘못되었어!");
false 반환;
}
//실행 게임은 1.5.x 및 최소 1.5.39.0 버전입니다.
if (major == 1&&minor == 5&&revision > = 39)
{
//물건...?
}

지금 모드를 다운로드하세요
LagoFast를 설치하고 The Elder Scrolls V: Skyrim Special Edition을(를) 시작한 후 좋아하는 모드로 플레이해 보세요.