Jump to content

Owsap

Honorable Member
  • Posts

    264
  • Joined

  • Last visited

  • Days Won

    29
  • Feedback

    91%

Everything posted by Owsap

  1. Automatic Hunting System Preview Available for Sale For more information, visit my website, https://owsap.dev/shop/automatic-hunting-system/
  2. Thanks, I have updated the files.
  3. I don't believe this is related to the fix. No item positions, sockets, title names or bonus names where changed in any of the code, only the size of the thinboard.
  4. Here is an example of the AttachMetinDialog, [Hidden Content]
  5. Download Other Mirros Download Here (GitHub) Download Here (Mega) Hey M2Dev, I want to share something small but visually appreciated by players that are paying attention to details. What I'm sharing with you today will solve the issue of item tooltips with large strings, these strings overflow the width of the tooltip causing the text to hang out of the edge, especially when metin stones are attached to your weapon or armor. BEFORE PREVIEW AFTER PREVIEW .
  6. Try using affect.add_collect_point(affect_type, affect_value, affect_duration). quest collect_att_grade_bonus begin state start begin when 20024.chat."Collect Attack Grade Bonus!" with get_global_time() > pc.getqf("duration") begin -- Set initial values. local affect_type = POINT_ATT_GRADE_BONUS -- 95 local affect_value = 5 local affect_duration = 60 * 60 * 24 * 365 * 60 -- 60 years -- Prevent adding the affect collect point again. #2 if pc.getqf("duration") > get_global_time() then say("You have already received this reward.") return end -- Add the affect collect point. affect.add_collect_point(affect_type, affect_value, affect_duration) -- Set a duration to prevent doubling this point. #1 pc.setqf("duration", get_global_time() + affect_duration) say("Your attack grade bonus has been increased.") say_reward(string.format("Attack Grade Bonus: +%d", affect_value)) end end end Both affect.add_collect and affect.add_collect_point are very similar, the only difference is that one handles apply types and the other point types. // affect.add_collect int affect_add_collect(lua_State* L) { [. . .] // @arg1 Apply Type // NOTE: Apply types can be found @ enum EApplyTypes inside the common/length.h file. // @arg2 Value // @arg3 Duration // arg1 arg2 arg3 // ↓ ↓ ↓ ch->AddAffect(AFFECT_COLLECT, aApplyInfo[applyOn].bPointType, value, 0, duration, 0, false); return 0; } // affect.add_collect_point int affect_add_collect_point(lua_State* L) { [. . .] // @arg1 Point Type // NOTE: Point types can be found @ enum EPointTypes inside the game/char.h file. // @arg2 Value // @arg3 Duration // arg1 arg2 arg3 // ↓ ↓ ↓ ch->AddAffect(AFFECT_COLLECT, point_type, value, 0, duration, 0, false); return 0; }
  7. Option 1: Remove CHAT_TYPE_DICE_INFO from uiChat.py Option 2: Add CHAT_TYPE_DICE_INFO support:
  8. I'm sorry but this just frustrates me and makes me think that you are selfish and ungrateful, no offense but this question on the other hand offends me because this system was released free for all M2Dev members and despite your ignorance seeing the download button and link to the repository on the top of the topic just makes me think you want to make a problem out of 5 euro coffee money. It's not like I’m asking or demanding anyone to spend 5€ on a free system, it doesn’t make sense so just to respond your question and curiosity of why I added a 5€ button on my website is just to give the opportunity for people that want to help and donate this free release and personally, I don’t see any problem with this but who cares, most people just want free, free, free and don’t value the work of others and appreciate the shares. Addionally, the other reason I decided to add a value for downloading the system on my website was because I was constantly getting emails of orders regarding all free systems on my website. So, I don't get why you waste your time asking for something that looks obvious? “This system is free and on his website it’s 5 euros? Yeah, maybe it’s just for donations if anyone wants to say “thanks”. I hope you understand now... Edit: I have added Yes/No donate button just for your satisfaction.
  9. for i in xrange(player.INVENTORY_PAGE_SIZE * 4): if getItemVNum(i) == itemVNum: self.UseItemSlot(i) break
  10. Although I'm not entirely sure why you would want something like this, I will leave you an example for items. Python Method Only Python & C++ Method I did not test before posting, excuse me if something goes wrong.
  11. You're right, I just noticed that I mistakenly left "public" above the function to search. Sorry for the misunderstanding!
  12. Thanks for testing the solution I provided but what you citated about my tutorial comes down to personal preference, with all respect. I do understand what you're mentioning but the only thing I did was create a public function to return the value of a private function within the class. I did this in order to support the private function already used in various files of the source. Basicly what I did was nothing less than, private: [ . . .] bool __DirectEnterMode_IsSet(); // -> { return m_kDirectEnterMode.m_isSet; } public: bool DirectEnterMode_IsSet() { return m_kDirectEnterMode.m_isSet; /* __DirectEnterMode_IsSet(); */ } // Usually, 2 (two) underscores before a function name indicates that it's a private function, thus the reason I created a new one with the same name without the underscores. But sure, you can also just change the __DirectEnterMode_IsSet to public if you like. Again, the seccond thing that you citated comes down to personal preference and there isn't any correction to do in the tutorial. In case you didn't notice, the line I added the IsLoadingPhase function is inside a public method as you can see in the screenshot below. Sorry @ReFresh // There was a little misunderstanding from my part, I noticed that in the first tutorial I did, I said to search, public: bool __DirectEnterMode_IsSet(); // But the correct thing to search is just, bool __DirectEnterMode_IsSet();
  13. Just to answer the question of the topic, this is one way you can disable any key input while in the loading phase. /* * NOTE: This will only prevent inputting any key while in the loading phase. * Be aware that you can still hit any key when selecting the character until it changes into the loading phase. */ /// 1. @ UserInterface/PythonNetworkStream.h // Search public: CPythonNetworkStream(); // Add above bool IsLoadingPhase() { return (m_strPhase == "Loading"); } /// 2. @ UserInterface/PythonNetworkStream.h // Search bool __DirectEnterMode_IsSet(); // Add below public: bool DirectEnterMode_IsSet() { return __DirectEnterMode_IsSet(); } /// 3. @ UserInterface/PythonApplicationEvent.cpp // Search void CPythonApplication::OnKeyDown(int iIndex) // Add below (You might need to include "InstanceBase.h" CPythonNetworkStream& rkInstance = CPythonNetworkStream::Instance(); if (rkInstance.DirectEnterMode_IsSet() || rkInstance.IsLoadingPhase()) return;
  14. If the item you are checking is quest type, then you can only check whether you have picked the item from the ground using the “pick” trigger which is called like this: quest detect_item begin state start begin when 50709.pick begin chat("You have x item in your inventory.") end end end Quests are limited, you can't check every action you so this isn't possible unless you add a new trigger to your quest manager source file. The only solution if you want to do this via quest without modifying the source is to use a timer to keep checking for the item but I strongly don’t recommend this. Regardless, this is how you would do it: quest detect_item begin state start begin function get(vnum, count) if pc.count_item(vnum) >= count then return true end return false end when login begin timer("item_detector_1", 3) end when item_detector_1.timer begin if detect_item.check(50709, 1) then chat("You have x item in your inventory.") end timer("item_detector_2", 3) end when item_detector_2.timer begin if detect_item.check(50709, 1) then chat("You have x item in your inventory.") end timer("item_detector_1", 3) end end end
  15. Fixed "GetGlobalPosition" issue. The main topic and links have been updated.
  16. Don't forget to mention that this will not work on static packets.
  17. I would suggest using the common approach, the use of structs, as it has always been used and the reason behind the file @ "Srcs/Server/common/tables.h" for this purpose. Of course, there are other ways you can do this without using vectors but if you're trying to send multiple data you could also consider and should use dynamic packets for this approach. In the other hand, we can't guarantee that the size of the vector will be the same as the host and client and we mainly don't use it by its dynamic structure if the packet is static. Regardless, I'm not saying it's not possible, in fact, I haven't tried to test this but I'm sure this wouldn’t work with static packets.
  18. Nice release, as a contribution, I added support for scrollbar in case anyone prefers it. (Click to view the commit)
  19. Hello M2Dev, I’m herby to offer my knowledge of the overall game and provide a wide array of services for the same. I have over 5 years of experience in this area as well as outside of it. In 2016 I started to make a variety of systems and tools for the game which I started with Lua and then moved up to Python and C++. I have been around the M2Dev community for quite some time now and being a long-time enthusiast, I decided to open this thread to share my knowledge and work with the entire community and since this is a service topic it includes paid work such as the development of systems I make and various other work such as updating the OSF Project. All services provided are done in spare time as a hobby so all the support / donations are appreciated to keep “Owsap Productions” continuing this thread open and active with the community. Services (Systems, Tweaks, Tools, Resources) • Latest Systems Exclusive Achievement System (Click here) Official Snowflake Stick Event (Click here) Official Set Item Bonus (Click here) Exclusive Enhanced Captcha System (Click here) Official World Boss (Click here) Official Mini-Game Rumi (Okey Card) (Click here) Official Fish Game (Click here) Exclusive Client Loading Performance (Click here) Official Gem (Gaya) Market (Click here) Official Automatic Hunting System (Click here) Official Elemental System (Element & Pendant) (Click here) Attendance System (Item Rewards) (Click here) Legendary Enchantment Item (Set Custom Attributes) (Click here) Item Quality System (Click here) Official Sixth and Seventh Bonus (6th & 7th Attribute System) (Click here) Dungeon Information System V2 (Click here) Daily Gift System (Click here) • More Systems Multi Language System (Click here) Player PIN Code System (Click here) Extended Costume Recharge System (Click here) (No longer available) Hide Costume System (Click here) Dungeon Information System V1 (Click here) • Legacy Systems Dog Mode System (Click here) (No longer available) Captcha System (Click here) • Tweaks & Others Messenger Offline Time (Click here) Changelog / Patch Log Window (Click here) Official Apply Random Individual Attributes – APPLY_RANDOM (Click here) Web Browser Upgrade – CEF (Chromium Embedded Framework) (Click here) Improved Handshake Process (Click here) Client Warp Memory Leak Fix (Click here) (No longer available) • Free Systems Official Soul Event System (Click here) Official Quest Renewal (Click here) Official Keyboard Settings System (Click here) Chatting Window Renewal (Mini Version) (Click here) Slot Machine System (Click here) Official Skill Book Combination System (Click here) OSF Project The project is focused on enthusiasts who want to create a server as a base that contains relatively modern content, while also maintaining a stable core at all times! If you are looking for that, you are in the right place. My goal is to create the best base for your server and keep it always up to date for you and all my customers. Files You will have all the files you need to start creating your server! Client, Source Files, Tools, Resources, Documents, Tutorials & Guidelines. Updates Updates are regularly and all updates will be committed in the OSF repository. Support One of my priorities is always to help my customers with anything they need when possible, such as answering questions, helping to set up something or solving any problem that is related to the project. Exclusive Access to Community We have a private Discord server and you will have exclusive access to it! There you can live with our community! As a must, I offer the possibility to test the server for free in order to have a better understanding of how the project looks like and what in general it contains. If you have any questions about the same or need an account for testing don’t hesitate to contact me. Test Server: https://osf.owsap.dev/test-server/ Change-logs: https://osf.owsap.dev/changelog/ • Are you interested in joining the project? Find out more in my official website, https://osf.owsap.dev/ • OSF Frequently Asked Questions (FAQ) What do I get with the OSF Project? The OSF Project will provide you quality and quantity! The price you pay for is the price you will be answered for! You will get access to everything you need; Client, Source Files, Tools, Resources, Documents, Tutorials / Guidelines, exclusive access to my Discord channel (Only OSF customers), GitHub access where you can find and download the latest updates! Finally, you will have a hard-working maintainer and developer that wants to create the best enhanced server for you! Do I also have the right to have future updates for free? Yes, you will get access to these updates on GitHub for free but please take in mind these are only subject to the OSF project and not your server. When can I get the updates? Is there any time or release date to get them? How do I get them? All OSF customers have the same method to get updates, and that’s one place only; GitHub. When there are updates, I will inform everyone in the OSF Discord channel! There aren't any estimate dates for releases until I arrange them and announce them. Can I buy older versions of the project? No, older versions of the project are deprecated and no longer being continued, although older clients that have the version still receive bug fixes. Can I pay for your project in monthly installments? No, the purchase is final. Can my partner have access to your Discord group and/or GitHub repository? No, only the person that made the final purchase will have access. Which payment methods do you accept? PayPal, no exceptions. In general, what am I paying for? mainline source code aside, you're only paying for enhanced features on the branch such as new functions, bug fixes, released up to date patches, systems that I have created and dedicated my time on implementing, sanitization, tools, etc… And in majority the support and constant updates provided. Quality Assurance The price you pay for any service (system, tools, resources or even the OSF Project) will be repaid in the best way possible ensuring support for every customer.
  20. You can use the already existing functions. say_item_vnum(item_vnum)
  21. Surely blocking all key functions should be enough while you have the key change window opened. I don’t think you will be using the key functions while you even have the window open since your intention is to change some settings so I think it makes a little sense to block all key functions while the window is still open. /// 1. // Search void CPythonPlayer::OnKeyDown(int iKey) { // Add below if (m_isOpenKeySettingWindow) return; // 2. // Search void CPythonPlayer::OnKeyUp(int iKey) { // Add below if (m_isOpenKeySettingWindow) return; After testing it looks correct now.
  22. Confirmed, I guess a workaround for this is to check if the key change window is open then ignore the ALT key function until the key change window is closed?
×
×
  • 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.