HERAKLES Otomatik Avlı kalıcı sunucu. 19 Haziran'da açılıyor. Atius & Wizard güvencesiyle hemen kayıt ol, ön kayıt ödülleri aktif. HEMEN TIKLA!
Kullanmak isteyen elbet olur
-Protoları vnuma göre sıralar(item_list.txt ve npclist.txt dahil)
-Birden fazla kez kullanılanları log eder
-Kullanılmayan boştaki item_proto vnum aralıklarını aşağıdaki gibi sıralar
-Protoları vnuma göre sıralar(item_list.txt ve npclist.txt dahil)
-Birden fazla kez kullanılanları log eder
-Kullanılmayan boştaki item_proto vnum aralıklarını aşağıdaki gibi sıralar
Tek yapmanız gereken item_list.txt,npclist.txt,item_proto.txt,item_names.txt,mob_proto.txt,mob_names.txt dosyalarını bir klasöre bu exe ile atıp exeyi çalıştırmak
VirüsTotal virüs bulmuş fakat ben kaynak kodunuda paylaşayım virüs yok içinde istiyen derleyip kullansın
VirüsTotal virüs bulmuş fakat ben kaynak kodunuda paylaşayım virüs yok içinde istiyen derleyip kullansın
[CODE lang="cpp" title="c++"]#include <iostream>
#include <fstream>
#include <ma#includeude <vector#includede <str#includeclude <sst#includenclude <al#include
using nam#includetd;
// Bir satırı VNUM'a göre ayıran yardımcı fonksiyon
int getVnumFromLine(const string& line) {
stringstream ss(line);
int vnum;
ss >> vnum; // Satırın başındaki ilk sayıyı VNUM olarak alır
return vnum;
}
// Sadece boşluk veya özel karakterlerden oluşan satırları kontrol et
bool isWhitespaceOrSpecialCharsOnly(const string& line) {
for (char c : line) {
if (isalnum(c)) {
return false; // Eğer satırda harf veya rakam varsa boş veya geçersiz değil
}
}
return true; // Eğer sadece boşluk veya özel karakterler varsa bu satırı geçersiz kabul et
}
// Dosyayı VNUM'a göre sıralayan fonksiyon
void sortFileByVnum(const string& filename) {
ifstream infile(filename);
vector<pair<int, string>> linesWithVnum;
string line;
// Dosyayı satır satır oku ve VNUM'ları al
while (getline(infile, line)) {
if (line.empty() || isWhitespaceOrSpecialCharsOnly(line)) {
continue; // Boş veya sadece özel karakterler içeren satırları atla
}
int vnum = getVnumFromLine(line);
linesWithVnum.push_back({ vnum, line });
}
infile.close();
// VNUM'lara göre sıralama yap
sort(linesWithVnum.begin(), linesWithVnum.end());
// Sıralanmış satırları dosyaya tekrar yaz
ofstream outfile(filename);
for (const auto& entry : linesWithVnum) {
outfile << entry.second << endl;
}
outfile.close();
}
// Dosyadan verileri oku ve VNUM'ları kaydet
void readVnums(const string& filename, map<int, int>& vnumCounter) {
ifstream infile(filename);
string line;
while (getline(infile, line)) {
stringstream ss(line);
int vnum;
ss >> vnum;
printf("Check Vnum: %d \n", vnum);
vnumCounter[vnum]++;
}
}
// Kullanılmayan VNUM aralıklarını tespit et
void findUnusedVnums(const map<int, int>& vnumCounter, vector<pair<int, int>>& unusedRanges, int minVnum, int maxVnum) {
int start = -1;
for (int i = minVnum; i <= maxVnum; i++) {
if (vnumCounter.find(i) == vnumCounter.end()) {
if (start == -1) {
start = i;
}
}
else {
if (start != -1) {
unusedRanges.push_back({ start, i - 1 });
start = -1;
}
}
}
if (start != -1) {
unusedRanges.push_back({ start, maxVnum });
}
}
// Kullanılmayan VNUM'ları dosyaya yaz
void writeUnusedVnums(const string& filename, const vector<pair<int, int>>& unusedRanges) {
ofstream outfile(filename);
for (const auto& range : unusedRanges) {
outfile << range.first << "~" << range.second << endl;
}
}
// Birden fazla kez kullanılan VNUM'ları dosyaya yaz
void writeDuplicateVnums(const string& filename, const map<int, int>& vnumCounter) {
ofstream outfile(filename);
for (const auto& entry : vnumCounter) {
if (entry.second > 1) {
outfile << entry.first << endl;
printf("Detectid Vnum: %d \n", entry.first);
}
}
}
int main() {
map<int, int> vnumCounter;
string inputFilename = "item_proto.txt";
// Veriyi oku
readVnums(inputFilename, vnumCounter);
// Kullanılmayan ve birden fazla kullanılan VNUM'ları analiz et
vector<pair<int, int>> unusedRanges;
int minVnum = 10, maxVnum = 9000000;
findUnusedVnums(vnumCounter, unusedRanges, minVnum, maxVnum);
// Kullanılmayan ve birden çok kullanılan VNUM'ları dosyalara yaz
writeUnusedVnums("kullanilmayan_vnumlar.txt", unusedRanges);
writeDuplicateVnums("birdencokkullanilan_vnumlar.txt", vnumCounter);
sortFileByVnum("item_list.txt");
sortFileByVnum("npclist.txt");
sortFileByVnum("mob_proto.txt");
sortFileByVnum("item_proto.txt");
sortFileByVnum("mob_names.txt");
sortFileByVnum("item_names.txt");
cout << "İşlem tamamlandı." << endl;
return 0;
}
[/CODE]
#include <fstream>
#include <ma#includeude <vector#includede <str#includeclude <sst#includenclude <al#include
using nam#includetd;
// Bir satırı VNUM'a göre ayıran yardımcı fonksiyon
int getVnumFromLine(const string& line) {
stringstream ss(line);
int vnum;
ss >> vnum; // Satırın başındaki ilk sayıyı VNUM olarak alır
return vnum;
}
// Sadece boşluk veya özel karakterlerden oluşan satırları kontrol et
bool isWhitespaceOrSpecialCharsOnly(const string& line) {
for (char c : line) {
if (isalnum(c)) {
return false; // Eğer satırda harf veya rakam varsa boş veya geçersiz değil
}
}
return true; // Eğer sadece boşluk veya özel karakterler varsa bu satırı geçersiz kabul et
}
// Dosyayı VNUM'a göre sıralayan fonksiyon
void sortFileByVnum(const string& filename) {
ifstream infile(filename);
vector<pair<int, string>> linesWithVnum;
string line;
// Dosyayı satır satır oku ve VNUM'ları al
while (getline(infile, line)) {
if (line.empty() || isWhitespaceOrSpecialCharsOnly(line)) {
continue; // Boş veya sadece özel karakterler içeren satırları atla
}
int vnum = getVnumFromLine(line);
linesWithVnum.push_back({ vnum, line });
}
infile.close();
// VNUM'lara göre sıralama yap
sort(linesWithVnum.begin(), linesWithVnum.end());
// Sıralanmış satırları dosyaya tekrar yaz
ofstream outfile(filename);
for (const auto& entry : linesWithVnum) {
outfile << entry.second << endl;
}
outfile.close();
}
// Dosyadan verileri oku ve VNUM'ları kaydet
void readVnums(const string& filename, map<int, int>& vnumCounter) {
ifstream infile(filename);
string line;
while (getline(infile, line)) {
stringstream ss(line);
int vnum;
ss >> vnum;
printf("Check Vnum: %d \n", vnum);
vnumCounter[vnum]++;
}
}
// Kullanılmayan VNUM aralıklarını tespit et
void findUnusedVnums(const map<int, int>& vnumCounter, vector<pair<int, int>>& unusedRanges, int minVnum, int maxVnum) {
int start = -1;
for (int i = minVnum; i <= maxVnum; i++) {
if (vnumCounter.find(i) == vnumCounter.end()) {
if (start == -1) {
start = i;
}
}
else {
if (start != -1) {
unusedRanges.push_back({ start, i - 1 });
start = -1;
}
}
}
if (start != -1) {
unusedRanges.push_back({ start, maxVnum });
}
}
// Kullanılmayan VNUM'ları dosyaya yaz
void writeUnusedVnums(const string& filename, const vector<pair<int, int>>& unusedRanges) {
ofstream outfile(filename);
for (const auto& range : unusedRanges) {
outfile << range.first << "~" << range.second << endl;
}
}
// Birden fazla kez kullanılan VNUM'ları dosyaya yaz
void writeDuplicateVnums(const string& filename, const map<int, int>& vnumCounter) {
ofstream outfile(filename);
for (const auto& entry : vnumCounter) {
if (entry.second > 1) {
outfile << entry.first << endl;
printf("Detectid Vnum: %d \n", entry.first);
}
}
}
int main() {
map<int, int> vnumCounter;
string inputFilename = "item_proto.txt";
// Veriyi oku
readVnums(inputFilename, vnumCounter);
// Kullanılmayan ve birden fazla kullanılan VNUM'ları analiz et
vector<pair<int, int>> unusedRanges;
int minVnum = 10, maxVnum = 9000000;
findUnusedVnums(vnumCounter, unusedRanges, minVnum, maxVnum);
// Kullanılmayan ve birden çok kullanılan VNUM'ları dosyalara yaz
writeUnusedVnums("kullanilmayan_vnumlar.txt", unusedRanges);
writeDuplicateVnums("birdencokkullanilan_vnumlar.txt", vnumCounter);
sortFileByVnum("item_list.txt");
sortFileByVnum("npclist.txt");
sortFileByVnum("mob_proto.txt");
sortFileByVnum("item_proto.txt");
sortFileByVnum("mob_names.txt");
sortFileByVnum("item_names.txt");
cout << "İşlem tamamlandı." << endl;
return 0;
}
[/CODE]
