Soru Oyuna başlangıçda Tanrıları ve şebnemleri verme src

  • Konuyu açan Konuyu açan Tugian2
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 14
  • Gösterim Gösterim 339
Herhangi bir konuda danışmak istediğiniz soru varsa bu öneki seçebilirsiniz.

Tugian2

Tugian2-Modern PVP
Gold Üye
MT Üye
Mesaj
635
Çözümler
7
Beğeni
530
Puan
840
Ticaret Puanı
1
1760801990904.webp



Merhaba dostlar,

Oyuna başlangışta sol üstte görünecek şekilde ve özellikleri verilecek şekilde source tarafından nasıl yapabilirim?
yada bana bir örnek atma şansınız varmı?
 
Affect şeklinde verebilirsin. Tek affect üzerine hepsinin bonuslarını verebilirsin.
 
Tam olaraktan nasıl yapılıyor anlatabilirmisiniz?
affect.h içerisine AFFECT_BASLANGIC şeklinde bir affect oluştur. Başlangıç sistemine göre sourceden vericeksen ona göre questten vereceksen ona göre

örn.

ch->AddAffect(AFFECT_BASLANGIC, POINT_MAX_HP, 1000, 0, INFINITE_AFFECT_DURATION, 0, true, true)
ch->AddAffect(AFFECT_BASLANGIC, POINT_MAX_SP, 1000, 0, INFINITE_AFFECT_DURATION, 0, true, true)
 
affect.h içerisine AFFECT_BASLANGIC şeklinde bir affect oluştur. Başlangıç sistemine göre sourceden vericeksen ona göre questten vereceksen ona göre

örn.

ch->AddAffect(AFFECT_BASLANGIC, POINT_MAX_HP, 1000, 0, INFINITE_AFFECT_DURATION, 0, true, true)
ch->AddAffect(AFFECT_BASLANGIC, POINT_MAX_SP, 1000, 0, INFINITE_AFFECT_DURATION, 0, true, true)
İşte başlangıç sistemi henüz kurmadım önerebiliceğiniz bir başlangıç sistemi varsa onuda iletebilirmisiniz?
 
questlua_pc.cpp:
Genişlet Daralt Kopyala
int pc_give_eqboni(lua_State* L)
    {
        LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr();
        BYTE job = ch->GetJob();
        LPITEM item;
        switch (job)
        {
            case JOB_WARRIOR:
            case JOB_ASSASSIN:
            case JOB_SURA:
            case JOB_SHAMAN:
            {
                   item = ch->GetWear(WEAR_HEAD);
                   if (item != NULL)
                   {
                       item->ClearAttribute();
                       item->SetForceAttribute(0, APPLY_ATT_SPEED, 8);
                       item->SetForceAttribute(1, APPLY_HP_REGEN, 30);
                       item->SetForceAttribute(2, APPLY_SP_REGEN, 30);
                       item->SetForceAttribute(3, APPLY_DODGE, 15);
                       item->SetForceAttribute(4, APPLY_STEAL_SP, 10);
                   }

                   item = ch->GetWear(WEAR_WEAPON);
                   if (item != NULL)
                   {
                       item->ClearAttribute();
                       item->SetForceAttribute(0, APPLY_CAST_SPEED, 20);
                       item->SetForceAttribute(1, APPLY_CRITICAL_PCT, 10);
                       item->SetForceAttribute(2, APPLY_PENETRATE_PCT, 10);
                       item->SetForceAttribute(3, APPLY_ATTBONUS_ANIMAL, 20);
                       item->SetForceAttribute(4, APPLY_NORMAL_HIT_DAMAGE_BONUS, 20);
                   }

                   item = ch->GetWear(WEAR_SHIELD);
                   if (item != NULL)
                   {
                       item->ClearAttribute();
                       item->SetForceAttribute(0, APPLY_CON, 12);
                       item->SetForceAttribute(1, APPLY_BLOCK, 15);
                       item->SetForceAttribute(2, APPLY_STR, 12);
                       item->SetForceAttribute(3, APPLY_IMMUNE_STUN, 1);
                       item->SetForceAttribute(4, APPLY_INT, 12);
                   }

                   item = ch->GetWear(WEAR_BODY);
                   if (item != NULL)
                   {
                       item->ClearAttribute();
                       item->SetForceAttribute(0, APPLY_MAX_HP, 2000);
                       item->SetForceAttribute(1, APPLY_CAST_SPEED, 20);
                       item->SetForceAttribute(2, APPLY_STEAL_HP, 10);
                       item->SetForceAttribute(3, APPLY_REFLECT_MELEE, 10);
                       item->SetForceAttribute(4, APPLY_ATT_GRADE_BONUS, 50);
                   }

                   item = ch->GetWear(WEAR_FOOTS);
                   if (item != NULL)
                   {
                       item->ClearAttribute();
                       item->SetForceAttribute(0, APPLY_MAX_HP, 2000);
                       item->SetForceAttribute(1, APPLY_EXP_DOUBLE_BONUS, 20);
                       item->SetForceAttribute(2, APPLY_MOV_SPEED, 8);
                       item->SetForceAttribute(3, APPLY_ATT_SPEED, 8);
                       item->SetForceAttribute(4, APPLY_CRITICAL_PCT, 10);
                   }

                   item = ch->GetWear(WEAR_WRIST);
                   if (item != NULL)
                   {
                       item->ClearAttribute();
                       item->SetForceAttribute(0, APPLY_MAX_HP, 2000);
                       item->SetForceAttribute(1, APPLY_MANA_BURN_PCT, 10);
                       item->SetForceAttribute(2, APPLY_PENETRATE_PCT, 10);
                       item->SetForceAttribute(3, APPLY_STEAL_HP, 10);
                       item->SetForceAttribute(4, APPLY_ATTBONUS_ANIMAL, 20);
                   }
                   item = ch->GetWear(WEAR_NECK);
                   if (item != NULL)
                   {
                       item->ClearAttribute();
                       item->SetForceAttribute(0, APPLY_MAX_HP, 2000);
                       item->SetForceAttribute(1, APPLY_GOLD_DOUBLE_BONUS, 20);
                       item->SetForceAttribute(2, APPLY_CRITICAL_PCT, 10);
                       item->SetForceAttribute(3, APPLY_PENETRATE_PCT, 10);
                       item->SetForceAttribute(4, APPLY_HP_REGEN, 20);
                   }
                   item = ch->GetWear(WEAR_EAR);
                   if (item != NULL)
                   {
                       item->ClearAttribute();
                       item->SetForceAttribute(0, APPLY_MOV_SPEED, 10);
                       item->SetForceAttribute(1, APPLY_GOLD_DOUBLE_BONUS, 20);
                       item->SetForceAttribute(2, APPLY_POISON_REDUCE, 8);
                       item->SetForceAttribute(3, APPLY_ATTBONUS_ANIMAL, 20);
                       item->SetForceAttribute(4, APPLY_ATTBONUS_ORC, 20);
                   }
            }
            break;
        }
    }
{ "give_eqboni", pc_give_eqboni },


Sanırsam buradan yürüyeceğim tam bir net çözüm değil ama şimdilik idare eder diye düşünüyorum
 
efekt verme işini quest te de yapabilirsin ki quest te yapmak daha aza kafa karıştırıcı olur. başlangıçta item verme sistemi olarakta bunu kullanabilirsin ama kullandığın başlangıç questide iş görür.

 
efekt verme işini quest te de yapabilirsin ki quest te yapmak daha aza kafa karıştırıcı olur. başlangıçta item verme sistemi olarakta bunu kullanabilirsin ama kullandığın başlangıç questide iş görür.


Yorumun için teşekkürler hocam fakat benim sıkıntım şu tam tabir edemedim heralde en başta oyuncu oyuna ilk başladığında hirsizin eldiveni altin para exp yüzüğünün özelliğini nasil verildigi ve bu özelliklerin sol ustte efektlerinin nasil çıkarıldığı
 
aşağıdakileri uygula;

questlua_pc.cpp:
Genişlet Daralt Kopyala
//Arat;

    ALUA(pc_sf_dead)
    {
        LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr();
        ch->Dead(0, 0);
        return 0;
    }


//Altına ekle;

    ALUA(pc_sebnem_tanri_aff_add)
    {
        LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr();

        const DWORD sebnem_vnum[] = { 50821, 50822, 50823, 50824, 50825,50826 };

        for (size_t i = 0; i < sizeof(sebnem_vnum) / sizeof(sebnem_vnum[0]); i++)
        {
            LPITEM item = ITEM_MANAGER::instance().CreateItem(sebnem_vnum[i]);

            if (!item)
                continue;

            int affect_type        = AFFECT_BLEND;
            int apply_type        = aApplyInfo[item->GetSocket(0)].bPointType;
            int apply_value        = item->GetSocket(1);
            int apply_duration    = item->GetSocket(2);

            if (ch->FindAffect(affect_type, apply_type))
            {
                ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ÀÌ¹Ì È¿°ú°¡ °É·Á ÀÖ½À´Ï´Ù."));
                ITEM_MANAGER::instance().RemoveItem(item);
                continue;
            }
            else
            {
                ch->AddAffect(affect_type, apply_type, apply_value, 0, apply_duration, 0, false);
                ITEM_MANAGER::instance().RemoveItem(item);
            }
        }

        const DWORD tanri_vnum[] = { 39017, 39018, 39019, 39020 };

        for (size_t i = 0; i < sizeof(sebnem_vnum) / sizeof(sebnem_vnum[0]); i++)
        {
            LPITEM item = ITEM_MANAGER::instance().CreateItem(tanri_vnum[i]);

            if (!item)
                continue;

            int affect_type        = item->GetValue(0);
            int apply_type        = aApplyInfo[item->GetValue(1)].bPointType;
            int apply_value        = item->GetValue(2);
            int apply_duration    = item->GetValue(3);

            if (ch->FindAffect(affect_type, apply_type))
            {
                ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ÀÌ¹Ì È¿°ú°¡ °É·Á ÀÖ½À´Ï´Ù."));
                ITEM_MANAGER::instance().RemoveItem(item);
                continue;
            }
            else
            {
                ch->AddAffect(affect_type, apply_type, apply_value, 0, apply_duration, 0, false);
                ITEM_MANAGER::instance().RemoveItem(item);
            }
        }

        return 1;
    }


//Arat;

            { "set_flag_dead",            pc_sf_dead            },


//Altına ekle;

            { "sebnem_tanri_aff_add",    pc_sebnem_tanri_aff_add },

questlerin olduğu yerde quest_functions dosyası var onun içine "pc.sebnem_tanri_aff_add" ekle ve şu questi okut;

start_buff.lua:
Genişlet Daralt Kopyala
quest sebnem_tanri begin
    state start begin
        when login begin

            pc.sebnem_tanri_aff_add

        end
    end
end
 
aşağıdakileri uygula;

questlua_pc.cpp:
Genişlet Daralt Kopyala
//Arat;

    ALUA(pc_sf_dead)
    {
        LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr();
        ch->Dead(0, 0);
        return 0;
    }


//Altına ekle;

    ALUA(pc_sebnem_tanri_aff_add)
    {
        LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr();

        const DWORD sebnem_vnum[] = { 50821, 50822, 50823, 50824, 50825,50826 };

        for (size_t i = 0; i < sizeof(sebnem_vnum) / sizeof(sebnem_vnum[0]); i++)
        {
            LPITEM item = ITEM_MANAGER::instance().CreateItem(sebnem_vnum[i]);

            if (!item)
                continue;

            int affect_type        = AFFECT_BLEND;
            int apply_type        = aApplyInfo[item->GetSocket(0)].bPointType;
            int apply_value        = item->GetSocket(1);
            int apply_duration    = item->GetSocket(2);

            if (ch->FindAffect(affect_type, apply_type))
            {
                ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ÀÌ¹Ì È¿°ú°¡ °É·Á ÀÖ½À´Ï´Ù."));
                ITEM_MANAGER::instance().RemoveItem(item);
                continue;
            }
            else
            {
                ch->AddAffect(affect_type, apply_type, apply_value, 0, apply_duration, 0, false);
                ITEM_MANAGER::instance().RemoveItem(item);
            }
        }

        const DWORD tanri_vnum[] = { 39017, 39018, 39019, 39020 };

        for (size_t i = 0; i < sizeof(sebnem_vnum) / sizeof(sebnem_vnum[0]); i++)
        {
            LPITEM item = ITEM_MANAGER::instance().CreateItem(tanri_vnum[i]);

            if (!item)
                continue;

            int affect_type        = item->GetValue(0);
            int apply_type        = aApplyInfo[item->GetValue(1)].bPointType;
            int apply_value        = item->GetValue(2);
            int apply_duration    = item->GetValue(3);

            if (ch->FindAffect(affect_type, apply_type))
            {
                ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ÀÌ¹Ì È¿°ú°¡ °É·Á ÀÖ½À´Ï´Ù."));
                ITEM_MANAGER::instance().RemoveItem(item);
                continue;
            }
            else
            {
                ch->AddAffect(affect_type, apply_type, apply_value, 0, apply_duration, 0, false);
                ITEM_MANAGER::instance().RemoveItem(item);
            }
        }

        return 1;
    }


//Arat;

            { "set_flag_dead",            pc_sf_dead            },


//Altına ekle;

            { "sebnem_tanri_aff_add",    pc_sebnem_tanri_aff_add },

questlerin olduğu yerde quest_functions dosyası var onun içine "pc.sebnem_tanri_aff_add" ekle ve şu questi okut;

start_buff.lua:
Genişlet Daralt Kopyala
quest sebnem_tanri begin
    state start begin
        when login begin

            pc.sebnem_tanri_aff_add

        end
    end
end
Muhtemelen sorunsuz olacaktır. Ancak yeni fonksiyon eklemeye gerek yok. Zaten bunu yapan fonksiyon var. affect.add_collect fonksiyonunu give_basic_weapon.luaya ekleyip hatta altında bilgilendirme mesajı bile eklersin.

Örnek kod ;
Lua (Quest):
Genişlet Daralt Kopyala
affect.add_collect(apply.CRITICAL_PCT, 20, 60*60*24*365)

apply.CRITICAL_PCT = Kritik isabet
20 = eklenecek bonus miktarı
60*60*24*365 = Süresi bu şekilde kullanırsan 365 günlük verir.

Mesela isim olarak değilde sayı olarak da girebilirsin. Mantık aynı.
Örnek :
Lua (Quest):
Genişlet Daralt Kopyala
affect . add_collect ( 54 , 270 , 60 * 60 * 24 * 500 )
affect . add_collect ( 53 , 170 , 60 * 60 * 24 * 500 )
affect . add_collect ( 37 , 20 , 60 * 60 * 24 * 500 )
affect . add_collect ( 7 , 41 , 60 * 60 * 24 * 500 )
affect . add_collect ( 15 , 50 , 60 * 60 * 24 * 500 )
affect . add_collect ( 16 , 50 , 60 * 60 * 24 * 500 )
affect . add_collect ( 8 , 60 , 60 * 60 * 24 * 500 )
affect . add_collect ( 69 , 20 , 60 * 60 * 24 * 500 )
affect . add_collect ( 70 , 20 , 60 * 60 * 24 * 500 )
affect . add_collect ( 64 , 20 , 60 * 60 * 24 * 500 )
affect . add_collect ( 65 , 20 , 60 * 60 * 24 * 500 )

Hatta şu şekilde de oyuncuyu bilgilendirebilirsin.
Lua (Quest):
Genişlet Daralt Kopyala
say_reward ( "Karakterine şu özellikler sınırsız olarak eklendi ; " )
say ( "Şebnemlerin tüm özellikleri " )
say ( "Ejderha tanrı yaşamları özellikleri " )
say ( "Kritik ve delici isabetleri " )
say ( "Mor iksir , ve yeşil iksir özellikleri " )
say_reward ( "Karakterine süresiz olarak eklendi. " )
 
add_collect de efekti ve flagı seçemiyorsun sol üstte efeklerde nasıl gözükecek yunusum. ha arkadaşın öyle bir derdi yoksa senin dediğin doğru.
 
add_collect de efekti ve flagı seçemiyorsun sol üstte efeklerde nasıl gözükecek yunusum. ha arkadaşın öyle bir derdi yoksa senin dediğin doğru.
Aaa evet, özellikleri veriyoda iconlar görünmüyor.
Unutmuşum. 😂😂 iconlarıda veriyo zannediyorum.
Pack kısmından affect type felan tanımlanınca görünürde. Sen zaten iconlu şekilde yazmışsın cano. Ellerine sağlık bu arada.
 
Geri
Üst