Create İtem [C++] (Oyun İçi Edit İtem Yaratma)

  • Konuyu başlatan Laleci
  • Başlangıç tarihi
  • Cevaplar 5
  • Görüntüleme 2K
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...

Laleci

www.laleci3d.work
Katılım
27 Nis 2018
Konular
121
Mesajlar
2,610
Online süresi
1ay 24g
Reaksiyon Skoru
1,531
Altın Konu
33
Başarım Puanı
261
TM Yaşı
7 Yıl 11 Ay 28 Gün
MmoLira
16,563
DevLira
91

Metin2 EP, Valorant VP dahil tüm oyun ürünlerini en uygun fiyatlarla bulabilir, Item ve Karakterlerinizi hızlıca satabilirsiniz. HEMEN TIKLA!

Selamlar,
Sistem Videoda Gösteriliyor Kısaca Söylemek Gerekirse:
Oyun İçinde Kod İle Edit Yaratabiliyosunuz.
...

Kod:
[/B]
[B]    //////////////////////////////////////////////
  
                      ##cmd.cpp  

    //////////////////////////////////////////////


//Arat:
ACMD(do_item);

//Değiştir:
ACMD(do_create_item);
ACMD(do_item);


//Arat:
    { "item",        do_item,        0,            POS_DEAD,    GM_GOD        },

//Değiştir:
    {"create_item",        do_create_item,        0,            POS_DEAD,    GM_IMPLEMENTOR        },
    { "item",        do_item,        0,            POS_DEAD,    GM_GOD        },

  
  
  
  
  
    //////////////////////////////////////////////
  
                    ##cmd_gm.cpp  

    //////////////////////////////////////////////

//En Üste Ekleyiniz:

#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);
}



//Arat:
ACMD(do_item);

//Altına ekle:

ACMD(do_create_item)
{
    char item[256];
    char bonus[1024];
    two_arguments(argument, item, sizeof(item), bonus, sizeof(bonus));
    if (!*item || !*bonus)
    {
        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, "Lipseste , intre valoare si bonus.");
        return;
    }
    if (bonus[(strlen(bonus)-1)] == ':') {
        ch->ChatPacket(CHAT_TYPE_INFO, "Lipseste : intre bonus si valoare.");
        return;
    }
    if (strstr(bonus, ":") == NULL) {
        ch->ChatPacket(CHAT_TYPE_INFO, "Lipseste : intre bonus si valoare.");
        return;
    }
    if (strstr(bonus, ",") == NULL) {
        ch->ChatPacket(CHAT_TYPE_INFO, "Ai adaugat 1 bonus.");
        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, "Acest item nu exista.");
            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));
            ch->ChatPacket(CHAT_TYPE_INFO, "Succes!");
        }else{
            M2_DESTROY_ITEM(i);
            ch->ChatPacket(CHAT_TYPE_INFO, "Nu ai suficient spatiu in inventar.");
        }
    }else{
        std::vector<std::string> bonus1;
        split(std::string(bonus), ',', bonus1);
        if (bonus1.size()>0) {
            ch->ChatPacket(CHAT_TYPE_INFO, "Ai adaugat %d bonusuri.", (int)bonus1.size());
            if (countChars(bonus, ':') != (int)bonus1.size()) {
                ch->ChatPacket(CHAT_TYPE_INFO, "");
                ch->ChatPacket(CHAT_TYPE_INFO, "Lipseste , intre valoare si bonus.");
                return;              
            }
            int vnum=0;
            str_to_number(vnum, item);
            LPITEM i = ITEM_MANAGER::instance().CreateItem(vnum);
            if (!i) {
                ch->ChatPacket(CHAT_TYPE_INFO, "Acest item nu exista.");
                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));
                ch->ChatPacket(CHAT_TYPE_INFO, "Succes!");
            }else{
                M2_DESTROY_ITEM(i);
                ch->ChatPacket(CHAT_TYPE_INFO, "Nu ai suficient spatiu in inventar.");
            }
        }
    }
}


 
Son düzenleme:
Teşekkürler
 
Ve L16 Sahalarda
 
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...

Şu an konuyu görüntüleyenler (Toplam : 1, Üye: 0, Misafir: 1)