@big10p: Thanks for the input. Ok, I used types. I've created one
InventoryList List Type that mimics mySQL INVENTORY table. This is what I came up with:
;============================
;INVENTORYTABLEITEM CLASS
;Generated with TypeWriter V
;============================
;============================
;CONSTANTS
;============================
Const INVENTORYTABLEITEM_MAX%=1024
;============================
;GLOBALS
;============================
Global inventoryTableItem_ID.inventoryTableItem[INVENTORYTABLEITEM_MAX%];Primary Key Object Pointer
Global inventoryTableItem_Index%[INVENTORYTABLEITEM_MAX%], inventoryTableItem_IndexPointer%;Primary Key ID Management Stack
;============================
;OBJECT
;============================
Type inventoryTableItem
;Purpose: Loolup Table by Name for all possible items
;Properties:
Field id%;
Field name$;
End Type
;============================
;METHODS
;============================
Function inventoryTableItemStart()
;Purpose: Initialize Class
;Parameters: TBD
;Return: None
For inventoryTableItemloop=INVENTORYTABLEITEM_MAX To 1 Step -1; Initialize Primary Key ID Management Stack
inventoryTableItemIndexPush(inventoryTableItemloop)
Next
End Function
Function inventoryTableItemStop()
;Purpose: Shutdown Class
;Parameters: TBD
;Return: None
For this.inventoryTableItem=Each inventoryTableItem
inventoryTableItemDelete(this)
Next
End Function
Function inventoryTableItemNew.inventoryTableItem()
;Purpose: CONSTRUCTOR - Creates inventoryTableItem Instance; Sets Default Property Values
;Parameters: TBD
;Return: inventoryTableItem Instance
this.inventoryTableItem=New inventoryTableItem
this\id%=0
this\name$=""
this\id%=inventoryTableItemIndexPop()
inventoryTableItem_ID[this\id%]=this
Return this
End Function
Function inventoryTableItemDelete(this.inventoryTableItem)
;Purpose: DESTRUCTOR - Removes inventoryTableItem Instance
;Parameters: inventoryTableItem Instance
;Return: None
inventoryTableItem_ID[this\id]=Null
inventoryTableItemIndexPush(this\id%)
this\name$=""
Delete this
End Function
Function inventoryTableItemIndexPush(inventoryTableItemid%)
;Purpose: Pushes ID into Primary Key ID Management Stack
;Parameters: inventoryTableItemid=Object's ID
;Return: None
inventoryTableItem_Index[inventoryTableItem_IndexPointer]=inventoryTableItemid%
inventoryTableItem_IndexPointer=inventoryTableItem_IndexPointer+1
End Function
Function inventoryTableItemIndexPop()
;Purpose: Pops ID out of Primary Key ID Management Stack
;Parameters: None
;Return: Object ID%
inventoryTableItem_IndexPointer=inventoryTableItem_IndexPointer-1
Return inventoryTableItem_Index[inventoryTableItem_IndexPointer]
End Function
Function inventoryTableItemAdd%(inventoryTableItemname$)
;Purpose: Creates an Object and returns it ID
;Parameters: Object's Properties
;Return: Object's ID%
this.inventoryTableItem=inventoryTableItemNew()
this\name$=inventoryTableItemname$
Return this\id
End Function
Function inventoryTableItemIndexGet%(inventoryTableItemname$)
;Purpose: Returns Index for inventorytableitem, a unique index is used for each entry
; If the name is not found it will add it to the table, returning the new index
;Parameters: TBD
;Return: None
For this.inventoryTableItem = Each inventoryTableItem
If this\name = inventoryTableItemname$
Return this\ID
EndIf
Next
Return inventoryTableItemAdd(inventoryTableItemname$)
End Function
;============================
;INVENTORY CLASS
;Generated with TypeWriter V
;============================
;============================
;CONSTANTS
;============================
Const INVENTORY_MAX%=16
Const INVENTORY_TYPE_GIVE%=0
Const INVENTORY_TYPE_TAKE%=1
;============================
;OBJECT
;============================
Type inventory
;Purpose:
;Properties:
Field typeid%;
Field inventoryitem.inventoryitem[INVENTORYITEM_MAX%];
Field inventoryitems;
End Type
;============================
;METHODS
;============================
Function inventoryStart()
;Purpose: Initialize Class
;Parameters: TBD
;Return: None
End Function
Function inventoryStop()
;Purpose: Shutdown Class
;Parameters: TBD
;Return: None
For this.inventory=Each inventory
inventoryDelete(this)
Next
End Function
Function inventoryNew.inventory(inventorytypeid=INVENTORY_TYPE_GIVE)
;Purpose: CONSTRUCTOR - Creates inventory Instance; Sets Default Property Values
;Parameters: TBD
;Return: inventory Instance
this.inventory=New inventory
this\typeid%=inventorytypeid
Return this
End Function
Function inventoryDelete(this.inventory)
;Purpose: DESTRUCTOR - Removes inventory Instance
;Parameters: inventory Instance
;Return: None
Delete this
End Function
Function InventoryCheck(take.inventory,give.inventory)
;Purpose: Checks all items in the take list against item players give inventory.
;Parameters:
; take inventory list object
; give inventory list object
;Return: FALSE if a failure exists, TRUE Otherwise
For takeinventoryitems = 1 To take\inventoryitems
;DebugLog take\inventoryitem[takeinventoryitems]\inventoryID
If give\inventoryitem[take\inventoryitem[takeinventoryitems]\inventorytableid] <> Null
If Not InventoryItemCompare(take\inventoryitem[takeinventoryitems], give\inventoryitem[take\inventoryitem[takeinventoryitems]\inventorytableid]) Return False
InventoryItemMatch = True
EndIf
If InventoryItemMatch = False And take\inventoryitem[takeinventoryitems]\requirement = INVENTORYITEM_REQUIREMENT_MANDATORY Return False
InventoryItemMatch = False
Next
Return True
End Function
Function InventoryAddItem(this.inventory, inventoryitemname$="", inventoryitemvalue%=0, inventoryitemcondition%=0, inventoryitemrequirement%=INVENTORYITEM_REQUIREMENT_MANDATORY)
;Purpose: Adss item to inventory list. the last item in the list is move into the open position.
;Parameters:
; this give inventory list object
; inventoryitem name - name of item
; inventoryitemvalue - value of inventory
; inventoryitemcondition - INVENTORYITEM_CONDITION_NQ:1,INVENTORYITEM_CONDITION_EQ:2,INVENTORYITEM_CONDITION_GT:3
; INVENTORYITEM_CONDITION_GE:4,INVENTORYITEM_CONDITION_LT:5,INVENTORYITEM_CONDITION_LE:6
;Return: none
Select this\typeid
Case INVENTORY_TYPE_TAKE
this\inventoryitems = this\inventoryitems + 1
this\inventoryitem[this\inventoryitems] = inventoryitemNew(InventoryTableItemIndexGet%(inventoryitemname$), inventoryitemvalue, inventoryitemcondition%, inventoryitemrequirement%)
Case INVENTORY_TYPE_GIVE
this\inventoryitems = this\inventoryitems + 1
this\inventoryitem[inventoryTableItemIndexGet%(inventoryitemname$)] = inventoryitemNew(inventoryTableItemIndexGet%(inventoryitemname$), inventoryitemvalue%, inventoryitemcondition%, inventoryitemrequirement%)
End Select
End Function
Function InventoryRemoveItem(this.inventory,inventoryitemtableid)
;Purpose: Removes item from inventory list
;Parameters:
; take inventory list object
;Return: none
inventoryItemDelete(this\inventoryitem[inventoryitemtableid])
this\inventoryitems = this\inventoryitems - 1
End Function
;============================
;INVENTORYITEM CLASS
;Generated with TypeWriter V
;============================
;============================
;CONSTANTS
;============================
Const INVENTORYITEM_MAX%=1024
Const INVENTORYITEM_CONDITION_NQ = 0
Const INVENTORYITEM_CONDITION_EQ = 1
Const INVENTORYITEM_CONDITION_GT = 2
Const INVENTORYITEM_CONDITION_GE = 3
Const INVENTORYITEM_CONDITION_LT = 4
Const INVENTORYITEM_CONDITION_LE = 5
Const INVENTORYITEM_REQUIREMENT_OPTIONAL = 0
Const INVENTORYITEM_REQUIREMENT_MANDATORY = 1
;============================
;OBJECT
;============================
Type inventoryItem
;Purpose:
;Properties:
Field inventorytableid%;
Field value%;
Field condition%;
Field requirement%;
End Type
;============================
;METHODS
;============================
Function inventoryItemStart()
;Purpose: Initialize Class
;Parameters: TBD
;Return: None
End Function
Function inventoryItemStop()
;Purpose: Shutdown Class
;Parameters: TBD
;Return: None
For this.inventoryItem=Each inventoryItem
inventoryItemDelete(this)
Next
End Function
Function inventoryItemNew.inventoryItem(inventoryitemtableid%=0, inventoryitemvalue%=0, inventoryitemcondition%=0, inventoryitemrequirement%=INVENTORYITEM_REQUIREMENT_MANDATORY)
;Purpose: CONSTRUCTOR - Creates inventoryItem Instance; Sets Default Property Values
;Parameters:
; inventoryitemtableid% Lookup TableID
; inventoryitemvalue% Value
; inventoryitemcondition% Logic Condition
; inventoryitemrequirement%=INVENTORYITEM_REQUIREMENT_MANDATORY,_OPTIONAL,_RANDOM
;Return: inventoryItem Instance
this.inventoryItem=New inventoryItem
this\inventorytableid%=inventoryitemtableid%
this\value%=inventoryitemvalue
this\condition%=inventoryitemcondition
this\requirement% = inventoryitemrequirement
Return this
End Function
Function inventoryItemDelete(this.inventoryItem)
;Purpose: DESTRUCTOR - Removes inventoryItem Instance
;Parameters: inventoryItem Instance
;Return: None
Delete this
End Function
Function InventoryItemCompare(takeinventoryitem.inventoryitem,giveinventoryitem.inventoryitem)
;Purpose: compares take inventory item value against give inventory item value using the condition in the take item
;Parameters: takeinventoryitem , giveinventoryitem
;Return: TRUE if check is sucessful, FALSE otherwise
Select takeinventoryitem\condition
Case 0: If giveinventoryitem\value <> takeinventoryitem\value Return True
Case 1: If giveinventoryitem\value = takeinventoryitem\value Return True
Case 2: If giveinventoryitem\value > takeinventoryitem\value Return True
Case 3: If giveinventoryitem\value => takeinventoryitem\value Return True
Case 4: If giveinventoryitem\value < takeinventoryitem\value Return True
Case 5: If giveinventoryitem\value <= takeinventoryitem\value Return True
End Select
Return False
End Function
;================================================
;item lookup table
inventoryTableItemStart()
inventoryTableItemAdd("HP")
inventoryTableItemAdd("ST")
inventoryTableItemAdd("DX")
inventoryTableItemAdd("IQ")
inventoryTableItemAdd("MP")
inventoryTableItemAdd("Level")
inventoryTableItemAdd("LockPick")
inventoryTableItemAdd("Dazed")
;door
take.inventory = inventorynew(INVENTORY_TYPE_TAKE)
InventoryAddItem(take,"Level",5,INVENTORYITEM_CONDITION_GE)
InventoryAddItem(take,"LockPick",2,INVENTORYITEM_CONDITION_GE)
InventoryAddItem(take,"Dazed",False,INVENTORYITEM_CONDITION_EQ,INVENTORYITEM_REQUIREMENT_OPTIONAL)
;player
give.inventory = inventorynew(INVENTORY_TYPE_GIVE)
InventoryAddItem(give ,"Level",5)
InventoryAddItem(give ,"LockPick",2)
InventoryAddItem(give, "Dazed",False)
;inventoryitemmatch
Select InventoryCheck(take,give)
Case True Print "Player has sufficent skills to open the door."
Case False Print "Player is too weak to open the door."
End Select
inventoryitemstop()
inventorystop()
inventoryitemstop