// Default NPC Checks
// Author: Wushin, mekolat
// Range
// Distance in Tiles
// set @npc_distance, 4;
function|script|PCtoNPCRange
{
set @npc_check, 0;
set @Nmap$, strnpcinfo(3);
if(!@npc_distance) set @npc_distance, 4; // <== default distance
if(@npc_distance == (1-2)) set @npc_distance, ATTACKRANGE;
cleararray @npc_loc, 0, 3;
setarray @npc_loc, getnpcx(), getnpcy(), @npc_distance;
set @Nx1, (@npc_loc[0] - @npc_loc[2]);
set @Ny1, (@npc_loc[1] - @npc_loc[2]);
set @Nx2, (@npc_loc[0] + @npc_loc[2]);
set @Ny2, (@npc_loc[1] + @npc_loc[2]);
if (isin(@Nmap$, @Nx1, @Ny1, @Nx2, @Ny2))
goto L_Return;
set @npc_check, 1;
if(@distance_handler) goto L_Return;
set @dnpc_name$, strnpcinfo(1);
if(@dnpc_name$ != "") goto L_Named;
message strcharinfo(0), "Server : ##BYou need to move closer to interact with this npc.";
goto L_Return;
L_Named:
message strcharinfo(0), ""+@dnpc_name$+" : ##BPlease move closer.";
goto L_Return;
L_Return:
set @dnpc_name$, "";
set @distance_handler, 0;
set @npc_distance, 0;
cleararray @npc_loc, 0, 3;
return;
}
// Inventory & Weight
// @delitem_ids Items to delete
// @delitem_counts Counts of Items to delete
// @getitem_ids Items to get
// @getitem_counts Counts of Items to get
function|script|CheckInventory
{
set @del_loop, 0;
set @get_loop, 0;
set @delitem_loop, 0;
set @getitem_loop, 0;
set @check_fail, 0;
set @msg_loop, 0;
if (getarraysize(@delitem_ids))
goto L_DelItemsLoop;
goto L_CheckGet;
L_DelItemsLoop:
if(countitem(@delitem_ids[@delitem_loop]) >= @delitem_counts[@delitem_loop])
goto L_DelLoopAgain;
goto L_ReturnMissing;
L_DelLoopAgain:
set @delitem_loop, (@delitem_loop + 1);
if(@delitem_loop == getarraysize(@delitem_ids))
goto L_CheckGet;
goto L_DelItemsLoop;
L_CheckGet:
if (getarraysize(@getitem_ids))
goto L_CheckWeight;
goto L_DelCheck;
L_CheckWeight:
getinventorylist;
if (100 < (@inventorylist_count + getarraysize(@getitem_ids)))
goto L_ReturnSpace;
goto L_GetItemsLoop;
L_GetItemsLoop:
if (checkweight(@getitem_ids[@getitem_loop], @getitem_counts[@getitem_loop]))
goto L_GetLoopAgain;
goto L_ReturnWeight;
L_GetLoopAgain:
set @getitem_loop, (@getitem_loop + 1);
if(@getitem_loop == getarraysize(@getitem_ids))
goto L_DelCheck;
goto L_GetItemsLoop;
L_DelCheck:
if (getarraysize(@delitem_ids))
goto L_DelLoop;
goto L_CheckGet2;
L_DelLoop:
delitem @delitem_ids[@del_loop], @delitem_counts[@del_loop];
goto L_DelAgain;
L_DelAgain:
set @del_loop, (@del_loop + 1);
if(@del_loop == getarraysize(@delitem_ids))
goto L_GetLoop;
goto L_DelLoop;
L_CheckGet2:
if (getarraysize(@getitem_ids))
goto L_GetLoop;
goto L_Return;
L_GetLoop:
misceffect FX_GETITEM, strcharinfo(0);
getitem @getitem_ids[@get_loop], @getitem_counts[@get_loop];
goto L_GetAgain;
L_GetAgain:
set @get_loop, (@get_loop + 1);
if(@get_loop == getarraysize(@getitem_ids))
goto L_Return;
goto L_GetLoop;
L_ReturnMissing:
set @check_fail, 1;
mes "\"You are missing required items.\"";
goto L_MissingMsg;
L_MissingMsg:
mes "[@@"+@delitem_ids[@msg_loop]+"|"+getitemlink(@delitem_ids[@msg_loop])+"@@] "+countitem(getitemlink(@delitem_ids[@msg_loop]))+"/"+@delitem_counts[@msg_loop];
goto L_NextMsgCheck;
L_NextMsgCheck:
set @msg_loop, (@msg_loop + 1);
if(@msg_loop == getarraysize(@delitem_ids))
goto L_Return;
goto L_MissingMsg;
L_ReturnWeight:
mes "\"You need to be carrying less weight.\"";
next;
set @check_fail, 1;
goto L_Return;
L_ReturnSpace:
mes "\"You need more room in your inventory.\"";
next;
set @check_fail, 1;
goto L_Return;
L_Return:
cleararray @delitem_ids, "", getarraysize(@delitem_ids);
cleararray @delitem_counts, "", getarraysize(@delitem_counts);
cleararray @getitem_ids, "", getarraysize(@getitem_ids);
cleararray @getitem_counts, "", getarraysize(@getitem_counts);
return;
}