Jump to content

How To Fix Blessing Scroll


C4M

Recommended Posts

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

Fixxed and Function.

 

Bye

  • Lmao 1
  • Love 4

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
Share on other sites

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
Share on other sites

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
Share on other sites

  • 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
Share on other sites

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
Share on other sites

  • Premium

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. ;)

 

"Nothing's free in this life.

Ignorant people have an obligation to make up for their ignorance by paying those who help them.

Either you got the brains or cash, if you lack both you're useless."

Syreldar

Link to comment
Share on other sites

  • Premium

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.

 

"Nothing's free in this life.

Ignorant people have an obligation to make up for their ignorance by paying those who help them.

Either you got the brains or cash, if you lack both you're useless."

Syreldar

Link to comment
Share on other sites

  • 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
Share on other sites

 
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
Share on other sites

  • 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
Share on other sites

Announcements



  • Similar Content

  • Similar Content

  • Similar Content

  • Tags

  • Activity

    1. 5

      Effect weapons

    2. 3

      Crystal Metinstone

    3. 3

      Feeding game source to LLM

    4. 113

      Ulthar SF V2 (TMP4 Base)

    5. 3

      Feeding game source to LLM

    6. 0

      Target Information System

    7. 3

      Feeding game source to LLM

    8. 2

      anti exp explanation pls

  • Recently Browsing

    • No registered users viewing this page.
×
×
  • 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.