Перейти к содержанию

Electr0

Администраторы
  • Постов

    10 387
  • Зарегистрирован

  • Посещение

  • Победитель дней

    417

Весь контент Electr0

  1. согласно бенчмарку по старому загрузка информации из ответа сервера в строку, убежки на 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)
  2. Реализован способ сохранения через KeyValue Значение Статус изменено на: Тестируется
  3. Похоже изобретать велосипед не нужно, оказалось в 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 использовать .
  4. судя по всему то что мне нужно это json, нужно освоить.
  5. Или 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"}]}}
  6. как выяснилось keyvalue не умеет в строку выгружатся ><, так что если ничего не удастся найти альтернативного, придется самому собирать строку.
  7. Electr0

    UUID для предметов

    в первой версии выдавало 37 символов, а нужно 36. пересгенерировал uuid для всех предметов в базе.
  8. Надо найти способ хранить действия в памяти для кнопки. К примеру действия над пятью предметами: Требования: Как это будет хранится в 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==
  9. одна из проблем решена, теперь будет на кого указывать. осталось придумать как сохранять, загружать и хранить описание действий над предметами у пропа кнопки, ведь унифицированный загрузчик принимает массив свойств предметов 33 строки и размер строки 128, но на описание того что нужно будет описать может уйти намного больше символов, нельзя ради одного жирного параметра раздувать размер всех остальных, это просто дико)
  10. нет смысла его сохранять для каждого прежмета, ведь при групповых действиях предметы 100% игрока который их пометил и выполняет над ними действия. это улучшает результаты при сохранении передвижения 341 предмета вот такие показатели: до: 0.016212 secondsпосле: 0.013063 seconds
  11. Значение Статус изменено на: Тестируется
  12. раньше использовался для нужд отмены повтора, но там теперь немного по другому, его стоит удалить, и сделать размер строкового массива для свойств предмета меньше на одну строку, но есть вероятность что где-то еще не убрано, и уменьшение размера массива может вызвать падения, когда на несуществующую строку в массиве пытаются записать.
  13. Значение Статус изменено на: Исправлено
  14. Если зайти в снапшоты, загрузить снапшот и сохранить его данные в слот отличный от того где хранились предметы, несмотря на надписи что предмет нельзя сохранить в другой слот, он всеравно сохраняет.
  15. Electr0

    UUID для предметов

    UPDATE alliance_fort_system.fs_obj_storage set uuid = (SELECT UUID()) > Affected rows: 1484011 > Time: 10,4s 1484011 предметов в базе получили идентификаторы
  16. Electr0

    UUID для предметов

    UUID предмета должен быть обновлен в случаях: копирование, сохранение в другой слот при этом зная что объект уже находится в каком-то слоте.
  17. Electr0

    UUID для предметов

    Значение Статус изменено на: Тестируется
  18. Electr0

    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 для уже сохраненных предметов в базу данных.
  19. Electr0

    UUID для предметов

    В рамках обсуждения того что нужно для реализации: Поднялся вопрос об идентификации предметов как в базе, так и на сервере одним ID. Нельзя создать отдельное поле с auto_increment параметром, в таком случае главный вопрос как это сделать?, obj_id как ид строки всегда меняется т.к. при сохранении мы удаляем предмет из базы данных и сохраняем вновь остается только вариант, при создании предмета выдавать ему в качестве UID применять что-то похожее на стандарт UUIDv4
  20. после последних изменений потерял хук на убирание дамага при сжигании пропов, нужен ретест, т.к. сервер упал по этой причине.
  21. [Thread debugging using libthread_db enabled] Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1". Core was generated by `./srcds_linux -game left4dead2 -strictportbind -ip 195.62.53.114 -port 27100 +c'. Program terminated with signal SIGSEGV, Segmentation fault. #0 0xed905948 in NextBotCombatCharacter::OnTakeDamage_Dying(CTakeDamageInfo const&) () from /home/l4d2_mega_survival/serverfiles/left4dead2/bin/server_srv.so [Current thread is 1 (Thread 0xf7422a40 (LWP 25996))] #0 0xed905948 in NextBotCombatCharacter::OnTakeDamage_Dying(CTakeDamageInfo const&) () from /home/l4d2_mega_survival/serverfiles/left4dead2/bin/server_srv.so #1 0xed7b71af in CBaseCombatCharacter::OnTakeDamage(CTakeDamageInfo const&) () from /home/l4d2_mega_survival/serverfiles/left4dead2/bin/server_srv.so #2 0xedbaf3c5 in Infected::OnTakeDamage(CTakeDamageInfo const&) () from /home/l4d2_mega_survival/serverfiles/left4dead2/bin/server_srv.so #3 0xed7c990e in CBaseEntity::TakeDamage(CTakeDamageInfo const&) () from /home/l4d2_mega_survival/serverfiles/left4dead2/bin/server_srv.so #4 0xed834d6e in CEntityDissolve::DissolveThink() () from /home/l4d2_mega_survival/serverfiles/left4dead2/bin/server_srv.so #5 0xed93ff9e in CBaseEntity::PhysicsDispatchThink(void (CBaseEntity::*)()) () from /home/l4d2_mega_survival/serverfiles/left4dead2/bin/server_srv.so #6 0xed64c699 in CBaseEntity::PhysicsRunSpecificThink(int, void (CBaseEntity::*)()) () from /home/l4d2_mega_survival/serverfiles/left4dead2/bin/server_srv.so #7 0xed64cb92 in CBaseEntity::PhysicsRunThink(CBaseEntity::thinkmethods_t) () from /home/l4d2_mega_survival/serverfiles/left4dead2/bin/server_srv.so #8 0xed64cd04 in CBaseEntity::PhysicsRigidChild() () from /home/l4d2_mega_survival/serverfiles/left4dead2/bin/server_srv.so #9 0xed64dc0d in CBaseEntity::PhysicsSimulate() () from /home/l4d2_mega_survival/serverfiles/left4dead2/bin/server_srv.so #10 0xed942faa in Physics_SimulateEntity(CBaseEntity*) () from /home/l4d2_mega_survival/serverfiles/left4dead2/bin/server_srv.so #11 0xed94342a in Physics_RunThinkFunctions(bool) () from /home/l4d2_mega_survival/serverfiles/left4dead2/bin/server_srv.so #12 0xed884b59 in CServerGameDLL::GameFrame(bool) () from /home/l4d2_mega_survival/serverfiles/left4dead2/bin/server_srv.so #13 0xe8c84b1e in __SourceHook_FHCls_IServerGameDLLGameFramefalse::Func(bool) () from /home/l4d2_mega_survival/serverfiles/left4dead2/addons/sourcemod/bin/sourcemod.2.l4d2.so #14 0xffa660f8 in ?? () Backtrace stopped: previous frame inner to this frame (corrupt stack?) No symbol table info available. тест стабильности провален
  22. Значение Статус изменено на: Тестируется
  23. исправлено, оптимизации списка калибруемых моделек
×
×
  • Создать...