summaryrefslogblamecommitdiff
path: root/npc/magic/transmigration.txt
blob: fed1b7a36b4ead16308bb390a0bda2ec9aa8b97f (plain) (tree)
1
2
3
4
5
6
7
8


                                     
                                    
  


                                                                          


                                       
       






                                                                           
                                                  

            




                                                       
                                     
                                                             
                                                           
                                                                 

                                                                         
                                                    


                                                 


                                                                        
                           







                                                                                   
                   


                                                                            

                        

                      


                                                                         

                        






                                                                                  












                                                                                    












                                                          

                                                                                                       
         






                                     






                                     
                      
                                                      


                                                  

                            
                                            


                                                  
                  


















                                                    


















                                                   


















                                                      































                                                       






















































                                                  
 

                                                                                                        

















                                                                                         
                             
                          
            

                               






                                                                        
                                                 


        
                                                        

        
// 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, 185, -5))
        end;

    do {
        mes ".:: " + l("Transmutation Skill") + " ::.";
        mesc l("What will you transmute today?");
        mes "";
        menuint
            l("Crazy Rum"), CrazyRum,
            rif(false, l("Downgrade Snake Skin")), SnakeSkin,
            rif(false, l("Downgrade Snake Egg")), SnakeEgg,
            rif(false, l("Downgrade Snake Tongue")), SnakeTongue,
            rif(false, l("Downgrade Scorpion Stinger")), ScorpionStinger,
            rif(false, l("Downgrade Scorpion Claw")), ScorpionClaw,
            rif(false, l("Downgrade Ore")), IronOre,
            l("Mouboo Figurine"), MoubooFigurine;

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

    // 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,11));
    end;

OnInit:
    bindatcmd "sk-trans", "sk#mkpot::OnCall", 0, 100, 0;
    end;
}