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

Nieaktywny

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:

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 expression
2843 | 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-id
2845 | if (!lua_isstring(L, 1) && !lua_isnumber(L, 1))
     |   ^

questlua_pc.cpp:2854:3: error: expected unqualified-id
2854 | if (lua_isnumber(L, 1))
     |   ^

questlua_pc.cpp:2858:3: error: expected unqualified-id
2858 | else if (!ITEM_MANAGER::instance().GetVnum(lua_tostring(L, 1), dwVnum))
     |   ^

questlua_pc.cpp:2867:3: error: expected unqualified-id
2867 | if (lua_isnumber(L, 2) && lua_tonumber(L, 2) > 0)
     |   ^

questlua_pc.cpp:2878:3: error: a type specifier is required for all declarations
2878 | 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 declarator
2882 | 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-id
2886 | if (item)
     |   ^

questlua_pc.cpp:2907:3: error: expected unqualified-id
2907 | if (NULL != item)
     |   ^

questlua_pc.cpp:2909:3: error: expected unqualified-id
2909 | else
     |   ^

questlua_pc.cpp:2911:3: error: expected unqualified-id
2911 | 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 here
2468 | 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 here
2484 | int pc_get_account_id(lua_State* L)
     |     ^

fatal error: too many errors emitted, stopping now [-ferror-limit=]

questlua_pc.cpp

Rozwiązane przez Sevence

Przejdź do rozwiązania
  • 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

📌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
4 minuty temu, 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
Teraz, 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.py

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
6 minut temu, 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.py uitooltip.py

Do pliku uitooltip.py dodałem:

[...]

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:

#Add:
import app
if 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:

#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.py

Opublikowano
  • Autor

Klient uruchamia się, lecz wywala nas podczas logowania.

logi:

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:

[...]

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

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
54 minuty temu, 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:

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:

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;
    }
}

syserr syslog

zmiany w pliku:

[...]

#ifdef ENABLE_RARITY_FEATURE
static 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_FEATURE
bool 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.cpp

Opublikowano
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
Teraz, 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.