Skocz do zawartości
Masz już aplikację Sharegon?

Odkryj wszystkie możliwości. Dowiedz się więcej

Sharegon.pl

Zainstaluj aplikację Sharegon i korzystaj z powiadomień push oraz licznika nowych aktywności bezpośrednio z ekranu głównego.

Aby zainstalować tę aplikację na iOS i iPadOS.
  1. Tap the Share icon in Safari
  2. Przewiń menu i stuknij Dodaj do ekranu początkowego.
  3. Stuknij Dodaj w prawym górnym rogu.
Zainstaluj aplikację Sharegon na Androidzie
  1. Otwórz Sklep Google Play na swoim smarfonie.
  2. Wyszukaj „Sharegon” w pasku wyszukiwania.
  3. Stuknij „Zainstaluj”, aby pobrać aplikację.

Przystosowanie kodu od symulacji dropu pod pliki entry

Featured Replies

Opublikowano

Cześć

 

Dostosuje mi ktoś ten kod pod entry?

 

CKod został skopiowany
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😄 

Rozwiązane przez Sevence

Opublikowano
W dniu 12.07.2024 o 12:12, Sevence napisał(a):

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
  • Autor
CKod został skopiowany
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 1Błąd podczas kompilacji!

 

 

Nie wiem bo w paczcce było tylko co wyżej, a do cmd.cpp sam dodałem:

 

HTMLKod został skopiowany
{"drop", do_drop, 0, POS_DEAD, GM_IMPLEMENTOR},

 

oraz to:

 

HTMLKod został skopiowany
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 ? 
 

CKod został skopiowany
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 przez Marchewa

Opublikowano

Wrzucasz tą funkcję w cmd_gm.cpp i cmd.cpp + dopisujesz właśnie do tablicy command_info. 

 

W dniu 12.07.2024 o 12:22, 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. 

 

W dniu 12.07.2024 o 12:22, 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
  • Autor
W dniu 12.07.2024 o 12:34, 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

 

CKod został skopiowany
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 1gmake: *** Waiting for unfinished jobs....Błąd podczas kompilacji!

 

CMD_GM.cpp - https://pastebin.com/sxPFmXY6

Edytowane przez Marchewa

Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.

Konto

Nawigacja

Skonfiguruj powiadomienia push w przeglądarce.

Chrome (Android)
  1. Stuknij ikonę kłódki obok paska adresu.
  2. Wybierz Uprawnienia → Powiadomienia.
  3. Dostosuj swoje preferencje.
Chrome (Desktop)
  1. Kliknij ikonę kłódki na pasku adresu.
  2. Wybierz Ustawienia witryny.
  3. Znajdź Powiadomienia i dostosuj swoje preferencje.