Jump to content

Zonni

Premium
  • Posts

    165
  • Joined

  • Last visited

  • Days Won

    4
  • Feedback

    0%

Everything posted by Zonni

  1. Having the information public is the fastest way to get people to take action against it and the fix is in the thread. If you're able to create libs then it should be no problem for you Also having the hack we could test if the c++ fix works [Hidden Content] password: metin2dev only for testing purposes only and i don't know this works because i didn't use it
  2. It's easy to bind application to hardware. #define _WIN32_WINNT 0x0400 #include <windows.h> #include <stdio.h> int main() { HW_PROFILE_INFO hwProfileInfo; if(GetCurrentHwProfile(&hwProfileInfo) != NULL){ printf("Hardware GUID: %sn", hwProfileInfo.szHwProfileGuid); printf("Hardware Profile: %sn", hwProfileInfo.szHwProfileName); }else{ return 0; } getchar(); } source: [Hidden Content] anyway, i have program which check your hardware id, connect to server on my ip, check version & licence and send information to client (everything via encrypted packet) This is good way to check license i think.
  3. Hello, i started coding my new dungegon. I have one big problem... 1. enter to dungeon with d.new_jump_party() 2. After i login to a dungegon Metin Stone spawning with d.spawn_mob() (properly) ("when enter") 3. When I kill Metin Stone i receive info "you're killed metin stone" (just for debug) and this shows 4. In the same "when kill" i have another d.spawn_mob but in this time i want to spawn for ex. Wild Dog. Wild Dog can't be spawned because quest doesn't recognize my dungeon (i modified in-game function to show me this info in syserr). i need to use d.spawn_mob() to show me actual number of monsters in d.count_monster() What can be wrong? Map base positions? (anyway, someone have good tutorial for finding non-used coordinates?)
  4. As I remember you must change something in client but i didn't remember what or where.
  5. cd /usr/ports/devel/googletest && make install -DBATCH clean
  6. I need to show times at your quest. quest akapo_map begin state start begin when enter begin if pc.get_map_index() == 103 then if pc.getqf("enter_time") <= get_time() then say_title("Information:") say("One hour passed. [ENTER][ENTER] You will be teleported to village soon.") wait() pc.setqf("enter_time", 0) warp_to_village() end end clear_letter() end when 20090.chat."Akapo Map (Lvl. 95)" begin say_title(mob_name(20090)..":") ----"01234567890123456789012345678901234567890" if pc.get_level() >= 95 then say("Do you really want to warp to[ENTER]Akapo Map?") say("") local s = select("Yes", "No") if s == 2 then return elseif s == 1 then say_title(mob_name(20090)..":") say("You will warp for a moment.[ENTER][ENTER]Please be carefull.") wait() set_state(warp_to_map) end else say("You must have at least 95 level.") say("Akapo Map isn't made for noobs.") end end end state warp_to_map begin when enter begin pc.setqf("enter_time", get_time() + 60 * 60) pc.warp(45600, 45600) loop_timer('check_time', 1 * 30) -- one time per 30 seconds end when check_time.timer begin if pc.getqf("enter_time") <= get_time() then set_state(start) end end when login begin if pc.getqf("enter_time") <= get_time() then set_state(start) end if pc.get_map_index() == 103 then send_letter("Akapo Map") local rest_time = pc.getqf("enter_time") - get_time() q.set_clock("Rest time", rest_time) end loop_timer('check_time', 1 * 30) end when button or info begin say_title("Akapo Map") say("You're allowed to enter to Akapo Map.") if pc.get_map_index() == 103 then local remain_minutes = math.ceil((pc.getqf("enter_time") - get_time()) / 60) local remain_seconds = pc.getqf("enter_time") - (remain_minutes) * 60 say("") say_reward("Remaining time: "..remain_minutes.."m "..remain_seconds.."s.") else say("Go to "..mob_name(20090) to enter there.") end end when 20090.chat."Return to Akapo" begin say_title(mob_name(20090)..":") say("I'll teleport you soon.[ENTER][ENTER]Please be carefull.") pc.warp(45600, 45600) end end end
  7. Change say2 to say I'm using say2 function to show text, sorry
  8. Good But you can still use my version quest akapo_map begin state start begin when enter begin if pc.get_map_index() == 103 then if pc.getqf("enter_time") <= get_time() then say_title("Information:") say("One hour passed. [ENTER][ENTER] You will be teleported to village soon.") wait() pc.setqf("enter_time", 0) warp_to_village() end end end when 20090.chat."Akapo Map (Lvl. 95)" begin say_title(mob_name(20090)..":") ----"01234567890123456789012345678901234567890" if pc.get_level() >= 95 then say("Do you really want to warp to[ENTER]Akapo Map?") say("") local s = select("Yes", "No") if s == 2 then return elseif s == 1 then say_title(mob_name(20090)..":") say("You will warp for a moment.[ENTER][ENTER]Please be carefull.") wait() set_state(warp_to_map) end else say("You must have at least 95 level.") say("Akapo Map isn't made for noobs.") end end end state warp_to_map begin when enter begin pc.setqf("enter_time", get_time() + 60 * 60) pc.warp(45600, 45600) loop_timer('check_time', 1 * 30) -- one time per 30 seconds end when check_time.timer begin if pc.getqf("enter_time") <= get_time() then set_state(start) end end when login begin if pc.getqf("enter_time") <= get_time() then set_state(start) end loop_timer('check_time', 1 * 30) end when 20090.chat."Return to Akapo" begin say_title(mob_name(20090)..":") say2("I'll teleport you soon.[ENTER][ENTER]Please be carefull.") pc.warp(45600, 45600) end end end
  9. Follow the tutorial. I think you mess something in char_item ;3
  10. Don't tell O.O ! Ymir uploaded this source to ftp/http (i don't know exactly where). Anyway this been public a while. Someone downloaded it and released.
  11. Maybe you're right, but while I coding new interface i truly see difference between DXT3 and 8.8.8.8, maybe on large files it isn't required. I never add a new ground textures for Metin2, for me is enough to use oblivion textures and original metin2 textures.
  12. Hello everyone! Many, many users didn't know how to save DDS file with Photoshop. I want to change that. Step one Download NVIDIA DDS plugin for Photoshop from here: [Hidden Content] (You must choose between x86 and x64 version). Step two After downloading ends you must install this application. Step three Run Photoshop and open your file. (i'll open ymir work/pc2/assassin/assassin_4-1.dds) Step four Save your file! You can easily find information about saving format - on this forum every men talking about DXT3... Yep, that's right and textures will show without blank spaces... But this saving only in 8 bpp (byte per pixel)... And that sucks. I strongly recommend to use 8.8.8.8 ARGB 32 bpp. Why? Because if you create HD model with HD texture... You must save texture in highest resolution. If you creating texture for armor you also need to save MIP-Maps (i can be wrong with that), while coding interface based on DDS files this isn't required. Of course you can use all ARGB file outputs, it depends on what you actually need. Anyway, this should look like that. BONUS! Reflection effect! In this forum i never noticed how to make reflection effect on texture. I figure out how to do that and I'll share this information. I'll show you how to repair reflection on assassin_4-1.dds (this texture is copied from female assassin and someone didn't care about reflection... since Metin2 was released ). 1. Switch to "Channels" on right side of Photoshop. 2. Compare "Alpha 1" and "RGB". It didn't match right? 3. Make Alpha 1 channel likely RGB channel (but leave only this thing you want to reflect! (honestly, i just copy Green channel to anoter file, remove things and copy that into right file channel)). Before (anyone can see it in client ^^): After: Thanks for reading my not very good English ^^ Peace!
  13. I had the same situation whn i have my dev freebsd on my computer opened (and internal ip it's set to work as public ip). Attack from china
  14. Aww... I really have to compile the source? :/ It is not difficult, but there are too many problems for me... 1- I dont know C++ (i can only edit the things from the tutorials that i find in the internet) 2- I compiled my own game but when i use it i cant log in my account i dont know why... :// Here's the syserr from the channel when i log in with my game: SYSERR: Nov 2 23:30:42 :: GetServerLocation: location error name mapindex 0 0 x 0 empire 3 SYSERR: Nov 2 23:30:47 :: GetServerLocation: location error name mapindex 0 0 x 0 empire 3 SYSERR: Nov 2 23:30:47 :: GetValidLocation: cannot find sectree_map by map index -268431706 SYSERR: Nov 2 23:30:47 :: PlayerLoad: InputDB::PlayerLoad : cannot find valid location -1677262848 x 30144 (name: ) I compiled client from novaline & server from mainline and everything works (without many modifications, only error fixes). If you use WoM files you should use release branch.
  15. You can only increase level with that, he need to decrease level.
  16. Yes you need that. Perfect way to add new functions is simply recompile source. Worst way (for me) is use lib for do that (iMer released source for 34k, i have version for 2089 if you want)
  17. You can use quest flag by using pc.getqf("flag") for get value and pc.setqf("flag", value) to set value. It's basics. I know you would to use new table in mysql but in most cases it doesn't nessesary. Try to recode that. Honestly i do smillar system before. check my old quest for that. It's nasty coded but work ^^
  18. qf - Quest Flag io - input/output (files saved in your filesystem) command("a "..pc.get_name.." 1") seriously guy? This command is only for gm use. i don't judge you but use some of your brain. better is to add new function - for example pc.set_level(level)...
  19. You haven't clean sf because in original (xD) mainline from kraizy.tgz this error doesn't exist.
  20. Follow the tutorial. I think you don't set properly things in char_item.cpp
  21. After All i must correct this modification because exchange didn't work well (3&4 page didn't work, like doesn't exist) You cant use it like this: for (i = 0; i < INVENTORY_MAX_NUM / 4; ++i) { if (!(item = victim->GetInventoryItem(i))) continue; s_grid1.Put(i, 1, item->GetSize()); } for (i = INVENTORY_MAX_NUM / 4; i < INVENTORY_MAX_NUM; ++i) { if (!(item = victim->GetInventoryItem(i))) continue; s_grid2.Put(i - INVENTORY_MAX_NUM / 4, 1, item->GetSize()); } for (i = INVENTORY_MAX_NUM / 4; i < INVENTORY_MAX_NUM; ++i) { if (!(item = victim->GetInventoryItem(i))) continue; s_grid3.Put(i - INVENTORY_MAX_NUM / 4, 1, item->GetSize()); } for (i = INVENTORY_MAX_NUM / 4; i < INVENTORY_MAX_NUM; ++i) { if (!(item = victim->GetInventoryItem(i))) continue; s_grid4.Put(i - INVENTORY_MAX_NUM / 4, 1, item->GetSize()); } And little explanaton. If someone read this topic before i said you must set right grid size (5x9). anyway look at this - if we have 4 inventory cards we set (INVENTORY_MAX_NUM(180) /5 /4 = 9) so we have 45 slots. static CGrid s_grid1(5, INVENTORY_MAX_NUM/5 / 4); // inven page 1 But if you want to trade works well with entire inventory you must change something more. look at code i posted up. for example: cgrid4 uses slots from 45-180 but it's only 45 slot grid so after value pass 45 everything is set to null, and item cant locate at this grid. we must set it to right inventory value and set right slots to this card. good value is between 135 - 180. How we can do that - we must modify function. for (i = (INVENTORY_MAX_NUM / 4) *3; i < (INVENTORY_MAX_NUM /4 ) * 4; ++i) { if (!(item = victim->GetInventoryItem(i))) continue; s_grid4.Put(i - (INVENTORY_MAX_NUM / 4) * 3, 1, item->GetSize()); } Now function checks slots from 135 ((INVENTORY_MAX_NUM / 4) * 3 = 180 / 4 * 3 = 135) to 180 (INVENTORY_MAX_NUM) and set item to right pos because we set correctly i (for example if we have full first, second and third inventory and someone trade with us red potion, item bind to first slot in fourth inventory (135) (why? i - INVENTORY_MAX_NUM / 4 = (INVENTORY_MAX_NUM / 4) *3 - (INVENTORY_MAX_NUM/4) *3 = 0 and this is first place in fourth inventory) finally, that's valid code if you use 5 inventory window. int i; for (i = 0; i < INVENTORY_MAX_NUM / 5; ++i) { if (!(item = victim->GetInventoryItem(i))) continue; s_grid1.Put(i, 1, item->GetSize()); } for (i = INVENTORY_MAX_NUM / 5; i < (INVENTORY_MAX_NUM / 5) * 2; ++i) { if (!(item = victim->GetInventoryItem(i))) continue; s_grid2.Put(i - INVENTORY_MAX_NUM / 5, 1, item->GetSize()); } for (i = (INVENTORY_MAX_NUM / 5) * 2; i < (INVENTORY_MAX_NUM / 5) * 3; ++i) { if (!(item = victim->GetInventoryItem(i))) continue; s_grid3.Put(i - (INVENTORY_MAX_NUM / 5) * 2, 1, item->GetSize()); } for (i = (INVENTORY_MAX_NUM / 5) * 3; i < (INVENTORY_MAX_NUM / 5) * 4; ++i) { if (!(item = victim->GetInventoryItem(i))) continue; s_grid4.Put(i -(INVENTORY_MAX_NUM / 5) * 3, 1, item->GetSize()); } for (i = (INVENTORY_MAX_NUM / 5) * 4; i < (INVENTORY_MAX_NUM / 5) * 5; ++i) { if (!(item = victim->GetInventoryItem(i))) continue; s_grid5.Put(i - (INVENTORY_MAX_NUM / 5) * 4, 1, item->GetSize()); } i'm really sorry if you don't understand me but i tried to explain it as easy as i can if you don't understand my explanation look into code and analize it. moreover aveline forgot about something. find int iPos = s_grid1.FindBlank(1, item->GetSize()); if (iPos >= 0) { s_grid1.Put(iPos, 1, item->GetSize()); } else { iPos = s_grid2.FindBlank(1, item->GetSize()); if (iPos >= 0) { s_grid2.Put(iPos, 1, item->GetSize()); } else { return false; } and replace to: int iPos = s_grid1.FindBlank(1, item->GetSize()); if (iPos >= 0) { s_grid1.Put(iPos, 1, item->GetSize()); } else { iPos = s_grid2.FindBlank(1, item->GetSize()); if (iPos >= 0) { s_grid2.Put(iPos, 1, item->GetSize()); } else { iPos = s_grid3.FindBlank(1, item->GetSize()); if (iPos >= 0) { s_grid3.Put(iPos, 1, item->GetSize()); } else { iPos = s_grid4.FindBlank(1, item->GetSize()); if (iPos >= 0) { s_grid4.Put(iPos, 1, item->GetSize()); } else { iPos = s_grid5.FindBlank(1, item->GetSize()); if (iPos >= 0) { s_grid5.Put(iPos, 1, item->GetSize()); } else { return false; } } } } } adapt it for yourself if you're using 4 inventory window.
  22. speedserver.cpp isn't compiled. check makefile ;3
  23. honestly... drop every file from extern folder to /usr/local/include/ i know that isn't very clean way but works.
  24. Metin2 Texture Changer.exe [Hidden Content] scan by yourself, kaspersky didn't notice any virus. Program by Marv i don't know how it works because i never used this.
×
×
  • 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.