Beceri Parşömeni (Düzenleyin geliştirin)

  • Konuyu açan Konuyu açan NuganoMT
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 2
  • Gösterim Gösterim 116

NuganoMT

Bir seni düşündüm birde kendimi.
Geliştirici
MT Üye
Mesaj
493
Çözümler
23
Beğeni
1.140
Puan
654
Ticaret Puanı
0
Hızlıca mantığına gireyim diğer svlerde nasıl bilmiyorum.

Olayımız bir affect tanımlanıyor ve bu affect 1 gün 1 hafta veya sınırsız olarak tanımlanıyor.

Bu tanımlanan affect karakter üzerinde aktif oldukça kullanılan skiller sınırsız kalıyor.(Değiştirilebilir.)

Kısa bi örnek skill parşömeni 1 günlük : Affect 1 gün olarak ayarlandı. Skiller 1 günlük süre boyunca o skilli açtığında süresiz şekilde aktif kalacak.

Eklenmesi gereken kontroller vardır elbet. Sadece kabataslak bi şekilde mantık yürüttüm ben. Daha bilgili arkadaşlar kullanacaklar için düzenleme önerebilir.

Örnek item_proto.txt:

Kod:
Genişlet Daralt Kopyala
70045    흑신의 이빨    ITEM_USE    USE_SPECIAL    1    NONE    NONE    NONE    NONE    0    0    0    0    0    LIMIT_NONE    0    LIMIT_NONE    0    APPLY_NONE    0    APPLY_NONE    0    APPLY_NONE    0    0    0    0    0    0    0    0    0    0

affect.h aç arat::
Genişlet Daralt Kopyala
    AFFECT_QUEST_START_IDX = 1000

//üstüne ekle

    AFFECT_SKILL_DURATION_EXTEND = 544,

char_item.cpp aç arat::
Genişlet Daralt Kopyala
                    case USE_SPECIAL:

                        switch (item->GetVnum())
                        {

                            case ITEM_NOG_POCKET:
                                {

                                    if (FindAffect(AFFECT_NOG_ABILITY))
                                    {
                                        ChatPacket(CHAT_TYPE_INFO, LC_TEXT("이미 효과가 걸려 있습니다."));
                                        return false;
                                    }
                                    long time = item->GetValue(0);
                                    long moveSpeedPer    = item->GetValue(1);
                                    long attPer    = item->GetValue(2);
                                    long expPer            = item->GetValue(3);
                                    AddAffect(AFFECT_NOG_ABILITY, POINT_MOV_SPEED, moveSpeedPer, AFF_MOV_SPEED_POTION, time, 0, true, true);
                                    AddAffect(AFFECT_NOG_ABILITY, POINT_MALL_ATTBONUS, attPer, AFF_NONE, time, 0, true, true);
                                    AddAffect(AFFECT_NOG_ABILITY, POINT_MALL_EXPBONUS, expPer, AFF_NONE, time, 0, true, true);
                                    item->SetCount(item->GetCount() - 1);
                                }
                                break;

//altına ekle

                            case 70045:
                            {
                                // Skill sure uzatma (1 gun) (eklenen affectin süresi)
                                const long EXTEND_FLAG_DURATION = 60 * 60 * 24; // 1 gun
                        
                                if (FindAffect(AFFECT_SKILL_DURATION_EXTEND))
                                {
                                    ChatPacket(CHAT_TYPE_INFO, "Bu ozellik zaten aktif.");
                                    return false;
                                }
                        
                                AddAffect(AFFECT_SKILL_DURATION_EXTEND, POINT_NONE, 0, 0, EXTEND_FLAG_DURATION, 0, false);
                        
                                ChatPacket(CHAT_TYPE_INFO, "Beceri parsomeni aktif.");
                                item->SetCount(item->GetCount() - 1);
                            }
                            break;

char_skill.cpp aç arat::
Genişlet Daralt Kopyala
        if (dwVnum == SKILL_MUYEONG)
        {
            pkSk->kDurationPoly.SetVar("k", k/*bSkillLevel*/);
            pkSk->kDurationSPCostPoly.SetVar("k", k/*bSkillLevel*/);

            int iDur = (long) pkSk->kDurationPoly.Eval();
            iDur += GetPoint(POINT_PARTY_BUFFER_BONUS);

            if (pkVictim == this)
                AddAffect(dwVnum,
                        POINT_NONE, 0,
                        AFF_MUYEONG,
                        iDur,
                        (long) pkSk->kDurationSPCostPoly.Eval(),
                        true);

            return BATTLE_NONE;
        }

        bool bAdded = false;
        pkSk->kDurationPoly.SetVar("k", k/*bSkillLevel*/);
        int iDur = (int) pkSk->kDurationPoly.Eval();

//altına ekle

//Öfke - SKILL_JEONGWI
//Hava Kılıcı - SKILL_GEOMKYUNG
//Güçlü Beden - SKILL_CHUNKEON
//Hafif Adım - SKILL_GYEONGGONG
//Büyülü Keskinlik - SKILL_GWIGEOM
//Dehşet - SKILL_TERROR
//Büyülü Zırh - SKILL_JUMAGAP
//Ateş Hayaleti - SKILL_MUYEONG
//Karanlık Koruma - SKILL_MANASHILED
//Kutsama - SKILL_HOSIN
//Yansıtma - SKILL_REFLECT
//Ejderha Yardımı - SKILL_GICHEON
//Çabukluk - SKILL_KWAESOK
//Yüksek Saldırı - SKILL_JEUNGRYEOK
        if (this->FindAffect(AFFECT_SKILL_DURATION_EXTEND) &&
            (dwVnum == SKILL_GEOMKYUNG || dwVnum == SKILL_EUNHYUNG ||
            dwVnum == SKILL_JEONGWI || dwVnum == SKILL_CHUNKEON ||
            dwVnum == SKILL_GYEONGGONG || dwVnum == SKILL_GWIGEOM ||
            dwVnum == SKILL_TERROR || dwVnum == SKILL_JUMAGAP ||
            dwVnum == SKILL_MUYEONG || dwVnum == SKILL_MANASHILED ||
            dwVnum == SKILL_HOSIN || dwVnum == SKILL_REFLECT ||
            dwVnum == SKILL_GICHEON || dwVnum == SKILL_KWAESOK ||
            dwVnum == SKILL_JEUNGRYEOK))
        {
            iDur = 60 * 60 * 24 * 365;//1 yıl
        }
 
Son düzenleme:
çok hoşuma gitti bunu ben hard sunucumda 1 haftalık craft olarak değerlendirmeyi düşünüyorum. yani oyunda değerinin düştüğünü ilgi görmeyen nesneleri bunun craftında kullanıp dengeyi sabit tutabilirim.
 
paylaşım için teşekkürler geliştirip kullanılabilir.
 
Geri
Üst