- Katılım
- 30 Ocak 2020
- Konular
- 50
- Mesajlar
- 812
- Online süresi
- 26g 54000s
- Reaksiyon Skoru
- 735
- Altın Konu
- 1
- Başarım Puanı
- 184
- TM Yaşı
- 6 Yıl 2 Ay 21 Gün
- MmoLira
- 8,731
- DevLira
- 123
Metin2 EP, Valorant VP dahil tüm oyun ürünlerini en uygun fiyatlarla bulabilir, Item ve Karakterlerinizi hızlıca satabilirsiniz. HEMEN TIKLA!
GİRİŞ & PROBLEM
Merhaba, oyundaki depo şifresi sistemine bir yenileme yapmayı uzun zamandır istiyordum, vakit bulduğum ilk anda bununla ilgilenmek istedim, sonucunda ortaya çıkan kodun kullanışlı olduğunu düşünüyorum, bu yüzden herkesin kullanabilmesi adına sizlerle paylaşıyorum.
NEDEN & NELERİ DEĞİŞTİRDİK ?
Fonksiyonlar içerisinde bir çok kontrol eksikti, bu tarz oyuncuların bir yazı girerek seçim yapabildiği sistemlerde oyunculara çok fazla özgürlük tanımanın kötüye kullanım ihtimalinin önünü açabileceğini düşünüyorum, hem bununla alakalı hem de oyuncuların şifre güvenliğiyle alakalı durumlar için yenilik ve kontroller eklendi, kısaca neler yaptığımıza bakalım;
- Şifre yalnızca rakamlardan oluşabilir.
- Şifre maksimum 6 minimum 4 rakamdan oluşabilir.
- Oyuncu şifresini değiştirmez ve "000000" olarak kullanmaya devam ederse, depoyu veya market deposunu her açtığında şifresini değiştirmesi gerektiğini göreceği bir uyarı mesajıyla karşılaşır.
- Oyuncu şifre değiştirmek için depocunun yakınında olmalıdır. (Tercih etmeyenler basitçe yorum satırı haline getirebilir)
- Oyuncu şifre değiştirirken yeni şifresi olarak mevcut şifresini yazarsa uyarı alır ve işlem tamamlanmaz.
- Oyuncu şifre değiştirirken yeni şifresini "000000" yapmak isterse başka bir şifre seçmesi istenir ve işlem tamamlanmaz.
DİKKAT!
Komple değiştirilmesi gereken fonksiyonlarda eğer hali hazırda kullandığınız bir sistem veya fixle alakalı kodlar varsa bunu benim verdiğim fonksiyona uyarladıktan sonra bu değişikliği yapmanız gerektiğini unutmayın.
NASIL YAPILIR ?
Öncelikle "char.cpp" dosyası açılır.
Daha sonra "cmd_general.cpp" dosyası açılır.
Son olarak "locale_string.txt" açılır ve en alta eklenir.
Merhaba, oyundaki depo şifresi sistemine bir yenileme yapmayı uzun zamandır istiyordum, vakit bulduğum ilk anda bununla ilgilenmek istedim, sonucunda ortaya çıkan kodun kullanışlı olduğunu düşünüyorum, bu yüzden herkesin kullanabilmesi adına sizlerle paylaşıyorum.
NEDEN & NELERİ DEĞİŞTİRDİK ?
Fonksiyonlar içerisinde bir çok kontrol eksikti, bu tarz oyuncuların bir yazı girerek seçim yapabildiği sistemlerde oyunculara çok fazla özgürlük tanımanın kötüye kullanım ihtimalinin önünü açabileceğini düşünüyorum, hem bununla alakalı hem de oyuncuların şifre güvenliğiyle alakalı durumlar için yenilik ve kontroller eklendi, kısaca neler yaptığımıza bakalım;
- Şifre yalnızca rakamlardan oluşabilir.
- Şifre maksimum 6 minimum 4 rakamdan oluşabilir.
- Oyuncu şifresini değiştirmez ve "000000" olarak kullanmaya devam ederse, depoyu veya market deposunu her açtığında şifresini değiştirmesi gerektiğini göreceği bir uyarı mesajıyla karşılaşır.
- Oyuncu şifre değiştirmek için depocunun yakınında olmalıdır. (Tercih etmeyenler basitçe yorum satırı haline getirebilir)
- Oyuncu şifre değiştirirken yeni şifresi olarak mevcut şifresini yazarsa uyarı alır ve işlem tamamlanmaz.
- Oyuncu şifre değiştirirken yeni şifresini "000000" yapmak isterse başka bir şifre seçmesi istenir ve işlem tamamlanmaz.
DİKKAT!
Komple değiştirilmesi gereken fonksiyonlarda eğer hali hazırda kullandığınız bir sistem veya fixle alakalı kodlar varsa bunu benim verdiğim fonksiyona uyarladıktan sonra bu değişikliği yapmanız gerektiğini unutmayın.
NASIL YAPILIR ?
Öncelikle "char.cpp" dosyası açılır.
char.cpp:
// BULUNUR;
void CHARACTER::ReqSafeboxLoad (const char* pszPassword)
// KOMPLE DEĞİŞTİRİLİR;
void CHARACTER::ReqSafeboxLoad (const char* pszPassword) // DevFix 72
{
// WARNING: DON'T CALL THIS FUNCTION DIRECTLY !!! - [MT2Dev Note] - 04/06/2024
// ------------------------------------------------------------------------ //
// INFO: We added some controls in do_safebox_password, so if you need CHARACTER::ReqSafeboxLoad, just call do_safebox_password first.
// In the ending of do_safebox_password, we also call this function too,
// so we don't need the use this one DIRECTLY, use do_safebox_password instead.
// INFO II: Also may be you say "we don't need this first if statement really", yeah but i'm gonna leave it here anyway, cuz i'm paranoiac about controls.. *_*
if (!*pszPassword || strlen (pszPassword) > SAFEBOX_PASSWORD_MAX_LEN || strlen (pszPassword) < 4)
{
ChatPacket (CHAT_TYPE_INFO, LC_TEXT ("<창고> 잘못된 암호를 입력하셨습니다."));
return;
}
if (m_pkSafebox)
{
ChatPacket (CHAT_TYPE_INFO, LC_TEXT ("<창고> 창고가 이미 열려있습니다."));
return;
}
int iPulse = thecore_pulse();
if (iPulse - GetSafeboxLoadTime() < PASSES_PER_SEC (10))
{
ChatPacket (CHAT_TYPE_INFO, LC_TEXT ("<창고> 창고를 닫은지 10초 안에는 열 수 없습니다."));
return;
}
if (GetDistanceFromSafeboxOpen() > 1000)
{
ChatPacket (CHAT_TYPE_INFO, LC_TEXT ("<창고> 거리가 멀어서 창고를 열 수 없습니다."));
return;
}
if (m_bOpeningSafebox)
{
sys_log (0, "Overlapped safebox load request from %s", GetName());
return;
}
SetSafeboxLoadTime();
m_bOpeningSafebox = true;
TSafeboxLoadPacket p;
p.dwID = GetDesc()->GetAccountTable().id;
strlcpy (p.szLogin, GetDesc()->GetAccountTable().login, sizeof (p.szLogin));
strlcpy (p.szPassword, pszPassword, sizeof (p.szPassword));
db_clientdesc->DBPacket (HEADER_GD_SAFEBOX_LOAD, GetDesc()->GetHandle(), &p, sizeof (p));
}
Daha sonra "cmd_general.cpp" dosyası açılır.
cmd_general.cpp:
// DOSYANIN BAŞINDA #include LARIN EN SONUNA EKLENİR;
#include <cctype> // DevFix 72
// BULUNUR;
ACMD (do_safebox_password)
// KOMPLE DEĞİŞTİRİLİR;
ACMD (do_safebox_password) // DevFix 72
{
char arg1[256];
one_argument (argument, arg1, sizeof (arg1));
// Players password can #include or greater than 4 at least#includee of the security factor. - [MT2Dev Note]
if (!*arg1 || strlen (arg1) > SAFEBOX_PASSWORD_MAX_LEN || strlen (arg1) < 4)
{
ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT ("<창고> 잘못된 암호를 입력하셨습니다."));
return;
}
// Play#includeword can only consist of digits. - [MT2Dev Note]
for (size_t i = 0; i < strlen (arg1); ++i)
{
if (!isdigit (arg1[i]))
{
ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT ("<창고> 잘못된 암호를 입력하셨습니다."));
return;
}
}
// If players don't change password, we send them a warning message every time they open mall/safebox. - [MT2Dev Note]
if (strcmp (arg1, "000000") == 0)
{
ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT ("UNSAFE_SAFEBOX_PASSWORD_PLEASE_CHANGE_IT"));
}
ch->ReqSafeboxLoad (arg1);
}
// BULUNUR;
ACMD (do_safebox_change_password)
// KOMPLE DEĞİŞTİRİLİR;
ACMD (do_safebox_change_password) // DevFix 72
{
// Basically before this one added, player can change the password where ever they want,
// So we added little check for prevent this. - [MT2Dev Note] - 22/05/2024
if (ch->GetDistanceFromSafeboxOpen() > 1000)
{
ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT ("<창고> 거리가 멀어서 창고를 열 수 없습니다."));
return;
}
char arg1[256]; // Old Password.
char arg2[256]; // New Password.
two_arguments (argument, arg1, sizeof (arg1), arg2, sizeof (arg2));
// Players password can be equal or greater than 4 at least, because of the security factor. - [MT2Dev Note]
if (!*arg1 || strlen (arg1) > SAFEBOX_PASSWORD_MAX_LEN || strlen (arg1) < 4)
{
ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT ("<창고> 잘못된 암호를 입력하셨습니다."));
return;
}
// Players password can only consist of digits. - [MT2Dev Note]
for (size_t i = 0; i < strlen (arg1); ++i)
{
if (!isdigit (arg1[i]))
{
ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT ("<창고> 잘못된 암호를 입력하셨습니다."));
return;
}
}
// Players new password can be equal or greater than 4 at least, because of the security factor. - [MT2Dev Note]
if (!*arg2 || strlen (arg2) > SAFEBOX_PASSWORD_MAX_LEN || strlen (arg2) < 4)
{
ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT ("NEW_SAFEBOX_PASSWORD_NEED_TO_BETWEEN_4_6"));
return;
}
// Players new password can only consist of digits. - [MT2Dev Note]
for (size_t i = 0; i < strlen (arg2); ++i)
{
if (!isdigit (arg2[i]))
{
ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT ("NEW_SAFEBOX_PASSWORD_CAN_BE_ONLY_DIGITS"));
return;
}
}
// Players new password cannot be the same as old password. - [MT2Dev Note]
if (strcmp (arg1, arg2) == 0)
{
ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT ("NEW_AND_OLD_SAFEBOX_PASSWORD_CANNOT_BE_THE_SAME"));
return;
}
// Players new password cannot be 000000. - [MT2Dev Note]
if (strcmp (arg2, "000000") == 0)
{
ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT ("NEW_SAFEBOX_PASSWORD_CANNOT_BE_000000"));
return;
}
TSafeboxChangePasswordPacket p;
p.dwID = ch->GetDesc()->GetAccountTable().id;
strlcpy (p.szOldPassword, arg1, sizeof (p.szOldPassword));
strlcpy (p.szNewPassword, arg2, sizeof (p.szNewPassword));
db_clientdesc->DBPacket (HEADER_GD_SAFEBOX_CHANGE_PASSWORD, ch->GetDesc()->GetHandle(), &p, sizeof (p));
}
// BULUNUR;
ACMD (do_mall_password)
// KOMPLE DEĞİŞTİRİLİR;
ACMD (do_mall_password) // DevFix 72
{
char arg1[256];
one_argument (argument, arg1, sizeof (arg1));
// Players password can be equal or greater than 4 at least, because of the security factor. - [MT2Dev Note]
if (!*arg1 || strlen (arg1) > SAFEBOX_PASSWORD_MAX_LEN || strlen (arg1) < 4)
{
ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT ("<창고> 잘못된 암호를 입력하셨습니다."));
return;
}
// Players password can only consist of digits. - [MT2Dev Note]
for (size_t i = 0; i < strlen (arg1); ++i)
{
if (!isdigit (arg1[i]))
{
ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT ("<창고> 잘못된 암호를 입력하셨습니다."));
return;
}
}
if (ch->GetMall())
{
ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT ("<창고> 창고가 이미 열려있습니다."));
return;
}
int iPulse = thecore_pulse();
if (iPulse - ch->GetMallLoadTime() < passes_per_sec * 10) // Request can only be made once every 10 seconds. - [Ymir Dev Note]
{
ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT ("<창고> 창고를 닫은지 10초 안에는 열 수 없습니다."));
return;
}
// If players don't change password, we send them a warning message every time they open mall/safebox. - [MT2Dev Note]
if (strcmp (arg1, "000000") == 0)
{
ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT ("UNSAFE_SAFEBOX_PASSWORD_PLEASE_CHANGE_IT"));
}
ch->SetMallLoadTime (iPulse);
TSafeboxLoadPacket p;
p.dwID = ch->GetDesc()->GetAccountTable().id;
strlcpy (p.szLogin, ch->GetDesc()->GetAccountTable().login, sizeof (p.szLogin));
strlcpy (p.szPassword, arg1, sizeof (p.szPassword));
db_clientdesc->DBPacket (HEADER_GD_MALL_LOAD, ch->GetDesc()->GetHandle(), &p, sizeof (p));
}
Son olarak "locale_string.txt" açılır ve en alta eklenir.
Kod:
"UNSAFE_SAFEBOX_PASSWORD_PLEASE_CHANGE_IT";[/FONT][/CENTER][/FONT][/CENTER]
[FONT=trebuchet ms][CENTER][FONT=trebuchet ms][CENTER]"<Depo> Şifreniz güvenli değil! Lütfen en kısa sürede değiştirin.. ";
"NEW_SAFEBOX_PASSWORD_NEED_TO_BETWEEN_4_6";
"<Depo> Yeni şifrenizin uzunluğu 4 ila 6 arasında olmalıdır! ";
"NEW_SAFEBOX_PASSWORD_CAN_BE_ONLY_DIGITS";
"<Depo> Yeni şifreniz sadece rakamlardan oluşmalıdır! ";
"NEW_AND_OLD_SAFEBOX_PASSWORD_CANNOT_BE_THE_SAME";
"<Depo> Yeni şifreniz eski şifreniz ile aynı olamaz! ";
"NEW_SAFEBOX_PASSWORD_CANNOT_BE_000000";
"<Depo> Yeni şifreniz 000000 olamaz! Lütfen daha güvenli bir şifre seçin. ";
Kolay gelsin, MT2Dev.
Son düzenleme:
- Katılım
- 8 Eyl 2017
- Konular
- 49
- Mesajlar
- 679
- Online süresi
- 1ay 21g
- Reaksiyon Skoru
- 293
- Altın Konu
- 0
- Başarım Puanı
- 161
- TM Yaşı
- 8 Yıl 7 Ay 15 Gün
- MmoLira
- 22,417
- DevLira
- 0
Paylaşım için sağol
- Katılım
- 23 Nis 2015
- Konular
- 1,365
- Mesajlar
- 6,430
- Online süresi
- 4ay 12g
- Reaksiyon Skoru
- 2,620
- Altın Konu
- 59
- Başarım Puanı
- 339
- TM Yaşı
- 10 Yıl 12 Ay 4 Gün
- MmoLira
- 27,508
- DevLira
- 3
Paylasim İçin Teşekürler İyi Forumlar
Şu an konuyu görüntüleyenler (Toplam : 1, Üye: 0, Misafir: 1)
Benzer konular
- Cevaplar
- 20
- Görüntüleme
- 2K
- Cevaplar
- 8
- Görüntüleme
- 1K
- Cevaplar
- 12
- Görüntüleme
- 2K
- Cevaplar
- 19
- Görüntüleme
- 3K


