- Mesaj
- 576
- Çözümler
- 6
- Beğeni
- 469
- Puan
- 839
- Ticaret Puanı
- 0
Dostlar Selamün aleyküm derdime derman olacak varmı sorun ne tam olarak
// Bul;
ACMD (do_wheel_of_fortune)
// Komple değiştir;
ACMD (do_wheel_of_fortune)
{
std::vector<std::string> vecArgs;
split_argument (argument, vecArgs);
if (vecArgs.size() < 2)
{
return;
}
else if (vecArgs[1] == "spin")
{
if (ch->GetProtectTime("WheelWorking") != 0)
{
ch->ChatPacket(CHAT_TYPE_INFO, "Wheel already is working!");
return;
}
else if (quest::CQuestManager::instance().GetEventFlag("whell_event") != 1)
{
ch->ChatPacket(CHAT_TYPE_INFO, "Event is not active!");
return;
}
if (vecArgs.size() < 3)
{
return;
}
DWORD dwWhellIdx = 0;
if...
No symbol table info available.
#7 0x007bff2f in do_wheel_of_fortune (ch=0x381df000, argument=0xffbfb18f " spin 49", cmd=224, subcmd=0) at cmd_general.cpp:3483
randomItem = {dwItemVnum = 70024, iCount = 1, iRarePct = 1}
dwWhellIdx = 49
whellDataMap = 0xffbfc774
itemVector = 0x37a9c7b0
bLuckyIdx = 255 '\377'
it = {__i_ = {__ptr_ = 0x37a9c7c0}}
m_send_items = std::vector of length 1 = {{<std::__1::__non_trivially_copyable_base<unsigned int, int>> = {<No data fields>}, first = 70024, second = 1}}
cmd_wheel = Python Exception <class 'gdb.error'>: There is no member or method named __short_mask.
vecArgs = std::vector of length 3 = {Python Exception <class 'gdb.error'>: There is no member or method named __short_mask.
, Python Exception <class 'gdb.error'>: There is no member or method named __short_mask.
, Python Exception <class 'gdb.error'>: There is no member or method named __short_mask.
buyur canom hemenbir de cmd_general göndersen tadından yenmez olacak
Eve geçince atayim hocambt full yaptıktan sonra ki halini resim değil de yazı olarak atar mısın
// Bul;
ACMD (do_wheel_of_fortune)
// Komple değiştir;
ACMD (do_wheel_of_fortune)
{
std::vector<std::string> vecArgs;
split_argument (argument, vecArgs);
if (vecArgs.size() < 2)
{
return;
}
else if (vecArgs[1] == "spin")
{
if (ch->GetProtectTime("WheelWorking") != 0)
{
ch->ChatPacket(CHAT_TYPE_INFO, "Wheel already is working!");
return;
}
else if (quest::CQuestManager::instance().GetEventFlag("whell_event") != 1)
{
ch->ChatPacket(CHAT_TYPE_INFO, "Event is not active!");
return;
}
if (vecArgs.size() < 3)
{
return;
}
DWORD dwWhellIdx = 0;
if (!str_to_number(dwWhellIdx, vecArgs[2].c_str()))
{
return;
}
if (ch->GetExchange())
{
ch->ChatPacket(CHAT_TYPE_INFO, "You can't do it with exchange!");
return;
}
const std::map<DWORD, CWhellItemGroup*>* whellDataMap = ITEM_MANAGER::Instance().GetWhellItemsData();
if (!whellDataMap)
{
sys_err ("Wheel: whellDataMap is NULL!");
return;
}
const auto it = whellDataMap->find(dwWhellIdx);
if (it == whellDataMap->end())
{
sys_err("unknown wheel request! player: %s whellidx: %u", ch->GetName(), dwWhellIdx);
return;
}
if (dwWhellIdx == 0) // Premium cark itemi
{
if (ch->CountSpecifyItem(900009) <= 0)
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Yeterli Malzeme Yok !"));
return;
}
ch->RemoveSpecifyItem(900009, 1);
}
else if (dwWhellIdx == 19)
{
if (ch->CountSpecifyItem(900011) <= 0)
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Yeterli Malzeme Yok !"));
return;
}
ch->RemoveSpecifyItem(900011, 1);
}
else if (dwWhellIdx == 29)
{
if (ch->CountSpecifyItem(900012) <= 0)
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Yeterli Malzeme Yok !"));
return;
}
ch->RemoveSpecifyItem(900012, 1);
}
else if (dwWhellIdx == 39)
{
if (ch->CountSpecifyItem(900010) <= 0)
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Yeterli Malzeme Yok !"));
return;
}
ch->RemoveSpecifyItem(900010, 1);
}
else if (dwWhellIdx == 49)
{
if (ch->CountSpecifyItem(900013) <= 0)
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Yeterli Malzeme Yok !"));
return;
}
ch->RemoveSpecifyItem(900013, 1);
}
else
{
if (dwWhellIdx < 10 || (dwWhellIdx != 19 && dwWhellIdx != 29 && dwWhellIdx != 39 && dwWhellIdx != 49))
{
ch->ChatPacket(CHAT_TYPE_INFO, "Invalid wheel index!");
return;
}
if (ch->CountSpecifyItem(dwWhellIdx) < 1)
{
ch->ChatPacket(CHAT_TYPE_INFO, "You don't have enough item for spin!");
return;
}
ch->RemoveSpecifyItem(dwWhellIdx, 1);
}
std::vector<std::pair<DWORD,int>> m_send_items;
std::string cmd_wheel;
constexpr int kTarget = 10;
constexpr int kMaxTries = 1000;
const auto groupsmh = it->second;
if (!groupsmh)
{
sys_err ("Wheel: groupsmh is NULL!");
return;
}
int tries = 0;
while (static_cast<int>(m_send_items.size()) < kTarget && tries++ < kMaxTries)
{
const auto randomItem = groupsmh->GetOne();
if (randomItem.iRarePct < number(1, 100))
{
continue;
}
auto p = std::make_pair(randomItem.dwItemVnum, randomItem.iCount);
if (std::find(m_send_items.begin(), m_send_items.end(), p) != m_send_items.end())
{
continue;
}
m_send_items.emplace_back(p);
if (!cmd_wheel.empty())
{
cmd_wheel += "#";
}
char tmpBuf[64];
snprintf(tmpBuf, sizeof(tmpBuf), "%u|%d", randomItem.dwItemVnum, randomItem.iCount);
cmd_wheel += tmpBuf;
}
if (m_send_items.empty())
{
ch->ChatPacket(CHAT_TYPE_INFO, "Wheel has no eligible items!");
return;
}
const BYTE bLuckyIdx = static_cast<BYTE>(number(0, static_cast<int>(m_send_items.size()) - 1));
ch->SetProtectTime("WheelIndex", dwWhellIdx);
ch->SetProtectTime("WheelLuckyIndex", bLuckyIdx);
ch->SetProtectTime("WheelLuckyItemVnum", m_send_items[bLuckyIdx].first);
ch->SetProtectTime("WheelLuckyItemCount", m_send_items[bLuckyIdx].second);
ch->SetProtectTime("WheelWorking", 1);
ch->ChatPacket(CHAT_TYPE_COMMAND, "SetWhellData %u %s", bLuckyIdx, cmd_wheel.c_str());
}
else if (vecArgs[1] == "loaditem")
{
if (vecArgs.size() < 3)
{
return;
}
DWORD dwWhellIdx = 0;
if (!str_to_number(dwWhellIdx, vecArgs[2].c_str()))
{
return;
}
const std::map<DWORD, CWhellItemGroup*>* whellDataMap = ITEM_MANAGER::Instance().GetWhellItemsData();
if (!whellDataMap)
{
sys_err ("Wheel: whelldatamap2 is NULL!");
return;
}
const auto it = whellDataMap->find(dwWhellIdx);
if (it == whellDataMap->end())
{
sys_err("unknown wheel request! player: %s whellidx: %u", ch->GetName(), dwWhellIdx);
return;
}
const auto groupsmhh = it->second;
if (!groupsmhh)
{
sys_err ("Wheel: groupsmhh is NULL!");
return;
}
const auto itemVector = groupsmhh->GetVector();
if (!itemVector)
{
sys_err ("Wheel: itemVector is NULL!");
return;
}
std::string cmd_wheel("");
for (auto itItem = itemVector->begin(); itItem != itemVector->end(); ++itItem)
{
if (cmd_wheel.length())
{
cmd_wheel += "#";
}
char tmpBuf[64];
snprintf(tmpBuf, sizeof(tmpBuf), "%u|%d", itItem->dwItemVnum, itItem->iCount);
cmd_wheel += tmpBuf;
if (cmd_wheel.length() > 200)
{
ch->ChatPacket(CHAT_TYPE_COMMAND, "SetLoadWhellData %u %s", dwWhellIdx, cmd_wheel.c_str());
cmd_wheel.clear();
}
}
if (cmd_wheel.length())
{
ch->ChatPacket(CHAT_TYPE_COMMAND, "SetLoadWhellData %u %s", dwWhellIdx, cmd_wheel.c_str());
}
}
else if (vecArgs[1] == "done")
{
if (ch->GetProtectTime("WheelWorking") != 0)
{
DWORD v = ch->GetProtectTime("WheelLuckyItemVnum");
DWORD c = ch->GetProtectTime("WheelLuckyItemCount");
if (v == 0 || c == 0)
{
sys_err("wheel: invalid reward state");
}
else
{
ch->AutoGiveItem(v, c);
ch->ChatPacket(CHAT_TYPE_COMMAND, "ShowWhellReward %u %u", v, c);
}
}
ch->SetProtectTime("WheelIndex", 0);
ch->SetProtectTime("WheelLuckyIndex", 0);
ch->SetProtectTime("WheelLuckyItemVnum", 0);
ch->SetProtectTime("WheelLuckyItemCount", 0);
ch->SetProtectTime("WheelWorking", 0);
}
else if (vecArgs[1] == "event")
{
if (!ch->IsGM())
{
return;
}
if (vecArgs.size() < 3)
{
return;
}
if (vecArgs[2] == "active")
{
BroadcastNotice("Wheel event is started.");
quest::CQuestManager::instance().RequestSetEventFlag("whell_event", 1);
}
else if (vecArgs[2] == "deactive")
{
BroadcastNotice("Wheel event is done.");
quest::CQuestManager::instance().RequestSetEventFlag("whell_event", 0);
}
}
}
Core Sorununu @MT2Dev 'in düzeltmesi ile çözüme kavuşturdum fakat altta atacağım video da nedense hala 1 itemi 1 er tane eklememe rağmen bu sefer de sadece çarkın 1 slotunda saymakta çokça eklediğimde problem olmuyor fakat garip kısmı hala 1 er tane ürünü çokça eklemedeC++:// Bul; ACMD (do_wheel_of_fortune) // Komple değiştir; ACMD (do_wheel_of_fortune) { std::vector<std::string> vecArgs; split_argument (argument, vecArgs); if (vecArgs.size() < 2) { return; } else if (vecArgs[1] == "spin") { if (ch->GetProtectTime("WheelWorking") != 0) { ch->ChatPacket(CHAT_TYPE_INFO, "Wheel already is working!"); return; } else if (quest::CQuestManager::instance().GetEventFlag("whell_event") != 1) { ch->ChatPacket(CHAT_TYPE_INFO, "Event is not active!"); return; } if (vecArgs.size() < 3) { return; } DWORD dwWhellIdx = 0; if (!str_to_number(dwWhellIdx, vecArgs[2].c_str())) { return; } if (ch->GetExchange()) { ch->ChatPacket(CHAT_TYPE_INFO, "You can't do it with exchange!"); return; } const std::map<DWORD, CWhellItemGroup*>* whellDataMap = ITEM_MANAGER::Instance().GetWhellItemsData(); if (!whellDataMap) { sys_err ("Wheel: whellDataMap is NULL!"); return; } const auto it = whellDataMap->find(dwWhellIdx); if (it == whellDataMap->end()) { sys_err("unknown wheel request! player: %s whellidx: %u", ch->GetName(), dwWhellIdx); return; } if (dwWhellIdx == 0) // Premium cark itemi { if (ch->CountSpecifyItem(900009) <= 0) { ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Yeterli Malzeme Yok !")); return; } ch->RemoveSpecifyItem(900009, 1); } else if (dwWhellIdx == 19) { if (ch->CountSpecifyItem(900011) <= 0) { ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Yeterli Malzeme Yok !")); return; } ch->RemoveSpecifyItem(900011, 1); } else if (dwWhellIdx == 29) { if (ch->CountSpecifyItem(900012) <= 0) { ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Yeterli Malzeme Yok !")); return; } ch->RemoveSpecifyItem(900012, 1); } else if (dwWhellIdx == 39) { if (ch->CountSpecifyItem(900010) <= 0) { ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Yeterli Malzeme Yok !")); return; } ch->RemoveSpecifyItem(900010, 1); } else if (dwWhellIdx == 49) { if (ch->CountSpecifyItem(900013) <= 0) { ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Yeterli Malzeme Yok !")); return; } ch->RemoveSpecifyItem(900013, 1); } else { if (dwWhellIdx < 10 || (dwWhellIdx != 19 && dwWhellIdx != 29 && dwWhellIdx != 39 && dwWhellIdx != 49)) { ch->ChatPacket(CHAT_TYPE_INFO, "Invalid wheel index!"); return; } if (ch->CountSpecifyItem(dwWhellIdx) < 1) { ch->ChatPacket(CHAT_TYPE_INFO, "You don't have enough item for spin!"); return; } ch->RemoveSpecifyItem(dwWhellIdx, 1); } std::vector<std::pair<DWORD,int>> m_send_items; std::string cmd_wheel; constexpr int kTarget = 10; constexpr int kMaxTries = 1000; const auto groupsmh = it->second; if (!groupsmh) { sys_err ("Wheel: groupsmh is NULL!"); return; } int tries = 0; while (static_cast<int>(m_send_items.size()) < kTarget && tries++ < kMaxTries) { const auto randomItem = groupsmh->GetOne(); if (randomItem.iRarePct < number(1, 100)) { continue; } auto p = std::make_pair(randomItem.dwItemVnum, randomItem.iCount); if (std::find(m_send_items.begin(), m_send_items.end(), p) != m_send_items.end()) { continue; } m_send_items.emplace_back(p); if (!cmd_wheel.empty()) { cmd_wheel += "#"; } char tmpBuf[64]; snprintf(tmpBuf, sizeof(tmpBuf), "%u|%d", randomItem.dwItemVnum, randomItem.iCount); cmd_wheel += tmpBuf; } if (m_send_items.empty()) { ch->ChatPacket(CHAT_TYPE_INFO, "Wheel has no eligible items!"); return; } const BYTE bLuckyIdx = static_cast<BYTE>(number(0, static_cast<int>(m_send_items.size()) - 1)); ch->SetProtectTime("WheelIndex", dwWhellIdx); ch->SetProtectTime("WheelLuckyIndex", bLuckyIdx); ch->SetProtectTime("WheelLuckyItemVnum", m_send_items[bLuckyIdx].first); ch->SetProtectTime("WheelLuckyItemCount", m_send_items[bLuckyIdx].second); ch->SetProtectTime("WheelWorking", 1); ch->ChatPacket(CHAT_TYPE_COMMAND, "SetWhellData %u %s", bLuckyIdx, cmd_wheel.c_str()); } else if (vecArgs[1] == "loaditem") { if (vecArgs.size() < 3) { return; } DWORD dwWhellIdx = 0; if (!str_to_number(dwWhellIdx, vecArgs[2].c_str())) { return; } const std::map<DWORD, CWhellItemGroup*>* whellDataMap = ITEM_MANAGER::Instance().GetWhellItemsData(); if (!whellDataMap) { sys_err ("Wheel: whelldatamap2 is NULL!"); return; } const auto it = whellDataMap->find(dwWhellIdx); if (it == whellDataMap->end()) { sys_err("unknown wheel request! player: %s whellidx: %u", ch->GetName(), dwWhellIdx); return; } const auto groupsmhh = it->second; if (!groupsmhh) { sys_err ("Wheel: groupsmhh is NULL!"); return; } const auto itemVector = groupsmhh->GetVector(); if (!itemVector) { sys_err ("Wheel: itemVector is NULL!"); return; } std::string cmd_wheel(""); for (auto itItem = itemVector->begin(); itItem != itemVector->end(); ++itItem) { if (cmd_wheel.length()) { cmd_wheel += "#"; } char tmpBuf[64]; snprintf(tmpBuf, sizeof(tmpBuf), "%u|%d", itItem->dwItemVnum, itItem->iCount); cmd_wheel += tmpBuf; if (cmd_wheel.length() > 200) { ch->ChatPacket(CHAT_TYPE_COMMAND, "SetLoadWhellData %u %s", dwWhellIdx, cmd_wheel.c_str()); cmd_wheel.clear(); } } if (cmd_wheel.length()) { ch->ChatPacket(CHAT_TYPE_COMMAND, "SetLoadWhellData %u %s", dwWhellIdx, cmd_wheel.c_str()); } } else if (vecArgs[1] == "done") { if (ch->GetProtectTime("WheelWorking") != 0) { DWORD v = ch->GetProtectTime("WheelLuckyItemVnum"); DWORD c = ch->GetProtectTime("WheelLuckyItemCount"); if (v == 0 || c == 0) { sys_err("wheel: invalid reward state"); } else { ch->AutoGiveItem(v, c); ch->ChatPacket(CHAT_TYPE_COMMAND, "ShowWhellReward %u %u", v, c); } } ch->SetProtectTime("WheelIndex", 0); ch->SetProtectTime("WheelLuckyIndex", 0); ch->SetProtectTime("WheelLuckyItemVnum", 0); ch->SetProtectTime("WheelLuckyItemCount", 0); ch->SetProtectTime("WheelWorking", 0); } else if (vecArgs[1] == "event") { if (!ch->IsGM()) { return; } if (vecArgs.size() < 3) { return; } if (vecArgs[2] == "active") { BroadcastNotice("Wheel event is started."); quest::CQuestManager::instance().RequestSetEventFlag("whell_event", 1); } else if (vecArgs[2] == "deactive") { BroadcastNotice("Wheel event is done."); quest::CQuestManager::instance().RequestSetEventFlag("whell_event", 0); } } }
Sadece cmd kısmındaki kodlamayı gördüm ama gördüğüm kadarıyla oldukça sıkıntılı kodlanmış bir sistem, dikkatli kullanmanızı öneririm. Bu kod core sorununu çözer büyük ihtimalle, sevgiler.