Opublikowano 12 Lipca 202412 Lip Cześć Dostosuje mi ktoś ten kod pod entry? struct DropItem { char szName[ITEM_NAME_MAX_LEN + 1]; DWORD count; }; ACMD(do_drop) { if (!ch || !ch->GetDesc()) { return; } char arg1[256], arg2[256]; two_arguments(argument, arg1, sizeof(arg1), arg2, sizeof(arg2)); if (!*arg1 || !*arg2) { ch->ChatPacket(CHAT_TYPE_INFO, "Syntax: drop_simul <mob vnum> <count>"); return; } DWORD vnum = 0; str_to_number(vnum, arg1); DWORD loopCount = 0; str_to_number(loopCount, arg2); if (vnum == 0 || loopCount == 0) { ch->ChatPacket(CHAT_TYPE_INFO, "Syntax: drop_simul <mob vnum> <count>"); return; } auto* mob = CMobManager::instance().Get(vnum); if (!mob) { ch->ChatPacket(CHAT_TYPE_INFO, "Mob vnum: %u not found", vnum); return; } std::vector<LPITEM> dropVec; std::unordered_map<DWORD/*vnum*/, DropItem> dropMap; if (ITEM_MANAGER::instance().CreateMobDropVec(vnum, dropVec)) { for (const auto& item : dropVec) { if (!item) { continue; } const auto itemVnum = item->GetVnum(); const auto itemCount = item->GetCount(); if (itemVnum == 0 || itemCount == 0) { continue; } const auto& it = dropMap.find(itemVnum); if (it != dropMap.end()) { it->second.count += itemCount; } else { DropItem dropItem{}; dropItem.count = itemCount; strlcpy(dropItem.szName, item->GetName(), sizeof(dropItem.szName)); dropMap[itemVnum] = dropItem; } M2_DESTROY_ITEM(item); } ch->ChatPacket(CHAT_TYPE_PARTY, "############### |cFF6d8cf2|H|h(%d)x %s|h|r DROP SIMULATION ###############", loopCount, mob->m_table.szLocaleName); const auto& func = [&](auto& pair) { auto& [vnum, dropItem] = pair; dropItem.count *= loopCount; ch->ChatPacket(CHAT_TYPE_PARTY, "Item: %s - Count: %u", dropItem.szName, dropItem.count); }; std::for_each(dropMap.begin(), dropMap.end(), func); } } @Sevence😄
Opublikowano 12 Lipca 202412 Lip A z czym masz problem? Pliki EntryCore to oryginalna baza, nie ma wielu zmian, dropu nawet nie tykałem.
Opublikowano 12 Lipca 202412 Lip 5 minutes ago, Sevence said: A z czym masz problem? Pliki EntryCore to oryginalna baza, nie ma wielu zmian, dropu nawet nie tykałem. Dodałem sobie niedawno wiki dropu, no i w niej nawet pokazuje, że np. w dzikim psie są żółcie do dropu.
Opublikowano 12 Lipca 202412 Lip Teraz, Krystian napisał(a): Dodałem sobie niedawno wiki dropu, no i w niej nawet pokazuje, że np. w dzikim psie są żółcie do dropu. To problem z systemem. Ja wcale nie modyfikowałem kodu od dropu w żadnym stopniu.
Opublikowano 12 Lipca 202412 Lip Autor error: undefined symbol: do_drop(CHARACTER*, char const*, int, int) >>> referenced by cmd.cpp >>> obj/cmd.o:(cmd_info) clang: error: linker command failed with exit code 1 (use -v to see invocation) gmake: *** [Makefile:131: /usr/home/mt2/share/game_new] Error 1 Błąd podczas kompilacji! Nie wiem bo w paczcce było tylko co wyżej, a do cmd.cpp sam dodałem: {"drop", do_drop, 0, POS_DEAD, GM_IMPLEMENTOR}, oraz to: ACMD(do_drop); Tu się gdzieś generuje errorlog_game ? bo to skopiowałem z putty ale czy to np na entry nie powinno byc inaczej zapisane ? std::vector<LPITEM> dropVec; std::unordered_map<DWORD/*vnum*/, DropItem> dropMap; Pliki: cmd_general.cpp - https://pastebin.com/SRGFCtY1 cmd.cpp - https://pastebin.com/q9pFkyuz Edytowane 12 Lipca 202412 Lip przez Marchewa
Opublikowano 12 Lipca 202412 Lip Wrzucasz tą funkcję w cmd_gm.cpp i cmd.cpp + dopisujesz właśnie do tablicy command_info. 13 minut temu, Marchewa napisał(a): Tu się gdzieś generuje errorlog_game ? bo to skopiowałem z putty Nie ma takiego pliku wszystkie błędy pojawiają się bezpośrednio w konsoli. 13 minut temu, Marchewa napisał(a): ale czy to np na entry nie powinno byc inaczej zapisane ? Przecież to vektor do przechowywania potencjalnie wylosowanych przedmiotów w ramach nowej funkcji. Jeśli tak zrobiłeś, spróbuj zrobić pełną rekompilację game.
Opublikowano 12 Lipca 202412 Lip Autor 9 minut temu, Sevence napisał(a): Wrzucasz tą funkcję w cmd_gm.cpp i cmd.cpp + dopisujesz właśnie do tablicy command_info. Nie ma takiego pliku wszystkie błędy pojawiają się bezpośrednio w konsoli. Przecież to vektor do przechowywania potencjalnie wylosowanych przedmiotów w ramach nowej funkcji. Jeśli tak zrobiłeś, spróbuj zrobić pełną rekompilację game. wrzuciłem to do cmd_gm.cpp i wyskakuje cmd_gm.cpp:121:31: error: no member named 'CreateMobDropVec' in 'ITEM_MANAGER' 121 | if (ITEM_MANAGER::instance().CreateMobDropVec(vnum, dropVec)) | ~~~~~~~~~~~~~~~~~~~~~~~~ ^ 1 error generated. gmake: *** [Makefile:127: obj/cmd_gm.o] Error 1 gmake: *** Waiting for unfinished jobs.... Błąd podczas kompilacji! CMD_GM.cpp - https://pastebin.com/sxPFmXY6 Edytowane 12 Lipca 202412 Lip przez Marchewa
Opublikowano 12 Lipca 202412 Lip Rozwiązanie Brakuje Ci funkcji 'CreateMobDropVec' w item_manager.cpp oryginalnie taka nie istnieje.
Opublikowano 12 Lipca 202412 Lip Autor Racja kod był niekompletny znalazłem inna wersję z wyciekiem pamięci ale na testy styknie.
Cześć
Dostosuje mi ktoś ten kod pod entry?
@Sevence😄