[C++, Py] Karakterlere Düz Vuruş Efekti Sistemi (Aç/Kapat)

LunarAC

Üye
Üye
Mesaj
5
Beğeni
12
Puan
40
Ticaret Puanı
0
Selamlar herkese,

Sistemi aslında geçen sene forumda @Kaptan Yosun hocamızın açtığı Hava Kılıcı İçin Alevli Savrulma İzi konusunda görmüştüm. Kendisine öncelikle bu güzel paylaşım için teşekkür ederim.

Ben bu yapıyı geçen sene kendi serverimde kullanırken biraz daha geliştirdim, sadece Hava Kılıcı ile sınırlı bırakmayıp genel bir düz vuruş sistemi haline getirdim. Sura ve Savaşçı için elektrik aurasını, Ninja için çift bıçağa oturan özel boyutlu efektleri ve oyuncuların dilediğinde açıp kapatabilmesi için Oyun Seçenekleri (Aç/Kapat) ayarını ekledim. Oyuncularımdan vuruş hissiyatı konusunda çok olumlu geri dönüşler almıştım.

Hem konuyu güncellemek hem de arayan arkadaşlar için derli toplu bir kaynak olması adına sistemin bu halini paylaşıyorum.

Kodları olabildiğince temiz ve #define kontrollü hazırladım, adımları takip ederek sorunsuzca ekleyebilirsiniz. Geri bildirimlerinizi bekliyorum :)



1. Client Source

UserInterface/Locale_inc.h
açılır ve uygun bir yere eklenir:
C++:
Genişlet Daralt Kopyala
#define ENABLE_AUTO_ATTACK_EFFECT
#ifdef ENABLE_AUTO_ATTACK_EFFECT
    // #define ENABLE_AUTO_ATTACK_EFFECT_WARRIOR_ELECTRIC // Aktif edilirse Savasci da elektrik efekti kullanir (Kapaliysa ates efekti)
    #define ENABLE_AUTO_ATTACK_EFFECT_ASSASSIN_ELECTRIC // Aktif edilirse Ninja duz vuruslarinda elektrik efekti cikar
#endif



UserInterface/InstanceBase.h açılır:

Aratılır:
C++:
Genişlet Daralt Kopyala
            EFFECT_ELECTRIC_ATTACK,
            EFFECT_ELECTRIC_HIT,
            EFFECT_ELECTRIC_ATTACH,

Altına eklenir:
C++:
Genişlet Daralt Kopyala
#ifdef ENABLE_AUTO_ATTACK_EFFECT_ASSASSIN_ELECTRIC
            EFFECT_ELECTRIC_DAGGER,
#endif



UserInterface/InstanceBaseEffect.cpp açılır:

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




UserInterface/PythonCharacterManagerModule.cpp açılır:

Aratılır:
C++:
Genişlet Daralt Kopyala
    PyModule_AddIntConstant(poModule, "EFFECT_ELECTRIC_ATTACH",        CInstanceBase::EFFECT_ELECTRIC_ATTACH);

Altına eklenir:
C++:
Genişlet Daralt Kopyala
#ifdef ENABLE_AUTO_ATTACK_EFFECT_ASSASSIN_ELECTRIC
    PyModule_AddIntConstant(poModule, "EFFECT_ELECTRIC_DAGGER",        CInstanceBase::EFFECT_ELECTRIC_DAGGER);
#endif



UserInterface/PythonApplicationModule.cpp açılır:

En alta (`}` öncesine) eklenir:
C++:
Genişlet Daralt Kopyala
#ifdef ENABLE_AUTO_ATTACK_EFFECT
    PyModule_AddIntConstant(poModule, "ENABLE_AUTO_ATTACK_EFFECT", 1);
#else
    PyModule_AddIntConstant(poModule, "ENABLE_AUTO_ATTACK_EFFECT", 0);
#endif



UserInterface/PythonSystem.h açılır:

Aratılır:
C++:
Genişlet Daralt Kopyala
            bool            bShowSalesText;

Altına eklenir:
C++:
Genişlet Daralt Kopyala
#ifdef ENABLE_AUTO_ATTACK_EFFECT
            bool            bAutoAttackEffect;
#endif

Tekrar aratılır:
C++:
Genişlet Daralt Kopyala
        void                            SetShowSalesTextFlag(int iFlag);

Altına eklenir:
C++:
Genişlet Daralt Kopyala
#ifdef ENABLE_AUTO_ATTACK_EFFECT
        void                            SetAutoAttackEffect(bool enabled);
        bool                            GetAutoAttackEffect() const;
#endif



UserInterface/PythonSystem.cpp açılır:

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




UserInterface/PythonSystemModule.cpp açılır:

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




2. Pack (root)

root/playersettingmodule.py
açılır:

Aratılır:
Python:
Genişlet Daralt Kopyala
    chrmgr.RegisterEffect(chrmgr.EFFECT_FLAME_ATTACK, "equip_right_hand", "d:/ymir work/effect/hit/blow_flame/flame_3_weapon.mse")

Değiştirilir:
Python:
Genişlet Daralt Kopyala
    if app.ENABLE_AUTO_ATTACK_EFFECT:
        chrmgr.RegisterEffect(chrmgr.EFFECT_FLAME_ATTACK, "equip_right_hand", "d:/ymir work/effect/hit/blow_flame/flame_custom_weapon.mse")
    else:
        chrmgr.RegisterEffect(chrmgr.EFFECT_FLAME_ATTACK, "equip_right_hand", "d:/ymir work/effect/hit/blow_flame/flame_3_weapon.mse")

Tekrar aratılır:
Python:
Genişlet Daralt Kopyala
    chrmgr.RegisterEffect(chrmgr.EFFECT_ELECTRIC_ATTACH, "", "d:/ymir work/effect/hit/blow_electric/light_1_body.mse")

Altına eklenir:
Python:
Genişlet Daralt Kopyala
    if app.ENABLE_AUTO_ATTACK_EFFECT and hasattr(chrmgr, "EFFECT_ELECTRIC_DAGGER"):
        chrmgr.RegisterEffect(chrmgr.EFFECT_ELECTRIC_DAGGER, "PART_WEAPON", "d:/ymir work/effect/hit/blow_electric/light_1_dagger.mse")



root/uigameoption.py açılır:

Aratılır (`__Initialize` içinde):
Python:
Genişlet Daralt Kopyala
        self.showsalesTextButtonList = []

Altına eklenir:
Python:
Genişlet Daralt Kopyala
        if app.ENABLE_AUTO_ATTACK_EFFECT:
            self.autoAttackEffectButtonList = []

Tekrar aratılır (`__Load_BindObject` içinde):
Python:
Genişlet Daralt Kopyala
            self.showsalesTextButtonList.append(GetObject("salestext_off_button"))

Altına eklenir:
Python:
Genişlet Daralt Kopyala
            if app.ENABLE_AUTO_ATTACK_EFFECT:
                self.autoAttackEffectButtonList.append(GetObject("auto_attack_effect_off"))
                self.autoAttackEffectButtonList.append(GetObject("auto_attack_effect_on"))

Tekrar aratılır (`__Load` içinde):
Python:
Genişlet Daralt Kopyala
        self.showsalesTextButtonList[1].SAFE_SetEvent(self.__OnClickSalesTextOffButton)

Altına eklenir:
Python:
Genişlet Daralt Kopyala
        if app.ENABLE_AUTO_ATTACK_EFFECT:
            self.autoAttackEffectButtonList[0].SAFE_SetEvent(self.__OnClickAutoAttackEffectOff)
            self.autoAttackEffectButtonList[1].SAFE_SetEvent(self.__OnClickAutoAttackEffectOn)
            self.RefreshAutoAttackEffect()

Tekrar aratılır:
Python:
Genişlet Daralt Kopyala
    def __OnClickSalesTextOffButton(self):
        systemSetting.SetShowSalesTextFlag(False)
        self.RefreshShowSalesText()

Altına eklenir:
Python:
Genişlet Daralt Kopyala
    if app.ENABLE_AUTO_ATTACK_EFFECT:
        def __SetAutoAttackEffect(self, enabled):
            systemSetting.SetAutoAttackEffect(enabled)
            self.RefreshAutoAttackEffect()
            systemSetting.SaveConfig()

        def __OnClickAutoAttackEffectOn(self):
            self.__SetAutoAttackEffect(1)

        def __OnClickAutoAttackEffectOff(self):
            self.__SetAutoAttackEffect(0)

        def RefreshAutoAttackEffect(self):
            if systemSetting.GetAutoAttackEffect():
                self.autoAttackEffectButtonList[0].SetUp()
                self.autoAttackEffectButtonList[1].Down()
            else:
                self.autoAttackEffectButtonList[0].Down()
                self.autoAttackEffectButtonList[1].SetUp()



root/uiscript/gameoptiondialog.py açılır:

Dosyanın en altına eklenir:
Python:
Genişlet Daralt Kopyala
if app.ENABLE_AUTO_ATTACK_EFFECT:
    window["height"] = 25*14+8
    board = window["children"][0]
    board["height"] = 25*14+8
    board["children"] += (
        {
            "name" : "auto_attack_effect_label", "type" : "text",
            "x" : LINE_LABEL_X, "y" : 315+2,
            "text" : getattr(uiScriptLocale, "OPTION_AUTO_ATTACK_EFFECT", "Saldiri Efekti"),
        },
        {
            "name" : "auto_attack_effect_on", "type" : "radio_button",
            "x" : LINE_DATA_X, "y" : 315, "text" : "Acik",
            "default_image" : ROOT_PATH + "middle_button_01.sub",
            "over_image" : ROOT_PATH + "middle_button_02.sub",
            "down_image" : ROOT_PATH + "middle_button_03.sub",
        },
        {
            "name" : "auto_attack_effect_off", "type" : "radio_button",
            "x" : LINE_DATA_X+MIDDLE_BUTTON_WIDTH, "y" : 315, "text" : "Kapali",
            "default_image" : ROOT_PATH + "middle_button_01.sub",
            "over_image" : ROOT_PATH + "middle_button_02.sub",
            "down_image" : ROOT_PATH + "middle_button_03.sub",
        },
    )



3. Pack (effect)

Aşağıdaki efekt ve görsel dosyaları ilgili klasörlere atılır:
  • d:/ymir work/effect/hit/blow_flame/flame_custom_weapon.mse
  • d:/ymir work/effect/hit/blow_flame/lunar_weapon_flame.tga
  • d:/ymir work/effect/hit/blow_electric/light_1_weapon.mse
  • d:/ymir work/effect/hit/blow_electric/light_1_dagger.mse

Özel Görsel (.tga / .dds) Değiştirme Notu:
flame_custom_weapon.mse dosyası, kendi özel alev görselini d:/ymir work/effect/hit/blow_flame/ klasörü içerisindeki lunar_weapon_flame.tga dosyasından çeker. Dilerseniz kendi .tga veya .dds efekt görselinizi aynı klasöre atıp flame_custom_weapon.mse içerisindeki şu kısımdan çağırabilirsiniz:

flame_custom_weapon.mse açılır ve aratılır:
Kod:
Genişlet Daralt Kopyala
        List TextureFiles
        {
            "lunar_weapon_flame.tga"
        }
"lunar_weapon_flame.tga" yerine kendi görselinizin adı yazılır.



4. Bonus: Elektrik Efektini Kırmızı - Mavi (İki Renkli) Yapma

Elektrik efektinin (light_1_dagger.mse veya light_1_weapon.mse) kılıç/hançer üzerinde Kırmızı - Mor - Mavi geçişli görünmesi için .mse dosyasındaki 3 partikül grubunun renk kodlarını şu şekilde değiştirebilirsiniz:

1. Group Particle (Orta Gövde - Mor Geçiş):
Kod:
Genişlet Daralt Kopyala
        List TimeEventColorRed
        {
            0.000000 0.850000
        }
        List TimeEventColorGreen
        {
            0.000000 0.200000
        }
        List TimeEventColorBlue
        {
            0.000000 0.950000
        }

2. Group Particle (Kılıç/Bıçak Ucu - Neon Mavi):
Kod:
Genişlet Daralt Kopyala
        List TimeEventColorRed
        {
            0.000000 0.100000
        }
        List TimeEventColorGreen
        {
            0.000000 0.800000
        }
        List TimeEventColorBlue
        {
            0.000000 1.000000
        }

3. Group Particle (Kabza / Dip Kısım - Alev Kırmızısı):
Kod:
Genişlet Daralt Kopyala
        List TimeEventColorRed
        {
            0.000000 1.000000
        }
        List TimeEventColorGreen
        {
            0.000000 0.150000
        }
        List TimeEventColorBlue
        {
            0.000000 0.150000
        }



Oyun İçi


VirusTotal
​
 

Dosya Eklentileri

Teşekkürler, Kanıt olarak eklenebilir.
 

Dosya Eklentileri

  • 1793214397524.webp
    1793214397524.webp
    13,5 KB · Gösterim: 27
Geri
Üst