Metin & Boss Hasar Limit Sistemi

mbutun77

Üye
Üye
Mesaj
76
Çözümler
6
Beğeni
93
Puan
729
Ticaret Puanı
0
Hiç bir metine vururken "acaba bu metini kırabiliyor muyum?" diye düşündün mü? İşte bu sistem tam da bunu çözüyor.
Ne yapıyor? Sunucundaki her metin taşı için ayrı ayrı "en az şu kadar vur, en fazla bu kadar vur" sınırı koyabiliyorsun. Oyuncu da metine sağ tıkladığında hedef panelinde direkt olarak Min Hasar ve Max Hasar değerlerini görüyor. Yani oyuncu kendi karakterinin o metine uygun olup olmadığını anında anlıyor.

Neden iyi?
Düşük seviye oyuncular çok güçlü metin taşlarına girerek zaman kaybetmiyor.
Sunucu sahibi olarak hangi metine ne kadar hasar yapılabileceğini tamamen kontrol ediyorsun.
Veriler SQL tablosundan yönetiliyor, sunucuyu kapatmadan güncelleyebiliyorsun.

Performans?
Veriler sunucu açılışında bir kez yükleniyor ve bellekte tutuluyor. Oyuncu her metine vurduğunda SQL'e gidip sorgu atmıyor. Yani sunucuna hiçbir yük bindirmiyor.




Ekleyemeyen arkadaşlar konu altında belirtirse yardımcı olabilirim.

Screenshot_1.webp
Screenshot_7.webp
Screenshot_8.webp
Screenshot_9.webp
Screenshot_10.webp


Burayı görüntülemek için üye girişi yapmalı veya kayıt olmalısınız.


 
En son bir moderatör tarafından düzenlenmiş:
Eline sağlık hocam bende 2 saatte falan yazmıştım bu sistemi birine sinirlenip :D
 
A fantastic system and certainly a great job. But don't you think adding metins one by one manually is tedious?

If, for example, I intend to open a farming server at level 1-105 or 1-120, I'll have to utilize every metin in the game. This means I'll be working on over 200 slots, and that will take a lot of time. The system can be used in other ways, but I don't know how.
 
I hope you'll accept my previous opinion. While writing my previous reply, I had the idea of exploiting the system against specific bosses—three or five at most—by making their damage extremely low and their health extremely high, so that it would take more than 50 players at once to defeat them. Additionally, disabling the boss's health regeneration would make the competition even more intense.
 
A fantastic system and certainly a great job. But don't you think adding metins one by one manually is tedious?

If, for example, I intend to open a farming server at level 1-105 or 1-120, I'll have to utilize every metin in the game. This means I'll be working on over 200 slots, and that will take a lot of time. The system can be used in other ways, but I don't know how.
You can customize the settings to your liking; the goal is to make it attack at the intervals you specify. This will require some effort.
 
İyi geceler
1:
Genişlet Daralt Kopyala
0222 06:07:14252 :: Traceback (most recent call last):

0222 06:07:14252 ::   File "game.py", line 853, in SetHPTargetBoard

0222 06:07:14253 ::   File "uiTarget.py", line 348, in SetEnemyVID

0222 06:07:14253 :: NameError
0222 06:07:14253 :: :
0222 06:07:14253 :: global name 'vnum' is not defined
0222 06:07:14253 ::

bu şekilde bir syserr alıyorum
min_dmg, max_dmg = nonplayer.GetMetinDamageLimit(vnum)

buradaki vnumdan dolayı veriyor bu vnumu metin vnumuyla değiştirince syserr gidiyor ama yazdığım vnuma ait metine hasar vuramıyorum
 
İyi geceler
1:
Genişlet Daralt Kopyala
0222 06:07:14252 :: Traceback (most recent call last):

0222 06:07:14252 ::   File "game.py", line 853, in SetHPTargetBoard

0222 06:07:14253 ::   File "uiTarget.py", line 348, in SetEnemyVID

0222 06:07:14253 :: NameError
0222 06:07:14253 :: :
0222 06:07:14253 :: global name 'vnum' is not defined
0222 06:07:14253 ::

bu şekilde bir syserr alıyorum
min_dmg, max_dmg = nonplayer.GetMetinDamageLimit(vnum)

buradaki vnumdan dolayı veriyor bu vnumu metin vnumuyla değiştirince syserr gidiyor ama yazdığım vnuma ait metine hasar vuramıyorum
uitarget.py paylaşırsan yardımcı olabilirim.
 
Eline sağlık, peki bu sistemin miss sayması yerine metine kaç vurursa vursun senin belirlediğin miktarı vurmasını sağlayan bir uyarlama var mıdır? :D
 
Eline sağlık, peki bu sistemin miss sayması yerine metine kaç vurursa vursun senin belirlediğin miktarı vurmasını sağlayan bir uyarlama var mıdır? :D
C++:
Genişlet Daralt Kopyala
    if ((IsStone() || IsMonster()) && pAttacker && pAttacker->IsPC())
    {
        const auto* pLimit = CMetinDamageLimitManager::instance().GetLimit(GetRaceNum());
        if (pLimit)
        {
            if (dam < pLimit->min_damage)
            {
                static std::unordered_map<DWORD, DWORD> s_mapLastWarnTime;
                DWORD dwNow = get_global_time();
                DWORD dwPID = pAttacker->GetPlayerID();

                if (dwNow - s_mapLastWarnTime[dwPID] >= 5)
                {
                    s_mapLastWarnTime[dwPID] = dwNow;
                    pAttacker->ChatPacket(CHAT_TYPE_INFO, "Hasariniz yetersiz");
                }

                SendDamagePacket(pAttacker, 0, DAMAGE_BLOCK);
                return false;
            }

            if (dam > pLimit->max_damage)
            {
                dam = pLimit->max_damage;
            }
        }
    }


Vurduğun hasar max_damage'den fazla ise tekrar eşitliyoruz sistemi kurmadığım için bilmiyorum denersen sevinirim.
 
Eline sağlık, peki bu sistemin miss sayması yerine metine kaç vurursa vursun senin belirlediğin miktarı vurmasını sağlayan bir uyarlama var mıdır? :D
Hasarı sabitlemek isterseniz:

Kod:
Genişlet Daralt Kopyala
    if ((IsStone() || IsMonster()) && pAttacker && pAttacker->IsPC())
    {
        const auto* pLimit = CMetinDamageLimitManager::instance().GetLimit(GetRaceNum());
        if (pLimit)
        {
            if (dam < pLimit->min_damage)
            {
                static std::unordered_map<DWORD, DWORD> s_mapLastWarnTime;
                DWORD dwNow = get_global_time();
                DWORD dwPID = pAttacker->GetPlayerID();
                if (dwNow - s_mapLastWarnTime[dwPID] >= 5)
                {
                    s_mapLastWarnTime[dwPID] = dwNow;
                    pAttacker->ChatPacket(CHAT_TYPE_INFO, "Hasariniz yetersiz, hasar 100'e sabitlendi.");
    
                //SendDamagePacket(pAttacker, 0, DAMAGE_BLOCK);
                //return false;
                dam = 100; //Buradan istediğinizi yazabilirsiniz. Hasarı sabitleyecektir.
            }
            else if (dam > pLimit->max_damage)
            {
                dam = pLimit->max_damage;
            }
        }
    }
 
Geri
Üst