- 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ış!
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.
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.