You're also free to ask me to not show the work I'll make for you or re-selling to others. (no one will know about it)
If you are interested in such work then send me a PM with your skype contact.
Probably, I won't accept all of your requests, but don't lose hope.
You'll receive the stuff you asked for after the payment. No exceptions, but it's your right to have proof about its existence and whether it works or not.
Source Editing Selling
Due to the fact I wasted enough time to fix all the kind of bugs people reported me, I'm currently selling such stuff to regain something. I hope someone will understand it.
The rule of this forum forbids the selling of metin2`s source, but I'm free to sell all the fixes, modifications and features I made because they are work of mine not copyrighted by ymir.
Server repo details:
- Compilable on both Windows (Debug/Release) and Freebsd (deps static linked)
- Fixed all the warnings you could have compiling with the default gcc version
- List of fixes: (the full explanation is written in the README.txt)
- SAMLL type-error
- invalid_server_log query bug
- /war -1 bug crash
- ClientCheckVersion comparing
- Status Point stopped increasing to level 90
- Disabled korean commands
- Full-Speeded player will not warp you back when using mounts like lion
- Absorb HP/MP fix (the one which decreases the gauge instead of increases it)
- Entities disappearing when mounting many mounts or not existent ones
- Double triggering of "when kill begin" when you kill a player
- The semi-transparent affect not disappearing when attacking (when reviving or using ninja hidden skill)
- Bonus changing on equipped items
- Stone changing on equipped items
- Scroll using (et similia) on equipped items
- Drop Hack bug about party detection
- Normal horse skills cannot inflict damage
- You cannot swap equipment when inventory is full
- Gaining as many hp/mp as many you have on your equipment when refreshing stuff
- Losing of hp/mp increased via affect when refreshing stuff
- Negative hp/mp when greater than 32767
- item movable from mall/safebox to belt inventory w/o checking the real type (potion check bypass)
- few packet IDs were not checked
- refine scroll item value 1 check error
- sub type 24 check bug (the condition could never be true)
- no check on 6-7 add/change items about costume stuff
- dungeon regen pointing to a dangling pointer
- disband and withdraw guild time limit problem if player is offline
- lovepoints overflow
- affect hack at login
- /cube r_index bug crash
- all the new mounts can now attack and/or inflict skill damage if they should (like official)
- unsummoning azrael pets out of dungeons won't decrease the relative "ghost" bonuses anymore
- messenger_auth flood hack
- sync packets sendable to everyone hack
- wrong checks on normal chat buf
- pc.mount_bonus bypass checks issue
- random crashes if mob's hp is 0
- now, when a player dies, his HP will be set as 0 instead of having a negative number
- Others are made configurable via define preprocessor
- List of defines:
- ##DB
- //I already made a thread about 'em with few samples and stuff
ENABLE_DEFAULT_PRIV //enable default priv loading from common.priv_settings - ENABLE_ITEMAWARD_REFRESH //enable a select query every 5 seconds into player.item_award
- ENABLE_PROTO_FROM_DB //enable PROTO_FROM_DB conf.txt feature (vnum_range works fine too)
//enable MIRROR2DB conf.txt feature - ENABLE_AUTODETECT_VNUMRANGE //if protos are loaded from db, it will automatically detect the vnum range for ds items without requiring an extra vnum_range field
- ##GAME
- ENABLE_D_NJGUILD //enable d.new_jump_all_guild+cpp relative functions
- ENABLE_QUEST_CATEGORY //enable quest category+new packet types (unimplemented)
- ENABLE_NEWSTUFF //enable new stuff (new lua funcs, new CONFIG options, ecc)
- ENABLE_LIMIT_TIME //enable game timestamp expiration
- ENABLE_NEWGUILDMAKE //enable pc.make_guild0 and disable CInputMain::AnswerMakeGuild
- ENABLE_CMD_PLAYER //enable PLAYER grade inside CMD
- ENABLE_IMMUNE_PERC //enable 90% of success instead of 100% regarding immunes (antistun/slow/fall)
- ENABLE_IMMUNE_FIX //fix immune bug where you need to equip shield at last
- ENABLE_SPAMDB_REFRESH //enable a select query every 10 minutes into common.spam_db
- ENABLE_TRANSLATE_LUA //enable translate.lua loading
- ENABLE_LOCALECHECK_CHANGENAME //enable check that unable change name on Europe Locales
- ENABLE_PC_OPENSHOP //enable pc.open_shop0(idshop) but buy/sell not work yet
- ENABLE_SHOP_BLACKLIST //enable ignore 70024 (Blessing Marble) and 70035 (Magic Copper Ore) in npcshop
- ENABLE_STATPLUS_NOLIMIT //disable only 90 points for con+/int+/str+/dex+ commands
- ENABLE_FORCE2MASTERSKILL //skill always pass to m1 when b17 instead of b(number(17-20))
- ENABLE_MOUNTSKILL_CHECK //check whether horse mount vnum should be checked when skilling
- ENABLE_NULLIFYAFFECT_LIMIT //sura skill 66 won't nullify players with level < or > of yours by 9
- NEW_ICEDAMAGE_SYSTEM //add new system for nemere dungeon and so on (the one where only ninja/shaman or buffed players could attack specific mobs)
- ENABLE_SHOWNPCLEVEL //show Lv %d level even for NPCs (not applicable on mob/stone/warp)
- ENABLE_GOHOME_IFNOMAP //you'll go back to your village if the map is unreachable
- ENABLE_PARTYKILL //re-enable PartyKill
- ENABLE_ACCOUNT_W_SPECIALCHARS //enable special characters in account names (account.account.login)
- ENABLE_CHAT_SPAMLIMIT //limit chat spam to 4 messages for 5 seconds, if you spam it for 10 times, you'll be disconnected!
- ENABLE_WHISPER_CHAT_SPAMLIMIT //limit whisper chat to 10 messages per 5 seconds, otherwise you'll be disconnected!
- ENABLE_CHAT_COLOR_SYSTEM //enable chat colors based on IsGm or GetEmpire (+colored empire name)
- ENABLE_FIREWORK_STUN //enable stun affect when using firework items
- ENABLE_ADDSTONE_FAILURE //enable add stone failure
- ENABLE_EXPTABLE_FROMDB //read the exp table from the db
- ENABLE_NEWEXP_CALCULATION //recalculate exp rate so you won't get random negative exp/marriage points
- ENABLE_CHAT_LOGGING //enable chat logging (which saves all the gm chats)
- ENABLE_EFFECT_EXTRAPOT //enable extrapot effects when using green/purple potions
- ENABLE_EFFECT_PENETRATE //enable penetrate effect when performing a penetration
- ENABLE_BOOKS_STACKFIX //enable stackable books instead of remove all the pile
- ENABLE_PLAYER_PER_ACCOUNT5 //enable 5 characters (per account) in the select phase (instead of 4)
- ENABLE_PORT_SECURITY //block db_port, p2p_port, and remote adminpage exploits
- MAP_ALLOW_LIMIT <int> //define how many maps are allowed per game core (default 32)
- ENABLE_BLOCK_CMD_SHORTCUT //if enabled, people won't be able to shorten commands
- ENABLE_FULL_NOTICE //enable new big notice features
- ENABLE_ANTI_CMD_FLOOD //limit player's command execution to 10 commands per second, otherwise it'll be disconnected!
- ENABLE_QUEST_DIE_EVENT //add quest event "die"
Little sample of the die event:
Code:quest die_sample begin state start begin when die with pc.get_gm_level()==5 begin syschat("die begin") syschat(pc.get_race()) -- if you "/kill yourself" or die by flame/bleeding/etc, the npc.* won't be available syschat(npc.is_available0() and npc.get_vnum0() or 0) syschat("die end") end end end
- ENABLE_CHECK_GHOSTMODE // dead people won't be able to move
- ENABLE_WOLFMAN_CHARACTER // it enables the wolfman character and its own sub-defines:
- USE_LYCAN_CREATE_POSITION // if enabled, the lycan will be warped to his own village at character creation
- USE_MOB_BLEEDING_AS_POISON // if enabled, the mob_proto structure won't change and the bleeding % will be get from the poison field
- USE_MOB_CLAW_AS_DAGGER // if enabled, the mob_proto structure won't change and the claw % will be get from the dagger field
- Merged all the locales except inside locale_service, so you can use Italy (latin1), Czech (latin2) and all the other ones with the relative detected charset.
So you won't have differences between we_korea or german except for the charset and the file names (locale/korea <> locale/germany)
You also gained such things: (you can disable 'em whenever you want; they are catalogued per line)- Arena will have an additional potion using check for uncommon values
- You won't be able to ride the horse in the arena
- No exp check when reading books when you're already at the maximum level
- The classic notice when a fight between guilds starts.
- A further thing about the limit of attacking people in protect mode
- List of new conf.txt options
- PROTO_FROM_DB = 1/0 // enable/disable item/mob proto loading from db (otherwise, .txt)
- MIRROR2DB = 1/0 // convert .txt protos to .sql ones
- List of new CONFIG options (used by NEWSTUFF and/or by few others)
- ITEM_COUNT_LIMIT <1-250> // you can set the maximum item count (e.g.) to 250 (200 by default)
- DISABLE_SHOP_PRICE_3X // disable the price increase on foreign empires (not disabled by default)
SHOP_PRICE_3X_TAX <0-1> // alternative (1 as default) - DISABLE_CHANGE_ATTR_TIME // disable bonus switching time limit (not disabled by default)
CHANGE_ATTR_TIME_LIMIT <0-1> // alternative (1 as default) - DISABLE_PRISM_ITEM // disable prism requirement (not disabled by default)
PRISM_ITEM_REQUIRE <0-1> // alternative (1 as default) - ENABLE_GLOBAL_SHOUT // enable shout as global (not enabled by default)
GLOBAL_SHOUT <0-1> // alternative (0 as default) - DISABLE_EMOTION_MASK // disable emotion mask requirement (not disabled by default)
EMOTION_MASK_REQUIRE <0-1> // alternative (1 as default) - ENABLE_BOOTARY_CHECK // enable opening a shop only in village maps (not enabled by default)
BOOTARY_CHECK <0-1> // alternative (0 as default) - CHECK_VERSION_SERVER <0-1> // set to check the ClientVersion (checked by default)
- CHECK_VERSION_VALUE <STRING> // set the ClientVersion numeric string (1215955205 by default)
- STATUS_POINT_GET_LEVEL_LIMIT <level> // set the maximum level to get status point (default lvl 90)
- STATUS_POINT_SET_MAX_VALUE <int> // set the maximum settable points for status (default 90)
- SHOUT_LIMIT_LEVEL <int> // set the requirement level to use the shout (default 15)
- SHOUT_LIMIT_TIME <int> // set the interval time limit to use the shout (default 15 secs) (commented)
- DB_LOG_LEVEL <0-3> // set which log information to save inside the database log (3 as default) (0=none, 1=fews, 2=many, 3=all)
- ITEM_DESTROY_TIME_AUTOGIVE <0-MAXINT> // set the destroy time for the autogive items (from boxes if inventory is full and so on) spawned (on the ground) (300 as default)
- ITEM_DESTROY_TIME_DROPITEM <0-MAXINT> // set the destroy time for the items dropped by the players (300 as default)
- ITEM_DESTROY_TIME_DROPGOLD <0-MAXINT> // set the destroy time for the gold (yang) dropped by the players (150 as default)
- GM_HOST_CHECK <0-1> // enable the gm host check based on ip (unchecked by default)
- GUILD_INVITE_LIMIT <0-1> // if enabled, the guild can invite new members only after an amount of time (not enabled by default)
- GUILD_INFINITE_MEMBERS <0-1> // if enabled, every guild can have infinite members (not enabled by default)
- EMPIRE_LANGUAGE_CHECK <0-1> // if enabled, you won't need to read language books or have the relative ring to understand other empires
- List of new lua functions (used by NEWSTUFF and/or few others)
- pc.delf(skel, opt) // delete quest flag [return lua boolean: successfulness]
- pc.make_item0({vnum|locale_name, count}, {socket1,2,3}, {type1, value1, ... , type7, value7}, gstate(=0: giveitem, 1: dropitem, 2: drop_item_with_leadership)[, countdown_in_secs_before_ownership_vanish(=if <=10 would be 30; default=10->30)]) // master function
Code:-- pc.make_item0({say, 1},{},{},0) --type not valid -- pc.make_item0({pc, 1},{},{},0) --type not valid -- pc.make_item0({true, 1},{},{},0) --type not valid -- pc.make_item0({19, 1},{},{},0) --ok -- pc.make_item0({0, 1},{},{},0) --vnum not valid -- pc.make_item0({"Runenschwert+9", 1},{},{},0) --ok -- pc.make_item0({"Runenschwert+90", 1},{},{},0) --vnum not found -- pc.make_item0({469, 1}, {27001,27002,27003}, {1,2,3,4,5,6,7,8,9,10,11,12,13,14}, 2, 120)
- pc.pointchange(uint type, int amount, bool bAmount, bool bBroadcast) //same effect of CHARACTER::PointChange [return nothing]
- pc.pullmob() // same effect of /pull [return nothing]
- pc.select_pid(pc.get_player_id()) // [return lua number: old pid]
- pc.select_vid // alias of pc.select [return lua number: old vid]
- pc.set_level0(level) // same effect of /level <lvl> [return nothing]
- pc.set_gm_level(); instead of `/reload a` (note: this only refresh gm privileges if you already are gm on common.gm[host|list]) [return nothing]
- pc.if_fire(), pc.if_invisible(), pc.if_poison(), pc.if_slow(), pc.if_stun(), pc.if_bleeding() // is_flag [return lua boolean]
- pc.sf_fire(bool), pc.sf_invisible(bool), pc.sf_poison(bool), pc.sf_slow(bool), pc.sf_stun(bool), pc.sf_bleeding(bool) // set_flag [return nothing]
- pc.sf_kill(player_name) // same effect of /kill <nick> [return nothing]
- pc.sf_dead() // kill themselves [return nothing]
- pc.get_exp_level(level) // get needed exp for <level> level [return: lua number]
- pc.get_exp_level0(level, perc) // get needed exp for <level> level / 100 * perc [return: lua number]
- pc.set_max_health() // same as /reset [return nothing]
- pc.get_ip0() // get player ip [return lua string]
- pc.get_client_version0() // get player client version [return lua string]
- pc.dc_delayed0(secs) // crash a player after x secs [return lua boolean: successfulness]
- pc.dc_direct0(player_name) // crash the <nick> player [return nothing]
- pc.is_trade0() // get if player is trading [return lua boolean]
- pc.is_busy0() // get if player is "busy" (if trade, safebox, npc/myshop, cube are open) [return lua boolean]
- pc.is_arena0() // get if player is in arena [return lua boolean]
- pc.is_arena_observer0() // get if player is in arena as observer [return lua boolean]
- pc.equip_slot0(cell) // [return lua boolean: successfulness]
- pc.unequip_slot0(cell) // [return lua boolean: successfulness]
- pc.open_shop0(id_shop) // buy/sell won't work on it [return nothing]
- pc.make_guild0(guild_name) // it returns few state values which you can manage via lua [return lua number]
Code:-- local ret = pc.make_guild0(guild_name) -- if ret==-2 then -- say_reward("[NO] guild name is invalid (strlen <2 or >11!)") -- elseif ret==-1 then -- say_reward("[NO] guild name is invalid (special chars found!)") -- elseif ret==0 then -- say_reward("[NO] guild not created (guild name already present or already member of a guild)") -- elseif ret==1 then -- say_reward("[YES] guild created") -- elseif ret==2 then -- say_reward("[NO] player already part of a guild") -- elseif ret==3 then -- say_reward("[NO] player already guild master") -- end
- pc.set_race0(race=[0. Warrior, 1. Ninja, 2. Sura, 3. Shaman, 4. Lycan]) // [return nothing]
- pc.give_random_book0([race]) // it gives a random skill book; if race is specified, the book will be for such race // [return nothing]
- d.new_jump_all_guild(map_index, x, y) // [return nothing]
d.new_jump_guild // alternative - // for nemere dungeon and other implementations (I'll show you how it works at requested; it accepts more flags simultaneously)
// It can even let you create mobs attackable only by females/males/mix races and/or by hidden/poisoned/buffed players and so on for all the affects and races
// It works fine with both d.spawn_mob and spawn_mob0
d.set_damage_from_race(flag, vid) // [return nothing]
d.set_damage_from_affect(flag, vid) // [return nothing]
d.reset_damage_from_race(vid) // [return nothing]
d.reset_damage_from_affect(vid) // [return nothing]
Code:-- local vid = spawn_mob0(101, pc.get_map_index(), pc.get_local_x(), pc.get_local_y()) -- syschat(vid) -- d.set_damage_from_race(WARRIOR_M, vid) -- d.set_damage_from_race(SHAMAN_W, vid) -- d.set_damage_from_affect(AFF_INVISIBILITY, vid) -- d.set_damage_from_affect(AFF_SLOW, vid) -- d.set_damage_from_affect(AFF_HOSIN, vid) -- d.set_damage_from_affect(AFF_GICHEON, vid) -- d.reset_damage_from_race(vid) -- d.reset_damage_from_affect(vid)
- d.get_damage_from_race(vid) // [return lua number]
d.get_damage_from_affect(vid) // [return lua table]
d.unset_damage_from_race(flag, vid) // [return nothing]
d.unset_damage_from_affect(flag, vid) // [return nothing] - guild.get_id0() // get guild id [return lua number]
- guild.get_sp0() // get guild sp [return lua number]
- guild.get_maxsp0() // get guild maxsp [return lua number]
- guild.get_money0() // get money guild [return lua number]
- guild.get_max_member0() // get max joinable members [return lua number]
- guild.get_total_member_level0() // get the sum of all the members' level [return lua number]
- guild.has_land0() // get whether guild has a land or not [return lua boolean]
- guild.get_win_count0() // get guild wins [return lua number]
- guild.get_draw_count0() // get guild draws [return lua number]
- guild.get_loss_count0() // get guild losses [return lua number]
- guild.add_comment0(msg) // add a comment into guild notice board [return nothing]
- guild.set_ladder_point0(points) // set guild ladder points [return nothing]
- guild.set_war_data0(win, draw, loss) // set guild win/draw/loss [return nothing] (commented/local update)
- guild.get_skill_level0(vnum) // get guild skill level [return lua number]
- guild.set_skill_level0(vnum, level) // set guild skill level [return nothing]
- guild.get_skill_point0() // get guild skill points [return lua number]
- guild.set_skill_point0(points) // set guild skill points [return nothing]
- guild.get_exp_level0(level) // get how much exp is necessary for such <level> [return lua number]
- guild.offer_exp0(exp) // give player's <exp> to guild [return lua boolean=successfulness]
- guild.give_exp0(exp) // give <exp> to guild [return nothing]
- //I already made a thread about 'em with few samples and stuff
get_table_postfix() // get table postfix [return lua string]
mysql_direct_query(string query) // get the number of the affected rows and a table containing 'em [return lua number, lua table]
mysql_escape_string(string str) // escape <str> [return lua string] - horse.set_stat0(int health, int stamina) // same as /do_horse_set_stat (this function is commented) [return nothing]
- item.get_wearflag0() // [return lua number]
- item.has_wearflag0(int flag) // [return lua boolean]
- item.get_antiflag0() // [return lua number]
- item.has_antiflag0(int flag) // [return lua boolean]
- item.get_immuneflag0() // [return lua number]
- item.has_immuneflag0(int flag) // [return lua boolean]
- item.add_attr0(...)
Code:-- item.add_attr0(0|1|2[, cnt]) -- (0: baseeraro, 1: base, 2: raro) -- item.add_attr0(0) -- add one 1-5 and one 6-7 bonus -- item.add_attr0(0, 0) -- add all 1-7 bonuses -- item.add_attr0(1|2) -- add one 1-5|6-7 bonus -- item.add_attr0(1|2, 0) -- add all 1-5|6-7 bonuses -- item.add_attr0(1|2, 4) -- add four 1-5|6-7 bonuses
- -- item.change_attr0(0|1|2) -- (0: baseerari, 1: base, 2: rari)
item_change_attr0(...) - -- item.clear_attr0(0|1|2) -- (0: baseerari, 1: base, 2: rari)
item.clear_attr0(...) - -- item.count_attr0(0|1|2) -- (0: [cnt(base), cnt(rari)], 1: cnt(base), 2: cnt(rari))
item.count_attr0(...) - item.get_attr0() // get a table containing all the item attrs {1,11,2,22,...,7,77} [return lua table]
- item.set_attr0({1,11,2,22,...,7,77}) // use a table to set the item attrs [return nothing]
- item.set_count(int count) // [return nothing]
- npc.get_level0() // [return lua number]
- npc.get_name0() // [return lua string]
- npc.get_pid0() // [return lua number]
- npc.get_vnum0() // [return lua number]
- party.get_min_level() // [return lua number]
- party.leave_party() // [return lua boolean=successfulness]
- party.delete_party() // [return lua boolean=successfulness]
- big_notice(string txt) // [return nothing]
- big_notice_all(string txt) // [return nothing]
- big_notice_in_map(string txt) // [return nothing]
- d.is_available0() // it checks whether the d.* functions are available or not [return lua boolean]
- item.is_available0() // it checks whether the item.* functions are available or not [return lua boolean]
- npc.is_available0() // it checks whether the npc.* functions are available or not [return lua boolean]
- pc.is_available0() // it checks whether the pc.* functions are available or not [return lua boolean]
- oxevent.get_oxquiz_fn() // it returns the name of the oxquiz file to load [return lua string]
- oxevent.set_oxquiz_fn(string pathfile) // it sets the name of the oxquiz file to load starting from locale path [return nothing]
- oxevent.set_oxquiz_fn0(string pathfile) // it sets the name of the oxquiz file to load [return nothing]
Code:syschat(oxevent.get_oxquiz_fn()) oxevent.set_oxquiz_fn("oxquizA.lua") syschat(oxevent.get_oxquiz_fn()) oxevent.set_oxquiz_fn("oxquizB.lua") syschat(oxevent.get_oxquiz_fn()) oxevent.set_oxquiz_fn0(get_locale_base_path().."/oxquizC.lua") syschat(oxevent.get_oxquiz_fn())
- quest.get_current_quest_name0() // [return lua string]
- List of new commands (used by NEWSTUFF and/or few others)
- /add_rare_attr (like /add_attr)
- /change_rare_attr (like /change_attr)
- /click_safebox (open the safebox such as the mall)
- /force_logout (disconnect themselves)
- /big_notice (now global like /notice)
- /big_notice_map (big notice that works like /notice_map)
- /notice_test (notice printed only to the player himself)
- /big_notice_test (big notice printed only to the player himself)
- /set <name> <field> <value> (added 'race', 'sex' and 'job' fields + help list)
- /poison <name> (the specified player will get poison)
- /bleeding <name> (the specified player will get bleeding)
- New server event flags:
- gold_drop_limit_time <time_in_secs> // the players will be able to drop a piece of yang/gold every XXX seconds as specified (default=0=no limits) (NB: by ymir)
- item_drop_limit_time <time_in_secs> // the players will be able to drop a piece of item every XXX seconds as specified (default=0=no limits)
- box_use_limit_time <time_in_secs> // the players will be able to open boxes every XXX seconds as specified (default=0=no limits)
- buysell_limit_time <time_in_secs> // the players will be able to buy/sell stuff every XXX seconds as specified (default=0=no limits)
- no_drop_metin_stone <0-1> // if enabled, metin stones won't drop the default spiritual stones
- no_mount_at_guild_war <0-1> // if enabled, horses/mounts can't be used inside guild war maps
- List of new adminpage commands:
- BIG_NOTICE <text> //like NOTICE <text>
- List of new skill_proto flags:
- PARTY // the skill will be applied to all the near party's members, or just the player itself if alone
- ATTACK_BLEEDING // the skill will inflict the bleeding malus
- List of new command-line parameters:
- -C <0/1> // it enables/disables checkpointing check (enabled by default)
- List of new miscellaneous things:
- Bandage (27124) item implemented
- Poison Bottle (27996) now poisons on use
- SpecialItemGroup "bleeding" type implemented
- /warp /transfer /item /mob will print arg1 in case of unsuccessfulness
- Added a system where you can't inflict damage to stones from a different empire than yours
Client repo details:
- 100% Translated (except comments)
- Python switchable from 2.2 to 2.7 and viceversa w/o any problems (currently used 2.7)
- Granny version switchable amongst 2.4, 2.7 and 2.9 via define preprocessor
- List of fixes: (the full explanation is written in the README.txt)
- /view_equip crash
- Skybox bottom pic
- Python >2.2 long overflow
- Added supplementary check for npc_pet (about new pets)
- "SEQUENCE mismatch 0xaf != 0x64 header 254" fix
- all the new mounts can now attack/skill if they should (like official)
- hyper link graphic issue with 6-7 bonuses
- crash issues when pasting non-text data (if you specifically enable ctrl+v in client)
- non-printing/control characters not more printed in the (chat) input (the ones you get when you press Ctrl+<key> in game)
- on arabic locales, the [HyperText code] (alias Prism code) not more editable pressing <Backspace>
- List of defines:
- LOCALE_SERVICE_EUROPE //locale you want (default source feature)
- ENABLE_COSTUME_SYSTEM //costume system (default source feature)
- ENABLE_ENERGY_SYSTEM //energy system (default source feature)
- ENABLE_DRAGON_SOUL_SYSTEM //dss system (default source feature)
- ENABLE_NEW_EQUIPMENT_SYSTEM //belt system (default source feature)
- ENABLE_PACK_GET_CHECK //enable py|pyc|txt check on pack.Get
- ENABLE_CRC32_CHECK //enable/disable crc32 check for type2
- ENABLE_SKIN_EXTENDED //extended source/targetskin[2-9] inside .msm
- ENABLE_LOAD_ALTER_ITEMICON //load a default item icon if the one inside the item_list.txt is missing
- ENABLE_NO_MOUNT_CHECK //enable attack and skill from all horses/mounts
- ENABLE_MILES_CHECK //check miles files to prevent mss32.dll exploit before load them
- ENABLE_PYLIB_CHECK //check python lib files to prevent exploit before load them
- ENABLE_PLAYER_PER_ACCOUNT5 //enable 5 characters per account
- ENABLE_NEW_MOB_PROTO_STRUCT_20141125 //it enables the new MOB_RESIST_BLEEDING field implemented inside the client-side mob_proto
- ENABLE_WOLFMAN_CHARACTER // it enables the wolfman character
- ENABLE_LEVEL_IN_TRADE // it enables the functions to show the target level in the trade dialog
- ENABLE_ATLASINFO_FROM_ROOT // if enabled, the atlasinfo.txt will be read from root instead of the relative locale
- List of new python functions:
- exchange.GetLevelFromSelf()
- exchange.GetLevelFromTarget()
- List of new miscellaneous things:
- new event motion types 11-12 workable
- Compatibility with Cython (rootlib & uiscriptlib)
Promotion
All (and only) the clients who purchased/will purchase all these edits will receive the following free gifts: (at request)
- 100% workable wolfman/5th race (as ymir's like) for /Server and /Client (already implemented via ENABLE_WOLFMAN_CHARACTER define)
- Tools/DumpProto with the following features:
- Clean
- Translated
- New types included (ds, belt, bleeding, wolfman, claws, etc)
- Unpack feature (it can re-extract the packed protos into .txt again!)
- General splitting issues fix (for mob_proto's raceflag)
- List of defines:
- ENABLE_NEW_MOB_PROTO_STRUCT_20141125 //it enables the new MOB_RESIST_BLEEDING field implemented inside the client-side mob_proto (dump/repack 100% ok)
- Tools/Metin2MSAMaker with the following features:
- Clean
- Usable for granny 2.4/2.7/2.9 models
- This tool is used to create the .msa of the .gr2 models, and it also generates the Accumulation parameter for all of them.
- This can be used to fix the relative error for the server-side data folder.
- It still requires file/system boost libraries compilation. (there's a how-to file inside for it)
- Tools/Metin2PackMaker
- Clean
- Translated
- A clean version of the databases account, common, log, player as .sql
- A clean version of the server scripts to start, clean, stop, generate the server structure as .sh/.py
- Tools/DBManager with the following features:
- Clean
- New types included (ds, belt, bleeding, wolfman, claws, etc)
- Fixed \n\nheader issue
- Fixed truncated fields issues
- Fixed vnum_range (automatically detected)
- Created a pan.sh to easily do a .txt-to-db and db-to-.txt proto conversion 100% lossless
- A clear and complete root with the following things:
- Based on the last official roots before being cythonized
- Compatibility with Cython (rootlib & uiscriptlib)
- Lycan implemented via app.ENABLE_WOLFMAN_CHARACTER
- 5th character per account implemented via app.ENABLE_PLAYER_PER_ACCOUNT5
- Level in trade implemented via app.ENABLE_LEVEL_IN_TRADE
- Additional constants inside constInfo.py:
- ENABLE_RANDOM_CHANNEL_SEL // if enabled, it won't set a random channel when you open the client
- ENABLE_CLEAN_DATA_IF_FAIL_LOGIN // if enabled, it won't remove id&pass if the login attempt fails
- ENABLE_PASTE_FEATURE // if enabled, ctrl+v will work
- ENABLE_FULLSTONE_DETAILS // if enabled, it displays all the bonuses added by a stone instead of the first one
- ENABLE_REFINE_PCT // enable successfulness % in the refine dialog
- General fixes:
- Leadership skill (guide)'s tooltip fix
- old_open unreadable files issue
- undeclared timeOutMsg variable fix
I also point out to all (and only) my clients the following things: (at request)
- all the relative updates are free
- you'll get free help service, at least, to compile the code and set the right environment for such files and so on
If you're interest on such work, send me a PM.
Other Systems Selling
I made infinite stuff but I can't show you all of them both for privacy and for the amount of them.
Fews I made 2-3 years ago are the following: (something could look tawdry)
Other stuff can be seen looking at the releases I made in few other forums.
Maps Selling
All the maps I made are reserved. I cannot show 'em to you.
The only trivial things I could show you are:
Help Service
Do you need help to compile and for other stuff? Ask, and both I and you will see.
Protection Service
I'm not selling 'em, but soon you'll be able to purchase new types and new magic behaviors for your packs to me.
Same story for other hackable things. (for both cases, you'll receive the source code of the work)