Çözüldü Yeni Komutlar Eklemek

Bu konu çözüme ulaştırılmıştır. Çözüm için konuya yazılan tüm yorumları okumayı unutmayın. Eğer konudaki yorumlar sorununuzu çözmediyse yeni bir konu açabilirsiniz.
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.

CrownOfStone

Üye
Üye
Mesaj
53
Beğeni
5
Puan
436
Ticaret Puanı
0
Whistle'ın Udemy için yaptığı altyapıyı kullanıyorum.

Oyunda GM iken "/" vasıtası ile kullanabildiğimiz çeşit çeşit komutlar var.
/full /set /block /level vb. vb.

bu kodlardan daha fazlasının olmasını istiyorum. /full yerine /myitem gibi bir şey yazdığımda karakterime benim daha önceden ayarladığım bazı editli eşyaların eklenmesi, /upgrade gibi bir şey yazdığımda karakterime hareket hızı saldırı hızı gibi bonuslar eklenmesi vb. vb. şu an aklıma rasgele bunlar geldi.

"cmd_gm.cpp" dosyası içerisinde bu konu ile alakalı şeyler buldum ama konudaki yetersizliğimden tam olarak nasıl uygulamaya geçeceğimi anlayamadım.

AYRICA: cmd_gm.cpp dosyasının içerisinde /full /set vb. komutların oyun içi yansımasını yapacak kodları gördüm, ancak /full ile tetiklenir gibi bir kod göremedim. Metin2 bu dosyanın içerisindeki kodları hangi diğer dosya ile oyunda CHAT kısmına yazınca etkileşime geçecek hale getiriyor.
 
Whistle'ın Udemy için yaptığı altyapıyı kullanıyorum.

Oyunda GM iken "/" vasıtası ile kullanabildiğimiz çeşit çeşit komutlar var.
/full /set /block /level vb. vb.

bu kodlardan daha fazlasının olmasını istiyorum. /full yerine /myitem gibi bir şey yazdığımda karakterime benim daha önceden ayarladığım bazı editli eşyaların eklenmesi, /upgrade gibi bir şey yazdığımda karakterime hareket hızı saldırı hızı gibi bonuslar eklenmesi vb. vb. şu an aklıma rasgele bunlar geldi.

"cmd_gm.cpp" dosyası içerisinde bu konu ile alakalı şeyler buldum ama konudaki yetersizliğimden tam olarak nasıl uygulamaya geçeceğimi anlayamadım.

AYRICA: cmd_gm.cpp dosyasının içerisinde /full /set vb. komutların oyun içi yansımasını yapacak kodları gördüm, ancak /full ile tetiklenir gibi bir kod göremedim. Metin2 bu dosyanın içerisindeki kodları hangi diğer dosya ile oyunda CHAT kısmına yazınca etkileşime geçecek hale getiriyor.

Senin için kısaca özet geçiyim istersen bu olay için.
Server/game/src/cmd.cpp
Aşağıdaki gibi bir örnek yapabilirim ama içeri özelleştirmesi tabi ki sende.

Genel kullanımı aşağıdaki gibi.
cmd_gm > gm
cmd_genarel > genel



Örnk:

cmd.cpp:
Genişlet Daralt Kopyala
//Ara
struct command_info cmd_info[] =

//Üstüne Ekle
ACMD (do_full_set);

//Ara
struct command_info cmd_info[] =

//İçinde Bul (en altta olacak)
NULL

//Üstüne Ekle
    { "myitem",                    do_my_item,                    0,                    POS_DEAD,        GM_PLAYER        },

cmd_gm.cpp:
Genişlet Daralt Kopyala
//En Alta Ekle

ACMD(do_my_item)
{
    extern void do_my_item_set (LPCHARACTER ch, const char* argument, int cmd, int subcmd);
    do_my_item_set (ch, NULL, 0, 0);
}

ACMD(do_my_item_set)
{
    BYTE job = ch->GetJob();
    LPITEM item;
    for (int i = 0; i < 6; i++)
    {
        item = ch->GetWear (i);
        if (item != NULL)
            ch->UnequipItem(item);
    }
    item = ch->GetWear (WEAR_SHIELD);
    if (item != NULL)
        ch->UnequipItem(item);

    switch (job)
    {
        case JOB_SURA:
        {
            item = ITEM_MANAGER::instance().CreateItem (11699);
            if (!item || !item->EquipTo (ch, item->FindEquipCell (ch)))
                M2_DESTROY_ITEM (item);
            item = ITEM_MANAGER::instance().CreateItem (13049);
            if (!item || !item->EquipTo (ch, item->FindEquipCell (ch)))
                M2_DESTROY_ITEM (item);
            item = ITEM_MANAGER::instance().CreateItem (15189);
            if (!item || !item->EquipTo (ch, item->FindEquipCell (ch)))
                M2_DESTROY_ITEM (item);
            item = ITEM_MANAGER::instance().CreateItem (189);
            if (!item || !item->EquipTo (ch, item->FindEquipCell (ch)))
                M2_DESTROY_ITEM (item);
            item = ITEM_MANAGER::instance().CreateItem (12529);
            if (!item || !item->EquipTo (ch, item->FindEquipCell (ch)))
                M2_DESTROY_ITEM (item);
            item = ITEM_MANAGER::instance().CreateItem (14109);
            if (!item || !item->EquipTo (ch, item->FindEquipCell (ch)))
                M2_DESTROY_ITEM (item);
            item = ITEM_MANAGER::instance().CreateItem (17209);
            if (!item || !item->EquipTo (ch, item->FindEquipCell (ch)))
                M2_DESTROY_ITEM (item);
            item = ITEM_MANAGER::instance().CreateItem (16209);
            if (!item || !item->EquipTo (ch, item->FindEquipCell (ch)))
                M2_DESTROY_ITEM (item);
        }
        break;
        case JOB_WARRIOR:
        {

            item = ITEM_MANAGER::instance().CreateItem (11299);
            if (!item || !item->EquipTo (ch, item->FindEquipCell (ch)))
            {
                M2_DESTROY_ITEM (item);
            }
            item = ITEM_MANAGER::instance().CreateItem (13049);
            if (!item || !item->EquipTo (ch, item->FindEquipCell (ch)))
            {
                M2_DESTROY_ITEM (item);
            }
            item = ITEM_MANAGER::instance().CreateItem (15189);
            if (!item || !item->EquipTo (ch, item->FindEquipCell (ch)))
            {
                M2_DESTROY_ITEM (item);
            }
            item = ITEM_MANAGER::instance().CreateItem (3159);
            if (!item || !item->EquipTo (ch, item->FindEquipCell (ch)))
            {
                M2_DESTROY_ITEM (item);
            }
            item = ITEM_MANAGER::instance().CreateItem (12249);
            if (!item || !item->EquipTo (ch, item->FindEquipCell (ch)))
            {
                M2_DESTROY_ITEM (item);
            }
            item = ITEM_MANAGER::instance().CreateItem (14109);
            if (!item || !item->EquipTo (ch, item->FindEquipCell (ch)))
            {
                M2_DESTROY_ITEM (item);
            }
            item = ITEM_MANAGER::instance().CreateItem (17109);
            if (!item || !item->EquipTo (ch, item->FindEquipCell (ch)))
            {
                M2_DESTROY_ITEM (item);
            }
            item = ITEM_MANAGER::instance().CreateItem (16109);
            if (!item || !item->EquipTo (ch, item->FindEquipCell (ch)))
            {
                M2_DESTROY_ITEM (item);
            }
        }
        break;
        case JOB_SHAMAN:
        {

            item = ITEM_MANAGER::instance().CreateItem (11899);
            if (!item || !item->EquipTo (ch, item->FindEquipCell (ch)))
            {
                M2_DESTROY_ITEM (item);
            }
            item = ITEM_MANAGER::instance().CreateItem (13049);
            if (!item || !item->EquipTo (ch, item->FindEquipCell (ch)))
            {
                M2_DESTROY_ITEM (item);
            }
            item = ITEM_MANAGER::instance().CreateItem (15189);
            if (!item || !item->EquipTo (ch, item->FindEquipCell (ch)))
            {
                M2_DESTROY_ITEM (item);
            }
            item = ITEM_MANAGER::instance().CreateItem (7159);
            if (!item || !item->EquipTo (ch, item->FindEquipCell (ch)))
            {
                M2_DESTROY_ITEM (item);
            }
            item = ITEM_MANAGER::instance().CreateItem (12669);
            if (!item || !item->EquipTo (ch, item->FindEquipCell (ch)))
            {
                M2_DESTROY_ITEM (item);
            }
            item = ITEM_MANAGER::instance().CreateItem (14109);
            if (!item || !item->EquipTo (ch, item->FindEquipCell (ch)))
            {
                M2_DESTROY_ITEM (item);
            }
            item = ITEM_MANAGER::instance().CreateItem (17209);
            if (!item || !item->EquipTo (ch, item->FindEquipCell (ch)))
            {
                M2_DESTROY_ITEM (item);
            }
            item = ITEM_MANAGER::instance().CreateItem (16209);
            if (!item || !item->EquipTo (ch, item->FindEquipCell (ch)))
            {
                M2_DESTROY_ITEM (item);
            }
        }
        break;
        case JOB_ASSASSIN:
        {

            item = ITEM_MANAGER::instance().CreateItem (11499);
            if (!item || !item->EquipTo (ch, item->FindEquipCell (ch)))
            {
                M2_DESTROY_ITEM (item);
            }
            item = ITEM_MANAGER::instance().CreateItem (13049);
            if (!item || !item->EquipTo (ch, item->FindEquipCell (ch)))
            {
                M2_DESTROY_ITEM (item);
            }
            item = ITEM_MANAGER::instance().CreateItem (15189);
            if (!item || !item->EquipTo (ch, item->FindEquipCell (ch)))
            {
                M2_DESTROY_ITEM (item);
            }
            item = ITEM_MANAGER::instance().CreateItem (1139);
            if (!item || !item->EquipTo (ch, item->FindEquipCell (ch)))
            {
                M2_DESTROY_ITEM (item);
            }
            item = ITEM_MANAGER::instance().CreateItem (12389);
            if (!item || !item->EquipTo (ch, item->FindEquipCell (ch)))
            {
                M2_DESTROY_ITEM (item);
            }
            item = ITEM_MANAGER::instance().CreateItem (14109);
            if (!item || !item->EquipTo (ch, item->FindEquipCell (ch)))
            {
                M2_DESTROY_ITEM (item);
            }
            item = ITEM_MANAGER::instance().CreateItem (17189);
            if (!item || !item->EquipTo (ch, item->FindEquipCell (ch)))
            {
                M2_DESTROY_ITEM (item);
            }
            item = ITEM_MANAGER::instance().CreateItem (16189);
            if (!item || !item->EquipTo (ch, item->FindEquipCell (ch)))
            {
                M2_DESTROY_ITEM (item);
            }
        }
        break;
    }
}
 
1- Dediğiniz ifadeleri gerekli yerlere yerleştirdim
2- [Görsel 4-5-6] . . . . şeklinde olan yerleri TAB tuşu ile sekme şeklinde ayırılması için düzenledim.
3- Filezilla ya yeni dosyaları yükleyip üzerine yazdırdım ve STOP..sh START.sh ile baştan başlattım oyunu.

Problem: Çalışmadı
Nasıl anladım: Oyun içerisinde en yetkili GM iken , /myitem , /my item , /set my item, /set myitem, /do my item vb. komutları denedim ve sonuç alamadım.

Kendi çözümlerim:
[Görsel 2-3]
NULL yazısının üstüne gelen "myitem" fonksiyonunu yazdığım, cmd.cpp dosyasında yer alan bölgedeki myitem yazısının aralarına alt tire koydum, sonuç alamadım.

Ayrıca ilgisi var mı bilmiyorum ama myitem yazınca sadece komutu test edebilmek adına, bana item eklemek yerine, basitçe bi +10 hareket hızı olur veya sadece 1 tane basit bir eşyayı envanterime koymak olur vb. bir fonksiyon yerine getirse, çalıştığını görünce içini kendim düzenleyebilirim diye düşünüyorum.

Teşekkürler. (Soruna dair eksik bilgi verdiysem ikaz edin, gerekli yerlerin görsellerini de yükleyebilirim.)

mmo 03.webp


mmo 02.webp


mmo 01.webp


6.webp


5.webp


4.webp
 
En son bir moderatör tarafından düzenlenmiş:
1- Dediğiniz ifadeleri gerekli yerlere yerleştirdim
2- [Görsel 4-5-6] . . . . şeklinde olan yerleri TAB tuşu ile sekme şeklinde ayırılması için düzenledim.
3- Filezilla ya yeni dosyaları yükleyip üzerine yazdırdım ve STOP..sh START.sh ile baştan başlattım oyunu.

Problem: Çalışmadı
Nasıl anladım: Oyun içerisinde en yetkili GM iken , /myitem , /my item , /set my item, /set myitem, /do my item vb. komutları denedim ve sonuç alamadım.

Kendi çözümlerim:
[Görsel 2-3]
NULL yazısının üstüne gelen "myitem" fonksiyonunu yazdığım, cmd.cpp dosyasında yer alan bölgedeki myitem yazısının aralarına alt tire koydum, sonuç alamadım.

Ayrıca ilgisi var mı bilmiyorum ama myitem yazınca sadece komutu test edebilmek adına, bana item eklemek yerine, basitçe bi +10 hareket hızı olur veya sadece 1 tane basit bir eşyayı envanterime koymak olur vb. bir fonksiyon yerine getirse, çalıştığını görünce içini kendim düzenleyebilirim diye düşünüyorum.

Teşekkürler. (Soruna dair eksik bilgi verdiysem ikaz edin, gerekli yerlerin görsellerini de yükleyebilirim.)

18461 eklentisini görüntüle

18462 eklentisini görüntüle

18463 eklentisini görüntüle

18464 eklentisini görüntüle

18465 eklentisini görüntüle

18466 eklentisini görüntüle
2 tane full set olmuş onu do_my_item yap
 
2 tane full set olmuş onu do_my_item yap
Dediğiniz şekilde düzenledim görsel ektedir.
Önce direkt çalışıp çalışmadığını denedim;
/do my item, /myitem , /my item vb. denedim olmadı

stop.sh start.sh yaptıktan sonra tekrar denedim yine olmadı. (bu stop startı her seferinde yapmama gerek var mı onu da tam bilmiyorum.)
 

Dosya Eklentileri

  • new do my item.webp
    new do my item.webp
    87,2 KB · Gösterim: 29
Dediğiniz şekilde düzenledim görsel ektedir.
Önce direkt çalışıp çalışmadığını denedim;
/do my item, /myitem , /my item vb. denedim olmadı

stop.sh start.sh yaptıktan sonra tekrar denedim yine olmadı. (bu stop startı her seferinde yapmama gerek var mı onu da tam bilmiyorum.)
/my_item yazınca olmuyor mu
 
Kod blokların ve argüman tanımların tamamen boş değer döndürüyor gibi görünüyor. Emin değilim ancak gerekli argüman tanımları ve kontrolleri yok gibi.

Kısaca aşağıdaki basit örneği ele alarak mantığı ve kodları düzeltebilirsin:

cmd.cpp:
1-)
C++:
Genişlet Daralt Kopyala
{ "ozelbilgi",    do_ozelbilgi,    0,    POS_DEAD,    GM_LOW_WIZARD},
2-)
Kod:
Genişlet Daralt Kopyala
ACMD (do_ozelbilgi);

cmd.gm:
C++:
Genişlet Daralt Kopyala
ACMD(do_ozelbilgi)
{
    char arg1[256];
    argument = one_argument(argument, arg1, sizeof(arg1));

    if (!*arg1)
    {
        ch->ChatPacket(CHAT_TYPE_INFO, "Kullanim: /ozelbilgi oyuncu_adi");
        return;
    }

    LPCHARACTER tch;
    tch = CHARACTER_MANAGER::instance().FindPC(arg1);

    if (!tch)
    {
        ch->ChatPacket(CHAT_TYPE_INFO, "Oyuncu bulunamadi!");
        return;
    }
    else
    {
        // chate yaz
        ch->ChatPacket(CHAT_TYPE_INFO, "Oyuncuya bilgi gonderildi.."); // sende görünecek
        tch->ChatPacket(CHAT_TYPE_INFO, "Oyuncuda gorunecek mesaj.");
    }
  
}
 
Önceki "my_item" kodlarını çıkardım. Dediklerinizi ekledim.
Filezillaya yükledim (gerekli yerine) (/home/AltyapiServer/Srcs/Server/game/src)
stop.sh-start.sh yaptım (bunu her seferinde yapmama gerek var mı?)

Sonuç olumsuz.
 

Dosya Eklentileri

  • Kaiser 04.webp
    Kaiser 04.webp
    119,8 KB · Gösterim: 28
  • kaiser 03.webp
    kaiser 03.webp
    51,7 KB · Gösterim: 29
  • kaiser 02.webp
    kaiser 02.webp
    56,9 KB · Gösterim: 21
  • Kaiser 01.webp
    Kaiser 01.webp
    58,9 KB · Gösterim: 30
Önceki "my_item" kodlarını çıkardım. Dediklerinizi ekledim.
Filezillaya yükledim (gerekli yerine) (/home/AltyapiServer/Srcs/Server/game/src)
stop.sh-start.sh yaptım (bunu her seferinde yapmama gerek var mı?)

Sonuç olumsuz.
Build alınan game dosyasıyla giriş yaptığına emin misin?

Ve evet src de düzenleme yaptıktan sonra stop-start yapmak gerekir.
 
Çözüm
Build alınan game dosyasıyla giriş yaptığına emin misin?

Ve evet src de düzenleme yaptıktan sonra stop-start yapmak gerekir.
build alınan game dosyası ile giriş yapmak ne demek anlamadım. nasıl build yapıyoruz?

eğer halihazırda düzenlenmiş dosyaların filezillaya düzgün yüklenip yüklenmediğini soruyorsanız tekrardan kontrol ettim, filezilla içerisinden o dosyaları indirdim doğru şekilde yüklemişim, buraya da tekrardan filezilla içerisinden indirdiğim dosyaları yükledim
 
Özelden anydesk verme şansın varsa bir bakabilirim
build alınan game dosyası ile giriş yapmak ne demek anlamadım. nasıl build yapıyoruz?

eğer halihazırda düzenlenmiş dosyaların filezillaya düzgün yüklenip yüklenmediğini soruyorsanız tekrardan kontrol ettim, filezilla içerisinden o dosyaları indirdim doğru şekilde yüklemişim, buraya da tekrardan filezilla içerisinden indirdiğim dosyaları yükledim
 
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.
Üst