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


    Electr0
    • Сделано

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

     

    Требования:

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

     


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

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

    Или 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"}]}}

     

    Ссылка на комментарий
    Поделиться на другие сайты

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

    Ссылка на комментарий
    Поделиться на другие сайты

     

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

     

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

    "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"
    			}
    		}
    	}
    }

     

    Ссылка на комментарий
    Поделиться на другие сайты



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

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

    Гость
    Добавить комментарий...

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

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

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

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

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


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

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

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

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

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

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

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