Skocz do zawartości
Opublikowano

Siemanko, dodałem ostatnio wzmocnienie i zaczarowanie do paska z poradnika jking z zone, wszystko śmiga. Chciałem dodać nową tabelę item_attr_belt, tylko dla paska no i tu robią się schody xD Wzorowałem się na istniejących tabelkach, ale chyba coś pominąłem? Nie wiem. Skopiowałem item_attr, zmieniłem nazwę, zostawiłem belt. Kod z tabelkami jest i nowymi zmiankami/dodanami niżej.

ClientManagerBoot.cpp

if (!InitializeBeltAttrTable())

{
sys_err("InitializeBeltAttrTable FAILED");
return false;
}

bool CClientManager::InitializeBeltAttrTable()
{
	char query[4096];
	snprintf(query, sizeof(query),
	"SELECT apply, apply+0, prob, lv1, lv2, lv3, lv4, lv5,belt FROM item_attr_belt%s ORDER BY apply",
	GetTablePostfix());
	std::unique_ptr<SQLMsg> pkMsg(CDBManager::instance().DirectQuery(query));
	SQLResult * pRes = pkMsg->Get();
	if (!pRes->uiNumRows)
	{
		sys_err("no result from item_attr");
		return false;
	}

	if (!m_vec_beltAttrTable.empty())
	{
	sys_log(0, "RELOAD: item_attr_belt");
	m_vec_beltAttrTable.clear();
	}

	m_vec_beltAttrTable.reserve(pRes->uiNumRows);
	MYSQL_ROW data;
	while ((data = mysql_fetch_row(pRes->pSQLResult)))
	{
		TItemAttrTable t;
		memset(&t, 0, sizeof(TItemAttrTable));
		int col = 0;
		strlcpy(t.szApply, data[col++], sizeof(t.szApply));
		str_to_number(t.dwApplyIndex, data[col++]);
		str_to_number(t.dwProb, data[col++]);
		str_to_number(t.lValues[0], data[col++]);
		str_to_number(t.lValues[1], data[col++]);
		str_to_number(t.lValues[2], data[col++]);
		str_to_number(t.lValues[3], data[col++]);
		str_to_number(t.lValues[4], data[col++]);
		str_to_number(t.bMaxLevelBySet[ATTRIBUTE_SET_BELT], data[col++]);
		sys_log(0, "ITEM_ATTR: %-20s %4lu { %3d %3d %3d %3d %3d } { %d }",

		t.szApply,
		t.dwProb,
		t.lValues[0],
		t.lValues[1],
		t.lValues[2],
		t.lValues[3],
		t.lValues[4],
		t.bMaxLevelBySet[ATTRIBUTE_SET_BELT]);
		m_vec_beltAttrTable.push_back(t);
	}
return true;
}



ClientManager.h

bool InitializeBeltAttrTable();

std::vector<TItemAttrTable> m_vec_beltAttrTable;


char_item.cpp z nowym dodaniem i zmianką

case USE_ADD_NEW_ATTR:
case USE_CHANGE_NEW_ATTR:
{
    LPITEM item2;

    if (!IsValidItemPosition(DestCell) || !(item2 = GetItem(DestCell)))
        return false;

    if (item2->IsEquipped())
    {
        BuffOnAttr_RemoveBuffsFromItem(item2);
    }

    if (ITEM_BELT != item2->GetType())
    {
        ChatPacket(CHAT_TYPE_INFO, LC_TEXT("속성을 변경할 수 없는 아이템입니다."));
        return false;
    }

    if (item2->IsExchanging() || item2->IsEquipped())
        return false;

    switch (item->GetSubType())
    {
        case USE_ADD_NEW_ATTR:
        {
            if (item2->GetAttributeCount() < 4)
            {
                if (number(1, 100) > 40)
                {
                    item2->AddAttribute();

                    char buf[21];
                    snprintf(buf, sizeof(buf), "%u", item2->GetID());
                    LogManager::instance().ItemLog(this, item, "ADD_BELT_ATTR", buf);
                    item->SetCount(item->GetCount() - 1);
                    ChatPacket(CHAT_TYPE_INFO, LC_TEXT("DODANIE_PAS_POWODZENIE"));
                }
                else
                {
                    ChatPacket(CHAT_TYPE_INFO, LC_TEXT("DODANIE_PAS_NIEPOWODZENIE"));
                    return false;
                }
            }
            else
            {
                ChatPacket(CHAT_TYPE_INFO, LC_TEXT("DODANIE_PAS_MAKS"));
                return false;
            }
            break;
        }

        case USE_CHANGE_NEW_ATTR:
        {
            if (item2->GetAttributeCount() == 0)
            {
                ChatPacket(CHAT_TYPE_INFO, LC_TEXT("변경할 속성이 없습니다."));
                return false;
            }

            const int prob[5] = { 60, 40, 0, 0, 0 };

            item2->ChangeAttribute(prob);
            {
                char buf[21];
                snprintf(buf, sizeof(buf), "%u", item2->GetID());
                LogManager::instance().ItemLog(this, item, "CHANGE_BELT_ATTR", buf);
                item->SetCount(item->GetCount() - 1);
            }

            ChatPacket(CHAT_TYPE_INFO, LC_TEXT("속성을 변경하였습니다."));
            break;
        }
    }
}
break;



I problem jest kiedy chce nadać lub zmienić bonusy, nie nadaje bonusów a zmianki pobiera. Jakby ktoś podpowiedział co pominąłem to byłbym bardzo wdzięczny.

Edytowane przez Changelog

Gość, która odpowiedź była najbardziej pomocna?

Jeśli którakolwiek z tych odpowiedzi zawiera odpowiedź na Twoje pytanie, poświęć chwilę, aby kliknąć przycisk „Oznacz jako rozwiązanie” w poście z najlepszą odpowiedzią.
Oznaczanie postów jako rozwiązania pomoże innym użytkownikom społeczności szybko znaleźć odpowiedzi na swoje pytania. Dzięki za pomoc!

Featured Replies

Opublikowano
  • Programista

Wstaw kod jak trzeba, bo ciężko się to czyta.

Btw. Nie musisz robić nowej tabelki, wystarczy nowa kolumna w item_attr (chyba, dawno tego nie robilem)

Opublikowano
17 minut temu, KoYGeR napisał(a):

Wstaw kod jak trzeba, bo ciężko się to czyta.

Btw. Nie musisz robić nowej tabelki, wystarczy nowa kolumna w item_attr (chyba, dawno tego nie robilem)

W sumie zależy. Bo do każdej rzeczy się ustawiało jaki bonus ma wejść. Pytanie czy ten system co ma wprowadzą tą zmianę. A druga sprawa jak chce mieć osobną zmianke i dodanie to chyba się nie obejdzie bez zmian w kodzie

Opublikowano
18 minut temu, KoYGeR napisał(a):

Wstaw kod jak trzeba, bo ciężko się to czyta.

Btw. Nie musisz robić nowej tabelki, wystarczy nowa kolumna w item_attr (chyba, dawno tego nie robilem)

Juz poprawiam. Właśnie teraz mam dodaną kolumnę belt do item_attr i to działa, ale trochę mi to koliduje z bonusami które chciałbym np w broni. Dla pasa chce 3% 5% i 7%, a dla broni już mogę tylko ustawić z kolumny 4 i 5, trochę to jednak ogranicza. Mam nadzieję że rozumiesz co mam na myśli xD

7 minut temu, Rain94 napisał(a):

W sumie zależy. Bo do każdej rzeczy się ustawiało jaki bonus ma wejść. Pytanie czy ten system co ma wprowadzą tą zmianę. A druga sprawa jak chce mieć osobną zmianke i dodanie to chyba się nie obejdzie bez zmian w kodzie

Kod do nowej zmianki i dodania jest podany w poście xD muszę to lepiej sformatować bo rzeczywiście nic nie widać

Opublikowano
  • Programista
Godzinę temu, Changelog napisał(a):

Juz poprawiam. Właśnie teraz mam dodaną kolumnę belt do item_attr i to działa, ale trochę mi to koliduje z bonusami które chciałbym np w broni. Dla pasa chce 3% 5% i 7%, a dla broni już mogę tylko ustawić z kolumny 4 i 5, trochę to jednak ogranicza. Mam nadzieję że rozumiesz co mam na myśli xD

To podejrzewam, że wystarczy lekko zmodyfikować funkcję CItem::AddAttribute zamiast pisać tyle kodu :D

Dodaj sobie switcha na type przedmiotu i dla Belta wybierz sobie, że których wartości ma wybierać :)

Godzinę temu, Rain94 napisał(a):

W sumie zależy. Bo do każdej rzeczy się ustawiało jaki bonus ma wejść. Pytanie czy ten system co ma wprowadzą tą zmianę. A druga sprawa jak chce mieć osobną zmianke i dodanie to chyba się nie obejdzie bez zmian w kodzie

Po tej wypowiedzi mogę wnioskować, że niewiele wiesz o kodzie gry i Twoja oferta była podejrzana.

Opublikowano
36 minut temu, KoYGeR napisał(a):

To podejrzewam, że wystarczy lekko zmodyfikować funkcję CItem::AddAttribute zamiast pisać tyle kodu :D

Dodaj sobie switcha na type przedmiotu i dla Belta wybierz sobie, że których wartości ma wybierać :)

Po tej wypowiedzi mogę wnioskować, że niewiele wiesz o kodzie gry i Twoja oferta była podejrzana.

Jeszcze ciężej się czytało na telefonie. Teraz jak poprawił to widzę

Opublikowano
  • Premium

Chyba łatwiej będzie dodać 6 kolumnę w item_attr i pierwsze 3 kolumny dla pasów/rękawic cokolwiek, a 3 dla broni.

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...