summaryrefslogblamecommitdiff
path: root/npc/magic/transmigration.txt
blob: 838fa718c0e510750184e663ff33032d842a7f23 (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, 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 "";
        @menuret = (@menuret == WoodenLog ? 9901 : @menuret);
        .@itemid=(@menuret == 9901 ? Coal : @menuret);
        mesc l("Transmutating @@ will require:", getitemlink(@menuret));

        // Requeriments listing
        switch (@menuret) {
        case CrazyRum:
            mesc l("* @@/@@ @@", countitem(Plushroom), 18, getitemlink(Plushroom));
            mesc l("* @@/@@ @@", countitem(Milk), 5, getitemlink(Milk));
            break;
        case 9901: // This is coal
            mesc l("* @@/@@ @@", countitem(WoodenLog), 6, getitemlink(WoodenLog));
            break;
        case MoubooFigurine:
            mesc l("* @@/@@ @@", countitem(WoodenLog), 1, getitemlink(WoodenLog));
            break;
        case MountainSnakeSkin:
        case CaveSnakeSkin:
        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"), 0;
            break;
        case MountainSnakeEgg:
        case CaveSnakeEgg:
        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"), 0;
            break;
        case MountainSnakeTongue:
        case CaveSnakeTongue:
        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"), 0;
            break;
        case RedScorpionStinger:
        case ScorpionStinger:
            menuint
            l("Black Scorpion Stinger -> Red Scorpion Stinger"), RedScorpionStinger,
            l("Red Scorpion Stinger -> Scorpion Stinger"), ScorpionStinger,
            l("Cancel"), 0;
            break;
        case BlackScorpionClaw:
        case RedScorpionClaw:
        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"), 0;
            break;
        case IridiumOre:
        case TitaniumOre:
        case LeadOre:
        case TinOre:
        case GoldOre:
        case SilverOre:
        case CopperOre:
        case Coal:
        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"), 0;
            break;
        default:
            Exception("ERROR, INVALID TRANSMIGRATION OPTION", RB_DEFAULT|RB_SPEECH); @menuret=0; break;
        }
        // Confirmation
        if (@menuret) {
            next;
            mesc l("Transmute?!");
            .@me=@menuret;
            if (askyesno() == ASK_NO)
                @menuret=0;
            else
                @menuret=.@me;
        }
    } while (!@menuret);

    // Close the dialog
    closeclientdialog;

    // Check and Consume the reagents
    switch (@menuret) {
        case CrazyRum:
            if (!transcheck(Plushroom, 18, Milk, 5)) {
                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, 6)) {
                dispbottom l("Not enough items!");
                end;
            }
            .@me=WoodenLog;
            @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 any(WarpedLog, .@me), 1;
    // You were successful
    } else {
        dispbottom l("*plim*");
        getitem @menuret, (@menuitem == MoubooFigurine ? 1 : 2);
    }

    // Store to memory
    @transmemo=.@me;

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