- 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 :
İtemin üzerine geldiğimizde adı ve altındaki açıklama yazısının çıkması için:
(Yine sütunlar arasına boşluk değil, TAB tuşu ile boşluk bırakıyoruz).
Aynı şekilde mob_names.txt içine:
(Böylece binek üstünden düz vuruş serbest olur ama at skilleri kilitli kalır).
(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).
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.
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.
Linkleri görebilmek için
giriş yap veya kayıt ol.
kullanıcağımız dosyalar:
Linkleri görebilmek için
giriş yap veya kayıt ol.
virüstotal :
Linkleri görebilmek için
giriş yap veya kayıt ol.
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::
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 Dragonb) Kapsülün sağ tıklayınca kaybolmasını istemediğim için type'ını ITEM_QUEST olarak ayarladım:
item proto:
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.
1) Server/game/src/questlua_pc.cpp
Arat:
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:
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:
{ "mount", pc_mount },
Altına ekle:
{ "mount_vnum", pc_mount_vnum },
2) Server/game/src/char_skill.cpp
Arat:
int CHARACTER::GetMountType() const
{
DWORD mountVnum = GetMountVnum();
if (mountVnum == 0)
return MOUNT_TYPE_NONE;
Hemen altına ekleyebilir veya switch bloğu dahil edebilirsin:
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:
ACMD(do_unmount)
{
Komple fonksiyonu değiştir:
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:
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_vnumb) quest_list dosyasını açıp en alta yazacağımız questin yolunu ekledim:
systems/ejderha_kapsulu.questc) 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:
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 çekiyoruzHepsi 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.

