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ę.

Problemy z implementacją systemu rarity feature

Featured Replies

Opublikowano

Witam

Chciałbym prosić o pomoc w rozwiązaniu błędów podczas kompilacji game, co mogłem zepsuć, że aż tyle błędów:

C++Kod został skopiowany
questlua_pc.cpp:2841:2: error: unknown type name 'ALUA'2841 | ALUA(pc_give_rarity_item) // If it does not compile, edit "ALUA" to "int pc_instant_equip(lua_State * L)".     |  ^ questlua_pc.cpp:2843:3: error: unexpected type name 'LPCHARACTER': expected expression2843 | LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr();     |   ^ questlua_pc.cpp:2843:15: error: expected '}'2843 | LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr();     |               ^ questlua_pc.cpp:2842:2: note: to match this '{'2842 | {     |  ^ questlua_pc.cpp:2845:3: error: expected unqualified-id2845 | if (!lua_isstring(L, 1) && !lua_isnumber(L, 1))     |   ^ questlua_pc.cpp:2854:3: error: expected unqualified-id2854 | if (lua_isnumber(L, 1))     |   ^ questlua_pc.cpp:2858:3: error: expected unqualified-id2858 | else if (!ITEM_MANAGER::instance().GetVnum(lua_tostring(L, 1), dwVnum))     |   ^ questlua_pc.cpp:2867:3: error: expected unqualified-id2867 | if (lua_isnumber(L, 2) && lua_tonumber(L, 2) > 0)     |   ^ questlua_pc.cpp:2878:3: error: a type specifier is required for all declarations2878 | sys_log(0, "QUEST [REWARD] item %s to %s", lua_tostring(L, 1), ch->GetName());     |   ^ questlua_pc.cpp:2878:59: error: use of undeclared identifier 'L'2878 | sys_log(0, "QUEST [REWARD] item %s to %s", lua_tostring(L, 1), ch->GetName());     |                                                           ^ questlua_pc.cpp:2878:66: error: use of undeclared identifier 'ch'2878 | sys_log(0, "QUEST [REWARD] item %s to %s", lua_tostring(L, 1), ch->GetName());     |                                                                  ^ questlua_pc.cpp:2882:25: error: expected function body after function declarator2882 | LogManager::instance().QuestRewardLog(pPC->GetCurrentQuestName().c_str(), ch->GetPlayerID(), ch->GetLevel(), dwVnum, 1);     |                         ^ questlua_pc.cpp:2884:17: error: use of undeclared identifier 'ch'2884 | LPITEM item = ch->AutoGiveItem(dwVnum, 1);     |                 ^ questlua_pc.cpp:2886:3: error: expected unqualified-id2886 | if (item)     |   ^ questlua_pc.cpp:2907:3: error: expected unqualified-id2907 | if (NULL != item)     |   ^ questlua_pc.cpp:2909:3: error: expected unqualified-id2909 | else     |   ^ questlua_pc.cpp:2911:3: error: expected unqualified-id2911 | return 1;     |   ^ questlua_pc.cpp:2919:19: error: use of undeclared identifier 'pc_get_wear'; did you mean 'quest::pc_get_wear'?2919 | { "get_wear", pc_get_wear },     |                   ^~~~~~~~~~~     |                   quest::pc_get_wear questlua_pc.cpp:915:6: note: 'quest::pc_get_wear' declared here 915 | int pc_get_wear(lua_State * L)     |     ^ questlua_pc.cpp:2920:23: error: use of undeclared identifier 'pc_get_player_id'; did you mean 'quest::pc_get_player_id'?2920 | { "get_player_id", pc_get_player_id },     |                       ^~~~~~~~~~~~~~~~     |                       quest::pc_get_player_id questlua_pc.cpp:2468:6: note: 'quest::pc_get_player_id' declared here2468 | int pc_get_player_id(lua_State* L)     |     ^ questlua_pc.cpp:2921:24: error: use of undeclared identifier 'pc_get_account_id'; did you mean 'quest::pc_get_account_id'?2921 | { "get_account_id", pc_get_account_id },     |                        ^~~~~~~~~~~~~~~~~     |                        quest::pc_get_account_id questlua_pc.cpp:2484:6: note: 'quest::pc_get_account_id' declared here2484 | int pc_get_account_id(lua_State* L)     |     ^ fatal error: too many errors emitted, stopping now [-ferror-limit=]

questlua_pc.cppNiedostępne

Rozwiązane przez Sevence

  • Odpowiedzi 88
  • Wyświetleń 2,6 tys.
  • Dodano
  • Ostatniej odpowiedzi

Top użytkownicy w tym temacie

Najbardziej popularny wpis

  • Można też używać Worda. Nigdzie nie jest napisane co się używa, a czego nie.

  • Spróbuj skompilować i podrzuć kolejne błędy, ale umieść je poprzez blok kodu w pierwszej opcji menu edytora będą lepiej podświetlone. questlua_pc.cpp

  • Poprawiłem Ci głównie ten błąd, który miałeś na powyższym logu z błędu, sprawdź i daj znać jeśli pojawią się jakieś inne problemy. ui.py

Opublikowane grafiki

Opublikowano
  • Arcymistrz

📌Wskazówki - jak szybciej uzyskać pomoc i uniknąć zbędnych pytań

Co powinieneś dołączyć do tematu?

  • sysser, syslog (z odpowiedniego kanału gry, klienta, db, auih)

Opisz dokładnie problem

  • Co się dzieje i w jakich okolicznościach?

  • Jakie pliki/systemy edytowałeś?

  • Jakie pliki serwerowe / źródło używasz?

  • Jeśli dodawałeś jakiś system podaj nazwę lub link/załącznik.

Dobre praktyki

  • Kod dodawaj zawsze jako 'blok kodu' - będzie łatwiejszy do analizowania (opcje znajdziesz w pierwszej liście rozwijanej w edytorze)

  • Nie wklejaj logów jako tekst - dodaj jako załączniki.

  • Udało Ci się rozwiązać problem samemu? Napisz JAK! Pomożesz wtedy również innym.

Awaria serwera? (awaria kanału gry, logowania, bazy)

Sprawdź, czy pojawił się plik '.core' w katalogu kanału/db/auth będzie on zawierał informacje o przyczynie awarii. Zrób debug tego pliku następnie wrzuć wynik (screen lub log) do tematu.

Opublikowano
  • Autor

Dobra, kompilacja clienta i game udana.

Lecz jak odpalam clienta mam error.

Czy jest opcja w vs aby automatycznie sama to naprawiła bo jak dobrze rozumiem chodzi o wcięcia w kodzie.

20250815_105955.jpg

Opublikowano

Pobierz sobie program notepad++ i w nim możesz podejrzeć plik Pythona i zaznaczyć opcję pokaż wszystkie znaki wtedy gdy masz strzałkę oznacza że jest tabulacja gdy kropki oznacza, że masz spacje - muszą być albo same tabulatory w całym pliku (tak jest domyślnie) albo same spacje.

GIF 15.08.2025 11-09-14.gif

Jeśli sobie nie poradzisz prześlij plik lub fragment kodu, który dodawałeś, zerkniemy.

Opublikowano
  • Programista
W dniu 15.08.2025 o 10:46, wojciech74 napisał(a):

PyCharm się używa do pythona

Można też używać Worda. Nigdzie nie jest napisane co się używa, a czego nie.

Edytowane przez Thorek

Opublikowano
W dniu 15.08.2025 o 10:51, Thorek napisał(a):

Można też używać Worda. Nigdzie nie jest napisane co się używa, a czego nie.

Można, ale pewnie miał na myśli, żeby użyć IDE dedykowane pod dany język programowania, bo masz wiele udogodnień i tego typu błędy są eliminowane.

Spróbuj z tabulatorami w ten sposób:

ui.pyNiedostępne

Jak otrzymasz jakiś błąd wrzuć log w odpowiedzi. Poruszasz wiele błędów w tym temacie. Najlepiej utworzyć nowy temat z nowym problem, bo wtedy możemy lepiej je zaindeksować i łatwiej je wyszukać w przyszłości. A tak to trudno dostosować tytuł aby opisać wszystkie błędy tu poruszane.

Opublikowano
W dniu 15.08.2025 o 10:51, Thorek napisał(a):

Można też używać Worda. Nigdzie nie jest napisane co się używa, a czego nie.

I do czego ten post? Widzisz, że gość nie ogarnia. Równie dobrze mogłeś to napisać w temacie "Czego słuchasz" czy jakoś tak albo się nie wypowiadać

Opublikowano
  • Autor

Znalazłem w pliku jeszcze kilka drobnych błędów i udało się je naprawić. Lecz to nie koniec i mam taki komunikat:

17552567248942181555035974218856.jpg

Opublikowano
  • Autor

To są wszystkie pliki które edytowałem.

ui.pyNiedostępne uitooltip.pyNiedostępne

Do pliku uitooltip.py dodałem:

PythonKod został skopiowany
[...] class ToolTip(ui.ThinBoard): 	[...]		if app.ENABLE_RARITY_FEATURE:		RARITY_COLORS = [0xffffffff, 0xff79ff4d, 0xff3399ff, 0xff42f5f5, 0xffff9900, 0xffdb4dff] #Color codes: common, uncommon, normal, rare, legendary, mythic 	[...] 	def AddItemData(self, itemVnum, metinSlot, attrSlot = 0, flags = 0, unbindTime = 0, window_type = player.INVENTORY, slotIndex = -1):		[...]				self.__SetItemTitle(itemVnum, metinSlot, attrSlot)				if app.ENABLE_RARITY_FEATURE:			if (item.ITEM_TYPE_WEAPON == itemType or item.ITEM_TYPE_ARMOR == itemType) and constInfo.ENABLE_RARITY_FOR_NORMAL_ITEMS:				if not constInfo.IsRarityDisabledItem(itemVnum):					self.__AppendRarityTitle(metinSlot)			if item.ITEM_TYPE_COSTUME == itemType and constInfo.ENABLE_RARITY_FOR_COSTUME_ITEMS:				if not constInfo.IsRarityDisabledItem(itemVnum):					self.__AppendRarityTitle(metinSlot) 		[...] 		### Weapon ###		if item.ITEM_TYPE_WEAPON == itemType:			[...]						self.__AppendAttributeInformation(attrSlot)						if app.ENABLE_RARITY_FEATURE and constInfo.ENABLE_RARITY_FOR_NORMAL_ITEMS:				if not constInfo.IsRarityDisabledItem(itemVnum):					self.__AppendRarityInformation(metinSlot) 			[...] 		### Armor ###		elif item.ITEM_TYPE_ARMOR == itemType:			[...]						self.__AppendAttributeInformation(attrSlot) 			if app.ENABLE_RARITY_FEATURE and constInfo.ENABLE_RARITY_FOR_NORMAL_ITEMS:				if not constInfo.IsRarityDisabledItem(itemVnum):					self.__AppendRarityInformation(metinSlot)							[...]				[...]				elif 0 != isCostumeItem:			[...]			self.__AppendAttributeInformation(attrSlot)						if app.ENABLE_RARITY_FEATURE and constInfo.ENABLE_RARITY_FOR_COSTUME_ITEMS:				if not constInfo.IsRarityDisabledItem(itemVnum):					self.__AppendRarityInformation(metinSlot) 			[...]							[...] 	if app.ENABLE_RARITY_FEATURE:				def __AppendRarityInformation(self, metinSlot):			if metinSlot:				rarity = metinSlot[constInfo.RARITY_ITEM_SOCKET]				values = ["-10%", "-5%", "+0%", "+3%", "+5%", "+10%"] #Rarity values: common, uncommon, normal, rare, legendary, mythic				self.AppendTextLine(localeInfo.RARITY_INFO_TEXT % values[rarity], self.RARITY_COLORS[rarity])								def __AppendRarityTitle(self, metinSlot):			if metinSlot:				rarity = metinSlot[constInfo.RARITY_ITEM_SOCKET]				rarity_names = [localeInfo.RARITY_0, localeInfo.RARITY_1, localeInfo.RARITY_2, localeInfo.RARITY_3, localeInfo.RARITY_4, localeInfo.RARITY_5] #Rarity names: common, uncommon, normal, rare, legendary, mythic				self.AppendTextLine(rarity_names[rarity], self.RARITY_COLORS[rarity])			[...]

Do pliku constinfo.py dodałem:

PythonKod został skopiowany
#Add:import appif app.ENABLE_RARITY_FEATURE:	RARITY_DISABLED_ITEMS = [19, 29]	RARITY_ITEM_SOCKET = 3	ENABLE_RARITY_FOR_NORMAL_ITEMS = 1	ENABLE_RARITY_FOR_COSTUME_ITEMS = 1		def IsRarityDisabledItem(itemVnum):		for i in range (len(RARITY_DISABLED_ITEMS)):			if RARITY_DISABLED_ITEMS[i] == itemVnum:				return True		return False

Do pliku ui.py dodałem:

PythonKod został skopiowany
#Add in class SlotWindow(Window):	if app.__BL_SLOT_TIME_INFO__:		def EnableSlotTimeInfoText(self, slotindex):			wndMgr.EnableSlotTimeInfoText(self.hWnd, slotindex)				def DeactivateSlotTimeInfoText(self, slotindex):			wndMgr.DeactivateSlotTimeInfoText(self.hWnd, slotindex)

constinfo.pyNiedostępne

Opublikowano
  • Autor

Klient uruchamia się, lecz wywala nas podczas logowania.

logi:

TextKod został skopiowany
networkModule.SetSelectCharacterPhase - <type 'exceptions.IndentationError'>:unindent does not match any outer indentation level (uiToolTip.py, line 965)

Kroki, którą wykonałem w tym pliku:

TextKod został skopiowany
[...] class ToolTip(ui.ThinBoard): 	[...]		if app.ENABLE_RARITY_FEATURE:		RARITY_COLORS = [0xffffffff, 0xff79ff4d, 0xff3399ff, 0xff42f5f5, 0xffff9900, 0xffdb4dff] #Color codes: common, uncommon, normal, rare, legendary, mythic 	[...] 	def AddItemData(self, itemVnum, metinSlot, attrSlot = 0, flags = 0, unbindTime = 0, window_type = player.INVENTORY, slotIndex = -1):		[...]				self.__SetItemTitle(itemVnum, metinSlot, attrSlot)				if app.ENABLE_RARITY_FEATURE:			if (item.ITEM_TYPE_WEAPON == itemType or item.ITEM_TYPE_ARMOR == itemType) and constInfo.ENABLE_RARITY_FOR_NORMAL_ITEMS:				if not constInfo.IsRarityDisabledItem(itemVnum):					self.__AppendRarityTitle(metinSlot)			if item.ITEM_TYPE_COSTUME == itemType and constInfo.ENABLE_RARITY_FOR_COSTUME_ITEMS:				if not constInfo.IsRarityDisabledItem(itemVnum):					self.__AppendRarityTitle(metinSlot) 		[...] 		### Weapon ###		if item.ITEM_TYPE_WEAPON == itemType:			[...]						self.__AppendAttributeInformation(attrSlot)						if app.ENABLE_RARITY_FEATURE and constInfo.ENABLE_RARITY_FOR_NORMAL_ITEMS:				if not constInfo.IsRarityDisabledItem(itemVnum):					self.__AppendRarityInformation(metinSlot) 			[...] 		### Armor ###		elif item.ITEM_TYPE_ARMOR == itemType:			[...]						self.__AppendAttributeInformation(attrSlot) 			if app.ENABLE_RARITY_FEATURE and constInfo.ENABLE_RARITY_FOR_NORMAL_ITEMS:				if not constInfo.IsRarityDisabledItem(itemVnum):					self.__AppendRarityInformation(metinSlot)							[...]				[...]				elif 0 != isCostumeItem:			[...]			self.__AppendAttributeInformation(attrSlot)						if app.ENABLE_RARITY_FEATURE and constInfo.ENABLE_RARITY_FOR_COSTUME_ITEMS:				if not constInfo.IsRarityDisabledItem(itemVnum):					self.__AppendRarityInformation(metinSlot) 			[...]							[...] 	if app.ENABLE_RARITY_FEATURE:				def __AppendRarityInformation(self, metinSlot):			if metinSlot:				rarity = metinSlot[constInfo.RARITY_ITEM_SOCKET]				values = ["-10%", "-5%", "+0%", "+3%", "+5%", "+10%"] #Rarity values: common, uncommon, normal, rare, legendary, mythic				self.AppendTextLine(localeInfo.RARITY_INFO_TEXT % values[rarity], self.RARITY_COLORS[rarity])								def __AppendRarityTitle(self, metinSlot):			if metinSlot:				rarity = metinSlot[constInfo.RARITY_ITEM_SOCKET]				rarity_names = [localeInfo.RARITY_0, localeInfo.RARITY_1, localeInfo.RARITY_2, localeInfo.RARITY_3, localeInfo.RARITY_4, localeInfo.RARITY_5] #Rarity names: common, uncommon, normal, rare, legendary, mythic				self.AppendTextLine(rarity_names[rarity], self.RARITY_COLORS[rarity])			[...]

uitooltip.pyNiedostępne

Opublikowano
  • Autor

Clienta gotowy.

Lecz jest problem taki, gdy się pojawię jedna nogą na mapie zatrzymuje się serwer , client działa poprawnie, 0 logów

Opublikowano
  • Autor
W dniu 16.08.2025 o 14:44, Sevence napisał(a):

W jakim sensie zatrzymuje się serwer? Sprawdź procesy na serwerze, czy działają wszystkie, czy może coś się wysypało wpisz polecenie ps i zobacz. Jak padło coś to musisz zerknąć w pliki sysser/syslog w kanale na który logujesz i ewentualnie dołącz je tu gdy coś tam zauważysz.

Jedynie co znalazłem interesującego:

JSONKod został skopiowany
SYSERR: Aug 16 17:35:27 :: pid_init: Start of pid: 1173 SYSERR: Aug 16 17:36:15 :: heart_idle: losing 47 seconds. (lag occured)

Po sprawdzeniu na spokojnie jeszcze raz plików błąd chyba będzie tutaj:

C++Kod został skopiowany
void CItem::ModifyPoints(bool bAdd, LPCHARACTER character){    if (!character)     {        character = m_pOwner;                if (!character)            return;    }    int32_t accessoryGrade = (IsAccessoryForSocket()) ? MIN(GetAccessorySocketGrade(), ITEM_ACCESSORY_SOCKET_MAX_NUM) : 0;    if (false  IsAccessoryForSocket() && (m_pProto->bType  ITEM_WEAPON || m_pProto->bType == ITEM_ARMOR))     {        for (int32_t i = 0; i < ITEM_SOCKET_MAX_NUM; ++i)         {            uint32_t dwVnum = GetSocket(i);                        if (dwVnum <= 2)                 continue;            TItemTable *p = ITEM_MANAGER::instance().GetTable(dwVnum);            if (!p)                 continue;            if (ITEM_METIN == p->bType)             {                for (int32_t j = 0; j < ITEM_APPLY_MAX_NUM; ++j)                 {                    if (p->aApplies[j].bType == APPLY_NONE)                         continue;                    int32_t applyValue = (bAdd ? p->aApplies[j].lValue : (p->aApplies[j].bType == APPLY_SKILL ? p->aApplies[j].lValue ^ 0x00800000 : -p->aApplies[j].lValue));                    character->ApplyPoint(p->aApplies[j].bType, applyValue);                }            }        }    }    for (int32_t i = 0; i < ITEM_APPLY_MAX_NUM; ++i)     {        if (m_pProto->aApplies[i].bType == APPLY_NONE)             continue;        if (IsMount())            continue;        int32_t value = m_pProto->aApplies[i].lValue;#if defined(ENABLE_RARITY_FEATURE) && defined(RARITY_ENABLE_VALUE_ON_APPLIES)        int rarity = int(GetSocket(RARITY_ITEM_SOCKET));        int32_t calc = value * int(RARITY_VALUES[rarity]) / 100;        switch (GetType())        {#ifdef ENABLE_RARITY_FOR_NORMAL_ITEMS            case ITEM_ARMOR:            case ITEM_WEAPON:#endif#ifdef ENABLE_RARITY_FOR_COSTUME_ITEMS            case ITEM_COSTUME:#endif                if (!IsRarityDisabledItem(GetVnum()))                    value += calc;                break;        }        if (test_server && m_pOwner)            m_pOwner->ChatPacket(CHAT_TYPE_INFO, "Rarity Feature > #%i Apply: %i; Before: %i x After: %i", GetVnum(), i, m_pProto->aApplies[i].lValue, value);#endif        if (m_pProto->aApplies[i].bType == APPLY_SKILL)        {            character->ApplyPoint(m_pProto->aApplies[i].bType, bAdd ? value : value ^ 0x00800000);        }        else        {            if (0 != accessoryGrade)                value += MAX(accessoryGrade, value * aiAccessorySocketEffectivePct[accessoryGrade] / 100);            character->ApplyPoint(m_pProto->aApplies[i].bType, bAdd ? value : -value);        }    }    if (!CItemVnumHelper::IsRamadanMoonRing(GetVnum()) && !CItemVnumHelper::IsHalloweenCandy(GetVnum())        && !CItemVnumHelper::IsHappinessRing(GetVnum()) && !CItemVnumHelper::IsLovePendant(GetVnum()))    {        for (int32_t i = 0; i < ITEM_ATTRIBUTE_MAX_NUM; ++i)         {            if (GetAttributeType(i))             {                const TPlayerItemAttribute& ia = GetAttribute(i);#if (defined ENABLE_RARITY_FEATURE && defined RARITY_ENABLE_VALUE_ON_APPLIES)                int rarity = int(GetSocket(RARITY_ITEM_SOCKET));                int32_t value = ia.sValue;                int32_t calc = value * int(RARITY_VALUES[rarity]) / 100;				                switch (GetType())                {#ifdef ENABLE_RARITY_FOR_NORMAL_ITEMS                    case ITEM_ARMOR:                    case ITEM_WEAPON:#endif#ifdef ENABLE_RARITY_FOR_COSTUME_ITEMS                    case ITEM_COSTUME:#endif                        if (!IsRarityDisabledItem(GetVnum()))                            value += calc;                        break;                }                if (test_server && m_pOwner)                    m_pOwner->ChatPacket(CHAT_TYPE_INFO, "Rarity Feature > #%i Attr: %i; Before: %i x After: %i", GetVnum(), i, ia.sValue, value);                if (ia.bType == APPLY_SKILL)                    character->ApplyPoint(ia.bType, bAdd ? value : value ^ 0x00800000);                else                    character->ApplyPoint(ia.bType, bAdd ? value : -value);#else                if (ia.bType == APPLY_SKILL)                    character->ApplyPoint(ia.bType, bAdd ? ia.sValue : ia.sValue ^ 0x00800000);                else                    character->ApplyPoint(ia.bType, bAdd ? ia.sValue : -ia.sValue);#endif            }        }    }    switch (m_pProto->bType)    {        case ITEM_PICK:        case ITEM_ROD:        case ITEM_WEAPON:        {            if (m_wCell == INVENTORY_MAX_NUM + WEAR_WEAPON)            {                uint32_t partValue = bAdd ? GetVnum() : character->GetOriginalPart(PART_WEAPON);                character->SetPart(PART_WEAPON, partValue);            }        }        break;        case ITEM_ARMOR:        {            if (0 != character->GetWear(WEAR_COSTUME_BODY))                break;            if (GetSubType() == ARMOR_BODY)            {                if (bAdd)                {                    if (GetProto()->bSubType == ARMOR_BODY)                    {                        character->SetPart(PART_MAIN, GetVnum());                    }                }                else                {                    if (GetProto()->bSubType == ARMOR_BODY)                    {                        character->SetPart(PART_MAIN, character->GetOriginalPart(PART_MAIN));                    }                }            }        }        break;        case ITEM_COSTUME:        {            uint32_t toSetValue = this->GetVnum();            EParts targetPart = PART_MAX_NUM;            if (GetSubType() == COSTUME_BODY)            {                targetPart = PART_MAIN;                if (!bAdd)                {                    const CItem* armor = m_pOwner->GetWear(WEAR_BODY);                    toSetValue = (nullptr != armor) ? armor->GetVnum() : m_pOwner->GetOriginalPart(PART_MAIN);                }            }            else if (GetSubType() == COSTUME_HAIR)            {                targetPart = PART_HAIR;                toSetValue = bAdd ? this->GetValue(3) : 0;            }            if (PART_MAX_NUM != targetPart)            {                m_pOwner->SetPart((uint8_t)targetPart, toSetValue);                m_pOwner->UpdatePacket();            }        }        break;        case ITEM_UNIQUE:        {            uint32_t sigVnum = GetSIGVnum();                        if (sigVnum != 0)            {                const CSpecialItemGroup* pItemGroup = ITEM_MANAGER::instance().GetSpecialItemGroup(sigVnum);                                if (pItemGroup)                {                    uint32_t dwAttrVnum = pItemGroup->GetAttrVnum(GetVnum());                    const CSpecialAttrGroup* pAttrGroup = ITEM_MANAGER::instance().GetSpecialAttrGroup(dwAttrVnum);                                        if (pAttrGroup)                    {                        int32_t applyModifier = bAdd ? 1 : -1;                                                for (const auto& attr : pAttrGroup->m_vecAttrs)                        {                            character->ApplyPoint(attr.apply_type, applyModifier * attr.apply_value);                        }                    }                }            }        }        break;    }}

syserrNiedostępne syslogNiedostępne

zmiany w pliku:

C++Kod został skopiowany
[...] #ifdef ENABLE_RARITY_FEATUREstatic const int RARITY_DISABLED_ITEMS[] = {19, 29}; static const int RARITY_VALUES[] = {-10, -5, 0, 3, 5, 10};#endif [...] void CItem::ModifyPoints(bool bAdd){	int accessoryGrade; 	if (false == IsAccessoryForSocket())	{		[...] 		accessoryGrade = 0;	}	else	{		accessoryGrade = MIN(GetAccessorySocketGrade(), ITEM_ACCESSORY_SOCKET_MAX_NUM);	} 	for (int i = 0; i < ITEM_APPLY_MAX_NUM; ++i)	{		if (m_pProto->aApplies[i].bType == APPLY_NONE)			continue; 		long value = m_pProto->aApplies[i].lValue;#if (defined ENABLE_RARITY_FEATURE && defined RARITY_ENABLE_VALUE_ON_APPLIES)					int rarity = int(GetSocket(RARITY_ITEM_SOCKET));		long calc = value * int(RARITY_VALUES[rarity]) / 100;					switch (GetType())		{#ifdef ENABLE_RARITY_FOR_NORMAL_ITEMS			case ITEM_ARMOR:			case ITEM_WEAPON:#endif#ifdef ENABLE_RARITY_FOR_COSTUME_ITEMS			case ITEM_COSTUME:#endif				if (!IsRarityDisabledItem(GetVnum()))					value += calc;		}				if (test_server)			m_pOwner->ChatPacket(CHAT_TYPE_INFO, "Rarity Feature > #%i Apply: %i; Before: %i x After: %i", GetVnum(), i, m_pProto->aApplies[i].lValue, value);#endif	 		if (m_pProto->aApplies[i].bType == APPLY_SKILL)		{			m_pOwner->ApplyPoint(m_pProto->aApplies[i].bType, bAdd ? value : value ^ 0x00800000);		}		else		{			if (0 != accessoryGrade)				value += MAX(accessoryGrade, value * aiAccessorySocketEffectivePct[accessoryGrade] / 100); 			m_pOwner->ApplyPoint(m_pProto->aApplies[i].bType, bAdd ? value : -value);		}	}		[...]	if (true == CItemVnumHelper::IsRamadanMoonRing(GetVnum()) || true == CItemVnumHelper::IsHalloweenCandy(GetVnum())		|| true == CItemVnumHelper::IsHappinessRing(GetVnum()) || true == CItemVnumHelper::IsLovePendant(GetVnum()))	{		// Do not anything.	}	else	{		for (int i = 0; i < ITEM_ATTRIBUTE_MAX_NUM; ++i)		{			if (GetAttributeType(i))			{				const TPlayerItemAttribute& ia = GetAttribute(i);#if (defined ENABLE_RARITY_FEATURE && defined RARITY_ENABLE_VALUE_ON_ATTRS)				int rarity = int(GetSocket(RARITY_ITEM_SOCKET));				long value = ia.sValue;				long calc = value * int(RARITY_VALUES[rarity]) / 100;								switch (GetType())				{#ifdef ENABLE_RARITY_FOR_NORMAL_ITEMS					case ITEM_ARMOR:					case ITEM_WEAPON:#endif#ifdef ENABLE_RARITY_FOR_COSTUME_ITEMS					case ITEM_COSTUME:#endif						if (!IsRarityDisabledItem(GetVnum()))							value += calc;				}								if (test_server)					m_pOwner->ChatPacket(CHAT_TYPE_INFO, "Rarity Feature > #%i Attr: %i; Before: %i x After: %i", GetVnum(), i, ia.sValue, value);								if (ia.bType == APPLY_SKILL)					m_pOwner->ApplyPoint(ia.bType, bAdd ? value : value ^ 0x00800000);				else					m_pOwner->ApplyPoint(ia.bType, bAdd ? value : -value);				#else				if (ia.bType == APPLY_SKILL)					m_pOwner->ApplyPoint(ia.bType, bAdd ? ia.sValue : ia.sValue ^ 0x00800000);				else					m_pOwner->ApplyPoint(ia.bType, bAdd ? ia.sValue : -ia.sValue);					#endif			}		}	}	[...]} [...] #ifdef ENABLE_RARITY_FEATUREbool CItem::IsRarityDisabledItem(int itemVnum){	for (unsigned int i=0; i < sizeof(RARITY_DISABLED_ITEMS)/sizeof(*RARITY_DISABLED_ITEMS); i++)		if (RARITY_DISABLED_ITEMS[i] == itemVnum)			return true;	return false;}#endif [...]

item.cppNiedostępne

Opublikowano
JSONKod został skopiowany
heart_idle: losing 47 seconds. (lag occured)

Ten błąd wynika z 'laga' maszyny zbyt mało zasobów, spróbuj zrestartować. Może to też wynikać z błędu, który dodatkowo obciążył proces i się wysypało, ale w logach nic nie widać poza tym. Jak nadal otrzymasz ten sam problem to zerknij w syslog db_process i login_process. Sprawdzałeś czy procesy działają?

Opublikowano
W dniu 16.08.2025 o 16:07, benio101 napisał(a):

SYSERR: Aug 16 17:35:25 :: Start: TABLE_POSTFIX not configured use default z db.process

To nawet nie błąd tylko log informacyjny. Rozumiem, że nadal podczas logowania się zawiesza serwer, tak? Jak zresetujesz, spróbujesz logować i wtedy się 'zawiesie' to wpisz w konsole tam gdzie uruchamiasz skrypt panelu ps i podrzuć screena zobaczymy czy procesy działają.

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.