- Katılım
- 11 May 2023
- Konular
- 237
- Mesajlar
- 1,032
- Online süresi
- 1ay 23g
- Reaksiyon Skoru
- 678
- Altın Konu
- 1
- Başarım Puanı
- 176
- TM Yaşı
- 2 Yıl 11 Ay 15 Gün
- MmoLira
- 503
- DevLira
- 315
Metin2 EP, Valorant VP dahil tüm oyun ürünlerini en uygun fiyatlarla bulabilir, Item ve Karakterlerinizi hızlıca satabilirsiniz. HEMEN TIKLA!
sen insansın dimi yazıyorsun kod değilsinat bi tane beğenirsem yapayım![]()
- Katılım
- 2 Ara 2024
- Konular
- 186
- Mesajlar
- 1,946
- Online süresi
- 5ay 13g
- Reaksiyon Skoru
- 1,478
- Altın Konu
- 1
- Başarım Puanı
- 206
- TM Yaşı
- 1 Yıl 4 Ay 18 Gün
- MmoLira
- 12,094
- DevLira
- 36
insanımsen insansın dimi yazıyorsun kod değilsin
- Katılım
- 11 May 2023
- Konular
- 237
- Mesajlar
- 1,032
- Online süresi
- 1ay 23g
- Reaksiyon Skoru
- 678
- Altın Konu
- 1
- Başarım Puanı
- 176
- TM Yaşı
- 2 Yıl 11 Ay 15 Gün
- MmoLira
- 503
- DevLira
- 315
burdaki bazı kişiler seni beni kod olarak algılıyor kafaları öyle olmuş.insanım![]()
- Katılım
- 11 May 2023
- Konular
- 237
- Mesajlar
- 1,032
- Online süresi
- 1ay 23g
- Reaksiyon Skoru
- 678
- Altın Konu
- 1
- Başarım Puanı
- 176
- TM Yaşı
- 2 Yıl 11 Ay 15 Gün
- MmoLira
- 503
- DevLira
- 315
versiyon1 update
bazı eksik aniasmyonlar vardı düzeltildi
bazı eksik aniasmyonlar vardı düzeltildi
Kod:
#include <string>
#include <string_view>
#include <array>
// ====================================================================
// NİHAİ SIFIR TOLERANS (ULTIMATE STRICT HARDCODED) SİSTEMİ - C++20
// Tüm playersettingmodule.py verileri C++ çekirdeğine kilitlenmiştir.
// ====================================================================
CGraphicThing* CRaceData::RegisterMotionData(WORD wMotionMode, WORD wMotionIndex, const char * c_szFileName, BYTE byPercentage)
{
std::string incomingPath(c_szFileName);
size_t lastSlash = incomingPath.find_last_of("/\\");
std::string folderPath = (lastSlash != std::string::npos) ? incomingPath.substr(0, lastSlash + 1) : "";
std::string incomingName = (lastSlash != std::string::npos) ? incomingPath.substr(lastSlash + 1) : incomingPath;
// ====================================================================
// 1. NPC VE CANAVAR BYPASS (OYUNUN ÇÖKMESİNİ ENGELLER)
// ====================================================================
bool isPlayerCharacter = (folderPath.find("/pc/") != std::string::npos ||
folderPath.find("/pc2/") != std::string::npos ||
folderPath.find("/pc3/") != std::string::npos);
if (!isPlayerCharacter)
{
// Yaratıklar, NPC'ler ve Petler için hile kontrolü yapmadan direkt yükle
CRaceMotionData* pRaceMotionData = CRaceMotionData::New();
if (pRaceMotionData->LoadMotionData(c_szFileName)) {
pRaceMotionData->SetName(wMotionIndex);
return NEW_RegisterMotion(pRaceMotionData, wMotionMode, wMotionIndex, pRaceMotionData->GetMotionFileName(), byPercentage);
}
CRaceMotionData::Delete(pRaceMotionData);
return NULL;
}
// ====================================================================
// 2. OYUNCU KARAKTERİ TESPİTİ
// ====================================================================
bool isWarrior = (folderPath.find("warrior") != std::string::npos);
bool isAssassin = (folderPath.find("assassin") != std::string::npos);
bool isSura = (folderPath.find("sura") != std::string::npos);
bool isShaman = (folderPath.find("shaman") != std::string::npos);
bool isWolfman = (folderPath.find("wolfman") != std::string::npos);
std::string expectedName = "";
// ====================================================================
// 3. LONCA VE AT Becerileri (Özel ID'ler)
// ====================================================================
if (wMotionIndex >= CRaceMotionData::NAME_SKILL + 101 && wMotionIndex <= CRaceMotionData::NAME_SKILL + 106)
{
switch (wMotionIndex - CRaceMotionData::NAME_SKILL) {
case 101: expectedName = "guild_yongsinuipi.msa"; break;
case 102: expectedName = "guild_yongsinuichukbok.msa"; break;
case 103: expectedName = "guild_seonghwigap.msa"; break;
case 104: expectedName = "guild_gasokhwa.msa"; break;
case 105: expectedName = "guild_yongsinuibunno.msa"; break;
case 106: expectedName = "guild_jumunsul.msa"; break;
}
}
else if (wMotionIndex >= CRaceMotionData::NAME_SKILL + 121 && wMotionIndex <= CRaceMotionData::NAME_SKILL + 123)
{
switch (wMotionIndex - CRaceMotionData::NAME_SKILL) {
case 121: expectedName = "skill_wildattack.msa"; break;
case 122: expectedName = "skill_charge.msa"; break;
case 123: expectedName = "skill_splash.msa"; break;
}
}
// ====================================================================
// 4. KARAKTER YETENEKLERİ (MATEMATİKSEL İNŞA)
// ====================================================================
else if (wMotionIndex >= CRaceMotionData::NAME_SKILL && wMotionIndex < CRaceMotionData::NAME_SKILL + 100)
{
constexpr DWORD SKILL_GRADEGAP = 25;
DWORD skillOffset = wMotionIndex - CRaceMotionData::NAME_SKILL;
DWORD grade = skillOffset / SKILL_GRADEGAP; // 0=Normal, 1=M, 2=G, 3=P
DWORD baseSkill = skillOffset % SKILL_GRADEGAP;
std::string_view baseName = "";
constexpr std::array<std::string_view, 22> wSkills = {"", "samyeon", "palbang", "jeongwi", "geomgyeong", "tanhwan", "gihyeol", "", "", "", "", "", "", "", "", "", "gigongcham", "gyeoksan", "daejin", "cheongeun", "geompung", "noegeom"};
constexpr std::array<std::string_view, 22> aSkills = {"", "amseung", "gungsin", "charyun", "eunhyeong", "sangong", "seomjeon", "", "", "", "", "", "", "", "", "", "yeonsa", "gwangyeok", "hwajo", "gyeonggong", "dokgigung", "seomgwang"};
constexpr std::array<std::string_view, 22> suSkills = {"", "swaeryeong", "yonggwon", "gwigeom", "gongpo", "jumagap", "pabeop", "", "", "", "", "", "", "", "", "", "maryeong", "hwayeom", "muyeong", "heuksin", "tusok", "mahwan"};
constexpr std::array<std::string_view, 22> shSkills = {"", "bipabu", "yongpa", "paeryong", "hosin_target", "boho_target", "gicheon_target", "", "", "", "", "", "", "", "", "", "noejeon", "byeorak", "pokroe", "jeongeop_target", "kwaesok_target", "jeungryeok_target"};
constexpr std::array<std::string_view, 7> wfSkills = {"", "split_slash", "wind_death", "reef_attack", "wreckage", "red_possession", "blue_possession"};
if (isWarrior && baseSkill < wSkills.size()) baseName = wSkills[baseSkill];
else if (isAssassin && baseSkill < aSkills.size()) baseName = aSkills[baseSkill];
else if (isSura && baseSkill < suSkills.size()) baseName = suSkills[baseSkill];
else if (isShaman && baseSkill < shSkills.size()) baseName = shSkills[baseSkill];
else if (isWolfman && baseSkill < wfSkills.size()) baseName = wfSkills[baseSkill];
if (!baseName.empty()) {
expectedName = std::string(baseName);
if (grade > 0) expectedName += "_" + std::to_string(grade + (isWolfman ? 0 : 1)); // Wolfman takıları 1'den başlar
expectedName += ".msa";
}
}
// ====================================================================
// 5. GENEL HAREKETLER VE ANİMASYONLAR
// ====================================================================
else
{
switch (wMotionIndex)
{
// Orijinal Varyasyon İzinleri (Hilecilerin False-Positive almasını önler)
case CRaceMotionData::NAME_WAIT:
if (isWolfman) expectedName = (incomingName == "wait1.msa" || incomingName == "wait2.msa") ? incomingName : "wait.msa";
else expectedName = (incomingName == "wait_1.msa" || incomingName == "wait_2.msa") ? incomingName : "wait.msa";
break;
case CRaceMotionData::NAME_DAMAGE:
if (isWolfman) expectedName = (incomingName == "front_damage1.msa") ? "front_damage1.msa" : "front_damage.msa";
else expectedName = (incomingName == "damage_1.msa") ? "damage_1.msa" : "damage.msa";
break;
case CRaceMotionData::NAME_DAMAGE_BACK:
if (isWolfman) expectedName = (incomingName == "back_damage1.msa") ? "back_damage1.msa" : "back_damage.msa";
else expectedName = (incomingName == "damage_3.msa") ? "damage_3.msa" : "damage_2.msa";
break;
case CRaceMotionData::NAME_COMBO_ATTACK_1:
if (isWarrior) expectedName = (incomingName == "attack_1.msa") ? "attack_1.msa" : "attack.msa";
else if (isWolfman) expectedName = (incomingName == "attack2.msa") ? "attack2.msa" : "attack1.msa";
else if (isShaman || isSura || isAssassin) expectedName = (incomingName == "attack_1.msa") ? "attack_1.msa" : "attack.msa"; // Eğer düz vuruşsa attack.msa, silahlıysa combo_01 olur
if (folderPath.find("general") == std::string::npos && !isWolfman) expectedName = "combo_01.msa"; // Silah takılıysa combo dosyası
break;
// Sabit Hareketler
case CRaceMotionData::NAME_WALK: expectedName = "walk.msa"; break;
case CRaceMotionData::NAME_RUN: expectedName = "run.msa"; break;
case CRaceMotionData::NAME_CHANGE_WEAPON: expectedName = "change_weapon.msa"; break;
case CRaceMotionData::NAME_DEAD: expectedName = "dead.msa"; break;
case CRaceMotionData::NAME_DEAD_BACK: expectedName = "dead_back.msa"; break;
case CRaceMotionData::NAME_DIG: expectedName = "dig.msa"; break;
case CRaceMotionData::NAME_SPAWN: expectedName = "spawn.msa"; break;
case CRaceMotionData::NAME_STOP: expectedName = "stop.msa"; break;
// Yere Düşme / Uçma (Wolfman Uyumlu)
case CRaceMotionData::NAME_DAMAGE_FLYING:
expectedName = isWolfman ? "front_damage_flying.msa" : "damage_flying.msa"; break;
case CRaceMotionData::NAME_STAND_UP:
expectedName = isWolfman ? "front_falling_standup.msa" : "falling_stand.msa"; break;
case CRaceMotionData::NAME_DAMAGE_FLYING_BACK:
expectedName = "back_damage_flying.msa"; break;
case CRaceMotionData::NAME_STAND_UP_BACK:
expectedName = isWolfman ? "back_falling_standup.msa" : "back_falling_stand.msa"; break;
// Kombolar
case CRaceMotionData::NAME_COMBO_ATTACK_2: expectedName = "combo_02.msa"; break;
case CRaceMotionData::NAME_COMBO_ATTACK_3: expectedName = "combo_03.msa"; break;
case CRaceMotionData::NAME_COMBO_ATTACK_4: expectedName = "combo_04.msa"; break;
case CRaceMotionData::NAME_COMBO_ATTACK_5: expectedName = "combo_05.msa"; break;
case CRaceMotionData::NAME_COMBO_ATTACK_6: expectedName = "combo_06.msa"; break;
case CRaceMotionData::NAME_COMBO_ATTACK_7: expectedName = "combo_07.msa"; break;
case CRaceMotionData::NAME_COMBO_ATTACK_8: expectedName = "combo_08.msa"; break;
// Intro
case CRaceMotionData::NAME_INTRO_WAIT: expectedName = "wait.msa"; break;
case CRaceMotionData::NAME_INTRO_SELECTED: expectedName = "selected.msa"; break;
case CRaceMotionData::NAME_INTRO_NOT_SELECTED: expectedName = "not_selected.msa"; break;
// Balık Tutma
case CRaceMotionData::NAME_FISHING_THROW: expectedName = "throw.msa"; break;
case CRaceMotionData::NAME_FISHING_WAIT: expectedName = "fishing_wait.msa"; break;
case CRaceMotionData::NAME_FISHING_STOP: expectedName = "fishing_cancel.msa"; break;
case CRaceMotionData::NAME_FISHING_REACT: expectedName = "fishing_react.msa"; break;
case CRaceMotionData::NAME_FISHING_CATCH: expectedName = "fishing_catch.msa"; break;
case CRaceMotionData::NAME_FISHING_FAIL: expectedName = "fishing_fail.msa"; break;
// Duygular (Emotions)
case CRaceMotionData::NAME_CLAP: expectedName = "clap.msa"; break;
case CRaceMotionData::NAME_CONGRATULATION: expectedName = "congratulation.msa"; break;
case CRaceMotionData::NAME_FORGIVE: expectedName = "forgive.msa"; break;
case CRaceMotionData::NAME_ANGRY: expectedName = "angry.msa"; break;
case CRaceMotionData::NAME_ATTRACTIVE: expectedName = "attractive.msa"; break;
case CRaceMotionData::NAME_SAD: expectedName = "sad.msa"; break;
case CRaceMotionData::NAME_SHY: expectedName = "shy.msa"; break;
case CRaceMotionData::NAME_CHEERUP: expectedName = "cheerup.msa"; break;
case CRaceMotionData::NAME_BANTER: expectedName = "banter.msa"; break;
case CRaceMotionData::NAME_JOY: expectedName = "joy.msa"; break;
case CRaceMotionData::NAME_CHEERS_1: expectedName = "cheers_1.msa"; break;
case CRaceMotionData::NAME_CHEERS_2: expectedName = "cheers_2.msa"; break;
case CRaceMotionData::NAME_DANCE_1: expectedName = "dance_1.msa"; break;
case CRaceMotionData::NAME_DANCE_2: expectedName = "dance_2.msa"; break;
case CRaceMotionData::NAME_DANCE_3: expectedName = "dance_3.msa"; break;
case CRaceMotionData::NAME_DANCE_4: expectedName = "dance_4.msa"; break;
case CRaceMotionData::NAME_DANCE_5: expectedName = "dance_5.msa"; break;
case CRaceMotionData::NAME_DANCE_6: expectedName = "dance_6.msa"; break;
// Etkileşimler (Öpücük, Tokat)
case CRaceMotionData::NAME_KISS_WITH_WARRIOR: expectedName = "kiss_with_warrior.msa"; break;
case CRaceMotionData::NAME_KISS_WITH_ASSASSIN: expectedName = "kiss_with_assassin.msa"; break;
case CRaceMotionData::NAME_KISS_WITH_SURA: expectedName = "kiss_with_sura.msa"; break;
case CRaceMotionData::NAME_KISS_WITH_SHAMAN: expectedName = "kiss_with_shaman.msa"; break;
case CRaceMotionData::NAME_FRENCH_KISS_WITH_WARRIOR: expectedName = "french_kiss_with_warrior.msa"; break;
case CRaceMotionData::NAME_FRENCH_KISS_WITH_ASSASSIN: expectedName = "french_kiss_with_assassin.msa"; break;
case CRaceMotionData::NAME_FRENCH_KISS_WITH_SURA: expectedName = "french_kiss_with_sura.msa"; break;
case CRaceMotionData::NAME_FRENCH_KISS_WITH_SHAMAN: expectedName = "french_kiss_with_shaman.msa"; break;
case CRaceMotionData::NAME_SLAP_HIT_WITH_WARRIOR: expectedName = "slap_hit_with_warrior.msa"; break;
case CRaceMotionData::NAME_SLAP_HIT_WITH_ASSASSIN: expectedName = "slap_hit_with_assassin.msa"; break;
case CRaceMotionData::NAME_SLAP_HIT_WITH_SURA: expectedName = "slap_hit_with_sura.msa"; break;
case CRaceMotionData::NAME_SLAP_HIT_WITH_SHAMAN: expectedName = "slap_hit_with_shaman.msa"; break;
case CRaceMotionData::NAME_SLAP_HURT_WITH_WARRIOR: expectedName = "slap_hurt_with_warrior.msa"; break;
case CRaceMotionData::NAME_SLAP_HURT_WITH_ASSASSIN: expectedName = "slap_hurt_with_assassin.msa"; break;
case CRaceMotionData::NAME_SLAP_HURT_WITH_SURA: expectedName = "slap_hurt_with_sura.msa"; break;
case CRaceMotionData::NAME_SLAP_HURT_WITH_SHAMAN: expectedName = "slap_hurt_with_shaman.msa"; break;
#ifdef ENABLE_WOLFMAN_CHARACTER
case CRaceMotionData::NAME_KISS_WITH_WOLFMAN: expectedName = "kiss_with_wolfman.msa"; break;
case CRaceMotionData::NAME_FRENCH_KISS_WITH_WOLFMAN: expectedName = "french_kiss_with_wolfman.msa"; break;
case CRaceMotionData::NAME_SLAP_HIT_WITH_WOLFMAN: expectedName = "slap_hit_with_wolfman.msa"; break;
case CRaceMotionData::NAME_SLAP_HURT_WITH_WOLFMAN: expectedName = "slap_hurt_with_wolfman.msa"; break;
#endif
}
}
// ====================================================================
// 6. SONUÇ: ZORLA YÜKLEME (FORCE LOAD)
// ====================================================================
std::string targetPath = incomingPath;
// Eğer motorumuz oyuncu için sabit bir dosya adı ürettiyse (Boş değilse):
if (!expectedName.empty())
{
targetPath = folderPath + expectedName;
// Log Kirliliğini Önleme: Sadece gelen isim sabitimizden farklıysa (yani hileliyse) hata basar.
if (incomingName != expectedName) {
TraceError("CRaceData::RegisterMotionData - HILE ENGELLENDI: %s -> C++ tarafindan %s dayatildi.", incomingName.c_str(), expectedName.c_str());
}
}
CRaceMotionData * pRaceMotionData = CRaceMotionData::New();
// C++ motorunun kendi dayattığı %100 Orijinal dosyayı yükle
if (!pRaceMotionData->LoadMotionData(targetPath.c_str()))
{
CRaceMotionData::Delete(pRaceMotionData);
return NULL;
}
pRaceMotionData->SetName(wMotionIndex);
return NEW_RegisterMotion(pRaceMotionData, wMotionMode, wMotionIndex, pRaceMotionData->GetMotionFileName(), byPercentage);
}
Şu an konuyu görüntüleyenler (Toplam : 1, Üye: 0, Misafir: 1)
Benzer konular
- Cevaplar
- 3
- Görüntüleme
- 78
- Cevaplar
- 3
- Görüntüleme
- 224
- Cevaplar
- 6
- Görüntüleme
- 1K
- Cevaplar
- 7
- Görüntüleme
- 542




