Jump to content

WeedHex

VIP
  • Posts

    1,291
  • Joined

  • Last visited

  • Days Won

    33

WeedHex last won the day on June 4

WeedHex had the most liked content!

7 Followers

About WeedHex

Informations

  • Gender
    Not Telling

Recent Profile Visitors

3,382 profile views

WeedHex's Achievements

  1. You also changed the file after got the syserr so we have different lines. You have more than 3 sockets? Ps. ambiguous use of round brackets.
  2. Boost?? It's Kinda "Blind mode" ahhahah
  3. I don't use 6-7 btw this is an important fix! Thanks for sharing GG
  4. GRANT ALL PRIVILEGES or Use right password in dump command line maybe you need to put backslashes in your password... Ps. Use cron or PID for autobackups.
  5. data/monster mob_proto -> 'folder'
  6. Show a frame debugger when you show new maps like this. I think it's very heavy <.<
  7. A guy sold it and called it earthquake, btw thx for release
  8. 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:
  9. CPU and RAM frequency matters*. Ur game process is surely 32bit so 4GB ram is the max load for the game. Buy a nice GAME-1 / GAME-32 server if you want to stay quiet.
  10. Run #top Show picture / gif Btw if you have low power in server, use just 1 channel for testing. If you can't it too, use locale lol heart_idle: losing 30 seconds. (lag occured) This is a normal lag about cheap server connections, btw the idle gets right triggered after the lag.
  11. Declare in the header the extern constant initialization. Assign a value to the constant/variable in the cpp. Now by #Including the config file, you'll can use the new constant/variable everywhere as u prefer. You can edit the config value by using TOKEN("") too, with CONFIGs.
  12. Thanks for it, amazing work.
  13. You can call "dungeon" also a normal map with MMORPG dynamics as official does. Btw I'm just finding the detail ahahhaha
  14. bool CHARACTER::CheckSkillHitCount(const BYTE SkillID, const VID TargetVID) case SKILL_YEONSA: MaxAttackCountPerTarget = 7; break;
×
×
  • 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.