Skocz do zawartości

refine_proto ograniczenie refine_set dla Seon-Pyeong i problem z magicznym metalem

Opublikowano

Koperek Majstry 😇

Pozmieniałem id w refine_proto bo większość zbędna tylko mam pytanie...

id 1 zezwala ulepszać :

  • U Kowala
  • Bodziem
  • Zwojem boga smoków

ALE nie moge ulepszać :

  • Magicznym metalem
  • U Seon-Pyeong

Ma ktoś jakiś pomysł gdzie to się wyłącza/usuwa? 

Płace uśmiechem bombelka....

++ dlaczego Magiczny Metal i Zwój Błogosławieństwa są kilka razy w item_proto

Rozwiązane przez ExoCarossa

Przejdź do rozwiązania

Featured Replies

Opublikowano

Aby ulepszać w ten sposób musisz ustawić refine_set powyżej 500, te ograniczenia znajdziesz w funkcjach.

 

📂 Lokalizacja pliku: 'game -> char_item.cpp'

bool CHARACTER::RefineItem(LPITEM pkItem, LPITEM pkTarget)

 

bool CHARACTER::CanReceiveItem(LPCHARACTER from, LPITEM item) const

 

void CHARACTER::ReceiveItem(LPCHARACTER from, LPITEM item)
Opublikowano
  • Autor
16 minut temu, Sevence napisał(a):

Aby ulepszać w ten sposób musisz ustawić refine_set powyżej 500, te ograniczenia znajdziesz w funkcjach.

 

📂 Lokalizacja pliku: 'game -> char_item.cpp'

bool CHARACTER::CanReceiveItem(LPCHARACTER from, LPITEM item) const

 

bool CHARACTER::RefineItem(LPITEM pkItem, LPITEM pkTarget)

 

void CHARACTER::ReceiveItem(LPCHARACTER from, LPITEM item)

że tutaj z 500 na 0?

Cytat

        case BLACKSMITH_MOB:
            if (item->GetRefinedVnum() && item->GetRefineSet() < 500)
            {
                return true;
            }
            else
            {
                return false;
            }

        case BLACKSMITH2_MOB:
            if (item->GetRefineSet() >= 500)

 

Opublikowano

Nie. Jeśli nie chcesz mieć tych ograniczeń to usuń te warunki. 

 

bool CHARACTER::RefineItem(LPITEM pkItem, LPITEM pkTarget)
{
	if (!CanHandleItem())
		return false;

	if (pkItem->GetSubType() == USE_TUNING)
	{
		// XXX 성능, 소켓 개량서는 사라졌습니다...
		// XXX 성능개량서는 축복의 서가 되었다!
		// MUSIN_SCROLL
		if (pkItem->GetValue(0) == MUSIN_SCROLL)
			RefineInformation(pkTarget->GetCell(), REFINE_TYPE_MUSIN, pkItem->GetCell());
		// END_OF_MUSIN_SCROLL
		else if (pkItem->GetValue(0) == HYUNIRON_CHN)
			RefineInformation(pkTarget->GetCell(), REFINE_TYPE_HYUNIRON, pkItem->GetCell());
		else if (pkItem->GetValue(0) == BDRAGON_SCROLL)
		{
			if (pkTarget->GetRefineSet() != 702) return false;
			RefineInformation(pkTarget->GetCell(), REFINE_TYPE_BDRAGON, pkItem->GetCell());
		}
		else
		{
			if (pkTarget->GetRefineSet() == 501) return false;
			RefineInformation(pkTarget->GetCell(), REFINE_TYPE_SCROLL, pkItem->GetCell());
		}
	}
Opublikowano
  • Autor
22 minuty temu, Sevence napisał(a):

Nie. Jeśli nie chcesz mieć tych ograniczeń to usuń te warunki. 

 

bool CHARACTER::RefineItem(LPITEM pkItem, LPITEM pkTarget)
{
	if (!CanHandleItem())
		return false;

	if (pkItem->GetSubType() == USE_TUNING)
	{
		// XXX 성능, 소켓 개량서는 사라졌습니다...
		// XXX 성능개량서는 축복의 서가 되었다!
		// MUSIN_SCROLL
		if (pkItem->GetValue(0) == MUSIN_SCROLL)
			RefineInformation(pkTarget->GetCell(), REFINE_TYPE_MUSIN, pkItem->GetCell());
		// END_OF_MUSIN_SCROLL
		else if (pkItem->GetValue(0) == HYUNIRON_CHN)
			RefineInformation(pkTarget->GetCell(), REFINE_TYPE_HYUNIRON, pkItem->GetCell());
		else if (pkItem->GetValue(0) == BDRAGON_SCROLL)
		{
			if (pkTarget->GetRefineSet() != 702) return false;
			RefineInformation(pkTarget->GetCell(), REFINE_TYPE_BDRAGON, pkItem->GetCell());
		}
		else
		{
			if (pkTarget->GetRefineSet() == 501) return false;
			RefineInformation(pkTarget->GetCell(), REFINE_TYPE_SCROLL, pkItem->GetCell());
		}
	}

Chyba nie ogarnąłem jak to zrobić x_x

Spoiler

bool CHARACTER::RefineItem(LPITEM pkItem, LPITEM pkTarget)
{
    if (!CanHandleItem())
        return false;

    if (pkItem->GetSubType() == USE_TUNING)
    {
        // XXX Ľş´É, ĽŇÄĎ °ł·®Ľ­´Â »ç¶óÁł˝Ŕ´Ď´Ů...
        // XXX Ľş´É°ł·®Ľ­´Â ĂŕşąŔÇ Ľ­°ˇ µÇľú´Ů!
        // MUSIN_SCROLL
#ifdef fix_81
        if (pkItem->GetValue(0) == METAL15)
            RefineInformation(pkTarget->GetCell(), REFINE_TYPE_METAL15, pkItem->GetCell());
#else
        if (pkItem->GetValue(0) == MUSIN_SCROLL)
            RefineInformation(pkTarget->GetCell(), REFINE_TYPE_MUSIN, pkItem->GetCell());
        // END_OF_MUSIN_SCROLL
        else if (pkItem->GetValue(0) == HYUNIRON_CHN)
            RefineInformation(pkTarget->GetCell(), REFINE_TYPE_HYUNIRON, pkItem->GetCell());
#endif

 

#ifdef NOWE_METALE_DO_ULEPSZANIA
        else if (pkItem->GetValue(0) == METAL20)
            RefineInformation(pkTarget->GetCell(), REFINE_TYPE_METAL20, pkItem->GetCell());
        else if (pkItem->GetValue(0) == METAL25)
            RefineInformation(pkTarget->GetCell(), REFINE_TYPE_METAL25, pkItem->GetCell());
        else if (pkItem->GetValue(0) == METAL30)
            RefineInformation(pkTarget->GetCell(), REFINE_TYPE_METAL30, pkItem->GetCell());
        else if (pkItem->GetValue(0) == METAL35)
            RefineInformation(pkTarget->GetCell(), REFINE_TYPE_METAL35, pkItem->GetCell());
        else if (pkItem->GetValue(0) == METAL40)
            RefineInformation(pkTarget->GetCell(), REFINE_TYPE_METAL40, pkItem->GetCell());
        else if (pkItem->GetValue(0) == METAL45)
            RefineInformation(pkTarget->GetCell(), REFINE_TYPE_METAL45, pkItem->GetCell());
        else if (pkItem->GetValue(0) == METAL50)
            RefineInformation(pkTarget->GetCell(), REFINE_TYPE_METAL50, pkItem->GetCell());
        else if (pkItem->GetValue(0) == METAL55)
            RefineInformation(pkTarget->GetCell(), REFINE_TYPE_METAL55, pkItem->GetCell());
        else if (pkItem->GetValue(0) == METAL60)
            RefineInformation(pkTarget->GetCell(), REFINE_TYPE_METAL60, pkItem->GetCell());
        else if (pkItem->GetValue(0) == METAL65)
            RefineInformation(pkTarget->GetCell(), REFINE_TYPE_METAL65, pkItem->GetCell());
        else if (pkItem->GetValue(0) == METAL70)
            RefineInformation(pkTarget->GetCell(), REFINE_TYPE_METAL70, pkItem->GetCell());
        else if (pkItem->GetValue(0) == METAL75)
            RefineInformation(pkTarget->GetCell(), REFINE_TYPE_METAL75, pkItem->GetCell());
        else if (pkItem->GetValue(0) == METAL80)
            RefineInformation(pkTarget->GetCell(), REFINE_TYPE_METAL80, pkItem->GetCell());
        else if (pkItem->GetValue(0) == METAL85)
            RefineInformation(pkTarget->GetCell(), REFINE_TYPE_METAL85, pkItem->GetCell());
        else if (pkItem->GetValue(0) == METAL90)
            RefineInformation(pkTarget->GetCell(), REFINE_TYPE_METAL90, pkItem->GetCell());
        else if (pkItem->GetValue(0) == METAL95)
            RefineInformation(pkTarget->GetCell(), REFINE_TYPE_METAL95, pkItem->GetCell());
        else if (pkItem->GetValue(0) == METAL100)
            RefineInformation(pkTarget->GetCell(), REFINE_TYPE_METAL100, pkItem->GetCell());
#endif


/*
        else if (pkItem->GetValue(0) == BDRAGON_SCROLL)
        {
            if (pkTarget->GetRefineSet() != 702) return false;
            RefineInformation(pkTarget->GetCell(), REFINE_TYPE_BDRAGON, pkItem->GetCell());
        }
        else
        {
            if (pkTarget->GetRefineSet() == 501) return false;
            RefineInformation(pkTarget->GetCell(), REFINE_TYPE_SCROLL, pkItem->GetCell());
        }
*/


    }
    else if (pkItem->GetSubType() == USE_DETACHMENT && IS_SET(pkTarget->GetFlag(), ITEM_FLAG_REFINEABLE))
    {
        LogManager::instance().ItemLog(this, pkTarget, "USE_DETACHMENT", pkTarget->GetName());

        bool bHasMetinStone = false;

        for (int i = 0; i < ITEM_SOCKET_MAX_NUM; i++)
        {
            long socket = pkTarget->GetSocket(i);
            if (socket > 2 && socket != ITEM_BROKEN_METIN_VNUM)
            {
                bHasMetinStone = true;
                break;
            }
        }

        if (bHasMetinStone)
        {
            for (int i = 0; i < ITEM_SOCKET_MAX_NUM; ++i)
            {
                long socket = pkTarget->GetSocket(i);
                if (socket > 2 && socket != ITEM_BROKEN_METIN_VNUM)
                {
                    AutoGiveItem(socket);
                    //TItemTable* pTable = ITEM_MANAGER::instance().GetTable(pkTarget->GetSocket(i));
                    //pkTarget->SetSocket(i, pTable->alValues[2]);
                    // ±úÁřµą·Î ´ëĂĽÇŘÁŘ´Ů
                    pkTarget->SetSocket(i, ITEM_BROKEN_METIN_VNUM);
                }
            }
            pkItem->SetCount(pkItem->GetCount() - 1);
            return true;
        }
        else
        {
            ChatPacket(CHAT_TYPE_INFO, LC_TEXT("»©łľ Ľö ŔÖ´Â ¸ŢĆľĽ®ŔĚ ľř˝Ŕ´Ď´Ů."));
            return false;
        }
    }

    return false;
}

 

Opublikowano

O KURWA HARDCODE moje oczy 😄🤪

 

#ifdef NOWE_METALE_DO_ULEPSZANIA
        else if (pkItem->GetValue(0) == METAL20)
            RefineInformation(pkTarget->GetCell(), REFINE_TYPE_METAL20, pkItem->GetCell());
        else if (pkItem->GetValue(0) == METAL25)
            RefineInformation(pkTarget->GetCell(), REFINE_TYPE_METAL25, pkItem->GetCell());
        else if (pkItem->GetValue(0) == METAL30)
            RefineInformation(pkTarget->GetCell(), REFINE_TYPE_METAL30, pkItem->GetCell());
        else if (pkItem->GetValue(0) == METAL35)
            RefineInformation(pkTarget->GetCell(), REFINE_TYPE_METAL35, pkItem->GetCell());
        else if (pkItem->GetValue(0) == METAL40)
            RefineInformation(pkTarget->GetCell(), REFINE_TYPE_METAL40, pkItem->GetCell());
        else if (pkItem->GetValue(0) == METAL45)
            RefineInformation(pkTarget->GetCell(), REFINE_TYPE_METAL45, pkItem->GetCell());
        else if (pkItem->GetValue(0) == METAL50)
            RefineInformation(pkTarget->GetCell(), REFINE_TYPE_METAL50, pkItem->GetCell());
        else if (pkItem->GetValue(0) == METAL55)
            RefineInformation(pkTarget->GetCell(), REFINE_TYPE_METAL55, pkItem->GetCell());
        else if (pkItem->GetValue(0) == METAL60)
            RefineInformation(pkTarget->GetCell(), REFINE_TYPE_METAL60, pkItem->GetCell());
        else if (pkItem->GetValue(0) == METAL65)
            RefineInformation(pkTarget->GetCell(), REFINE_TYPE_METAL65, pkItem->GetCell());
        else if (pkItem->GetValue(0) == METAL70)
            RefineInformation(pkTarget->GetCell(), REFINE_TYPE_METAL70, pkItem->GetCell());
        else if (pkItem->GetValue(0) == METAL75)
            RefineInformation(pkTarget->GetCell(), REFINE_TYPE_METAL75, pkItem->GetCell());
        else if (pkItem->GetValue(0) == METAL80)
            RefineInformation(pkTarget->GetCell(), REFINE_TYPE_METAL80, pkItem->GetCell());
        else if (pkItem->GetValue(0) == METAL85)
            RefineInformation(pkTarget->GetCell(), REFINE_TYPE_METAL85, pkItem->GetCell());
        else if (pkItem->GetValue(0) == METAL90)
            RefineInformation(pkTarget->GetCell(), REFINE_TYPE_METAL90, pkItem->GetCell());
        else if (pkItem->GetValue(0) == METAL95)
            RefineInformation(pkTarget->GetCell(), REFINE_TYPE_METAL95, pkItem->GetCell());
        else if (pkItem->GetValue(0) == METAL100)
            RefineInformation(pkTarget->GetCell(), REFINE_TYPE_METAL100, pkItem->GetCell());
#endif

 

Pisałem Ci usuń dwa warunki ograniczające refine_set, a Ty skomentowałeś całą obsługę tych typów. 😄

else if (pkItem->GetValue(0) == BDRAGON_SCROLL)
{
	RefineInformation(pkTarget->GetCell(), REFINE_TYPE_BDRAGON, pkItem->GetCell());
}
else
{
	RefineInformation(pkTarget->GetCell(), REFINE_TYPE_SCROLL, pkItem->GetCell());
}

 

Opublikowano
  • Autor
1 minutę temu, Sevence napisał(a):

O Kur** HARDCODE moje oczy 😄🤪

 

#ifdef NOWE_METALE_DO_ULEPSZANIA
        else if (pkItem->GetValue(0) == METAL20)
            RefineInformation(pkTarget->GetCell(), REFINE_TYPE_METAL20, pkItem->GetCell());
        else if (pkItem->GetValue(0) == METAL25)
            RefineInformation(pkTarget->GetCell(), REFINE_TYPE_METAL25, pkItem->GetCell());
        else if (pkItem->GetValue(0) == METAL30)
            RefineInformation(pkTarget->GetCell(), REFINE_TYPE_METAL30, pkItem->GetCell());
        else if (pkItem->GetValue(0) == METAL35)
            RefineInformation(pkTarget->GetCell(), REFINE_TYPE_METAL35, pkItem->GetCell());
        else if (pkItem->GetValue(0) == METAL40)
            RefineInformation(pkTarget->GetCell(), REFINE_TYPE_METAL40, pkItem->GetCell());
        else if (pkItem->GetValue(0) == METAL45)
            RefineInformation(pkTarget->GetCell(), REFINE_TYPE_METAL45, pkItem->GetCell());
        else if (pkItem->GetValue(0) == METAL50)
            RefineInformation(pkTarget->GetCell(), REFINE_TYPE_METAL50, pkItem->GetCell());
        else if (pkItem->GetValue(0) == METAL55)
            RefineInformation(pkTarget->GetCell(), REFINE_TYPE_METAL55, pkItem->GetCell());
        else if (pkItem->GetValue(0) == METAL60)
            RefineInformation(pkTarget->GetCell(), REFINE_TYPE_METAL60, pkItem->GetCell());
        else if (pkItem->GetValue(0) == METAL65)
            RefineInformation(pkTarget->GetCell(), REFINE_TYPE_METAL65, pkItem->GetCell());
        else if (pkItem->GetValue(0) == METAL70)
            RefineInformation(pkTarget->GetCell(), REFINE_TYPE_METAL70, pkItem->GetCell());
        else if (pkItem->GetValue(0) == METAL75)
            RefineInformation(pkTarget->GetCell(), REFINE_TYPE_METAL75, pkItem->GetCell());
        else if (pkItem->GetValue(0) == METAL80)
            RefineInformation(pkTarget->GetCell(), REFINE_TYPE_METAL80, pkItem->GetCell());
        else if (pkItem->GetValue(0) == METAL85)
            RefineInformation(pkTarget->GetCell(), REFINE_TYPE_METAL85, pkItem->GetCell());
        else if (pkItem->GetValue(0) == METAL90)
            RefineInformation(pkTarget->GetCell(), REFINE_TYPE_METAL90, pkItem->GetCell());
        else if (pkItem->GetValue(0) == METAL95)
            RefineInformation(pkTarget->GetCell(), REFINE_TYPE_METAL95, pkItem->GetCell());
        else if (pkItem->GetValue(0) == METAL100)
            RefineInformation(pkTarget->GetCell(), REFINE_TYPE_METAL100, pkItem->GetCell());
#endif

 

Pisałem Ci usuń dwa warunki ograniczające refine_set, a Ty skomentowałeś całą obsługę tych typów. 😄

else if (pkItem->GetValue(0) == BDRAGON_SCROLL)
{
	RefineInformation(pkTarget->GetCell(), REFINE_TYPE_BDRAGON, pkItem->GetCell());
}
else
{
	RefineInformation(pkTarget->GetCell(), REFINE_TYPE_SCROLL, pkItem->GetCell());
}

 

Nie pytaj to na chwile

Co do dwóch warunków tak zrobiłem i dalej nie działa od id 1 xD

Opublikowano

Co nie działa?  

Jeśli chodzi o magiczne metal to on nie ma żadnych ograniczeń, możesz każdy przedmiot ulepszać niezależne od refine_set. Sprawdź, czy w ogóle masz ustawiony typ dla tego rekordu w item_proto. Jak chcesz żeby miał typ magicznego metalu musisz w value0 ustawić wartość 1. 

 

Seon Pyeong ma ograniczenia refine_set od vnum 500 i to jest w tym warunku ograniczane.

case BLACKSMITH2_MOB:
	if (item->GetRefineSet() >= 500)
	{
		return true;
	}
	else
	{
		return false;
	}

 

W refine.h masz definicję: 

BLACKSMITH2_MOB	= 20091,

 

  • Sevence zmienił(a) tytuł na refine_proto ograniczenie refine_set dla Seon-Pyeong i problem z magicznym metalem
Opublikowano
  • Autor
Godzinę temu, Sevence napisał(a):

Co nie działa?  

Jeśli chodzi o magiczne metal to on nie ma żadnych ograniczeń, możesz każdy przedmiot ulepszać niezależne od refine_set. Sprawdź, czy w ogóle masz ustawiony typ dla tego rekordu w item_proto. Jak chcesz żeby miał typ magicznego metalu musisz w value0 ustawić wartość 1. 

 

Seon Pyeong ma ograniczenia refine_set od vnum 500 i to jest w tym warunku ograniczane.

case BLACKSMITH2_MOB:
	if (item->GetRefineSet() >= 500)
	{
		return true;
	}
	else
	{
		return false;
	}

 

W refine.h masz definicję: 

BLACKSMITH2_MOB	= 20091,

 

No właśnie metalem nie moge ulepszyć gdy id refine wynosi 1

Cytat

71026    0    71026    Magiczny Metal    6    0    0    1    106880    8192    0        0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    1    0    0    0    0    0    -1    -1    -1    -1    -1    -1    0    0    0

39016    0    39016    Magiczny Metal    6    0    0    1    98688    8192    0        0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    1    0    0    0    0    0    -1    -1    -1    -1    -1    -1    0    0    0

 

Opublikowano

Ja nie robiłem żadnych zmian i oryginalnie bez problemu mi działa magiczny metal nawet dla refine_set o wartości 1. 

 

image.gif.9bce24bb789b6ec5934fbe86a3560083.gif

Opublikowano
  • Autor
  • Rozwiązanie
5 minut temu, Sevence napisał(a):

Ja nie robiłem żadnych zmian i oryginalnie bez problemu mi działa magiczny metal nawet dla refine_set o wartości 1. 

 

image.gif.9bce24bb789b6ec5934fbe86a3560083.gif

Czyli MAGICZNY METAL są min 3 w bazie bo 39001 działa, 39016 i 71026 do wywalenia dla pokoleń 😄

Opublikowano

Wystarczy ustawić dla innych value0 na wartość 1 i również będzie działać poprawnie, konwert do klienta item_proto. 

  • Sevence zablokował(a) ten temat
  • Sevence odblokował(a) ten temat
Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.