summaryrefslogtreecommitdiff
path: root/npc/custom/itembind.txt
blob: f0e1284531bf1c149c34e67adbe85eb3a6be581c (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
//===== Hercules Script =======================================
//= Item Bind Script
//===== By: ==================================================
//= Akinari
//===== Compatible With: =====================================
//= Revision 17351+ (rAthena)
//= Revision 12949+ (Hercules)
//===== Description: =========================================
//= Item Bind Script
//= Allows users to pay a price to make an item bound to
//= Account, Character, or Guild
//============================================================

prontera,144,174,4	script	Bound Items	4_M_JP_MID,{

	mes "I can bind your items to your account, guild, or character"+((.bindprice)?" for a ^0000FF"+.bindprice+"^000000 zeny fee":"")+".";
	next;
	mes "With this, you can rest assured your items are safe.";
	next;
	mes "What would you like to do?";
	if(select("Bind", "Unbind") == 1) {
		if(Zeny < .bindprice) {
			mes "You don't have enough zeny to bind an item.";
			close;
		}
		mes "What kind of bind?";
		.@boundtype = 1 << (select("Account", "Guild", "Character")-1);
		if(.@boundtype == IBT_GUILD && (!getcharid(CHAR_ID_GUILD) || getguildinfo(GUILDINFO_MASTER_NAME, getcharid(CHAR_ID_GUILD)) != strcharinfo(PC_NAME))) {
			mes "In order for me to bind an item to a guild you must be the master of one.";
			close;
		}
		getinventorylist();
		for(.@i = 0; .@i < @inventorylist_count; .@i++) {
			//We only show the items that you allow to be bound
			//Allows equipment (default) or non-rental item
			if (@inventorylist_bound[.@i] || @inventorylist_expire[.@i])
				continue;
			.@itemtype = getiteminfo(@inventorylist_id[.@i], ITEMINFO_TYPE);
			if (((.allowbind & 1) != 0 && (.@itemtype == IT_WEAPON || .@itemtype == IT_ARMOR))
			 || ((.allowbind & 2) != 0 && (.@itemtype == IT_HEALING || .@itemtype == IT_USABLE || .@itemtype == IT_DELAYCONSUME || .@itemtype == IT_CASH))
			 || ((.allowbind & 4) != 0 && (.@itemtype == IT_ETC || .@itemtype == IT_CARD || .@itemtype == IT_PETEGG || .@itemtype == IT_PETARMOR || .@itemtype == IT_AMMO))
			) {
				set .@bindlist$, .@bindlist$ + ":" + getitemname(@inventorylist_id[.@i]) + " - " + @inventorylist_id[.@i];
				set .@bindlist[.@j],.@i;
				.@j++;
			}
		}
		.@item = .@bindlist[select(.@bindlist$)-2];
		next;
		mes "Before I continue, I want you to know I can't tell the difference between multiple items.  If you have a specific item you want bounded, please remove any duplicates from inventory.";
		if(select("I understand, continue", "Wait a minute") == 2) {
			next;
			mes "I'll be here when you're ready.";
			close;
		}
		next;
		mes "Are you sure you'd like to bind your "+ getitemname(@inventorylist_id[.@item]) +" to your "+.boundtypes$[.@boundtype]+"?";
		if(select("Yes", "No") == 1) {
			Zeny -= .bindprice;
			delitem2 @inventorylist_id[.@item],@inventorylist_amount[.@item],@inventorylist_identify[.@item],@inventorylist_refine[.@item],@inventorylist_attribute[.@item],@inventorylist_card1[.@item],@inventorylist_card2[.@item],@inventorylist_card3[.@item],@inventorylist_card4[.@item];
			getitembound2 @inventorylist_id[.@item],@inventorylist_amount[.@item],@inventorylist_identify[.@item],@inventorylist_refine[.@item],@inventorylist_attribute[.@item],@inventorylist_card1[.@item],@inventorylist_card2[.@item],@inventorylist_card3[.@item],@inventorylist_card4[.@item],.@boundtype;
			mes "All done!";
			if(.logbinds)
				logmes "Bound "+ @inventorylist_amount[.@item]+" "+@inventorylist_id[.@item]+" as "+.boundtypes$[.@boundtype]+" type.";
		}
	} else {
		if(!countbound()) {
			mes "You don't have any bound items in your inventory.  Not much I can do here.";
			close;
		}
		countbound(IBT_GUILD);
		if(.unbindprice) {
			mes "Unbinding an item has a fee of ^0000FF"+.unbindprice+"^000000 zeny.";
			if(Zeny < .unbindprice) {
				mes "You don't have enough to unbind an item.";
				close;
			}
		}
		getinventorylist();
		for(.@i = 0; .@i < @inventorylist_count; .@i++) {
			if(@inventorylist_bound[.@i]) {
				set .@bindlist$, .@bindlist$ + ":" + getitemname(@inventorylist_id[.@i]) + " - " + @inventorylist_id[.@i];
				set .@bindlist[.@j],.@i;
				.@j++;
			}
		}
		.@item = .@bindlist[select(.@bindlist$)-2];
		next;
		for(.@i = 0; .@i < getarraysize(@bound_items); .@i++) {
			if(@inventorylist_id[.@item] == @bound_items[.@i] &&
				(!getcharid(CHAR_ID_GUILD) || getguildinfo(GUILDINFO_MASTER_NAME, getcharid(CHAR_ID_GUILD)) != strcharinfo(PC_NAME))
			) {
				mes "I will only unbind guild bound items that the guild master requests.";
				close;
			}
		}
		mes "Before I continue, I want you to know I can't tell the difference between multiple items.  If you have a specific item you want unbounded, please remove any duplicates from inventory.";
		if(select("I understand, continue", "Wait a minute") == 2) {
			next;
			mes "I'll be here when you're ready.";
			close;
		}
		next;
		mes "Are you sure you'd like to unbind your "+ getitemname(@inventorylist_id[.@item]) +"?";
		if(select("Yes", "No") == 1) {
			Zeny -= .unbindprice;
			delitem2 @inventorylist_id[.@item],@inventorylist_amount[.@item],@inventorylist_identify[.@item],@inventorylist_refine[.@item],@inventorylist_attribute[.@item],@inventorylist_card1[.@item],@inventorylist_card2[.@item],@inventorylist_card3[.@item],@inventorylist_card4[.@item];
			getitem2 @inventorylist_id[.@item],@inventorylist_amount[.@item],@inventorylist_identify[.@item],@inventorylist_refine[.@item],@inventorylist_attribute[.@item],@inventorylist_card1[.@item],@inventorylist_card2[.@item],@inventorylist_card3[.@item],@inventorylist_card4[.@item];
			mes "All done!";
			if(.logbinds)
				logmes "Unbound "+ @inventorylist_amount[.@item]+" "+@inventorylist_id[.@item]+".";
		}
	}
	close;

OnInit:
	//* Configuration *\\
	//Price
	.bindprice = 0;
	.unbindprice = 100000;

	//What to allow to be bound - Add as necessary
	//1 = Equipment - 2 = Consumables - 4 = Etc
	.allowbind = 1;

	//Log binds via NPC?
	.logbinds = 1;

	//Other stuff
	.boundtypes$[IBT_ACCOUNT] = "account";
	.boundtypes$[IBT_GUILD] = "guild";
	.boundtypes$[IBT_CHARACTER] = "character";
	end;
}