Hello everyone, this is Euphy's @autopots. This one is working! Is it possible for me to request an autopots using SP pots? For example, a player's SP is 50%, it will autopots his/her SP to 75%. Something like that.
//===== rAthena Script =======================================
//= Auto-Potion
//===== By: ==================================================
//= Euphy
//===== Current Version: =====================================
//= 1.0
//===== Compatible With: =====================================
//= rAthena Project
//===== Description: =========================================
//= Provides an @autopot command to automatically use potions
//= when hit (i.e. 'autobonus2').
//===== Additional Comments: =================================
//= 1.0 First version. [Euphy]
//============================================================
- script #autopot -1,{
OnInit:
bindatcmd("autopot",strnpcinfo(0)+"::OnCommand");
end;
L_Help:
dispbottom "Available commands:";
dispbottom " @autopot <item id> {<min hp % [1..100]> {<delay [50..1000]>}}";
dispbottom " @autopot <on|off>";
dispbottom " @autopot list";
dispbottom " @autopot info";
dispbottom " @autopot help";
return;
L_Info:
dispbottom "------ Auto-Potion Information ------";
dispbottom "POTION: " + getitemname(@autopot_id) + " (" + @autopot_id + ")";
dispbottom "MIN HP: " + @autopot_min + " %";
dispbottom "DELAY: " + @autopot_delay + " ms";
dispbottom "---------------------------------------------";
return;
L_Start:
.@potion = getarg(0);
.@min = getarg(1);
.@delay = getarg(2);
if (.@min < 1 || .@min > 100) .@min = 90;
if (.@delay < 50 || .@delay > 1000) .@delay = 50; // lower values will increase server strain
switch (.@potion) {
case 501:
case 507:
case 545:
case 569: .@effect = EF_POTION1; break;
case 502: .@effect = EF_POTION2; break;
case 503:
case 508:
case 546:
case 579:
case 11500: .@effect = EF_POTION3; break;
case 504:
case 509:
case 547:
case 11501:
case 11503:
case 11548: .@effect = EF_POTION4; break;
case 512:
case 513:
case 515:
case 516:
case 548:
case 549:
case 550:
case 582:
case 607: .@effect = EF_POTION7; break;
default: .@effect = EF_EXIT; break;
}
if (BaseLevel < getiteminfo(.@potion,12)) {
message strcharinfo(0), "Your base level is too low to use '" + getitemname(.@potion) + "'.";
end;
}
@autopot_id = .@potion;
@autopot_min = .@min;
@autopot_delay = .@delay;
@autopot_eff = .@effect;
@autopot_none = 0;
bonus_script "{ callfunc \"start_autopot\"; }",86400,8,0,SI_INCHEALRATE;
message strcharinfo(0), "Auto-Potion started.";
callsub L_Info;
return;
OnCommand:
if (!getarraysize(.@atcmd_parameters$)) {
message strcharinfo(0), "Invalid syntax.";
callsub L_Help;
end;
}
.@command$ = strtolower(.@atcmd_parameters$[0]);
if (.@command$ == "on") {
if (@autopot_min)
message strcharinfo(0), "Auto-Potion is already on.";
else if (@autopot_min_) {
@autopot_min = @autopot_min_;
@autopot_min_ = 0;
message strcharinfo(0), "Auto-Potion enabled.";
callsub L_Info;
} else {
message strcharinfo(0), "Auto-Potion has not been set.";
callsub L_Help;
}
end;
} else if (.@command$ == "off") {
if (!@autopot_min)
message strcharinfo(0), "Auto-Potion is already off.";
else {
@autopot_min_ = @autopot_min;
@autopot_min = 0;
message strcharinfo(0), "Auto-Potion disabled.";
}
end;
} else if (.@command$ == "list") { // credits to AnnieRuru
getinventorylist;
for (; .@i < @inventorylist_count; .@i++) {
if (getiteminfo(@inventorylist_id[.@i],2) == IT_HEALING) {
.@items[.@count] = @inventorylist_id[.@i];
.@menu$ = .@menu$ + sprintf("~ ^0055FF%s^000000 (%dx):", getitemname(@inventorylist_id[.@i]), countitem(@inventorylist_id[.@i]));
.@count++;
}
}
if (.@count) { // 'mes' window needed if player is hit during selection
mes "[ Auto-Potion ]";
mes "Select a healing item.";
.@select = select(.@menu$ + " ^777777Cancel^000000") - 1;
if (.@select != .@count)
callsub L_Start, .@items[.@select], 0, 0;
close2;
} else
message strcharinfo(0), "There are no healing items in your inventory.";
end;
} else if (.@command$ == "info") {
if (@autopot_min) {
message strcharinfo(0), "Auto-Potion information is displayed below.";
callsub L_Info;
} else
message strcharinfo(0), "Auto-Potion is not enabled.";
end;
} else if (.@command$ == "help") {
message strcharinfo(0), "List of commands is displayed below.";
callsub L_Help;
end;
} else {
.@potion = atoi(.@atcmd_parameters$[0]);
if (getiteminfo(.@potion,2) != IT_HEALING) {
message strcharinfo(0), getitemname(.@potion) + " is not a healing item.";
end;
}
callsub L_Start, .@potion, atoi(.@atcmd_parameters$[1]), atoi(.@atcmd_parameters$[2]);
end;
}
}
function script start_autopot {
if (@autopot_active) end;
@autopot_active = 1;
while (Hp && Hp * 100 / MaxHp < @autopot_min) {
if (!countitem(@autopot_id)) {
if (@autopot_none <= gettimetick(2)) {
@autopot_none = gettimetick(2) + 10;
dispbottom "There are no '" + getitemname(@autopot_id) + "' in your inventory.";
}
break;
}
if (getstatus(SC_BERSERK) || getstatus(SC_SATURDAYNIGHTFEVER) || getstatus(SC_GRAVITATION) ||
getstatus(SC_TRICKDEAD) || getstatus(SC_HIDING) || getstatus(SC__SHADOWFORM) || getstatus(SC__INVISIBILITY) ||
getstatus(SC__MANHOLE) || getstatus(SC_KAGEHUMI) || getstatus(SC_HEAT_BARREL_AFTER))
break;
if (getstatus(SC_STONE) || getstatus(SC_FREEZE) || getstatus(SC_STUN) || getstatus(SC_SLEEP))
;
else {
delitem @autopot_id,1;
consumeitem @autopot_id;
specialeffect2 @autopot_eff;
}
sleep2 @autopot_delay;
}
@autopot_active = 0;
autobonus2 "{}",10000,1,BF_WEAPON|BF_MAGIC;
end;
}
Question
awesomazingxed
Hello everyone, this is Euphy's @autopots. This one is working! Is it possible for me to request an autopots using SP pots? For example, a player's SP is 50%, it will autopots his/her SP to 75%. Something like that.
Link to comment
Share on other sites
0 answers to this question
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.