Jump to content


  • Content count

  • Joined

  • Last visited

  • Days Won


Everything posted by Shogun

  1. This thread is intended for requests of files which are not published in this forum already, with the exception of the official packs which have their own thread. Make sure you have used the search function before making your request and do not post your request twice.
  2. Why would you need to change anything? MariaDB is fully compatible with MySQL. Just uninstall MySQL and install MariaDB instead and that's it. There's nothing to change in the files.
  3. Shogun

    WoM2 looking for developer

    Hello everyone, WoM2 (https://global.wom2.org) is currently looking for a game developer with knowledge of C++ and python, and familiar with database work. We offer the best conditions in the scene, and a very organized and serious work environment. If you are interested, please write me an e-mail on shogun@wom2.org your nickname, projects you worked on and areas of knowledge. Regards, Shogun
  4. To get the ball rolling on this forum, here is a real oldschool release, the original Metin2 client for the chinese Beta in 2004. download: https://mega.co.nz/#!IkZzDYhS!KXsSgEExVlcUzPF7bU03U7xrlXH1VPUMpGszXW1EJok
  5. Hi guys, Since people are asking for a 34k client I have decided to release the World of Metin2 beta client from early last year. Many people have contributed to this release, namely the whole WoM team which as you may know is pretty big, but particularly Tim who created most of the scripts and the compiling stuff. Contents The package includes: bin folder: this is where you actually run the client. The client includes tim's granny 2.8 DLL and a .mix file that allows attacking on mounts made by Paylasici (DynamicPatcher.mix). Warning: metin2.bin may be identified by your antivirus as a threat. It's just packed with Themida. Why packed? because otherwise Tim's dll doesn't work. You will need to create the epk files first. A patch maker/uploader script is also included in this folder. data folder: the contents of the Eterpack archives, unpacked. Includes batch files to create the packs, an automatic XML generator (make_xml.py, configurable through make_xml.xml) and root/uiscript/locale pyc compiler. The data folders contain every official file (costumes pets etc) up to March 2013, and a few of our own. tools: includes FileArchiver, Tim's lz, and python22 (used by the compiling scripts). launcher: includes everything necessary to create your own official launcher Installation Unpack wherever you want Install Python2.7(if you don't have it already) and add your Python27 installation folder to the System Path Add the tools folder to the System Path Usage Edit the client to your liking and then run the appropiate make_*.bat file to compile the pack into the bin/pack folder. When done, make a copy of metin2.bin called metin2client.exe so you can test the client locally. Patch maker There is an official patch maker included under bin/make_patch.py configurable through Patch_config.txt, it will read an online crclist and a list of files / archives and create a zip file containing the updated archives (lz'ed) and the updated crclist. Syntax make_patch.py [-f filename] [-a packname] [-p patch (see PatchConfig.txt)] Example python make_patch.py -f pack/Index -a root -a uiscript -p patch_test Then you just need to upload this zip file to your patch root and unzip it. Regards World of Metin2 Client for metin2dev.org - Base.7z 95.9 MB https://mega.co.nz/#!WhpiVDBI!ipa7YoFKoo5Qnft7calTquWczM_WCScnyC3VQctUhNk World of Metin2 Client for metin2dev.org - Extra.7z 486.2 MB https://mega.co.nz/#!nhAV3RjY!e8ACrA-IwgwNk49vBAMBqa0ULf2tOZl5v8vcdLEpYZU
  6. Hey all, Today I will explain to you how to use different designs for your quest scrolls like WoM. Setting up the system 1) Copy your scroll designs to ui/game/quest/questicon in the client. I have attached the WoM scrolls as example. 2) Open uiCharacter.py and insert the code that appears between comments: if questCount > quest.QUEST_MAX_NUM: self.questScrollBar.Show() else: self.questScrollBar.Hide() for i in questRange[:questCount]: (questName, questIcon, questCounterName, questCounterValue) = quest.GetQuestData(self.questShowingStartIndex+i) # start colored scrolls if questName[0] == '*': questName = questName[1:] elif questName[0] == '&': questName = questName[1:] elif questName[0] == '~': questName = questName[1:] elif questName[0] == '+': questName = questName[1:] # end colored scrolls self.questNameList[i].SetText(questName) self.questNameList[i].Show() self.questLastCountList[i].Show() self.questLastTimeList[i].Show()3) Open interfaceModule.py Replace this part: if locale.IsEUROPE(): btn.SetUpVisual(locale.GetLetterCloseImageName()) btn.SetOverVisual(locale.GetLetterOpenImageName()) btn.SetDownVisual(locale.GetLetterOpenImageName()) else: btn.SetUpVisual(buttonImageFileName) btn.SetOverVisual(buttonImageFileName) btn.SetDownVisual(buttonImageFileName) btn.Flash() # END_OF_QUEST_LETTER_IMAGE with this: if locale.IsSINGAPORE() or locale.IsEUROPE(): if name[0] == '*': btn.SetUpVisual("d:/ymir work/ui/game/quest/questicon/scroll_close_blue.tga") btn.SetOverVisual("d:/ymir work/ui/game/quest/questicon/scroll_open_blue.tga") btn.SetDownVisual("d:/ymir work/ui/game/quest/questicon/scroll_open_blue.tga") name = name[1:] elif name[0] == '~': btn.SetUpVisual("d:/ymir work/ui/game/quest/questicon/scroll_close_golden.tga") btn.SetOverVisual("d:/ymir work/ui/game/quest/questicon/scroll_open_golden.tga") btn.SetDownVisual("d:/ymir work/ui/game/quest/questicon/scroll_open_golden.tga") name = name[1:] elif name[0] == '&': btn.SetUpVisual("d:/ymir work/ui/game/quest/questicon/scroll_close_green.tga") btn.SetOverVisual("d:/ymir work/ui/game/quest/questicon/scroll_open_green.tga") btn.SetDownVisual("d:/ymir work/ui/game/quest/questicon/scroll_open_green.tga") name = name[1:] elif name[0] == '+': btn.SetUpVisual("d:/ymir work/ui/game/quest/questicon/scroll_close_purple.tga") btn.SetOverVisual("d:/ymir work/ui/game/quest/questicon/scroll_open_purple.tga") btn.SetDownVisual("d:/ymir work/ui/game/quest/questicon/scroll_open_purple.tga") name = name[1:] else: btn.SetUpVisual(locale.GetLetterCloseImageName()) btn.SetOverVisual(locale.GetLetterOpenImageName()) btn.SetDownVisual(locale.GetLetterOpenImageName()) else: btn.SetUpVisual(buttonImageFileName) btn.SetOverVisual(buttonImageFileName) btn.SetDownVisual(buttonImageFileName) btn.Flash() # END_OF_QUEST_LETTER_IMAGEUsage After you modified your client, there will be 4 color codes that you can use at the start of your quest's title to enable the colored scroll: Blue (*), Golden (~), Green (&) and Purple (+). You also have to add the q.set_icon function containing the filename of the scroll picture. Here is an example of how to make a quest scroll blue: when login with game.get_event_flag("worldbookday") == 1 begin send_letter("*World Book Day") q.set_icon("scroll_open_blue.tga") local v=find_npc_by_vnum(20023) if v!=0 then target.vid("__TARGET__", v, "Soon") end endAnd it looks like this: That's all you can also add new codes easily or use your own quest scroll designs. Enjoy! questicon.zip
  7. Shogun

    The lost maps of Ymir

    Hi everyone, Today I bring you a collection of maps made by Ymir that were included at some point in an official client but were never used. The maps are: GM Guild Building Field Dungeon Ginseng Valley (b2) - Second version of Dragon Valley (Orcs area) Heavenly Valley (c2) - Third version of Dragon Valley (Orcs area) Dragon Timeattack 1 - Dungeon possibly used in Korea, used by SG for Dragon Timeattack event Dragon Timeattack 2 Dragon Timeattack 3 Test map - Actually a town EW02 - ? Guild Inside - Supposed to be the inside of a guild house Milgyo Pass & Sungzi - A collection of alternative maps for Nation War. Requires editing forked_road.txt in order to add them to this event. Siege - Three maps one for each kingdom, for a kingdom event You might also be interested in the Metin2 Korea Naga map available here The Lost maps of YMIR.zip 74.6 MB https://mega.co.nz/#!XtxVBSzZ!B3q_5Ol1VWgY5GxR4YkLHh8-89iLDrkMKZz_gYUG67k
  8. Shogun

    PF Sample Config

    Hello, As I had just posted the file without any explanation of it, which is not really useful unless you are already familiar with pf, I have added a little tutorial. This is a sample pf.conf file that you can use as a base to create your own for your Metin2 FreeBSDserver. As you can see it was originally made by Tim and I have used it ever since on my server. If you host your website in a different IP address than your game server, it's a good idea to add it's IP to the trusted_hosts table (you can remove the dummy address that I placed there safely). Any host that you want to have "free access", that is, skip firewall rules, should be added there. IP addresses must be separated by commas. Only the ports that you specify under service_ports and game_ports will be open. service_ports should generally include your SSH port, and 80 if you are running a web server. We also apply packet scrubbing and a limit on the number of connections, both measures helpful against certain types of attacks. Although this configuration allows UDP for ServerCheck to work, it is a good idea to completely block UDP, although you may need to change the login screen if you use a standard login so it doesn't show your channels as offline. # pf config by Tim Niederhausen # Change the value to reflect your public interface. You can see this with ifconfig. ext_if="eth0" # Ports used for services service_ports="{ 22, 80 }" # Ports used by Metin2 game_ports="{ 11002, 13001, 13002, 13003, 13004, 13099 }" # IP addresses that should override the firewall rules, such as your web server. table <trusted_hosts> const { } table <abusive_hosts> persist set block-policy drop set loginterface $ext_if set skip on lo scrub on $ext_if reassemble tcp no-df random-id antispoof quick for { lo0 $ext_if } block in pass out all keep state pass out on $ext_if all modulate state pass in quick from <trusted_hosts> block in quick from <abusive_hosts> # Allow ping in pass in inet proto icmp all icmp-type echoreq # Rate limits, trial and error pass in on $ext_if proto tcp to any port $service_ports flags S/SA keep state (max-src-conn 30, max-src-conn-rate 15/5, overload <abusive_hosts> flush) pass in on $ext_if proto {tcp,udp} to any port $game_ports flags S/SA keep state (max-src-conn 30, max-src-conn-rate 15/5, overload <abusive_hosts> flush) To completely block UDP on the firewall change this line: pass in on $ext_if proto {tcp,udp} to any port $game_ports flags S/SA keep state to pass in on $ext_if proto tcp to any port $game_ports flags S/SA keep state
  9. Shogun

    Sequence Table Patcher by Tyrar

    Since I noticed that most people don´t know it's possible to make your client and game unusable for others, here is a little explanation. I have also written a tool to help your create a new sequence table. The new sequence table is random and a sequences.bin file will be generated that you can use to patch your client and game binary later on. Technical blabber The client sends with each packet a byte from the table and checks that the response matches. When it doesn't, a SEQUENCE error will appear, a very known issue. For this reason, it's important that you patch both your client and server binaries! Download SequencePatcher.7z password: yolopvp Disclaimer This post and the tool are written by Tyrar @ epvp. I just translated it into english, except the more technical stuff where my knowledge of german isn't enough. For the original thread, refer to: http://www.elitepvpers.com/forum/metin2-pserver-guides-strategies/2924143-release-how-sequencetable-ndern.html
  10. Since a new Ymir pack came out and there is no appropiate forum for this I open this thread so we can post the newest releases from our dear Ymir.
  11. Shogun

    Anti Exp Ring and Voodoo Armband

    Today I release two small quests made by me a long time ago. Goddess Doll The first is an anti-experience ring that prevents you from gaining exp from mobs when used. Using it again disables the effect. Be aware that the quest substracts the gained exp after it has been received so if the exp from a mob is enough to reach the next level, you will level up! quest exp_curse begin state start begin when 70210.use begin pc.setqf("lastexp",pc.get_exp()) syschat("You are under the curse of the goddess. You will gain no experience.") set_state(use) end end state use begin when 70210.use begin syschat("You lifted the curse of the goddess. You gain experience again.") set_state(start) end when login begin syschat("You are currently under the curse of the goddess and gain no experience.") end when kill or party_kill begin local current = pc.get_exp() local doll = pc.count_item(70210) if doll == 0 then syschat("The curse of the Goddess has lifted. You will gain Experience again.") set_state(start) end if current < pc.getqf("lastexp") then pc.setqf("lastexp",current) end if not npc.is_pc() then local dif = pc.get_exp()-pc.getqf("lastexp") pc.give_exp2(-dif) end end end end Voodoo Armband The Voodoo Armband is a fun item which lets you convert players into an ugly creature for a few minutes. quest polyplayer begin state start begin when 70111.use begin local start_count = pc.count_item(item.get_vnum()) -- to prevent usage of bugs only say_title("Voodoo Armband:") say("") say("Enter the name of the player you want to curse:") say("") local name = input() local vid = find_pc_by_name(name) if name == "" then return elseif name == pc.get_name() then say_title("Ring of Curse:") say("") say("You can not curse yourself.") say("") return elseif vid == 0 then say_title("Ring of Curse:") say("") say("This player is not online or does not exist.") say("") return elseif not pc.is_near_vid(vid, 50) then say_title("Ring of Curse:") say("") say("The player is too far away.") say("") return end if pc.count_item(item.get_vnum()) != start_count then return end local myvid = pc.select(vid) vnums = {2101, 20016, 20002, 11000, 5001, 992, 1301, 1303, 2191, 5161, 5162, 5163} i = number(1,12) pc.polymorph(vnums[i], 5*60) syschat("You have been cursed.") local victim = pc.get_name() pc.select(myvid) say_title("Voodoo Armband:") say("") say("The player "..victim.." is now cursed for 5 minutes.") say("") item.remove() end end end These items should be normally present in your client yet unused. If anybody needs I can post the item_proto entries etc.
  12. Dear community, Today I'd like to introduce a new toplist designed with the needs of the Metin2 server owners in mind: topmetin.org topmetin.org was created by a group of members of some of the biggest private servers and independent programmers and features an easily configurable language filter which lets you select up to 3 languages. English and your local language (if available) will be selected by default based on your IP geographical location. Another important feature which sets us appart from established contenders is Nocaptcha, the revolutionary recaptcha replacement which simplifies voting to the maximum. The ranked servers' websites are checked periodically to verify they are actually online (no more clicking on offline servers!). And last but not least, expert SEO techniques to drive the maximum traffic to your server. Of course, topmetin.org also features a Vote4Coins API and active admins who analyze the vote traffic to prevent abuse. But unlike other toplist projects which failed to make an impact in recent years, topmetin.org puts traffic first: Of course, the project counts also with admins which will control the vote flow to prevent abusing and answer any questions you have. Whether you have an upcoming project or an already established server, topmetin can help you gain new users. Sign up, set up a vote button or integrate our API: the choice is yours and all of them will increase your server's exposure. Schedule 19th February: advertised for the spanish community in metin2zone 27th Februray: advertised to the international community in metin2dev 1st March: advertised to the romanian community in freakplay 2nd March: advertised to the romanian community in just4metin Coming up: advertisement to the german, italian, polish community. Other countries will follow as we plan to support a good number of languages. There is no plan to monetize the toplist at the moment. Therefore there are no ads or premium accounts of any kind.
  13. Hi guys, Today I'm going to show you something very simple and effective that not many people do. By default, Metin2 graphics are like this. Notice the blurriness increasing as you move the camera position down: Close the game and open your graphics card control panel and in 3D Settings choose Anisotropic Filtering and 16x or whatever your card admits as maximum. You can lower it later if you suffer slow down: Blurriness is gone!
  14. Today I bring you another exclusive release from Tim. This time is the granny.dll compatible with Granny 2.8 models and new binaries. Included for completeness is the already public granny DLL for the old binaries, and the bulkconverter.exe tool. What can I do with this? You can use granny models from any Granny version up to 2.8 in your client. How do I use this? Just replace the original dll in your client. Please note, it only works on original, packed client binaries. A tool (bulkconverter.exe) is provided so you can easily convert your current models to 2.8 for best performance. Usage: bulkconverter foldername Will convert all the gr2 files found inside foldername to v2.8 Granny format. Regards granny28.zip
  15. In this forum you can find some of the biggest experts in Metin2 around the world. However, they don't work for you, so please be patient and don't bump your threads for an answer. They also didn't become experts by being spoonfed answers, so spend your time investigating your problem before asking others to do it. If you need extensive help, such as a quest written to your specs, you can find trustable paid services in the Services forum. State your problem as clearly as possible, include all related logs and error messages, and make sure you have searched in the forum and/or Google for an answer before opening a post.
  16. My latest ripped texture packs from TES: Oblivion. 512x512 size and ready to use in DDS format. Download https://mega.co.nz/#!d9hSELhT!30GtvVtMXv_epkgXLSmD_TZFAgU6mU-oPOdaW-tksRs
  17. Shogun

    Eterhost: your oppinion

    Hi everyone, I am starting soon a new hosting business with a couple of friends called Eterhost. Our idea is to sell ddos protected, managed vps for game servers and particularly Metin2 at an affordable price for The basic plan will offer: 1 core (AMD Opteron 4386) 4 GB RAM 150 GB Local Storage 20 GB Backup Storage 1 Gbps Bandwidth (Shared) VAC Pro DOS protection 2 IP addresses We can add to the features support which is familiar with both FreeBSD and Metin2. To get a better picture of the potential customers, I would like to ask you the following questions. I would appreciate if you spend a minute to answer them Are you considering changing your hosting provider at the moment? How much would you pay for such a system? Which payment methods do you prefer? Would you like to see any additional services offered? (Patch server for example) Thank you in advance!
  18. Shogun

    Speedtree 3 & 4

    Today I have some more goodies for mappers / modellers Speedtree is the software used by Metin2 to render trees and other kinds of vegetation. Many games such as Oblivion, Ragnarok 2, Gran Theft Auto IV... use Speedtree 4, while Metin2 uses the older Speedtree 3. It's possible to import Speedtree 4 models for Metin2 by loading and saving them with SpeedtreeCAD 3. A pic of the tool: In this pack you can find Speedtree CAD Lite 3 and Speedtree CAD 4 and their respective plugins for 3DSMAX. CAD http://ul.to/7tu5xyvm Plugins http://ul.to/76hxts40
  19. Hi guys, Running a server for a year and a half while a bunch of guys gets paid to destroy it by any means ends up giving you a good insight in what the word security really means. So, after being the target of almost every type of attack possible over the Internet, I think I am ready today to write a quick checklist on how your Metin2 server should be secured from criminal and disruptive behavior. I will divide it into several parts: ingame, website, server, staff. I will try to explain in brief how those attacks are executed, but the focus here is in how to defend from them effectively. I do not want this checklist to serve the purposes of hackers. But be aware; you are never 100% safe - it depends on how much your enemy is willing to work on it. So this should be taken as a bare minimum. And don't forget: the science of destruction evolves constantly. What is considered safe today, might not be so safe tomorrow. Disclaimer: This text reflects 5 years of experience managing a server's technical aspects. I do not do certain things (like quests) for a long time so excuse me for any mistakes I may be making here. Part 1 - Ingame bugs and exploits This part refers to threats that may realize through the game client or external software that acts through the game client. While often overlooked, sometimes these can be more dangerous to your server than any other type of attack. Keep an eye in your server's economy - the average price of items. If prices for a particular item or all of them change suddenly, there may be some obscure reason behind it. That is one of the reasons why we keep public and private statistics on the average market price of every item at WoM. One of the most common mistakes - and I commited this myself - when one wants to extensively edit everything is having an item give you more Yang when you NPC it than it costs to buy it from a shop. This gives unlimited Yang to whoever discovers it. There are even public bots which automate the process of buying and selling these items. The effect on the economy is devastating over a sufficient long period, not to mention that it's unfair that some people are infinitely rich and unbalance is never good for any MMORPG. Have your GM double check that no item can be sold for more than it costs. However, this is not the only way that a player can obtain access to unlimited resources. Badly written quests may allow players to obtain their rewards repeatedly by closing their clients while a quest dialog is open. One simple way to avoid this is to make sure that the commands which reward the player are the last in the code block before changing state. Now going into disruptive behaviour - the most annoying probably are the bugs which cause a server core to crash. The most famous is probably the number_ex bug. This causes several commands which depend on this function such as dice to be exploitable by using certain parameters. This bug is fixed in rev 40k and therefore in any game compiled from the source. If you are using 34k, the best you can do is use iMer's lib which provides several security enhancements. If you are using 2089, there are public diffs that patch this. Another bug exists in the war command in 34k and older which leads to a server crash. You cannot disable this command as it is used by the guild leaders to war other guilds. iMer's Lib takes care of this bug in 34k. Older and less known is the gold drop core crash bug present in 2089 and fixed -I believe- in 34k. Dropping huge amounts of gold or any other item which you can acquire in huge numbers in a map will cause the server to crash. I am not aware of public fixes for this exploit. Another favourite is the kickhack or sync position hack -partially fixed only in 40k- which allows a malicious user to disconnect other players at will. There are even videos of this being done in DE years ago. iMer's lib provides a fix for rev 34k. Finally, we have the long list of cheats which purely seek to gain advantage while playing. There are several client protection tutorials and services around this forum so I won't extend myself here about the subject. Part 2 - Server and OS Here we talk about the threats that affect your server and Operating System Part 2.1 Choosing and preparing your server There is no doubt at the moment of writing this that the french hosting company OVH provides the most cost-effective anti-ddos solution in the market. While many companies provide DDoS protection services, these cost several times as much as OVH offerings and this increase does not necessarily translate into a better protection. Therefore we will assume that you are renting either a dedicated server at OVH or a VPS at Eterhost as those are the ones I'm familiar with. Other providers or resellers may be configured in a different manner. Dedicated Server at OVH There are two flavors of the Anti-DDoS solution: Basic and Pro. Basic is free when renting a Kimsufi or Soyoustart server (cheap and intermediate OVH brands respectively). What it does is detect attacks directed at your IP address and route your traffic through the mitigation system during the attack. This is not enough to deter a dedicated hacker though - before the attack is detected, your server may be collapsed for a few minutes, and this can be repeated every hour by the attacker, as happened with one of the TEC attacks on WoM about 1 month ago. The PRO version comes with all the OVH proper (also known as professional) line of servers. It adds the ability to route traffic permanently through the mitigation system and provides you with a simple hardware firewall. This is what you should get if serious attacks are a concern, specifically an Enterprise line server (cheapest is at about 100€/month, VAT included) How to activate permanent mitigation on OVH Professional servers: - Open the new manager. If you don't know where this is, open the classic manager and click on "Home" and then below on the "Dedicated" icon. - Click on IP on the column at the left - Click the little wheel that appears at the right of your server's IP address - Select "Mitigation: permanent" How to set up the hardware firewall: - Click the wheel again and select "Activate firewall". Wait around a minute and then reload the page. - Click the wheel and select "Configure firewall" - You will be presented with the rules screen. You can add up to 20 rules to deny or allow specific ports on the firewall. Start by adding the allowed ports in the lower numbers and end with a global deny rule. Leaving a field blank in the "Add Rule" dialog will result in a wildcard; so if you leave the IP address field blank, this rule will affect all IPs. Adding an allow port port rule: click on Add Rule; choose rule priority; select protocol (TCP or UDP); select Accept; enter the port number. Adding a global deny: choose rule priority (must be higher than the allow port rules); select protocol (TCP or UDP); select Deny. Here is an example set of rules. We have added the SSH port and the game & auth ports, as well as 3306 so our website can connect to MySQL. You can specify the webserver's IP in the rule to prevent others from connecting to your database, although I personally prefer to do this at the software level with the pf firewall; in any case, port 3306 must not be public. "How do I connect with Navicat then?" Simple, use the SSH Tunnel option. This logs you in to SSH and then connects to the MySQL server as localhost. You must enter your server's SSH login details in the SSH, and your MySQL login details in the General tab, but remember we are connecting to localhost or that's what you must enter in hostname, NOT your server's public address, as MySQL doesn't see us as a remote user anymore. Regarding UDP: UDP is your enemy. Disable it completely as I did in the above ruleset. The official client previously used UDP to check on server status, but it's trivial to override it in python so it always shows "NORM" regardless of the result of servercheck. If you are using 40k or source, the check already uses TCP, but your ports must be lower than 32768 (or the source modified) for it to work. VPS at Eterhost Our VPS are always routed through the mitigation system. Hardware firewall can be activated and configured to your needs for 5€/month extra. Part 2.2 - Hardening SSH First things first: have your OS always updated to the current version. It is often recommended by experts to access your server through a non-administrative account (some operating systems such as CentOS even force you to create one at install), so that's what we will be doing. We will create a restricted user for our game server: adduser game We can leave everything as default except for the login group: enter "wheel" here. Users which are part of the wheel group can use the su command to gain administrator privileges. This allows us to completely block root from remote login. Now it's time to create a SSH key for our new user. This makes bruteforce virtually impossible. Finally, let's prevent login from root, and login without key: ee /etc/ssh/sshd_config Look for the "PermitRootLogin" line and leave it this way, uncommenting if necessary: PermitRootLogin no And next look for the "PasswordAuthentication" setting and edit it so it looks like this: PasswordAuthentication no Now let's restart ssh for changes to take effect: service sshd restart Warning: at this point, you should open a new putty window to test that you can login with the new user and key, and that you can use the su command to gain root privileges. Wrong settings may lock you out of your server. Once everything is working, upload your server files to /home/game. This is the home directory of the user - a bit like "My Documents" in Windows. Make sure you change permissions in the files so the "game" user can read and write them: chown -R game /home/game (this command must be run as root! only root can change someone else's permissions. To switch between the game and root account, you use the su (short for superuser) command: root# su game Password: (game user's password) game# su Password: (root user's password) root# Or: root# su game Password: (game user's password) game# exit root# Finally, it may be a good idea to install ssh-guard for extra security or change your SSH port if you don't like your logs being spammed by portscans. To change your SSH port, edit the Port line in /etc/ssh/sshd_config and restart the sshd service as indicated above. Remember to open the new port if you are using a firewall or you will lock yourself out of the server. Part 2.3 Software Firewall: pf At this point it's a good idea to add a second line of defense with the pf firewall. First we will create the /etc/pf.conf file following this sample config. ee /etc/pf.conf Make sure you enter the correct interface and all the ports which must be open: SSH and game ports in our case. Neither p2p ports or db core port should be open to the public! Under trusted_hosts, enter the IP address of your web server so it can connect to the database (We assume a typical set up of web server + game / db server here) instead of opening port 3306 to everyone. This firewall provides us with scrubbing and rate limiting capabilities which the hardware firewall doesn't. Next we will enable pf: kldload pf pfctl -e Check that everything is working fine and then add the following line to /etc/rc.conf to load pf on boot: pf_enable="YES"
  20. You can post your favourite websites for design resources here. Textures CGTextures I will start with a great site for realistic textures which is CGTextures (http://cgtextures.com) which contains thousands of different surfaces and decals in very high resolutions, exhaustively sorted by categories. The textures up to 700x700 are free, for higher sizes you have to pay a small subscription free. Probably the biggest resource for seamless textures in the internet. Tools Paint.NET A great tool for simple image editing tasks. It's free and there are hundreds of plugins available for extending its features. http://www.getpaint.net/ Texture Maker 3 Advanced texture creation and editing tool. I found the Resampler tool in this program most useful for Metin2 textures as this allows you to convert a highly detailed texture into a less detailed ("zoomed out") texture. For example you can take a single flower texture with grass background and resample it into a full field of flowers. Download: http://ul.to/tobhsc1g UI Elements UICloud - http://ui-cloud.com/free-ui-elements/ UI Elements http://uielements.net/
  21. For those who are looking for a 2089 client: https://mega.co.nz/#!TtB2EaCa!Oo3_sS4KQdo6vfAhqVqbvP6MLGUCmSfuKjGenWx_cqA Enjoy.
  22. Shogun

    Metin2 db tables

    Since many people may need it, here's my complete official db structure for game 34k, including: - All Indexes and Options included - All auto increment values are set to 1 (except player that is set to 100 to avoid some issues) - Some non-fatal errors caused by original YMIR table structure are fixed 34k_official_db_structure.zip 69 KB https://mega.co.nz/#!SB1CzYyI!T8c_wILefEJBpYjNJXKW2BVaPzp2SRMjNuVDh2WEXkU Tables refine_proto (official, valid for all game revisions) object_proto (modified from official with smaller limits for buildings so they actually fit in your land) skill_proto (SG, has a couple of small differences in regards to GF) shop_item (SG)
  23. Shogun

    Full Monarch System

    The World of Metin2 Monarch System is composed of two parts. For the system to work fully you need to use db core 33820 or a compiled db where this bug is solved (look dif part at the end. If anybody wants to create difs for other revisions, you are welcome to do so.) Monarch Election Authors: Musicinstructor and me (Shogun) Usage: the election has 3 stages: Candidacy, Election and Crowning. All the stages can be started sucessively from the Archer Guardian NPC in town. - During Candidacy phase, all players over level 65 can apply for election by paying some Yang. Up to 8 players can apply per kingdom. - During Election phase, players will drop an item called Certificate of Loyalty (60004) which allows them to cast a vote. - Finally, you can finish the election, which will announce the winners automatically. The new King / Queen will receive a new Hwang Armor on login and the Angel's Blessing item. For the quest to work you need the following preparation: 1) Create an empty file share/data/monarch_election in your server with the touch command. 2) Fill the table player.monarch with some random values (use the PID of your GM for example). You can also use this table: DROP TABLE IF EXISTS `monarch`; CREATE TABLE `monarch` ( `empire` int(10) unsigned NOT NULL DEFAULT '0', `pid` int(10) unsigned DEFAULT NULL, `windate` datetime DEFAULT NULL, `money` bigint(20) unsigned DEFAULT NULL, PRIMARY KEY (`empire`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; -- ---------------------------- -- Records of monarch -- ---------------------------- INSERT INTO `monarch` VALUES ('1', '266', '2014-02-04 04:36:55', '0'); INSERT INTO `monarch` VALUES ('2', '188', '2013-11-07 20:10:00', '0'); INSERT INTO `monarch` VALUES ('3', '170', '2013-09-16 22:12:06', '0');3) Make sure 60004 exists in item proto and has a suitable icon for it. The quest Add this to locale.lua Add this also to questlib.lua Items for item_list.txt 60004 ETC icon/item/60002.tgaitem_proto.txt entries for the certificate, blessing and armors 60004 loyalty_certificate ITEM_UNIQUE UNIQUE_NONE 1 ANTI_GET | ANTI_DROP | ANTI_SELL | ANTI_SAVE | ANTI_GIVE | ANTI_PKDROP | ANTI_STACK | ANTI_MYSHOP | ANTI_SAFEBOX LOG NONE NONE 0 0 0 0 0 LIMIT_NONE 0 LIMIT_NONE 0 APPLY_NONE 0 APPLY_NONE 0 APPLY_NONE 0 604800 0 1 0 0 0 0 0 0 70021 ±ºÁÖÀÇ ÁõÇ¥ ITEM_QUEST 0 1 ANTI_DROP | ANTI_SELL | ANTI_GIVE | ANTI_STACK | ANTI_MYSHOP | ANTI_SAFEBOX NONE NONE NONE 0 0 0 0 0 LIMIT_NONE 0 LIMIT_NONE 0 APPLY_NONE 0 APPLY_NONE 0 APPLY_NONE 0 0 0 0 0 0 0 0 0 0 11971 Ȳ»óÀü°© ITEM_ARMOR ARMOR_BODY 2 ANTI_ASSASSIN | ANTI_SURA | ANTI_MUDANG | ANTI_DROP | ANTI_SELL | ANTI_GIVE | ANTI_STACK | ANTI_MYSHOP ITEM_TUNABLE WEAR_BODY NONE 0 0 0 0 0 LEVEL 50 LIMIT_NONE 0 APPLY_MOV_SPEED 10 APPLY_RESIST_MAGIC 20 APPLY_ATTBONUS_HUMAN 15 0 350 0 24 0 100 100 3 0 11972 ȲÀÇ ITEM_ARMOR ARMOR_BODY 2 ANTI_MUSA | ANTI_SURA | ANTI_MUDANG | ANTI_DROP | ANTI_SELL | ANTI_GIVE | ANTI_STACK | ANTI_MYSHOP | ANTI_SAFEBOX ITEM_TUNABLE WEAR_BODY NONE 0 0 0 0 0 LEVEL 50 LIMIT_NONE 0 APPLY_MOV_SPEED 10 APPLY_RESIST_MAGIC 20 APPLY_ATTBONUS_HUMAN 15 0 350 0 24 0 100 100 3 0 11973 ÁøȲ»ó°© ITEM_ARMOR ARMOR_BODY 2 ANTI_MUSA | ANTI_ASSASSIN | ANTI_MUDANG | ANTI_DROP | ANTI_SELL | ANTI_GIVE | ANTI_STACK | ANTI_MYSHOP | ANTI_SAFEBOX ITEM_TUNABLE WEAR_BODY NONE 0 0 0 0 0 LEVEL 50 LIMIT_NONE 0 APPLY_MOV_SPEED 10 APPLY_RESIST_MAGIC 20 APPLY_ATTBONUS_HUMAN 15 0 350 0 24 0 100 100 3 0 11974 Ȳ»óÀÇ ITEM_ARMOR ARMOR_BODY 2 ANTI_MUSA | ANTI_ASSASSIN | ANTI_SURA | ANTI_DROP | ANTI_SELL | ANTI_GIVE | ANTI_STACK | ANTI_MYSHOP | ANTI_SAFEBOX ITEM_TUNABLE WEAR_BODY NONE 0 0 0 0 0 LEVEL 50 LIMIT_NONE 0 APPLY_MOV_SPEED 10 APPLY_RESIST_MAGIC 20 APPLY_ATTBONUS_HUMAN 15 0 350 0 24 0 100 100 3 0 Angel's Blessing Quest written by me and loosely based in the official quest used by Metin2 US. This is the item the Monarch can use to cast his powers, such as healing and attacking buffs which affect all the players from his kingdom in the same map; or summoning of different bosses and Guardians which only attack players from enemy kingdoms. It's an original YMIR item and the vnum is 70021. Instructions are included in the quest for the rookie kings/queens. Preparation: 1) Set MonarchHealGold event flag to an appropiate value (this is the cost of a monarch buff that heals everyone on the map) 2) Edit the list of bosses and their cost to your desires The quest: The function oh.takemonarchmoney() used in the angel's blessing quest is bugged on all official db cores. This is fixed in Vanilla Core 2.2+. For db 33820 here is a dif made by Paylasici: [UNSTRIPPED] db_r33820_32 000A30DD: 3B 20For db 40146 here's another dif made by PACIFICADOR db_r40146 000A5015: 3B 20 It is possible that something is missing in that case let me know here your answers are appreciated
  24. Shogun

    Hosting Reviews

    Hi all, there are many different hosters around the world so I think it would be a good idea if we share our experiences hosting our servers or websites with them. I will start with my own reviews: Softlayer: Best support, expensive, they respond to DMCA requests and null route for 4 h on attack. Leaseweb: Cheap, average support, they don't null route you if you are attacked but they have general host failures constantly. No FreeBSD-aware staff. Worldstream: Cheap and reliable hardware, decent support, they null route you for 24 hours in the event of an attack. Check out their specials for extremely cheap dedicated servers.
  25. Hi guys, Today I will show you how to keep your server up to date with the latest patches or upgrade to a new version. For this purpose, there exists a simple command line tool called freebsd-update. Although many people consider updating their operating system a nuisance, you should be aware that there are vulnerabilities being published constantly for whichever Operating System you use, so update it with all the critical updates, be it your server or your PC at home. Okay, now into the tutorial itself. First we will take a look at which are the currently supported releases of FreeBSD: Production (Legacy) Release: Legacy release is 8.4 (launched in June 2013) - this means this is the oldest version supported at the moment. Older versions do not get updates or security patches so it's a good idea to keep your FreeBSD installation at this minimum version. Production Release: The production release 9.3 (launched July 2014) is the recommended one as it's the release that the main development work is taking place on. Upcoming Release: Release 10.1 (November 2014) is still quite experimental and introduces some important changes. Installing the critical updates for your current version of FreeBSD This action is, in theory, similar to running Windows Update in the Microsoft OS, or "yum update" in a RedHat/CentOs machine: freebsd-update fetch install Will download and install all the system and kernel updates for your current version of FreeBSD (Just press page down when you get a list of the installed files - pointing this out as some may get stuck at this point) Upgrading to a newer version of FreeBSD Upgrading to a newer release of FreeBSD, which we suppose should be better, is a bit more adventurous: freebsd-update upgrade -r [release name] Where [release name] is the name of the release you want to upgrade to. This is composed by the version number and the branch name (CURRENT, RELEASE or STABLE). I recommend choosing the RELEASE branch, so for example, if we wanted to upgrade our 8.1 installation to 8.4 we would use: freebsd-update upgrade -r 8.4-RELEASE Note a reboot will be required at the end to boot into the new kernel (and you may be instructed to run commands after the reboot as well). Pay attention to instructions on screen! Three situations where beginners often get stuck here A survival guide for FreeBSD upgrades When asked if everything looks reasonable, pray and say yes If a configuration file is displayed, you are in the vi editor (unless you changed your default editor, but then you probably don't need this guide). vi is an abomination of nature, so we will exit from it with :q! If you are shown a long list of files, you are in the less text viewer, and you can exit and continue pressing these keys in order: '$ When you are asked to rebuild your ports, you can use pkg upgrade to just upgrade the binaries. Although I must confess I have no idea if this actually has the same effect, I haven't had any problems so far. If you really want to rebuild all ports you can do it this way: portsnap fetch update cd /usr/ports/ports-mgmt/portupgrade make install clean portupgrade -Raf