Перейти к содержанию
  • Хранение действий над предметами для кнопок


    Надо найти способ хранить действия в памяти для кнопки. К примеру действия над пятью предметами:

     

    Требования:

    • Как это будет хранится в 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==

     


    Обратная связь

    Рекомендуемые комментарии

    Electr0

    Опубликовано

    как выяснилось keyvalue не умеет в строку выгружатся ><, так что если ничего не удастся найти альтернативного, придется самому собирать строку.

    Electr0

    Опубликовано

    Или 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

    Опубликовано

    судя по всему то что мне нужно это json, нужно освоить.

    Electr0

    Опубликовано

    Похоже  изобретать велосипед не нужно, оказалось в 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

    Опубликовано

    Реализован способ сохранения через KeyValue

     

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

    Electr0

    Опубликовано

     

    придется подумать как реализовать сие в текущей структуре.

     

    Текущий вариант хранения:

    "fs_buttons_cache"
    {
    	"2352faaa-c2ce-4a25-8ce8-2c8a360f3bfe"
    	{
    		"0"		"0"
    		"1"		"Рубильник щитка"
    		"2"		"1"
    		"3"		"0"
    		"4"		"0"
    		"5"
    		{
    			"7ddfc4d9-fb75-42fe-8921-f5694a1af3fe"
    			{
    				"0"		"Дверь 1"
    				"1"		"39"
    				"2"		"1"
    				"3"		"-54.512897"
    			}
    			"13d8a34b-796d-4796-8b6a-ebb9c9eba3f9"
    			{
    				"0"		"Дверь 2"
    				"1"		"39"
    				"2"		"1"
    				"3"		"-54.512897"
    			}
    			"9c397a35-765c-4136-b136-a8fba15d7045"
    			{
    				"0"		"Лампа над дверью 1"
    				"1"		"8"
    				"5"		"300"
    				"6"		"0"
    			}
    		}
    	}
    }

     

    Варианты решения, в качестве примера сценарий где выполняются по два действия над каждым предметом:

    1. разблокировка дверей (код 43)
    2. открытие дверей (код 44)
    3. блокировка дверей (код 42)
    4. изменение яркости лампы с 100 до 300 (код 8)
    5. смена цвета лампы с красного на зеленый (код 19)

     

     

    Новый вариант 1 ((отказ от названий действий ввиду их бессмысленности когда тип действия говорит все что нужно, плюс предмет выделяется лучевым ящиком), внутри ключа посвященного предмету создаются ключи 1,2,3,4 и далее, так можно записать много действий внутрь действия над одним предметом):

    "2352faaa-c2ce-4a25-8ce8-2c8a360f3bfe"
    {
    	"0"		"0"
    	"1"		"Рубильник щитка"
    	"2"		"1"
    	"3"		"0"
    	"4"		"0"
    	"5"
    	{
    		"7ddfc4d9-fb75-42fe-8921-f5694a1af3fe"
    		{
    			"1"
    			{
    				"1"		"43"
    			}
    			"2"
    			{
    				"1"		"44"
    			}
    			"3"
    			{
    				"1"		"42"
    			}
    		}
    		"13d8a34b-796d-4796-8b6a-ebb9c9eba3f9"
    		{
    			"1"
    			{
    				"1"		"43"
    			}
    			"2"
    			{
    				"1"		"44"
    			}
    			"3"
    			{
    				"1"		"42"
    			}
    		}
    		"9c397a35-765c-4136-b136-a8fba15d7045"
    		{
    			"1"
    			{
    				"1"		"8"
    				"4"		"300"
    				"5"		"100"
    			}
    			"2"
    			{
    				"1"		"19"
    				"6"		"255 0 0"
    				"7"		"0 255 0"
    			}
    		}
    	}
    }

     

    Electr0

    Опубликовано

    Реализовано чтение такого формата, это эпично в действии )

    Electr0

    Опубликовано

    Значение Статус изменено на: Сделано



    Присоединяйтесь к обсуждению

    Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

    Гость
    К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
    Добавить комментарий...

    ×   Вставлено с форматированием.   Вставить как обычный текст

      Разрешено использовать не более 75 эмодзи.

    ×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

    ×   Ваш предыдущий контент был восстановлен.   Очистить редактор

    ×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


  • Обозначения статусов

    В обработке = Мы работаем над вашим отзывом.

    Будет сделано = Ваша идея добавлена к плану будущих изменений.

    Тестируется = Изменения внесены, но требуют тестирования.

    Сделано = Ваша идея реализована!

    Отклонено = Отзыв некорректный, бред, либо уже реализовано. Если у вас есть дополнительная информация напишите комментарий и мы снова откроем этот вопрос.

×
×
  • Создать...