Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Wzmocnienie kostiumu


Rekomendowane odpowiedzi

Opublikowano

Cześć, chciałem dodać wzmocnienia do kostiumów, które wbudowują im bony, ale gdy przeciągam te dodanie na kostium wyświetla się napis "Nie można zmienić bonusu".

 

Wpisy:

char_item.cpp: http://wklej.org/id/3081814/

item.cpp: http://wklej.org/id/3081808/

item.h: http://wklej.org/id/3081811/

 

W czym leży problem, zapomniałem dodać gdzieś jakiejś rzeczy?

Opublikowano

A edytowałeś GetAttributeSetIndex()?

 

 
 
Zmieniłem int CItem::GetAttributeSetIndex()
na coś takiego:
 
int CItem::GetAttributeSetIndex()
{
if (GetType() == ITEM_WEAPON)
{
if (GetSubType() == WEAPON_ARROW)
return -1;
 
return ATTRIBUTE_SET_WEAPON;
}
 
if (GetType() == ITEM_COSTUME)
{
if (GetSubType() == COSTUME_BODY)
return ATTRIBUTE_SET_COSTUME;
else if (GetSubType() == COSTUME_HAIR)
return ATTRIBUTE_SET_HAIR;
}
 
if (GetType() == ITEM_ARMOR)
{
switch (GetSubType())
{
case ARMOR_BODY:
// case COSTUME_BODY: // ÄÚ˝şĂő °©żĘŔş ŔĎąÝ °©żĘ°ú µżŔĎÇŃ Attribute SetŔ» ŔĚżëÇĎż© ·Ł´ýĽÓĽş şŮŔ˝ (ARMOR_BODY == COSTUME_BODY)
return ATTRIBUTE_SET_BODY;
 
case ARMOR_WRIST:
return ATTRIBUTE_SET_WRIST;
 
case ARMOR_FOOTS:
return ATTRIBUTE_SET_FOOTS;
 
case ARMOR_NECK:
return ATTRIBUTE_SET_NECK;
 
case ARMOR_HEAD:
// case COSTUME_HAIR: // ÄÚ˝şĂő Çěľî´Â ŔĎąÝ Ĺő±¸ ľĆŔĚĹ۰ú µżŔĎÇŃ Attribute SetŔ» ŔĚżëÇĎż© ·Ł´ýĽÓĽş şŮŔ˝ (ARMOR_HEAD == COSTUME_HAIR)
return ATTRIBUTE_SET_HEAD;
 
case ARMOR_SHIELD:
return ATTRIBUTE_SET_SHIELD;
 
case ARMOR_EAR:
return ATTRIBUTE_SET_EAR;
}
}
 
return -1;
}
 
W common/lenght.h w enum EAttributeSet 
dodałem:
ATTRIBUTE_SET_COSTUME,
ATTRIBUTE_SET_HAIR,
 
db/ClientManagerBoot.cpp
w bool CClientManager::InitializeItemAttrTable()

bool CClientManager::InitializeItemAttrTable()
{
char query[4096];
snprintf(query, sizeof(query),
"SELECT apply, apply+0, prob, lv1, lv2, lv3, lv4, lv5, weapon, body, wrist, foots, neck, head, shield, ear, costume, hair FROM item_attr%s ORDER BY apply",
GetTablePostfix());
 
std::auto_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_itemAttrTable.empty())
{
sys_log(0, "RELOAD: item_attr");
m_vec_itemAttrTable.clear();
}
 
m_vec_itemAttrTable.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_WEAPON], data[col++]);
str_to_number(t.bMaxLevelBySet[ATTRIBUTE_SET_BODY], data[col++]);
str_to_number(t.bMaxLevelBySet[ATTRIBUTE_SET_WRIST], data[col++]);
str_to_number(t.bMaxLevelBySet[ATTRIBUTE_SET_FOOTS], data[col++]);
str_to_number(t.bMaxLevelBySet[ATTRIBUTE_SET_NECK], data[col++]);
str_to_number(t.bMaxLevelBySet[ATTRIBUTE_SET_HEAD], data[col++]);
str_to_number(t.bMaxLevelBySet[ATTRIBUTE_SET_SHIELD], data[col++]);
str_to_number(t.bMaxLevelBySet[ATTRIBUTE_SET_EAR], data[col++]);
str_to_number(t.bMaxLevelBySet[ATTRIBUTE_SET_COSTUME], data[col++]);
str_to_number(t.bMaxLevelBySet[ATTRIBUTE_SET_HAIR], data[col++]);
 
sys_log(0, "ITEM_ATTR: %-20s %4lu { %3d %3d %3d %3d %3d } { %d %d %d %d %d %d %d }",
t.szApply,
t.dwProb,
t.lValues[0],
t.lValues[1],
t.lValues[2],
t.lValues[3],
t.lValues[4],
t.bMaxLevelBySet[ATTRIBUTE_SET_WEAPON],
t.bMaxLevelBySet[ATTRIBUTE_SET_BODY],
t.bMaxLevelBySet[ATTRIBUTE_SET_WRIST],
t.bMaxLevelBySet[ATTRIBUTE_SET_FOOTS],
t.bMaxLevelBySet[ATTRIBUTE_SET_NECK],
t.bMaxLevelBySet[ATTRIBUTE_SET_HEAD],
t.bMaxLevelBySet[ATTRIBUTE_SET_SHIELD],
t.bMaxLevelBySet[ATTRIBUTE_SET_EAR]);
 
m_vec_itemAttrTable.push_back(t);
}
 
return true;

 
I dalej nie chce dodawać bonusów. Gdzie znowu o czymś zapomniałem? xD
Opublikowano

 

Zobacz do którego momentu dochodzi (który return false), np za pomocą testowych chatów.

Nie bardzo rozumiem. W jaki sposób mam to zrobić?

 

nie jestem programistą ani nic xD

Ale chyba chodzi ze masz dopisac do kazdego retrumu coś takiego jak w questach np say("") xD

Opublikowano

 

 

Zobacz do którego momentu dochodzi (który return false), np za pomocą testowych chatów.

Nie bardzo rozumiem. W jaki sposób mam to zrobić?

 

ChatPacket

 

if (GetType() == ITEM_COSTUME)
{
if (GetSubType() == COSTUME_BODY)
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("costume body"));
return ATTRIBUTE_SET_COSTUME;
else if (GetSubType() == COSTUME_HAIR)
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("costume hair"));
return ATTRIBUTE_SET_HAIR;
}

Coś takiego? Przy kompilacji wywala takie błędy:


item_attribute.cpp:25: error: 'ChatPacket' was not declared in this scope
item_attribute.cpp:27: error: expected primary-expression before 'else'
item_attribute.cpp:27: error: expected `;' before 'else'
Opublikowano

Po pierwsze nie w tym pliku, po drugie nawet jakbys dodal w prawidlowe miejsce to i tak zjebałeś bo po if'ie jesli chcesz dodać wiecej niz jedno instrukcje to musisz dać w klamrach! xD

 

 

 

if (item2->GetType() == ITEM_COSTUME && item2->GetSubType() == COSTUME_BODY && item->GetVnum() != 33052 && item->GetVnum() != 33053) {
	ChatPacket(CHAT_TYPE_INFO, "test #0");
	return false;
}
									
if (item->IsPremiumBonusItem() && !item2->bonusOnlyByPremiumItem()) {
	ChatPacket(CHAT_TYPE_INFO, "test #1");
	return false;
}

if (item2->GetAttributeSetIndex() == -1)
{
	ChatPacket(CHAT_TYPE_INFO, "test #2");
	return false;
}

ChatPacket(CHAT_TYPE_INFO, "test #3");

 

Opublikowano

Po pierwsze nie w tym pliku, po drugie nawet jakbys dodal w prawidlowe miejsce to i tak zjebałeś bo po if'ie jesli chcesz dodać wiecej niz jedno instrukcje to musisz dać w klamrach! xD

 

 

 

if (item2->GetType() == ITEM_COSTUME && item2->GetSubType() == COSTUME_BODY && item->GetVnum() != 33052 && item->GetVnum() != 33053) {
	ChatPacket(CHAT_TYPE_INFO, "test #0");
	return false;
}
									
if (item->IsPremiumBonusItem() && !item2->bonusOnlyByPremiumItem()) {
	ChatPacket(CHAT_TYPE_INFO, "test #1");
	return false;
}

if (item2->GetAttributeSetIndex() == -1)
{
	ChatPacket(CHAT_TYPE_INFO, "test #2");
	return false;
}

ChatPacket(CHAT_TYPE_INFO, "test #3");

 

 

Po przeciągnięciu dodania na kostium pojawia się tylko napis, że "Nie można zmienić bonusu".

 

Wpisy od tych dodań mam takie:

 

33052 "71085" "ITEM_USE" "USE_ADD_ATTRIBUTE" 1 "NONE" "ITEM_STACKABLE" "NONE" "NONE" 0 0 0 0 0 "LIMIT_NONE" 0 "LIMIT_NONE" 0 "APPLY_NONE" 0 "APPLY_NONE" 0 "APPLY_NONE" 0 0 0 0 0 0 0 0 0 0
33053 "71085" "ITEM_USE" "USE_ADD_ATTRIBUTE" 1 "NONE" "ITEM_STACKABLE" "NONE" "NONE" 0 0 0 0 0 "LIMIT_NONE" 0 "LIMIT_NONE" 0 "APPLY_NONE" 0 "APPLY_NONE" 0 "APPLY_NONE" 0 0 0 0 0 0 0 0 0 0
Opublikowano

No czyli gdzieś wcześniej w ogóle Ci wywala, ten komunikat to w ogóle z serwera leci, czy już z klienta? (chodzi o "Nie można zmienić bonusu".)?

Już działa, musiałem usunąć ten wpis:

if (ITEM_COSTUME == item2->GetType())
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ĽÓĽşŔ» şŻ°ćÇŇ Ľö ľř´Â ľĆŔĚĹŰŔÔ´Ď´Ů."));
return false;
}

Dzięki wielkie za pomoc. :) 

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...