// TMW2 script
// Author: Jesusalva <admin@tmw2.org>
//
// Magic Script: TMW2_TRANSMIGRATION
//
// Attempts to make stuff from other stuff
// This is actually referred as transmutation in human-readable forms, and
// transmigration in scripts.
- script sk#mkpot 32767,{
end;
OnCall:
// Check cooldown
if (@mkpot_at > gettimetick(2)) {
dispbottom l("Skill is in cooldown for @@.", FuzzyTime(@mkpot_at));
end;
}
// Check requisites
if (!MagicCheck(TMW2_TRANSMIGRATION, 215, -5))
end;
.@q=getq(General_Auldsbel);
do {
mes ".:: " + l("Transmutation Skill") + " ::.";
mesc l("What will you transmute today?");
mes "";
menuint
rif(@transmemo, l("Repeat: ")+getitemname(@transmemo)), @transmemo,
l("Crazy Rum"), CrazyRum,
l("Coal"), 9901, // 9901 cheat code
l("Mouboo Figurine"), MoubooFigurine,
rif(.@q >= 9, l("Downgrade Snake Skin")), SnakeSkin,
rif(.@q >= 9, l("Downgrade Snake Egg")), SnakeEgg,
rif(.@q >= 9, l("Downgrade Snake Tongue")), SnakeTongue,
rif(.@q >= 7, l("Downgrade Scorpion Stinger")), ScorpionStinger,
rif(.@q >= 7, l("Downgrade Scorpion Claw")), ScorpionClaw,
l("Downgrade Ore"), IronOre;
mes "";
mesc l("Transmutating @@ will require:", getitemlink(@menuret));
// Requeriments listing
switch (@menuret) {
case CrazyRum:
mesc l("* @@/@@ @@", countitem(Plushroom), 10, getitemlink(Plushroom));
mesc l("* @@/@@ @@", countitem(Milk), 1, getitemlink(Milk));
break;
case Coal:
mesc l("* @@/@@ @@", countitem(WoodenLog), 5, getitemlink(WoodenLog));
break;
case MoubooFigurine:
mesc l("* @@/@@ @@", countitem(WoodenLog), 1, getitemlink(WoodenLog));
break;
case SnakeSkin:
menuint
l("Black Mamba Skin -> Mountain Snake Skin"), MountainSnakeSkin,
l("Mountain Snake Skin -> Snake Skin"), SnakeSkin,
l("Snake Skin -> Cave Snake Skin"), CaveSnakeSkin,
l("Cancel");
break;
case SnakeEgg:
menuint
l("Black Mamba Egg -> Mountain Snake Egg"), MountainSnakeEgg,
l("Mountain Snake Egg -> Snake Egg"), SnakeEgg,
l("Snake Egg -> Cave Snake Egg"), CaveSnakeEgg,
l("Cancel");
break;
case SnakeTongue:
menuint
l("Black Mamba Tongue -> Mountain Snake Tongue"), MountainSnakeTongue,
l("Mountain Snake Tongue -> Snake Tongue"), SnakeTongue,
l("Snake Tongue -> Cave Snake Tongue"), CaveSnakeTongue,
l("Cancel");
break;
case ScorpionStinger:
menuint
l("Black Scorpion Stinger -> Red Scorpion Stinger"), RedScorpionStinger,
l("Red Scorpion Stinger -> Scorpion Stinger"), ScorpionStinger,
l("Cancel");
break;
case ScorpionClaw:
menuint
l("Golden Scorpion Claw -> Black Scorpion Claw"), BlackScorpionClaw,
l("Black Scorpion Claw -> Red Scorpion Claw"), RedScorpionClaw,
l("Red Scorpion Claw -> Scorpion Claw"), ScorpionClaw,
l("Cancel");
break;
case IronOre:
menuint
l("Platinum Ore -> Iridium Ore"), IridiumOre,
l("Iridium Ore -> Titanium Ore"), TitaniumOre,
l("Titanium Ore -> Lead Ore"), LeadOre,
l("Lead Ore -> Tin Ore"), TinOre,
l("Tin Ore -> Gold Ore"), GoldOre,
l("Gold Ore -> Silver Ore"), SilverOre,
l("Silver Ore -> Copper Ore"), CopperOre,
l("Copper Ore -> Iron Ore"), IronOre,
l("Iron Ore -> Coal"), Coal,
l("Cancel");
break;
default:
Exception("ERROR, INVALID TRANSMIGRATION OPTION", RB_DEFAULT|RB_SPEECH); @menuret=0; break;
}
// Confirmation
if (@menuret) {
next;
mesc l("Transmute?!");
if (askyesno() == ASK_NO)
@menuret=0;
}
} while (!@menuret);
// Close the dialog
closeclientdialog;
// Check and Consume the reagents
switch (@menuret) {
case CrazyRum:
if (!transcheck(Plushroom, 10, Milk, 1)) {
dispbottom l("Not enough items!");
end;
}
break;
case MoubooFigurine:
if (!transcheck(WoodenLog, 1)) {
dispbottom l("Not enough items!");
end;
}
break;
case 9901: // Coal cheat code
if (!transcheck(WoodenLog, 5)) {
dispbottom l("Not enough items!");
end;
}
@menuret=Coal;
break;
// Snake Skin Chain
case MountainSnakeSkin:
if (!transcheck(BlackMambaSkin, 1)) {
dispbottom l("Not enough items!");
end;
}
break;
case SnakeSkin:
if (!transcheck(MountainSnakeSkin, 1)) {
dispbottom l("Not enough items!");
end;
}
break;
case CaveSnakeSkin:
if (!transcheck(SnakeSkin, 1)) {
dispbottom l("Not enough items!");
end;
}
break;
// Snake Egg Chain
case MountainSnakeEgg:
if (!transcheck(BlackMambaEgg, 1)) {
dispbottom l("Not enough items!");
end;
}
break;
case SnakeEgg:
if (!transcheck(MountainSnakeEgg, 1)) {
dispbottom l("Not enough items!");
end;
}
break;
case CaveSnakeEgg:
if (!transcheck(SnakeEgg, 1)) {
dispbottom l("Not enough items!");
end;
}
break;
// Snake Tongue Chain
case MountainSnakeTongue:
if (!transcheck(BlackMambaTongue, 1)) {
dispbottom l("Not enough items!");
end;
}
break;
case SnakeTongue:
if (!transcheck(MountainSnakeTongue, 1)) {
dispbottom l("Not enough items!");
end;
}
break;
case CaveSnakeTongue:
if (!transcheck(SnakeTongue, 1)) {
dispbottom l("Not enough items!");
end;
}
break;
// Scorpion Stinger Chain
case RedScorpionStinger:
if (!transcheck(BlackScorpionStinger, 1)) {
dispbottom l("Not enough items!");
end;
}
break;
case ScorpionStinger:
if (!transcheck(RedScorpionStinger, 1)) {
dispbottom l("Not enough items!");
end;
}
break;
// Scorpion Claw Chain
case BlackScorpionClaw:
if (!transcheck(GoldenScorpionClaw, 1)) {
dispbottom l("Not enough items!");
end;
}
break;
case RedScorpionClaw:
if (!transcheck(BlackScorpionClaw, 1)) {
dispbottom l("Not enough items!");
end;
}
break;
case ScorpionClaw:
if (!transcheck(RedScorpionClaw, 1)) {
dispbottom l("Not enough items!");
end;
}
break;
// Ore Chain (the biggest one)
case IridiumOre:
if (!transcheck(PlatinumOre, 1)) {
dispbottom l("Not enough items!");
end;
}
break;
case TitaniumOre:
if (!transcheck(IridiumOre, 1)) {
dispbottom l("Not enough items!");
end;
}
break;
case LeadOre:
if (!transcheck(TitaniumOre, 1)) {
dispbottom l("Not enough items!");
end;
}
break;
case TinOre:
if (!transcheck(LeadOre, 1)) {
dispbottom l("Not enough items!");
end;
}
break;
case GoldOre:
if (!transcheck(TinOre, 1)) {
dispbottom l("Not enough items!");
end;
}
break;
case SilverOre:
if (!transcheck(GoldOre, 1)) {
dispbottom l("Not enough items!");
end;
}
break;
case CopperOre:
if (!transcheck(SilverOre, 1)) {
dispbottom l("Not enough items!");
end;
}
break;
case IronOre:
if (!transcheck(CopperOre, 1)) {
dispbottom l("Not enough items!");
end;
}
break;
case Coal:
if (!transcheck(IronOre, 1)) {
dispbottom l("Not enough items!");
end;
}
break;
default:
Exception("ERROR, INVALID TRANSMIGRATION REAGENTS", RB_DEFAULT|RB_SPEECH|RB_ISFATAL); break;
}
// Do the roll from 1 to 100
// Base success chance is 0%
// Each abizit() point gives you 18% success rate (max 90%)
// Each skill level gives you 1% success rate (max 10%)
.@r=rand2(1, 100)-abizit()*18-getskilllv(TMW2_TRANSMIGRATION);
// Backfire chance: 30%
if (.@r >= 70) {
dispbottom l("The spell backfires!");
percentheal -(rand2(5, 15)), 0;
// Chance for nothing to happen
} else if (.@r >= 30) {
dispbottom l("Your reagents vanish into emptiness!");
// Chance for you getting a junk item
} else if (.@r > 0) {
dispbottom l("Your spell takes a mind of its own and shapes in something else!");
getitem WarpedLog, 1;
// You were successful
} else {
dispbottom l("*plim*");
getitem @menuret, 1;
}
// Store to memory
@transmemo=@menuret;
// set cooldown
@mkpot_at=gettimetick(2);
@mkpot_at=@mkpot_at+6;
// Get a few mana experience points (this is NOT used by Mana Stone)
GetManaExp(TMW2_TRANSMIGRATION, rand2(4,9));
end;
OnInit:
bindatcmd "sk-trans", "sk#mkpot::OnCall", 0, 100, 0;
end;
}