| Mirage Source http://web.miragesource.net/forums/ |
|
| Saving Items problem http://web.miragesource.net/forums/viewtopic.php?f=201&t=854 |
Page 1 of 1 |
| Author: | Tony [ Sat Dec 16, 2006 1:30 pm ] |
| Post subject: | Saving Items problem |
Well this is the problem, If I edit an item and add items it and then press ok. I go to Edit Item Index and it has all the items I edited/added. But once I restart the server It only saves the last item I added or in the list(index). Im using binary files btw. Subs relating to items.. Code: Sub SaveItems()
Dim i As Long For i = 1 To MAX_ITEMS Call SaveItem(i) Next i End Sub Sub SaveItem(ByVal ItemNum As Long) Dim FileName As String Dim nFileNum As Integer FileName = App.Path & "\data\items.dat" nFileNum = FreeFile Open FileName For Binary As #nFileNum Put #nFileNum, , Item(ItemNum).Name Put #nFileNum, , Item(ItemNum).Pic Put #nFileNum, , Item(ItemNum).Type Put #nFileNum, , Item(ItemNum).Data1 Put #nFileNum, , Item(ItemNum).Data2 Put #nFileNum, , Item(ItemNum).Data3 Close #nFileNum End Sub Sub LoadItems() Dim FileName As String Dim i As Long Dim nFileNum As Integer Call CheckItems FileName = App.Path & "\data\items.dat" nFileNum = FreeFile Open FileName For Binary As #nFileNum For i = 1 To MAX_ITEMS Get #nFileNum, , Item(i).Name Get #nFileNum, , Item(i).Pic Get #nFileNum, , Item(i).Type Get #nFileNum, , Item(i).Data1 Get #nFileNum, , Item(i).Data2 Get #nFileNum, , Item(i).Data3 DoEvents Next i Close #nFileNum End Sub Sub CheckItems() If Not FileExist("data\items.dat") Then Call SaveItems End If End Sub :: Pando |
|
| Author: | Matt [ Sat Dec 16, 2006 2:52 pm ] |
| Post subject: | |
This is the system I use, that works just as good, saving each item in it's own file, like the maps do. Code: Sub SaveItems()
Dim i As Integer For i = 1 To MAX_ITEMS If Not FileExist("data\items\item" & i & ".doi", True) Then Call SetStatus("Saving items... " & i & "/" & MAX_ITEMS) DoEvents Call SaveItem(i) End If Next i End Sub Sub SaveItem(ByVal ItemNum As Integer) Dim FileName As String Dim f As Long FileName = App.Path & "\data\Items\Item" & ItemNum & ".doi" f = FreeFile Open FileName For Binary As #f Put #f, , Item(ItemNum) Close #f End Sub Sub LoadItems() Dim FileName As String Dim i As Long, f As Long Call CheckItems For i = 1 To MAX_ITEMS Call SetStatus("Loading items... " & i & "/" & MAX_ITEMS) FileName = App.Path & "\data\items\item" & i & ".doi" f = FreeFile Open FileName For Binary As #f Get #f, , Item(i) Close #f DoEvents Next i End Sub Sub CheckItems() Call SaveItems End Sub |
|
| Author: | Tony [ Sat Dec 16, 2006 3:11 pm ] |
| Post subject: | |
Hmm can you tell me whats my problem first? :: Pando |
|
| Author: | Matt [ Sat Dec 16, 2006 3:25 pm ] |
| Post subject: | |
I didn't use the system you have, I don't like it. So I don't know what your issue is. Maybe something with the clearitems, I'm not sure. |
|
| Author: | Lea [ Sat Dec 16, 2006 3:26 pm ] |
| Post subject: | |
Whne you're saving the file, you always save starting with Put #nFileNum, , var Since you close and open the file for each item, each item is rewriting the previous item. You need to calculate the byte position for where the stuff needs to go before you write it. I think this will work. Code: Sub SaveItem(ByVal ItemNum As Long)
Dim FileName As String Dim nFileNum As Integer FileName = App.Path & "\data\items.dat" nFileNum = FreeFile Open FileName For Binary As #nFileNum Put #nFileNum, LenB(Item(ItemNum)), Item(ItemNum).Name Put #nFileNum, , Item(ItemNum).Pic Put #nFileNum, , Item(ItemNum).Type Put #nFileNum, , Item(ItemNum).Data1 Put #nFileNum, , Item(ItemNum).Data2 Put #nFileNum, , Item(ItemNum).Data3 Close #nFileNum End Sub Another way would be to make a new sub for saving ALL items, which opens the file, then loops through them. You would be able to use all your code the way it is for that. |
|
| Author: | Tony [ Sat Dec 16, 2006 3:45 pm ] |
| Post subject: | |
What about the loading then? (it doesn't work) :: Pando |
|
| Author: | Lea [ Sat Dec 16, 2006 4:13 pm ] |
| Post subject: | |
My mistake.... Code: Sub SaveItem(ByVal ItemNum As Long)
Dim FileName As String Dim nFileNum As Integer FileName = App.Path & "\data\items.dat" nFileNum = FreeFile Open FileName For Binary As #nFileNum Put #nFileNum, LenB(Item(ItemNum))*ItemNum, Item(ItemNum).Name Put #nFileNum, , Item(ItemNum).Pic Put #nFileNum, , Item(ItemNum).Type Put #nFileNum, , Item(ItemNum).Data1 Put #nFileNum, , Item(ItemNum).Data2 Put #nFileNum, , Item(ItemNum).Data3 Close #nFileNum End Sub |
|
| Page 1 of 1 | All times are UTC |
| Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |
|