Jump to content

Lemongrass

Developer
  • Posts

    547
  • Joined

  • Last visited

  • Days Won

    15

Posts posted by Lemongrass

  1. Your application should manage the data and the processes, not the SQL server.

    From a guy that puts in a UNIQUE constraint for a 3rd party tool, that should handle the business logic. :)

    Do not get me wrong here, I do know that redundancy can be used to boost performance, but I do not think that the logs for example do need that much of performance.

    I also use redundancy when I optimize performance on some databases and I also work with huge companies and their databases, not everyday though.

    I do appreciate your opinion to this topic, but even if we do not use foreign keys or something like that, could you please set up some naming standards for the database and remove unneeded redundant columns?

  2. The thing with the partner id is non other than another foreign key.

    The price checking has to be done with a little work around since MySQL does not have a check constraint. It has to be implemented with a stored procedure that is called by a trigger. But yes it is possible.

    About the merge of two databases that would be a very easy task, because we could even add cascade options to the foreign keys. The only problem that came in to my mind immediatly is the merging of the character and login names, since there could be duplicate name entries for the two servers.

  3. That's a good point, but I do not really get the point of splitting these tables up into different databases. But even though if that would be the reason, we should think of dropping support for that and getting the data consistent and free of redundancy.

    As for the engine it would be required to switch to InnoDB that is indeed correct.

    The things I have mentioned so far, are far away of what I personally would change all in all. Since there would be tons of more things I would change regarding the database. But some of them will follow, if some devs show some interest in this topic.

  4. Well since I was tortured at school with database designing I thought I will give it a try and post some of my ideas in here.

    What I am talking about is the whole structure of the current (SQL) database. A lot of data is saved redundant and the integrity of the data is not given on database side.

    Why is this important?

    So let us say some user edits some of their entries in the character table.

    Something went wrong with the saving of a wedding and it is only partially stored into the database.

    The administrator puts the id of the husband/wife manually into the database and does a typo with the ID of the character.

    He will not be able to recognize his mistake at that point of time, but he will have to look for it later on.

    And that is a problem that could easily be fixed with the usage of foreign keys. But there would be a lot more of awesome features like for example check constraints which are not featured by MySQL but there still is a workaround for it. This could be used to check buy/sell price values. That is something that came to my mind when I was told about a bug that existed on euRO about 2 weeks ago, where you could buy some item for 1000z which would give you 1000z on usage, but that one could be sold for ~1300z to the npc because the database definition was wrong.

    So my question here is:

    Would the developers want someone who redesigns the database or do they even care about the ideas I mentioned above?

    If you want me to do it or to give you a small preview or something, I would not mind. I just do not want to design the whole database and it is not used afterwards. So let me know, if you do not want to discuss this matter publicaly, let me know how we can talk these things out.

    • Upvote 3
  5. True, there are tons of custom graphics and music that we can use but not client.

    Just a suggestion, if you could make character's gender independent of each other. Perhaps maybe when a player creates a character, the client would ask (Male/Female) it would be great. I don't have much knowledge on coding and how it might make things complicated though.

    that's a thing sirius white already did once.

    i don't know if you can read it but the pictures are what is most important.

    http://siriuswhite.de/blog/2008/11/charakterbasiertes-geschlecht/

  6. This would be nice to have o_O

    Instead of preventing the message from being shown entirely, chat filter will now show blocked words in * and show rest of the message normally.

    @Judas and Yom yom, what do you mean by theimda? Their packets are now encrypted.. ? o_o

    No at least how much I understood what Themida is. It is a protection method against disassembling their executeable. From this date on using the official client will become a pain in the ass. Although it's said that there are disassemblers that know how to crack the Themida VM. But we will see, I guess only Sirius White or someone with the same level of assembly knowledge could help the community out with this problem.

  7. Hello guys,

    in my spare time I like to code some things that are related to Ragnarok Online or Athena.

    So not long ago I decided to create a project featuring all the data related to both Ragnarok Online and Athena and combine them into one java library.

    I call that project jRagnarokOnlineData.

    To make it somehow more interesting for all of you I also have two other projects called jRagnarokOnline which is a version of the game Ragnarok Online written completely in java, which means platform independent, using jOGL. The second one is called jRagnarokOnlineStudio, which will be as the name says featuring a lot of usefull tools combined in one "studio".

    So to the status of my project jRagnarokOnlineData, which I want to finish before all the others:

    It currently supports the reading of all file formats regarding Ragnarok Online except GRFs with a version less then version 0x200. It does support the reading but it is still really buggy.

    The tools is also able to read and write all the data of Athena which is stored in the SQL database. For that purpose I used the hibernate technology which is an obfustication layer between the java classes and the database standing behind it. It would also support other things than MySQL very easily.

    After I manage to fix my current problem which I'll tell you later and which is the reason why I'm writing this post, I'll add support for reading and writing the client side LUA files or the compiled LUB files. In my researches I found out that it seems to be very simple to combine java with lua.

    So to my current problem:

    I am currently trying to get the write methods of the GRF format working. The problem is that I want to stick at native java as most as I can. So I use the java.util.zip package for the ZLIB compression. The thing is that reading is working like a charm, whereas writing really gives me troubles. No matter what I do the Deflater's deflate method returns a compressed length of 2 and I end up with an "empty" byte array which only contains some kind of ZLIB signature(at least that's what I think those two bytes are, since they are the same everytime).

    Has anyone got decent knowledge about the usage of the ZLIB deflater of java or does know of any other implementation that is working platform independent?

    I hope the community can help me out here and without a doubt you would not regret to help me finish those things. ;)

  8. I see in the description....

    Starting August 5, 2011 until August 26, 2011, download the game for free and then leave us a review! Depending on how many reviews we get, the greater the reward for all of those that play Ragnarok Violet’s older brother, Ragnarok Online!

    Share the game with your family and friends and help us help you!

    www.playragnarok.com

    uhm rytech i guess you overread something^^ this was 2011 xD

  9. I heard that an android game is being developed, but just rumors till now. sorry olrox.

    would be awesome if you could play it, then we could convert the whole game into a addon ;P with you as mapper and me as scriptor of course, since your skills are far better than mine^^

  10. oi milchmädel :) oder täusch ich mich? ;)

    omg!

    Nein me not aileen ;D

    Me reirei

    Ja pulse waren auch einige aber den server mocht ich net.

    War nicht auch desty bei einem Server beteiligt? XD

    lol sry^^ wusst garned das du auch mal gl von inso warst bzw das du dich auch mit *athena auseinandersetzt ;)

    und dann noch diese ähnlichkeit ainna und brianna xD nur bischen verdreht und das b weggelassen :P

    ich erinner mich nur düster an nen desty... ich glaub das war einer der mich dauernd in msn gebeten hat mit ihm nen server zu machen, wo ich aber keine lust drauf hattte^^ aber kein plan mehr sorry.

  11. Tjoa,

    wollt mal fragen was und wann euer erstes mal war. Also P-Server spiel-technisch.

    Ich gehe mal davon aus, dass die meisten zuerst auf einem pserver gespielt und danach einen gebastelt haben.

    Angefangen habe ich damals auf euro (offi euro) im Jahre 2001(?? zu lange her) Update Commodo / WoE.

    Mein erster Pserver war kurz danach FunRo (Valhalla (hieß glaub ich der erste)) und bin dort einige Zeit geblieben.

    Dann kam FunRo Hellraiser auf dem ich wohl die meiste Zeit verbracht habe. (Hier einen gruß an lemongrass welcher sich den ava von malicious // how to become cute geklaut hat ;D)

    Gilde: Insomniac Guardians // anfangs nur als rounin und aus langeweile und später sogar mal gleader

    Nach 500x wipes etc wurde dann hellraiser ganz eingestellt und dafür kamen pegasus und ka wie der andere hieß. (langweilige zeit)

    Danach war ich auf MicRo. Ein sehr schöner lowrate Server mit tollem WoE, welcher später auch langsam aber sicher verreckte.

    Gilde: Delirium

    Tjoa alles was danach kam, waren kleine server die alle suckten ^^

    Wurde dann gezwungen wow zu spielen >_>

    oi milchmädel :) oder täusch ich mich? ;) oi reirei xD

    ka von wem oder wo ich den ava her habe, hab den seit 2006-07? auf eAthena^^ den hab ich damals auf meiner festplatte gefunden und verwendet, bis jetzt hat sich noch keiner beschwert deshalb, aber falls sich jemand melden sollte, änder ich ihn gerne ;)

    bei mir wars ebenfalls ähnlich:

    ca 2001-2002 euRO

    nach unzähligen free accounts auf euRO dann auf FunRo

    zuerst valhall danach hellraiser, nach einigen wipes dann pulse und danach wieder hell

    nach etlichen wipes dann parallel zu funro aufbau eines eigenen servers lemonro auf localhost über hamachi

    mit der schließung von funro hellraiser eröffnung von hurricane ro auf nem server

    durch einige patzereien als noob admin reset und eröffnung von tropical ro mit mehreren subservern

    schließung aufgrund linux file system noob und exploits durch einen der subserver admins

    das war meine geschichte soweit^^

  12. To all iDevice owners,

    today and ONLY today the app Ragnarok Violet is free on the app store.

    you can find the app either here or directly in itunes:

    http://itunes.apple.com/us/app/ragnarok-violet/id450391604?mt=8

    my source is gravity's facebook account which seems to be synced to their twitter account and there they posted this:

    https://twitter.com/GravityEurope?utm_source=fb&utm_medium=fb&utm_campaign=GravityEurope&utm_content=225497127294484480

    enjoy it ;)

    • Upvote 1
  13. Anyways, since the first post on both eA and rA boards was concerning the "safety" of the data they enter, I have completely removed those settings. I still have them enabled on my personal server since I find it useful.

    that's right.. u choose a good decision :) keep that only for ur self ( on ur personal server it's really usefull but the other ppl maybe wont their data server knowing by the other ).

    if thats a problem for you, you shouldn't run a server.

    big LOL

    learn how to set up the firewall on the computer you're running the configuration tool on and/or learn how to secure your mysql server. I don't think that this is a reason for a LOL.

    • Upvote 1
  14. Just as a matter of fact, would you mind leaving that part away:

    elseif hair_id > 27 then
     hair_id = 27
    end
    

    I think the negativ check is important but the check if the hairstyle id is above 27 is an "unneeded" official behavior. I also would kind of cache all that stuff instead of looking it up every time it is needed.

  15. I understand your point Lemongrass, but why make it that complicated? if it says the party does not meet the req. just kick the player out of the party in order to enter it, it's as simple as that instead of just keeping the loop / count going and in the end let the users stay outside anyway who aren't allowed to enter xD

    That's easier said than done, since the players maybe don't know what are the requirements... And also in 90% of the cases they also don't know that they have to kick the players that don't fit in.

    I'll talk to the devs. about your config switch, since i'm not allowed to make such decisions by myself ;)

    Thank you, as I said, if you need a .patch file just drop me a PM. :)

  16. Well i'll try to explain this a little...

    As you all already said, on official Servers the instances / memorial dungeons do not check for each and every pleayer inside the party if they're online or meet the required minimum level to join the Party.

    This is either way intended by Gravity or a bug they couldn't fix themselves yet. As for me, i believe gravity probably is just unable to fix that issue, cause it makes no sense to me why someone should be able to enter an instance / memorial dungeon were 2 players are needed in a party but one can be offline, or one of them does not have to meet the required minimum level to join.

    And as for me as an Script / DB Develeoper who always gets a shit load amount of bug reports about that the instances are not checking for player or base level and such, i decided to ask malufett if he could add an new script command for me to check those needed requirements to join a memorioal dungeon, even tho it's not like that on official servers.

    But well, if you don't like the way it works now, you can always use the instance scripts from eAthena which behave the old way, or you just make an SVN revision revert before i applied the change, then you copy paste those old instance files, update your svn again to the latest rev. and paste the old files in there.

    Please don't get me wrong, I only wanted it that way, that it checks if the online players meet the requirements and if there are enough of them online. I do get your point that the player count and don't checking offline characters is nonesense, but those shouldn't be able to enter the instance once they come online afterwards anyway. That also fits for those that are online and don't meet the requirements...

    I'll try to explain it with a short example:

    Party with 4 players:

    1st player lvl 99 online

    2nd player lvl 70 online

    3rd player lvl 99 online

    4th player lvl 10 offline

    Instance requirements:

    2 players at lvl 80

    The current check will act as follows:

    The check loops the players according to the given order above.

    It checks player 1 who meets all the requirements and increases the count.

    It checks player 2 who doesnt meet the requirements and cancels the loop.

    Output:

    The two players(1,3) of the party that wanted to do the instance aren't allowed to enter.

    I think it should be that way, that the loop isn't canceled by a player that doesn't meet the requirement. Instead the script of the instance warper should check, whether a player that is part of the party instance meets the requirements and if he does it warps him into the instance and if not he has to stay outside.

    Using the example above the loop should act as follows:

    It checks player 1 who meets all the requirements and increases the count.

    It checks player 2 who doesnt meet the requirements and continues to the next player.

    It checks player 3 who meets all the requirements and increases the count.

    It checks player 4 sees that he is offline and continues.

    No next player, loop cancelled.

    Output:

    Playercount of those that meet the requirements and are online: 2

    Instance will be created and the players that meet the requirements can enter.

    ...

    But well, if you don't like the way it works now...

    ...

    I don't think it is just "if you don't like it, change it your way".

    Since we're following kRO official, no more has to be said, it's official, right?

    Maybe it's a bug as it was said or maybe it's not, I think it needs more info as it makes things easier to players if it's not a bug it must be in rA.

    I would definitly say that this is true, but I would give the users the possibility to change the behavior as they like, for example in form of a setting in the "conf" folder.

    I've prepared a small diff, that adds a conf file for instances that consists of a on/off setting for official behavior and the cooldown times if they are set within a script and if they are to be set in the quest database the quest id is stated. Whether you would like to add it or not is up to you.

    Since I can't post any attachment in here, feel free to drop me a PM if you would like to have the .patch file.

    Index: conf/battle/instance.conf
    ===================================================================
    --- conf/battle/instance.conf    (revision 0)
    +++ conf/battle/instance.conf    (working copy)
    @@ -0,0 +1,35 @@
    +//--------------------------------------------------------------
    +// rAthena Battle Configuration File
    +// Originally Translated by Peter Kieser <[email protected]>
    +// Made in to plainer English by Ancyker
    +//--------------------------------------------------------------
    +// Note 1: Value is a config switch (on/off, yes/no or 1/0)
    +// Note 2: Value is in percents (100 means 100%)
    +// Note 3: Value is a bit field. If no description is given,
    +//		 assume unit types (1: Pc, 2: Mob, 4: Pet, 8: Homun)
    +//--------------------------------------------------------------
    +
    +// Should the instance system act like the official version on KRO? (Note 1)
    +// KRO:
    +//     Players that don't meet the requirements,
    +//     prohibit a party from creating an instance.
    +// rA:
    +//     Online the players that meet the requirements are counted,
    +//    for the required party member count.
    +instance_official: yes
    +
    +//--------------------------------------------------------------
    +// Cooldown times in seconds
    +//--------------------------------------------------------------
    +
    +// Endless tower (default: 1 week)
    +instance_etower: 604800
    +
    +// Nidhoggur's Nest
    +// Edit /db/quest_db.txt 3135 and 3136
    +
    +// Orc's Memory
    +// Edit /db/quest_db.txt 12059
    +
    +// Sealed Shrine
    +// Edit /db/quest_db.txt 3040
    \ No newline at end of file
    Index: npc/instances/EndlessTower.txt
    ===================================================================
    --- npc/instances/EndlessTower.txt    (revision 16162)
    +++ npc/instances/EndlessTower.txt    (working copy)
    @@ -214,7 +214,7 @@
        set .@etower_timer,checkquest(60200,PLAYTIME); // 1 week
        set .@etower_timer2,checkquest(60201,PLAYTIME); // 4 hours
    
    -    set .@dun_lim_time,etower_timer+604800; // 1 week
    +    set .@dun_lim_time,etower_timer+getBattleFlag("instance_etower"); // 1 week
        set .@dun_lim_time2,etower_timer+14400; // 4 hours
        set .@dun_cur_time,gettimetick(2);
        set .@dun_ent_t,(.@dun_lim_time - .@dun_cur_time);
    Index: src/map/battle.c
    ===================================================================
    --- src/map/battle.c    (revision 16162)
    +++ src/map/battle.c    (working copy)
    @@ -5307,6 +5307,9 @@
        { "cashshop_show_points",			   &battle_config.cashshop_show_points,		    0,	  0,	  1,			  },
        { "mail_show_status",				   &battle_config.mail_show_status,			    0,	  0,	  2,			  },
        { "client_limit_unit_lv",			   &battle_config.client_limit_unit_lv,		    0,	  0,	  BL_ALL,		 },
    +// Instance System
    +    { "instance_official",                    &battle_config.instance_official,                1,        0,        1,                },
    +    { "instance_etower",                    &battle_config.instance_etower,                604800,        0,        INT_MAX,        },
    // BattleGround Settings
        { "bg_update_interval",				 &battle_config.bg_update_interval,			  1000,   100,    INT_MAX,	    },
        { "bg_short_attack_damage_rate",	    &battle_config.bg_short_damage_rate,		    80,	 0,	  INT_MAX,	    },
    Index: src/map/battle.h
    ===================================================================
    --- src/map/battle.h    (revision 16162)
    +++ src/map/battle.h    (working copy)
    @@ -456,6 +456,10 @@
        int mail_show_status;
        int client_limit_unit_lv;
    
    +    // Instance System
    +    int instance_official;
    +    int instance_etower;
    +
        // [battleGround Settings]
        int bg_update_interval;
        int bg_short_damage_rate;
    Index: src/map/script.c
    ===================================================================
    --- src/map/script.c    (revision 16162)
    +++ src/map/script.c    (working copy)
    @@ -15859,23 +15859,26 @@
            return 0;
        }
    
    -    for( i = 0; i < MAX_PARTY; i++ )
    -        if( (pl_sd = p->data[i].sd) )
    -            if(map_id2bl(pl_sd->bl.id)){
    -                if(pl_sd->status.base_level < min){
    +    for( i = 0; i < MAX_PARTY; i++ ){
    +        if( (pl_sd = p->data[i].sd ) && map_id2bl( pl_sd->bl.id ) ){
    +            if( pl_sd->status.base_level < min || pl_sd->status.base_level > max ){
    +                if( battle_config.instance_official ){
    +                    continue;
    +                }else{
                        script_pushint(st, 0);
    -                    return 0;
    -                }else if(pl_sd->status.base_level > max){
    -                    script_pushint(st, 0);
                        return 0;
                    }
    -                    c++;
    +            }else{
    +                c++;
                }
    +        }
    +    }
    
        if(c < amount){
            script_pushint(st, 0); // Not enough Members in the Party to join Instance.
    -    }else    
    +    }else{
            script_pushint(st, 1);
    +    }
    
        return 0;
    }
    

  17. @Project:

    I'm currently adding LUA support. The idea of using lua files was a great step by Gravity, the only pitfall is that those files are messed up and it's pretty hard to keep compatibility with old and new client versions. For example: Take a look into "lua files/admin" and "lua files/datainfo". I haven't tracked down if the original client dropped "lua files/admin" and uses "lua files/datainfo" instead (especially for the function ReqJobName). Those in the admin folder have wrong display names and have probably been used when the data was placed in msgstringtable, while the jobnames in the datainfo folder are split into man and woman tables, using translations for spain?

    The probably best solution would be to recreate custom lua files that are clean and structured. This would, indeed, create the need of merging information from official lua files into the custom files. But this doesn't really matter since the official files have to be reversed anyway. Any thoughts?

    Personally I would say that creating custom lua files would be the best and cleanest solution, since there are some features that gravity's lua files don't include. For me it would be the best to stay at a single sort of text data structured files and not to mix up all of those.

    I would create some kind of interface that gives you some kind of needed methods like:

    String getJobname( int id );

    String getItemname( int id );

    String getItemdescription( int id );

    String getItemiconpath( int id );

    String getItemspritepath( int id );

    ...

    Then I would implement it in the "official" way and the way, that you decide to go. Personally I would like to see no XML and LUA files in the client, but something like a SQLite database behind the settings and/or the client informations. I would also include some kind of inititialization functionality for this interface so that the possibility to check whether the required data is existing and like that you could even provide the server owners the possibility to store the latest item infos on their server and the client downloads it at startup. What do you think of that?

  18. malufett to create GH memorial need party 2 o more... but it isn't necessary that are connected...once created even if I add other people can access.... other example is a the labyrinth forest fog ( bifrost).

    I wondered about that part. Ziu do you also know, if all the (online) players in the party have to meet the requirements? Because as I experienced on fRO, they mustn't.

    I've posted a bug report yesterday, you can read it here: http://rathena.org/board/tracker/issue-5780-instance-check-party/

×
×
  • Create New...