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

Szukam nowej zmianki która zmieni wszystkie bonusy oprócz średnich / obrażeń umiejętności

Featured Replies

Opublikowano

Poszukuje gotowego rozwiązania dla zmianki, która zmieni wszystkie bonusy prócz średnich i obrażeń umiejętności gdzieś to latało, ale wyszukać coś nie mogę ktoś to ma może?

Opublikowano

Nie wiem czy istnieje takie rozwiązanie publicznie. Musiałbyś zrobić nowy case w char_item.cpp na podstawie USE_CHANGE_ATTRIBUTE i chyba najlepszym rozwiązaniem byłoby zamiast wprowadzać zmiany wChangeAttribute to myślę że lepiej stworzyć nową funkcję, która ma zmienioną logikę i pobiera te dwa bonusy zapisuje wartość i przywraca podczas zmiany a resztę zmienia standardowo. Tu ci dałem mniej więcej zarys jakbym to zrobił wiadomo robisz sobie nowy use case dla tej zmianki.

C++Kod został skopiowany
case USE_CHANGE_ATTRIBUTE_SPECIAL:{	if (item2->GetAttributeSetIndex() == -1)	{		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("속성을 변경할 수 없는 아이템입니다."));		return false;	} 	if (item2->GetAttributeCount() == 0)	{		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("변경할 속성이 없습니다."));		return false;	} 	if (GM_PLAYER == GetGMLevel() && false == test_server)	{		// Event Flag 를 통해 이전에 아이템 속성 변경을 한 시간으로 부터 충분한 시간이 흘렀는지 검사		// 시간이 충분히 흘렀다면 현재 속성변경에 대한 시간을 설정 		DWORD dwChangeItemAttrCycle =			quest::CQuestManager::instance().GetEventFlag(msc_szChangeItemAttrCycleFlag); 		if (dwChangeItemAttrCycle < msc_dwDefaultChangeItemAttrCycle)			dwChangeItemAttrCycle = msc_dwDefaultChangeItemAttrCycle; 		quest::PC* pPC =			quest::CQuestManager::instance().GetPC(GetPlayerID()); 		if (pPC)		{			DWORD dwNowMin = get_global_time() / 60;			DWORD dwLastChangeItemAttrMin =				pPC->GetFlag(msc_szLastChangeItemAttrFlag); 			if (dwLastChangeItemAttrMin + dwChangeItemAttrCycle > dwNowMin)			{				ChatPacket(					CHAT_TYPE_INFO,					LC_TEXT("속성을 바꾼지 %d분 이내에는 다시 변경할 수 없습니다.(%d 분 남음)"),					dwChangeItemAttrCycle,					dwChangeItemAttrCycle - (dwNowMin - dwLastChangeItemAttrMin)				);				return false;			} 			pPC->SetFlag(msc_szLastChangeItemAttrFlag, dwNowMin);		}	} 	if (item->GetSubType() == USE_CHANGE_ATTRIBUTE2)	{		int aiChangeProb[ITEM_ATTRIBUTE_MAX_LEVEL] =		{			0, 0, 30, 40, 3		}; 		item2->ChangeAttributeIgnored(aiChangeProb);	}	else if (item->GetVnum() == 76014)	{		int aiChangeProb[ITEM_ATTRIBUTE_MAX_LEVEL] =		{			0, 10, 50, 39, 1		}; 		item2->ChangeAttributeIgnored(aiChangeProb);	}	else	{		// 연재경 특수처리 (하드코딩)		if (item->GetVnum() == 71151 || item->GetVnum() == 76023)		{			if (item2->GetType() == ITEM_WEAPON ||				(item2->GetType() == ITEM_ARMOR && item2->GetSubType() == ARMOR_BODY))			{				bool bCanUse = true; 				for (int i = 0; i < ITEM_LIMIT_MAX_NUM; ++i)				{					if (item2->GetLimitType(i) == LIMIT_LEVEL &&						item2->GetLimitValue(i) > 40)					{						bCanUse = false;						break;					}				} 				if (false == bCanUse)				{					ChatPacket(CHAT_TYPE_INFO, LC_TEXT("적용 레벨보다 높아 사용이 불가능합니다."));					break;				}			}			else			{				ChatPacket(CHAT_TYPE_INFO, LC_TEXT("무기와 갑옷에만 사용 가능합니다."));				break;			}		} 		item2->ChangeAttributeIgnored();	} 	ChatPacket(CHAT_TYPE_INFO, LC_TEXT("속성을 변경하였습니다.")); 	{		char buf[21];		snprintf(buf, sizeof(buf), "%u", item2->GetID());		LogManager::instance().ItemLog(this, item, "CHANGE_ATTRIBUTE", buf);	} 	item->SetCount(item->GetCount() - 1);	break;}

w item_attribute.cpp dodajesz pod tym oryginalnym changeattribute

C++Kod został skopiowany
void CItem::ChangeAttributeIgnoring(const int* aiChangeProb){	int iAttributeCount= GetAttributeCount(); 	if (iAttributeCount== 0)		return; 	std::vector<TPlayerItemAttribute> ignorujbonus;	ignorujbonus.reserve(iAttributeCount); 	for (int i = 0; i < iAttributeCount; ++i)	{		BYTE bType = GetAttributeType(i); 		if (bType == APPLY_SKILL_DAMAGE_BONUS || bType == APPLY_NORMAL_HIT_DAMAGE_BONUS)			ignorujbonus.push_back(m_aAttr[i]);	} 	ClearAttribute(); 	TItemTable const* pProto = GetProto(); 	if (pProto && pProto->sAddonType)	{		ApplyAddon(pProto->sAddonType);	} 	int iCurrentAttrIndex = GetAttributeCount(); 	for (const auto& attr : ignorujbonus)	{		if (iCurrentAttrIndex >= MAX_NORM_ATTR_NUM)			break; 		SetAttribute(iCurrentAttrIndex, attr.bType, attr.sValue);		++iCurrentAttrIndex;	} 	static const int tmpChangeProb[ITEM_ATTRIBUTE_MAX_LEVEL] =	{		0, 10, 40, 35, 15	}; 	for (int i = GetAttributeCount(); i < iAttributeCount; ++i)	{		if (aiChangeProb == NULL)		{			PutAttribute(tmpChangeProb);		}		else		{			PutAttribute(aiChangeProb);		}	}}

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

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.