Jump to content

AinsLord

Members
  • Posts

    582
  • Joined

  • Last visited

Posts posted by AinsLord

  1. On 4/11/2022 at 9:49 PM, Hitman Monkey said:

    holy cow! it works like magic!!! thank you so much, you never know how happy i am right now, i am working on this for a week, but finally.... thank you so much!!!

    and one more question, my reward stat is gone when i reset stats at npc, is there a way to recover my stat?

    but then again thank you for this ❤️ appreciate it so mucchhhhhhh!!!!

    go here conf/battle/exp.conf 

    find this 

    use_statpoint_table: no

    check it if yes or no i forgot

  2. On 4/7/2022 at 9:01 AM, Hitman Monkey said:

    how to change the max level requirements on your script sir? my offline server is 250/70

    use this code

    prontera,141,179,5	script	Rebirth System	531,{
    function checkItem;			// check if player have all item required
    function colorItemrequired;	// color the text. Red : not enough item, green otherwise
    function deleteItem;		// delete all items required
    function displayItemneed;	// display all items need at start
    function getItemReward;		// give the items reward
    //function weightreq;			// check if your current weight is highter than weight high novice
    
    
    	.@eac = eaclass();
    	if ( num_rebirth == .reset_max ) {
    		mes "You can only rebirth x"+ .reset_max +".";
    		emotion e_gasp;
    		close;
    	}
    	else if( BaseLevel < 255 || JobLevel < 120 || ( !( .@eac&EAJL_2 ) || !Upper ) && ( Class != Job_Ninja && Class != Job_Gunslinger && Class != Job_Soul_Linker && Class != Job_Star_Gladiator) ) {
    		mes "You must be rebirth max level/max job level.";
    		close;
    	}
    
    	mes "Items need :";
    	displayItemneed();
    	next;
    
    	switch( select( "^777777~ Rebirth", "~ Informations", "~ Rebirth ranking", "~ Good bye^000000" ) ) {
    		case 1:
    			checkItem();
    			deleteItem();
    			break;
    		case 2:
    			mes "You can only rebirth ^ff0000x"+ .reset_max +"^000000. You already rebirth ^ff0000x"+ num_rebirth +"^000000.";
    			mes "Each rebirth you get ^ff0000"+ .num_status +"^000000 status points and after ^ff0000"+ .change_reward +"^000000 rebirth, you get only some items.";
    			close;
    		case 4:
    			mes "Bye.";
    			close;
    		case 3:
    			mes "TOP 50 of rebirth.";
    			mes "Name  -  Number of rebirth";
    			.@size = query_sql( "select `name`, `num_rebirth` from `rebirth_system` order by `num_rebirth` desc limit 50", .@name$, .@value );
    			if( .@size ) {
    				for( .@i = 0; .@i < .@size; .@i++ )
    					mes "^777777"+ ( .@i +1 ) +"^000000 : "+ .@name$[.@i] +" : ^FF0000"+ .@value[.@i] +"^000000";
    			}
    			else
    				mes "^0000ff* the list is empty *^000000";
    			close;
    	}
    	num_rebirth += 1;
    	if ( Upper ) {	// just in case the user change the setting...
    		lastJob = roclass( .@eac&EAJ_UPPERMASK );
    		jobchange Job_Novice_High;
    	}
    	else
    		jobchange Job_Novice;
    	resetlvl 1;
    	if ( num_rebirth < .change_reward ) {
    		if ( Class == Job_Novice ) StatusPoint = 48;
    		StatusPoint = StatusPoint + .num_status * num_rebirth;
    	}
    	else {
    		StatusPoint = StatusPoint + .num_status * .change_reward;
    		getItemReward();
    	query_sql "insert into `rebirth_system` ( `account_id`, `name`, `num_rebirth`, `last_ip` ) select "+ getcharid(3) +", '"+ escape_sql( strcharinfo(0) ) +"', '"+ num_rebirth +"',`login`.`last_ip` from `login` where `login`.`account_id` = "+ getcharid(3) +" on duplicate key update `rebirth_system`.`num_rebirth` = `rebirth_system`.`num_rebirth` +1";
    	announce "[ Rebirth system ] : "+ strcharinfo(0) +" Successfully Rebirth!", 0;
    	close;
    
    }
    
    function checkItem {
    	for ( ; .@i < .size_item; .@i += 2 )
    		if ( countitem( .item_req[.@i] ) < .item_req[ .@i+1 ] + num_rebirth ) {
    			mes "You don't have enought "+ getitemname( .item_req[.@i] ) +". ^ff0000["+ countitem( .item_req[.@i] ) +"/"+ ( .item_req[ .@i+1 ] + num_rebirth ) +"]^000000";
    			close;
    		}
    	if ( num_rebirth >= .change_reward )
    		if ( .add_item_req[1] + num_rebirth - .change_reward > countitem( .add_item_req[0] ) ) {
    			mes "You don't have enought "+ getitemname( .add_item_req[0] ) +". ^ff0000["+ countitem( .add_item_req[0] ) +"/"+ ( .add_item_req[1] + num_rebirth - .change_reward ) +"]^000000";
    			close;
    		}
    	return;
    }
    
    function colorItemrequired {
    	if ( countitem( .item_req[ getarg(0) ] ) < .item_req[ getarg(0)+1 ] + num_rebirth ) return "^ff0000";
    	return "^00ff00";
    }
    
    function deleteItem {
    	for ( ; .@i < .size_item; .@i += 2 )
    		delitem .item_req[.@i], ( .item_req[ .@i+1 ] + num_rebirth );
    	if ( num_rebirth >= .change_reward )
    		delitem .add_item_req[0], ( .add_item_req[1] + num_rebirth - .change_reward );
    	return;
    }
    
    function displayItemneed {
    	for ( ; .@i < .size_item; .@i += 2 )
    		mes colorItemrequired( .@i ) +" - x"+ ( .item_req[ .@i+1 ] + num_rebirth ) +" "+ getitemname( .item_req[.@i] );
    	if ( num_rebirth >= .change_reward ) {
    		if ( .add_item_req[1] + num_rebirth - .change_reward > countitem( .add_item_req[0] ) )
    			.@color$ = "^ff0000";
    		else
    			.@color$ = "^00ff00";
    		mes .@color$ +"- x"+ ( .add_item_req[1] + ( num_rebirth - .change_reward ) ) +" "+ getitemname( .add_item_req[0] );
    	}
    	return;
    }
    
    function getItemReward {
    	for ( ; .@i < .size_reward; .@i += 2 )
    		getitem .reward[.@i], .reward[ .@i+1 ];
    	return;
    }
    
    function weightreq {
    	if ( Weight > 20000 ) {
    		mes "You have too much items on you. Your weight will be too high after rebirth.";
    		close;
    	}
    	return;
    }
    
    OnInit:
    	.reset_max = 200;		// how much reset max
    	.change_reward = 150;	// after 30 rebirth, change reward
    	.num_status = 10;		// + X number of status points
    
    // item required <item ID>, <number>
    	setarray .item_req, 7179, 50,
    						7227, 50,
    						969, 300;
    	.size_item = getarraysize( .item_req );
    
    // additionnal items after rebirth >> .change_reward
    // <item ID>, <number>
    	setarray .add_item_req, 7179, 100;
    
    // rewards <item ID>, <number>
    	setarray .reward, 674, 50;
    	.size_reward = getarraysize( .reward );
    	end;
    }

    and look for this part

    else if( BaseLevel < 255 || JobLevel < 120 ||
  3. On 4/10/2022 at 3:55 PM, monody0093 said:

    are you still updating your blacklist? if so can you share it? I have copied your blacklist as of now, if you don't mind.

    ill check

    thats my most recent since then but ill try to check if theres new mini/mvp 

  4. 16 hours ago, EIysium said:

    Glad you can solve ;)!

    What hairstyle is not showing? you mean after 30 hairstyle doesn't show right? 

    If you have max hairstyle to 100 you probably get that error because hairstyle n°100 is for pets so the max hairstyle supported is 99.

    im not getting errors

    its like from 30-99 is the same hairstyle dunno why

    i followed all the necessary files where to put

    still not showing

  5. 30 minutes ago, EIysium said:

    Can you upload mount/head sprite? i tested and works fine.

    image.png.73a255ad1c5a0533c02c601bbf6f38d1.png

    image.png.41a3c7276dfa23028521815765b7134b.png

    is this the one?

    coz just female novice have that kind of issue

    dunno why

    edit i fixed it i used the sprite from the data.grf and merge it in my grf

    thanks for the help 🙂

    now my only proble is adding this custom hairstyle its not showing from 30 to 100 XD

    data.rar

  6. 15 hours ago, Royr said:


    Hey there! i tried working this request last night of course made from scratch, but not sure if this is enough.. I could think of possibly abused in this bound feature(s).
    I made some PREVIEW if this what you wanted:
    https://streamable.com/zdx9fq

    This requires: delitemidx
    I added some Blacklist Features so you could block some item(s) you want.

    yea somehow similar to this one and i cant find any sad

    the one that i found is like bound item ID then the req then the output box

    item inside the box is like listed in the item restrict txt file

    a bit hassle if one by one adding the item

    its like will require certain item/zeny before returning back as a box

     

    and

    for 

    23 hours ago, mrfizi said:

    Just make the item box with bound item. Then just make the script change the same item with the box with the same bound item.

    I found the same question you answer in here:

    yea thats what i actually done the problem is the script i provided was single item changer only

    that means i can only change 1 bound item

  7. so i found this script here

    -	script	asdfasdf	-1,{
    	mes "[ Trade ]";
    	mes "Need "+getitemname(.req_itm)+" x"+.req_amt;
    	menu "Yes",-;
    	if(countitem(.req_itm) < .req_amt || countitem(.bnd_itm) < 1){
    		mes "No pods";
    		mes "No card";
    		close;
    	}
    	mes "Got pods";
    	delitem .req_itm,.req_amt;
    	getitem .get_itm,1;
    	close;
    OnInit:
    	.bnd_itm = 503;
    	.req_itm = 501;
    	.req_amt = 1000;
    	.get_itm = 502;
    end;
    }

    is there some way to make this script like read the item that is account bounded

    or make this like i can add multiple items 

    what i supposedly planning is like

    an item is account bounded then character will go to the NPC

    and the NPC will ask certain items to revert it to box and be traded

    since account bound items are not tradeable

    thanks in advance

  8. is there like accumulative type of daily login script
    example:

    days 7  login reward is battle manual
    so day1 to day6 i logged in perfectly
    then 7days i skipped it
    then i logged in day 8
    i still get the day 7 reward thou i wont get the day 8 reward

    thanks i hope my example is quite understanding hahah

    TIA

  9. im just wondering if there is like an NPC/Script

    that can turn the character bound item to

    a like box to be traded

    ex: bounded sword the player just need to talk to NPC and

    the NPC will require certain amount of item to

    make it like sealed box of sword

    thanks in advance ❤️

    i just found this script here

    prontera,147,174,6	script	Test	620,{
    
    	mes "[ Trade ]";
    	mes "Need "+getitemname(.req_itm)+" x"+.req_amt;
    	menu "Yes",-;
    	if(countitem(.req_itm) < .req_amt || countitem(.bnd_itm) < 1){
    		mes "No pods";
    		mes "No card";
    		close;
    	}
    	mes "Got pods";
    	delitem .req_itm,.req_amt;
    	getitem .get_itm,1;
    	close;
    OnInit:
    	.bnd_itm = 1201;
    	.req_itm = 501;
    	.req_amt = 1;
    	.get_itm = 502;
    end;
    }

    how can i add like multiple item to this script

    ty

  10. 3 hours ago, Angeluz said:

    Try this

    prontera,143,173,5	script	Level Reset	757,{
    	if (BaseLevel < 255||JobLevel < 120 ) {
    		mes "You need to be at least level 255 and Job level 120.";
    	}
    	if (RESET_COUNT >= 20 )
    	{
    		mes "I'm sorry, but you can't use this npc again";
    		close;
    	}
    	else if (select("Reset", "cancel") == 1) {
    		resetlvl 1;
    		RESET_COUNT++;
    		StatusPoint += (RESET_COUNT * 10); // free 10 status point per reset.
    		
    		if (RESET_COUNT && RESET_COUNT % 10 == 0) {
    			getitem 512, 10; // every 10 reset get apple.
    		}
    	}
    	end;
    }

     

    TYSM ❤️

  11. here the script im using

    prontera,143,173,5	script	Level Reset	757,{
    	if (BaseLevel < 255||JobLevel < 120 ) {
    		mes "You need to be at least level 255 and Job level 120.";
    	}
    	else if (select("Reset", "cancel") == 1) {
    		resetlvl 1;
    		RESET_COUNT++;
    		StatusPoint += (RESET_COUNT * 10); // free 10 status point per reset.
    		
    		if (RESET_COUNT && RESET_COUNT % 10 == 0) {
    			getitem 512, 10; // every 10 reset get apple.
    		}
    	}
    	end;
    }

    is there a possible way to limit like 20 resets only per character

    ty in advance ❤️

  12. 21 hours ago, sader1992 said:

    The groups/ids are per npc , you can use the same item in a different npc copy however you cannot use the same item in the same npc in a different group.

     

    also i need more information about when this happen to you , at any step of the npc ?

    the image you provided the next line is just select , so I don't think this where you are getting the issue

    i found out why it hangs it happens because of my phpmyadmin database

    thanks i love your script

  13. im using this sir @sader1992 at 1st it was working fine then several days after when i tried to put options after selecting

    proceed this happens it hangs cant move cant even TP nor chat i need to reboot the whole VPS to bring it back

    i dunno what happen i didnt change any codes or add anything

    i just created another NPC of it for addition ID option i forgot that ID 1 has the same item on the 

    other NPC that has ID 2 like this

    NPC 1

    //Creating Group id 1 , with Hat items inside.
    	AddGroup(1,2220,2221,2222,2223);

    NPC 2

    //Creating Group id 1 , with Hat items inside.
    	AddGroup(2,2223);

    will that affect this 

    DO NOT REUSE THE SAME ITEM ID IN DIFFERENT GROUP!

    image.png.4dcb8aabb991ef19d9f871f4f9bb977c.png

  14. it was working before but now when i tried it again seems after this part

    image.png.4dcb8aabb991ef19d9f871f4f9bb977c.png

    its not proceeding at all cant event teleport 

    what seems to be the problem no error in the console

    here the code

    //===== rAthena Script =======================================
    //= saders All in one Random Option Script
    //= Free Script!!!!
    //===== By: ==================================================
    //= sader1992
    //= https://sader1992.com/
    //= https://rathena.org/board/profile/30766-sader1992/
    //= https://sader1992.com/?page=item&item=54
    //= For more , check out here >
    //= https://sader1992.com/?page=ra_services
    //= https://sader1992.com/?page=store
    //= https://rathena.org/board/profile/30766-sader1992/content/?type=downloads_file
    //===== Current Version: =====================================
    //= 1.0
    //===== Compatible With: ===================================== 
    //= rAthena Project
    //https://rathena.org/board/files/file/4309-all-in-one-random-options-script/
    //https://github.com/sader1992/sader_scripts
    //===== Update Log: =========================================
    //= Version 1.0 Creating the script.
    //===== Description: =========================================
    //= This is a Highly Custumizable random option script
    //= you can reuse the script by just creating a new file with different setting!.
    //= read and understand the settings.
    //============================================================
    prontera,127,170,7	script	AllInOne_RandomOption	444,{
    	disable_items; function rnd;
    	switch(select("Insert Random Options:Allowed Items List")){
    		case 1:
    			mes "You must equip the item to appear here!";
    			for(.@i=0;.@i<EQI_MAX;.@i++){
    				if(getequipisequiped(.@i)) {
    					.@m1$ += (inarray(.item_list,getequipid(.@i)) != -1?"^11AD09":"^F73831") + F_getpositionname(.@i) + "-[" + getequipname(.@i) + "]^000000";
    					.@exist = true;
    				}
    				.@m1$ += ":";
    			}
    			if(!.@exist){
    				mes "You have to equip the item you want to insert the random options into!.";
    				end;
    			}
    			.@eq = select(.@m1$) -1;
    			clear;
    			.@id = getequipid(.@eq);
    			if(inarray(.item_list,.@id) == -1){
    				mes "Sorry , I cannot deal with this item!";
    				end;
    			}
    			.@gid = .it[.@id];
    			if(!.@gid){
    				mes "Something went wrong!";
    				end;
    			}
    			if(!getequiprandomoption(.@eq,0,ROA_ID)){
    				.@zeny = .nz[.@gid];
    				.@cashpoint = .nk[.@gid];
    				.@costumpoint = .nc[.@gid];
    				copyarray(.@item,getd(".ni_" + .@gid),getarraysize(getd(".ni_" + .@gid)));
    				copyarray(.@amount,getd(".na_" + .@gid),getarraysize(getd(".na_" + .@gid)));
    			}else{
    				if(!.g_reroll[.@gid]){
    					mes "Sorry , i cannot reroll the random options in this item!";
    					end;
    				}
    				.@zeny = .rz[.@gid];
    				.@cashpoint = .rk[.@gid];
    				.@costumpoint = .rc[.@gid];
    				copyarray(.@item,getd(".ri_" + .@gid),getarraysize(getd(".ri_" + .@gid)));
    				copyarray(.@amount,getd(".ra_" + .@gid),getarraysize(getd(".ra_" + .@gid)));
    			}
    			mes "Selected Item [" + getequipname(.@eq) + "]";
    			mes "==== Cost ====";
    			if(.@zeny) mes "Zeny: " + .@zeny;
    			if(.@cashpoint) mes "CashPoint: " + .@cashpoint;
    			if(.@costumpoint) mes .CustomPointsName$ + ": " + .@costumpoint;
    			for(.@i=0;.@i<getarraysize(.@item);.@i++){
    				mes "(" + .@amount[.@i] + ") " + getitemname(.@item[.@i]);
    			}
    			if(!.KeepItemData){
    				mes "^E01E00You will loss all the refine and cards in the item if you continue.^000000";
    			}
    			mes "Would you like to continue?";
    			if(select("Yes:No") == 2){
    				clear;
    				mes "Ok, see you next time!";
    				end;
    			}
    			clear;
    			if(Zeny < .@zeny){
    				mes "You don't have " + .@zeny + " Zeny";
    				.@close = true;
    			}
    			if(#CASHPOINTS < .@cashpoint){
    				mes "You don't have " + .@cashpoint + " CashPoints";
    				.@close = true;
    			}
    			if(getd(.CustomPointsVariable$) < .@costumpoint){
    				mes "You don't have " + .@costumpoint + " " + .CustomPointsName$;
    				.@close = true;
    			}
    			for(.@i=0;.@i<getarraysize(.@item);.@i++){
    				if(countitem(.@item[.@i]) < .@amount[.@i]){
    					mes "You don't have (" + .@amount[.@i] + ") " + getitemname(.@item[.@i]);
    					.@close = true;
    				}
    			}
    			if(.@close) end;
    			.@r = getequiprefinerycnt(.@eq);
    			for(.@i=0;.@i<4;.@i++){
    				if(getequipcardid(.@eq,.@i)){
    					setd "[email protected]" + .@i,getequipcardid(.@eq,.@i);
    					.@re[getarraysize(.@re)] = true;
    				}
    			}
    			copyarray(.@opt_id,getd(".ro_id_" + .@gid + "_0"),getarraysize(getd(".ro_id_" + .@gid + "_0")));
    			copyarray(.@opt_mn,getd(".ro_mn_" + .@gid + "_0"),getarraysize(getd(".ro_mn_" + .@gid + "_0")));
    			copyarray(.@opt_mx,getd(".ro_mx_" + .@gid + "_0"),getarraysize(getd(".ro_mx_" + .@gid + "_0")));
    			for(.@i=1;.@i<6;.@i++){
    				copyarray(getd("[email protected]_id" + .@i),getd(".ro_id_" + .@gid + "_" + .@i),getarraysize(getd(".ro_id_" + .@gid + "_" + .@i)));
    				copyarray(getd("[email protected]_mn" + .@i),getd(".ro_mn_" + .@gid + "_" + .@i),getarraysize(getd(".ro_mn_" + .@gid + "_" + .@i)));
    				copyarray(getd("[email protected]_mx" + .@i),getd(".ro_mx_" + .@gid + "_" + .@i),getarraysize(getd(".ro_mx_" + .@gid + "_" + .@i)));
    			}
    			for(.@i=1;.@i<6;.@i++){
    				if(rand(100) > getd(".s_" + .@i + "[" + .@gid + "]"))
    					break;
    				if(getd(".ro_id_" + .@gid + "_" + .@i)){
    					if(!getarraysize(getd("[email protected]_id" + .@i))) break;
    					.@ndx = rand(getarraysize(getd("[email protected]_id" + .@i)));
    					.@result_id = getd("[email protected]_id" + .@i + "[" + .@ndx + "]");
    					.@result_vl = rnd(getd("[email protected]_mn" + .@i + "[" + .@ndx + "]"),getd("[email protected]_mx" + .@i + "[" + .@ndx + "]"));
    					deletearray(getd("[email protected]_id" + .@i + "[" + .@ndx + "]"),1);
    					deletearray(getd("[email protected]_mn" + .@i + "[" + .@ndx + "]"),1);
    					deletearray(getd("[email protected]_mx" + .@i + "[" + .@ndx + "]"),1);
    				}else{
    					if(!.@opt_id) break;
    					.@ndx = rand(getarraysize(.@opt_id));
    					.@result_id = .@opt_id[.@ndx];
    					.@result_vl = rnd(.@opt_mn[.@ndx],.@opt_mx[.@ndx]);
    					if(!.g_reuse[.@gid]){
    						deletearray(.@opt_id[.@ndx],1);
    						deletearray(.@opt_mn[.@ndx],1);
    						deletearray(.@opt_mx[.@ndx],1);
    					}
    				}
    				if(.ex[.@result_id]){
    					for(.@i2=0;.@i2<getarraysize(.@r_id);.@i2++){
    						if(.ex[.@result_id] == .ex[.@r_id[.@i2]]){
    							.@reject = true;
    						}
    					}
    				}
    				if(!.@reject){
    					.@s1 = getarraysize(.@r_id);
    					.@r_id[.@s1] = .@result_id;
    					.@r_v[.@s1] = .@result_vl;
    				}else{
    					.@i--;
    					.@failsafe++;
    					if(.@failsafe > 50){
    						mes "Something went wrong , The server admin need to make sure that the config is done correctly!";
    						end;
    					}
    				}
    			}
    			if(Zeny < .@zeny) end;
    			if(#CASHPOINTS < .@cashpoint) end;
    			if(getd(.CustomPointsVariable$) < .@costumpoint) end;
    			for(.@i=0;.@i<getarraysize(.@item);.@i++){
    				if(countitem(.@item[.@i]) < .@amount[.@i]){
    					end;
    				}
    			}
    			// anti-hack
    			if (callfunc("F_IsEquipIDHack", .@eq, .@id) || callfunc("F_IsEquipCardHack", .@eq, .@c0, .@c1, .@c2, .@c3)) {
    				// anti-hack
    				emotion ET_FRET;
    				mes "Item Switch detected!";
    				end;
    			}
    			Zeny -= .@zeny;
    			#CASHPOINTS-= .@cashpoint;
    			setd(.CustomPointsVariable$,getd(.CustomPointsVariable$) - .@costumpoint);
    			for(.@i=0;.@i<getarraysize(.@item);.@i++){
    				delitem(.@item[.@i],.@amount[.@i]);
    			}
    			if(!.@r_id){
    				specialeffect2 EF_REFINEOK;
    				mes "Look Like you didn't get any random option, your luck is really bad!";
    				end;
    			}
    			delequip(.@eq);
    			specialeffect2 EF_REFINEOK;
    			if(.KeepItemData)
    				getitem3(.@id,1,1,.@r,0,.@c0,.@c1,.@c2,.@c3,.@r_id,.@r_v,.@null);
    			else
    				getitem3(.@id,1,1,0,0,0,0,0,0,.@r_id,.@r_v,.@null);
    			equip(.@id);
    			mes "Done!";
    		end;
    		
    		case 2:
    			mes "The list of the allowed items in this npc!";
    			for(.@i=0;.@i<getarraysize(.item_list);.@i++){
    				mes "<ITEM>" + getitemname(.item_list[.@i]) + "[" + getitemslots(.item_list[.@i]) + "]<INFO>" + .item_list[.@i] + "</INFO></ITEM>";
    				if(.@i >= 10 && !(.@i%10)) next;
    			}
    		end;
    	}
    end;
    
    	function	rnd	{
    		if(.HardBalance){
    			return rand(getarg(0),rand(getarg(0),getarg(1)));
    		}
    		return rand(getarg(0),getarg(1));
    	}
    
    	function	AddGroup	{
    		.@id = getarg(0);
    		for(.@i=1;.@i<getargcount();.@i++){
    			.it[getarg(.@i)] = .@id;
    			.item_list[getarraysize(.item_list)] = getarg(.@i);
    			
    		}
    		return;
    	}
    	
    	function	AddGroupOption	{
    		.@id = getarg(0);
    		.g_reroll[.@id] = getarg(1);
    		.g_reuse[.@id] = getarg(2);
    		return;
    	}
    	
    	function	AddGroupCost	{
    		.@id = getarg(0);
    		.nz[.@id] = getarg(1);
    		.nk[.@id] = getarg(2);
    		.nc[.@id] = getarg(3);
    		for(.@i=4;.@i<getargcount();.@i+=2){
    			.@s = getarraysize(getd(".ni_" + .@id));
    			setd(".ni_" + .@id + "[" + .@s + "]",getarg(.@i));
    			setd(".na_" + .@id + "[" + .@s + "]",getarg(.@i+1));
    		}
    		return;
    	}
    	
    	function	AddGroupReRollCost	{
    		.@id = getarg(0);
    		.rz[.@id] = getarg(1);
    		.rk[.@id] = getarg(2);
    		.rc[.@id] = getarg(3);
    		for(.@i=4;.@i<getargcount();.@i+=2){
    			.@s = getarraysize(getd(".ri_" + .@id));
    			setd(".ri_" + .@id + "[" + .@s + "]",getarg(.@i));
    			setd(".ra_" + .@id + "[" + .@s + "]",getarg(.@i+1));
    		}
    		return;
    	}
    	
    	function	AddGroupChance	{
    		.@id = getarg(0);
    		.s_1[.@id] = getarg(1);
    		.s_2[.@id] = getarg(2);
    		.s_3[.@id] = getarg(3);
    		.s_4[.@id] = getarg(4);
    		.s_5[.@id] = getarg(5);
    		return;
    	}
    	
    	function	AddOpt	{
    		.@id = getarg(0);
    		.@loc = getarg(1);
    		.@s = getarraysize(getd(".ro_id_" + .@id + "_" + .@loc));
    		setd(".ro_id_" + .@id + "_" + .@loc + "[" + .@s + "]",getarg(2));
    		setd(".ro_mn_" + .@id + "_" + .@loc + "[" + .@s + "]",getarg(3));
    		setd(".ro_mx_" + .@id + "_" + .@loc + "[" + .@s + "]",getarg(4));
    		return;
    	}
    	
    	function	AddExclusiveOpt	{
    		.@s1 = getarraysize(.exv);
    		.exv[.@s1] = true;
    		for(.@i=0;.@i<getargcount();.@i++){
    			.ex[getarg(.@i)] = .@s1;
    		}
    		return;
    	}
    
    OnInit:
    	.exv = true;//DO NOT REMOVE THIS.
    	.KeepItemData = true;//if this is 'false , the player will loss the refine+cards from the item when he use this npc.
    	.CustomPointsVariable$ = "#COSTUMPOINTS";//The variable name of the costum points.
    	.CustomPointsName$ = "Server RO Points";//The name of the costum points, this what the player will see.
    	.HardBalance = true;//if this is true , it would be much harder to get high value in the random option.
    	
    	
    	//AddGroup(<Group ID>,<ItemID>,<ItemID>,<ItemID>,<ItemID>,<ItemID>);
    	/*
    	AddGroup Doc
    		<Group ID> = a number between 1 and MAX_INT64
    		DO NOT REUSE THE GROUP ID IN THE SAME FILE CONFIG!
    		DO NOT REUSE THE SAME ITEM ID IN DIFFERENT GROUP!
    		will create a group id 
    		you can add as many as you want items inside a group.
    	*/
    	
    	//AddGroupOption(<Group ID>,<Allow ReRoll?true:false>,<Allow reuse already gotten option?true:false>,<Zeny Cost>,<CashPoint Cost>,<Custom Points Cost>,<Item1 ID Cost>,<Item1 Amount Cost>,<Item2 ID Cost>,<Item2 Amount Cost>,<....ETC>);
    	/*
    	AddGroupOption Doc
    		<Group ID> = A group id that is already created in AddGroup()!.
    		<Allow ReRoll?true:false> = allow reroll an item with random option or not
    		<Allow reuse already gotten option?true:false> = for exammple if you have str in the options and the player gor it , can he get it again in another slot?
    		
    	*/
    	
    	//AddGroupCost(<Group ID>,<Zeny Cost>,<CashPoint Cost>,<Custom Points Cost>,<Item1 ID Cost>,<Item1 Amount Cost>,<Item2 ID Cost>,<Item2 Amount Cost>,<....ETC>);
    	/*
    	AddGroupCost Doc
    		<Group ID> = A group id that is already created in AddGroup()!.
    		<Zeny Cost> = the zeny cost (can be 0)
    		<CashPoint Cost> = the cashpoints cost (can be 0)
    		<Custom Points Cost> = if you are using costum points in the script , check out .CustomPointsVariable$ and .CustomPointsName$ at the start of the script (can be 0)
    		<Item1 ID Cost> = the item cost
    		<Item1 Amount Cost> = the item amount cost
    		
    		You can use as many item,amount cost at the end of the function.
    	*/
    	
    	//AddGroupReRollCost(<Group ID>,<Zeny Cost>,<CashPoint Cost>,<Custom Points Cost>,<Item1 ID Cost>,<Item1 Amount Cost>,<Item2 ID Cost>,<Item2 Amount Cost>,<....ETC>);
    	/*
    	AddGroupReRollCost Doc
    		<Group ID> = A group id that is already created in AddGroup()!.
    		<Zeny Cost> = the zeny cost (can be 0)
    		<CashPoint Cost> = the cashpoints cost (can be 0)
    		<Custom Points Cost> = if you are using costum points in the script , check out .CustomPointsVariable$ and .CustomPointsName$ at the start of the script (can be 0)
    		<Item1 ID Cost> = the item cost
    		<Item1 Amount Cost> = the item amount cost
    		
    		You can use as many item,amount cost at the end of the function.
    	*/
    	
    	//AddGroupChance(<Group ID>,<1st Option Chance>,<2nd Option Chance>,<3rd Option Chance>,<4th Option Chance>,<5th Option Chance>);
    	/*
    	AddGroupChance Doc
    		<Group ID> = A group id that is already created in AddGroup()!.
    		<1st Option Chance> = the Chance to get one of the random options in the slot 1 (can be 0)
    		<2nd Option Chance> = the Chance to get one of the random options in the slot 2 (can be 0)
    		<3rd Option Chance> = the Chance to get one of the random options in the slot 3 (can be 0)
    		<4th Option Chance> = the Chance to get one of the random options in the slot 4 (can be 0)
    		<5th Option Chance> = the Chance to get one of the random options in the slot 5 (can be 0)
    		
    		Keep inmind that if the player didn't get lucky for example at the slot 2 , all the chances after will be ignored
    		you cannot skip a random option slot that would bug the game client.
    	*/
    	
    	//AddOpt(<Group ID>,<Location>,<Random Option ID>,<Minimum Value>,<Maximum Value>);
    	/*
    	AddOpt Doc
    		<Group ID> = A group id that is already created in AddGroup()!.
    		<Location> = you can spisfiy random option to a location from 1 to 5 , but you can use 0 , if you used 0 it will apply to all locations that doesn't have spisfied random options.
    		<Random Option ID> = random option id , you can use the id or the variable , check out the file /rathena/db/re/item_randomopt_db.yml
    		<Minimum Value> = the minimum value
    		<Maximum Value> = the maximum value
    	*/
    	
    	//AddExclusiveOpt(<Random Option ID>,<Random Option ID>,<Random Option ID>,<Random Option ID>,<Random Option ID>);
    	/*
    	AddExclusiveOpt Doc
    		this will help you to prevent a group of random opions typs in the same item in different slots
    		for example
    			RDMOPT_DAMAGE_PROPERTY_NOTHING_TARGET
    			RDMOPT_DAMAGE_PROPERTY_WATER_TARGET
    			RDMOPT_DAMAGE_PROPERTY_GROUND_TARGET
    			RDMOPT_DAMAGE_PROPERTY_FIRE_TARGET
    			RDMOPT_DAMAGE_PROPERTY_WIND_TARGET
    			RDMOPT_DAMAGE_PROPERTY_POISON_TARGET
    			RDMOPT_DAMAGE_PROPERTY_SAINT_TARGET
    			RDMOPT_DAMAGE_PROPERTY_DARKNESS_TARGET
    			RDMOPT_DAMAGE_PROPERTY_TELEKINESIS_TARGET
    			RDMOPT_DAMAGE_PROPERTY_UNDEAD_TARGET
    		if the player got 1 of them in a slot , he wont get another one to another slot
    	*/
    
    //Example!!!>
    //this is just an example , this script allow you to create any random option system you want.
    
    	//Creating Group id 1 , with Hat items inside.
    	AddGroup(1,2220,2221,2222,2223);
    	//Group id 1 Options
    	AddGroupOption(1,true,false);
    	//Group id 1 Cost
    	AddGroupCost(1,50,0,0,0,0,0,0);
    	//Group id 1 ReRoll Cost
    	AddGroupReRollCost(1,50,0,0,0,0,0,0);
    	//Group id 1 Chances.
    	AddGroupChance(1,100,100,100,100,100);
    	//Group id 1 Random Option List. location 0 mean all the slot locations
    	AddOpt(1,0,RDMOPT_VAR_STRAMOUNT,1,100);
    	AddOpt(1,0,RDMOPT_VAR_INTAMOUNT,1,100);
    	AddOpt(1,0,RDMOPT_VAR_VITAMOUNT,1,100);
    	AddOpt(1,0,RDMOPT_VAR_LUKAMOUNT,1,100);
    	AddOpt(1,0,RDMOPT_VAR_AGIAMOUNT,1,100);
    	AddOpt(1,0,RDMOPT_VAR_DEXAMOUNT,1,100);
    	AddOpt(1,0,RDMOPT_VAR_MAXHPPERCENT,1,100);
    	AddOpt(1,0,RDMOPT_VAR_MAXSPPERCENT,1,100);
    	//those enchantment you wont get unless in slot 5
    	AddOpt(1,5,RDMOPT_DAMAGE_PROPERTY_NOTHING_TARGET,1,100);
    	AddOpt(1,5,RDMOPT_DAMAGE_PROPERTY_WATER_TARGET,1,100);
    	AddOpt(1,5,RDMOPT_DAMAGE_PROPERTY_GROUND_TARGET,1,100);
    	AddOpt(1,5,RDMOPT_DAMAGE_PROPERTY_FIRE_TARGET,1,100);
    	AddOpt(1,5,RDMOPT_DAMAGE_PROPERTY_WIND_TARGET,1,100);
    	AddOpt(1,5,RDMOPT_DAMAGE_PROPERTY_POISON_TARGET,1,100);
    	AddOpt(1,5,RDMOPT_DAMAGE_PROPERTY_SAINT_TARGET,1,100);
    	AddOpt(1,5,RDMOPT_DAMAGE_PROPERTY_DARKNESS_TARGET,1,100);
    	AddOpt(1,5,RDMOPT_DAMAGE_PROPERTY_TELEKINESIS_TARGET,1,100);
    	AddOpt(1,5,RDMOPT_DAMAGE_PROPERTY_UNDEAD_TARGET,1,100);
    	
    	//this mean those random options cannot coexist in the same item!.
    	AddExclusiveOpt(RDMOPT_DAMAGE_PROPERTY_NOTHING_TARGET,
    			RDMOPT_DAMAGE_PROPERTY_WATER_TARGET,
    			RDMOPT_DAMAGE_PROPERTY_GROUND_TARGET,
    			RDMOPT_DAMAGE_PROPERTY_FIRE_TARGET,
    			RDMOPT_DAMAGE_PROPERTY_WIND_TARGET,
    			RDMOPT_DAMAGE_PROPERTY_POISON_TARGET,
    			RDMOPT_DAMAGE_PROPERTY_SAINT_TARGET,
    			RDMOPT_DAMAGE_PROPERTY_DARKNESS_TARGET,
    			RDMOPT_DAMAGE_PROPERTY_TELEKINESIS_TARGET,
    			RDMOPT_DAMAGE_PROPERTY_UNDEAD_TARGET);
    	
    
    end;
    
    }

    this is a work of @sader1992

     

    TIA ❤️

    EDIT: whole map server lags when i try to add option

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use and Privacy Policy.