Jump to content

VegaS™

Forum Moderator
  • Posts

    656
  • Joined

  • Last visited

  • Days Won

    187
  • Feedback

    100%

Posts posted by VegaS™

  1. 56 minutes ago, .colossus. said:

    But i also want to mention that many people doesn´t have the requirements to sell here but they still do because they know the staff.

    You should have cared about what you're talking.

     

    Quote

    [Exception] Those conditions will not be applied in the next cases (but you still will need to help somehow the community itself too, not just selling your services):

    You're very good known for your reputation and you had a clean background in the last years and the staff is trusting you.

     

    In your case, you had no background in 7 years, no reputation, no posts, so we can't trust you.

    We won't change the rules just because 5 persons who were refused in the service section don't like them, when 50 persons voted for them.

    Just try  to do some activity and we'll analyze it + depending on your content, you'll be able to do it.

    That's all, but if you don't like 'big efforts', then we can't promote your services here.

    • Good 1
    • Love 1
  2. 1 hour ago, .colossus. said:

    why should i even release something when my sales thread got closed and i "need to be active for more than 6 months".

    its not worth the effort.

    That's right, it's totally not worth the effort.

    You're a member on m2dev for 7 years, you've not even one post in Releases or helping other people in Q&A, you just searched for help, resources, and 'up, push' to your service topic, nothing more.

    Metin2Dev is not a marketplace, as @ASIKOOsaid, has to be a win-win.

    Also, I wouldn't talk about your content of those services here, since it's another subject.

     

    I know it's easy to blame the rules and the person who implemented them instead of fulfilling them, since people just want fast incomes and no "effort'.

    That's why we're different than any other community, if we wanted to have over 500+ online, we could do it easily, we know the method of being "successful", but we won't apply it here, we prefer quality and 'high' rules.

    Not like the community where you're actively mostly, that you can have even 10 topics in services and no one would care, you can sell everything you want, no one will do any check to you even if your account was created a few seconds ago + [....]. 

    Then it's ok, we prefer to be blamed instead of having a forum like this.

     

     

    • Love 1
    • Why would a customer choose us to secure the transaction?
    • Your ideas, suggestions?

    That idea with a middleman in metin2 forums came from communities where everyone has access to sell something, even random members with accounts created minutes ago, where there're no filters.

    The customer should build a relationship with the seller for getting good support in the future.

    Doesn't have any relevance who will be scammed, the customer himself or the middleman, he'll be banned anyway if there's proof, which takes few seconds to do it, since we've already a special category that users won't be able to see it: Praises / Complaints - Metin2 Dev (You can write safely, only you and team members can see your topics.)

     

    And the same, money will be lost anyway, it's irrelevant who will make the transaction (customer/middleman), if the seller is a scammer, then he would scam even the middleman.

    These scammers changing their names every year like, so they don't care about a ban, even if you ban him in that forum, he'll get back with other names and so on, as an example you've ds_aim, who had over 10 names in the last years, but there weren't so many "public accusations", because customers were afraid to share conversations and others into a public topic. 

    But now, that we have a special category for this, they just need a better "education" and encourage them to report those scammers/resellers.

     

    Also, related to the forum itself, there's no possibility for the moment to talk about a "scammer" from Service Section, already we implemented a system in June 2020 that won't allow resellers/scammers/untrusted people/new accounts to join on that category.

    The votes for implementing that rule were 75% but 90% in reality, there were some guys who voted for fun "No" and some of them from "enemy communities'.

     

    The single method to be scammed right now in metin2dev, is via discord or PM.

    You've to be careful when you buy from "random names" via those methods, but if something really happens, you've Praises / Complaints - Metin2 Dev.

    You've to know that we can't do anything to get your money back, just ban that seller/account and that's all.

    That's why I said, metin2 customers need education in marketing, not middleman's.

    I met a lot of customers who didn't want to make any report because they've no time or don't care for 100€.

    They've to make feedbacks, reports related to a bad experience with a seller. If they're true and there're some pieces of evidence, the seller will be banned in 12 hours for sure. 

     

    Also, keep in mind the following things:

    • There're sellers who don't give any .zip archive, in these times everyone has a different source with so many systems/features, there can't be done a full tutorial because of conflicts, so the seller has to implement it via his PC after the payment was done. A middleman in that situation is irrelevant (and to be honest, kinds of transactions like this are over 60% right now, excluded small features/systems).
    • A seller won't give a 'big' product which costs over 1-2k to a 'middleman'  + to a customer at the same time. That's a big disadvantage of a middleman, duplicated products. I won't trust any known member or part of the 'team' to give products like this. In the time the middleman will have products which are valuable to over 30.000€ +, I won't trust any virtual person. Yes, I assume that the customer can resell/public the product, but increasing the risks multiplied by two, I won't.

     

    Your ideas, suggestions?

    I'm PRO for it somehow, but self-education is the best, let's advertise and creating some tips/how-to avoid being scammed then, everything will be fine.

    There should be advertised well, recently I spoke with a user that bought some 'systems' from a scammer than he didn't answer after the payment, he came to me to ask about him, then I showed to him the pillory list, he didn't know about that category, he just blocked him and moved on.

    A middleman won't be there 24/7 for all metin2dev users.

     

    With my idea of making tips/how-to for avoiding + a PRIVATE category of complaining about scammers/resellers, it's much better than middleman's and m2dev will gain a lot of popularity just because of that.

     

    A customer should know how to do research, to find the best offer for him + [.....] a long list. There're many people who are selling the same product, he have to learn how to find the best one for his purposes.

     

    In the end, that's just my opinion, as a person who had over 300 real customers in the last 6 years.

     

     

    • Not Good 1
    • Lmao 1
    • Love 3
  3. 56 minutes ago, Aioria said:

    Anyway i'm trying to add this but i got an error when compiling with "duplicate case":

    how to solve?

    Duplicate case value, it's exactly what the error says.

    You've already defined other cases with the same values, for fixing it, edit the values from the enumeration declaration, you can find them in common/tables.h.

     

     

    • Love 1
  4. On 2/23/2021 at 4:26 PM, Aioria said:

    P.s: and it's possibile to make the offline message received in other color like light-blue? So you can see if it's an offline message or if just someone sent u a message right now

    • Srcs/Server/common/length.h
    	WHISPER_TYPE_GM		= 5,
    	[...]
    #ifdef BL_OFFLINE_MESSAGE
    	WHISPER_TYPE_OFFLINE	= 6,
    #endif
    • Srcs/Server/input_db.cpp
    void CInputDB::ReadOfflineMessages(LPDESC desc, const char* pcData)
    {
    	pack.bType = WHISPER_TYPE_NORMAL;
    	[...]
    	pack.bType = WHISPER_TYPE_OFFLINE;
    }
    • Srcs/Client/UserInterface/PythonChat.h
    			WHISPER_TYPE_GM                 = 5,
    			[...]
    #ifdef BL_OFFLINE_MESSAGE
    			WHISPER_TYPE_OFFLINE            = 6,
    #endif
    • Srcs/Client/UserInterface/PythonChat.cpp

    This is the hidden content, please

    • Srcs/Client/UserInterface/Locale_Inc.h
    #define BL_OFFLINE_MESSAGE

     

    Thanks for the release! @Mali61

     

    • Metin2 Dev 16
    • Good 3
    • Love 9
  5. M2 Download Center

    This is the hidden content, please
    ( Internal )

    This is the hidden content, please
    ( GitHub )

    Python-Code-Translator-2-to-3

    Is a Python program that reads Python 2.x source code and applies a series of fixers to transform it into valid Python 3.x code that works on all versions (py2.x - py3.x).

    The standard library contains a rich set of fixers that will handle almost all code. A flexible and generic library, so it is possible to write your own fixers based on your purposes.

    Warning: This tool purpose wasn't for doing the transition to python3, is just for the IDE purpose.

    INSTALLATION
    USING
    • Add your .py scripts to the modules folder.
    • Run main.bat
    • Take the output files and move them into your application.
    FIXERS
    print
    • Converts the print statement to the print() function.
    • Matching multiple formats, comments, and more.
    Exception handling
    • Convert except to except BaseException, since BaseException is the base class for all built-in exceptions.
    • Converts except X, T to except X as T.
    xrange
    • Renames xrange() to range() and wraps existing range() calls with list.
    has_key
    • Changed dict.has_key(key) to dict..contains__(key)
    dict
    • Fixes dictionary iteration methods. dict.iteritems() is converted to dict.items(), dict.iterkeys() to dict.keys(), and dict.itervalues() to dict.values(). Similarly, dict.viewitems(), dict.viewkeys() and dict.viewvalues() are converted respectively to dict.items(), dict.keys() and dict.values(). It also wraps existing usages of dict.items(), dict.keys(), and dict.values() in a call to list.
    exec - TODO
    • Converts the exec statement to the exec() function.
    apply - TODO
    • Removes usage of apply(). For example apply(function, *args, **kwargs) is converted to function(*args, **kwargs).
    raise - TODO
    • Converts raise E, V to raise E(V), and raise E, V, T to raise E(V).with_traceback(T). If E is a tuple, the translation will be incorrect because substituting tuples for exceptions has been removed in 3.0.

     

    You can use it together with Skeleton of Python modules for IDE, from @Takuma.

     

    Download:

    This is the hidden content, please

    • Metin2 Dev 43
    • Eyes 1
    • Dislove 1
    • Not Good 1
    • Confused 1
    • Good 25
    • Love 7
    • Love 38
  6. 1 hour ago, Vanilla said:

    Well if it's bothering you, why not sharing a guide and helping the people to move to py 3?

    Sorry, you understood it wrong, maybe my bad.

    I talked about general stuff, tools, not crap metin2 or about porting it to py3, doesn't have any relevance with what I said. 

    Was all about that in the last years I didn't saw any public tool coded in py3 well, just py2 and that's really sad when you look at py3 release date: 03-Dec-2008.

    There're no excuses for 'developers/programmers' that don't use the latest versions of python in other apps/tools just because metin2 doesn't have it, which means they didn't care about improving their skills in that language, simple.
    Those tools don't have anything related to metin2 code, that's why I told those things.

    It's like still using full C++98 after 20 years in your tools when you've no limits and C++2x is here.

     

    @TakumaA good feature would be a detailed documentation for functions, like this

     

    If you need any help with the documentation or anything else, don't hesitate to contact me as well, I would like to contribute in my free time.

    • Love 3
  7. spacer.png

     

    At least there's someone in metin2 that using Python 3+ for tools (since already we've 3.9 and they're still using 2.7), great. 
    The problem is that 99% of them will not understand the code from your tool, but it's fine, let's just run it and see the magic. 🤯
    Thanks for the release, it's really useful for 'developers'.

    • Love 5
  8. I didn't said that you've to insert something, I mean that structure of your condition, it's non-sense, if (condition) retun false else return true;

    Because there're other checks which has to be checked, before you return that true, was enough just to return false if the condition was fulfilled, that's all.

     

    Quote

    but what interested me was just the case where a player's level was higher than that of a monster.

     

    Quote

    difference between you level and mob lever is over 15

    Difference means (x-y).

    Your code is bugged, please try to run it.

    This is the hidden content, please

    I'm talking about the conditions and math itself, they're totally wrong.

    If you really want to check just if the player level is higher than monster then you've to do this:

    if ((ch->GetLevel() > victim->GetLevel()) && (ch->GetLevel() - victim->GetLevel()) > 15)

     

    So, in that way you're not comparing a negative number with a positive one, you'll be fine.

    But yeah.. who cares about math rules in metin2? 🤨

     

    Btw, if someone uses your code how it's right now, and there's a guy who knows some basics of reverse engineering, can modify the function IsInSafe in someone's client and make it return false all of the time, he can start a party...

    He can kill everybody from every place, even in the safe zone since you made a return true at the beginning of the function.

    • Good 2
    • Love 1
  9. On 1/17/2021 at 1:17 AM, TokiSan said:

     

     

        if (!(victim->IsPC()))
        {
    
            if (ch->GetLevel() - victim->GetLevel() > 15)
            {
                return false;
    
            }
            else
            {
                return true;
    
            }
        }

     

     

    Thanks for release, but there's something wrong.

    First, you've to put the condition after it's checking the safe zone and others, you made a return true without checking those as well. (things will going wrong)

    Second, you'll get a negative number if:

    int player = 50;
    int victim = 80;
    int diff = player - victim;
    cout << (diff > 15) << endl;
    // -30 > 15 ? = false

    You've to use std::abs for getting the absolute value.

    The code should look like:

    This is the hidden content, please

    Basically you can't attack a mob if:

    • playerLevel = 50
    • monsterLevel = 66

    or:

    • playerLevel = 66
    • monsterLevel = 50
    • Metin2 Dev 3
    • Good 3
    • Love 1
  10. You can't define a class function inside another.

    You could do it just with lambdas, struct or other gnu extensions, but that's not relevant for your case.

     

    Solution:

    Move function GetMonsterMaxHP:

    DWORD CPythonNonPlayer::GetMonsterMaxHP(...)
    {
    	[...]
    }

    Outside of GetMatchableMobList function, should look like this:

    This is the hidden content, please

     

    • Metin2 Dev 2
    • Love 1
    • Love 1
  11. Thanks for the release, that's a good idea but instead of using metin2 TextFileLoader, you could use rapidjson or similar, which would be much faster and organized.

    Also, I would add a check of rank:

    This is the hidden content, please

    Since you use it as an index of a vector and you get that value from a parser, you should be careful with it, otherwise, they'll get a crash core.

     

    • Metin2 Dev 45
    • Sad 1
    • Good 10
    • Love 10
  12. That's right, the default code is crap for this scenario with extended requirements.

    If you add a value to vnum4 and count4, the refining will not work anymore for that ID, the required items will be ignored, you can upgrade the item without any requirements.

     

    Quote
    
    
    
    
    		for (int i = 0; i < REFINE_MATERIAL_MAX_NUM; i++)
    		{
    			str_to_number(prt->materials[i].vnum, data[col++]);
    			str_to_number(prt->materials[i].count, data[col++]);
    			if (prt->materials[i].vnum == 0)
    			{
    				prt->material_count = i;
    				break;
    			}
    		}

     

     

    Basically what they did is to set the material count just when the next column of 'vnum' is empty.

    Let's take two examples:

    • 8e69bfc2bfec13c8291740c42fe083bb.png

    The refine proto id 430, will have material_count = 1, because the next column 'vnum1' is empty and the condition was fulfilled.

     

    • 7d6ff47a0a963314511a74fc2619fc12.png

    The refine proto id 510, will have material_count = 0, because there's no column 'vnum' which is equal to 0.

    That means it doesn't satisfy that condition where it sets the material count.

     

    The solution is:

    This is the hidden content, please

     

    • Metin2 Dev 41
    • Confused 1
    • Good 8
    • Love 4
    • Love 17
  13.  

    54 minutes ago, Await said:
    
    
    struct SAttachSpecularData
    {
    	DWORD race;
    	float specularPower;
    };
    
    const int SPECULAR_MAX_NUM = 5;
    static SAttachSpecularData structInfo[SPECULAR_MAX_NUM] =
    {
    	{ 101,	0.09f },
    	{ 102,	0.06f },
    	{ 9001,	0.04f },
    	{ 9002,	0.01f },
    	{ 9005,	0.09f },
    //	{ npc_vnum,	specular }, Warning: When you add new NPCs / Monsters inside the structure, you must increase the SPECULAR_MAX_NUM
    };
    
    for (DWORD i = 0; i < SPECULAR_MAX_NUM; i++)
    {
    	if (GetRace() == structInfo[i].race)
    	{
    		SMaterialData data;
    		data.pImage = NULL;
    		data.isSpecularEnable = TRUE;
    		data.fSpecularPower = structInfo[i].specularPower;
    		data.bSphereMapIndex = 1;
    		m_GraphicThingInstance.SetMaterialData(0, NULL, data);
    	}
    }

     


    Thanks for my release from 2016, soon 5 years since it has been done.
    Shame on you... making copy-paste and uploading the code on GitHub, won't make you a "programmer".


    spacer.png

     

    • Not Good 1
    • Lmao 11
  14. 1 minute ago, TokiSan said:
    
    #ifdef ENABLE_GHOST_MODE
    	if (IsGhostWeapon())
    	{
    		(STATEMANAGER.SaveRenderState(D3DRS_ALPHABLENDENABLE, TRUE));
    	}
    	else
    	{
    		STATEMANAGER.SaveRenderState(D3DRS_ALPHABLENDENABLE, FALSE);
    	}
    #else
    	STATEMANAGER.SaveRenderState(D3DRS_ALPHABLENDENABLE, FALSE);
    #endif

     

    Also instead of that, you can simplify it:

    #ifdef ENABLE_GHOST_MODE
    	STATEMANAGER.SaveRenderState(D3DRS_ALPHABLENDENABLE, IsGhostWeapon());
    #else
    	STATEMANAGER.SaveRenderState(D3DRS_ALPHABLENDENABLE, FALSE);
    #endif

     

    • Good 1
    • Love 2
  15. On 5/5/2014 at 6:19 AM, Shogun said:

    Hi guys,

     

    Since I keep seeing more and more people who want to get help to create their own server, very often with the idea of opening it to the public, I thought that it's time that someone explained to the beginners what this means in it's full depth. Some parts of this text may sound harsh but believe me I wish I had been told some of this stuff when I started.

     

    First of all, do not let the existence of "instant files" mislead you. A metin2 server is not something you install with an intutitive wizard and then edit to your liking with a point and click interface. YMIR never intended this software to be used by anybody else but people who have degrees in programming and design. This is though shit. There is a series of technologies involved which can take years to master separately. FreeBSD. Python. LUA. C++. DirectX. Mastering just one of these disciplines can get you a high paid job in Silicon Valley. If you don't have a bit of curiosity for learning and analytical thinking, just forget it. You will do yourself and everyone else a favor if you don't try to take on tasks that are beyond your abilities.

     

    Forget about the one man army. It's impossible to create anything worth playing just by yourself. Team up with people who complement your knowledge. Don't be greedy and offer to share your earnings with the people who help you.

     

    Respect those who worked to provide you with this game, YMIR. Respect those who worked to privide you the tools you use and give credit when due. Don't try to pass someone else's work as yours; this is the lamest thing on earth.

     

    Respect the players. Don't expect them to spend their time, money and effort on your game when you didn't do that yourself. If you have the time, play your own server (without using edited stuff and such of course) so you can get in the skin of your players. Don't be tempted to gift stuff and kick any GM that does so.

     

    Be in control of your server and get a good admin panel so you can see everything that's going on.

     

    Get DDoS protected hosting. Use SSH keys. Use Cloudflare for the website. Set up pf on the game server. Always look at the logs and read them instead of assuming it's gibberish. How often I have seen people puzzled at logs when the answer is written there in plain english. Make sure your dbcache port is not open to outside, and be careful who you give access to your server's shell.

     

    Make backups of your database at least daily.

     

    When you get stuck at a problem, use damn Google! Metin2 pservers and FreeBSD have existed for many years and copying and pasting an error message in the search bar will more often than not bring up posts from people who had the same issue before.

     

    Create something unique that will attract players to your server. Don't expect to upload some pub files, announce your server and get rich. It doesn't work like this, not for the last 3 years. There is a lot of competition and teams who started working years ago already are far ahead of whatever the [insert random pub files] have to offer.

     

    Use the newest files possible, even if you don't need the new features. Keep your FreeBSD up to date as well. Using old software is a security risk, and you could write a book with all the security flaws of game 2089.

     

    Promotion is everything. Hype your server. Make sure that the opening is announced well in advance and have the players excited to play it. The opening day will make or break your server. Get a Youtuber to review your game, preferably one who works for money if you can afford it (and if you don't have at least some money, opening a server might not be the best idea). If you have enough, open a Facebook account and take good care of it and promote your server through Facebook Ads (do not confuse with the fake likes that some people sell in places like epvp). Use remarketing with AdRoll (its quite cheap) to chase your visitors who did not sign up with banner ads. Watch your account table in Navicat so you see who is signing up.

     

    And if all of this sounds like too much work then just don't do it. There are plenty of people happily contributing as GM, designers, developers or server administrators in projects lead by other people, and that doesn't make them less important.

     

    On 5/5/2014 at 9:08 AM, Invictus said:

    This is a really great post in regards to introducing people to the sheer amount of work it takes to start up a high quality server.

     

    My Experience - 1 Man Army ( don't do it, you'll work yourself to death)
    I personally run a one man army, and it really isn't as easy as I originally thought it would be. I've been working 18 hours a day for the past two - three months, there hasn't been a single day in that entire time that I haven't at least put 6 hours into the server. I have also been juggling university alongside my server & my other personal projects.

     

    I'm personally a coder, I study computer games development at university and I'm specializing in C++. So I've got a reasonable amount of experience with coding allowing me to develop my own server with plenty of unique aspects such as quests, systems and other various elements. but when it came to something as simple as setting up a Freebsd VPS i had no idea. I found myself constantly asking stupid questions, which i knew were stupid and i knew i was frustrating people by asking them and myself by not already knowing the answers. But still remember to thank everyone for any help they give because they aren't obligated to help, they don't get paid for it.

     

    A team is really necessary for doing a high quality Metin2 server, even if it's a team of beginners, because we all start somewhere. I've personally paid people a decent sum to do certain aspects such as my website, and certain in game systems that I just don't have the time or the expertise to do myself.

     

    as a one man army, the server doesn't progress unless you're working, but with a team you can afford to take a day off every now and then knowing that when you come back the next day progress has been made.

     

    conclusion, unless you're insane. don't opt for the 1 man army option.

     

     

    Asking For help

     

    If you're going to ask a question make sure you post it in the right area, at least attempt to Google it first, obviously there's some stuff that won't come up in Google and that warrants a thread, but when making such thread don't just post something along the lines of "I've got a problem, when I upgrade my server crashes" <-- i had a bug like that. What you should be posting is all the syserr.txt syslogs.txt game revision  and any other relevant information such as was it a one of case, can you replicate the problem and if so, how can you replicate it. I see time and time again people posting only half of the information that we need in order to help you solve the problem.

     

    To receive help from others, you must first help yourself.
     

    Money

    I recently spoke to a guy who was requesting help with his server. I spoke with him about his plans and his expected time of release etc. one of the things that baffled me was that he expected to release a server that people would invest their time and hard earned money within a week of starting with the files mind you he had no prior experience or money in which he could even pay for a VPS. starting a Metin server can be relatively cheap if you're working in a team and each of you are specializing in 1 area but at the end of the day you have to treat this like a business.

     

    First you must spend money building it from the ground up paying for various stuff like professionally designed website, server advertisements across multiple sites, high standard VPS, any pre-built systems that you want for your server, penetration testing (unless you know, or are a pen tester.) There's no way to do it without spending money.

     

    Conclusion
    At this form you'll receive ample amount of help ranging from common easy to solve problems to more complex ones. You'll learn a lot in regards to the area you choose to specialize in ( assuming you're in a team) or in my case in every area as a 1 man army. and you'll probably lose your sanity somewhere along the lines.


    at the end of the day, you need to sit down look at every aspect and see if you're up for the challenge, many will give up and few that rise above the challenges before them. Will you be one of those few?
     

     

     

×
  • 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.