Jump to content
  • 0

Help me add item exception OnPCDieEvent: nighmare mode


Erio-chan

Question


  • Group:  Members
  • Topic Count:  35
  • Topics Per Day:  0.01
  • Content Count:  97
  • Reputation:   10
  • Joined:  07/23/16
  • Last Seen:  

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;
	}

 

Link to comment
Share on other sites

7 answers to this question

Recommended Posts

  • 1

  • Group:  Forum Moderator
  • Topic Count:  93
  • Topics Per Day:  0.02
  • Content Count:  10015
  • Reputation:   2348
  • Joined:  10/28/11
  • Last Seen:  

@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
Link to comment
Share on other sites

  • 1

  • Group:  Members
  • Topic Count:  27
  • Topics Per Day:  0.01
  • Content Count:  505
  • Reputation:   126
  • Joined:  04/04/16
  • Last Seen:  

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
Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  35
  • Topics Per Day:  0.01
  • Content Count:  97
  • Reputation:   10
  • Joined:  07/23/16
  • Last Seen:  

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

Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  27
  • Topics Per Day:  0.01
  • Content Count:  505
  • Reputation:   126
  • Joined:  04/04/16
  • Last Seen:  

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.

Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  27
  • Topics Per Day:  0.01
  • Content Count:  505
  • Reputation:   126
  • Joined:  04/04/16
  • Last Seen:  

@Emistry Lol yeah. What I thought is it would only run once and stop if the random item selected was in the blacklist./gawi

Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  35
  • Topics Per Day:  0.01
  • Content Count:  97
  • Reputation:   10
  • Joined:  07/23/16
  • Last Seen:  

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

Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  39
  • Topics Per Day:  0.01
  • Content Count:  615
  • Reputation:   201
  • Joined:  11/09/11
  • Last Seen:  

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

Link to comment
Share on other sites

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.

×
×
  • Create New...