
These scripts have been chosen for being unique and useful, yet structurally simple. In this way, they can serve as usable reference material for future user scripts. Contents: * Battleground: bg_emp (Emperium breaker), bg_pvp (PVP match) * Event: mvp_ladder (kill every MVP to win), devil_square (3-round monster summoning event) * Utility: card_seller (sells all monster cards), mvp_room (private MVP summoning room), autopot (automatically use potions when hit) Credits to AnnieRuru for offering up her scripts and modifying them for use. Other changes: * Moved previous custom battleground scripts into 'battleground/unofficial/'. * Moved custom holiday event scripts into 'event/holiday/'. Signed-off-by: Euphy <euphy.raliel@rathena.org>
189 lines
5.5 KiB
Plaintext
189 lines
5.5 KiB
Plaintext
//===== 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;
|
|
}
|