Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation on 03/03/21 in all areas

  1. Skill Damage gets calculated before Average Damage, the latter is based on the result of the first. This is the default formula: iSkillBonus = MINMAX(-30, (int) (gauss_random(0, 5) + 0.5f), 30); if (abs(iSkillBonus) <= 20) iNormalHitBonus = -2 * iSkillBonus + abs(number(-8, 8) + number(-8, 8)) + number(1, 4); else iNormalHitBonus = -2 * iSkillBonus + number(1, 5); de facto, Max Avg Dmg should be 65% and Max Skill Dmg is 30%, but since values lower than 20 Skill Damage cause the Avg Damage to take into account the second calculation, it's impossible to get more than 60 Avg Damage, Max Skill Damage is still 30. Obviously, the formula is heavily weighted towards minimum values, so getting 50% Avg. Damage is significantly harder than getting 10% Avg Damage, and obviously the same goes for Skill Damage. The "+0.5f" has the purpose to round the value to the nearest integer.
    2 points
  2. V39 is out! Auto-Save option added New config option AUTO_SAVE_TIME Fixed some crashes like in save server attr button
    2 points
  3. is there any armor effect on EFFECT_REFINED+31? because its 229+31 and EFFECT_DAMAGE_TARGET is also 260
    2 points
  4. M2 Download Center Download Here ( Internal ) Hi, folks! With this guide you will be able to combine textlines with images, like rubinum does. Usage is simple: emojiTextLine.SetText("|Eemoji/key_ctrl|e + |Eemoji/key_x|e + |Eemoji/key_rclick|e - Direct sell") The files are located in the icon pack, so basically the code will load from icon/{GIVEN_PATH}.tga - in the sample the path for the X is: icon/emoji/key_x.tga Here are the images from rubinum client:  Howto: Have fun Sorry for arab players , for sure they have also developers, so let's go guys, finish it ? If you have problem, maybe I made a mistake in the guide of missed out something, just leave a comment below. PS.: Sometimes the code tag of the board puts an extra invisible character mostly the end of the lines, if your IDE cries for syntax error, but it seems correct, check that part of the file with notepad++, it will show a ?(question mark) where the problem is.
    1 point
  5. M2 Download Center Download Here ( Internal ) This is the visual studio code extension for metin2 quests: it's based on these things: * [Hidden Content] * [Hidden Content] * [Hidden Content] special thanks: @martysama0134 for the detailed documentations. Known issues: defines like: define VAR x (are not allowed) [0.0.2] * Added support for quest as a separate language. * Added lua syntax checker from lualinter. * Fixed quest syntax checker will check both lua and quest. [0.0.3] - 2019-09-25 * Minor fixes. [0.0.4] -2019-09-26 * Added functions parameters support. [Hidden Content] * Added the extension to VS Code MarketPlace. [Hidden Content]
    1 point
  6. M2 Download Center Download Here ( Internal ) VirusTotal Download
    1 point
  7. I know that it can be improved. I didn't put much effort in it and C++ isn't my cup of tea. Everyone is free to take this code as a working base and improve it according to his needs
    1 point
  8. Hey guys, Most of you noticed if you have a special character like á, é, ő, etc. at the beginning or end of a string qc will not work and displays no error message. It is because it throws an error but in it's own way by pushing a string to the top of the lua stack and calling exit so you can't catch it normally. Here is a method how you can make these messages visible. Actually we only have to write a few lines. Open qc.cc and add this function void print_exception() { int top = lua_gettop(L); if (0 != top && LUA_TSTRING == lua_type(L, top)) { std::cerr << lua_tostring(L, top); } } Now go to the main function and add this line to the beginning of it: atexit(&print_exception); So it should look like this: Now you will see the exceptions like Good luck guys and hope you like it!
    1 point
  9. It might sound silly, but did you level up your horse level 11 before trying to attack with it ? You can put "/horse_level YourName 11" in game for make it.
    1 point
  10. Btw, instead of adding a .SetDelay() to all objects, you could do do a simple change. for all visual ani_image from screen. root/ui.py Search for: if True == value.has_key("delay"): window.SetDelay(value["delay"]) Replace with: [Hidden Content] So, you don't have to any part of python from tutorial, just this.
    1 point
  11. ../Srcs/Client/UserInterface/PythonPlayerInput.cpp Replace the whole function void CPythonPlayer::__SetAutoAttackTargetActorID(DWORD dwVID) with: [Hidden Content]
    1 point
  12. Download Idk if this is the right place to put this. But I hope helps someone. Download: I bothered to order the lines from least to greatest numerically. On each line there is a number, this number corresponds to the number of the official translation that you can find in the official locale. Official locale download: The only thing left for you to do is replace the number I put, with the number that corresponds to the official translation. Here is an example with the English language: Best regards.
    1 point
  13. The idea isn't so bad, but the code has too many useless lines, here's what you can do to improve it. def RefreshPickupFilter(self): #Weapon if systemSetting.IsPickUpFilterWeapon(): self.PickUpFilterList[0].Down() else: self.PickUpFilterList[0].SetUp() #Armor if systemSetting.IsPickUpFilterArmor(): self.PickUpFilterList[1].Down() else: self.PickUpFilterList[1].SetUp() #Ear if systemSetting.IsPickUpFilterEar(): self.PickUpFilterList[2].Down() else: self.PickUpFilterList[2].SetUp() #Neck if systemSetting.IsPickUpFilterNeck(): self.PickUpFilterList[3].Down() else: self.PickUpFilterList[3].SetUp() #Foots if systemSetting.IsPickUpFilterFoots(): self.PickUpFilterList[4].Down() else: self.PickUpFilterList[4].SetUp() #Shield if systemSetting.IsPickUpFilterShield(): self.PickUpFilterList[5].Down() else: self.PickUpFilterList[5].SetUp() #Book if systemSetting.IsPickUpFilterBook(): self.PickUpFilterList[6].Down() else: self.PickUpFilterList[6].SetUp() #Stone if systemSetting.IsPickUpFilterStone(): self.PickUpFilterList[7].Down() else: self.PickUpFilterList[7].SetUp() #Etc if systemSetting.IsPickUpFilterEtc(): self.PickUpFilterList[8].Down() else: self.PickUpFilterList[8].SetUp() To: def RefreshPickupFilter(self): checkFilterList = ( systemSetting.IsPickUpFilterWeapon(), systemSetting.IsPickUpFilterArmor(), systemSetting.IsPickUpFilterEar(), systemSetting.IsPickUpFilterNeck(), systemSetting.IsPickUpFilterFoots(), systemSetting.IsPickUpFilterShield(), systemSetting.IsPickUpFilterBook(), systemSetting.IsPickUpFilterStone(), systemSetting.IsPickUpFilterEtc() ) for child, flag in zip(self.PickUpFilterList, checkFilterList): if flag: child.Down() else: child.SetUp() self.PickUpFilterList.append(GetObject("Pick_Up_FilterWeapon")) self.PickUpFilterList.append(GetObject("Pick_Up_FilterArmor")) self.PickUpFilterList.append(GetObject("Pick_Up_FilterEar")) self.PickUpFilterList.append(GetObject("Pick_Up_FilterNeck")) self.PickUpFilterList.append(GetObject("Pick_Up_FilterFoots")) self.PickUpFilterList.append(GetObject("Pick_Up_FilterShield")) self.PickUpFilterList.append(GetObject("Pick_Up_FilterBook")) self.PickUpFilterList.append(GetObject("Pick_Up_FilterStone")) self.PickUpFilterList.append(GetObject("Pick_Up_FilterEtc")) To: for name in ('Weapon','Armor','Ear','Neck','Foots','Shield','Book','Stone','Etc'): self.PickUpFilterList.append(GetObject("Pick_Up_Filter{}".format(name))) self.PickUpFilterList[0].SetToggleUpEvent(self.__OnClickPickupFilterButtonWeapon) # Weapon self.PickUpFilterList[0].SetToggleDownEvent(self.__OnClickPickupFilterButtonWeapon) # Weapon self.PickUpFilterList[1].SetToggleUpEvent(self.__OnClickPickupFilterButtonArmor) # Armor self.PickUpFilterList[1].SetToggleDownEvent(self.__OnClickPickupFilterButtonArmor) # Armor self.PickUpFilterList[2].SetToggleUpEvent(self.__OnClickPickupFilterButtonEar) # Ear self.PickUpFilterList[2].SetToggleDownEvent(self.__OnClickPickupFilterButtonEar) # Ear self.PickUpFilterList[3].SetToggleUpEvent(self.__OnClickPickupFilterButtonNeck) # Neck self.PickUpFilterList[3].SetToggleDownEvent(self.__OnClickPickupFilterButtonNeck) # Neck self.PickUpFilterList[4].SetToggleUpEvent(self.__OnClickPickupFilterButtonFoots) # Foots self.PickUpFilterList[4].SetToggleDownEvent(self.__OnClickPickupFilterButtonFoots) # Foots self.PickUpFilterList[5].SetToggleUpEvent(self.__OnClickPickupFilterButtonShield) # Shield self.PickUpFilterList[5].SetToggleDownEvent(self.__OnClickPickupFilterButtonShield) # Shield self.PickUpFilterList[6].SetToggleUpEvent(self.__OnClickPickupFilterButtonBook) # Books self.PickUpFilterList[6].SetToggleDownEvent(self.__OnClickPickupFilterButtonBook) # Books self.PickUpFilterList[7].SetToggleUpEvent(self.__OnClickPickupFilterButtonStone) # Stone self.PickUpFilterList[7].SetToggleDownEvent(self.__OnClickPickupFilterButtonStone) # Stone self.PickUpFilterList[8].SetToggleUpEvent(self.__OnClickPickupFilterButtonEtc) # Etc self.PickUpFilterList[8].SetToggleDownEvent(self.__OnClickPickupFilterButtonEtc) # Etc To: eventFuncList = ( self.__OnClickPickupFilterButtonWeapon, self.__OnClickPickupFilterButtonArmor, self.__OnClickPickupFilterButtonEar, self.__OnClickPickupFilterButtonNeck, self.__OnClickPickupFilterButtonFoots, self.__OnClickPickupFilterButtonShield, self.__OnClickPickupFilterButtonBook, self.__OnClickPickupFilterButtonStone, self.__OnClickPickupFilterButtonEtc ) for child, event in zip(self.PickUpFilterList, eventFuncList): child.SetToggleUpEvent(event) child.SetToggleDownEvent(event)
    1 point
  14. Default: Shinshoo - 1 Chunjo - 2 Jinno - 3 local sel = select("Chunjo", "Jinno", "Exit") Chunjo = sel + 1 = 2 Jinno = sel + 1 = 3 Exit = 3 -- return All what you need is to make the select value + 1. [Hidden Content]
    1 point
  15. Wikipedia has a API included, you can play with it. [Hidden Content] MediaWiki docs: All Query modules Get properties of pages List pages matching a criterion Get module parameters information Get meta information about the wiki and user Some examples: [Hidden Content] You've to install the requests library first one. pip install requests # Installing collected packages: certifi, chardet, urllib3, idna, requests # Successfully installed certifi-2019.3.9 chardet-3.0.4 idna-2.8 requests-2.22.0 urllib3-1.25.2 How to use: [Hidden Content]
    1 point
  16. I prepared other buttons for this system, which I think are holding a better climate. I put it here, maybe it will be useful to someone PS: I also put a project save in the package, so that you can more conveniently edit each button if necessary. Download: Mega (Metin2 Download)
    1 point
  17. I have solved the problem myself, in case somebody is looking for the same thing, the resistances are applied in length.h in common folder. Basically the official servers absolutely cancelled the defence against arrows for monsters and they replaced them with the elemental bonuses so: You have them in length.h like this : enum { SKILL_ATTR_TYPE_NORMAL = 1, SKILL_ATTR_TYPE_MELEE, SKILL_ATTR_TYPE_RANGE, SKILL_ATTR_TYPE_MAGIC /* SKILL_ATTR_TYPE_FIRE, SKILL_ATTR_TYPE_ICE, SKILL_ATTR_TYPE_ELEC, SKILL_ATTR_TYPE_DARK, */ }; And you need to comment RANGE which is the defence against arrows required by archers and enable the elemental which are commented. enum { SKILL_ATTR_TYPE_NORMAL = 1, SKILL_ATTR_TYPE_MELEE, /* SKILL_ATTR_TYPE_RANGE, */ SKILL_ATTR_TYPE_MAGIC, SKILL_ATTR_TYPE_FIRE, SKILL_ATTR_TYPE_ICE, SKILL_ATTR_TYPE_ELEC, SKILL_ATTR_TYPE_DARK, }; Please mind the comma after MAGIC. In char skill find the case below: case SKILL_ATTR_TYPE_RANGE: dt = DAMAGE_TYPE_RANGE; iDam = iDam * (100 - pkChrVictim->GetPoint(POINT_RESIST_BOW)) / 100; break; And comment : iDam = iDam * (100 - pkChrVictim->GetPoint(POINT_RESIST_BOW)) / 100; How the case should look like after: case SKILL_ATTR_TYPE_RANGE: dt = DAMAGE_TYPE_RANGE; // 으아아아악 // 예전에 적용안했던 버그가 있어서 방어력 계산을 다시하면 유저가 난리남 //iDam -= pkChrVictim->GetPoint(POINT_DEF_GRADE); //iDam = iDam * (100 - pkChrVictim->GetPoint(POINT_RESIST_BOW)) / 100; break; Regards, Cara
    1 point
  18. Character discharge system hehe A full rectum is a pain of every human in metin2 world. The rectum fills up while consuming all sorts of concoctions. When the rectal index reaches its maximum, the character's stats will deteriorate until he defecates. Shit poses some kind of threat to those nearby. When someone steps in shit, a slowing effect will be applied on them, which will last for a short while. The shit will disappear after a maximum of 30 seconds, time depends on the condition of the rectal index. PS: Please do not ask any questions about what you just saw. I won't be able to answer. ^^
    0 points
×
×
  • 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.