//===== 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 { {}}"; dispbottom " @autopot "; 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; }