Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation on 07/23/15 in all areas

  1. This thread will be updated from time to time with useful things for server administrators. - WinSCP, for transfer of files from your computer to a remote server. [Hidden Content] - PuTTy for SSH access to your server. [Hidden Content] - Navicat Premium for database management. [Hidden Content] - Notepad++ for code edits. [Hidden Content] - HxD for byte-patching binaries manually. [Hidden Content] - FileArchiver r3869 by Tim for unpacking and packing client archives using panama encryption. [Hidden Content] - EterNexus File Archiver for unpacking and packing client archives. [Hidden Content] - BlackYuko's DIF Patcher for byte-patching binaries. [Hidden Content] - dump_proto.exe for converting 2013 database proto txt files to client-side proto files. [Hidden Content] - Paint.NET for image editing. [Hidden Content] - Photoshop DDS plugin [Hidden Content] - VirtualBox [Hidden Content]
    1 point
  2. M2 Download Center Download Here ( Internal )
    1 point
  3. Hello, I made this background some time ago, but i dont need it anymore. I dont want to delete it, because i have worked on it for a while. So i am sharing this with you, hoping that someone can use it. Download: [Hidden Content] Preview:
    1 point
  4. It serves to open PNG Source Client 1. Open folder ScriptLib that can be opened with png images in png textures python and put in granny sorry speak english
    1 point
  5. M2 Download Center Download Here ( Internal ) Hi everyone, Maybe just in my country, but it looks so many people started using this annoying PM flooder which cause a buffer overflow in the target client. It can be fixed easily on server-side, so let's do it: Add these functions as public to char.h: void ClearPMCounter(void) { m_iPMCounter = 0; } void IncreasePMCounter(void) { m_iPMCounter++; } void SetLastPMPulse(void); int GetPMCounter(void) const { return m_iPMCounter; } int GetLastPMPulse(void) const { return m_iLastPMPulse; } Add these to char.h too, but as protected: int m_iLastPMPulse; int m_iPMCounter; Add this function to char.cpp: void CHARACTER::SetLastPMPulse(void) { m_iLastPMPulse = thecore_pulse() + 25; } Still in char.cpp search for the Initialize and add these to the function: m_iLastPMPulse = 0; m_iPMCounter = 0; Now navigate to the Whisper function in input_main.cpp and add this after the iExtraLen variable checking at the top: if (ch->GetLastPMPulse() < thecore_pulse()) ch->ClearPMCounter(); if (ch->GetPMCounter() > 3 && ch->GetLastPMPulse() > thecore_pulse()) { ch->GetDesc()->SetPhase(PHASE_CLOSE); return -1; } Search for this still in the Whisper function: if (pkChr == ch) return (iExtraLen); Add these after that: ch->IncreasePMCounter(); ch->SetLastPMPulse();
    1 point
  6. M2 Download Center Download Here ( Block Drop Hack | Binary Check Name ) Download Here ( Quest Functions - Get IP | Get Version | Disconnect | Delayed DC ) Hi everyone, It's finally time to open a topic for the small tutorials, it's better than flooding the board with one sentence topics. 1. Binary name check: Sure, it's possible to do it on client-side, but if we can do it on server-side, theres no reason to do it on client-side. 1. Search for this function in game/input.cpp: void CInputProcessor::Version(LPCHARACTER ch, const char* c_pData) 2. Replace the entire function with this: if (!ch) { return; } TPacketCGClientVersion * p = (TPacketCGClientVersion *) c_pData; // If the file name is not metin2client.exe and the GM level is not equal with GM_IMPLEMENTOR kick the player if (strcmp(p->filename, "metin2client.exe") && ch->GetGMLevel() != GM_IMPLEMENTOR) { // immediately close the connection with the player sys_err("%s[%d] has been disconnected: %s", ch->GetName(), ch->GetPlayerID(), p->filename); ch->GetDesc()->SetPhase(PHASE_CLOSE); return; } sys_log(0, "VERSION: %s %s %s", ch->GetName(), p->timestamp, p->filename); ch->GetDesc()->SetClientVersion(p->timestamp); 2. Block the drop hacks: This issue is surely known by everybody, the server gets overloaded when dropping too many items in short time. 1. Open game/char_item.cpp and search for this: if (pkItemToDrop->AddToGround(GetMapIndex(), pxPos)) 2. Add this under that: // Clear the variable, it looks the player does not dropped any item in the past second. if (thecore_pulse() > LastDropTime + 25) CountDrops = 0; // It looks the player dropped min. 4 items in the past 1 second if (thecore_pulse() < LastDropTime + 25 && CountDrops >= 4) { // Set it to 0 CountDrops = 0; sys_err("%s[%d] has been disconnected because of drophack using", GetName(), GetPlayerID()); // Disconnect the player GetDesc()->SetPhase(PHASE_CLOSE); return false; } 3. Search for this still in game/char_item.cpp: LogManager::instance().ItemLog(this, pkItemToDrop, "DROP", szHint); 4. Add this under that: LastDropTime = thecore_pulse(); CountDrops++; 5. Open game/char.h and add these: int LastDropTime; int CountDrops; 6. Open game/char.cpp and search for this: void CHARACTER::Initialize() 7. Add these to the function: CountDrops = 0; LastDropTime = 0;
    1 point
  7. M2 Download Center Download Here ( Internal ) Here ( Bonus - Unban Command ) Hi, In this thread I will show you how to do an in-game ban for your GMs. First of all, you need to make a new column in the account.account. The name of the field should be reason and select varchar as type. Or just use this in your console to create the field: ALTER TABLE account ADD reason VARCHAR(256); Now open game/cmd.cpp and search for this: ACMD(do_block_chat); Add this under that: ACMD(do_ban); Search for this still in the game/cmd.cpp: { "block_chat_list",do_block_chat_list, 0, POS_DEAD, GM_PLAYER }, Make a new line and add this under that: { "ban", do_ban, 0, POS_DEAD, GM_IMPLEMENTOR }, At this point you can change the rights for the command: GM_PLAYER - do NOT choose this! GM_LOW_WIZARD GM_WIZARD GM_HIGH_WIZARD GM_GOD GM_IMPLEMENTOR Search for this event in game/cmd_gm.cpp: ACMD(do_block_chat) Add this under that: ACMD(do_ban) Now time to add the complete code to ACMD(do_ban): // Args char arg1[256], arg2[256], arg3[256]; // Local variables const char* szName; const char* szReason; int iDuration; one_argument(two_arguments(argument, arg1, sizeof(arg1), arg2, sizeof(arg2)), arg3, sizeof(arg3)); // Invalid syntax if (!*arg1 || !*arg2 || !*arg3) { ch->ChatPacket(CHAT_TYPE_INFO, "Invalid Syntax, usage: <player name> <time in hours> <reason> tip: don't use spaces in the reason, use _"); return; } szName = arg1; iDuration = atoi(arg2); szReason = arg3; if (iDuration <= 0) { ch->ChatPacket(CHAT_TYPE_INFO, "Duration can't be 0 or minus."); return; } LPCHARACTER tch = CHARACTER_MANAGER::instance().FindPC(szName); if (!tch) { ch->ChatPacket(CHAT_TYPE_INFO, "%s is not playing", szName); return; } if (!tch->GetDesc()) { ch->ChatPacket(CHAT_TYPE_INFO, "%s don't have desc", szName); return; } if (tch == ch) { ch->ChatPacket(CHAT_TYPE_INFO, "What's wrong with you? Don't ban yourself"); return; } if (tch->GetGMLevel() > GM_PLAYER) { ch->ChatPacket(CHAT_TYPE_INFO, "Do not ban GMs"); return; } std::auto_ptr<SQLMsg> msg(DBManager::instance().DirectQuery("UPDATE account.account SET availDt = FROM_UNIXTIME(UNIX_TIMESTAMP(CURRENT_TIMESTAMP()) + %i), reason = '%s' WHERE id = %d", iDuration * 3600, szReason, tch->GetDesc()->GetAccountTable().id)); tch->GetDesc()->DelayedDisconnect(5); sys_log(0, "%s[%d] banned %s for %i hours with reason: %s", ch->GetName(), ch->GetPlayerID(), szName, iDuration, szReason); ch->ChatPacket(CHAT_TYPE_INFO, "%s has been banned for %i hours with reason: %s", szName, iDuration, szReason); Check how it works: If you have any question or suggestion, please just reply to this topic. Kind Regards, Sanchez
    1 point
  8. M2 Download Center Download Here ( Internal ) Pet from TERA Online (my first export) [Hidden Content] [Hidden Content] [Hidden Content]
    1 point
  9. you should get the pet called Felicity it's pretty much the most popular pet in tera
    1 point
  10. I have been see this on one forum and i'd like to share this on this forum too. A depressed death.
    1 point
  11. Hello metin2dev, Vanilla project is a project where I'm going to modify the source code just to enhance the capabilities of the gamecore, add small new stuff, bugfixing and making it more comfortable to use. Some of the goals are more performance and lesser dependencies on dif-files. This project reached a level where it's easy to use and offers tons of new features. Many bugs and exploits are fixed. Additionally, this gamefile is the only one released for everyone that's having so much features and still allows you to customize them to your needs! There are a lot of CONFIG-options where you can enable/disable systems and even tune them to your needs. You won't need difs anymore, you can just configure the gamefile as you want! It's the only gamefile released that's compiled with newer libraries and gcc 4.9.1 with even more optimization to enhance the speed and lower the file size of the gamefile. Also this game has the package-system disabled by default and lets you run the dbcache from mysql tables by default instead of txt-files! That allows you to easily upgrade your current gamefile without the need to create new directories or convert your proto's to txt! You just have to download the package I provided, extract it and to read the install instructions! I promise you there isn't much to read! Since the source code is written by YMIR and I respect their work I won't release the source code or give any peeks into it. current version: 2.4.1 Developed version: 2.5 Download: See second post! *FEATURE LIST* + 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. + merged all the exp tables to the "exp_table_common" which will be used by ANY locale. You can change the needed exp for 200 levels there. + Max_level can be raised in the CONFIG file to a maximum of 255. + status points will be given at any level. It depends now on Max_level so if you set max_level to 120 you'll get status points until level 120! + fixed vampirism effects so you won't loose hp when you make an overkill (suras may embrace this change) + exp bonus now works comulutative instead of just making a chance to get double exp. If you have 20% exp bonus in your items you'll get 20% more exp at any time. + Rewrote the version check. You can now set your server version in your CONFIG-file and let it check with the client version. If serverversion != clientversion the server will print a message and kick the player out + Raised the gold limit up to 999.999.999.999 + membuf-errors fixed! Now you have a optimized buffer length so it won't consume much RAM but still have enough to not kick players out. + you can now give priv_empire (or other priv's) up to 2000% at any time. + a lot of new quest functions, when triggers and CONFIG-options + more stability and performance especially since it's compiled with a newer gcc version + Optimization flags and linker optimization enabled + ip's beginning with 5. and 25. are now allowed by the internal ip-check + Items can now be sold for 0 gold + 6/7 bonus are now working + name-change works with every locale + gold overflow: Now resets the gold to the maximum value to fight against gold overflow + horse-table has new entries for up to level 51. Raising the level extends the horse-stats. + New error handling for bonus overflow. Now the bonus will be set to the maximum generating a warning in your syserr + player movement speed will be observerd by the server now and set down to the maximum value if it's too high. + Skills can now apply new bonuses! You can e. g. raise your int-attribute + Dbcache can now start without txt-files + If you're warped into a non-existing map or non-existing coordinates your coordinates will be resetted to map1 of your village; You won't need unstuckers anymore + adminpage_ip set to localhost by default so it'll only listen to itself to prevent attackings from API tool. Additionally it's disabled by default and you can enable it with a CONFIG-option. Say good bye to the API tool! + Tons of bug fixes even YMIR had! + Completely rebuild of the source with gcc4.9, cryptopp 5.6.2 and boost 1.55; new optimizations flags and C++11 are enabled to make the core much more faster and more stable! + Advanced spam protection installed! + Unknown packet headers will no longer lead to a disconnect though they'll get dropped + Second binary compiled with 4 inventory pages! + Added the new skill flags so they can use FIRE, ICE, ELEC and DARK + Anti-Exp in the game source + reload q corrected. Note! Still not recommended. But if it's crashing, it'll now notice you. *Gameplay changes* + HP/MP overflow fixed + yang limit raised to unsigned long long int! + Fixed a huge load of format errors that'd actually crash the core! + Speedhack limit fixed so you won't get teleported back when riding + item.remove() won't remove stacks anymore! It'll just reduce the amount of the stack by 1. It there's only one left, the item will be removed. + Bypass to createa guild under level 40 fixed! + Guild wars won't crash the core anymore! + immune bug fixed (completely!!!) + Anti-Overflow mechanism prevents people from receiving too much gold + prisma glass system enabled and fixed + 6/7 bonuses work + polymorph bug fixed + invisibility bug fixed + empire exploit fixed + belt system and dragon soul system enabled + level size raised up to a normal int + You can put items for 0 gold in a shop + Exp can go higher than long int. It's now unsigned long long int (which makes higher exp requirements possible) *New CONFIG-options* MAX_LEVEL_STATUS: unsigned int Forces a maximum level. If you level up higher than this, you'll receive no status points anymore. MAX_STATUS: unsigned int Sets a maximum of distributed status points. If you e. g. set it to 20, you can only raise your stat's by 20 each status. SERVER_CHECK: 1/0 Checks if the client version and the server version are the same. If not, the server will send a message to the client and kick him out after a few seconds. SERVER_VERSION: unsigned int There you can set the version of your server for the SERVER_CHECK. MAX_HT: unsigned int It's the same option than MAX_STATUS but only for the con-attribute. MAX_IQ: unsigned int It's the same option than MAX_STATUS but only for the int-attribute. MAX_ST: unsigned int It's the same option than MAX_STATUS but only for the str-attribute. MAX_DX: unsigned int It's the same option than MAX_STATUS but only for the dex-attribute. ATTR_ALWAYS_ADD: 1/0 If enabled you'll get 100% chance to add new attributes to you equipment. ATTR_ALWAYS_5_ADD: 1/0 If enabled you'll get 100% chance to add new attributes to you equipment. Counts only for 5th Bonus (blessing marble). ATTR_CHANGE_LIMIT: int You can set a limit time to change your attributes again. It's changed to seconds (set it to 1 to let the users switch only once per second their attributes). GUILD_MAX_LEVEL: int Sets the maximum guild level. You can raise it up to 50 since the exp-table is extended to handle up to 50. ITEM_OWNERSHIP_TIME: int If you drop an item, this option sets how long the item will be flagged as yours. MIN_ADDON_FKS: int Sets the minimum ability bonus dmg you can have. MAX_ADDON_FKS: int Sets the maximum ability bonus dmg you can have. MIN_ADDON_DSS: int Sets the minimum normal hit bonus dmg you can have. MIN_ADDON_DSS: int Sets the maximum normal hit bonus dmg you can have. SKILLBOOK_DELAY: int Sets the time limit for reading a book (e. g. if you read skill books you'll have to wait x seconds until you can read the same skill book again). SKILLBOOK_NEED_EXP: int Sets the exp you need for reading a book. SKILLBOOK_ALWAYS_BOOK: 1/0 Sets if every book will be handled as you'd have used a skillbook chance amplifier. GOLD_DROP_TIME_INTERVAL: int Sets how long you have to wait until you can drop gold again. SEQUENCE_CHECK: 1/0 Enables a check if the sequence table is the same than the client's one. SKILLBOOK_STEP_LEVELING: 1/0 Enables the need of more books for raising a skill (e. g. you need 2 books from m2 to m3). RAISE_EMPIRE_PRICES: 1/0 Enables the raise of prices if you buy items in another empire. HORSE_MAX_LEVEL: int Sets the maximum level of your horse (you still need to write quests or something like that to allow players to achieve the higher horse-levels). MARRIAGE_MAX_PERCENT: int Sets the maximum allowed percent of love points. Warning! If love points > 100 it'd lead into bugs with breaking the marriage. PC_MAX_MOVEMENT_SPEED: int Sets the maximum movement speed for players. PC_MAX_ATTACK_SPEED: int Sets the maximum attack speed for players. MOB_MAX_MOVEMENT_SPEED: int Sets the maximum movement speed for mobs. MOB_MAX_ATTACK_SPEED: int Sets the maximum attack speed for mobs. TAXES: int From 0 to 100. Sets the % how much taxes you have to pay while shopping. DYE_LEVEL: int Sets how many levels you have to get after you can change your hair color again. YANG_MAX: long long Sets the maximum gold you can carry. You can change it up to 999.999.999.999 gold. package_enable: 0/1 1 = enabled. Disabled by default. Enable to use the package-feature. log_level: 0/1/2 Sets the logging level. 0 means to logs will be entered in your database. 1 means that the most important tables (hack-logs for example) will be used 2 means that all logging tables will be used new_test_server: 0/1 Protects your test-server so the gamecore will check if accounts are written into gmlist before granting them implementor-privileges. new_gm_host_check: 1/0 Checks the gmhost and gmlist for the right ip before granting privileges. Disabled by default. adminpage_enable: 1/0 Enables the adminpage-features. Disabled by default (say bye bye to API tools) adminpage_no_localhost: 1/0 Disables the security feature which inserts localhost into your adminpage_ip so it'll only listen to localhost. item_floor_time: int Set the time how long a dropped item will be lying on the ground (by monsters) max_rank_points: long int Set the maximum rank points movement_speed: int Set the initial movement speed for players. belt_all_allow_items: 0/1 Allow Players to store every item in their belt inventory attr_rare_enable: 0/1 Allow the using of rare attributes (6th and 7th attributes). Default: ON. GOLD_DROP_TIME: int Sets the time how long dropped gold will lay on the ground until it's purged. ITEM_DROP_TIME: int Sets how long dropped items will lay on the ground intil it's purged. BELT_FORCE_SLOTS: int Forces to open up the given amount of slots in your belt inventory. If this value is higher than the grade of your belt, it'll open the given amount of slots. If it's lower, the amount your belt provides will be used. For example: You set 10. You've got a belt that opens 5 slots. 10 will be opened. Now you set 4 and still have the same belt. This time 5 slots will be opened. This does also work when no belts are weared. But be careful: Since there's also a clientside part the slots may appear to be locked but you can still put items into them trade_effect: 1/0 Enables a effect that'll occur when people are traing stuff. Enabled by default. ban_force_reason: 1/0 This lets the ban-command only work when you're giving a reason. Disabled by default. start_gold: long int Let's players start with a custom amount of gold. Default: 0. view_equip_for_all: 1/0 Let's player view equip of others! Disabled by default. view_equip_sp_cost: int Sets the cost of using view_equip. This is in % so if you type in 30 then it'll cost 30% of the players maximum sp. Default: 0. glass_enable: 1/0 Enables the prisma glass-system to print your items in the chat. Disabled by default. glass_needed: 1/0 Sets if you need a glass for using the prisma glass-system or not. Enabled by default. trade_effect_exchange_threshold: int Sets the threshold to create another effect when making an exchange. Default: 500000. This means, that every 500000 gold traded away there'll be another fly effect created trade_effect_shop_threshold: int Same as trade_effect_exchange_threshold; This points to buying items in shops. Default: 100000000. VERSIONCHECK_KICK_DELAY: int Default is 10. Sets the time until the player is kicked when a version mismatch is occured. Takes only effect if the versioncheck is enabled. EMOTION_WITHOUT_MASK: 1/0 Default is 0. Lets you define if you won't need a mask to use emotions. EMOTION_SAME_GENDER: 1/0 Default is 0. Lets you define if people will be able to use emotions on the same gender. Notice: This'd possibly look awkward because the animations doesn't match CHECK_SPEEDHACK_ENABLE: 1/0 Default is 1. Lets you define if you want to use the speedhack/synchack check. Warning! Make sure you only use this for debugging purpose! You can fine-tune the variables for the speedhack in your CONFIG, so this should normally not be touched! QUEST_TRIGGER_ENABLE: 1/0 Default is 1. Lets you define if you want to use the new execute-trigger. EXP_NEED_THRESHOLD: unsigned long long int Allows you to set the exp needed if your level is higher than the maximum level of the exp table SKILL_MASTER_UPGRADE: int Sets the minimum level when your skill can jump to master. If it's set to 1 for example, then it'd happen that your skill jumps to m1 at any level. SKILL_FORCE_MASTER: 1/0 Lets you define if your skill will definitely raise to m1 if it hits the minimum level for jumping. So if you're enabling this, then your skill will definitely (unless you set SKILL_MASTER_UPGRADE) raise to m1 when hitting 17. BUGFIX_SURA_MANASHIELD: 1/0 Default is disabled. Fixes the sura manashield so it'll now scale with the proper value instead of always removing a third of the damage. Warning! When activating, you'd nerf the skill! Otherwise people with over 100 iq could prevent every incoming damage and even heal themselves or cause crashes! *New questfunctions* item.get_attr_type(int index) item.get_attr_value(int index) item.set_attr(int ApplyType, int ApplyValue[, int index]) npc.get_level() game.mysql_real_escape_string(string query) game.mysql_query(string query) game.mysql_update_query(string query) pc.delayed_disconnect(int zeit) pc.get_mount_vnum() pc.set_level(int level) pc.send_effect(int id) pc.block_exp() pc.unblock_exp() item.equip() npc.select() pet.is_mine() pc.get_id() *New conf.txt options* TXT_STARTUP = 0/1 1 = enabled. Disabled by default. Enable to boot with txt-files instead of sql *New quest trigger* OnBuy (triggers on buying a item from players or npc's) OnDie (triggers on dying) *commands* /ban playername reason /unban playername full list of all allowed bonuses for skills: MAX_HP MAX_SP HP_REGEN SP_REGEN BLOCK HP SP ATT_GRADE DEF_GRADE MAGIC_ATT_GRADE MAGIC_DEF_GRADE BOW_DISTANCE MOV_SPEED ATT_SPEED POISON_PCT RESIST_RANGE CASTING_SPEED REFLECT_MELEE ATT_BONUS DEF_BONUS RESIST_NORMAL DODGE KILL_HP_RECOVER KILL_SP_RECOVER HIT_HP_RECOVER HIT_SP_RECOVER CRITICAL MANASHIELD SKILL_DAMAGE_BONUS NORMAL_HIT_DAMAGE_BONUS HT IQ ST DX STUN_PCT SLOW_PCT PENETRATE_PCT ATTBONUS_HUMAN STEAL_HP STEAL_SP MANA_BURN_PCT DAMAGE_SP_RECOVER RESIST_SWORD RESIST_TWOHAND RESIST_DAGGER RESIST_BELL RESIST_FAN RESIST_BOW RESIST_FIRE RESIST_ELEC RESIST_MAGIC RESIST_WIND REFLECT_CURSE POISON_REDUCE EXP_DOUBLE_BONUS GOLD_DOUBLE_BONUS ITEM_DROP_BONUS POTION_BONUS IMMUNE_STUN IMMUNE_SLOW IMMUNE_FALL CURSE_PCT STA ATTBONUS_WARRIOR ATTBONUS_ASSASSIN ATTBONUS_SURA ATTBONUS_SHAMAN ATTBONUS_MONSTER MAX_HP_PCT MAX_SP_PCT SKILL_DEFEND_BONUS NORMAL_HIT_DEFEND_BONUS RESIST_WARRIOR RESIST_ASSASSIN RESIST_SURA RESIST_SHAMAN ENERGY RESIST_CRITICAL RESIST_PENETRATE Thanks to: xP3NG3Rx for some quest functions Sphinx² & lollo_9_1 for the mysql-functions Lefloyd for the 2 new quest triggers .InyaProduction for some new quest functions Tim for the suggestion to include libs from a special path MartPwnS for helping with the src code on gcc48/gcc49 And especially thanks to you!
    1 point
  12. you may be missing the skills in skill_proto
    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.