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

Jak ustawić żeby yang wpadały bezpośrednio do ekwipunku? Jak wyłączyć premię yang, która wypada?

Nieaktywny

Featured Replies

Opublikowano

Witam,

Chciałbym ograniczyć ilość śmieci na ziemii (drop z mobów) mianowicie chodzi mi o drop yang które lecą na ziemię, chciałbym zrobić tak aby yangi trafiały prosto do eq gracza - jak to zrobić?

Rozwiązane przez Sevence

Przejdź do rozwiązania
Opublikowano

Trzecią rękę możesz sobie ustawić w navicacie w zakładce account, ustawiasz datę autoloot_expire na 10 lat do przodu, a jeśli cjhodzi o yangbombę to sam bym chciał wiedzieć bo jest to irytujące.

Opublikowano
  • Autor

Niestety to rozwiązuje problem połowicznie bo w praktyce te yangi nadal wylatują na ziemię.

Opublikowano
  • Rozwiązanie

Najprościej będzie dodać trzecią rękę, które realizuje podnoszenie yang z ziemi.

To zapytanie doda trzecią rękę dla obecnych kont i nowo utworzonych.

UPDATE account SET autoloot_expire = '2029-12-31 23:59:59';
ALTER TABLE account MODIFY autoloot_expire DATETIME NOT NULL DEFAULT '2029-12-31 23:59:59';

1 minutę temu, P48 napisał(a):

Niestety to rozwiązuje problem połowicznie bo w praktyce te yangi nadal wylatują na ziemię.

To jest tzw. yang bomba, czyli premia yang, której domyślnie trzecia ręka nie uwzględnia i wypadają na ziemie. Można to wyłączyć tylko tu trzeba będzie wprowadzić zmiany w źródle gry i przekompilować.

Opublikowano
  • Autor
1 godzinę temu, Sevence napisał(a):

Najprościej będzie dodać trzecią rękę, które realizuje podnoszenie yang z ziemi.

To zapytanie doda trzecią rękę dla obecnych kont i nowo utworzonych.

UPDATE account SET autoloot_expire = '2029-12-31 23:59:59';
ALTER TABLE account MODIFY autoloot_expire DATETIME NOT NULL DEFAULT '2029-12-31 23:59:59';

To jest tzw. yang bomba, czyli premia yang, której domyślnie trzecia ręka nie uwzględnia i wypadają na ziemie. Można to wyłączyć tylko tu trzeba będzie wprowadzić zmiany w źródle gry i przekompilować.

Spróbuję tego

Opublikowano

Może chodzi o te rozwiązanie z char_battle (DISABLE_YANG_BOMB) ?

void CHARACTER::RewardGold(LPCHARACTER pkAttacker)
{
	// ADD_PREMIUM
	bool isAutoLoot =
		(pkAttacker->GetPremiumRemainSeconds(PREMIUM_AUTOLOOT) > 0 ||
		 pkAttacker->IsEquipUniqueGroup(UNIQUE_GROUP_AUTOLOOT))
		? true : false;
	// END_OF_ADD_PREMIUM
	PIXEL_POSITION pos = GetXYZ(); // @fixme194 GetMovablePosition is useless here
	int iTotalGold = 0;
	int iGoldPercent = MobRankStats[GetMobRank()].iGoldPercent;
	if (pkAttacker->IsPC())
		iGoldPercent = iGoldPercent * (100 + CPrivManager::instance().GetPriv(pkAttacker, PRIV_GOLD_DROP)) / 100;
	if (pkAttacker->GetPoint(POINT_MALL_GOLDBONUS))
		iGoldPercent += (iGoldPercent * pkAttacker->GetPoint(POINT_MALL_GOLDBONUS) / 100);
	iGoldPercent = iGoldPercent * CHARACTER_MANAGER::instance().GetMobGoldDropRate(pkAttacker) / 100;
	// ADD_PREMIUM
	if (pkAttacker->GetPremiumRemainSeconds(PREMIUM_GOLD) > 0 ||
			pkAttacker->IsEquipUniqueGroup(UNIQUE_GROUP_LUCKY_GOLD))
		iGoldPercent += iGoldPercent;
	// END_OF_ADD_PREMIUM
	if (iGoldPercent > 100)
		iGoldPercent = 100;
	int iPercent;
	if (GetMobRank() >= MOB_RANK_BOSS)
		iPercent = ((iGoldPercent * PERCENT_LVDELTA_BOSS(pkAttacker->GetLevel(), GetLevel())) / 100);
	else
		iPercent = ((iGoldPercent * PERCENT_LVDELTA(pkAttacker->GetLevel(), GetLevel())) / 100);
	if (number(1, 100) > iPercent)
		return;
	int iGoldMultipler = GetGoldMultipler();
	if (1 == number(1, 50000))
		iGoldMultipler *= 10;
	else if (1 == number(1, 10000))
		iGoldMultipler *= 5;
	if (pkAttacker->GetPoint(POINT_GOLD_DOUBLE_BONUS))
		if (number(1, 100) <= pkAttacker->GetPoint(POINT_GOLD_DOUBLE_BONUS))
			iGoldMultipler *= 2;
	if (test_server)
		pkAttacker->ChatPacket(CHAT_TYPE_PARTY, "gold_mul %d rate %d", iGoldMultipler, CHARACTER_MANAGER::instance().GetMobGoldAmountRate(pkAttacker));
	LPITEM item;
	int iGold10DropPct = 100;
	iGold10DropPct = (iGold10DropPct * 100) / (100 + CPrivManager::instance().GetPriv(pkAttacker, PRIV_GOLD10_DROP));
	if (GetMobRank() >= MOB_RANK_BOSS && !IsStone() && GetMobTable().dwGoldMax != 0)
	{
		if (1 == number(1, iGold10DropPct))
			iGoldMultipler *= 10; // 1% Č®·ü·Î µ· 10ąč
		int iSplitCount = number(25, 35);
		for (int i = 0; i < iSplitCount; ++i)
		{
			int iGold = number(GetMobTable().dwGoldMin, GetMobTable().dwGoldMax) / iSplitCount;
			if (test_server)
				sys_log(0, "iGold %d", iGold);
			iGold = iGold * CHARACTER_MANAGER::instance().GetMobGoldAmountRate(pkAttacker) / 100;
			iGold *= iGoldMultipler;
			if (iGold == 0)
			{
				continue ;
			}
			if (test_server)
			{
				sys_log(0, "Drop Moeny MobGoldAmountRate %d %d", CHARACTER_MANAGER::instance().GetMobGoldAmountRate(pkAttacker), iGoldMultipler);
				sys_log(0, "Drop Money gold %d GoldMin %d GoldMax %d", iGold, GetMobTable().dwGoldMax, GetMobTable().dwGoldMax);
			}
			// NOTE: µ· ĆřĹşŔş Á¦ 3ŔÇ ĽŐ Ăł¸®¸¦ ÇĎÁö ľĘŔ
#ifdef DISABLE_YANG_BOMB
			pkAttacker->GiveGold(iGold / iSplitCount);
			iTotalGold += iGold;
#else
			if ((item = ITEM_MANAGER::instance().CreateItem(1, iGold)))
			{
				pos.x = GetX() + ((number(-14, 14) + number(-14, 14)) * 23);
				pos.y = GetY() + ((number(-14, 14) + number(-14, 14)) * 23);
				item->AddToGround(GetMapIndex(), pos);
				item->StartDestroyEvent();
				iTotalGold += iGold; // Total gold
			}
#endif
		}
	}
	// 1% Č®·ü·Î µ·Ŕ» 10°ł ¶łľî ¶ß¸°´Ů. (10ąč µĺ·ÓŔÓ
#ifndef DISABLE_YANG_BOMB
	else if (1 == number(1, iGold10DropPct))
	{
		//
		// µ· ĆřĹş˝Ä µĺ·Ó
		//
		for (int i = 0; i < 10; ++i)
		{
			int iGold = number(GetMobTable().dwGoldMin, GetMobTable().dwGoldMax);
			iGold = iGold * CHARACTER_MANAGER::instance().GetMobGoldAmountRate(pkAttacker) / 100;
			iGold *= iGoldMultipler;
			if (iGold == 0)
			{
				continue;
			}
			// NOTE: µ· ĆřĹşŔş Á¦ 3ŔÇ ĽŐ Ăł¸®¸¦ ÇĎÁö ľĘŔ˝
			if ((item = ITEM_MANAGER::instance().CreateItem(1, iGold)))
			{
				pos.x = GetX() + (number(-7, 7) * 20);
				pos.y = GetY() + (number(-7, 7) * 20);
				item->AddToGround(GetMapIndex(), pos);
				item->StartDestroyEvent();
				iTotalGold += iGold; // Total gold
			}
		}
	}
#endif
	else
	{
		//
		// ŔĎąÝŔűŔÎ ąć˝ÄŔÇ µ· µĺ·Ó
		//
		int iGold = number(GetMobTable().dwGoldMin, GetMobTable().dwGoldMax);
		iGold = iGold * CHARACTER_MANAGER::instance().GetMobGoldAmountRate(pkAttacker) / 100;
		iGold *= iGoldMultipler;
		int iSplitCount;
		if (iGold >= 3 && !LC_IsYMIR()) 
			iSplitCount = number(1, 3);
		else if (GetMobRank() >= MOB_RANK_BOSS)
		{
			iSplitCount = number(3, 10);
			if ((iGold / iSplitCount) == 0)
				iSplitCount = 1;
		}
		else
			iSplitCount = 1;
		if (iGold != 0)
		{
			iTotalGold += iGold; // Total gold
			for (int i = 0; i < iSplitCount; ++i)
			{
				if (isAutoLoot)
				{
					pkAttacker->GiveGold(iGold / iSplitCount);
				}
				else if ((item = ITEM_MANAGER::instance().CreateItem(1, iGold / iSplitCount)))
				{
					pos.x = GetX() + (number(-7, 7) * 20);
					pos.y = GetY() + (number(-7, 7) * 20);
					item->AddToGround(GetMapIndex(), pos);
					item->StartDestroyEvent();
				}
			}
		}
	}
	DBManager::instance().SendMoneyLog(MONEY_LOG_MONSTER, GetRaceNum(), iTotalGold);
}
Opublikowano
  • Autor

@Sevence 

mysql> UPDATE account SET autoloot_expire = '2050-12-31 23:59:59';
ALTER TABLE account MODIFY autoloot_expire DATETIME NOT NULL DEFAULT '2050-12-31 23:59:59';
Query OK, 0 rows affected (0.00 sec)
Rows matched: 3 Changed: 0 Warnings: 0
Query OK, 0 rows affected (0.00 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql>

Dodało się prawidłowo aczkolwiek nie działa to w grze. Stworzyłem kolejną postać na test i nic. Yangi na ziemi.

@Januszek To mam rozumieć wyłącza yang bomb? a Ja tutaj próbuję "wgrać" automatyczne podnoszenie yang, chciałbym żeby zamiast na ziemie trafiały od razu do eq. To co podesłał sevence jest okej, w jakimś stopniu rozwiąże problem, tylko niestety u mnie oczywiście nie działa.

Opublikowano
  • Autor

@Sevence Restartowałem i nie, nie ma aktywnego vipa

@Sevence Ogarnąłem, nie wiem czemu ale nie może być 2050r. Maksymalny rok w kalendarzu w navi to 2029. Zmieniłem tylko rok w twoim zapytaniu i wszystko bangla!

Opublikowano

Likwidacja yang bomby działa, po modyfikacji tego co dał @Januszek yang bomba zamiast na ziemię wpada do eq.
Tutaj poprawiony kod, wystarczy zamienić i skompilować game.

void CHARACTER::RewardGold(LPCHARACTER pkAttacker)
{
	if (!pkAttacker || !pkAttacker->IsPC())
		return;

	int iTotalGold = 0;

	int iGoldPercent = MobRankStats[GetMobRank()].iGoldPercent;

	if (pkAttacker->IsPC())
		iGoldPercent = iGoldPercent * (100 + CPrivManager::instance().GetPriv(pkAttacker, PRIV_GOLD_DROP)) / 100;

	if (pkAttacker->GetPoint(POINT_MALL_GOLDBONUS))
		iGoldPercent += (iGoldPercent * pkAttacker->GetPoint(POINT_MALL_GOLDBONUS) / 100);

	iGoldPercent = iGoldPercent * CHARACTER_MANAGER::instance().GetMobGoldDropRate(pkAttacker) / 100;

	if (pkAttacker->GetPremiumRemainSeconds(PREMIUM_GOLD) > 0 ||
		pkAttacker->IsEquipUniqueGroup(UNIQUE_GROUP_LUCKY_GOLD))
	{
		iGoldPercent += iGoldPercent;
	}

	if (iGoldPercent > 100)
		iGoldPercent = 100;

	int iPercent;

	if (GetMobRank() >= MOB_RANK_BOSS)
		iPercent = (iGoldPercent * PERCENT_LVDELTA_BOSS(pkAttacker->GetLevel(), GetLevel())) / 100;
	else
		iPercent = (iGoldPercent * PERCENT_LVDELTA(pkAttacker->GetLevel(), GetLevel())) / 100;

	if (number(1, 100) > iPercent)
		return;

	int iGoldMultipler = GetGoldMultipler();

	if (1 == number(1, 50000))
		iGoldMultipler *= 10;
	else if (1 == number(1, 10000))
		iGoldMultipler *= 5;

	if (pkAttacker->GetPoint(POINT_GOLD_DOUBLE_BONUS))
	{
		if (number(1, 100) <= pkAttacker->GetPoint(POINT_GOLD_DOUBLE_BONUS))
			iGoldMultipler *= 2;
	}

	if (test_server)
		pkAttacker->ChatPacket(
			CHAT_TYPE_PARTY,
			"gold_mul %d rate %d",
			iGoldMultipler,
			CHARACTER_MANAGER::instance().GetMobGoldAmountRate(pkAttacker)
		);

	int iGold10DropPct = 100;

	iGold10DropPct = (iGold10DropPct * 100) /
		(100 + CPrivManager::instance().GetPriv(pkAttacker, PRIV_GOLD10_DROP));

	// ===============================
	// BOSS / MULTI-SPLIT GOLD
	// ===============================
	if (GetMobRank() >= MOB_RANK_BOSS && !IsStone() && GetMobTable().dwGoldMax != 0)
	{
		if (1 == number(1, iGold10DropPct))
			iGoldMultipler *= 10;

		int iSplitCount = number(25, 35);

		for (int i = 0; i < iSplitCount; ++i)
		{
			int iGold = number(GetMobTable().dwGoldMin, GetMobTable().dwGoldMax) / iSplitCount;

			iGold = iGold * CHARACTER_MANAGER::instance().GetMobGoldAmountRate(pkAttacker) / 100;
			iGold *= iGoldMultipler;

			if (iGold <= 0)
				continue;

			pkAttacker->GiveGold(iGold);
			iTotalGold += iGold;
		}
	}

	// ===============================
	// x10 DROP CASE
	// ===============================
	else if (1 == number(1, iGold10DropPct))
	{
		for (int i = 0; i < 10; ++i)
		{
			int iGold = number(GetMobTable().dwGoldMin, GetMobTable().dwGoldMax);

			iGold = iGold * CHARACTER_MANAGER::instance().GetMobGoldAmountRate(pkAttacker) / 100;
			iGold *= iGoldMultipler;

			if (iGold <= 0)
				continue;

			pkAttacker->GiveGold(iGold);
			iTotalGold += iGold;
		}
	}

	// ===============================
	// NORMAL CASE
	// ===============================
	else
	{
		int iGold = number(GetMobTable().dwGoldMin, GetMobTable().dwGoldMax);

		iGold = iGold * CHARACTER_MANAGER::instance().GetMobGoldAmountRate(pkAttacker) / 100;
		iGold *= iGoldMultipler;

		if (iGold > 0)
		{
			pkAttacker->GiveGold(iGold);
			iTotalGold += iGold;
		}
	}

	DBManager::instance().SendMoneyLog(
		MONEY_LOG_MONSTER,
		GetRaceNum(),
		iTotalGold
	);
}

sharegon_storage_chat_uploader_2026-01-07_01-30-54.png

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.