Metin2 Source Fonksiyonları

Whistle

Ruhsuz :/
Kurucu
Geliştirici
Yardımsever Üye
Mesaj
11.941
Çözümler
567
Beğeni
13.659
Puan
5.915
Ticaret Puanı
2
Merhaba arkadaşlar,
Oyunun kaynak kodlarında düzenlemeler yaparken hangi fonksiyonların ne işe yaradığını bilmemiz gerekir.

1.) Bu fonksiyonlar genelde nerelerde kullanılır?

" Fonksiyonlar döngü bloklarının içinde kullanılır ve işlemi gerçekleştirirler . Genellikle if > olarak kullanılırlar fakat daha birçok alternatifi mevcuttur . Örnek verelim;
C++:
Genişlet Daralt Kopyala
switch (dwVnum)

{
case 70006
    {
        EffectPacket(SE_DXUP_PURPLE)
    }

}

Bu 70006 itemine tıklandığında Mor İksir efekti çıkarmasını sğlayacaktır .

Bunun gibi güzel küçük sistemleri Gamenize aşağıdaki fonksiyonlar sayesinde ekleyebilirsiniz;
Efekler;
C++:
Genişlet Daralt Kopyala
EffectPacket(SE_CHINA_FIREWORK);   Havai Fişek Topacı Efekti
EffectPacket(SE_CHINA_FIREWORK);   Çin Havai Fişekleri Efekti
EffectPacket(SE_HPUP_RED);  Kırmızı Efekti
EffectPacket(SE_SPUP_BLUE);  Mavi İksir Efekti
EffectPacket(SE_EQUIP_RAMADAN_RING);  Hilal Yüzüğü Efekti
EffectPacket(SE_EQUIP_HALLOWEEN_CANDY);  Lolipop Efekti
EffectPacket(SE_EQUIP_HAPPINESS_RING);   Mutluluk Yüzüğü Efekti
EffectPacket(SE_EQUIP_LOVE_PENDANT);    Ebedi Aşk Tılsımı Efekti
EffectPacket( SE_AUTO_HPUP );  Oto Kırmızı İksir Efekti
EffectPacket( SE_AUTO_SPUP );  Oto Mavi İksir Efekti
EffectPacket(SE_DXUP_PURPLE); Mor İksir Efekti
EffectPacket(SE_SPEEDUP_GREEN); Yeşil İksir Efekti

İtem Fonksiyonları;
C++:
Genişlet Daralt Kopyala
RemoveItem(item);  İtemi Siler
SetCount; İtem Miktarını Ayarlar.
GetCount; İtem Miktarını Çeker.
GetName; İtemin İsmini Gösterir.
GetSockets; İtemin Boşluklarını Gösterir.
GetWarFlag; İtemin Giyilebirliğini Gösterir.
Bunun yanında unutmamak gerekir, ()-1); yazan yere 0 yazarsanız oynama olmaz +1 yazarsanız 1 artar.

İtem Ara Fonksiyonları;
Kod:
Genişlet Daralt Kopyala
AutoGiveItem  İtem Verir
Unutmamak gerekir ki döngü içerisinde işlem olması şarttır.

Bonus Fonksiyonları;
Kod:
Genişlet Daralt Kopyala
AddAffect
Bu fonksiyon genellikle case komutundan sonra kullanılır diyebiliriz. İtemin size bonus vermesini veya iksirlerin, Havai Fişeklerin çalışmasını sağlayan fonksiyondur. Bunu kullanım örnekleriyle sıralayalım.

AddAffect(AFFECT_CHINA_FIREWORK, POINT_STUN_PCT, 30, AFF_CHINA_FIREWORK, 5*60, 0, true);
"Havai Fişek Bonusu %30 sersemletici saldırı verir. "

Oradaki, POINT_STUN_PCT 30

Efsun: Kırmızı gösterdiğim yer.
Oranı: Yeşil gösterdiğim yerdir aşağıdaki listeye göre seçip herhangi bir iteme ekleyebilirsiniz.
C++:
Genişlet Daralt Kopyala
POINT_HP
POINT_SP
POINT_ST
POINT_HT
POINT_DX
POINT_IQ
C++:
Genişlet Daralt Kopyala
POINT_DEF_GRADE
C++:
Genişlet Daralt Kopyala
POINT_ATT_SPEED
POINT_ATT_GRADE
POINT_MOV_SPEED
POINT_CASTING_SPEED
POINT_MAGIC_ATT_GRADE
POINT_MAGIC_DEF_GRADE
POINT_HP_REGEN
POINT_SP_REGEN
POINT_POISON_PCT
POINT_STUN_PCT
POINT_SLOW_PCT
POINT_CRITICAL_PCT
POINT_PENETRATE_PCT
POINT_ATTBONUS_HUMAN
POINT_ATTBONUS_ANIMAL
POINT_ATTBONUS_ORC
POINT_ATTBONUS_MILGYO
POINT_ATTBONUS_UNDEAD
POINT_ATTBONUS_DEVIL
POINT_ATTBONUS_INSECT
POINT_ATTBONUS_FIRE
POINT_ATTBONUS_ICE
POINT_ATTBONUS_DESERT
POINT_ATTBONUS_MONSTER
POINT_ATTBONUS_WARRIOR
POINT_ATTBONUS_ASSASSIN
POINT_ATTBONUS_SURA
POINT_ATTBONUS_SHAMAN
POINT_RESIST_WARRIOR
POINT_RESIST_ASSASSIN
POINT_RESIST_SURA
POINT_RESIST_SHAMAN
POINT_STEAL_HP
POINT_STEAL_SP
POINT_MANA_BURN_PCT
POINT_BLOCK
POINT_DODGE
POINT_RESIST_SWORD
POINT_RESIST_TWOHAND
POINT_RESIST_DAGGER
POINT_RESIST_BELL
POINT_RESIST_FAN
POINT_RESIST_BOW
POINT_RESIST_FIRE
POINT_RESIST_ELEC
POINT_RESIST_MAGIC
POINT_RESIST_WIND
POINT_REFLECT_MELEE
POINT_POISON_REDUCE
POINT_IMMUNE_STUN
POINT_IMMUNE_SLOW
POINT_IMMUNE_FALL
POINT_ATT_GRADE_BONUS
POINT_DEF_GRADE_BONUS
POINT_MAGIC_ATT_GRADE_BONUS
POINT_MAGIC_DEF_GRADE_BONUS
POINT_RESIST_ICE
POINT_RESIST_EARTH
POINT_RESIST_DARK
POINT_RESIST_CRITICAL
POINT_RESIST_PENETRATE

2 - ) Fonksiyonlar hakkında bilinmesi gerekenler ara fonksiyonlar False, True fonksiyonları;

Fonksiyonlar içerisinde bazı "return false; ", "return true;" gibi fonksiyonlar görebilirsiniz . "return true;" işleme izin verir "return false;" işleme izin vermez . Örnek Return false ile bir void döngü bloğu yazalım.
C++:
Genişlet Daralt Kopyala
bool CAN_ENTER_ZONE(const LPCHARACTER& ch, int map_index){
    switch (map_index)
    {
    case 351:
    case 352:
        if (ch->GetLevel() < 100)
            return false;
    }
    return true;
}
Bu döngü bloğu var oldukça 351, 352 index kodlu haritalara giriş yapılması için 100. Seviye olmak gerekecektir. Eklemek isteyenler char.cpp'ye ekleyebilirler.

Bunu her şekilde kullanabilirsiniz.

2.1-) Ara Fonksiyonlar, Bilinmesi Gerekenler.
Ara Fonksiyonlar döngü bloğu içerisindeki Ana Fonksiyon (İşlem), Ara Fonksiyon (İşlem sonrası işlem) genellikle bug çözümleri için kullanır, örneğin ChatPacket bir Ara Fonksiyondur chat paketleri Ara Fonksiyon olarak kullanılır bir örnek işleyelim.
C++:
Genişlet Daralt Kopyala
  if (GetSkillLevel(SKILL_COMBO) == 0 && GetLevel() < 30)    {
        ChatPacket(CHAT_TYPE_INFO, LC_TEXT("@@@@@@@"));
        return false;

    }
Buradaki return false; Ana Fonksiyondur 30. Seviye ve aşağısının COMBO kitabı kullanamamasını söyler. ChatPacket Ara Fonksiyondur oyuncuya 30. Seviye olmasını söyler.

3 - ) Manager, Çağırma Fonksiyonları.

Şimdide Manager Komutlarına deyinelim. Managerler, item dönüşümü, karakter hareket etmesi gibi işlemleri gerçekleştiren fonksiyonlardır. Bunları fonksiyon başlarında çağırabiliriz switchler ilede bölebiliriz.
Örneklendirelim;
C++:
Genişlet Daralt Kopyala
CRefineManager & rm = CRefineManager::instance();


    const TRefineTable* prt = rm.GetRefineRecipe(item->GetRefineSet());


    if (!prt)
    {
        sys_err("RefineInformation NOT GET REFINE SET %d", item->GetRefineSet());
        ChatPacket(CHAT_TYPE_INFO, LC_TEXT("@@@@@@@"));
        return false;

    }
Bu itemin RefineSet sayısının Refine_proto üzerinde bulunmadığında vereceği Syserr ve oyuncuya göstereceği ChatPacket. Bu tür bir döngü bloğunda CRefineManager 1. Ana Fonksiyon, sys_err (işlem) 2. Ana Fonksiyon, return false; (işlem 2 ) 3. Ana Fonksiyon, ChatPacket Ara Fonksiyon olarak adlandırılabilir bir döngü bloğunda istediğiniz kadar ana ve ara fonksiyon kullanabilirsiniz.
 
Son düzenleme:
Konu içeriği düzenlenmiştir. :)
 
gerçekten ellerine sağlık çok güzel anlatıcı bi çalışma olmuş yalnız bi sorum olucaktı bu yabancı kodları nerede kullanıcağımız ve hangi anlama geldiğini bilemiyorum yeni başladım bende türkçe karşılığı olan bu kodları nerede bulabilirim acaba?
 
gerçekten ellerine sağlık çok güzel anlatıcı bi çalışma olmuş yalnız bi sorum olucaktı bu yabancı kodları nerede kullanıcağımız ve hangi anlama geldiğini bilemiyorum yeni başladım bende türkçe karşılığı olan bu kodları nerede bulabilirim acaba?

Forumlarda paylaşılan bazı fileslerde yanlarında kaynak kodlarını da verir. Server ve Client’in derlenmemiş halidir. C++ kodlarıyla yazılmıştır. Dosya uzantıları cpp ve h olarak kullanılır. Bu konuda ki fonksiyonlar da kaynak kodlarında sistem yazarken oyun verilerini erişmek ve kullanmak için. :)
 
Geri
Üst