Jump to content

Starfoxcat

Members
  • Posts

    23
  • Joined

  • Last visited

Posts posted by Starfoxcat

  1. Hello,,

    Firstly, I'm sorry for bringing this up back, but I haven't seen the real solution to this.

    To fix what @Tio Akimaasked and @AnnieRuru explained, it can be done in a very simple way.

    Head to script.cpp and in the "BUILDIN_FUNC(isequippedcnt)" section:

    change:

    Quote

    for (short k = 0; k < sd->inventory_data[index]->slots; k++) { 

    To:

    for (short k = 0; k < 4; k++) {

    It will make the isequippedcnt function to cease to ONLY check available card slots in an equipped item and FORCE it to always check all four slots whether they are closed or open.

    That number 4 above and the "smaller than" operator is meant to check the card0, card1, card2, and card3 in an item. (Card0 = 1st card slot, Card1 = 2nd card slot, and so on).

    By using that method, you will be able to use isequippedcnt function in an item that has cards in the closed card slots. This may be handy for those who use card/orb inserter NPC and still want to limit its abilities (eg. stacking Bigfoot card 4x = immune to insect because 30% x 4 = 120%).

    Don't forget to recompile the source files, using "Build Solution" option is fine. Or use "Rebuild Solution" if you don't really trust this method.

     

    PS:

    • Once again, sorry for bringing back an almost one-year-old post.
    • Lazy version to "find and replace" is in the attachment, download and overwrite your file with that one. Still, you will need to recompile the source files.
    • If you think this is helpful, please upvote so other members can really find this solution faster.

     

    Cheers, happy new year 2021.

    script.cpp

  2. 2 hours ago, Rizz said:

    Thanks your script worked well when I tested it but one feature isn't worked properly. The other member still get the item even they are died or in different screen.
    I got this notification in the emulator:
    [Error]: buildin_getitem: Nonexistant item 25276 requested.
    [Debug]: Source (NPC): PartyLoot (invisible/not on a map)

    You didn't say that you needed it when the members are close together (not in different screen). ?

    Mabuhay's script might work for you because he uses getmapxy and distance. ?

    About the console error, it means there is no Clean Bone (Item ID 25276) in your server, something you must check except if it's intentional.

  3. 22 minutes ago, Mabuhay said:
    
    OnNPCKillEvent:
    	if ( killedrid == 1002 ) {
    		getmapxy (.@map$, .@x, .@y, BL_PC);
    		getpartymember getcharid(1), 1;
    		getpartymember getcharid(1), 2;
    		for ( .@i = 0; .@i < $@partymembercount; ++.@i ) 
    		if ( isloggedin( $@partymemberaid[.@i], $@partymembercid[.@i] ) ) {
    			attachrid ( $@partymemberaid[.@i]);
    			getmapxy ( @map$, @x, @y, BL_PC );
    			if ( distance(.@x, .@y, @x, @y) > 20 && @map$ != .@map$ ) continue;
    			else  {
    				.@partymemberaid[.@c] = $@partymemberaid[.@i];
    				.@c++;
    			}
    		}
    		sleep 1;
    		getitem 607, 1, .@partymemberaid[rand(.@c)]; 
    	}
    	end;

    Untested

    That might work and simpler, ? but no possibility percentage for the item and it triggers even when you're alone (exploitable?). ?

    Can just change the if ( killedrid == 1002 ) { like my previous post above to make it triggers by more than one monster. ?

    EDIT:

    For the possibility, maybe we can change 

    getitem 607, 1, .@partymemberaid[rand(.@c)];

    TO:

    if(rand(100)<25) getitem 607, 1, .@partymemberaid[rand(.@c)]; // 25% of possibility

  4. 15 hours ago, Rizz said:

    EDIT: It seems the other party members still get the item even they are in different map. I killed the spore in pay fild08, other member in prontera also get the drop. Any suggestion for fixing this issue?

    All I can do so far:

    -	script	PartyLoot	-1,{
    
    OnNPCKillEvent:
    L_RESCAN:
    set .@map$,strcharinfo(3);
    if( killedrid == 1002 )||( killedrid == 1063 ){ // PORING & LUNATIC for the sake of easier testing.
    	if ( getcharid(1) ) {
    		getpartymember getcharid(1), 1;
    		getpartymember getcharid(1), 2;
    		for ( .@i = 0; .@i < $@partymembercount; .@i++ ) {
    			if ( isloggedin( $@partymemberaid[.@i], $@partymembercid[.@i] ) ) { // what happens if someone in the party member is offline =/
    				.@partymemberaid[.@c] = $@partymemberaid[.@i];
    				.@c++;
    			}
    		}	
    		set .@randc, rand(.@c);
    		if(attachrid($@partymemberaid[.@randc])) {
    			if(strcharinfo(3) == .@map$){
    				if(rand(100)<25)	getitem 25276, 1, .@partymemberaid[.@randc]; //CLEAN BONE, something that Porings wont ever have.
    				if(rand(100)<25)	getitem 7564, 1, .@partymemberaid[.@randc]; // ROTTEN MEAT, something that Porings wont ever have.
    				detachrid;
    			}
    		}
    		else if (attachrid($@partymemberaid[.@randc])) {
    			if(strcharinfo(3) != .@map$){
    				detachrid;
    				goto L_RESCAN;
    			}
    		}
    	}
    	else {
    		if(rand(100)<10)	getitem 607, 3;
    		if(rand(100)<10)	getitem 607, 3;
    	}
    }
    end;
    }

    Details of the script above:

    - It doesn't work when you're in a party, but you're alone. x That's why the script is called "PartyLoot" ?

    - It triggers when you kill Poring or Lunatic.

    - It shares items by the percentage (25%),  2 items to one lucky chosen member by random.

    - If the member is not at the same map as the killer, he will get skipped.

    And, at the moment, if you want more monsters to trigger, just add more ||( killedrid == <MONSTER ID> ) 

    example:

    set .@map$,strcharinfo(3);
    if( killedrid == 1002 )||( killedrid == 1063 )||( killedrid == 1064 )||( killedrid == 1065 ) {
    	if ( getcharid(1) ) {
    		getpartymember getcharid(1), 1;

    The "||" means "or", so that script means "If somebody kill 1002 or 1063 or 1064 or 1065, then do ...."

    Just don't miss the any curly opening bracket at the end of it "{"

    Of course if you get any error, just reply again this post.

    If it works, just edit the monster IDs and the item IDs.

  5. What I wrote intended to make that script triggers when you kill monsters which IDs written in the array.

    setarray .@moblist,    1014, 1015, <MOB ID>, <MOB ID>, <MOB ID and so on>;

    You put the whole these:

        setarray .@moblist,    1014, 1015; // LIST OF MOB ID
        set .@mobsize,getarraysize(.@moblist);
        set .@val,0;
    
        while (.@val <= .@mobsize) {
            set .@val,.@val+1;
            set .@moblist[.@val];

    below: 

    -	script	PartyLoot	-1,{
    OnNPCKillEvent:

    But it's not tested yet, and I don't know how to test it since you gave an incomplete script.

    • Upvote 1
  6. Hi,

    Did you mean this?

    ...\conf\battle\party.conf

    Quote

    // Method of distribution when item party share is enabled in a party:
    // 
    // 0: Normal (item goes to a random party member)
    // 1: Item Share is disabled for non-mob drops (player/pet drops)
    // 2: Round Robin (items are distributed evenly and in order among members)
    // 3: 1+2
    party_item_share_type: 2

    EDIT:
    Sorry I misread your question, wait a moment.

    EDIT:
    Maybe by the usage of array?

    Quote

        setarray .@moblist,    1014, 1015; // LIST OF MOB ID
        set .@mobsize,getarraysize(.@moblist);
        set .@val,0;

        while (.@val <= .@mobsize) {
            set .@val,.@val+1;
            set .@moblist[.@val];

    And change:

    if ( getmonsterinfo( killedrid, 1014 )

    to 

    if( killedrid == .@moblist[.@val] )

    It's not tested and I am not sure yet as my brain is a bit frozen by now (it's almost midnight here), and that script you've given is incomplete.

    My apologise if there is any mistake.

     

  7. Hi,

    Any screenshot of your logserv, charserv, and mapserv?

    Having "Pinging SQL server to keep connection alive..." for once awhile is normal, but if it keeps repeating several times in a minute, that's not normal.

    Ensure that your "login_server_id" and "login_server_pw" in inter_athena.conf file are the same as your mySQL username and password.

    Also ensure that your client version matches your server's packets.

  8. Hi,

    Is there any other error messages other than those map limit error messages if you scroll up/down your mapserver window?

    Usually the error message would be like "[ERROR] File Not Found : <dir> " or "Failed to connect to ..." or something like those.

    Source file that has something to do with the map limit is in src/common/mmo.h with this entry:

    Quote

    #define MAX_MAP_PER_SERVER 1500 /// Maximum amount of maps available on a server

     

    The easiest and quickest fix is re-download the whole new server files; and keep your configuration files and database from your old server.

  9. Hello,

    You probably need to edit Pre-renewal: \db\pre-re\item_combo_db.txt or Renewal: \db\re\item_combo_db.txt instead of editing its item_db.txt

    Or maybe try using a function call.

    function	script	F_HunterCardCombo	{
    	if (isequippedcnt(4178) == 1 )&&(isequippedcnt(4199) == 1 )&&(isequippedcnt(4234) == 1 )&&(isequippedcnt(4252) == 1 )&&(isequippedcnt(4297) == 1 ){
    		bonus bAgi,5;
    		bonus bDex,3;
    		bonus bLongAtkRate,20;
    		bonus bPerfectHitAddRate,20;
    		if(BaseClass==Job_Archer) {
    			bonus2 bExpAddRace,RC_Brute,5;
    			bonus2 bComaRace,RC_Brute,100;
    		}
    	}
    	else if (isequippedcnt(4178) >= 2 )&&(isequippedcnt(4199) >= 2 )&&(isequippedcnt(4234) >= 2 )&&(isequippedcnt(4252) >= 2 )&&(isequippedcnt(4297) >= 2 ){
    		bonus bAgi,5*2;
    		bonus bDex,3*2;
    		bonus bLongAtkRate,20*2;
    		bonus bPerfectHitAddRate,20*2;
    		if(BaseClass==Job_Archer) {
    			bonus2 bExpAddRace,RC_Brute,5*2;
    			bonus2 bComaRace,RC_Brute,100*2;
    		}
    	}
    	else if (isequippedcnt(4178) >= 3 )&&(isequippedcnt(4199) >= 3 )&&(isequippedcnt(4234) >= 3 )&&(isequippedcnt(4252) >= 3 )&&(isequippedcnt(4297) >= 3 ){
    		bonus bAgi,5*3;
    		bonus bDex,3*3;
    		bonus bLongAtkRate,20*3;
    		bonus bPerfectHitAddRate,20*3;
    		if(BaseClass==Job_Archer) {
    			bonus2 bExpAddRace,RC_Brute,5*3;
    			bonus2 bComaRace,RC_Brute,100*3;
    		}
    	}
    	else if (isequippedcnt(4178) >= 4 )&&(isequippedcnt(4199) >= 4 )&&(isequippedcnt(4234) >= 4 )&&(isequippedcnt(4252) >= 4 )&&(isequippedcnt(4297) >= 4 ){
    		bonus bAgi,5*4;
    		bonus bDex,3*4;
    		bonus bLongAtkRate,20*4;
    		bonus bPerfectHitAddRate,20*4;
    		if(BaseClass==Job_Archer) {
    			bonus2 bExpAddRace,RC_Brute,5*4;
    			bonus2 bComaRace,RC_Brute,100*4;
    		}
    	}
    	else {
    		bonus bAgi,5;
    		bonus bDex,3;
    		bonus bLongAtkRate,20;
    		bonus bPerfectHitAddRate,20;
    		if(BaseClass==Job_Archer) {
    			bonus2 bExpAddRace,RC_Brute,5;
    			bonus2 bComaRace,RC_Brute,100;
    		}
    	}
    }

    Copy and paste above into the notepad and "save as" to 

    npc/custom/huntercardcombo.txt

    And add this line in npc\scripts_custom.conf file:

    npc: npc/custom/huntercardcombo.txt

    ==================================================================

    And on Pre-renewal: \db\pre-re\item_combo_db.txt or Renewal: \db\re\item_combo_db.txt file.

    Find this and change:

    4178:4199:4234:4252:4297,{ bonus bAgi,5; bonus bDex,3; bonus bLongAtkRate,20; bonus bPerfectHitAddRate,20; if(BaseClass==Job_Archer) { bonus2 bExpAddRace,RC_Brute,5; bonus2 bComaRace,RC_Brute,100; } }

    To:

    4178:4199:4234:4252:4297,{ callfunc "F_HunterCardCombo"; }

    It's not tested yet, but it's worth trying. ?

    ========================================================================

    Once you know the pattern above as it is understandable, you might want to create for the other combos on your own.

    Just pay attention to anything that gives resistance / damage reduction buff,  for example, you might not want to 4x combo anything that gives 30% damage reduction to Orc.

    30% * 4 = 120%, it means you're invincible to Orc (100% damage reduction means invincible), something you don't want to have in your own server.

  10. On 9/2/2019 at 4:45 AM, XcentriC said:

    Hello Guys.. i just want to know if there are still hosting services for ragnarok that is active right now, for a low rate server that i am planning to launch thank you

    Hi,

    Just get a normal VPS, there are so many out there.

    Get VPS that is located (hosted) in your country or region for low ping purpose, or depends on your targeted players. For instance, if you want bunch of American (North American) players, get VPS. from USA.

    Be careful of choosing the machine specs, OS, and price.

    But before that, try to make your own server first and learn to make it open to public, because usually the support team only cares the things related to the network and VPS itself, not the things related to your server stuff.

  11. Hi,

    Try to check your sql-files/upgrades/ 

    and see these files: (contain mail_attachment)

    upgrade_20160814.sql

    upgrade_20170620.sql

    upgrade_20171001.sql

    Update the script if necessary.

    And make sure your charserv has rights to access to your database via firewall settings.

    It is also worth checking if your main.sql script is fully integrated with your char.cpp.

    Lastly, ensure your inter_athena.conf contains these: (Never edit these)

    // Char Database Tables
    char_db: char
    hotkey_db: hotkey
    scdata_db: sc_data
    cart_db: cart_inventory
    inventory_db: inventory
    charlog_db: charlog
    skill_db: skill
    interlog_db: interlog
    memo_db: memo
    guild_db: guild
    guild_alliance_db: guild_alliance
    guild_castle_db: guild_castle
    guild_expulsion_db: guild_expulsion
    guild_member_db: guild_member
    guild_skill_db: guild_skill
    guild_position_db: guild_position
    guild_storage_db: guild_storage
    party_db: party
    pet_db: pet
    friend_db: friends
    mail_db: mail
    mail_attachment_db: mail_attachments
    auction_db: auction
    quest_db: quest
    homunculus_db: homunculus
    skill_homunculus_db: skill_homunculus
    mercenary_db: mercenary
    mercenary_owner_db: mercenary_owner
    elemental_db: elemental
    skillcooldown_db: skillcooldown
    bonus_script_db: bonus_script
    acc_reg_num_table: acc_reg_num
    acc_reg_str_table: acc_reg_str
    char_reg_str_table: char_reg_str
    char_reg_num_table: char_reg_num
    clan_table: clan
    clan_alliance_table: clan_alliance

     

  12. On 5/10/2017 at 12:42 PM, Ninja said:
    
    // The rate at which a pet will become hungry. (Note 2)
    pet_hungry_delay_rate: 100

    You simply set this to 0 if you want to save yourself the trouble of doing source modification. Though this also means that pets in your server will never be hungry

    I'm sorry for bumping up this old post, but in case somebody is facing the same issue, setting this to 0 will make the pet hunger bar deplete even faster (no delay).

    Setting this to 200 will make the hunger rate goes down 2x slower, 300 to make it 3x slower, 2500 to make it 25x slower, and so on.

    Setting this to 100000 will make the hunger rate always stay full and the pet will never run away, but with 'never hungry' setting will also make the pet intimacy go down gradually because you will never have to feed them. If you insist to feed them when they're full, their intimacy will even be going lower and in worst case, dying.

    I personally use 2500.

  13. Hello,

    I don't really understand with what you're saying, but if you want to change the maximum HP of the players,

    go to ...\conf\battle\player.conf

    and change these values.

    Quote

    // Maximum HPs depending on base level. Default values are:
    // Lv 99:  330000
    // Lv150:  660000
    // Lv175: 1100000
    max_hp_lv99: 330000
    max_hp_lv150: 660000
    max_hp: 1100000

    // Maximum SP. (Default is 1000000)
    max_sp: 1000000

     

  14. Hi,

    The IP your mapserv.bat connecting to is unfamiliar to me. Seems like you inserted your public Singaporean IP address instead of your local IP address.

    If your server is local, open char_athena.conf, map_athena.conf, and login_athena conf, then put "//" at every IP configuration inside those files.

    Example:

    //login_ip: 127.0.0.1

    Let the server determines the IPs by itself.

  15. Hey,

    I came across with the same problem too by using the very updated server files and very recent mySQL 8.0,  but it appears to be working normally because my logserv refills those null entries with "0" automatically after some times playing.

    Try to remove those schemas, and rerun/re-execute those two SQL-Scripts (main and logs) again, then start your server, and just simply ignore those errors, create like two characters, play them a bit, logout, and re-login for a couple times, see whether if there's an error, missing items in inventories and storage, character levels and other information. I hope yours will work normally like mine.

    PS: What version is your MySQL, by the way?

  16. Hi,

    Have you tried to open and forward the ports via router? It's called Port Forwarding, or you can Google about it.

    But to sum up,  you need to open forward 6900 for the login port,  5121 for the map port, and 6121 for the char port.

    PLAN A

    A1.

    To do that, open your router configuration by using an internet browser (Microsoft Edge or Google Chrome, or any), and type 192.168.1.1. If it's blank or failing, try 192.168.10.1 or 192.168.1.2 or 10.0.1.1. If it still fails, open Command Prompt (RUN > cmd) and type ipconfig, and look at the IP address written at the Default Gateway. (Windows user)

    Make sure you know your router username and password, (it's both "admin" by default, if you don't know: Try to get them from your router packaging box, usually there's the username and password written, or you have to call your internet provider to ask the username and password.)

    Find "Port Forwarding" option (or any option similar to it), and forward the port 6900, 5121, and 6121. Then save or apply.

    To check whether it's open or not, go to https://ping.eu/port-chk/ and put your public IP address and each port above. If each port says open, you're then good to go to the next step.

    Remember, Public IP is different from your local IP. To know what your public IP is, just simply Google "what's my IP".

    A2.

    Go to your server files and open map_athena.conf and change //map_ip: xxx.xxx.xxx.xxx to map_ip: your public IP, and open char_athena.conf and change //char_ip: xxx.xxx.xxx.xxx to char_ip: (your public IP)

    Don't forget to remove the "//" on each above.

    A3.

    Go to your client files and find sclientinfo.xml, open it with notepad, and change the address to your public IP address. If you have clientinfo.xml, do the same (just in case).

    A4.

    To make sure everything is good, go to https://ping.eu/port-chk/ again and check your forwarded ports.

    And go to https://ping.eu/ping/ to ping your server. If it replies, try to login from different computer and different public IP.

    A5.

    Copy the client files and give them to your friends from different public IP. And play.

    I can't guarantee that it will be successful, but worth trying.

    Since most internet providers give its customers a dynamic public IP (which means your public IP changes over time), you will have to recheck your public IP address periodically and do step A2 and A3 if it is changed.

    If you have a domain, you can trick it to make it static alike.

    If it fails, you can use 3rd party application like Hamachi, but it's a bit slower. See PLAN B below. It's recommended if you want a much simpler method.

    PLAN B

    To download Hamachi, go to https://www.vpn.net

    B1.

    Open Hamachi, click the power button and type your desired Hamachi user name so your friends can identify you. Make sure it's turned on. It's actually all pretty much self-explanatory.

    B2.

    Click "Network" tab and click "Create a new network". (For Windows user, if there's a "network type" window popup appears, just choose "Public Network")

    Put any network name and password, just don't forget because it is what you are going to tell to your friends.

    B3.

    Do step A3 (not B3), but this time put your Hamachi IP address written on the Hamachi main window.

    B4.

    Copy the client files and give them to your friends. Ask your friend to connect to your Hamachi IP address, and play.

    =================

    Note for yourself:

    If you play from the same computer as your server, do A3/B3 but with address 127.0.0.1

    If you play from different computer but in the same router, do A3/B3 but with your server local IP address inserted (usually started with 192.168.xxx.xxx), to know your local IP address, go RUN > cmd and type ipconfig and look at IPv4 Address section, that's your local IP address. In this case, you must do it from your server computer to know the server local IP address.

    It's better to start the server NOT from the main computer of where your client is. And with RAM of 2 GB at least.

    To experts, correct me if there's a mistake.

  17. 3 hours ago, thopa said:

    npc is hide

    Hi,

    1. Just copy and paste that script onto a notepad and save it as TEST.txt in ...\npc\custom directory.

    2. Open scripts_custom.conf file in ...\npc directory, then edit and add this at the bottom:

    npc: npc/custom/TEST.txt

    3. Reload or restart your server.

×
×
  • Create New...