summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoreuphyy <euphyy@54d463be-8e91-2dee-dedb-b68131a5f0ec>2013-03-04 04:32:43 +0000
committershennetsind <ind@henn.et>2013-04-11 16:48:45 -0300
commitdbb062c2f3657746a36feebc190c736ddcaa3881 (patch)
treec7471998af1d8aa399cae2fd4fd2713c9b493303
parente1f41ae8fdac977851bfd090a6e266a0dda8ed29 (diff)
downloadhercules-dbb062c2f3657746a36feebc190c736ddcaa3881.tar.gz
hercules-dbb062c2f3657746a36feebc190c736ddcaa3881.tar.bz2
hercules-dbb062c2f3657746a36feebc190c736ddcaa3881.tar.xz
hercules-dbb062c2f3657746a36feebc190c736ddcaa3881.zip
* Initial implementation of Malangdo Card Separation script.
* Added and documented 'delequip' command, used in new official scripts. * Fixed issue in Guillotine Cross job quest where mobs did not properly reset (bugreport:7323). * Minor cleaning of script_commands.txt. git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@17168 54d463be-8e91-2dee-dedb-b68131a5f0ec
-rw-r--r--npc/re/cities/malangdo.txt8
-rw-r--r--npc/re/merchants/card_separation.txt279
-rw-r--r--npc/re/merchants/enchan_mal.txt29
-rw-r--r--src/map/script.c23
4 files changed, 317 insertions, 22 deletions
diff --git a/npc/re/cities/malangdo.txt b/npc/re/cities/malangdo.txt
index 99d7e327d..e6732b754 100644
--- a/npc/re/cities/malangdo.txt
+++ b/npc/re/cities/malangdo.txt
@@ -180,9 +180,9 @@ izlude,182,218,4 script Odgnalam#iz 554,{
mes "You are a hero of cat's fleet. Your activity is the legend between us.";
next;
mes "[Odgnalam]";
- mes "As you are hero of fleet so let me send you to the heaven of the cat, ^A2314BMeow Meow Island^000000 for free.";
+ mes "As you are a hero of the cat fleet let me send you to ^A2314BMeow Meow Island^000000 for free.";
next;
- if(select("Let's go Meow Meow Island!!:Do not go") == 1) {
+ if(select("Send me to Meow Meow Island!:Do not go.") == 1) {
mes "[Odgnalam]";
mes "Have a comfortable trip... Alright let's go~";
warp "malangdo",217,85;
@@ -192,7 +192,7 @@ izlude,182,218,4 script Odgnalam#iz 554,{
mes "[Odgnalam]";
mes .@s1$;
next;
- if(select("Let's go Meow Meow Island!!:Do not go") == 2) close;
+ if(select("Send me to Meow Meow Island!:Do not go.") == 2) close;
if (Zeny < .@price) {
mes "[Odgnalam]";
mes "Money? Where is the money? You can't go anywhere without the money. Shame on you.";
@@ -204,7 +204,7 @@ izlude,182,218,4 script Odgnalam#iz 554,{
warp "malangdo",217,85;
close;
}
-alberta,200,151,4 duplicate(Odgnalam#iz) Odgnalam#albe 554
+alberta,200,151,4 duplicate(Odgnalam#Izlude) Odgnalam#Alberta 554
malangdo,219,86,4 script Kong#malang 545,{
mes "[Kong]";
diff --git a/npc/re/merchants/card_separation.txt b/npc/re/merchants/card_separation.txt
new file mode 100644
index 000000000..a81aeb746
--- /dev/null
+++ b/npc/re/merchants/card_separation.txt
@@ -0,0 +1,279 @@
+//===== rAthena Script =======================================
+//= Card Separation System
+//===== By: ==================================================
+//= Muad_Dib
+//===== Current Version: =====================================
+//= 1.0
+//===== Compatible With: =====================================
+//= rAthena SVN
+//===== Description: =========================================
+//= [Official Conversion]
+//= Separates cards from equipment.
+//===== Additional Comments: =================================
+//= 1.0 First Version. [Euphy]
+//============================================================
+
+malangdo,215,166,4 script Jeremy#mal 553,{
+ disable_items;
+ if (checkweight(1201,1) == 0) {
+ mes "You have too many kinds of objects. Let's try to continue after reducing those objects.";
+ close;
+ }
+ if (MaxWeight - Weight < 10000) {
+ mes "Can't continue because you have too many heavy objects. Let's try to continue after reducing the weight.";
+ close;
+ }
+ mes "[Jeremy]";
+ mes "Long time no see~";
+ mes "I have learned a new skill that separates cards from Armor, Shoes, Garment and Headgear. Do you want to try it?";
+ next;
+ mes "[Jeremy]";
+ mes "Generally the fee is 1,000,000 Zeny. During the card separation, you can use ^990000special items that reduce the rate of destroying equipment or cards^000000. We don't charge additional zeny for this.";
+ next;
+ mes "[Jeremy]";
+ mes "There is a possibility of destroying them even using a special item. Also, ^ff0000the refine level might be lost^000000. Do you have any equipment to separate?";
+ next;
+
+ setarray .@equip_name$[0], "Armor", "Shoes", "Garment", "Upper Hat";
+ setarray .@equip_slot[0], EQI_ARMOR,EQI_SHOES,EQI_GARMENT,EQI_HEAD_TOP;
+ for(set .@i,0; .@i<getarraysize(.@equip_slot); set .@i,.@i+1) {
+ if (getequipisequiped(.@equip_slot[.@i]))
+ set .@menu$, .@menu$+getequipname(.@equip_slot[.@i])+":";
+ else
+ set .@menu$, .@menu$+"^999999"+.@equip_name$[.@i]+" (empty)^000000:";
+ }
+
+ set .@i, select("Stop the work:How is it possible?:"+.@menu$);
+ switch(.@i) {
+ case 1:
+ mes "[Jeremy]";
+ mes "Whenever you need the work, visit me here.";
+ close;
+ case 2:
+ mes "[Jeremy]";
+ mes "You wonder what is so special. Well, I hate to give only a guide, so let me tell you the story...";
+ next;
+ mes "^000099Jeremy is stretching his shoulders and hands. He might be waiting for someone to talk with him.^000000";
+ next;
+ mes "[Jeremy]";
+ mes "Do you know that Malangdo's specialty is canned food?";
+ next;
+ select("I knew that well. Is it that limited?");
+ mes "[Jeremy]";
+ mes "Hehe... Everyone loves it. But there were some problems before.";
+ next;
+ select("Problems? Is there any faulty fish?");
+ mes "[Jeremy]";
+ mes "No, the fish does not have any problem. The problem is lots of fish oil produced after processing. That is such an industrial waste.";
+ next;
+ mes "[Jeremy]";
+ mes "However, after a revitalizing refining process, this fish oil became valuable to use for old equipment care and industrial lubricant.";
+ next;
+ mes "[Jeremy]";
+ mes "In addition, this oil is so useful to separate relics from equipped weapons that we can't buy Premium Lubricant and Ordinary Lubricant with Zeny.";
+ next;
+ mes "[Jeremy]";
+ mes "Well, don't worry about money. Surely the Premium Lubricant is expensive. If you pay some zeny, I can give you cheaper lubricant.";
+ next;
+ mes "[Jeremy]";
+ mes "I'm not sure about the quality of success. Anyway, this is so cheap, right?";
+ close;
+ default:
+ set .@equip_num, .@equip_slot[.@i-3];
+ if (!getequipisequiped(.@equip_num)) {
+ mes "[Jeremy]";
+ mes "In this part, there is nothing?";
+ close;
+ }
+ break;
+ }
+ setarray .@equip_card[0], getequipcardid(.@equip_num,0),getequipcardid(.@equip_num,1),getequipcardid(.@equip_num,2),getequipcardid(.@equip_num,3);
+ for(set .@i,0; .@i<4; set .@i,.@i+1) {
+ if (.@equip_card[.@i] >= 4700) // Armor Enchant System
+ set .@equip_card[.@i],0;
+ }
+ if (!getarraysize(.@equip_card)) {
+ mes "[Jeremy]";
+ mes "The card is not equipped. Do you want to check again?";
+ close;
+ }
+
+ // Detect MVP cards.
+ set .@mvp_list$,
+ "|4408|4128|4456|4168|4142"+ //Gloom_Under_Night_Card, Golden_Bug_Card, Nidhogg_Shadow_Card, Dark_Lord_Card, Doppelganger_Card
+ "|4134|4137|4386|4407|4357"+ //Dracula_Card, Drake_Card, Detale_Card, Randgris_Card, B_Seyren_Card
+ "|4146|4132|4147|4372|4145"+ //Maya_Card, Mistress_Card, Baphomet_Card, Bacsojin_Card, Berzebub_Card
+ "|4374|4352|4367|4236|4425"+ //Apocalips_H_Card, B_Ygnizem_Card, B_Shecil_Card, Amon_Ra_Card, Atroce_Card
+ "|4359|4123|4144|4135|4143"+ //B_Eremes_Card, Eddga_Card, Osiris_Card, Orc_Load_Card, Orc_Hero_Card
+ "|4263|4131|4430|4276|4419"+ //Incant_Samurai_Card, Moonlight_Flower_Card, Ifrit_Card, Lord_Of_Death_Card, Ktullanux_Card
+ "|4403|4399|4376|4441|4302"+ //Kiel_Card, Thanatos_Card, Lady_Tanee_Card, Fallen_Bishop_Card, Tao_Gunka_Card
+ "|4305|4148|4318|4121|4365"+ //Turtle_General_Card, Pharaoh_Card, Knight_Windstorm_Card, Phreeoni_Card, B_Katrinn_Card
+ "|4363|4324|4361|4330|4342|"; //B_Magaleta_Card, Garm_Card, B_Harword_Card, Dark_Snake_Lord_Card, Rsx_0806_Card
+ if ((.@equip_card[0] && compare(.@mvp_list$,"|"+.@equip_card[0]+"|")) ||
+ (.@equip_card[1] && compare(.@mvp_list$,"|"+.@equip_card[1]+"|")) ||
+ (.@equip_card[2] && compare(.@mvp_list$,"|"+.@equip_card[2]+"|")) ||
+ (.@equip_card[3] && compare(.@mvp_list$,"|"+.@equip_card[3]+"|")))
+ set .@boss_chk,1;
+
+ if (.@boss_chk == 0) {
+ mes "[Jeremy]";
+ mes "Except cards, ^ff0000all enchanted effects will disappear.^000000 If you agree to this, please choose the work type:";
+ next;
+ set .@menu$,
+ "Next time...:"+
+ ((Zeny >= 1000000)?"Use 1,000,000z (Do not use special item):":"^999999Use 1,000,000z (Insufficient)^000000:")+
+ ((countitem(6441))?"Use Premium Lubricant:":"^999999Premium Lubricant (Insufficient)^000000:")+
+ ((countitem(6440))?"Use Ordinary Lubricant":"^999999Ordinary Lubricant (Insufficient)^000000");
+ switch(select(.@menu$)) {
+ case 1:
+ mes "[Jeremy]";
+ mes "Whenever you need the work, visit me here.";
+ close;
+ case 2:
+ if (Zeny < 1000000) {
+ mes "[Jeremy]";
+ mes "You don't have enough zeny. Please come back with enough fees.";
+ close;
+ }
+ mes "[Jeremy]";
+ mes "This is pretty old equipment. There is a high rate of destroying the cards or equipment during the work. Are you sure you want to continue?";
+ next;
+ if(select("Next time...:Continue") == 1) {
+ mes "[Jeremy]";
+ mes "Whenever you need the work, visit me here.";
+ close;
+ }
+ set .@sf_c_num,150;
+ set .@sf_r_num,150;
+ set .@sf_w_num,150;
+ set Zeny, Zeny - 1000000;
+ break;
+ case 3:
+ if (countitem(6441) == 0) {
+ mes "[Jeremy]";
+ mes "You don't have Premium Lubricant.";
+ close;
+ }
+ mes "[Jeremy]";
+ mes "If you use the Premium Lubricant, the rate of destruction will be decreased highly, but I can't give you a 100% guarantee. Are you sure you want to continue?";
+ next;
+ if(select("Next time...:Continue") == 1) {
+ mes "[Jeremy]";
+ mes "Whenever you need the work, visit me here.";
+ close;
+ }
+ set .@sf_c_num,75;
+ set .@sf_r_num,75;
+ set .@sf_w_num,75;
+ delitem 6441,1; //High_RankLubricant
+ break;
+ case 4:
+ if (countitem(6440) == 0) {
+ mes "[Jeremy]";
+ mes "You don't have Ordinary Lubricant.";
+ close;
+ }
+ mes "[Jeremy]";
+ mes "If you use the Ordinary Lubricant, the rate of destruction will be decreased highly, but I can't give you a 100% guarantee. Are you sure you want to continue?";
+ next;
+ if(select("Next time...:Continue") == 1) {
+ mes "[Jeremy]";
+ mes "Whenever you need the work, visit me here.";
+ close;
+ }
+ set .@sf_c_num,75;
+ set .@sf_r_num,150;
+ set .@sf_w_num,150;
+ delitem 6440,1; //General_Lubricant
+ break;
+ }
+ } else if (.@boss_chk == 1) {
+ mes "[Jeremy]";
+ mes "This equipment contains a precious MVP card. This card can't be separated with lubricant. If you bring the super surfactant ^0000ffSillit Pong^000000, I will be able to work.";
+ next;
+ switch(select("Next time...:I have a Sillit Pong.")) {
+ case 1:
+ mes "[Jeremy]";
+ mes "Whenever you need the work, visit me here.";
+ close;
+ case 2:
+ if (countitem(6443) == 0) {
+ mes "[Jeremy]";
+ mes "You don't have Sillit Pong.";
+ close;
+ }
+ break;
+ }
+ mes "[Jeremy]";
+ mes "Except cards, ^ff0000all enchanted effects will disappear.^000000 If you agree to this, please choose the work type:";
+ next;
+ switch(select("Next time...:Alright, let's do it!")) {
+ case 1:
+ mes "[Jeremy]";
+ mes "Whenever you need the work, visit me here.";
+ close;
+ case 2:
+ set .@sf_c_num,60;
+ set .@sf_r_num,60;
+ set .@sf_w_num,60;
+ delitem 6443,1; //Sillit_Pong_Bottle
+ break;
+ }
+ }
+
+ set .@equip_id, getequipid(.@equip_num);
+ set .@equip_refine, getequiprefinerycnt(.@equip_num);
+ delequip .@equip_num;
+
+ // Chance of retaining refine level.
+ if (rand(1,.@sf_r_num) >= 61)
+ set .@equip_refine,0;
+
+ // Chance of retaining equipment.
+ if (rand(1,.@sf_w_num) < 61) {
+ set .@equip_safe,1;
+ getitem2 .@equip_id,1,1,.@equip_refine,0,0,0,0,0;
+ }
+
+ // Chance of retaining cards.
+ for(set .@i,0; .@i<4; set .@i,.@i+1) {
+ if (.@equip_card[.@i]) {
+ if (rand(1,.@sf_c_num) < 61)
+ getitem .@equip_card[.@i],1;
+ else
+ set .@card_break,1;
+ }
+ }
+
+ // Display corresponding effect.
+ if (!.@equip_safe && .@card_break)
+ specialeffect2 EF_LORD;
+ else if (.@equip_safe && .@card_break)
+ specialeffect2 EF_SUI_EXPLOSION;
+ else if (!.@equip_safe && !.@card_break)
+ specialeffect2 EF_FIREPILLAR;
+ else
+ specialeffect2 EF_MAXPOWER;
+
+ // Output results.
+ mes "-- Result of Card Separation --";
+ if (.@equip_safe) {
+ mes "Crack has not occured during the card separation process.";
+ mes "^0000FFEquipment separation is normal.^000000";
+ } else {
+ mes "Crack has occured during the card separation process.";
+ mes "Equipment has been damaged. ^ff0000Unrecoverable.^000000";
+ }
+ mes "-------------------";
+ if (!.@card_break) {
+ mes "Erosion of surface has not occured during the card separation process.";
+ mes "^0000ffCard separation has succeeded.^000000";
+ } else {
+ mes "Erosion of surface has occured during the card separation process.";
+ mes "Card has been damaged. ^ff0000Unrecoverable.^000000";
+ }
+ next;
+ mes "[Jeremy]";
+ mes "That is all for the results of the card separation. Please come again.";
+ close;
+}
diff --git a/npc/re/merchants/enchan_mal.txt b/npc/re/merchants/enchan_mal.txt
index 36e8487b5..5caa70217 100644
--- a/npc/re/merchants/enchan_mal.txt
+++ b/npc/re/merchants/enchan_mal.txt
@@ -3,7 +3,7 @@
//===== By: ==================================================
//= Muad_Dib
//===== Current Version: =====================================
-//= 1.0
+//= 1.0a
//===== Compatible With: =====================================
//= rAthena SVN
//===== Description: =========================================
@@ -12,6 +12,7 @@
//= for Malangdo coins.
//===== Additional Comments: =================================
//= 1.0 First Version. [Euphy]
+//= 1.0a Added 'delequip' command. [Euphy]
//============================================================
malangdo,213,167,4 script Mayomayo#mal 555,{
@@ -567,10 +568,10 @@ L_Socket:
mes "There is something wrong. Please try again.";
close;
}
- if (.@equip_card[3] == 0 && getarg(1) < 4) set .@target,3;
- else if (.@equip_card[2] == 0 && getarg(1) < 3) set .@target,2;
- else if (.@equip_card[1] == 0 && getarg(1) < 2) set .@target,1;
- else if (.@equip_card[0] == 0 && getarg(1) < 1) set .@target,0;
+ if (.@equip_card[3] == 0 && getarg(1) < 4) set .@equip_card[3],.@enchant;
+ else if (.@equip_card[2] == 0 && getarg(1) < 3) set .@equip_card[2],.@enchant;
+ else if (.@equip_card[1] == 0 && getarg(1) < 2) set .@equip_card[1],.@enchant;
+ else if (.@equip_card[0] == 0 && getarg(1) < 1) set .@equip_card[0],.@enchant;
else {
mes "[Mayomayo]";
mes "This equipment is at the end of enchant. I provide enchant for two times maximum.";
@@ -585,24 +586,18 @@ L_Socket:
mes "Oh my god!";
mes "This equipment is destroyed because it could not endure powerful ability. I'm so sorry.";
delitem .@coin[.@coin_select],.@total[.@coin_select];
-
-// dropequipitem EQI_HAND_R
- unequip EQI_HAND_R;
- delitem2 .@equip_id,1,1,.@equip_refine,0,.@equip_card[0],.@equip_card[1],.@equip_card[2],.@equip_card[3];
+ delequip EQI_HAND_R;
close;
}
specialeffect2 EF_REPAIRWEAPON;
mes "[Mayomayo]";
mes "I have enchanted ^990000slot "+.@socket+"^000000 of this equipment.";
delitem .@coin[.@coin_select],.@total[.@coin_select];
-
-// dropequipitem EQI_HAND_R
- unequip EQI_HAND_R;
- delitem2 .@equip_id,1,1,.@equip_refine,0,.@equip_card[0],.@equip_card[1],.@equip_card[2],.@equip_card[3];
+ delequip EQI_HAND_R;
// GetNonSlotItemSock2 .@equip_refine .@equip_id .@equip_card[0] .@equip_card[1] .@equip_card[2] .@equip_card[3]
- set .@equip_card[.@target],.@enchant;
getitem2 .@equip_id,1,1,.@equip_refine,0,.@equip_card[0],.@equip_card[1],.@equip_card[2],.@equip_card[3];
+
close;
} else if (.@select == 2) {
mes "[Mayomayo]";
@@ -632,10 +627,7 @@ L_Socket:
mes "[Mayomayo]";
mes "Initialize the enchant effect from the equipment.";
delitem 6417,1; //Silvervine
-
-// dropequipitem EQI_HAND_R
- unequip EQI_HAND_R;
- delitem2 .@equip_id,1,1,.@equip_refine,0,.@equip_card[0],.@equip_card[1],.@equip_card[2],.@equip_card[3];
+ delequip EQI_HAND_R;
// GetNonSlotItemSock2 .@equip_refine .@equip_id .@equip_card[0] .@equip_card[1] .@equip_card[2] .@equip_card[3]
for(set .@i,0; .@i<4; set .@i,.@i+1) {
@@ -643,6 +635,7 @@ L_Socket:
set .@equip_card[.@i],0;
}
getitem2 .@equip_id,1,1,.@equip_refine,0,.@equip_card[0],.@equip_card[1],.@equip_card[2],.@equip_card[3];
+
close;
}
}
diff --git a/src/map/script.c b/src/map/script.c
index ce312e894..0a33c1eef 100644
--- a/src/map/script.c
+++ b/src/map/script.c
@@ -7783,6 +7783,29 @@ BUILDIN_FUNC(downrefitem)
}
/*==========================================
+ * Delete the item equipped at pos.
+ *------------------------------------------*/
+BUILDIN_FUNC(delequip)
+{
+ int i=-1,num;
+ TBL_PC *sd;
+
+ num = script_getnum(st,2);
+ sd = script_rid2sd(st);
+ if( sd == NULL )
+ return 0;
+
+ if (num > 0 && num <= ARRAYLENGTH(equip))
+ i=pc_checkequip(sd,equip[num-1]);
+ if(i >= 0) {
+ pc_unequipitem(sd,i,3); //recalculate bonus
+ pc_delitem(sd,i,1,0,2,LOG_TYPE_SCRIPT);
+ }
+
+ return 0;
+}
+
+/*==========================================
*
*------------------------------------------*/
BUILDIN_FUNC(statusup)