Jump to content
  • 0

Help me add item exception OnPCDieEvent: nighmare mode


Question

Posted

This script will drop 1 item from your Inventory when die.

I want to input list of Item that not affected by this script.

-	script	nightmaremode	-1,{
	
	OnPCDieEvent:
		if (countitem(7773) >= 1) end;
		if (BaseLevel < 40) end;
		//if ( strcharinfo(3) != "moc_fild12" ) end; // set your map
		//if ( pkpoints < 100 ) end; // decide on the pk points
		getinventorylist;
		if ( !@inventorylist_count ) end;
		.@r = rand( @inventorylist_count );
		delitem2 @inventorylist_id[.@r], @inventorylist_amount[.@r], @inventorylist_identify[.@r], @inventorylist_refine[.@r], @inventorylist_attribute[.@r], @inventorylist_card1[.@r], @inventorylist_card2[.@r], @inventorylist_card3[.@r], @inventorylist_card4[.@r];
		getmapxy .@map$, .@x, .@y, 0;
		makeitem2 @inventorylist_id[.@r], @inventorylist_amount[.@r], .@map$, .@x, .@y, @inventorylist_identify[.@r], @inventorylist_refine[.@r], @inventorylist_attribute[.@r], @inventorylist_card1[.@r], @inventorylist_card2[.@r], @inventorylist_card3[.@r], @inventorylist_card4[.@r];
		end;
	}

 

7 answers to this question

Recommended Posts

  • 1
Posted

Try this one. I didn't test it though

-	script	nightmaremode	-1,{
	
	OnPCDieEvent:
		if (countitem(7773) >= 1) end;
		if (BaseLevel < 40) end;
		//if ( strcharinfo(3) != "moc_fild12" ) end; // set your map
		//if ( pkpoints < 100 ) end; // decide on the pk points
		getinventorylist;
		if ( !@inventorylist_count ) end;
		.@r = rand( @inventorylist_count );
		for( .@i = 0; .@i < .size; .@i++ ) {
			if( @inventorylist_id[.@r] == .Blacklist[.@i] )
				end;
		}
		delitem2 @inventorylist_id[.@r], @inventorylist_amount[.@r], @inventorylist_identify[.@r], @inventorylist_refine[.@r], @inventorylist_attribute[.@r], @inventorylist_card1[.@r], @inventorylist_card2[.@r], @inventorylist_card3[.@r], @inventorylist_card4[.@r];
		getmapxy .@map$, .@x, .@y, 0;
		makeitem2 @inventorylist_id[.@r], @inventorylist_amount[.@r], .@map$, .@x, .@y, @inventorylist_identify[.@r], @inventorylist_refine[.@r], @inventorylist_attribute[.@r], @inventorylist_card1[.@r], @inventorylist_card2[.@r], @inventorylist_card3[.@r], @inventorylist_card4[.@r];
		end;

OnInit:
	setarray .Blacklist, 5112,5113,5114; // ID's that are not affected by the script
	.size = getarraysize(.Blacklist);
	end;
}

 

  • Upvote 1
  • 0
Posted
5 hours ago, Technoken said:

Try this one. I didn't test it though


-	script	nightmaremode	-1,{
	
	OnPCDieEvent:
		if (countitem(7773) >= 1) end;
		if (BaseLevel < 40) end;
		//if ( strcharinfo(3) != "moc_fild12" ) end; // set your map
		//if ( pkpoints < 100 ) end; // decide on the pk points
		getinventorylist;
		if ( !@inventorylist_count ) end;
		.@r = rand( @inventorylist_count );
		for( .@i = 0; .@i < .size; .@i++ ) {
			if( @inventorylist_id[.@r] == .Blacklist[.@i] )
				end;
		}
		delitem2 @inventorylist_id[.@r], @inventorylist_amount[.@r], @inventorylist_identify[.@r], @inventorylist_refine[.@r], @inventorylist_attribute[.@r], @inventorylist_card1[.@r], @inventorylist_card2[.@r], @inventorylist_card3[.@r], @inventorylist_card4[.@r];
		getmapxy .@map$, .@x, .@y, 0;
		makeitem2 @inventorylist_id[.@r], @inventorylist_amount[.@r], .@map$, .@x, .@y, @inventorylist_identify[.@r], @inventorylist_refine[.@r], @inventorylist_attribute[.@r], @inventorylist_card1[.@r], @inventorylist_card2[.@r], @inventorylist_card3[.@r], @inventorylist_card4[.@r];
		end;

OnInit:
	setarray .Blacklist, 5112,5113,5114; // ID's that are not affected by the script
	.size = getarraysize(.Blacklist);
	end;
}

 

 

Thank you very much for your script it works. It's really a BIG Help for me, I appreciate it.

but the side effect is when you got many blacklist item is decreasing the percentage of dropping Item.

all in all good job/thx

  • 0
Posted
4 hours ago, Erio-chan said:

Thank you very much for your script it works. It's really a BIG Help for me, I appreciate it.

but the side effect is when you got many blacklist item is decreasing the percentage of dropping Item.

all in all good job/thx

I don't see anything that will decrease the percentage of dropping an item. 

for( .@i = 0; .@i < .size; .@i++ ) {
			if( @inventorylist_id[.@r] == .Blacklist[.@i] )
				end;
}

^ this part will only check if the random item picked from inventory is in the .Blacklist.

  • 1
Posted

@Technoken because script will stop the script when detected blacklist items, hence the player will not drop anything even if they have other non-blacklisted items with them.

@Erio-chan you can try this. Not the ideal way, but should be workable.

-	script	nightmaremode	-1,{
	
	OnInit:
		.blacklist$ = "501,502,503,504,505";
		end;
		
	OnPCDieEvent:
		if (countitem(7773) >= 1) end;
		if (BaseLevel < 40) end;
		//if ( strcharinfo(3) != "moc_fild12" ) end; // set your map
		//if ( pkpoints < 100 ) end; // decide on the pk points
		getinventorylist;
		.@size = (@inventorylist_count-1);
		for ( .@i = .@size; .@i >= 0; .@i--) {
			if (compare(","+.blacklist$+",", ","+@inventorylist_id[.@i]+",")) {
				deletearray @inventorylist_id[.@i],1;
				deletearray @inventorylist_amount[.@i],1;
				deletearray @inventorylist_identify[.@i],1;
				deletearray @inventorylist_refine[.@i],1;
				deletearray @inventorylist_attribute[.@i],1;
				deletearray @inventorylist_card1[.@i],1;
				deletearray @inventorylist_card2[.@i],1;
				deletearray @inventorylist_card3[.@i],1;
				deletearray @inventorylist_card4[.@i],1;
				.@size--;
			}
		}
		if (.@size > 0) {
			.@r = rand(.@size);
			delitem2 @inventorylist_id[.@r], @inventorylist_amount[.@r], @inventorylist_identify[.@r], @inventorylist_refine[.@r], @inventorylist_attribute[.@r], @inventorylist_card1[.@r], @inventorylist_card2[.@r], @inventorylist_card3[.@r], @inventorylist_card4[.@r];
			getmapxy .@map$, .@x, .@y, 0;
			makeitem2 @inventorylist_id[.@r], @inventorylist_amount[.@r], .@map$, .@x, .@y, @inventorylist_identify[.@r], @inventorylist_refine[.@r], @inventorylist_attribute[.@r], @inventorylist_card1[.@r], @inventorylist_card2[.@r], @inventorylist_card3[.@r], @inventorylist_card4[.@r];	
		}
		end;
	}

 

  • Upvote 1
  • 0
Posted
15 hours ago, Emistry said:

@Technoken because script will stop the script when detected blacklist items, hence the player will not drop anything even if they have other non-blacklisted items with them.

@Erio-chan you can try this. Not the ideal way, but should be workable.


-	script	nightmaremode	-1,{
	
	OnInit:
		.blacklist$ = "501,502,503,504,505";
		end;
		
	OnPCDieEvent:
		if (countitem(7773) >= 1) end;
		if (BaseLevel < 40) end;
		//if ( strcharinfo(3) != "moc_fild12" ) end; // set your map
		//if ( pkpoints < 100 ) end; // decide on the pk points
		getinventorylist;
		.@size = (@inventorylist_count-1);
		for ( .@i = .@size; .@i >= 0; .@i--) {
			if (compare(","+.blacklist$+",", ","+@inventorylist_id[.@i]+",")) {
				deletearray @inventorylist_id[.@i],1;
				deletearray @inventorylist_amount[.@i],1;
				deletearray @inventorylist_identify[.@i],1;
				deletearray @inventorylist_refine[.@i],1;
				deletearray @inventorylist_attribute[.@i],1;
				deletearray @inventorylist_card1[.@i],1;
				deletearray @inventorylist_card2[.@i],1;
				deletearray @inventorylist_card3[.@i],1;
				deletearray @inventorylist_card4[.@i],1;
				.@size--;
			}
		}
		if (.@size > 0) {
			.@r = rand(.@size);
			delitem2 @inventorylist_id[.@r], @inventorylist_amount[.@r], @inventorylist_identify[.@r], @inventorylist_refine[.@r], @inventorylist_attribute[.@r], @inventorylist_card1[.@r], @inventorylist_card2[.@r], @inventorylist_card3[.@r], @inventorylist_card4[.@r];
			getmapxy .@map$, .@x, .@y, 0;
			makeitem2 @inventorylist_id[.@r], @inventorylist_amount[.@r], .@map$, .@x, .@y, @inventorylist_identify[.@r], @inventorylist_refine[.@r], @inventorylist_attribute[.@r], @inventorylist_card1[.@r], @inventorylist_card2[.@r], @inventorylist_card3[.@r], @inventorylist_card4[.@r];	
		}
		end;
	}

 

Thank you @Emistry its PERFECT!!! I love it! /lv/thx

  • 0
Posted

Hmmm I like that compare feature... implode an array with commas... and prefix string with starting and ending commas... check against ,#, smart move...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...