Saltanattaki ejderha bineği ekleme Martysama 5.8

Screw

Üye
Üye
Mesaj
95
Beğeni
20
Puan
411
Ticaret Puanı
0
Selamlar herkese, bugün Saltanattaki ejderha bineğini (Dragon Kapsülü) Marty 5.8 altyapımıza nasıl eklediğimizi anlatacağım. Uzun zamandır yoktum, Metin2 işleriyle hiç uğraşmamıştım; en son ufak tefek şeyler denemiştim sadece. Her neyse konuyu bölmeyelim, dün bu konudaki altyapı ile tekrar başlamak istedim. Bu arada @CuRSED e files için ve @hasanmacit zamanındaki yardımları için tekrardan teşekkürler.

Fileste, ilk amacım bu ejderha bineğini eklemekti ve biraz uğraştan sonra Saltanat mantığıyla 1e1 yapmaya çalıştım (kostüm slotuna takılmaz, envanterden sağ tıkla biner, tekrar sağ tıkla veya Ctrl+G ile iner, binek üstünden sadece düz vuruş yapar, inince arkada ejderha kalmaz tamamen yok olur). Eğer yanlış, eksik veya daha pratik bir yolu varsa bilirkişi arkadaşlar da konunun altında belirtebilir, hep birlikte geliştirmiş oluruz.



kullanıcağımız dosyalar:
virüstotal :

1. Bineğin 3D Model ve Animasyon Dosyaları​

İlk olarak bineğin model klasörünü oyuna tanıtmakla başladım:
  • yw_npc (veya sizde hangi packse npc) packini EterNexus ile açtım.
  • ymir work/npc/ klasörünün içine indirdiğim plechi_bonedragon_mount klasörünü doğrudan yapıştırdım. (İçinde ejderhanın .gr2 modelleri, textureleri ve .msa animasyon dosyaları var).

2. Efektler (Kanat & Ayak Ateşleri)​

Ejderhanın kanat ve ayaklarındaki alev efektlerinin havada kalmaması ve doğru çalışması için:
  • yw_etc (veya etc) packini açtım.
  • ymir work/effect/ klasörünün içine girdim, buraya plechito adında yeni bir klasör oluşturdum.
  • İndirdiğimiz efekt paketindeki mounts klasörünü direkt bu plechito klasörünün içine attım. (Yani yol ymir work/effect/plechito/mounts/bonedragon_*.mse şeklinde oldu).
  • Packi EterNexus ile kapattım.

3. Kod Belirleme ve npclist.txt tanımı​

Kendime çakışma yapmayacak, fileste boşta olan temiz bir vnum belirledim: 34179.
  • root packini açtım, içindeki npclist.txt dosyasını açıp en alt satıra indim:
  • 34179 plechi_bonedragon_mount
  • (Aralarında boşluk değil mutlaka TAB tuşuna basarak boşluk bırakın).
    • Kaydedip rootu tekrar kapattım.

Envanterde ejderhayı çağıracağımız kapsülün ikonu için:​

  • icon packini açtım.
  • Ejderha ikonunu dosya adı 34179.tga olacak şekilde icon/item/ içine attım.
  • Sonra locale (locale_tr/de vb.) packini açıp item_list.txt dosyasının en altına şu satırı ekledim:
  • 34179 ETC icon/item/34179.tga
  • (eklemesenizde olur otomatik olarak buluyor zaten)
  • Aynı şekilde item_names.txt içine de ismini yazdım:
  • 34179 Dragon Kapsülü

İtemin üzerine geldiğimizde adı ve altındaki açıklama yazısının çıkması için:
  • locale packi içindeki itemdesc.txt dosyasını açıp en alt satıra şunu ekledim:

34179 Ejderha (kırmızı) Kadim zamanlardan kalan, büyülü efsanevi bir ejderha.

(Yine sütunlar arasına boşluk değil, TAB tuşu ile boşluk bırakıyoruz).

5. Mob Proto ve Item Proto Ayarları​

Burası önemli arkadaşlar, özellikle Marty 5.8 kullananlar dikkat etsin; mob_proto'da eksik sütun olursa gameserver CsvReader hatası verip core düşürür (tam 71 sütun olması şart).

a) mob_proto.txt (Client ve Sunucu):​

34179 kodlu mob satırını ekledim:
34179 kodlu mob satırını ekledim::
Genişlet Daralt Kopyala
34179    "Dragon"    ITEM_NONE    0    0    0    1    0    0    0    ANIMAL    NO_AURA    0        0    0    0    0    0    0    0    1    1    1    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0

Aynı şekilde mob_names.txt içine:

34179 Dragon

b) Kapsülün sağ tıklayınca kaybolmasını istemediğim için type'ını ITEM_QUEST olarak ayarladım:​

item proto:
Genişlet Daralt Kopyala
34179    "Dragon Kapsülü"    ITEM_QUEST    0    1    NONE    ITEM_STACKABLE    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

  • Bu iki dosyayı DumpProto ile kapatıp çıkan binary mob_proto ve item_protoyu locale packine attım.
  • Navicat/MariaDB tarafında srv1_player veri tabanındaki tablolara da kayıtları işledim.
Saltanat mantığında ejderha bir kostüm binek değil, envanterden kullanılan bir kapsül mantığında olmalıydı. Üstündeyken düz vuruş yapabilmeli, at skili vuramamalı ve inince arkada at kalmamalıydı:

1) Server/game/src/questlua_pc.cpp​

Arat:
Genişlet Daralt Kopyala
    int pc_mount(lua_State* L)
    {
        if (!lua_isnumber(L, 1))
            return 0;

        int length = 60;

        if (lua_isnumber(L, 2))
            length = (int) lua_tonumber(L, 2);

        DWORD mount_vnum = (DWORD) lua_tonumber(L, 1);

        if (length == 0)
        {
            CHorseRider::Unmount();
            CQuestManager::instance().GetCurrentCharacterPtr()->MountVnum(0);
        }
        else
        {
            CHorseRider::Mount(mount_vnum);
            CQuestManager::instance().GetCurrentCharacterPtr()->MountVnum(mount_vnum);
        }

        return 0;
    }

Altına ekle:
Genişlet Daralt Kopyala
    int pc_mount_vnum(lua_State* L)
    {
        if (!lua_isnumber(L, 1))
            return 0;

        LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr();
        if (ch)
        {
            DWORD mountVnum = (DWORD) lua_tonumber(L, 1);
            ch->StartRiding();
            ch->MountVnum(mountVnum);
            ch->HorseSummon(false);
            ch->SetHorseLevel(21);
        }
        return 0;
    }

Tekrar arat:
Genişlet Daralt Kopyala
            { "mount",            pc_mount            },
Altına ekle:
Genişlet Daralt Kopyala
            { "mount_vnum",        pc_mount_vnum        },

2) Server/game/src/char_skill.cpp​

Arat:
Genişlet Daralt Kopyala
    int CHARACTER::GetMountType() const
    {
        DWORD mountVnum = GetMountVnum();
        if (mountVnum == 0)
            return MOUNT_TYPE_NONE;

Hemen altına ekleyebilir veya switch bloğu dahil edebilirsin:
Genişlet Daralt Kopyala
        if (mountVnum == 34179)
            return MOUNT_TYPE_COMBAT;

(Böylece binek üstünden düz vuruş serbest olur ama at skilleri kilitli kalır).

3) Server/game/src/cmd_general.cpp​

Ctrl+G bastığımızda ya da attan inmek istediğimizde ejderhanın altımızdan sorunsuz kaybolması için:
Arat:
Genişlet Daralt Kopyala
ACMD(do_unmount)
{

Komple fonksiyonu değiştir:
Genişlet Daralt Kopyala
ACMD(do_unmount)
{
    if (!ch->IsRiding())
        return;

    ch->StopRiding();
    ch->HorseSummon(false);
}

7. Server Source Derleme (Build)​

Kaynak kodlarımızdaki düzenlemeleri bitirdikten sonra putty terminalimize bağlanıyoruz:

putty:
Genişlet Daralt Kopyala
cd /usr/src/server/game/src *değişkenlik gösterebilir
gmake clean
gmake all -j4

(Eğer MartySama'nın kendi python yönetim panelini kullanıyorsanız, ana dizinde python admin_panel.py yazıp 888 seçeneğini seçerek source'u otomatik derleyip game dosyasını yerine kopyalatabilirsiniz).

8. Quest Tarafı, quest_functions ve quest_list​

a) server/share/locale/turkey/quest/quest_functions dosyasını açtım ve en alta source'a yeni eklediğimiz fonksiyonu yazdım:​

pc.mount_vnum

b) quest_list dosyasını açıp en alta yazacağımız questin yolunu ekledim:​

systems/ejderha_kapsulu.quest

c) Quest Dosyası (systems/ejderha_kapsulu.quest)​

quest/systems/ klasörünün içine ejderha_kapsulu.quest adında dosya oluşturup içine yapıştırdım:

Quest oluştur:
Genişlet Daralt Kopyala
quest ejderha_kapsulu begin
    state start begin
        when 34179.use begin
            if pc.is_mount() then
                pc.mount_vnum(0)
            else
                pc.mount_vnum(34179)
            end
        end
    end
end

d) Questleri Derleme:​

İster quest dizininde ./qc systems/ejderha_kapsulu.quest çekin, isterseniz yine MartySama admin panelinden 777 seçeneğini seçip tüm quest listesini baştan otomatik derletin. Ardından oyunda bir GM karakter ile /reload q ve /reload p çekiyoruz


Hepsi bu kadar arkadaşlar. Oyuna girip /i 34179 yazdığınızda Dragon Kapsülü envantere geliyor. Sağ tıkladığınızda direkt ejderhanın üstüne geçiyorsunuz, üzerinden düz vuruş yapabiliyorsunuz ve Ctrl+G ya da tekrar sağ tık yaptığınızda binek kaybolup karakter yere basıyor.

Takıldığınız veya kafanıza yatan/yatmayan bir yer olursa konu altından yazın, elimden geldiğince yardımcı olurum.



Tokyo Ghoul GIF
 
sagol dostum seninde eline saglik kolay gelsin basarilar.

files veya saltanat ile ilgili bisi lazim veya bi sorun olursa yazabilirsin
 
Paylaşım ve katkıların için teşekkürler arayan varsa faydalı bir konu ama hayatımda (şahsi olarak) gördüğüm en boş konulardan top5 tenks. bu yorumu yazma sebebimde boşuna konuyu okumuş olmam başka açıklaması yok.
 
Paylaşım ve katkıların için teşekkürler arayan varsa faydalı bir konu ama hayatımda (şahsi olarak) gördüğüm en boş konulardan top5 tenks. bu yorumu yazma sebebimde boşuna konuyu okumuş olmam başka açıklaması yok.
Konu başlığında ne olduğu yazıyordu zaten hiç tıklamana gerek bile yoktu o zaman ve teşekkürler sadece yaptığım şeyi paylaştım saltanat sevenlerin illaki işine yarıyacak bir şey diye düşündüm
 
Geri
Üst