Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation on 06/20/19 in all areas

  1. Hello everyone, A lot of people might already know the issue. If you choose Arial as Font for Metin2, texts will be displayed in a weird way and with dots. There are a few reasons for this to happen and increasing font size fixes it, but no one wants huge texts everywhere and obviously, we wannt a nice font. Not a trial and error. So here's a partial fix for it. If you choose very small font sizes (e. g. font size 9px) in locale_game.txt it'll still look a bit off but it's definitely readable. With these changes, you'll have no problem with font sizes 14px and higher. Maybe someone wants to share different approaches or ideas. I think with these changes the problem is almost entirely fixed, no one needs size 9 especially with Arial.. First open your Binary source and search for "LOGFONT" (without "" of course). You'll find two matches where it's being used for initialization of new fonts: One in TextBar.cpp(CTextBar::__SetFont) and one in GrpFontTexture(CGraphicFontTexture::GetFont). And these are the two functions where we need to make some changes first. Under the line where LOGFONT is used, you're gonna add the following code: HDC hDC = m_dib.GetDCHandle(); if (hDC) { auto px = fontSize * 72 / 96; fontSize = -MulDiv(px, GetDeviceCaps(hDC, LOGPIXELSY), 72); } This code segment does two things: First it converst px -> pt, since LOGFONT expects pt. And on second, it calculates the correct displaying size according to the ppi and the cell height. This leads to the variable we need: The point size. Note that there's a minus, which means that we'll automatically choose the nearest possible size according to the specified font size. So everything's good here. Als note that you need add this segment to BOTH places where LOGFONT is being used for initialization. You have to change the name fontSize according to the files you edit. In TextBar.cpp the example above fits, for GrpFontTexture you just need to change fontSize to m_fontSize. Now change the following parts in both functions: logFont.lfOutPrecision = OUT_TT_ONLY_PRECIS; logFont.lfClipPrecision = CLIP_DEFAULT_PRECIS; logFont.lfQuality = NONANTIALIASED_QUALITY; logFont.lfPitchAndFamily = VARIABLE_PITCH; Note: You can also change logFont.lfWeight from FONT_NORMAL to FONT_MEDIUM or any other font weight if you wanna add up a mit more strength to your fonts. I just left it to FONT_NORMAL, which is fine. Also note that I chose NONANTIALIASED_QUALITY since anti-aliasing didn't make any change (not sure if Arial is even compatible, at least not those small font sized that I tested it with..). You can also change them to something like ClearType to do the job, that's up to you. I wanted to display the fonts just like they are, no mangling with them. But depending on your needs you can tweak a bit here. that's almost it! Last but not least, we have to change the way our adapter hDC does it's job. Especially since the above calculation for point size is only 100% true for MapMode MM_TEXT. And that's what we're gonna establish now. If you are in CGraphicFontTexture::GetFont, you can just scroll a bit higher. You'll see the initialization of hdC (function CGraphicFontTexture::Create). just below SetBkColor(hDC, 0); you can add these two lines: SetGraphicsMode(hDC, GM_ADVANCED); SetMapMode(hDC, MM_TEXT); Aaand you're done! That's it! Compile and enjoy! Best Regards Vanilla
    8 points
  2. Hello, many people asked me about some smaller dungeons. So here is the first one
    2 points
  3. New download link: [Hidden Content]
    2 points
  4. Hello there, Surfing on the internet i was looking for a guide on how change the % of refining for the classes of the alchemy stones (rough, cut, rare, antique, legendary) for the clarity (Matt, Clear, Flawless, Brilliant, Excellent) and for the upp. Wasnt getting results so i did learn by myself how to do the trick. First of all, go in your locale directory and open the file "dragon_soul_table.txt". Inside it you will have at the line no. 140: Group RefineGradeTables { codice} RefineGradeTables it has the function to upgrade the CLASS (rough,cut....) Group RefineStepTables { codice} RefineStepTables it has the function to upgrade the CLARITY (Matt, clear....) Group RefineStrengthTables { codice} RefineStrengthTables it has the function to upgrade the LEVEL of the stone (+0, +1 etc) Those listed above are the function now lets get into it in a more detailled manner: RefineGradeTables: #--# NEED_COUNT FEE GRADE_NORMAL GRADE_BRILLIANT GRADE_RARE GRADE_ANCIENT GRADE_LEGENDARY GRADE_NORMAL 15 10000 5 95 0 0 0 Those are my settings by the way and i did modify them to let you understand better what im talking about, so we will have: GRADE_NORMAL STANDS FOR ROUGH GRADE_BRILLIANT STANDS FOR CUT GRADE_RARE STANDS FOR RARE GRADE_ANCIENT STANDS FOR ANTIQUE GRADE_LEGENDARY STANDS FOR LEGENDARY NEED_COUNT ITS EQUAL TO HOW MANY STONES ARE NEEDED FOR THAT UPGRADE FEE ITS EQUAL TO THE COST OF THE UPGRADE Now you may ask, where are the % of refining? Right here: GRADE_NORMAL 15 10000 5 95 0 0 0 You will have 8 values, GRADE_NORMAL stands for rough The value '15' identifies the no. of stones required for the upgrade The value '10000' identifies the no. of yang needed (10k) Now lets focus on the other 5 values: 5 95 0 0 0 For what these values stands for? And how do i modify them in the way i want? Read more and you will find out. The first value '5' identifies the % of the stone remaining in the first class (Rough) and the '95' is the % of success for the stone to become more powerful (Cut). Example, i want to create an upgrade of class that requires: 15 Stones, 10k Gold, and has these percentages: 90% of success, 5% of failure, 5% of lucky success to get from a Rough a Rare stone. Like this: GRADE_NORMAL 15 10000 5 90 5 0 0 Remember to have a total of 100% so 90 + 5 + 5 = 100 /------------------------------------------------------------------------------------------------------------------------------------------------------------------/ Now lets face the clarity field #--# NEED_COUNT FEE STEP_LOWEST STEP_LOW STEP_MID STEP_HIGH STEP_HIGHEST STEP_LOWEST 4 20000 30 70 0 0 0 In this case we will not face against the "GRADE_NORMAL" but we will have "STEP_*" (Where * is Lowest, low, mid, high, highest). NEED_COUNT Indicates the quantity of stones needed FEE Indicates the cost of the refining STEP_LOWEST STEP_LOW STEP_MID STEP_HIGH STEP_HIGHEST Those are the steps, STEP_LOWEST = Matt STEP_LOW = Clear STEP_MID = Flawless STEP_HIGH = Brilliant STE_HIGHEST = Excellent ---------------------------------------------------------------------------------------------- STEP_LOWEST 4 20000 30 70 0 0 0 What does this string means? Well for the refining % we always have to check the last 5 values 30 70 0 0 0 Here 30 indicates the % for the stone to remain matt (Failure %) and 70 indicates the percentage for your stone to become clear (Success %) What if i want to make the refining success 95% for the step_lowest? 5 95 0 0 0 What if i want to make the refining success 10% for the step_highest? 0 0 0 90 10 What if i want to make the refining success 10% for the step_highest but i even want to have the 5 % of the stone returning to the Flawless(STEP_MID) point? 0 0 5 85 10 Hope this will get you the idea on how to understand and modify those things, i posted this in few forums, if u want to share it i got no problems, if u want to give me credits would be better. Im sorry for my english if i made any kind of mistakes, thanks. Update You have to modify even the client part (sorry i forgot to mention this) On dragon_soul_refine_settings.py import item default_grade_need_count = [15, 10, 5, 3] default_grade_fee = [30000, 50000, 70000, 100000] default_step_need_count = [4, 3, 2, 1] default_step_fee = [20000, 30000, 40000, 50000] default_grade_need_count is for the N of stones needed (rough, cut etc) default_step_need_count is for the N of stones needed on the clarity refine fee are the costs for both of them.
    1 point
  5. M2 Download Center Download Here ( Internal ) I think the title should explain all. The system give way to set mob's drops via tables (Database) instead to use mob_drop_item.txt, common_drop_item.txt, drop_item_group.txt which can be buggy (easly, just a wrong space) without trace any error in your game expirience. WARNING : The System doens't disable the txts so you can use the txts and the tables without any problems. I have inserted "/reload d" command to reload the drop tables without restart channels. i will code a small tool in python to convert the txts to tables (i will be added to the repository). The drop chance by default is set to 1/1000 (so in table you should set it to 1000 to give 100% drop chance 'base' , it will change via the ymir's algorithm depend on the levels killer/victim). you can chance this scale to use 100 instead 1000 basically changing in lenght.h the value of DROP_SCALE_TABLE here you can find the repository. MySkype: live:ikarus.developer update: Added a small part to install only if you are using __SEND_TARGET_INFO__ to show the drop in the target board WARNING: i noticed some people think this system is a realtime database reading based system. i want explain it better , to make sure every body know how this system works. This system works using cache, it read the tables once on boot, then the db core setup all core during core boot using cache. Only if you want to reload (refreshing the cache) the db core will read again the tables and will send to every core the "update".
    1 point
  6. M2 Download Center Download Here ( Internal ) *FEATURE LIST* ######### V1.0 ######### Game + removed the license functions so the server won't connect to a license server nor check if your server is valid + removed the time limitation so it won't even check the time limit. This crash issue is completely fixed. + 6/7 bonus are now working Stone chance succes in config file. 3% tax removed. 0 gold purchase store item enabled. pc_change_name (Europe) enabled. 70024 (marble blessing) and enabled store. (hivalue_item_sell check removed) 6-7 bonus disabled costume. Insight. Dice/ÁÖ»çŔ§/war fix. Player bonuses are removed bonus time. Stuff disappearance has dropped by 2 minutes 10 seconds players. Maximum stat point 90. 90 will also receive Status Points . " Fingerprint " control repaired. Horse skill enabled. bonus charger fix. ymir licensz removed. invisible bug fix. After Teleportation will not be - life . imun bug fixed. 2x fixed Kill counting. Magic sword sura skill fix. If there are multiple kk taking away one . Dungeon party fix. Cube crash fix. 4. inventory added. Ingame sql inject fix. [FIX]Guild bug change No make test file. Full equip bug fix. ds slot fix. TP- broadcast MP bug fix ( bios bug, bug rush ) . Item type 33 added. ctrl+g mount bug fixed. Beltsystem some bug fix. Equipment wiever added. Ingame ch changer added. pet.is_mine(), item.get_attr_type, item.get_attr_value, item.set_attr, npc.get_level function added. /kill_all code added. ######### V1.1 ######### Maximum level data type int. PM hack fix (and newly) Anti long name generator. Fishing without water fix. Reload p expanding (Shop_item, refrine proto, item_attr, item_attr_rare tables) //thanks masodikbela reload drop function added (etc_item_drop.txt, mob_drop_item.txt, special_item_group.txt) //thanks masodikbela reload group function added (group.txt, Group_group.txt) //thanks masodikbela reload regen function added (regen.txt, npc.txt, boss.txt, stone.txt) //thanks masodikbela /p map function added (disappear off the map mobs , NPCs) //thanks masodikbela /free_regens function added Delet loaded in regen) //thanks masodikbela ######### V1.2 ######### New SellPacket from GF DB: ######### V1.0 ######### No txt added. localeset fix. Item_award 3 stone fix. ######### V1.1 ######### Maximum level data type int. TXT Loading proto Korean announcement transcribed . Binary: ######### V1.0 ######### It handles True / true / false / FALSE values. 4. inventory added. 0 gold Shop fix. belt system slot fix. Python 2.7-re updated. Granny 2.9-re updated. npc_pet,npc_mount function added. ######### V1.1 ######### Maximum level data type int. Monsters level show. ######### V1.2 ######### New SellPacket from GF [Hidden Content]
    1 point
  7. Try to reinstall freebsd.
    1 point
  8. @ManiacRobert This is not my Code!! Ist from ManiacRobet #ifdef __SASH_SYSTEM__ else if ((item->GetType() == ITEM_COSTUME) && (item->GetSubType() == COSTUME_SASH)) { int lastSortInventoryPulse = GetEffectTimer(); int currentPulse = thecore_pulse(); if (lastSortInventoryPulse > currentPulse) { int deltaInSeconds = ((lastSortInventoryPulse / PASSES_PER_SEC(1)) - (currentPulse / PASSES_PER_SEC(1))); int minutes = deltaInSeconds / 60; int seconds = (deltaInSeconds - (minutes * 60)); ChatPacket(CHAT_TYPE_INFO, "Efect-ul o sa apara din nou in %02d secunde.", seconds); return false; } this->EffectPacket(SE_EFFECT_SASH_EQUIP); SetEffectTimer(thecore_pulse() + PASSES_PER_SEC(10)); } #endif char.h protected: CSafebox * m_pkSafebox; int m_iSafeboxSize; int m_iSafeboxLoadTime; int m_ichtimer; #ifdef __SASH_SYSTEM__ int m_ieffect; #endif bool m_bOpeningSafebox; ///< 창고가 열기 요청 중이거나 열려있는가 여부, true 일 경우 열기요청이거나 열려있음. CSafebox * m_pkMall; int m_iMallLoadTime; PIXEL_POSITION m_posSafeboxOpen; public: bool IsOpenSafebox() const { return m_isOpenSafebox ? true : false; } void SetOpenSafebox(bool b) { m_isOpenSafebox = b; } int GetSafeboxLoadTime() const { return m_iSafeboxLoadTime; } void SetSafeboxLoadTime() { m_iSafeboxLoadTime = thecore_pulse(); } // int GetChTime() const { return m_ichtimer; } // void SetChTime(int pulse) { m_ichtimer = pulse; } #ifdef __SASH_SYSTEM__ int GetEffectTimer() const { return m_ieffect; } void SetEffectTimer(int pulse) { m_ieffect = pulse; } #endif //END_PREVENT_TRADE_WINDOW private: bool m_isOpenSafebox; public: int GetSkillPowerByLevel(int level, bool bMob = false) const;
    1 point
  9. Can be useful if someone post a release to fix moviment hack. I know it's a problem to fix cuz Metin codes about moviment are weird.
    1 point
×
×
  • 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.