Jump to content

hendra814

Members
  • Posts

    1240
  • Joined

  • Last visited

  • Days Won

    17

Posts posted by hendra814

  1. i want to share my custom world boss, please try it

    Welgaia,128,96,4	script	World Boss	123,{
    @_count = (.monster_kill_requirement - $world_boss_counter);
    mes "[ World Boss ]";
    mes "Status :" +($world_boss_active == 1?"^00FF00Active^000000":"^FF0000Inactive^000000");
    mes "Kill Remaining - [ ^0000FF"+$count+"^000000 ]";
    mes "=============================";
    mes "Reward:";
    mes "<ITEM>World Boss Reward<INFO>7539</INFO></ITEM>";
    end;
    
    OnNPCKillEvent:
    	if($world_boss_active == 1) end;
    		$world_boss_counter += 1;
    		if($world_boss_counter == .monster_kill_requirement){ 
    			donpcevent "World Boss::OnSummon";
    			}
    		end;
    
    OnSummon:
    	setarray .bc_city$[0],"alberta","aldebaran","geffen","izlude","morocc","payon","prontera","new_zone03";
    	setarray .bc_monster[0],"1917","1885","1874","1871","1832","1802","1785","1779","1768","1751","1734","1719","1708","1688","1685","1658","1651","1650","1649","1648","1647","1646","1630","1623","1583","1511","1502","1492","1418","1399","1389","1373","1312","1272","1252","1251","1190","1159","1157","1150","1147","1115","1112","1087","1086","1059","1046","1038","2202";
    	set .@city,rand(0,getarraysize(.bc_city$)-1);
    	set .@mvp,rand(0,getarraysize(.bc_monster)-1);
    	$world_boss_active = 1;
    	announce "Danger! "+.bc_city$[.@city]+" under attack by MvP!!",bc_all; //announce and end
    	monster .bc_city$[.@city],0,0,"City Attacker",.bc_monster[.@mvp],1,"World Boss::OnBossKill";
    	end;
    	
    OnBossKill:
    	announce "Congratulation to "+strcharinfo(0)+", for save the city "+.bc_city$[.@city]+" !",bc_all;
    	$world_boss_active = 0;
    	$world_boss_counter = 0;
    	getitem 7539,10;
    	end;
    		
    OnInit:
    	.monster_kill_requirement = 1000000;
    	freeloop(1);
    	while(1){
    		$count = (.monster_kill_requirement - $world_boss_counter);
    		waitingroom "Kill Left : ["+$count+"]",0;
    		sleep 1000; //= 1 Second Refresh
    		delwaitingroom;
    	}
    	freeloop(0);
    	end;
    }

     

  2. 7 hours ago, MicromeX said:

    i try it but same error with your screenshot picture, i cant apply patch

    are you already tried this file?

    On 6/1/2024 at 10:07 PM, PercyNPC said:

    It working.

    But it walk like a dumb.

    Anyone can modify it to make it walk straight until it stuck and then try another path? Or make it choose more further point. Not random walking around same point.

    This is my diff for last rA I just pull yesterday.

    I'm not a coder. Just combined everything I read from this topic and read the code then apply it manually. I just googled how to made this patch file and want to share.

    I can read the code to analysis how it work but can't write the code by myself. xD

    @tack.patch 7.19 kB · 38 downloads

     

  3. 2 hours ago, rdee said:

    Okay, I'm pretty sure I figured it out. I went and made several tweaks to Ragno's script so it matches the way bounty boards currently function in iRO, as well as added scripts for all available bounty boards. I checked the mob lists on all the bounty boards in iRO though I only turned in quests on some of them. Probably still needs testing to confirm the below is accurate.

    See below for a change log:

      Hide contents

    [2024-09-07] v2.0
    - Added all available bounty boards from wiki as well as what I had access to in iRO. Some boards need to be checked.
    - Updated all bounty boards to have quest notification on minimap. Some bounty boards in iRO are still missing this.
    - Added Umbala, this is broken on iRO however.
    - Fixed typos currently on iRO.
    - Adjusted bounty board dialogue to match latest iRO dialogue.
    - Changed function and removed inputs for specific town messages, older scripts won't be compatible.
      Removed MsgHuntPlace and MsgOutLevel input. These appear to have been removed from iRO.
      Removed base EXP and job EXP input. New input has mobid, questid and exp modifier.
    - EXP & job reward are now automatically calculated based on monster base exp & job exp.
    - EXP modifier is an arbitrary fraction of 8 multiplied against individual mob's quest reward. Usually is 6/8 but rarely it can be between 4/8 or 12/8.
    - Updated dialogue for checking and receiving awards based on iRO. Have not tested higher level iRO boards yet though.
    - Added functionality to receive a badge every 4 turn-ins. Uses three placeholder quests.
      Removed complete all option for quest turn-in. This appears to have been removed in iRO, but I haven't tested all boards yet.
    - Added exp overflow feature similar to iRO. Normal players receive up to 1 lvl + 98%, VIP receive up to 2 lvl + 98%.
    - Zeny is now automatically calculated based on monster level and not a flat reward. 

    Current issues:
    - Bounty boards in iRO stop showing an available quest once you accept them all, but this script will still show it. 
      This could be manually input as a checked within an OnInit on each bounty board script but there'd be dozens. 
      Looking for a way to incorporate this into the function itself without using SQL or source code...
    - I spot-checked a few quests against EXP/JOB rewards in iRO for their EXP modifier, but a bunch of EXP modifiers I haven't yet.
      Mostly used the available values on the wiki to derive these.
    - Unable to confirm the correct quest ID's for the placeholder quests, so I took 3 questid's currently marked in iRO as placeholder that aren't used in rAthena.
    - Mob name is not currently showing in quest text when killing a mob.

    The formula from iRO wiki is essentially correct. I spot checked some boards in iRO and played around with excel until I was able to produce the quest and job XP using the formula below:

    QuestXP=Floor(MOB\_BASEXP,2)*150*EXP\_Modifier

    The EXP modifier term appears to be some sort of fraction of 8. Comparing the quest XP from the iro bounty board wiki as well as the results I seen play-testing iRO, this is almost always 6/8. It does vary between different mobs and different boards though. I haven't been able to determine if this is derived from a stat on the mob itself or was arbitrarily chosen. A little disappointed I couldn't get away from complete automation of quest XP, but this is at least closer. 

    Some other notes:

    - The bounty board quests in iRO are definitely derived from base mob XP. This can be tested against XP manuals, VIP status, holiday server rates, etc. 

    - The above also showed that on iRO chaos which has 2X rates (default) that the mob XP rate and quest XP rate are multiplicative and you'll actually receive 4X per bounty board turn in.

     

    iro_bounty_boards_v2.0.rar 39.76 kB · 0 downloads

    thank you very much for this update.

  4. On 9/4/2024 at 5:31 AM, MicromeX said:

    how to apply this patch?

     

    rename the file with .patch extention

    right click on the file pick review/apply single patch

    image.png.a44c9cd603a4cebb3127e567d8e2bfcc.png

     

    go to your rathena server root folder and select it

    image.png.4cec609072ac099176c588fa77f54321.png

     

    but for this patch file i check have issue like this

    image.thumb.png.95326ee3416846537450c044d44d2fc6.png

     

    try @PercyNPC file, show like this, click on path all items and then save, last recompile your rathena
    image.thumb.png.b080883d2f7089375ce5401b8a007990.png

     

  5. 20 hours ago, EAJ_BASEMASK said:

    It literally says you don't have the mesitemlink update your emulator.
    or replace one of those mesitemlink or itemlink
    or alternative.

     

    function	script	ITEM_INFO	{
    	.@item = getarg(0);
    	.@itemname$ = getitemname(.@item);
    	if( .@itemname$ != "null" ) {
    		.@itemslot = getitemslots(.@item);
    		if( .@itemslot )
    			.@itemname$ = sprintf("%s [%d]", .@itemname$, .@itemslot);
    	}
    	else
    		.@itemname$ = "Unknown Item";
    	if( PACKETVER >= 20150729 )
    		return sprintf("<ITEM>%s<INFO>%d</INFO></ITEM>", .@itemname$, .@item);
    	else if( PACKETVER >= 20130130 )
    		return sprintf("<ITEMLINK>%s<INFO>%d</INFO></ITEMLINK>", .@itemname$, .@item);
    	else
    		return .@itemname$;
    }


     

    thanks for the information, now working with lastest script in the first post

  6. 1 hour ago, Waldrich said:

    Sorry, I didn't import the yml, I imported the sql only.

    I used sql from the upgrade folder, I used this code, and whenever I try to load mob_db_re.sql it still generates the error. I loaded all sql from 0 and it still persists.   😞

    try drop your mob_db_re sql table and then reimport mob_db_re.sql file

  7. 1 hour ago, Waldrich said:

    Hi, I did what you said, it solved several errors but gave me others, even because when importing db/re/mob_db.yml it generated the image error.

    Capturadetela2024-08-14234139.png.1d678bf6a27e39a995a51a41a6ab27cd.png

    try import mob_db_re.sql first at sql-files folder

  8. 2 hours ago, kittypryde said:

    Hello I'm using this warper npc script: https://github.com/rathena/rathena/blob/master/npc/custom/warper.txt

    I'd like to seek assistance with modifying the script so that the town warps will cost 2,000 zeny and the dungeon warps will cost 5,000 zeny. Also I'd like to know how to make it free for VIPs.

    I was able to put town warp cost by adding this:

    function Go {
    	if (select("Pay 20k Zeny", "Cancel") == 2) close3;
    	if (Zeny < 20000) {
    		mes "You don't have enough Zeny.";
    		close3;
    	}
    	Zeny -= 20000;
    	close2;
    	set lastwarp$, getarg(0);
    	set lastwarpx, getarg(1,0);
    	set lastwarpy, getarg(2,0);
    	warp getarg(0),getarg(1,0),getarg(2,0);
    	end;
    }

    But I'd like to know how I can make it so that dungeon warps will cost 5,000 zeny. And is there any modification to the script that will make it so that all dungeon warps will be redirected to only 1st floor of the dungeon?

     

    Thank you.

    For this part "s there any modification to the script that will make it so that all dungeon warps will be redirected to only 1st floor of the dungeon?"

    OnInit:
    	OnTimer0050:
    		showscript "Warper & Storage", getnpcid(0);
    		initnpctimer;
    	.Satan_Morocc = true;	//	false will enable moc_fild 4,5,6,8,9,10,14,15 while disable moc_fild 20,21,22 Default is true.
    	.OnlyFirstFld = false;	//	true will teleport to the first level of the Fields  Default is false.
    	.OnlyFirstDun = false;	//	true will teleport to the first level of the Dungeons  Default is false.

    set .OnlyFirstDun into true

  9. 48 minutes ago, Stooke said:

    Do i need to use older client version to be full classic like 99/70 trans no 3rd job. or just set it in server side?

    if not using custom item equipment the answer is yes, i recomended you using old client.

  10. 57 minutes ago, GoldRoger said:

    Anyone know how to add this script?..first login.. player need to put security code..to prevent deal,buy,sell and drop item..

    try use this script

    //===== rAthena Script =======================================
    //= Account Management System
    //===== By: ==================================================
    //= Patskie
    //===== Current Version: =====================================
    //= 1.1
    //===== Compatible With: =====================================
    //= rAthena SVN
    //===== Description: =========================================
    //= Simple and useful script to boost the capabilities of 
    //= players to manage their account without going into the 
    //= control panel.
    //= 1.0 Initial Release
    //= 1.1 Remove unnecessary variables
    //============================================================
    
    -	script	Char Information	-1,{
    
    	OnInit:
    		bindatcmd("account",strnpcinfo(3)+ "::OnAccount");
    		end;
    
    	OnPCLoginEvent: 
    		if (#finalpassword$ != "") goto P_insert;
    		else end;
    
    	P_insert:
    		sc_start sc_berserk, 1000000000, 1;
    		mes "^55AA88Account System^000000";
    		mes "Please enter your locker password";
    		
    		next;
    		input @insertlp$;
    		if (@insertlp$ == #finalpassword$) goto P_pass;
    		mes "^55AA88Account System^000000";
    		mes "Invalid password!";
    		next;
    		mes "^55AA88Account System^000000";
    		mes "Forgot Password?(Y/N)";
    		next;
    		input @askfp$;
    		next;
    		if ((@askfp$ == "Y") || (@askfp$ == "y")) {
    			mes "^55AA88Account System^000000";
    			mes "Ask the administrator to retrieve your password";
    			next;
    			mes "^55AA88Account System^000000";
    			mes "Bye!";
    			atcommand "@kick "+strcharinfo(0);
    			end;
    		} else if ((@askfp$ == "N") || (@askfp$ == "n")) {
    			mes "^55AA88Account System^000000";
    			mes "Try again!";
    			next;
    			input @insertlp$;
    			next;
    			if (@insertlp$ == #finalpassword$) goto P_pass;
    			mes "^55AA88Account System^000000";
    			mes "Invalid password. Bye!";
    			next;
    			atcommand "@kick "+strcharinfo(0);
    			end;	
    		} else {
    			mes "^55AA88Account System^000000";
    			mes "Invalid Choice. Bye!";
    			next;
    			atcommand "@kick "+strcharinfo(0);
    			end;
    		}
    
    	P_pass:
    		sc_end sc_berserk;
    		end;
    
    	OnAccount:
    		switch(prompt("My Account:Change Mail:Change Birthday:Who's Online:Set Password:Delete Password:View Character:Exit")) {
    			case 1: 
    				query_sql "SELECT `userid` , `email` , `logincount` , `last_ip` , `birthdate` FROM `login` WHERE `account_id` = '"+getcharid(3)+"'",@user$,@email$,@login,@last_ip$,@birthdate$;
    				mes "^55AA88Account System^000000";
    				mes "Account Username: " + @user$;
    				mes "Account ID: " + getcharid(3);
    				mes "E-Mail: " + @email$;
    				mes "Login Count: " + @login;
    				mes "IP Address: " + @last_ip$;
    				mes "Birthday: " + @birthdate$;
    				end;
    			case 2:
    				query_sql "SELECT `email` FROM `login` WHERE `account_id` = '"+getcharid(3)+"'",@old_email$;
    				mes "^55AA88Account System^000000";
    				mes "Input the new e-mail you want";
    				input @new_mail$;
    				mes "Old e-mail: " +@old_email$;
    				mes "New e-mail: " +@new_mail$;
    				mes " ";
    				mes "Is that correct?";
    				next;
    				if(select("Yes:No") - 1) {
    					mes "^55AA88Account System^000000";
    					mes "Next time, make a faster decision";
    					end;
    				} else {
    					mes "^55AA88Account System^000000";
    					mes "Your e-mail will be changed now";
    					next;
    					query_sql "UPDATE `login` SET `email` = '"+escape_sql(@new_mail$)+"' WHERE `account_id` = '"+getcharid(3)+"'";
    					mes "^55AA88Account System^000000";
    					mes "Done!";
    					end;
    				}
    			case 3:
    				query_sql "select birthdate from login where account_id = "+ getcharid(3), .@birthdate$;
    				mes "^55AA88Account System^000000";
    				mes "Well tell me your new birthdate - format 0000-00-00";
    				mes "Example 2018-12-31";
    				input .@string$;
    				next;
    					explode( .@tmp$, .@string$, "-" );
    					if( getarraysize( .@tmp$ ) != 3 ||
    						getstrlen(.@tmp$[0]) != 4 || atoi(.@tmp$[0]) < 1 ||
    						getstrlen(.@tmp$[1]) != 2 || atoi(.@tmp$[1]) < 1 ||
    						getstrlen(.@tmp$[2]) != 2 || atoi(.@tmp$[2]) < 1 ) {	
    					mes "wrong format bye";
    					end;
    					}
    				query_sql "update login set birthdate = '"+ escape_sql( .@string$ ) +"' where account_id = "+ getcharid(3);
    				mes "done";
    				end;
    			case 4:
    				query_sql "SELECT `name` , `class` FROM `char` WHERE `online` = '1'", .@name$, .@class;
    				mes "^55AA88Account System^000000";
    				mes "-----------------------------------";
    				mes "Online Users: " + getusers(1);
    				mes "-----------------------------------";
    				for( set .@a,0; .@a < getarraysize(.@name$); set .@a,.@a + 1)
    					mes .@name$[.@a]+ " | Job: " +jobname(.@class[.@a]);
    					mes "-----------------------------------";
    				set .@count, .@count + 128;
    				end;
    			case 5:
    				if (#finalpassword$ != "") {
    					mes "^55AA88Account System^000000";
    					mes "You already have your account password. Delete it first before setting a new password";
    					end;
    				}
    				mes "^55AA88Account System^000000";
    				mes "Do you want to set a password for your account?";
    				next;
    				if(select("Yes:No") - 1) {
    					mes "^55AA88Account System^000000";
    					mes "Next time, make a faster decision";
    					end;
    				} else {
    					sc_start sc_berserk, 1000000000, 1;
    					mes "^55AA88Account System^000000";
    					mes "Input your password here. Note that this is CASE SENSITIVE.";
    					next;
    					input @pw$;
    					next;
    					mes "^55AA88Account System^000000";
    					mes "Confirm your password";
    					next;
    					input @accountvpw$;
    					next;
    					if (@accountvpw$ != @pw$) {
    						mes "^55AA88Account System^000000";
    						mes "The verification password that you had entered is incorrect";
    						sc_end sc_berserk;
    						end;
    					} else {
    						mes "^55AA88Account System^000000";
    						mes "Thank you. Please remember the password you had setted. I will ask for it again everytime you login";
    						set #finalpassword$,@pw$;
    						sc_end sc_berserk;
    						end;
    					}
    				}
    				end;
    			case 6:
    				if (#finalpassword$ == "") {
    					mes "^55AA88Account System^000000";
    					mes "You do not have a password to delete";
    					end;
    				}
    				mes "^55AA88Account System^000000";
    				mes "Please enter your current password";
    				next;
    				input @cpassword$;
    				next;
    				if (@cpassword$ != #finalpassword$) {
    					mes "^55AA88Account System^000000";
    					mes "Invalid Password!";
    					end;
    				} else {
    					mes "^55AA88Account System^000000";
    					mes "Are you sure you want to delete your password?";
    					next;
    					if(select("Yes:No") - 1) {
    						mes "^55AA88Account System^000000";
    						mes "Next time, make a faster decision";
    						end;
    					} else {
    						mes "^55AA88Account System^000000";
    						mes "Done!";
    						set #finalpassword$,"";
    						end;
    					}
    				}
    			case 7:
    				mes "Choose a character, if you";
    				mes "want to change something.";
    				query_sql "SELECT `char_num` , `name` , `class` , `base_level` , `job_level` , `zeny` , `str` , `agi` , `vit` , `int` , `dex` , `luk` , `last_map` , `last_x` , `last_y` , `save_map` , `save_x` , `save_y` FROM `char` WHERE `account_id` = '"+getcharid(3)+"' ORDER BY `base_level` DESC",@char_num,@name$,@class,@base_level,@job_level,@zeny,@str,@agi,@vit,@int,@dex,@luk,@last_map$,@last_x,@last_y,@save_map$,@save_x,@save_y;
    				set @menu$,"";
    				mes " ";
    				set @menu$,"- " + @name$[0] + "";
    				mes "^FF0000"+@name$[0]+"^000000";
    				mes "---------------------";
    				mes "[Base/Job: " + @base_level[0] + "/" + @job_level[0] + "]";
    				mes "(Class: " + jobname(@class[0]) + ")";
    				mes "=====================";
    				for( set @a,1; @a < getarraysize(@name$); set @a,@a + 1) {
    					mes "^FF0000"+@name$[@a]+"^000000";
    					mes "---------------------";
    					mes "[Base/Job: " + @base_level[@a] + "/" + @job_level[@a] + "]";
    					mes "(Class: " + jobname(@class[@a]) + ")";
    					mes "=====================";
    					set @menu$,@menu$ + ":- " + @name$[@a] + "";
    				}
    				next;
    
    				if((prompt(@menu$) - getarraysize(@name$)) > 0) {
    					end;
    				} else {
    					set @m,@menu - 1;
    					mes "^55AA88Account System^000000";
    					mes "You have chosen:";
    					mes "^FF0000"+@name$[@m]+"^000000";
    					mes "Base/Job: " + @base_level[@m] + "/" + @job_level[@m];
    					mes "Class: " + jobname(@class[@m]);
    					mes "Zeny: " + @zeny[@m];
    					mes " ";
    					mes "Strenght: " + @str[@m];
    					mes "Agility: " + @agi[@m];
    					mes "Vitality: " + @vit[@m];
    					mes "Intelligence: " + @int[@m];
    					mes "Dexterity: " + @dex[@m];
    					mes "Luck: " + @luk[@m];
    					mes " ";
    					mes "Position:";
    					mes "Current Map: " + @last_map$[@m];
    					mes "Cooardinates x: " + @last_x[@m] + ", y: " + @last_y[@m];
    					mes " ";
    					mes "Savepoint:";
    					mes "Map: "+ @save_map$[@m] + " x: " + @save_x[@m] + ", y: " + @save_y[@m];
    					mes "What do you want to do?";
    					next;
    					switch(select("Reset Position:Reset Style:Reset Equip:Nothing")) {
    						case 1:
    							mes "^55AA88Account System^000000";
    							query_sql "SELECT `online` FROM `char` WHERE `name` = '"+escape_sql(@name$[@m])+"'",@online;
    							if(@online) {
    								mes "I'm sorry, but I can't reset the";
    								mes "position of the chosen character";
    								mes "while you are logged-in on it.";
    								end;
    							}
    							mes "I will reset the position now.";
    							query_sql "UPDATE `char` SET `last_map` =  '"+@save_map$[@m]+"' , `last_x` = '"+@save_x[@m]+"' , `last_y` = '"+@save_y[@m]+"' WHERE `name` = '"+escape_sql(@name$[@m])+"'";
    							end;
    						case 2:
    							mes "^55AA88Account System^000000";
    							mes "This will reset your";
    							mes "whole style.";
    							next;
    							if(select("Proceed:Stop!!") - 1) {
    								mes "^55AA88Account System^000000";
    								mes "Next time, make a faster decision";
    								end;
    								end;
    							} else {
    								mes "^55AA88Account System^000000";
    								query_sql "SELECT `online` FROM `char` WHERE `name` = '"+escape_sql(@name$[@m])+"'",@online;
    								if(@online) {
    									mes "I'm sorry, but I can't reset the";
    									mes "style of the chosen character";
    									mes "while you are logged-in on it.";
    									end;
    								}
    								query_sql "UPDATE `char` SET `hair` , `hair_color` , `clothes_color` = '0' , '0' , '0' WHERE `name` = '"+escape_sql(@name$[@m])+"'";	
    								mes "Your request has been completed.";
    								end;
    							}
    						case 3:
    							mes "^55AA88Account System^000000";
    							mes "Wanna reset your Equip?";
    							if(select("Yes, please:No, thanks") - 1) {
    								end;
    							} else {
    								next;
    								mes "^55AA88Account System^000000";
    								query_sql "SELECT `online` FROM `char` WHERE `name` = '"+escape_sql(@name$[@m])+"'",@online;
    								if(@online) {
    									mes "I'm sorry, but I can't reset";
    									mes "your equipment of this character";
    									mes "while you are logged-in on it.";
    									end;
    								}
    								mes "I will start now.";
    								query_sql "UPDATE `inventory` SET `equip` = '0' WHERE `char_id` = '"+getcharid(0,escape_sql(@name$[@m]))+"'";
    								query_sql "UPDATE `char` SET `weapon` = '0' , `shield` = '0' , `head_top` = '0' , `head_mid` = '0' , `head_bottom`  = '0' WHERE `name` = '"+escape_sql(@name$[@m])+"'";
    								next;
    								mes "^55AA88Account System^000000";
    								mes "Your request has been completed.";
    								end;
    							}
    						case 4:
    							mes "^55AA88Account System^000000";
    							mes "Okay, Bye!";
    							end;	
    					}
    				} 
    			case 8:
    				mes "^55AA88Account System^000000";
    				mes "Okay, Bye!";
    				end;
    		}
    }

     

  11. 6 hours ago, Topzin said:

    Bro removed the smicolon and have the same error 😕
    image.thumb.png.bb63b1fe64f55e94a26eb25e1e708eb1.png

    try remove ; sign at the end of all this

    bossnia_01,0,0,0,0 monster Poring  1002,70,0,0,0;
    bossnia_02,0,0,0,0 monster Poring  1002,70,0,0,0;
    bossnia_03,0,0,0,0 monster Poring  1002,70,0,0,0;
    bossnia_04,0,0,0,0 monster Poring  1002,70,0,0,0;

     

×
×
  • Create New...