Bir kaç değişiklik ile karaktere stun ve görünmezlik + ölümsüzlük eklendi yani hiç birşekilde hiç bir işlem yapılmaması için gerekli müdahaleler yapıldı + yanlış bilindiği taktirde 3 kere deneme yaptırıyor yanlış olursa 30 saniye 1 dakika 2 dakika ve 30 dakika olarak revize ettim karakter kilitleniyor tamamen sabit hardcode tamamen kalktı artık algoritma nereyi istiyorsa ona göre grid içerisinde hareket ediyor.
biliyorum lafım size değil zatenbu arada dediklerin doğru ben sabitleri kaldırıp
bu bilgiye dikkat ederek eklesinler bence root içerisindede sabitler mevcut
Bu sistem bu arada benim değil owsap'ın sistemi
sistemi kendime göre baştan yaptım kod mantıgı aşşagıda ki gibi olabilir bence kullanacaklar örnek alabilirC++:bool CHARACTER::ReplyCaptcha(const DWORD dwFileCrc, const LONG x, const LONG y) { if (dwFileCrc == m_dwCaptchaFileCrc) if (x == 220 && y == 88) // HARD CODED POSITION return true; return false; }
zeka küpü maşallah, doğru cevabın crc'sini paketin içinde clienta yolluyorsun
C++:const char* szFileName = vSendImgFiles[number(0, vSendImgFiles.size() - 1)].c_str(); m_dwCaptchaFileCrc = GetCRC32(szFileName, strlen(szFileName)); TPacketGCCaptcha Packet; Packet.bHeader = HEADER_GC_CAPTCHA; Packet.dwFileCrc = m_dwCaptchaFileCrc;
hileciler, gelen paketten crc'yi okuyun 2 saniye bekleyin aynısını x=220, y=88 ile geri gönderin.
tebrikler, doğrulamayı geçtiniz..
C++:void CCaptcha::SetSetting(const BYTE& bToken, const DWORD& dwValue)
primitive türü const referans parametre olarak yazmak, vay be..
böyle captcha sistemi olmaz.
Kod:
bool CHARACTER::CreateCaptchaChallenge(bool bAnnounce)
{
if (!GetDesc() || m_bCaptchaState != CAPTCHA_STATE_ACTIVE)
return false;
if (m_pkCaptchaTimeoutEvent)
event_cancel(&m_pkCaptchaTimeoutEvent);
std::array<BYTE, CAPTCHA_VISUAL_COUNT> aVisuals;
for (size_t i = 0; i < aVisuals.size(); ++i)
aVisuals[i] = static_cast<BYTE>(i);
for (size_t i = aVisuals.size() - 1; i > 0; --i)
std::swap(aVisuals[i], aVisuals[number(0, static_cast<int>(i))]);
std::array<BYTE, CAPTCHA_OPTION_COUNT> aOptions;
for (size_t i = 0; i < aOptions.size(); ++i)
aOptions[i] = aVisuals[i];
for (size_t i = aOptions.size() - 1; i > 0; --i)
std::swap(aOptions[i], aOptions[number(0, static_cast<int>(i))]);
DWORD dwChallenge = 0;
do
{
dwChallenge = CreateCaptchaRandomValue(GetPlayerID());
}
while (dwChallenge == m_dwCaptchaChallenge);
m_dwCaptchaChallenge = dwChallenge;
m_dwCaptchaCorrectToken = 0;
m_bCaptchaTargetCell = number(0, CAPTCHA_TARGET_CELL_COUNT - 1);
m_dwCaptchaOpenTime = get_dword_time();
TPacketGCCaptchaSystem packet = {};
packet.bHeader = HEADER_GC_CAPTCHA_SYSTEM;
packet.bSubHeader = CAPTCHA_GC_OPEN;
packet.bResult = CAPTCHA_RESULT_NONE;
packet.bAttempt = m_bCaptchaFailCount + 1;
packet.bTargetCell = m_bCaptchaTargetCell;
packet.dwChallenge = m_dwCaptchaChallenge;
packet.dwDuration = GetCaptchaDuration();
const BYTE bTarget = aVisuals[0];
packet.wTargetVisual = c_aCaptchaVisuals[bTarget].aTarget[number(0, CAPTCHA_ALIAS_COUNT - 1)];
std::array<DWORD, CAPTCHA_OPTION_COUNT> aTokens = {};
for (size_t i = 0; i < aOptions.size(); ++i)
{
DWORD dwToken = 0;
bool bUnique = false;
while (!bUnique)
{
dwToken = CreateCaptchaRandomValue(GetPlayerID() + static_cast<DWORD>(i + 1));
bUnique = std::find(aTokens.begin(), aTokens.end(), dwToken) == aTokens.end();
}
aTokens[i] = dwToken;
packet.aOptions[i].wVisual = c_aCaptchaVisuals[aOptions[i]].aOption[number(0, CAPTCHA_ALIAS_COUNT - 1)];
packet.aOptions[i].dwToken = dwToken;
if (aOptions[i] == bTarget)
m_dwCaptchaCorrectToken = dwToken;
}
GetDesc()->Packet(&packet, sizeof(packet));
captcha_event_info* info = AllocEventInfo<captcha_event_info>();
info->ch = this;
m_pkCaptchaTimeoutEvent = event_create(captcha_timeout_event, info, PASSES_PER_SEC(packet.dwDuration));
if (bAnnounce)
ChatPacket(CHAT_TYPE_INFO, "[LS;2398]");
return true;
}
Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)
Benzer konular
- Cevaplar
- 3
- Görüntüleme
- 22
- Cevaplar
- 3
- Görüntüleme
- 27
- Cevaplar
- 3
- Görüntüleme
- 24
- Cevaplar
- 1
- Görüntüleme
- 107
- Cevaplar
- 1
- Görüntüleme
- 274
