123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201 |
- //===== rAthena Script =======================================
- //= Auto-Potion
- //===== Description: =========================================
- //= Provides an @autopot command to automatically use potions.
- //===== Changelogs: ==========================================
- //= 1.0 First version. [Euphy]
- //= 2.0 rewrite and adding SP option. [sader1992]
- //============================================================
- - script #autopot -1,{
- OnInit:
- .HP_Option = true; //Allow HP option
- .SP_Option = true; //Allow SP option
- .MinDelay = 100; //Minimum Delay Allowed in milliseconds (Default and Recommended: 100) [lower values will increase server strain]
- setarray .blackList[0],0; //Array of black listed item ID
- if(!.HP_Option && !.SP_Option){
- debugmes "Warning: @autopot both hp and sp are Disabled";
- debugmes "Warning: @autopot script has been Disabled!";
- end;
- }
- bindatcmd("autopot",strnpcinfo(0)+"::OnCommand",0,99);
- end;
- L_Help:
- dispbottom "Available commands:";
- if(.HP_Option && .SP_Option){
- dispbottom " @autopot <hp|sp> <item id> {<min hp|sp % [1..100]> {<delay [" + .MinDelay + "..1000]>}}";
- dispbottom " @autopot <hp|sp> list";
- dispbottom " @autopot <hp|sp> <on|off>";
- }else{
- dispbottom " @autopot <" + (.HP_Option?"hp":"sp") + "> <item id> {<min " + (.HP_Option?"hp":"sp") + " % [1..100]> {<delay [" + .MinDelay + "..1000]>}}";
- dispbottom " @autopot <" + (.HP_Option?"hp":"sp") + "> list";
- dispbottom " @autopot <" + (.HP_Option?"hp":"sp") + "> <on|off>";
- }
- dispbottom " @autopot info";
- dispbottom " @autopot help";
- dispbottom " @autopot blacklist";
- return;
- L_Info:
- dispbottom "----------Auto-Potion Information-----------";
- if(.HP_Option){
- dispbottom "HP POTION: " + getitemname(@autopot_hp_ID) + " (" + @autopot_hp_ID + ")";
- dispbottom "MIN HP: " + @autopot_hp_Min + " %";
- }
- if(.SP_Option){
- dispbottom "SP POTION: " + getitemname(@autopot_sp_ID) + " (" + @autopot_sp_ID + ")";
- dispbottom "MIN SP: " + @autopot_sp_Min + " %";
- }
- dispbottom "DELAY: " + @autopot_delay + " ms";
- dispbottom "---------------------------------------------";
- return;
- L_Start:
- deltimer strnpcinfo(3) + "::OnStart";
- .@type$ = getarg(0,0);
- .@potion = getarg(1,0);
- setd "@autopot_" + .@type$ + "_Min",getarg(2,0);
- @autopot_delay = getarg(3,0);
- if (getd("@autopot_" + .@type$ + "_Min") < 1 || getd("@autopot_" + .@type$ + "_Min") > 100) setd "@autopot_" + .@type$ + "_Min",90;
- if (@autopot_delay < 50 || @autopot_delay > 1000) @autopot_delay = .MinDelay;
- if (getiteminfo(.@potion,2) != IT_HEALING) {
- dispbottom getitemname(.@potion) + " is not a healing item.";
- end;
- }
- if(inarray(.blackList[0],.@potion) != -1){
- message strcharinfo(0), "'" + getitemname(.@potion) + "' is black listed and cannot be used.";
- end;
- }
- if (BaseLevel < getiteminfo(.@potion,12)) {
- message strcharinfo(0), "Your base level is too low to use '" + getitemname(.@potion) + "'.";
- end;
- }
- setd "@autopot_" + .@type$ + "_ID",.@potion;
- setd "@autopot_" + .@type$ + "_Active",true;
- addtimer .@delay,strnpcinfo(3) + "::OnStart";
- message strcharinfo(0), "Auto-Potion " + strtoupper(.@type$) + " enabled.";
- callsub L_Info;
- return;
- OnCommand:
- if (!getarraysize(.@atcmd_parameters$)) {
- message strcharinfo(0), "Invalid syntax.";
- callsub L_Help;
- end;
- }
- .@command$[0] = strtolower(.@atcmd_parameters$[0]);
- .@command$[1] = strtolower(.@atcmd_parameters$[1]);
-
- if(.@command$[0] == "hp" || .@command$[0] == "sp"){
- if((!.HP_Option && .@command$[0] == "hp") || (!.SP_Option && .@command$[0] == "sp")){
- message strcharinfo(0), "Auto-Potion " + strtoupper(.@command$[0]) + " is Disabled from The Server.";
- end;
- }
- if(.@command$[1] == "on"){
- if(getd("@autopot_" + .@command$[0] + "_Active")){
- message strcharinfo(0), "Auto-Potion " + strtoupper(.@command$[0]) + " is already on.";
- end;
- }
- if(!getd("@autopot_" + .@command$[0] + "_ID")){
- dispbottom "You need to set a " + strtoupper(.@command$[0]) + " Potion to be used.";
- callsub L_Help;
- end;
- }
- callsub L_Start,.@command$[0],getd("@autopot_" + .@command$[0] + "_ID");
- end;
- }
- if(.@command$[1] == "off"){
- message strcharinfo(0), "Auto-Potion " + strtoupper(.@command$[0]) + " disabled.";
- setd "@autopot_" + .@command$[0] + "_Active",false;
- if(!@autopot_hp_Active || !@autopot_sp_Active)
- deltimer strnpcinfo(3) + "::OnStart";
- end;
- }
- if(.@command$[1] == "list"){
- getinventorylist;
- for(.@i = 0;.@i < @inventorylist_count;.@i++){
- if (getiteminfo(@inventorylist_id[.@i],2) == IT_HEALING) {
- .@items[.@count] = @inventorylist_id[.@i];
- .@menu$ = .@menu$ + sprintf("~ ^0055FF%s^000000 (%dx)" + (inarray(.blackList[0],@inventorylist_id[.@i]) != -1? " ^364022Black Listed^000000":"") + (BaseLevel < getiteminfo(@inventorylist_id[.@i],12)? " ^E82C0CNeed Higher Level^000000":"") + ":", getitemname(@inventorylist_id[.@i]), countitem(@inventorylist_id[.@i]));
- .@count++;
- }
- }
- if(.@count){
- mes "[ Auto-Potion ]";
- mes "Select a " + strtoupper(.@command$[0]) + " item.";
- .@select = select(.@menu$ + " ^777777Cancel^000000") - 1;
- if (.@select != .@count)
- callsub L_Start,.@command$[0],.@items[.@select];
- close2;
- }else{
- message strcharinfo(0), "There are no healing items in your inventory.";
- }
- end;
- }
- .@potion = atoi(.@command$[1]);
- .@percent = atoi(.@atcmd_parameters$[2]);
- .@delay = atoi(.@atcmd_parameters$[3]);
- if(getitemname(.@potion) != "null"){
- callsub L_Start,.@command$[0],.@potion,.@percent,.@delay;
- end;
- }
- message strcharinfo(0), "Auto-Potion : something went wrong!";
- callsub L_Help;
- end;
- }
- if(.@command$[0] == "blacklist"){
- dispbottom "--------------Black Listed Items--------------";
- for(.@i=0;.@i<getarraysize(.blackList);.@i++){
- dispbottom " " + getitemname(.blackList[.@i]) + " (" + .blackList[.@i] + ")";
- }
- dispbottom "---------------------------------------------";
- end;
- }
- if(.@command$[0] == "info"){
- if(@autopot_hp_Active || @autopot_sp_Active){
- message strcharinfo(0), "Auto-Potion information is displayed below.";
- callsub L_Info;
- }else{
- message strcharinfo(0), "Auto-Potion is not enabled.";
- }
- end;
- }
- if(.@command$[0] == "help"){
- message strcharinfo(0), "List of commands is displayed below.";
- callsub L_Help;
- end;
- }
-
- message strcharinfo(0), "Invalid syntax.";
- callsub L_Help;
- end;
- OnStart:
- 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) &&
- !getstatus(SC_STONE) && !getstatus(SC_FREEZE) && !getstatus(SC_STUN) && !getstatus(SC_SLEEP))
- {
- if(Hp){
- if(@autopot_hp_Active && Hp * 100 / MaxHp < @autopot_hp_Min) {
- if (countitem(@autopot_hp_ID)) {
- delitem @autopot_hp_ID,1;
- consumeitem @autopot_hp_ID;
- specialeffect2 207;
- }
- }
- if(@autopot_sp_Active && Sp * 100 / MaxSp < @autopot_sp_Min) {
- if (countitem(@autopot_sp_ID)) {
- delitem @autopot_sp_ID,1;
- consumeitem @autopot_sp_ID;
- specialeffect2 208;
- }
- }
- }
- }
- if(@autopot_hp_Active || @autopot_sp_Active)
- addtimer @autopot_delay,strnpcinfo(3) + "::OnStart";
- end;
- }
|