Neler yeni

Foruma hoş geldin 👋, Ziyaretçi

Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak tamamen ücretsizdir.

  • Merhaba Değerli Ziyaretçimiz, ForumaGel ailesi seni bekliyor! 🌟 Aramıza katılarak güçlü ve samimi topluluğumuzun bir parçası olabilirsin. Burada her üye değerli, her katkı kıymetli. Şimdi üye ol, bizimle birlikte gelişmenin ve keyifli sohbetlerin tadını çıkar! Sevgi ve Saygılarla, ForumaGel Yönetimi ❤️
Yan Yana Banner

[GM] Oyun İçi Edit İtem Oluşturma Sistemi (1 Görüntüleyici)

404notfound
Yan Yana Banner
Katılım
7 Nis 2025
Konular
75
Mesajlar
485
Çözümler
1
Tepkime puanı
114
Puan
93
Konum
İstanbul
Web sitesi
forumagel.com
Merhaba,

Bir süre önce yabancı bir forumda, komut aracılığıyla src üzerinden eşya düzenleme yöntemine dair bir konuya denk gelmiş ve denemiştim. Bu yöntem sorunsuz çalışsa da en büyük dezavantajı oldukça zahmetli olmasıydı. Bu yüzden, pratikliği artırmak adına tanıdık bir Python efsun botu üzerinde bazı düzenlemeler yaparak bu iş için uygun hale getirdim. Fazla detayına girmedim, ancak mevcut haliyle testlerinizde kullanabilirsiniz. Sonuçta, üzerinde uzun uzun uğraşılması gereken bir sistem değil. Bu yüzden, dosya ve fonksiyon isimleri gibi ayrıntılara müdahale etmedim.

Bu küçük sistem, yalnızca meraklı geliştiriciler ve files geliştirme süreci için hazırlanmıştır. Dilerseniz daha da geliştirerek kullanabilirsiniz; tamamen size kalmış!​
Sistemin Özellikleri Kısaca:
  • GM Karakterler İçin: Bu sistem yalnızca GM (Game Master) karakterleri tarafından kullanılabilir.​
  • Item Efsun İşlemleri: Sürüklenen item üzerinden efsun değiştirme veya bozma gibi işlemler bulunmamaktadır. Sistem, sadece sürüklenen itemin vnum değerini alır ve bu vnum ile yeni bir item oluşturur. Örneğin, +3 olan bir item sürüklendiğinde, oluşacak yeni item de +3 olacaktır.​
  • Bonus Oranları: Bonus oranları, maksimum 32767 ile sınırlıdır. Bu sınırı aşmamak koşuluyla istediğiniz değeri kullanabilirsiniz.​
  • Bot İşlevleri ve Efsun İşlemleri: Python dosyasındaki bot işlevleri ve efsunlarla ilgili diğer işlemler kaldırılmıştır.​
  • Sekme Çokluğu: Birden fazla item sürükleyip, her bir item için farklı efsunlar belirleyerek her birini ayrı ayrı oluşturabilirsiniz.​
  • Tekrar Eklenemezlik: Aynı vnum’a sahip itemler birden fazla kez sürüklenip eklenemez. Aynı itemi birden fazla oluşturmak isterseniz, item oluşturma butonuna 2 veya daha fazla kez tıklamanız gerekmektedir.​
  • GUI Düzenlemeleri: GUI (Grafik Kullanıcı Arayüzü) ile ilgili bazı küçük hatalar giderilmiştir.​
Bu sistemin kullanımını ve özelliklerini göz önünde bulunduracak olursak, geliştirme sürecinde faydalı olacağını düşünüyorum. Eğer üzerinde daha fazla geliştirme yapıp kullanmak isterseniz veya detaylandırmak isterseniz, bu tamamen sizin tercihinize kalmış.


cmd.cpp açın;

Bulun.

Kod:
ACMD(do_item);

Altına ekleyin.

Kod:
ACMD(do_create_item);

Bulun.

Kod:
{ "item",        do_item,        0,            POS_DEAD,    GM_GOD        },

Altına ekleyin.

Kod:
{"create_item",        do_create_item,        0,            POS_DEAD,    GM_IMPLEMENTOR        },


cmd_gm.cpp dosyasını açın ve #include satırlarının altına ekleyin.

Kod:
// CREATE_ITEM_START
#include <iostream>
#include <vector>
#include <string>
void split(const std::string& s, char delim, std::vector<std::string>& v) {
    int i = 0;
    int pos = s.find(delim);
    while (pos != std::string::npos)
    {
        v.push_back(s.substr(i, pos-i));
        i = ++pos;
        pos = s.find(delim, pos);
        if (pos == std::string::npos) v.push_back(s.substr(i, s.length()));
    }
}

int countChars(char* s, char c)
{
    return *s == '\0' ? 0 : countChars( s + 1, c ) + (*s == c);
}
// CREATE_ITEM_END

Bulun.

Kod:
ACMD(do_item);
{
    ...
}

Altına ekleyin.

Kod:
// CREATE_ITEM_START
ACMD(do_create_item)
{
    char item[256];
    char bonus[1024];
    two_arguments(argument, item, sizeof(item), bonus, sizeof(bonus));
    if (!*item || !*bonus)
    {
        // HATA - Kullanim ornegi >
        ch->ChatPacket(CHAT_TYPE_INFO, "/create_item <cod_item> <b1:v1,b2:v2,b3:v3,b4:v4,b5:v5>");
        return;
    }
    if (bonus[(strlen(bonus)-1)] == ',')
    {
        ch->ChatPacket(CHAT_TYPE_INFO, "Eksik veri girildi. Kontrol edin.");
        return;
    }
    if (bonus[(strlen(bonus)-1)] == ':')
    {
        ch->ChatPacket(CHAT_TYPE_INFO, "Bonus ve deger arasinda eksik var.");
        return;
    }
    if (strstr(bonus, ":") == NULL)
    {
        ch->ChatPacket(CHAT_TYPE_INFO, "Bonus ve deger arasinda eksik var.");
        return;
    }
    if (strstr(bonus, ",") == NULL) {
        ch->ChatPacket(CHAT_TYPE_INFO, "Tamamlandi");
        int vnum=0;
        str_to_number(vnum, item);
        LPITEM i = ITEM_MANAGER::instance().CreateItem(vnum);
        if (!i) {
            ch->ChatPacket(CHAT_TYPE_INFO, "");
            ch->ChatPacket(CHAT_TYPE_INFO, "Bu item mevcut degil.");
            return;
        }
        int bonus_vnum=0;
        int bonus_value=0;
        std::vector<std::string> bonus2;
        split(std::string(bonus), ':', bonus2);
        str_to_number(bonus_vnum, std::string(bonus2[0]).c_str());
        str_to_number(bonus_value, std::string(bonus2[1]).c_str());
        i->SetForceAttribute(0, bonus_vnum, bonus_value);
        i->SetSocket(0, 1);
        int inventario = ch->GetEmptyInventory(i->GetSize());
        if (inventario != -1)
        {
            i->AddToCharacter(ch, TItemPos(INVENTORY, inventario));
        }else{
            M2_DESTROY_ITEM(i);
            ch->ChatPacket(CHAT_TYPE_INFO, "Envanterde yeterli alan yok!");
        }
    }else{
        std::vector<std::string> bonus1;
        split(std::string(bonus), ',', bonus1);
        if (bonus1.size()>0)
        {
            ch->ChatPacket(CHAT_TYPE_INFO, "Tamamlandi!", (int)bonus1.size());
            if (countChars(bonus, ':') != (int)bonus1.size()) {
                ch->ChatPacket(CHAT_TYPE_INFO, "");
                ch->ChatPacket(CHAT_TYPE_INFO, "Eksik veri girildi. Kontrol edin.");
                return;         
            }
            int vnum=0;
            str_to_number(vnum, item);
            LPITEM i = ITEM_MANAGER::instance().CreateItem(vnum);
            if (!i)
            {
                ch->ChatPacket(CHAT_TYPE_INFO, "Bu item mevcut degil.");
                return;
            }
            int b_size=bonus1.size();
            if (bonus1.size()>6) b_size=7;
            int bonus_vnum=0;
            int bonus_value=0;
            for (int n=0; n<b_size; n++) {
                std::vector<std::string> bonus2;
                split(std::string(bonus1[n]), ':', bonus2);
                str_to_number(bonus_vnum, std::string(bonus2[0]).c_str());
                str_to_number(bonus_value, std::string(bonus2[1]).c_str());
                i->SetForceAttribute(n, bonus_vnum, bonus_value);
            }
            i->SetSocket(0, 1);
            int inventario = ch->GetEmptyInventory(i->GetSize());
            if (inventario != -1)
            {
                i->AddToCharacter(ch, TItemPos(INVENTORY, inventario));
            }
            else
            {
                M2_DESTROY_ITEM(i);
                ch->ChatPacket(CHAT_TYPE_INFO, "Envanterde yeterli alan yok.");
            }
        }
    }
}
// CREATE_ITEM_END

game. py açın.

Bulun.

Kod:
onPressKeyDict[app.DIK_F4]    = lambda : self.__PressQuickSlot(7)

Altına ekleyin.(müsait F tuşunuz hangisiyse)

Kod:
onPressKeyDict[app.DIK_F5]    = lambda : self.OpenItemCreator()

Dosyanın en altına ekleyin.

Kod:
    def OpenItemCreator(self):
        import aiSwitchbot
        creator = aiSwitchbot.Bot()
        creator.Show()

Son olarak ekte verilen dosyayı root'un içine atın.


Ziyaretçiler için gizlenmiş link, görmek için kayıt olun. Giriş yap veya üye ol.

Ziyaretçiler için gizlenmiş link, görmek için kayıt olun. Giriş yap veya üye ol.


 

Şu an konuyu görüntüleyenler

Tema özelleştirme sistemi

Bu menüden forum temasının bazı alanlarını kendinize özel olarak düzenleye bilirsiniz

Zevkini yansıtan rengi seç

Geniş / Dar görünüm

Temanızı geniş yada dar olarak kullanmak için kullanabileceğiniz bir yapıyı kontrolünü sağlayabilirsiniz.

Izgara görünümlü forum listesi

Forum listesindeki düzeni ızgara yada sıradan listeleme tarzındaki yapının kontrolünü sağlayabilirsiniz.

Resimli ızgara modu

Izgara forum listesinde resimleri açıp/kapatabileceğiniz yapının kontrolünü sağlayabilirsiniz.

Kenar çubuğunu kapat

Kenar çubuğunu kapatarak forumdaki kalabalık görünümde kurtulabilirsiniz.

Sabit kenar çubuğu

Kenar çubuğunu sabitleyerek daha kullanışlı ve erişiminizi kolaylaştırabilirsiniz.

Köşe kıvrımlarını kapat

Blokların köşelerinde bulunan kıvrımları kapatıp/açarak zevkinize göre kullanabilirsiniz.

Geri