пробежался глазами... мало что понял с моими то тремя классами церковноприходской...
я говорил о быстром доступе, в случае если номер в массиве соответствует айди моба. но поскольку ади мобов там цифры могут быть космические, то и размер массива будет огого. ежели просто загонять всех мобов в массив, то потом искать нужно будет перебором. сам массив меньше, но я думаю время доступа будет больше. насчет пар из той статьи не понял... сейчас попробую изобразить мой пример, и было бы здорово увидеть пояснение с той парой как её там. я правда не уверен есть ли в моем непутевом языке такое.
на сервере скажем 3 моба в файле:
Код:
id="3" mob="skelet"
id="5" mob="zombi"
id="6" mob="vampir"
первый вариант, массив меньше, но время доступа больше из-за необходимости цикла для кручения айди по массиву в поисках нужного:
Код:
Enumeration
#File
EndEnumeration
Structure mob
id.i
name$
spoilflag.a
atackflag.a
EndStructure
Dim Moby.mob(0)
If ReadFile(#File, "D:\moblist.txt")
; мотать файл до конца
While Eof(#File) = 0
; обнуление переменных
id = 0
name$ = ""
; читать строчку текста до символа перевода каретки
tmp$ = ReadString(#File)
; разбор строчки текста
id = Val(StringField(tmp$, 2, Chr(34)))
; Val() - превращение текста в цифру
; StringField - разбитие текста tmp$, по символу - Chr(34), то есть это кавычки
; и возврат 2 блока при разбитии
; сама текстовая строка выглядит так:
; id="3" mob="skelet"
; при разбитии по кавычкам:
; id= 1 блок
; 3 2 блок
; mob= 3 блок
; skelet 4 блок
name$ = StringField(tmp$, 4, Chr(34))
If name$
; если в переменной name$ что-то есть,
; то значит разбор прошел успешно
; надо увеличить массив на 1 единичку
size = ArraySize(Moby()) + 1
ReDim Moby(size)
; и внести туда данные
Moby(size)\id = id
Moby(size)\name$ = name$
EndIf
Wend
; закрыть открытый файл
CloseFile(#File)
EndIf
; теперь когда массив готов и приходят с сервера id мобов,
mobid = 3
; то получаем о них инфу:
For i = 0 To ArraySize(Moby())
If mobid = Moby(i)\id
Debug Moby(i)\name$
Break
EndIf
Next
вариант второй - цикл получается не нужен, чтение будет быстрее... но сам размер массива будет в разы больше с кучей пустых ячеек - в данном случае пустые будут 1, 2 и 4, а сам размер массива будет равен самому максимальному id.
Код:
Enumeration
#File
EndEnumeration
Structure mob
;id.i id в структуре становится не нужен. удаляем
name$
spoilflag.a
atackflag.a
EndStructure
Dim Moby.mob(0)
If ReadFile(#File, "D:\moblist.txt")
; мотать файл до конца
While Eof(#File) = 0
; обнуление переменных
id = 0
name$ = ""
; читать строчку текста до символа перевода каретки
tmp$ = ReadString(#File)
; разбор строчки текста
id = Val(StringField(tmp$, 2, Chr(34)))
; Val() - превращение текста в цифру
; StringField - разбитие текста tmp$, по символу - Chr(34), то есть это кавычки
; и возврат 2 блока при разбитии
; сама текстовая строка выглядит так:
; id="3" mob="skelet"
; при разбитии по кавычкам:
; id= 1 блок
; 3 2 блок
; mob= 3 блок
; skelet 4 блок
name$ = StringField(tmp$, 4, Chr(34))
If name$
; если в переменной name$ что-то есть,
; то значит разбор прошел успешно
; надо увеличить массив до числа id
size = ArraySize(Moby())
If size < id
ReDim Moby(id)
EndIf
; и внести туда данные
Moby(id)\name$ = name$
EndIf
Wend
; закрыть открытый файл
CloseFile(#File)
EndIf
; теперь когда массив готов и приходят с сервера id мобов,
mobid = 3
; то получаем о них инфу без цикла, используя id как номер в массиве:
Debug Moby(mobid)\name$
а вот с хранением инфы об галках атаки и спойла будут проблемы
ежели всюююю инфу писать в файл, аналогично как лист мобов, то есть:
Код:
id="3" ataka="1" spoil="0"
id="5" ataka="1" spoil="1"
id="6" ataka="0" spoil="0"
то при изменении одного галимого параметра - придется переписывать веееееееесь файл. а что если во время записи произойдет ошибка? столько лет внесения в базу флагов атаки и спойла - все на смарку
можно конечно будет создавать отдельный файл с id в названии 3.txt:
тогда изменение будет записываться в один маленький файл. удобно писать, удобно при потере информации - потеряется только 1 файл, основная база останется целой. но стописят тыщь файлов по 1 килобайту - жесткий диск скажет тебе большое "спасибо". он такую мелочь не любит.
поэтому всякие сикуели и нужны, но это поддерживает твой язык, не поддерживает... нужны доп библиотеки, не нужны... нужны всякие дополнительные программы и сервисы или не нужны... и кто его знает как там с защитой базы на случай ошибки записи предусмотрено.