Seris 6 #1 Oluşturuldu: Kasım 12, 2017 Merhabalar, Knight online source işine 2 senedir ilgileniyorum bu süre olayını halen kavrayamadım yani mantığını çözemedim yani 2 saniye de 1 exp verme olayını yapmaya çalışıyorum öğrenmek amacıyla saçma sapan şeyler oluyor. UNIXTIME ile yapmaya çalışıyorum internetten bi ton video izliyorum yok abi olmuyor 2 saniye önemli de değil yani 10 sn de bir işlem yaptırmak istiyorum kod vermeyen abilerimiz mantığını söylerlerse veya detaylı bir makale verebilirse çok güzel olur şimdiden teşekkürler Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş
PENTAGRAM 926 #2 Kasım 12, 2017 tarihinde gönderildi AlıntıMerhabalar,Knight online source işine 2 senedir ilgileniyorum bu süre olayını halen kavrayamadım yani mantığını çözemedim yani 2 saniye de 1 exp verme olayını yapmaya çalışıyorum öğrenmek amacıyla saçma sapan şeyler oluyor.UNIXTIME ile yapmaya çalışıyorum internetten bi ton video izliyorum yok abi olmuyor 2 saniye önemli de değil yani 10 sn de bir işlem yaptırmak istiyorum kod vermeyen abilerimiz mantığını söylerlerse veya detaylı bir makale verebilirse çok güzel olur şimdiden teşekkürleruint64 m_lLastExperienceRewardTime = 0; // User.h içerisine tanımlanacakvoid CUser::Update(){/* ... */ // Mevcut kod bloğuif(UNIXTIME - m_lLastExperienceRewardTime >= 2){ExpChange(200000);m_lLastExperienceRewardTime = UNIXTIME;}}Her 2 saniyede bir 200k experience verir. Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş
Seris 6 #3 Konu Sahibi Kasım 12, 2017 tarihinde gönderildi Birazdan deneyeceğim fakat m_lLastExperienceTime = UNIXTIME;bu işlem sıfırlıyor mu süreyi?-- mesaja ek olarak --uint64 m_lLastExperienceRewardTime = 0; ve bu,verdiğiniz kod içerisinde yok neden tanımlanacak ? Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş
PENTAGRAM 926 #4 Kasım 12, 2017 tarihinde gönderildi AlıntıBirazdan deneyeceğim fakat m_lLastExperienceTime = UNIXTIME;bu işlem sıfırlıyor mu süreyi?-- mesaja ek olarak --uint64 m_lLastExperienceRewardTime = 0; ve bu,verdiğiniz kod içerisinde yok neden tanımlanacak ?(İlgileniyorsan) mantığı da şu;UNIXTIME dediğimiz şey, 01/01/1970 00:00 tarihinden bu yana geçen saniye sayısıdır. An itibarı ile değeri 1510480883'tur (tabi ben bu postu yazana kadar bu değer artacaktır.) Öncelikle, yapmak istediğin şey için, son işlem zamanını saklayacak bir değişken tanımladık. Bu değişkenin adı m_lLastExperienceRewardTime. CUser::Update fonksiyonu periyodik olmasa dahi paket geldikçe çağrılan bir fonksiyon. En kötü ihtimalle, 10 saniyede bir(WIZ_SPEEDHACK_CHECK), ortalama 1.5 saniyede bir (WIZ_MOVE, WIZ_ROTATE), en iyi ihtimalle paket trafiğine bağlı olarak tetiklenir, 0.1 saniyeye kadar düşebilir tetiklenme süresi. Fonksiyonun en alt kısmında, UNIXTIME değerinden, m_lLastExperienceRewardTime değerini çıkarttık. Aradaki fark, bize son experience ödülünden bu yana geçen saniye sayısını verir. Eğer sonuç 2 veya daha fazla ise, oyuncuya ödülünü verip, m_lLastExperienceRewardTime değerini, yani son işlem değerini UNIXTIME olarak güncelledik. Olay bundan ibaret. 1 Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş
OzkanOzdemir 1.560 Admin #5 Kasım 12, 2017 tarihinde gönderildi Alıntıkod vermeyen abilerimiz @ PENTAGRAM keşke kod vermeseydin abisi. @ Seris bu durumdan ciddi ciddi şikayetci misin? Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş
Seris 6 #6 Konu Sahibi Kasım 12, 2017 tarihinde gönderildi Hocam yok şikayet demeyelim yani yapılıyor sağdan soldan kodlara bakıp yapabiliyorum sıkıntı olan mantığı çözmem farklı bir projem var mantığını çözmeden yapmam çok zor-- mesaja ek olarak --Hocam anladım fakat halen RewardTime ile verdiğiniz kod arasındaki bağı anlamadım yani verdiğiniz kodu,RewardTime nasıl okuyor nerden görüyor,yani onu nasıl baz alarak işlem yapıyor? ve if(UNIXTIME - m_lLastExperienceTime >= 2){ burada vermiş olduğunuz işlem büyüktür işareti yerine == yaparsak daha mantıklı değil mi sekme olayları felan mı oluyor? ve UNIXTIME dan sonra gelen - nin olayı nedir ? sayarken 2-1-0 diye mi gidiyor yoksa 0-1-2 mi diye işlem yapıyor - olayı + koysak ne değişir? Hocam çok uğraştırdığımın farkındayım fakat baya uğraştım bazı noktaları pekiştirmem gerekiyor bir projem var ufakta olsa benim için büyük bir öneme sahip o yüzden detaya indim biraz :) Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş
PENTAGRAM 926 #7 Kasım 12, 2017 tarihinde gönderildi AlıntıHocam anladım fakat halen RewardTime ile verdiğiniz kod arasındaki bağı anlamadım yani verdiğiniz kodu,RewardTime nasıl okuyor nerden görüyor,yani onu nasıl baz alarak işlem yapıyor? ve if(UNIXTIME - m_lLastExperienceTime >= 2){ burada vermiş olduğunuz işlem büyüktür işareti yerine == yaparsak daha mantıklı değil mi sekme olayları felan mı oluyor? ve UNIXTIME dan sonra gelen - nin olayı nedir ? sayarken 2-1-0 diye mi gidiyor yoksa 0-1-2 mi diye işlem yapıyor - olayı + koysak ne değişir? Hocam çok uğraştırdığımın farkındayım fakat baya uğraştım bazı noktaları pekiştirmem gerekiyor bir projem var ufakta olsa benim için büyük bir öneme sahip o yüzden detaya indim biraz :) Birincisi, 'hocam' kelimesi kadar dünyada nefret ettiğim bir kelime daha yoktur, bana karşı hitap ederken kullanmazsan mutlu olurum. Diğer hususa gelecek olursak, 2. değişkenin de m_lLastExperienceRewardTime olması lazım. Düzelttim. 1 Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş
Seris 6 #8 Konu Sahibi Kasım 12, 2017 tarihinde gönderildi AlıntıBirincisi, 'hocam' kelimesi kadar dünyada nefret ettiğim bir kelime daha yoktur, bana karşı hitap ederken kullanmazsan mutlu olurum.Genel de bu ortamlarda hocam kelimesi kullanıldığı için dedim k.bakmayın nasıl hitap edeceğimi bilemedim :/AlıntıDiğer hususa gelecek olursak, 2. değişkenin de m_lLastExperienceRewardTime olması lazım. Düzelttim.Bende ona takıldım zaten çözmeye çalışıyorum mantığını yok :) En büyük sorun buydu diğerini ben deneme yanılma ile yaparım çok teşekkür ediyorum ilginiz için :) Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş
goto566 39 #9 Kasım 12, 2017 tarihinde gönderildi UNIXTIME = 1510480883 dersek,m_lLastExperienceTime başlangıçda 0 olacak.sen UNIXTIME -m_lLastExperienceTime derken1510480883 - 0 diyorsun. yani sonuc =1510480883 if(UNIXTIME - m_lLastExperienceTime >= 2)// ile sonuc2 den buyuk veya eşitmi diye kontrol ediyor. eğerki 2den büyük veya eşitse expini veriyor ve sonra m_lLastExperienceTime değerini 1510480883 yapıyor.her saniye UNIXTIME değeri ayrı bir thread'da otomatik olarak artmaktadır. 1 Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş
PENTAGRAM 926 #10 Kasım 12, 2017 tarihinde gönderildi AlıntıHocam yok şikayet demeyelim yani yapılıyor sağdan soldan kodlara bakıp yapabiliyorum sıkıntı olan mantığı çözmem farklı bir projem var mantığını çözmeden yapmam çok zor -- mesaja ek olarak -- Hocam anladım fakat halen RewardTime ile verdiğiniz kod arasındaki bağı anlamadım yani verdiğiniz kodu,RewardTime nasıl okuyor nerden görüyor,yani onu nasıl baz alarak işlem yapıyor? ve if(UNIXTIME - m_lLastExperienceTime >= 2){ burada vermiş olduğunuz işlem büyüktür işareti yerine == yaparsak daha mantıklı değil mi sekme olayları felan mı oluyor? ve UNIXTIME dan sonra gelen - nin olayı nedir ? sayarken 2-1-0 diye mi gidiyor yoksa 0-1-2 mi diye işlem yapıyor - olayı + koysak ne değişir? Hocam çok uğraştırdığımın farkındayım fakat baya uğraştım bazı noktaları pekiştirmem gerekiyor bir projem var ufakta olsa benim için büyük bir öneme sahip o yüzden detaya indim biraz :) Hayır, == koyman daha mantıklı değil, yazdığım açıklamayı okumamışsın. CUser::Update fonksiyonunun periyodik olarak çağrılmadığından bahsettim sana, bazen 10 saniyede bir, bazen 1.5 saniyede bir tetikleniyor. Sen, aradaki farkı sabit olarak 2 saniye kontrol edersen, fonksiyon 5 saniye aralıkla tetiklendiğinde ne olacak? 2 senedir kaynak kodları ile uğraştığından bahsediyorsun ama kendini tam anlamıyla vermediğini görüyorum. Programlama, yazarak değil akılda kurarak yapılır. Kod yazmak, işin kolay kısmı. Çözmek istediğin bir problemi öncelikle program olarak düşünmeyip, gerçek hayatta olsa nasıl yapardım diye düşünmen lazım. Problemi kafanda çözdüktan sonra kodunu yazması en kolay kısmı. m_lLastExperienceRewardTime'nin ilk değeri 0. CUser::Update fonksiyonunun ilk kez çağrılışını izleyelim. // UNIXTIME = 123456789 // m_lLastExperienceRewardTime = 0 if(UNIXTIME - m_lLastExperienceRewardTime >= 2){ // 123456789 - 0 = 123456789 >= 2 ? true. ExpChange(200000); m_lLastExperienceTime = UNIXTIME; // m_lLastExperienceTime = 123456789; } Aradan 1 saniye geçtikten sonra tekrar tetiklendiğini varsayalım. // UNIXTIME = 123456790 // m_lLastExperienceTime = 123456789 if(UNIXTIME - m_lLastExperienceRewardTime >= 2){ // 123456790 - 123456789 = 1 >= 2 ? false. ExpChange(200000); // çalışmayacak m_lLastExperienceTime = UNIXTIME; // çalışmayacak } Aradan 5 saniye geçtikten(başlangıç zamanına göre) sonra tekrar tetiklendiğini varsayalım. // UNIXTIME = 123456794 // m_lLastExperienceTime = 123456789 if(UNIXTIME - m_lLastExperienceRewardTime >= 2){ // 123456794 - 123456789 = 5 >= 2 ? true ExpChange(200000); m_lLastExperienceTime = UNIXTIME; // m_lLastExperienceTime = 123456794 } Umarım açıklayıcı olmuştur. Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş
Seris 6 #11 Konu Sahibi Kasım 12, 2017 tarihinde gönderildi AlıntıHayır, == koyman daha mantıklı değil, yazdığım açıklamayı okumamışsın. CUser::Update fonksiyonunun periyodik olarak çağrılmadığından bahsettim sana, bazen 10 saniyede bir, bazen 1.5 saniyede bir tetikleniyor. Sen, aradaki farkı sabit olarak 2 saniye kontrol edersen, fonksiyon 5 saniye aralıkla tetiklendiğinde ne olacak? 2 senedir kaynak kodları ile uğraştığından bahsediyorsun ama kendini tam anlamıyla vermediğini görüyorum. Programlama, yazarak değil akılda kurarak yapılır. Kod yazmak, işin kolay kısmı. Çözmek istediğin bir problemi öncelikle program olarak düşünmeyip, gerçek hayatta olsa nasıl yapardım diye düşünmen lazım. Problemi kafanda çözdüktan sonra kodunu yazması en kolay kısmı. m_lLastExperienceRewardTime'nin ilk değeri 0. CUser::Update fonksiyonunun ilk kez çağrılışını izleyelim. // UNIXTIME = 123456789 // m_lLastExperienceRewardTime = 0 if(UNIXTIME - m_lLastExperienceRewardTime >= 2){ // 123456789 - 0 = 123456789 >= 2 ? true. ExpChange(200000); m_lLastExperienceTime = UNIXTIME; // m_lLastExperienceTime = 123456789; } Aradan 1 saniye geçtikten sonra tekrar tetiklendiğini varsayalım. // UNIXTIME = 123456790 // m_lLastExperienceTime = 123456789 if(UNIXTIME - m_lLastExperienceRewardTime >= 2){ // 123456790 - 123456789 = 1 >= 2 ? false. ExpChange(200000); // çalışmayacak m_lLastExperienceTime = UNIXTIME; // çalışmayacak } Aradan 5 saniye geçtikten(başlangıç zamanına göre) sonra tekrar tetiklendiğini varsayalım. // UNIXTIME = 123456794 // m_lLastExperienceTime = 123456789 if(UNIXTIME - m_lLastExperienceRewardTime >= 2){ // 123456794 - 123456789 = 5 >= 2 ? true ExpChange(200000); m_lLastExperienceTime = UNIXTIME; // m_lLastExperienceTime = 123456794 } Umarım açıklayıcı olmuştur. Şimdi kavradım olayı aynen dediğiniz gibi *gerçek hayatta olsa nasıl yapardım* sözünü her kod yazdığımda hatırlayacağım çok beğendim sözü 2 senedir uğraşıyoruz fakat elimizden tutan yok öyle sağdan soldan gördüklerimizi deneme yanılma ile yapmaya çalışıyorum artık olayın temel mantığını anlamaya çalışarak yapacağım tekrardan ilginiz için teşekkürler goto566 Açıklamanız için size de teşekkür ederim 1 Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş
Terry 19 #12 Kasım 13, 2017 tarihinde gönderildi Alıntı uint64 m_lLastExperienceRewardTime = 0; // User.h içerisine tanımlanacak void CUser::Update(){ /* ... */ // Mevcut kod bloğu if(UNIXTIME - m_lLastExperienceRewardTime >= 2){ ExpChange(200000); m_lLastExperienceRewardTime = UNIXTIME; } } Her 2 saniyede bir 200k experience verir. Reward yazmayı unutmuşsun mustafa. Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş
PENTAGRAM 926 #13 Kasım 13, 2017 tarihinde gönderildi Alıntı Reward yazmayı unutmuşsun mustafa. Alıntı Hocam anladım fakat halen RewardTime ile verdiğiniz kod arasındaki bağı anlamadım yani verdiğiniz kodu,RewardTime nasıl okuyor nerden görüyor,yani onu nasıl baz alarak işlem yapıyor? ve if(UNIXTIME - m_lLastExperienceTime >= 2){ burada vermiş olduğunuz işlem büyüktür işareti yerine == yaparsak daha mantıklı değil mi sekme olayları felan mı oluyor? ve UNIXTIME dan sonra gelen - nin olayı nedir ? sayarken 2-1-0 diye mi gidiyor yoksa 0-1-2 mi diye işlem yapıyor - olayı + koysak ne değişir? Hocam çok uğraştırdığımın farkındayım fakat baya uğraştım bazı noktaları pekiştirmem gerekiyor bir projem var ufakta olsa benim için büyük bir öneme sahip o yüzden detaya indim biraz 🙂 Alıntı Birincisi, 'hocam' kelimesi kadar dünyada nefret ettiğim bir kelime daha yoktur, bana karşı hitap ederken kullanmazsan mutlu olurum. Diğer hususa gelecek olursak, 2. değişkenin de m_lLastExperienceRewardTime olması lazım. Düzelttim. Konuyu okumayı unutmuşsun resul. a 1 Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş