Jump to content

How To Fix Blessing Scroll


Recommended Posts

if (pkItemScroll->GetValue(0) == YONGSIN_SCROLL)
	{
		success_prob = MIN(100,success_prob+10);
	}

Fixxed and Function.

 

Bye

  • Love 4
  • Lmao 1

I'm looking for opportunities as Community Manager/Tester

 

 

The world ain't all sunshine and rainbows. 

It's a very mean and nasty place, and I don't care how tough you are, it will beat you to your knees and keep you there permanently if you let it. 

You, me, or nobody is gonna hit as hard as life. But it ain't about how hard you hit. 

It's about how hard you can get hit and keep moving forward; how much you can take and keep moving forward. 

That's how winning is done! Now, if you know what you're worth, then go out and get what you're worth. 

But you gotta be willing to take the hits, and not pointing fingers saying you ain't where you wanna be because of him, or her, or anybody. 

Cowards do that and that ain't you. You're better than that! 

Link to comment

The blessing scroll don't give 10%+ Upp. With this fix BS Give 10+%

  • Love 1

I'm looking for opportunities as Community Manager/Tester

 

 

The world ain't all sunshine and rainbows. 

It's a very mean and nasty place, and I don't care how tough you are, it will beat you to your knees and keep you there permanently if you let it. 

You, me, or nobody is gonna hit as hard as life. But it ain't about how hard you hit. 

It's about how hard you can get hit and keep moving forward; how much you can take and keep moving forward. 

That's how winning is done! Now, if you know what you're worth, then go out and get what you're worth. 

But you gotta be willing to take the hits, and not pointing fingers saying you ain't where you wanna be because of him, or her, or anybody. 

Cowards do that and that ain't you. You're better than that! 

Link to comment

Nope. The rate 10+ are unfixxed. :D

I'm looking for opportunities as Community Manager/Tester

 

 

The world ain't all sunshine and rainbows. 

It's a very mean and nasty place, and I don't care how tough you are, it will beat you to your knees and keep you there permanently if you let it. 

You, me, or nobody is gonna hit as hard as life. But it ain't about how hard you hit. 

It's about how hard you can get hit and keep moving forward; how much you can take and keep moving forward. 

That's how winning is done! Now, if you know what you're worth, then go out and get what you're worth. 

But you gotta be willing to take the hits, and not pointing fingers saying you ain't where you wanna be because of him, or her, or anybody. 

Cowards do that and that ain't you. You're better than that! 

Link to comment
  • Honorable Member
25040	Blessing Scroll	Reduces the risk of destroying an Item if the upgrade fails. The cost of this save is that the quality is reduced by 1 point.
71032	Dragon Scroll	Eliminates the risk of destroying an item if the improvement fails. Only its quality will be decreased by 1. Additionally, the probability of a successful improvement will increase by 10%.

Do you see the differences?

Those lines from .UK client.

And here is from .DE:

25040	Segensschriftrolle	Beseitigt das Risiko, einen Gegenstand zu zerstören, wenn seine Verbesserung fehlschlägt. In diesem Fall wird lediglich seine Qualität um 1 verringert.
71032	Schriftrolle des Drachen	Beseitigt das Risiko, einen Gegenstand zu zerstören, wenn seine Verbesserung fehlschlägt. Es wird nur die Qualität um eine Stufe verringert. Zudem erhöht sich die Wahrscheinlichkeit einer erfolgreichen Verbesserung um 10 %.

Your modification removes the blessing scorlls. Do you understand?

  • Good 1
Link to comment

Yea but this 10% don't exist. Without a fix :D

 

I  have tested.

I'm looking for opportunities as Community Manager/Tester

 

 

The world ain't all sunshine and rainbows. 

It's a very mean and nasty place, and I don't care how tough you are, it will beat you to your knees and keep you there permanently if you let it. 

You, me, or nobody is gonna hit as hard as life. But it ain't about how hard you hit. 

It's about how hard you can get hit and keep moving forward; how much you can take and keep moving forward. 

That's how winning is done! Now, if you know what you're worth, then go out and get what you're worth. 

But you gotta be willing to take the hits, and not pointing fingers saying you ain't where you wanna be because of him, or her, or anybody. 

Cowards do that and that ain't you. You're better than that! 

Link to comment
  • Developer

You are wrong.

 

The Blessing scroll doesn't give +10% succesfull rate, just grants that the item will not be lost after trying to improve it.

 

The Dragon Scroll, instead, should give +10% succesfull rate, BUT it doesn't, it has a completely different refine-function, check the gamefile and you will know what i'm talking about.

 

try to refine an item with 90% success rate and use the Dragon scroll, the probability will not be 100%, the item can fail.

try to refine an item with 100% success rate and use the Dragon scroll, the probability will not be 110%, the item can fail either. ;)

👑 Premium International Lua Developer 👑

 My service topic: https://bit.ly/2UPly54

 

Ignorant people have the obligation to compensate their ignorance by paying whoever helps them.

Syreldar

Link to comment
  • VIP

Exactly. The Dragon God blessing scroll and Master Compass are said to increase the upgrade rate but in reality they have a fixed table. We changed that in our game so it's really 10% more effective.

  • Love 2

 

 

Link to comment
  • Developer

Exactly. The Dragon God blessing scroll and Master Compass are said to increase the upgrade rate but in reality they have a fixed table. We changed that in our game so it's really 10% more effective.

Yes, that's correct.

👑 Premium International Lua Developer 👑

 My service topic: https://bit.ly/2UPly54

 

Ignorant people have the obligation to compensate their ignorance by paying whoever helps them.

Syreldar

Link to comment
  • 9 months later...
if (pkItemScroll->GetValue(0) == YONGSIN_SCROLL)
		{
			if (LC_IsYMIR() == true || LC_IsKorea() == true)
				success_prob = hyuniron_prob_euckr[MINMAX(0, item->GetRefineLevel(), 8)];
			else
				success_prob = hyuniron_prob[MINMAX(0, item->GetRefineLevel(), 8)];
		}

for

if (pkItemScroll->GetValue(0) == YONGSIN_SCROLL)
	{
		success_prob = MIN(100,success_prob+10);
	}

?

 

and how to change YONGSIN_SCROLL to normal id ?

 

-----------------------------------------------------------

const char hyuniron_prob[9] = { 100, 75, 65, 55, 45, 40, 35, 25, 20 };
		const char hyuniron_prob_euckr[9] = { 100, 75, 65, 55, 45, 40, 35, 30, 25 };

		const char yagong_prob[9] = { 100, 100, 90, 80, 70, 60, 50, 30, 20 };
		const char yagong_prob_euckr[9] = { 100, 100, 90, 80, 70, 60, 50, 40, 30 };

		if (pkItemScroll->GetValue(0) == YONGSIN_SCROLL)
		{
			if (LC_IsYMIR() == true || LC_IsKorea() == true)
				success_prob = hyuniron_prob_euckr[MINMAX(0, item->GetRefineLevel(), 8)];
			else
				success_prob = hyuniron_prob[MINMAX(0, item->GetRefineLevel(), 8)];
		}
		else if (pkItemScroll->GetValue(0) == YAGONG_SCROLL)
		{
			if (LC_IsYMIR() == true || LC_IsKorea() == true)
				success_prob = yagong_prob_euckr[MINMAX(0, item->GetRefineLevel(), 8)];
			else
				success_prob = yagong_prob[MINMAX(0, item->GetRefineLevel(), 8)];
		}
		else

Thats mean the yongsin give +5%, yagong +5%?

Link to comment
 
Which one scroll is blacksmith handbook
 
 
CHUKBOK_SCROLL = 0,
    HYUNIRON_CHN   = 1, // Áß±ążˇĽ­¸¸ »çżë
    YONGSIN_SCROLL = 2,
    MUSIN_SCROLL   = 3,
    YAGONG_SCROLL  = 4,
    MEMO_SCROLL       = 5,
    BDRAGON_SCROLL    = 6,
 
 
Or that a scroll what id and where it is declared, what file?
Link to comment
  • 4 weeks later...
  • 10 months later...
  • 1 year later...
  • 4 years later...

This is old topic, but if anyone want idea, here is my function...

bool CHARACTER::DoRefineWithScroll(LPITEM item)
{
	if (!CanHandleItem(true))
	{
		ClearRefineMode();
		return false;
	}

	ClearRefineMode();

	const TRefineTable * prt = CRefineManager::instance().GetRefineRecipe(item->GetRefineSet());

	if (!prt)
		return false;

	LPITEM pkItemScroll;

	if (m_iRefineAdditionalCell < 0)
		return false;

	pkItemScroll = GetInventoryItem(m_iRefineAdditionalCell);

	if (!pkItemScroll)
		return false;

	if (!(pkItemScroll->GetType() == ITEM_USE && pkItemScroll->GetSubType() == USE_TUNING))
		return false;

	if (pkItemScroll->GetVnum() == item->GetVnum())
		return false;

	DWORD result_vnum = item->GetRefinedVnum();
	DWORD result_fail_vnum = item->GetRefineFromVnum();

	if (result_vnum == 0)
	{
		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("No advancement possible."));
		return false;
	}

	TItemTable * pProto = ITEM_MANAGER::instance().GetTable(item->GetRefinedVnum());

	if (!pProto)
	{
		sys_err("DoRefineWithScroll NOT GET ITEM PROTO %d", item->GetRefinedVnum());
		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("This Item can't be made better."));
		return false;
	}

	// Check level limit in korea only
	if (!g_iUseLocale)
	{
		for (int i = 0; i < ITEM_LIMIT_MAX_NUM; ++i)
		{
			long limit = pProto->aLimits[i].lValue;

			switch (pProto->aLimits[i].bType)
			{
				case LIMIT_LEVEL:
					if (GetLevel() < limit)
					{
						ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Your Level is lower than the required Level of the Item."));
						return false;
					}
					break;
			}
		}
	}

	if (GetGold() < prt->cost)
	{
		ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Not enough Yang for an advancement."));
		return false;
	}

	for (int i = 0; i < prt->material_count; ++i)
	{
		if (CountSpecifyItem(prt->materials[i].vnum) < prt->materials[i].count)
		{
			if (test_server)
			{
				ChatPacket(CHAT_TYPE_INFO, "Find %d, count %d, require %d", prt->materials[i].vnum, CountSpecifyItem(prt->materials[i].vnum), prt->materials[i].count);
			}
			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Not enough material for an advancement."));
			return false;
		}
	}

	for (int i = 0; i < prt->material_count; ++i)
		RemoveSpecifyItem(prt->materials[i].vnum, prt->materials[i].count);

	int prob = number(1, 100);
	int success_prob = prt->prob;
	bool bDestroyWhenFail = false;

	const char* szRefineType = "SCROLL";

	const char blessing_scroll_prob[9] = {90, 80, 70, 60, 50, 40, 30, 20, 10};
	const char magic_stone_prob[9] = {90, 80, 70, 60, 50, 40, 30, 20, 10};
	const char dragon_scroll_prob[9] = {100, 90, 80, 70, 60, 50, 40, 30, 20};

	if (pkItemScroll->GetValue(0) == BLESSING_SCROLL)
	{
		success_prob = blessing_scroll_prob[MINMAX(0, item->GetRefineLevel(), 8)];
		szRefineType = "BLESSING_SCROLL";
	}
	else if (pkItemScroll->GetValue(0) == MAGIC_STONE)
	{
		success_prob = magic_stone_prob[MINMAX(0, item->GetRefineLevel(), 8)];
		bDestroyWhenFail = true;
		szRefineType = "MAGIC_STONE";
	}
	else if (pkItemScroll->GetValue(0) == DRAGON_SCROLL)
	{
		success_prob = dragon_scroll_prob[MINMAX(0, item->GetRefineLevel(), 8)];
		szRefineType = "DRAGON_SCROLL";
	}
	else
	{
		sys_err("REFINE : Unknown refine scroll item. Value0: %d", pkItemScroll->GetValue(0));
	}

	if (test_server)
	{
		ChatPacket(CHAT_TYPE_INFO, "[Only Test] Success_Prob %d, RefineLevel %d ", success_prob, item->GetRefineLevel());
	}

	pkItemScroll->SetCount(pkItemScroll->GetCount() - 1);

	if (prob <= success_prob)
	{
		LPITEM pkNewItem = ITEM_MANAGER::instance().CreateItem(result_vnum, 1, 0, false);

		if (pkNewItem)
		{
			ITEM_MANAGER::CopyAllAttrTo(item, pkNewItem);
			LogManager::instance().ItemLog(this, pkNewItem, "REFINE SUCCESS", pkNewItem->GetName());

			BYTE bCell = item->GetCell();

			NotifyRefineSuccess(this, item, szRefineType);
			DBManager::instance().SendMoneyLog(MONEY_LOG_REFINE, item->GetVnum(), -prt->cost);
			ITEM_MANAGER::instance().RemoveItem(item, "REMOVE (REFINE SUCCESS)");

			pkNewItem->AddToCharacter(this, TItemPos(INVENTORY, bCell));
			ITEM_MANAGER::instance().FlushDelayedSave(pkNewItem);
			pkNewItem->AttrLog();
			//PointChange(POINT_GOLD, -prt->cost);
			PayRefineFee(prt->cost);
		}
		else
		{
			sys_err("cannot create item %u", result_vnum);
			NotifyRefineFail(this, item, szRefineType);
		}
	}
	else if (!bDestroyWhenFail && result_fail_vnum)
	{
		LPITEM pkNewItem = ITEM_MANAGER::instance().CreateItem(result_fail_vnum, 1, 0, false);

		if (pkNewItem)
		{
			ITEM_MANAGER::CopyAllAttrTo(item, pkNewItem);
			LogManager::instance().ItemLog(this, pkNewItem, "REFINE FAIL", pkNewItem->GetName());

			BYTE bCell = item->GetCell();

			DBManager::instance().SendMoneyLog(MONEY_LOG_REFINE, item->GetVnum(), -prt->cost);
			NotifyRefineFail(this, item, szRefineType, -1);
			ITEM_MANAGER::instance().RemoveItem(item, "REMOVE (REFINE FAIL)");

			pkNewItem->AddToCharacter(this, TItemPos(INVENTORY, bCell));
			ITEM_MANAGER::instance().FlushDelayedSave(pkNewItem);

			pkNewItem->AttrLog();

			//PointChange(POINT_GOLD, -prt->cost);
			PayRefineFee(prt->cost);
		}
		else
		{
			sys_err("cannot create item %u", result_fail_vnum);
			NotifyRefineFail(this, item, szRefineType);
		}
	}
	else
	{
		NotifyRefineFail(this, item, szRefineType);

		PayRefineFee(prt->cost);
	}

	return true;
}

 

  • Metin2 Dev 1
  • Good 1
Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


×
×
  • Create New...

Important Information

Terms of Use / Privacy Policy / Guidelines / We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.