Refactor Merchandise and shelves

Update scripts to support new shelf and merch loading process. See Plugin code for details.
This commit is contained in:
Tyler Hallada 2021-01-23 20:11:47 -05:00
parent 8eeae0cf64
commit 13d4ad31c8
7 changed files with 45 additions and 59 deletions

View File

@ -52,29 +52,4 @@ event OnActivate(ObjectReference akActionRef)
endWhile endWhile
selectedMerchandiseRepl.SetName("Selected Merchandise") selectedMerchandiseRepl.SetName("Selected Merchandise")
endif endif
endEvent
function RefreshMerchandise()
BRQuestScript BRScript = BRQuest as BRQuestScript
ObjectReference merchantShelf = self.GetLinkedRef(BRLinkMerchShelf)
debug.MessageBox("RefreshMerchandise not implemented yet!")
; if !BRMerchandiseList.Refresh(BRScript.ApiUrl, BRScript.ApiKey, BRScript.ActiveShopId, merchantShelf)
; Debug.MessageBox("Failed refresh merchandise.\n\n" + BRScript.BugReportCopy)
; endif
endFunction
event OnCreateTransactionSuccess(int id, int quantity, int amount)
debug.Trace("BRMerchActivatorScript OnCreateTransactionSuccess id: " + id + " quantity: " + quantity + " amount: " + amount)
ObjectReference merchRef = self.GetLinkedRef(BRLinkItemRef)
PlayerRef.RemoveItem(Gold001, amount)
PlayerRef.AddItem(merchRef.GetBaseObject(), quantity)
RefreshMerchandise()
endEvent
; TODO: gracefully handle expected error cases (e.g. someone else buys all of item before this player can buy them)
Event OnCreateTransactionFail(string error)
Debug.Trace("BRMerchActivatorScript OnCreateTransactionFail error: " + error)
BRQuestScript BRScript = BRQuest as BRQuestScript
Debug.MessageBox("Failed to buy merchandise.\n\n" + error + "\n\n" + BRScript.BugReportCopy)
RefreshMerchandise()
endEvent endEvent

View File

@ -102,11 +102,12 @@ endFunction
function RefreshMerchandise() function RefreshMerchandise()
BRQuestScript BRScript = BRQuest as BRQuestScript BRQuestScript BRScript = BRQuest as BRQuestScript
ObjectReference merchantShelf = self.GetLinkedRef(BRLinkMerchShelf)
debug.MessageBox("RefreshMerchandise not implemented yet!") ; TODO: the assumption that player is in shop cell may be incorrect
; if !BRMerchandiseList.Refresh(BRScript.ApiUrl, BRScript.ApiKey, BRScript.ActiveShopId, merchantShelf) Cell shopCell = PlayerRef.GetParentCell()
; Debug.MessageBox("Failed refresh merchandise.\n\n" + BRScript.BugReportCopy) if !BRMerchandiseList.Load(BRScript.ApiUrl, BRScript.ApiKey, BRScript.ActiveShopId, shopCell, BRScript.ActiveShopShelves, self)
; endif Debug.MessageBox("Failed to load shop merchandise.\n\n" + BRScript.BugReportCopy)
endif
endFunction endFunction
event OnCreateTransactionSuccess(int id, int quantity, int amount) event OnCreateTransactionSuccess(int id, int quantity, int amount)
@ -125,7 +126,6 @@ endEvent
event OnLoadMerchandiseSuccess(bool result) event OnLoadMerchandiseSuccess(bool result)
Debug.Trace("BRMerchChestScript OnLoadMerchandiseSuccess result: " + result) Debug.Trace("BRMerchChestScript OnLoadMerchandiseSuccess result: " + result)
ObjectReference MerchantShelf = self.GetLinkedRef(BRLinkMerchShelf)
debug.MessageBox("Successfully loaded shop merchandise") debug.MessageBox("Successfully loaded shop merchandise")
; TODO: the assumption that player is in shop cell may be incorrect ; TODO: the assumption that player is in shop cell may be incorrect
@ -140,4 +140,21 @@ event OnLoadMerchandiseFail(string error)
Debug.Trace("BRMerchChestScript OnLoadMerchandiseFail error: " + error) Debug.Trace("BRMerchChestScript OnLoadMerchandiseFail error: " + error)
BRQuestScript BRScript = BRQuest as BRQuestScript BRQuestScript BRScript = BRQuest as BRQuestScript
Debug.MessageBox("Failed to load or clear shop merchandise.\n\n" + error + "\n\n" + BRScript.BugReportCopy) Debug.MessageBox("Failed to load or clear shop merchandise.\n\n" + error + "\n\n" + BRScript.BugReportCopy)
endEvent
event OnLoadShelfPageSuccess(bool result)
Debug.Trace("BRMerchChestScript OnLoadShelfPageSuccess result: " + result)
; TODO: the assumption that player is in shop cell may be incorrect
Cell shopCell = PlayerRef.GetParentCell()
while !BRMerchandiseList.ReplaceAll3D(shopCell) ; replace all 3D or only refs linked to this chest's shelf?
Debug.Trace("BRMerchandiseList.Replace3D returned false, waiting and trying again")
Utility.Wait(0.05)
endWhile
endEvent
event OnLoadShelfPageFail(string error)
Debug.Trace("BRMerchChestScript OnLoadShelfPageFail error: " + error)
BRQuestScript BRScript = BRQuest as BRQuestScript
Debug.MessageBox("Failed to load or clear page of shelf merchandise.\n\n" + error + "\n\n" + BRScript.BugReportCopy)
endEvent endEvent

View File

@ -8,11 +8,10 @@ event OnActivate(ObjectReference akActionRef)
if akActionRef == PlayerRef if akActionRef == PlayerRef
ObjectReference MerchantShelf = self.GetLinkedRef(BRLinkMerchShelf) ObjectReference MerchantShelf = self.GetLinkedRef(BRLinkMerchShelf)
BRQuestScript BRScript = BRQuest as BRQuestScript BRQuestScript BRScript = BRQuest as BRQuestScript
debug.MessageBox("BRMerchandiseList.NextPage not implemented yet!") bool result = BRMerchandiseList.NextPage(MerchantShelf)
; bool result = BRMerchandiseList.NextPage(BRScript.ApiUrl, BRScript.ApiKey, BRScript.ActiveShopId, MerchantShelf) Debug.Trace("BRMerchandiseList.NextPage result: " + result)
; Debug.Trace("BRMerchandiseList.NextPage result: " + result) if !result
; if !result Debug.MessageBox("Failed to load or clear shop merchandise.\n\n" + BRScript.BugReportCopy)
; Debug.MessageBox("Failed to load or clear shop merchandise.\n\n" + BRScript.BugReportCopy) endif
; endif
endif endif
endEvent endEvent

View File

@ -8,11 +8,10 @@ event OnActivate(ObjectReference akActionRef)
if akActionRef == PlayerRef if akActionRef == PlayerRef
ObjectReference MerchantShelf = self.GetLinkedRef(BRLinkMerchShelf) ObjectReference MerchantShelf = self.GetLinkedRef(BRLinkMerchShelf)
BRQuestScript BRScript = BRQuest as BRQuestScript BRQuestScript BRScript = BRQuest as BRQuestScript
debug.MessageBox("BRMerchandiseList.PrevPage not implemented yet!") bool result = BRMerchandiseList.PrevPage(MerchantShelf)
; bool result = BRMerchandiseList.PrevPage(BRScript.ApiUrl, BRScript.ApiKey, BRScript.ActiveShopId, MerchantShelf) Debug.Trace("BRMerchandiseList.PrevPage result: " + result)
; Debug.Trace("BRMerchandiseList.PrevPage result: " + result) if !result
; if !result Debug.MessageBox("Failed to load or clear shop merchandise.\n\n" + BRScript.BugReportCopy)
; Debug.MessageBox("Failed to load or clear shop merchandise.\n\n" + BRScript.BugReportCopy) endif
; endif
endif endif
endEvent endEvent

View File

@ -2,15 +2,15 @@ scriptname BRMerchandiseList
; TODO: a save function that saves the merch to the server, load should load from server ; TODO: a save function that saves the merch to the server, load should load from server
; bool function Toggle(string apiUrl, string apiKey, int shop_id, ObjectReference merchantShelf) global native ; bool function Toggle(string apiUrl, string apiKey, int shop_id, ObjectReference merchantShelf) global native
; bool function NextPage(string apiUrl, string apiKey, int shop_id, ObjectReference merchantShelf) global native bool function NextPage(ObjectReference merchantShelf) global native
; bool function PrevPage(string apiUrl, string apiKey, int shop_id, ObjectReference merchantShelf) global native bool function PrevPage(ObjectReference merchantShelf) global native
bool function Load(string apiUrl, string apiKey, int shop_id, Cell shopCell, ObjectReference[] merchantShelves, ObjectReference merchantChest) global native bool function Load(string apiUrl, string apiKey, int shop_id, Cell shopCell, ObjectReference[] merchantShelves, ObjectReference merchantChest) global native
; bool function Refresh(string apiUrl, string apiKey, int shop_id, ObjectReference merchantShelf) global native ; bool function Refresh(string apiUrl, string apiKey, int shop_id, ObjectReference merchantShelf) global native
bool function Replace3D(ObjectReference merchantShelf) global native bool function Replace3D(ObjectReference merchantShelf) global native
bool function ReplaceAll3D(Cell shopCell) global native bool function ReplaceAll3D(Cell shopCell) global native
bool function Create(string apiUrl, string apiKey, int shopId, ObjectReference merchantChest) global native bool function Create(string apiUrl, string apiKey, int shopId, Cell shopCell, ObjectReference[] merchantShelves, ObjectReference merchantChest) global native
int function GetQuantity(ObjectReference activator) global native int function GetQuantity(ObjectReference activator) global native
int function GetPrice(ObjectReference activator) global native int function GetPrice(ObjectReference activator) global native

View File

@ -15,7 +15,10 @@ event OnMenuClose(string menuName)
Debug.Trace("BRPublicMerchChestScript container menu closed") Debug.Trace("BRPublicMerchChestScript container menu closed")
BRQuestScript BRScript = BRQuest as BRQuestScript BRQuestScript BRScript = BRQuest as BRQuestScript
if BRScript.ActiveShopId == BRScript.ShopId if BRScript.ActiveShopId == BRScript.ShopId
bool result = BRMerchandiseList.Create(BRScript.ApiUrl, BRScript.ApiKey, BRScript.ShopId, self) ; TODO: the assumption that player is in shop cell may be incorrect
Cell shopCell = PlayerRef.GetParentCell()
bool result = BRMerchandiseList.Create(BRScript.ApiUrl, BRScript.ApiKey, BRScript.ShopId, shopCell, BRScript.ActiveShopShelves, self)
if !result if !result
Debug.MessageBox("Failed to save shop merchandise.\n\n" + BRScript.BugReportCopy) Debug.MessageBox("Failed to save shop merchandise.\n\n" + BRScript.BugReportCopy)
endif endif
@ -52,18 +55,12 @@ Event OnItemAdded(Form baseItem, int itemCount, ObjectReference itemRef, ObjectR
endif endif
endEvent endEvent
event OnCreateMerchandiseSuccess(bool created, int id) event OnCreateMerchandiseSuccess(bool created)
Debug.Trace("BRPublicMerchChestScript OnCreateMerchandiseSuccess created: " + created + " id: " + id) Debug.Trace("BRPublicMerchChestScript OnCreateMerchandiseSuccess created: " + created)
if created if created
BRQuestScript BRScript = BRQuest as BRQuestScript BRQuestScript BRScript = BRQuest as BRQuestScript
BRScript.MerchandiseListId = id;
Debug.Notification("Saved merchandise successfully") Debug.Notification("Saved merchandise successfully")
ObjectReference merchantShelf = self.GetLinkedRef(BRLinkMerchShelf)
debug.MessageBox("BRMerchandiseList.Refresh not implemented yet!")
; if !BRMerchandiseList.Refresh(BRScript.ApiUrl, BRScript.ApiKey, BRScript.ActiveShopId, merchantShelf)
; Debug.MessageBox("Failed refresh merchandise.\n\n" + BRScript.BugReportCopy)
; endif
else else
Debug.Trace("BRPublicMerchChestScript no container changes to save to the server") Debug.Trace("BRPublicMerchChestScript no container changes to save to the server")
endif endif

View File

@ -13,7 +13,6 @@ string property ShopName auto
string property ShopDescription auto string property ShopDescription auto
; TODO: look up interior refs and merch by shop id instead of saving this? ; TODO: look up interior refs and merch by shop id instead of saving this?
int property InteriorRefListId auto int property InteriorRefListId auto
int property MerchandiseListId auto
; Active shop data (for the currently loaded shop) ; Active shop data (for the currently loaded shop)
int property ActiveOwnerId auto int property ActiveOwnerId auto
int property ActiveShopId auto int property ActiveShopId auto
@ -155,6 +154,9 @@ bool function LoadInteriorRefs()
Debug.Trace("ClearCell result: " + result) Debug.Trace("ClearCell result: " + result)
if BRInteriorRefList.Load(ApiUrl, ApiKey, InteriorRefListId, ShopXMarker, PrivateChest, PublicChest, self) if BRInteriorRefList.Load(ApiUrl, ApiKey, InteriorRefListId, ShopXMarker, PrivateChest, PublicChest, self)
ActiveShopId = ShopId
ActiveShopName = ShopName
ActiveShopDescription = ShopDescription
return true return true
else else
Debug.MessageBox("Failed to load shop.\n\n" + BugReportCopy) Debug.MessageBox("Failed to load shop.\n\n" + BugReportCopy)
@ -164,9 +166,6 @@ endFunction
event OnLoadInteriorRefListSuccess(bool result, ObjectReference[] shelves) event OnLoadInteriorRefListSuccess(bool result, ObjectReference[] shelves)
Debug.Trace("BRQuestScript OnLoadInteriorRefListSuccess result: " + result) Debug.Trace("BRQuestScript OnLoadInteriorRefListSuccess result: " + result)
ActiveShopId = ShopId
ActiveShopName = ShopName
ActiveShopDescription = ShopDescription
ActiveShopShelves = shelves ActiveShopShelves = shelves
Debug.Trace("BRQuestScript OnLoadInteriorRefListSuccess ActiveShopShelves: " + ActiveShopShelves) Debug.Trace("BRQuestScript OnLoadInteriorRefListSuccess ActiveShopShelves: " + ActiveShopShelves)
Debug.MessageBox("Successfully loaded shop") Debug.MessageBox("Successfully loaded shop")