Перейти к публикации
  • Хранение действий над предметами для кнопок


    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==

     


    Отзывы пользователей

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

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

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

    Или 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 эмодзи.

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

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

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


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

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

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

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

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

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

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