Jump to content

Quests, Games: Endless Tower Instance with Difficulty


Recommended Posts


  • Group:  Members
  • Topic Count:  17
  • Topics Per Day:  0.00
  • Content Count:  81
  • Reputation:   12
  • Joined:  06/22/13
  • Last Seen:  

Endless Tower Instance with Difficulty


Good day! I've been an observer since the beginning of time and I want to share this script hoping that it will help fellow human beings who need it. This was a paid script of mine and I hired @sader1992 to help me finish it in 2020. I'm hoping someone will improve the code in the near future with other stuff to give another flavor for Endless Tower. This works with the latest version of rAthena.

Requirement: Y'all need this patch for +damage to work setunitdata script command monster stat recaulculation fixes #3968

About the script:
It is simply Endless Tower with Easy, Veteran, Nightmare, Hell & Torment Difficulties. You can edit the values I pre-assigned: 

Spoiler

            .@bonus_hp_rate += 0; // The zero / "0" is calculated in %
            .@bonus_dmg_rate += 0;
            .@bonus_damagetaken += 0;
            .@bonus_hit += 0;
            .@bonus_str += 0;
            .@bonus_agi += 0;
            .@bonus_vit += 0;
            .@bonus_int += 0;
            .@bonus_dex += 0;
            .@bonus_luk += 0;

This part is for the difficulty settings and adding stats to the monsters:

Spoiler

// Difficulty Function
//============================================================
function    script    F_Tower_Monster_Summon    {
    .@map$ = getarg(0, "");
    .@x1 = getarg(1, 0);
    .@y1 = getarg(2, 0);
    .@x2 = getarg(3, 0);
    .@y2 = getarg(4, 0);
    .@mob_name$ = getarg(5, 0);
    .@mob_id = getarg(6, 0);
    .@amount = getarg(7, 0);
    .@label$ = getarg(8, "");

    switch('level_mode){
        case 1://Easy
            .@bonus_hp_rate += 0;
            .@bonus_dmg_rate += 0;
            .@bonus_damagetaken += 0;
            .@bonus_hit += 0;
            .@bonus_str += 0;
            .@bonus_agi += 0;
            .@bonus_vit += 0;
            .@bonus_int += 0;
            .@bonus_dex += 0;
            .@bonus_luk += 0;
            break;
        case 2://Veteran
            .@bonus_hp_rate += 100;
            .@bonus_dmg_rate += 100;
            .@bonus_damagetaken += -10;
            .@bonus_hit += 100;    
            .@bonus_str += 100;
            .@bonus_agi += 100;
            .@bonus_vit += 100;
            .@bonus_int += 100;
            .@bonus_dex += 100;
            .@bonus_luk += 100;            
            break;
        case 3://Nightmare
            .@bonus_hp_rate += 250;
            .@bonus_dmg_rate += 250;
            .@bonus_damagetaken += -20;
            .@bonus_hit += 250;            
            .@bonus_str += 250;
            .@bonus_agi += 250;
            .@bonus_vit += 250;
            .@bonus_int += 250;
            .@bonus_dex += 250;
            .@bonus_luk += 250;                
            break;
        case 4://Hell
            .@bonus_hp_rate += 500;
            .@bonus_dmg_rate += 500;
            .@bonus_damagetaken += -30;
            .@bonus_hit += 500;        
            .@bonus_str += 500;
            .@bonus_agi += 500;
            .@bonus_vit += 500;
            .@bonus_int += 500;
            .@bonus_dex += 500;
            .@bonus_luk += 500;                
            break;
        case 5://Torment
            .@bonus_hp_rate += 1000;
            .@bonus_dmg_rate += 1000;
            .@bonus_damagetaken += -40;
            .@bonus_hit += 1000;        
            .@bonus_str += 1000;
            .@bonus_agi += 1000;
            .@bonus_vit += 1000;
            .@bonus_int += 1000;
            .@bonus_dex += 1000;
            .@bonus_luk += 1000;                
            break;
    }
    deletearray $@mobid,getarraysize($@mobid);
    areamonster .@map$, .@x1, .@y1, .@x2, .@y2, .@mob_name$, .@mob_id, .@amount, .@label$;
    copyarray .@GID, $@mobid, getarraysize($@mobid);
    if(!.@bonus_hp_rate&& !.@bonus_dmg_rate&& !.@bonus_damagetaken&& !.@bonus_hit&& !.@bonus_str&& !.@bonus_agi&& !.@bonus_vit&& !.@bonus_int&& !.@bonus_dex&& !.@bonus_luk)
        return;
    getunitdata .@GID, .@ST;

    if(.@bonus_hp_rate){
        .@HP = .@ST[UMOB_MAXHP] + ((.@ST[UMOB_MAXHP] * .@bonus_hp_rate ) /100);
        for(.@i=0;.@i<getarraysize(.@GID);.@i++){            
            setunitdata(.@GID[.@i], UMOB_MAXHP, .@HP);
            setunitdata(.@GID[.@i], UMOB_HP, .@HP);
        }
    }
    if(.@bonus_dmg_rate){
        .@ATKMIN = .@ST[UMOB_ATKMIN] + ((.@ST[UMOB_ATKMIN] * .@bonus_dmg_rate) /100);
        .@ATKMAX = .@ST[UMOB_ATKMAX] + ((.@ST[UMOB_ATKMAX] * .@bonus_dmg_rate) /100);
        .@MATKMIN = .@ST[UMOB_MATKMIN] + ((.@ST[UMOB_MATKMIN] * .@bonus_dmg_rate) /100);
        .@MATKMAX = .@ST[UMOB_MATKMAX] + ((.@ST[UMOB_MATKMAX] * .@bonus_dmg_rate) /100);
        for(.@i=0;.@i<getarraysize(.@GID);.@i++){
            setunitdata(.@GID[.@i], UMOB_ATKMIN, .@ATKMIN);
            setunitdata(.@GID[.@i], UMOB_ATKMAX, .@ATKMAX);
            setunitdata(.@GID[.@i], UMOB_MATKMIN, .@MATKMIN);
            setunitdata(.@GID[.@i], UMOB_MATKMAX, .@MATKMAX);
        }
    }
    if(.@bonus_damagetaken){
        .@DAMAGETAKEN = .@ST[UMOB_DAMAGETAKEN] + ((.@ST[UMOB_DAMAGETAKEN] * .@bonus_damagetaken) /100);
        for(.@i=0;.@i<getarraysize(.@GID);.@i++){        
            setunitdata(.@GID[.@i], UMOB_DAMAGETAKEN, .@DAMAGETAKEN);
        }
    }
    if(.@bonus_hit){
        .@HIT = .@ST[UMOB_HIT] + ((.@ST[UMOB_HIT] * .@bonus_hit) /100);
        for(.@i=0;.@i<getarraysize(.@GID);.@i++){        
            setunitdata(.@GID[.@i], UMOB_HIT, .@HIT);
        }
    }    
    if(.@bonus_str){
        .@STR = .@ST[UMOB_STR] + ((.@ST[UMOB_STR] * .@bonus_str) /100);
        for(.@i=0;.@i<getarraysize(.@GID);.@i++){        
            setunitdata(.@GID[.@i], UMOB_STR, .@STR);
        }
    }    
    if(.@bonus_agi){
        .@AGI = .@ST[UMOB_AGI] + ((.@ST[UMOB_AGI] * .@bonus_agi) /100);
        for(.@i=0;.@i<getarraysize(.@GID);.@i++){        
            setunitdata(.@GID[.@i], UMOB_AGI, .@AGI);
        }
    }    
    if(.@bonus_vit){
        .@VIT = .@ST[UMOB_VIT] + ((.@ST[UMOB_VIT] * .@bonus_vit) /100);
        for(.@i=0;.@i<getarraysize(.@GID);.@i++){        
            setunitdata(.@GID[.@i], UMOB_VIT, .@VIT);
        }
    }
    if(.@bonus_int){
        .@INT = .@ST[UMOB_INT] + ((.@ST[UMOB_INT] * .@bonus_int) /100);
        for(.@i=0;.@i<getarraysize(.@GID);.@i++){        
            setunitdata(.@GID[.@i], UMOB_INT, .@INT);
        }
    }    
    if(.@bonus_dex){
        .@DEX = .@ST[UMOB_DEX] + ((.@ST[UMOB_DEX]) * .@bonus_dex) /100);
        for(.@i=0;.@i<getarraysize(.@GID);.@i++){        
            setunitdata(.@GID[.@i], UMOB_DEX, .@DEX);
        }
    }    
    if(.@bonus_luk){
        .@LUK = .@ST[UMOB_LUK] + ((.@ST[UMOB_LUK] * .@bonus_luk) /100);
        for(.@i=0;.@i<getarraysize(.@GID);.@i++){        
            setunitdata(.@GID[.@i], UMOB_LUK, .@LUK);
        }
    }        
    return;
}

This part is for the rewards: It gives #INSTANCEPOINTS and EXP depending on the difficulty you're on.

Spoiler

// Reward Function
//============================================================
function    script    F_Tower_Reward    {
    setarray .@rewards[1],1,3,6,12,24;
    setarray .@modes$[1],"Easy Mode","Veteran Mode","Nightmare Mode","Hell Mode","Torment Mode";
    setarray .@bonusExp[1],653047446,672905476,843378037,6160565694,45000661693;
    'rewardz = .@rewards['level_mode];
    'modez$ = .@modes$['level_mode];
    'bonuzExp = .@bonusExp['level_mode];
    'party_id = instance_live_info(ILI_OWNER);
    getpartymember 'party_id, 1;
    getpartymember 'party_id, 2;
    'map$ = instance_mapname("6@tower");
    copyarray .@CID,$@partymembercid,$@partymembercount;
    copyarray .@AID,$@partymemberaid,$@partymembercount;
    for(.@i=0;.@i<getarraysize(.@CID);.@i++){
        if(isloggedin(.@AID[.@i],.@CID[.@i])){
            if(strcharinfo(3,.@CID[.@i]) == 'map$){
                set(#INSTANCEPOINTS,(getvar(#INSTANCEPOINTS,.@CID[.@i]) + 'rewardz),.@CID[.@i]);
                announce "The party [ "+ getpartyname('party_id) +" ] has defeated Endless Tower on " + 'modez$ + ".",bc_all;
                message strcharinfo(0,.@CID[.@i]),"You've been granted " + 'rewardz + " Instance Points.";
                message strcharinfo(0,.@CID[.@i]),"You now have " + getvar(#INSTANCEPOINTS,.@CID[.@i]) + " Instance Points";
                getexp 'bonuzExp,'bonuzExp,.@CID[.@i];
            }
        }
    }
    return;
}

I assigned a monster (1613 : metalling) to show us that the stats boost really works:

Spoiler

    //if(unitexists(.@GID)){
    //    if(.@mob_id == 1613){
    //        debugmes "BEFORE UMOB_MAXHP " + .@ST[UMOB_MAXHP];
    //        debugmes "BEFORE UMOB_ATKMIN " + .@ST[UMOB_ATKMIN];
    //        debugmes "BEFORE UMOB_ATKMAX " + .@ST[UMOB_ATKMAX];
    //        debugmes "BEFORE UMOB_MATKMIN " + .@ST[UMOB_MATKMIN];
    //        debugmes "BEFORE UMOB_MATKMAX " + .@ST[UMOB_MATKMAX];
    //        debugmes "BEFORE UMOB_HIT " + .@ST[UMOB_HIT];            
    //        debugmes "BEFORE UMOB_STR " + .@ST[UMOB_STR];
    //        debugmes "BEFORE UMOB_AGI " + .@ST[UMOB_AGI];
    //        debugmes "BEFORE UMOB_VIT " + .@ST[UMOB_VIT];
    //        debugmes "BEFORE UMOB_INT " + .@ST[UMOB_INT];
    //        debugmes "BEFORE UMOB_DEX " + .@ST[UMOB_DEX];
    //        debugmes "BEFORE UMOB_LUK " + .@ST[UMOB_LUK];
    //       }
    //    }

    //if(unitexists(.@GID)){
    //    if(.@mob_id == 1613){
    //    getunitdata .@GID, .@ST2;
    //        debugmes "AFTER UMOB_MAXHP " + .@ST2[UMOB_MAXHP];
    //        debugmes "AFTER UMOB_ATKMIN " + .@ST2[UMOB_ATKMIN];
    //        debugmes "AFTER UMOB_ATKMAX " + .@ST2[UMOB_ATKMAX];
    //        debugmes "AFTER UMOB_MATKMIN " + .@ST2[UMOB_MATKMIN];
    //        debugmes "AFTER UMOB_MATKMAX " + .@ST2[UMOB_MATKMAX];
    //        debugmes "AFTER UMOB_HIT " + .@ST2[UMOB_HIT];    
    //        debugmes "AFTER UMOB_STR " + .@ST2[UMOB_STR];
    //        debugmes "AFTER UMOB_AGI " + .@ST2[UMOB_AGI];
    //        debugmes "AFTER UMOB_VIT " + .@ST2[UMOB_VIT];
    //        debugmes "AFTER UMOB_INT " + .@ST2[UMOB_INT];
    //        debugmes "AFTER UMOB_DEX " + .@ST2[UMOB_DEX];
    //        debugmes "AFTER UMOB_LUK " + .@ST2[UMOB_LUK];        
    //  }
    //}

 

image.png

 

PS: I'm also integrating this to other instances. Maybe I'll post it if people requests it. 


 

  • Love 2
Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  1
  • Topics Per Day:  0.00
  • Content Count:  20
  • Reputation:   1
  • Joined:  02/03/16
  • Last Seen:  

Nice ! Thx bro !

I tested the script and i have some errors in my console

 

errorinst.png

Link to comment
Share on other sites

  • 4 weeks later...

  • Group:  Members
  • Topic Count:  17
  • Topics Per Day:  0.00
  • Content Count:  81
  • Reputation:   12
  • Joined:  06/22/13
  • Last Seen:  

On 5/4/2023 at 12:50 AM, Tiki59 said:

Nice ! Thx bro !

I tested the script and i have some errors in my console

 

errorinst.png

Increase your Event Queue https://rathena.org/board/topic/126700-warning-npc_event-players-event-queue-is-full-cant-add-event-onpcloadmapevent/

  • Upvote 1
Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  257
  • Topics Per Day:  0.08
  • Content Count:  737
  • Reputation:   18
  • Joined:  11/21/15
  • Last Seen:  

On 5/3/2023 at 5:07 PM, Louis T Steinhil said:

Endless Tower Instance with Difficulty


Good day! I've been an observer since the beginning of time and I want to share this script hoping that it will help fellow human beings who need it. This was a paid script of mine and I hired @sader1992 to help me finish it in 2020. I'm hoping someone will improve the code in the near future with other stuff to give another flavor for Endless Tower. This works with the latest version of rAthena.

Requirement: Y'all need this patch for +damage to work setunitdata script command monster stat recaulculation fixes #3968

About the script:
It is simply Endless Tower with Easy, Veteran, Nightmare, Hell & Torment Difficulties. You can edit the values I pre-assigned: 

  Reveal hidden contents

            .@bonus_hp_rate += 0; // The zero / "0" is calculated in %
            .@bonus_dmg_rate += 0;
            .@bonus_damagetaken += 0;
            .@bonus_hit += 0;
            .@bonus_str += 0;
            .@bonus_agi += 0;
            .@bonus_vit += 0;
            .@bonus_int += 0;
            .@bonus_dex += 0;
            .@bonus_luk += 0;

This part is for the difficulty settings and adding stats to the monsters:

  Reveal hidden contents

// Difficulty Function
//============================================================
function    script    F_Tower_Monster_Summon    {
    .@map$ = getarg(0, "");
    .@x1 = getarg(1, 0);
    .@y1 = getarg(2, 0);
    .@x2 = getarg(3, 0);
    .@y2 = getarg(4, 0);
    .@mob_name$ = getarg(5, 0);
    .@mob_id = getarg(6, 0);
    .@amount = getarg(7, 0);
    .@label$ = getarg(8, "");

    switch('level_mode){
        case 1://Easy
            .@bonus_hp_rate += 0;
            .@bonus_dmg_rate += 0;
            .@bonus_damagetaken += 0;
            .@bonus_hit += 0;
            .@bonus_str += 0;
            .@bonus_agi += 0;
            .@bonus_vit += 0;
            .@bonus_int += 0;
            .@bonus_dex += 0;
            .@bonus_luk += 0;
            break;
        case 2://Veteran
            .@bonus_hp_rate += 100;
            .@bonus_dmg_rate += 100;
            .@bonus_damagetaken += -10;
            .@bonus_hit += 100;    
            .@bonus_str += 100;
            .@bonus_agi += 100;
            .@bonus_vit += 100;
            .@bonus_int += 100;
            .@bonus_dex += 100;
            .@bonus_luk += 100;            
            break;
        case 3://Nightmare
            .@bonus_hp_rate += 250;
            .@bonus_dmg_rate += 250;
            .@bonus_damagetaken += -20;
            .@bonus_hit += 250;            
            .@bonus_str += 250;
            .@bonus_agi += 250;
            .@bonus_vit += 250;
            .@bonus_int += 250;
            .@bonus_dex += 250;
            .@bonus_luk += 250;                
            break;
        case 4://Hell
            .@bonus_hp_rate += 500;
            .@bonus_dmg_rate += 500;
            .@bonus_damagetaken += -30;
            .@bonus_hit += 500;        
            .@bonus_str += 500;
            .@bonus_agi += 500;
            .@bonus_vit += 500;
            .@bonus_int += 500;
            .@bonus_dex += 500;
            .@bonus_luk += 500;                
            break;
        case 5://Torment
            .@bonus_hp_rate += 1000;
            .@bonus_dmg_rate += 1000;
            .@bonus_damagetaken += -40;
            .@bonus_hit += 1000;        
            .@bonus_str += 1000;
            .@bonus_agi += 1000;
            .@bonus_vit += 1000;
            .@bonus_int += 1000;
            .@bonus_dex += 1000;
            .@bonus_luk += 1000;                
            break;
    }
    deletearray $@mobid,getarraysize($@mobid);
    areamonster .@map$, .@x1, .@y1, .@x2, .@y2, .@mob_name$, .@mob_id, .@amount, .@label$;
    copyarray .@GID, $@mobid, getarraysize($@mobid);
    if(!.@bonus_hp_rate&& !.@bonus_dmg_rate&& !.@bonus_damagetaken&& !.@bonus_hit&& !.@bonus_str&& !.@bonus_agi&& !.@bonus_vit&& !.@bonus_int&& !.@bonus_dex&& !.@bonus_luk)
        return;
    getunitdata .@GID, .@ST;

    if(.@bonus_hp_rate){
        .@HP = .@ST[UMOB_MAXHP] + ((.@ST[UMOB_MAXHP] * .@bonus_hp_rate ) /100);
        for(.@i=0;.@i<getarraysize(.@GID);.@i++){            
            setunitdata(.@GID[.@i], UMOB_MAXHP, .@HP);
            setunitdata(.@GID[.@i], UMOB_HP, .@HP);
        }
    }
    if(.@bonus_dmg_rate){
        .@ATKMIN = .@ST[UMOB_ATKMIN] + ((.@ST[UMOB_ATKMIN] * .@bonus_dmg_rate) /100);
        .@ATKMAX = .@ST[UMOB_ATKMAX] + ((.@ST[UMOB_ATKMAX] * .@bonus_dmg_rate) /100);
        .@MATKMIN = .@ST[UMOB_MATKMIN] + ((.@ST[UMOB_MATKMIN] * .@bonus_dmg_rate) /100);
        .@MATKMAX = .@ST[UMOB_MATKMAX] + ((.@ST[UMOB_MATKMAX] * .@bonus_dmg_rate) /100);
        for(.@i=0;.@i<getarraysize(.@GID);.@i++){
            setunitdata(.@GID[.@i], UMOB_ATKMIN, .@ATKMIN);
            setunitdata(.@GID[.@i], UMOB_ATKMAX, .@ATKMAX);
            setunitdata(.@GID[.@i], UMOB_MATKMIN, .@MATKMIN);
            setunitdata(.@GID[.@i], UMOB_MATKMAX, .@MATKMAX);
        }
    }
    if(.@bonus_damagetaken){
        .@DAMAGETAKEN = .@ST[UMOB_DAMAGETAKEN] + ((.@ST[UMOB_DAMAGETAKEN] * .@bonus_damagetaken) /100);
        for(.@i=0;.@i<getarraysize(.@GID);.@i++){        
            setunitdata(.@GID[.@i], UMOB_DAMAGETAKEN, .@DAMAGETAKEN);
        }
    }
    if(.@bonus_hit){
        .@HIT = .@ST[UMOB_HIT] + ((.@ST[UMOB_HIT] * .@bonus_hit) /100);
        for(.@i=0;.@i<getarraysize(.@GID);.@i++){        
            setunitdata(.@GID[.@i], UMOB_HIT, .@HIT);
        }
    }    
    if(.@bonus_str){
        .@STR = .@ST[UMOB_STR] + ((.@ST[UMOB_STR] * .@bonus_str) /100);
        for(.@i=0;.@i<getarraysize(.@GID);.@i++){        
            setunitdata(.@GID[.@i], UMOB_STR, .@STR);
        }
    }    
    if(.@bonus_agi){
        .@AGI = .@ST[UMOB_AGI] + ((.@ST[UMOB_AGI] * .@bonus_agi) /100);
        for(.@i=0;.@i<getarraysize(.@GID);.@i++){        
            setunitdata(.@GID[.@i], UMOB_AGI, .@AGI);
        }
    }    
    if(.@bonus_vit){
        .@VIT = .@ST[UMOB_VIT] + ((.@ST[UMOB_VIT] * .@bonus_vit) /100);
        for(.@i=0;.@i<getarraysize(.@GID);.@i++){        
            setunitdata(.@GID[.@i], UMOB_VIT, .@VIT);
        }
    }
    if(.@bonus_int){
        .@INT = .@ST[UMOB_INT] + ((.@ST[UMOB_INT] * .@bonus_int) /100);
        for(.@i=0;.@i<getarraysize(.@GID);.@i++){        
            setunitdata(.@GID[.@i], UMOB_INT, .@INT);
        }
    }    
    if(.@bonus_dex){
        .@DEX = .@ST[UMOB_DEX] + ((.@ST[UMOB_DEX]) * .@bonus_dex) /100);
        for(.@i=0;.@i<getarraysize(.@GID);.@i++){        
            setunitdata(.@GID[.@i], UMOB_DEX, .@DEX);
        }
    }    
    if(.@bonus_luk){
        .@LUK = .@ST[UMOB_LUK] + ((.@ST[UMOB_LUK] * .@bonus_luk) /100);
        for(.@i=0;.@i<getarraysize(.@GID);.@i++){        
            setunitdata(.@GID[.@i], UMOB_LUK, .@LUK);
        }
    }        
    return;
}

This part is for the rewards: It gives #INSTANCEPOINTS and EXP depending on the difficulty you're on.

  Reveal hidden contents

// Reward Function
//============================================================
function    script    F_Tower_Reward    {
    setarray .@rewards[1],1,3,6,12,24;
    setarray .@modes$[1],"Easy Mode","Veteran Mode","Nightmare Mode","Hell Mode","Torment Mode";
    setarray .@bonusExp[1],653047446,672905476,843378037,6160565694,45000661693;
    'rewardz = .@rewards['level_mode];
    'modez$ = .@modes$['level_mode];
    'bonuzExp = .@bonusExp['level_mode];
    'party_id = instance_live_info(ILI_OWNER);
    getpartymember 'party_id, 1;
    getpartymember 'party_id, 2;
    'map$ = instance_mapname("6@tower");
    copyarray .@CID,$@partymembercid,$@partymembercount;
    copyarray .@AID,$@partymemberaid,$@partymembercount;
    for(.@i=0;.@i<getarraysize(.@CID);.@i++){
        if(isloggedin(.@AID[.@i],.@CID[.@i])){
            if(strcharinfo(3,.@CID[.@i]) == 'map$){
                set(#INSTANCEPOINTS,(getvar(#INSTANCEPOINTS,.@CID[.@i]) + 'rewardz),.@CID[.@i]);
                announce "The party [ "+ getpartyname('party_id) +" ] has defeated Endless Tower on " + 'modez$ + ".",bc_all;
                message strcharinfo(0,.@CID[.@i]),"You've been granted " + 'rewardz + " Instance Points.";
                message strcharinfo(0,.@CID[.@i]),"You now have " + getvar(#INSTANCEPOINTS,.@CID[.@i]) + " Instance Points";
                getexp 'bonuzExp,'bonuzExp,.@CID[.@i];
            }
        }
    }
    return;
}

I assigned a monster (1613 : metalling) to show us that the stats boost really works:

  Reveal hidden contents

    //if(unitexists(.@GID)){
    //    if(.@mob_id == 1613){
    //        debugmes "BEFORE UMOB_MAXHP " + .@ST[UMOB_MAXHP];
    //        debugmes "BEFORE UMOB_ATKMIN " + .@ST[UMOB_ATKMIN];
    //        debugmes "BEFORE UMOB_ATKMAX " + .@ST[UMOB_ATKMAX];
    //        debugmes "BEFORE UMOB_MATKMIN " + .@ST[UMOB_MATKMIN];
    //        debugmes "BEFORE UMOB_MATKMAX " + .@ST[UMOB_MATKMAX];
    //        debugmes "BEFORE UMOB_HIT " + .@ST[UMOB_HIT];            
    //        debugmes "BEFORE UMOB_STR " + .@ST[UMOB_STR];
    //        debugmes "BEFORE UMOB_AGI " + .@ST[UMOB_AGI];
    //        debugmes "BEFORE UMOB_VIT " + .@ST[UMOB_VIT];
    //        debugmes "BEFORE UMOB_INT " + .@ST[UMOB_INT];
    //        debugmes "BEFORE UMOB_DEX " + .@ST[UMOB_DEX];
    //        debugmes "BEFORE UMOB_LUK " + .@ST[UMOB_LUK];
    //       }
    //    }

    //if(unitexists(.@GID)){
    //    if(.@mob_id == 1613){
    //    getunitdata .@GID, .@ST2;
    //        debugmes "AFTER UMOB_MAXHP " + .@ST2[UMOB_MAXHP];
    //        debugmes "AFTER UMOB_ATKMIN " + .@ST2[UMOB_ATKMIN];
    //        debugmes "AFTER UMOB_ATKMAX " + .@ST2[UMOB_ATKMAX];
    //        debugmes "AFTER UMOB_MATKMIN " + .@ST2[UMOB_MATKMIN];
    //        debugmes "AFTER UMOB_MATKMAX " + .@ST2[UMOB_MATKMAX];
    //        debugmes "AFTER UMOB_HIT " + .@ST2[UMOB_HIT];    
    //        debugmes "AFTER UMOB_STR " + .@ST2[UMOB_STR];
    //        debugmes "AFTER UMOB_AGI " + .@ST2[UMOB_AGI];
    //        debugmes "AFTER UMOB_VIT " + .@ST2[UMOB_VIT];
    //        debugmes "AFTER UMOB_INT " + .@ST2[UMOB_INT];
    //        debugmes "AFTER UMOB_DEX " + .@ST2[UMOB_DEX];
    //        debugmes "AFTER UMOB_LUK " + .@ST2[UMOB_LUK];        
    //  }
    //}

 

image.png

 

PS: I'm also integrating this to other instances. Maybe I'll post it if people requests it. 


 

sorry to bump in to this post

can i ask how can i put item as a reward for the party who cleared the ET

like 1 - 3 random items for whole party drop by NS or automatically transfer to party leaders inv

 

EDIT: i hope there is also for nidhogg nest 🙂

Edited by AinsLord
Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  17
  • Topics Per Day:  0.00
  • Content Count:  81
  • Reputation:   12
  • Joined:  06/22/13
  • Last Seen:  

	setarray .@item[1],[item_id],[item_id],[item_id],[item_id],[item_id];

	.......
				message strcharinfo(0,.@CID[.@i]),"You now have " + getvar(#MEMORIALDUNGEONPOINTS,.@CID[.@i]) + " Memorial Dungeon Points";
				.....
                getitem .@item['level_mode],1,.@AID[.@i];

You can declare it something like this. Just look for the function reward. You'll follow

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  3
  • Topics Per Day:  0.00
  • Content Count:  11
  • Reputation:   0
  • Joined:  04/04/17
  • Last Seen:  

I have a problem with your endless tower script.

The monsters are only born in the easy level, in the other levels only the first monster of each line is born

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  3
  • Topics Per Day:  0.00
  • Content Count:  11
  • Reputation:   0
  • Joined:  04/04/17
  • Last Seen:  

        case 1://Normal
            .@bonus_hp_rate += 0;
            .@bonus_dmg_rate += 0;
            .@bonus_damagetaken += 0;
            .@bonus_def += 0;
            .@bonus_mdef += 0;
            .@bonus_hit += 0;            
            .@bonus_flee += 0;

 

Is there a way to add level bonuses to the monster?

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  17
  • Topics Per Day:  0.00
  • Content Count:  81
  • Reputation:   12
  • Joined:  06/22/13
  • Last Seen:  

8 hours ago, Legend said:

        case 1://Normal
            .@bonus_hp_rate += 0;
            .@bonus_dmg_rate += 0;
            .@bonus_damagetaken += 0;
            .@bonus_def += 0;
            .@bonus_mdef += 0;
            .@bonus_hit += 0;            
            .@bonus_flee += 0;

 

Is there a way to add level bonuses to the monster?

Did you mean increase base level of monsters?

UMOB_LEVEL

Link to comment
Share on other sites

  • 1 month later...

  • Group:  Members
  • Topic Count:  16
  • Topics Per Day:  0.06
  • Content Count:  74
  • Reputation:   1
  • Joined:  06/22/23
  • Last Seen:  

Hello can you help. sometimes portal not showing when i clear mobs on the current level 

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  257
  • Topics Per Day:  0.08
  • Content Count:  737
  • Reputation:   18
  • Joined:  11/21/15
  • Last Seen:  

@Louis T Steinhil

image.png.72125e5fd5240c0adb0ccc5012d4bfb2.png

what is this error it seems some floors have it too

21/27/59/70/72/76/98 Floors
and i cant proceed to the NS floor after finishing the 100F

 

Edited by AinsLord
Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  257
  • Topics Per Day:  0.08
  • Content Count:  737
  • Reputation:   18
  • Joined:  11/21/15
  • Last Seen:  

bump

@Louis T Steinhil is it really spam-able entry after finishing the dungeon?

after clicking the destroy instance you can enter again or generate again?

 

thanks

Link to comment
Share on other sites

  • 2 weeks later...

  • Group:  Members
  • Topic Count:  47
  • Topics Per Day:  0.01
  • Content Count:  104
  • Reputation:   8
  • Joined:  11/20/13
  • Last Seen:  

Could someone explain to me how to fix these errors?

 

image.thumb.png.30567d3b7586806ede9b8ec4a287db4b.png

Edited by Yukaiii
Link to comment
Share on other sites


  • Group:  Forum Moderator
  • Topic Count:  47
  • Topics Per Day:  0.01
  • Content Count:  797
  • Reputation:   101
  • Joined:  05/23/12
  • Last Seen:  

On makeitem u have to change 2048 to true.

Change disablenpc(); to disablenpc;

 

The warnings already describes what u have to do.

 

Rynbef~

Edited by Rynbef
Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  17
  • Topics Per Day:  0.00
  • Content Count:  81
  • Reputation:   12
  • Joined:  06/22/13
  • Last Seen:  

On 7/30/2023 at 7:31 PM, AinsLord said:

bump

@Louis T Steinhil is it really spam-able entry after finishing the dungeon?

after clicking the destroy instance you can enter again or generate again?

 

thanks

It's for GM's only. Normal players doesn't have that choice.

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  17
  • Topics Per Day:  0.00
  • Content Count:  81
  • Reputation:   12
  • Joined:  06/22/13
  • Last Seen:  

On 7/29/2023 at 11:44 PM, AinsLord said:

@Louis T Steinhil

image.png.72125e5fd5240c0adb0ccc5012d4bfb2.png

what is this error it seems some floors have it too

21/27/59/70/72/76/98 Floors
and i cant proceed to the NS floor after finishing the 100F

 

It has to do with the number of monsters being summoned. If you reduce the numbers being summoned that error will go away. I don't know how to fix that coz its src code.

Link to comment
Share on other sites


  • Group:  Forum Moderator
  • Topic Count:  47
  • Topics Per Day:  0.01
  • Content Count:  797
  • Reputation:   101
  • Joined:  05/23/12
  • Last Seen:  

The for loops have a limit to prevent endless loops. The warning shows "Infinity loop" on big for loops. Add before for loop:

freeloop(1);

and after the for loop add:

freeloop(0);

 

Rynbef~

Edited by Rynbef
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...