-
Постов
10 396 -
Зарегистрирован
-
Посещение
-
Победитель дней
417
Тип контента
Профили
Форумы
Баг Трекер
Предложения
Список изменений
Загрузки
Блоги
Магазин
Галерея
Весь контент Electr0
-
причин на это две: боты, для них движок создает кеш хватабельных предметов у которого есть лимиты, и допустим если ты заспавнишь 300 аптечек то сервер упадет из-за переполнения этого кеша. физика, у оружия есть физика коллизий с предметами что в некоторых ситуациях провоцирует проблемы с производительностью, движок игры ведь не рассчитывался на то что кто-то будет грузить по 50 пушек в одном месте на бильярдном столе, при загрузке таких построек иногда идет дым который как раз по этой части физика 2, у оружия есть физика нахождения в пространстве, в частности если пострелять по находящейся в врздухе коробке с феерверками она опустится вниз, если заспавнить лазеры в воздухе они упадут вниз, для этих проблем создано много костылей и это не есть хорошо если предметы всеравно не выдают оружие сами.
-
Возможности Описание: Кнопки представляют из себя полностью анимированые переключатели, которые можно настроить на выполнение разных действий над предметами. Применение: Контроль освещения построек, можно как включать выключать, так и менять цвет освещения нажимая на кнопки Создание разных интересных вариантов входных дверей с удаленным управлением через кнопку Создание сложных развлекательных лабиринтов с большим количеством ловушек Много чего можно придумать, ограничение лишь в фантазии Ограничения: Лимит действий на кнопку: 20 Лимит действий над одним предметом в рамках одной кнопки: 10 Типы: Переключатель ( работает как обычный выключатель, действия совершенные при включении, при выключении выполняются в обратной последовательности ) Кнопка ( при нажатии выполняет действия которые нужно делать при включении и отжимается обратно ) Примеры моделей кнопок: Выключено: Включено: Настройки кнопки (!f - Управление => Настройки кнопки): Название Тип Заблокировать после использования Пароль Обзор действий Добавление действий Тип медленного передвижения Скопировать действия с другой кнопки Сбросить настройки Настройки действий: Типы действий над предметами: Передвинуть по осям предмета Передвинуть по осям предмета [Медленно] Повернуть по осям предмета Повернуть по осям предмета [Медленно] Заблокировать (Дверь / Кнопку) Разблокировать (Дверь / Кнопку) Открыть дверь Закрыть дверь Выставить яркость Выставить цвет по названию Выставить RGB цвет Выставить скин Выставить анимацию Выставить статус ВКЛ. (Кнопке) Выставить статус ВЫКЛ. (Кнопке) Перенастройка (вы можете перенастроить уже добавленное действие над предметом, в таком случае выбирать курсором, как при добавлении не придется) Добавить еще (вы можете добавить еще одно действие к предмету) Очередность (если у вас в рамках одной кнопки выполняется несколько действий над одним предметом, вы можете менять очередность их выполнения, для этого есть кнопки вверх / вниз в меню обзора действий) Удаление Подсветка (красная): При заходе в меню настроек, если выбрана кнопка, то она подсвечивается. В меню обзора действий, предметы действий подсвечиваются. При добавлении предмета в действия кнопки, если выбран предмет который можно добавить то он так же подсвечивается Предварительные проверки: Перед запуском выполнения действий кнопки на передвижение и повороты, выполняется проверка на то попадет ли предмет действия в игрока, так же действие не начнут выполнятся если игрок стоит на предмете действия или прыгает на нем. Если предметом действия являются двери и пока они открываются / закрываются кнопку нельзя нажать. Если предметом действия является кнопка, пока она включается / выключается кнопку нельзя нажать. Сохранение Конечно же все это сложно настроенное кнопочное хозяйство вы можете сохранить себе в слот, поддерживаются снимки конца раунда и смены карты. Как найти?: !f => Предметы => Наборы => Кнопки !f => Предметы => Часто используемое => Кнопки Цена: 100 игровых $ Меню: О визуальном виде меню можно посмотреть ниже, разделе стили меню, применен тот же стиль меню что и в библиотеке. Стили меню Меню настройки кнопки: Настройка кнопки UUID: 4bf6ab2b-8226-413c-84b6-14249bd16bdb 1. Обновить Название - Переключатель света в холле 2. Сменить Тип - Переключатель 3. Сменить Заблокировать после использования 4. Сменить Действия (4 / 20) 5. Обзор (если 0 действий то серая) 6. Добавить (если 20 действий уже есть то серая) 8. Назад Меню обзора действий: Действие 1 / 4 UUID: 4bf6ab2b-8226-413c-84b6-14249bd16bdb Тип предмета: Лампа (Люминесцентная) Тип действия: Выставить яркость Включено: 500 / На 500 (Если тип кнопка) Выключено: 0 (Если тип кнопка не показывать) 1. Перенастроить Очередность 1 / 2 2. Вверх 3. Вниз 4. Удалить 8. Назад 9. Далее Действие 2 / 4 UUID: 4bf6ab2b-8226-413c-84b6-14249bd16bdb Тип предмета: Лампа (Люминесцентная) Тип: Выставить яркость Включено: 500 / На 500 (Если тип кнопка) Выключено: 0 (Если тип кнопка не показывать) 1. Перенастроить Очередность 2 / 2 2. Вверх 3. Вниз 4. Удалить 8. Назад 9. Далее Действие 3 / 4 UUID: 4bf6ab2b-8226-413c-84b6-14249bd16bdb Тип предмета: Дверь Тип: Передвинуть предмет по его ОСИ Ось: Y (Если тип кнопка не показывать) Включено: -54.51 / На -54.51 по оси Y (Если тип кнопка) Выключено: 54.51 (Если тип кнопка не показывать) 1. Перенастроить Очередность 1 / 2 2. Вверх 3. Вниз 4. Удалить 8. Назад 9. Далее Действие 4 / 4 UUID: 4bf6ab2b-8226-413c-84b6-14249bd16bdb Тип предмета: Дверь Тип: Передвинуть предмет по его ОСИ Ось: Y (Если тип кнопка не показывать) Включено: -54.51/ На -54.51 по оси Y (Если тип кнопка) Выключено: 54.51 (Если тип кнопка не показывать) 1. Перенастроить Очередность 2 / 2 2. Вверх 3. Вниз 3. Удалить 8. Назад Благодарности: @raziEiL идея выставления обратной скорости воспроизведения анимации, которая очень подошла для организации анимации выключения щитового переключателя и голубой кнопки, модели которых не имеют анимации выключения. @asha, @Marysan, @EskimoCallboy тестирование
-
исправлено отсутствие генерации нового UUIDv4 для предмета который скопирован.
-
Оптимизация записи данных в строковой массив в загрузчике
Electr0 прокомментировал Electr0 запись в °• Mega Survival
Значение Статус изменено на: Сделано -
Оптимизация записи данных в строковой массив в загрузчике
Electr0 опубликовал запись в °• Mega Survival
согласно бенчмарку по старому загрузка информации из ответа сервера в строку, убежки на 216 прежметов занимает time: 0.001121 seconds по новому: time: 0.000678 seconds конвертация числа в строку занимает больше времени чем строка в строку. Изменялись подобные куски кода на: IntToString(SQL_FetchInt(hndl, 3), sSavedObjectInfo[obj_info_solid], OBJ_INFO_MAX_SIZE); // [obj_info_solid] solid (3) На такие: SQL_FetchString(hndl, 3, sSavedObjectInfo[obj_info_solid], OBJ_INFO_MAX_SIZE); // [obj_info_solid] solid (3) -
Хранение действий над предметами для кнопок
Electr0 прокомментировал Electr0 запись в °• Mega Survival
Реализован способ сохранения через KeyValue Значение Статус изменено на: Тестируется -
Хранение действий над предметами для кнопок
Electr0 прокомментировал Electr0 запись в °• Mega Survival
Похоже изобретать велосипед не нужно, оказалось в sourcepawn есть неописанная функция в docgen но она есть в keyvalues.inc // Exports a KeyValues tree to a string. The string is dumped from the current position. // // @param buffer Buffer to write to. // @param maxlength Max length of buffer. // @return Number of bytes that can be written to buffer. public native int ExportToString(char[] buffer, int maxlength); использование: char sString[6000]; KeyValue.ExportToString(sString, sizeof(sString)); можно будет keyvalue использовать . -
Хранение действий над предметами для кнопок
Electr0 прокомментировал Electr0 запись в °• Mega Survival
судя по всему то что мне нужно это json, нужно освоить. -
Хранение действий над предметами для кнопок
Electr0 прокомментировал Electr0 запись в °• Mega Survival
Или XML подобный вариант.. (описано раздвигание двух предметов по их осям y, получается своего рода дверь как в супермаркетах, створки которой отъезжают по сторонам) <actions> <action> <uuid>0a1315d1-ce1b-11e8-88bc-00163e010904</uuid> <name>Дверь 1</name> <act_id>3</act_id> <arg1>y</arg1> <arg2>100</arg2> </action> <action> <uuid>0a131a69-ce1b-11e8-88bc-00163e010904</uuid> <name>Дверь 2</name> <act_id>3</act_id> <arg1>y</arg1> <arg2>100</arg2> </action> </actions> В сжатом виде: <actions><action><uuid>0a1315d1-ce1b-11e8-88bc-00163e010904</uuid><name>Дверь 1</name><act_id>3</act_id><arg1>y</arg1><arg2>100</arg2></action><action><uuid>0a131a69-ce1b-11e8-88bc-00163e010904</uuid><name>Дверь 2</name><act_id>3</act_id><arg1>y</arg1><arg2>100</arg2></action></actions> только вот парсить это дело и работать с этим, придется вручную везде, но смотрится читабельно Есть так же вариант c json, описанная структура выше будет выглядеть вот так: { "actions": { "action": [ { "uuid": "0a1315d1-ce1b-11e8-88bc-00163e010904", "name": "Дверь 1", "act_id": "3", "arg1": "y", "arg2": "100" }, { "uuid": "0a131a69-ce1b-11e8-88bc-00163e010904", "name": "Дверь 2", "act_id": "3", "arg1": "y", "arg2": "100" } ] } } В сжатом виде: {"actions":{"action":[{"uuid":"0a1315d1-ce1b-11e8-88bc-00163e010904","name":"Дверь 1","act_id":"3","arg1":"y","arg2":"100"},{"uuid":"0a131a69-ce1b-11e8-88bc-00163e010904","name":"Дверь 2","act_id":"3","arg1":"y","arg2":"100"}]}} -
Хранение действий над предметами для кнопок
Electr0 прокомментировал Electr0 запись в °• Mega Survival
как выяснилось keyvalue не умеет в строку выгружатся ><, так что если ничего не удастся найти альтернативного, придется самому собирать строку. -
в первой версии выдавало 37 символов, а нужно 36. пересгенерировал uuid для всех предметов в базе.
-
Надо найти способ хранить действия в памяти для кнопки. К примеру действия над пятью предметами: Требования: Как это будет хранится в MYSQL до едрени фени, лишь бы было в строку и без запрещенных для запросов символов, скорее всего придется кодировать получившееся в base64 Легкость добавления, удаления, обновления информации т.к. по ходу придется делать все это на разных этапаж жизни кнопки Как вариант: "" { "0a1315d1-ce1b-11e8-88bc-00163e010904" { "name" "Дверь 1" "action_type" "3" "arg1" "r" "arg2" "100" } "0a1317d8-ce1b-11e8-88bc-00163e010904" { "name" "Дверь 2" "action_type" "3" "arg1" "r" "arg2" "100" } } Подобное можно записать в base64: IiIKewoJIjBhMTMxNWQxLWNlMWItMTFlOC04OGJjLTAwMTYzZTAxMDkwNCIKCXsKCQkibmFtZSIJCQkJItCU0LLQtdGA0YwgMSIKCQkiYWN0aW9uX3R5cGUiCQkiMyIKCQkiYXJnMSIJCQkJInIiCgkJImFyZzIiCQkJCSIxMDAiCgl9CgkiMGExMzE3ZDgtY2UxYi0xMWU4LTg4YmMtMDAxNjNlMDEwOTA0IgoJewoJCSJuYW1lIgkJCQki0JTQstC10YDRjCAyIgoJCSJhY3Rpb25fdHlwZSIJCSIzIgoJCSJhcmcxIgkJCQkiciIKCQkiYXJnMiIJCQkJIjEwMCIKCX0KfQ==
-
одна из проблем решена, теперь будет на кого указывать. осталось придумать как сохранять, загружать и хранить описание действий над предметами у пропа кнопки, ведь унифицированный загрузчик принимает массив свойств предметов 33 строки и размер строки 128, но на описание того что нужно будет описать может уйти намного больше символов, нельзя ради одного жирного параметра раздувать размер всех остальных, это просто дико)
-
нет смысла его сохранять для каждого прежмета, ведь при групповых действиях предметы 100% игрока который их пометил и выполняет над ними действия. это улучшает результаты при сохранении передвижения 341 предмета вот такие показатели: до: 0.016212 secondsпосле: 0.013063 seconds
-
Есть лишний параметр в энумераторе свойств предметов obj_info_obj_action
Electr0 прокомментировал Electr0 запись в °• Mega Survival
Значение Статус изменено на: Тестируется -
раньше использовался для нужд отмены повтора, но там теперь немного по другому, его стоит удалить, и сделать размер строкового массива для свойств предмета меньше на одну строку, но есть вероятность что где-то еще не убрано, и уменьшение размера массива может вызвать падения, когда на несуществующую строку в массиве пытаются записать.
-
Значение Статус изменено на: Исправлено
-
Если зайти в снапшоты, загрузить снапшот и сохранить его данные в слот отличный от того где хранились предметы, несмотря на надписи что предмет нельзя сохранить в другой слот, он всеравно сохраняет.
-
UPDATE alliance_fort_system.fs_obj_storage set uuid = (SELECT UUID()) > Affected rows: 1484011 > Time: 10,4s 1484011 предметов в базе получили идентификаторы
-
UUID предмета должен быть обновлен в случаях: копирование, сохранение в другой слот при этом зная что объект уже находится в каком-то слоте.
-
Значение Статус изменено на: Тестируется
-
в качестве UID применен UUIDv4 пример из С, посмотреть можно тут: https://onlinegdb.com/SkWPfXa5Q В SourcePawn аналог алгоритма сделал так: char szHex[17] = "0123456789abcdef", sUID[37]; for (int i = 0; i < 36; i++) { int r = GetRandomInt(0,15); switch (i) { case 8,13,18,23:{ sUID[i] = '-'; } case 14: { sUID[i] = '4'; } case 19: { sUID[i] = szHex[r & 0x03 | 0x08]; } default: { sUID[i] = szHex[r]; } } } В самой базе буду выполнять запрос: UPDATE table set uid = (SELECT UUID()); чтобы сгенерировать uuid для уже сохраненных предметов в базу данных.
-
В рамках обсуждения того что нужно для реализации: Поднялся вопрос об идентификации предметов как в базе, так и на сервере одним ID. Нельзя создать отдельное поле с auto_increment параметром, в таком случае главный вопрос как это сделать?, obj_id как ид строки всегда меняется т.к. при сохранении мы удаляем предмет из базы данных и сохраняем вновь остается только вариант, при создании предмета выдавать ему в качестве UID применять что-то похожее на стандарт UUIDv4
