diff options
Diffstat (limited to 'world/map/npc/functions/default_npc_checks.txt')
-rw-r--r-- | world/map/npc/functions/default_npc_checks.txt | 125 |
1 files changed, 125 insertions, 0 deletions
diff --git a/world/map/npc/functions/default_npc_checks.txt b/world/map/npc/functions/default_npc_checks.txt new file mode 100644 index 00000000..4ddd00ca --- /dev/null +++ b/world/map/npc/functions/default_npc_checks.txt @@ -0,0 +1,125 @@ +// Default NPC Checks +// Author: Wushin + +// Range +// Map, X, Y, Distance in Tiles +// setarray $@npc_loc, 24, 113, 4; +function|script|PCtoNPCRange|, +{ + set @npc_check, 0; + set $@Nmap$, getmap() + ".gat"; + 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; + goto L_Return; + +L_Return: + return; +} + +// Inventory & Weight +// setarray @delitem_names$ Items to delete +// @delitem_counts Counts of Items to delete +// @getitem_names$ 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; + + if (getarraysize(@delitem_names$)) + goto L_DelItemsLoop; + goto L_CheckGet; + +L_DelItemsLoop: + if(countitem(@delitem_names$[@delitem_loop]) >= @delitem_counts[@delitem_loop]) + goto L_DelLoopAgain; + goto L_ReturnMissing; + +L_DelLoopAgain: + if((@delitems_loop + 1) == getarraysize(@delitems_names$)) + goto L_CheckGet; + set @delitems_loop, (@delitems_loop + 1); + goto L_DelItemsLoop; + +L_CheckGet: + if (getarraysize(@getitem_names$)) + goto L_CheckWeight; + goto L_DelCheck; + +L_CheckWeight: + getinventorylist; + if (@inventorylist_count < (101 - getarraysize(@getitem_names$))) + goto L_ReturnSpace; + goto L_GetItemsLoop; + +L_GetItemsLoop: + if (checkweight(@getitem_names$, 1) == 0) + goto L_GetLoopAgain; + goto L_ReturnWeight; + +L_GetLoopAgain: + if((@getitems_loop + 1) == getarraysize(@getitems_names$)) + goto L_DelCheck; + set @getitems_loop, (@getitems_loop + 1); + goto L_GetItemsLoop; + +L_DelCheck: + if (getarraysize(@delitem_names$)) + goto L_DelLoop; + goto L_CheckGet2; + +L_DelLoop: + delitem @delitem_names$[@del_loop], @delitem_counts[@del_loop]; + goto L_DelAgain; + +L_DelAgain: + if((@del_loop + 1) == getarraysize(@delitems_names$)) + goto L_GetLoop; + set @del_loop, (@del_loop + 1); + goto L_DelLoop; + +L_CheckGet2: + if (getarraysize(@getitem_names$)) + goto L_GetLoop; + goto L_Return; + +L_GetLoop: + getitem @getitem_names$[@get_loop], @getitem_counts[@get_loop]; + goto L_GetAgain; + +L_GetAgain: + if((@get_loop + 1) == getarraysize(@getitems_names$)) + goto L_Return; + set @get_loop, (@get_loop + 1); + goto L_GetLoop; + +L_ReturnMissing: + mes "\"You are missing required items.\""; + set @check_fail, 1; + goto L_Return; + +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_names$, "", getarraysize(@delitem_names$); + cleararray @getitem_names$, "", getarraysize(@getitem_names$); + return; +} |