Jump to content

FIX KOREAN ERRORS #PART5


Go to solution Solved by WeedHex,

Recommended Posts

  • Premium
  • Solution

Hello Devs, has been a while since I didn't post anything, so I decided to try to remember some useful thing always in my theme "korean errors".

Let's go:

-1: An other common SQL error in mob_proto is

SELECT * FROM mob_proto WHERE gold_min > gold_max OR damage_min > damage_max;

Found anything? Good job!

 

-2: I found in official python (an old version maybe) a silly import in an "OnUpdate Def".

The file was: "uitarget.py" and the import "import event". Check if you have the same problem, I hope no for you.

 

-3: Years ago I posted a fix about the accessory's bonus by slots. The official mt2 in 2018 was showing on tooltip only x2 bonus but was applying x3 (if the item has x3 basic applies) from c++.

Nowadays my fix is wrong if you want to be updated like official, because they fixed the tooltip also for the third bonus. Now I show what I mean.

 

item.cpp

Find:

if (0 != accessoryGrade && i < ITEM_APPLY_MAX_NUM - 1)

If you have it like this, it's applying only x2 of 3 basic bonus by slot. So to be correct, change like this:

if (0 != accessoryGrade)

Now we can update the python part as official did.

 

uitooltip.py, the function def __AppendAccessoryMetinSlotInfo(...)  should be like this:

	def __AppendAccessoryMetinSlotInfo(self, metinSlot, mtrlVnum):
		ACCESSORY_SOCKET_MAX_SIZE = 3

		cur = min(metinSlot[0], ACCESSORY_SOCKET_MAX_SIZE)
		end = min(metinSlot[1], ACCESSORY_SOCKET_MAX_SIZE)

		affectType1, affectValue1 = item.GetAffect(0)
		affectList1 = [0, max(1, affectValue1 * 10 / 100), max(2, affectValue1 * 20 / 100), max(3, affectValue1 * 40 / 100)]

		affectType2, affectValue2 = item.GetAffect(1)
		affectList2 = [0, max(1, affectValue2 * 10 / 100), max(2, affectValue2 * 20 / 100), max(3, affectValue2 * 40 / 100)]

		affectType3, affectValue3 = item.GetAffect(2)
		affectList3 = [0, max(1, affectValue3 * 10 / 100), max(2, affectValue3 * 20 / 100), max(3, affectValue3 * 40 / 100)]

		mtrlPos = 0
		mtrlList = [mtrlVnum] * cur + [player.METIN_SOCKET_TYPE_SILVER] * (end - cur)
		for mtrl in mtrlList:
			affectString1 = self.__GetAffectString(affectType1, affectList1[mtrlPos + 1] - affectList1[mtrlPos])
			affectString2 = self.__GetAffectString(affectType2, affectList2[mtrlPos + 1] - affectList2[mtrlPos])
			affectString3 = self.__GetAffectString(affectType3, affectList3[mtrlPos + 1] - affectList3[mtrlPos])

			leftTime = 0
			if cur == mtrlPos + 1:
				leftTime = metinSlot[2]

			self.__AppendMetinSlotInfo_AppendMetinSocketData(mtrlPos, mtrl, affectString1, affectString2, affectString3, leftTime)
			mtrlPos += 1

And now we have to update the function:  __AppendMetinSlotInfo_AppendMetinSocketData(...) like this:

	def __AppendMetinSlotInfo_AppendMetinSocketData(self, index, metinSlotData, custumAffectString = "", custumAffectString2 = "", custumAffectString3 = "", leftTime = 0):
		slotType = self.GetMetinSocketType(metinSlotData)
		itemIndex = self.GetMetinItemIndex(metinSlotData)

		if 0 == slotType:
			return

		self.AppendSpace(5)

		slotImage = ui.ImageBox()
		slotImage.SetParent(self)
		slotImage.Show()

		## Name
		nameTextLine = ui.TextLine()
		nameTextLine.SetParent(self)
		nameTextLine.SetFontName(self.defFontName)
		nameTextLine.SetPackedFontColor(self.NORMAL_COLOR)
		nameTextLine.SetOutline()
		nameTextLine.SetFeather()
		nameTextLine.Show()

		self.childrenList.append(nameTextLine)

		if player.METIN_SOCKET_TYPE_SILVER == slotType:
			slotImage.LoadImage("d:/ymir work/ui/game/windows/metin_slot_silver.sub")
		elif player.METIN_SOCKET_TYPE_GOLD == slotType:
			slotImage.LoadImage("d:/ymir work/ui/game/windows/metin_slot_gold.sub")

		self.childrenList.append(slotImage)

		if localeInfo.IsARABIC():
			slotImage.SetPosition(self.toolTipWidth - slotImage.GetWidth() - 9, self.toolTipHeight - 1)
			nameTextLine.SetPosition(self.toolTipWidth - 50, self.toolTipHeight + 2)
		else:
			slotImage.SetPosition(9, self.toolTipHeight - 1)
			nameTextLine.SetPosition(50, self.toolTipHeight + 2)

		metinImage = ui.ImageBox()
		metinImage.SetParent(self)
		metinImage.Show()
		self.childrenList.append(metinImage)

		if itemIndex:
			item.SelectItem(itemIndex)

			## Image
			try:
				metinImage.LoadImage(item.GetIconImageFileName())
			except:
				dbg.TraceError("ItemToolTip.__AppendMetinSocketData() - Failed to find image file %d:%s" %
					(itemIndex, item.GetIconImageFileName())
				)

			nameTextLine.SetText(item.GetItemName())

			## Affect
			affectTextLine = ui.TextLine()
			affectTextLine.SetParent(self)
			affectTextLine.SetFontName(self.defFontName)
			affectTextLine.SetPackedFontColor(self.POSITIVE_COLOR)
			affectTextLine.SetOutline()
			affectTextLine.SetFeather()
			affectTextLine.Show()

			if localeInfo.IsARABIC():
				metinImage.SetPosition(self.toolTipWidth - metinImage.GetWidth() - 10, self.toolTipHeight)
				affectTextLine.SetPosition(self.toolTipWidth - 50, self.toolTipHeight + 16 + 2)
			else:
				metinImage.SetPosition(10, self.toolTipHeight)
				affectTextLine.SetPosition(50, self.toolTipHeight + 16 + 2)

			if custumAffectString:
				affectTextLine.SetText(custumAffectString)
			elif itemIndex != constInfo.ERROR_METIN_STONE:
				affectType, affectValue = item.GetAffect(0)
				affectString = self.__GetAffectString(affectType, affectValue)
				if affectString:
					affectTextLine.SetText(affectString)
			else:
				affectTextLine.SetText(localeInfo.TOOLTIP_APPLY_NOAFFECT)

			self.childrenList.append(affectTextLine)

			if custumAffectString2:
				affectTextLine = ui.TextLine()
				affectTextLine.SetParent(self)
				affectTextLine.SetFontName(self.defFontName)
				affectTextLine.SetPackedFontColor(self.POSITIVE_COLOR)
				if localeInfo.IsARABIC():
					affectTextLine.SetPosition(self.toolTipWidth - 50, self.toolTipHeight + 16 + 2 + 16 + 2)
				else:
					affectTextLine.SetPosition(50, self.toolTipHeight + 16 + 2 + 16 + 2)
				affectTextLine.SetOutline()
				affectTextLine.SetFeather()
				affectTextLine.Show()
				affectTextLine.SetText(custumAffectString2)
				self.childrenList.append(affectTextLine)
				self.toolTipHeight += 16 + 2

			if custumAffectString3:
				affectTextLine = ui.TextLine()
				affectTextLine.SetParent(self)
				affectTextLine.SetFontName(self.defFontName)
				affectTextLine.SetPackedFontColor(self.POSITIVE_COLOR)
				if localeInfo.IsARABIC():
					affectTextLine.SetPosition(self.toolTipWidth - 50, self.toolTipHeight + 16 + 2 + 16 + 2)
				else:
					affectTextLine.SetPosition(50, self.toolTipHeight + 16 + 2 + 16 + 2)
				affectTextLine.SetOutline()
				affectTextLine.SetFeather()
				affectTextLine.Show()
				affectTextLine.SetText(custumAffectString3)
				self.childrenList.append(affectTextLine)
				self.toolTipHeight += 16 + 2

			if 0 != leftTime:
				timeText = (localeInfo.LEFT_TIME + " : " + localeInfo.SecondToDHM(leftTime))
				timeTextLine = ui.TextLine()
				timeTextLine.SetParent(self)
				timeTextLine.SetFontName(self.defFontName)
				timeTextLine.SetPackedFontColor(self.POSITIVE_COLOR)
				if localeInfo.IsARABIC():
					timeTextLine.SetPosition(self.toolTipWidth - 50, self.toolTipHeight + 16 + 2 + 16 + 2)
				else:
					timeTextLine.SetPosition(50, self.toolTipHeight + 16 + 2 + 16 + 2)
				timeTextLine.SetOutline()
				timeTextLine.SetFeather()
				timeTextLine.Show()
				timeTextLine.SetText(timeText)
				self.childrenList.append(timeTextLine)
				self.toolTipHeight += 16 + 2

		else:
			nameTextLine.SetText(localeInfo.TOOLTIP_SOCKET_EMPTY)

		self.toolTipHeight += 35
		self.ResizeToolTip()

-4: I think this is 100% my idea, and it will fix some problem in maps that you don't know.

A simple refactor of the aggregate monster item function. A function very spammed in game and also badly done.

I changed it like this:

 

struct FuncAggregateMonster
{
    LPCHARACTER m_ch;
    FuncAggregateMonster(LPCHARACTER ch) { m_ch = ch; }

    void operator()(LPENTITY ent)
    {
        if (ent->IsType(ENTITY_CHARACTER))
        {
            const LPCHARACTER ch = (LPCHARACTER) ent;
            if (!ch)
                return;
            if (ch->IsPC())
                return;
            if (!ch->IsMonster())
                return;
            if (ch->GetVictim())
                return;

            // 85% trigger optimized (do not use 100%)
            if (number(0, 100) <= 85)
            {
                auto aggRange = 5000; //Default range

                //Example of range reduction, in this case for Ochao Index. You can do it also for mazes or monkey maps.
                //Without this change you can call the boss without making the path, through the walls
                if (ch->GetMapIndex() == 353)
                    aggRange = 2600;

                if (DISTANCE_APPROX(ch->GetX() - m_ch->GetX(), ch->GetY() - m_ch->GetY()) <= aggRange)
                {
                    if (ch->CanBeginFight())
                        ch->BeginFight(m_ch);
                }
            }
        }
    }
};

Because is always better to decrease the range in tight places.

 

That's all for now, thanks for reading and hope that been useful.

Check my last release about this themes:

 

Edited by WeedHex
  • Good 4
  • Love 9
Link to comment
Share on other sites

  • Bronze

Good job. Here are some more small additions. You can add to the post

1. file: DragonSoul.cpp

sys_err ("Cannot create DRAGON_HEART(%d).", DRAGON_HEART_VNUM);
return NULL;

replace to:

sys_err ("Cannot create DRAGON_HEART(%d).", DRAGON_HEART_VNUM);
return false;

 

2. file utils.cpp

return thecore_random() / (RAND_MAX + 1.f) * (b - a) + a;

replace to:

return thecore_random() / ((double)RAND_MAX + 1.f) * (b - a) + a;

 

  • Love 5
Link to comment
Share on other sites

  • 3 weeks later...
  • Premium

do_safebox_size small fix:

void CInputDB::SafeboxLoad(LPDESC d, const char * c_pData
{
***
BYTE bSize = std::clamp<BYTE>(p->bSize, 0, 3);
***
}

 

ACMD(do_safebox_size)
{
	char arg1[256];
	one_argument(argument, arg1, sizeof(arg1));

	int size = 0;

	if (*arg1)
		str_to_number(size, arg1);

	size = std::clamp(size, 0, 3);

	ch->ChatPacket(CHAT_TYPE_INFO, "Safebox size set to %d", size);
	ch->SetSafeboxSize(size * SAFEBOX_PAGE_SIZE);
}

 

Edited by flatik

c++latest, latest libs...

Link to comment
Share on other sites

Announcements



×
×
  • 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.