![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
![]()
Сообщение
#1
|
|
Level 1 Класс: Обыватель Характер: Lawful Good Раса: Человек ![]() |
Здравствуйте, господа и дамы девелоперы, то бишь разработчики! :)
Нужна ваша помощь в таком деле: есть небольшой шард, где отсутствует система регистрации аккаунтов игроков и система защиты этих аккаунтов. Естественно, есть люди, которые этим пользуются, раздевают чужих персонажей и этим не дают людям спокойно играть. Поэтому меня попросили узнать, как сделать сабж. Подробности будут. Надеюсь на ответы :) |
![]()
Сообщение
#2
|
|
4-х Кубовый ![]() Класс: Некромант Характер: Lawful Evil Раса: Человек NWN: Скриптинг [Sn] Проклятие Левора ![]() |
evil-SHADOW
Тебе в тему шарды. Переношу тему. |
![]()
Сообщение
#3
|
|
Level 2 ![]() Класс: Монах Характер: Lawful Neutral Раса: Человек ![]() |
Про защиту персонажей
http://www.wrg.ru/forums/index.php?showtopic=780 |
![]()
Сообщение
#4
|
|||
Level 1 Класс: Обыватель Характер: Lawful Good Раса: Человек ![]() |
Прочитал. Проникся. Но вот есть такая проблема: пишу следующее
(поправьте, если где-то неправильно, я в упор не вижу здесь ошибки), создаю сервер, захожу серверным чаром. Насколько я понимаю, в первый раз не будет сохраненного в базе sReadID, и он должен создаваться. Но вот в чем проблема - или он не создается, или потом не читается, так при последующих входах на сервер я все равно получаю в качестве sReadID пустую строку. Я чего-то не знаю? |
||
![]()
Сообщение
#5
|
|
Level 5 ![]() ![]() Класс: Некромант Характер: Neutral Evil Раса: Нежить NWN: Скриптинг [PW] ![]() |
Да, именно не сохраняется. У меня не сохранялись sID с символом кавычки (апострофа). Остальные символы не тестировал.
Тебе нужно заменять символ апострофа например на тильду. А если в имени игрока есть символ тильды, то бутить его. Чтобы играть им нельзя было. Имхо. ;) |
![]()
Сообщение
#6
|
|
Level 19 ![]() Класс: Обыватель Характер: True Neutral Раса: Дварф NWN: Контент ![]() |
Выходит мне ни на одном нормальном шарде не поиграть? :swoon: :(
|
![]()
Сообщение
#7
|
|||||
Level 1 Класс: Обыватель Характер: Lawful Good Раса: Человек ![]() |
Нет, тут с _kaa_ поговорил, и выяснили, в чем дело. Во встроенной БД имя переменной не может быть длинее 32 (или 31) символа, и, если имя переменной длинее, то оно при этом
обрезается. А потом эта команда
ищет в БД полное имя переменной (естественно, оно ведь ей передано необрезанным :) ), и, конечно же, благополучно его не находит. :D
Вот такие пироги с котятами (с) не помню кто :) |
||||
![]()
Сообщение
#8
|
|
Level 9 ![]() Класс: Волшебник Характер: Chaotic Good Раса: Дракон NWN: Скриптинг [PW] ![]() |
Собственно первая часть - проверенная информация, вторая - только предположение :)
Как я уже не раз говорил, встроенная БД - большой источник "веселостей". Вот кратко, что вспомню. 1. Имя переменной (VarName) ограничено 32 символами. 2. Поиск имени переменной идет не точный! если есть два имени переменной типа name1 и name11 - на оба точных запроса найдется первое имя, т.е. GetCampaignString(db,"name11") вернет значение переменной "name1". такое поведение наблюдалось только для имен с цифрами на конце. если есть необходимость использовать такие имена - добавляйте в конце символ, скажем "name1z" и "name11z" уже не будут путаться. Скорее всего это недокументированная "фича", но очень сложно было найти ошибку, когда нарвался на эту "фичу" :) 3. Из-за структуры БД (два файла, для данных что вмещаются в поле и для остальных) не все типы данных можно перезаписывать. Скажем если вы запишете SetCampaignInt() поверх старой информации - все нормально, размер базы не изменится. А если это будет SetCampaignString() - база просто вырастет на длину строки.Даже если вы удаляете переменную - реально размер не изменится и требуется перепаковка базы. Выход только один - удалить базу DestroyCampaignDatabase() и создать заново с новыми данными. 4. БД довольно тормазная на предмет записи большого количества данных. Принцип - "чем меньше используете - тем лучше" :) Хранить данные по игроку лучше всего на нодроп (галочка в тулсете на итеме) итемах в переменных, они сохраняются в .bic файле профиля игрока при выходе и командами ExportAllCharacters() и ExportSingleCharacter(oPC) |
![]() ![]() |
Текстовая версия | Сейчас: 28th April 2025 - 14:41 |