Question

Здравствуйте уважаемые пользователи форума.

Прошу Вашей помощи, на этом форуме уже выкладывали систему подарков: Кликабельна

Но она мне не подходит. Ее уже я пробовал.

 

Мне нужна система что-бы при подборе подарка к примеру 15 из 35. Что бы он записывал все подобранные значения в один переменную, а не в столько сколько подарков.

 

Пример: 

В Базе Данный есть переменная pPodarok хоронящий в себе не один подарок а несколько.

При этом нужно что бы при рестарте переменная pPodarok не сбрасывало значения. 

И при рестарте не приходилось собирать подарки по новой. 

 

Share this post


Link to post

13 answers to this question

  • 0

Вот с помощью этой штуки можно реализовать твою задумку https://pawno-rus.ru/topic/834-ispolzovanie-sscanf/

Share this post


Link to post
  • 0
37 минут назад, DEST сказал:

Вот с помощью этой штуки можно реализовать твою задумку https://pawno-rus.ru/topic/834-ispolzovanie-sscanf/

Пока не очень понятно можете пример привести?

Share this post


Link to post
  • 0
1 час назад, DEST сказал:

Вот с помощью этой штуки можно реализовать твою задумку https://pawno-rus.ru/topic/834-ispolzovanie-sscanf/

 

Вот что я смог сделать:

 

if(pickupid == podarok[1])
	{
		switch(random(2))
		{
			case 0:
			{
				GivePlayerMoney(playerid, 5000);
				pInfo[playerid][pCash] += 5000;
                format(stringer, sizeof(stringer), "Вы подобрали подарок. Приз %d рублей", pInfo[playerid][pCash]);
				SCM(playerid, COLOR_BLUE, stringer);
				sscanf(pInfo[playerid][pPodarok], "p<,>a<i>[2]",pInfo[playerid][pPodarok]);
				pInfo[playerid][pPodarok]=1;
			}
			case 1:
			{
                GivePlayerMoney(playerid, 5000);
				pInfo[playerid][pCash] += 5000;
                format(stringer, sizeof(stringer), "Вы подобрали подарок. Приз %d рублей", pInfo[playerid][pCash]);
				SCM(playerid, COLOR_BLUE, stringer);
                sscanf(pInfo[playerid][pPodarok], "p<,>a<i>[2]",pInfo[playerid][pPodarok]);
                pInfo[playerid][pPodarok]=1;
			}
		}
		pInfo[playerid][pPodarok]++;
		format(mysql_query_string, 200, "UPDATE "T_ACCOUNTS" SET podarok = '%d' WHERE name = '%s'", pInfo[playerid][pPodarok], pInfo[playerid][pName]);
		mysql_tquery(dbHandle, mysql_query_string, "", "");
	}

 

Share this post


Link to post
  • 0

@Andrey_Akkerman в той теме приводятся примеры, все довольно-таки просто. 

В базе будут хранится данные: 0,0,0,0,0,0

                                                     1,2,3,4,5,6

Выделенный шрифт - порядковый номер подарка (в базе не отображается, приведен для наглядности). 

Обычный шрифт - значения подарка (в базе отображается именно в таком виде). 

Записывать соответственно так: 
 

new formatquery[?]; //где ? кол-во символов для запроса
format(formatquery, sizeof formatquery, "UPDATE table_name SET field_name = "%d, %d, %d, %d, %d" WHERE unique_field = unique_value", podarok[0], podarok[1], podarok[2] ... podarok[n]); 
mysql_tquery(dbHandle, formatquery, "", "");

Ну а как считывать пример в теме дан. 

Переменную нужно уже объявлять таким образом: 
 

new podarok[?]; // где вместо ? кол-во подарков

 

Share this post


Link to post
  • 0
В 11.11.2017 в 00:15, DEST сказал:

@Andrey_Akkerman в той теме приводятся примеры, все довольно-таки просто. 

В базе будут хранится данные: 0,0,0,0,0,0

                                                     1,2,3,4,5,6

Выделенный шрифт - порядковый номер подарка (в базе не отображается, приведен для наглядности). 

Обычный шрифт - значения подарка (в базе отображается именно в таком виде). 

Записывать соответственно так: 
 


new formatquery[?]; //где ? кол-во символов для запроса
format(formatquery, sizeof formatquery, "UPDATE table_name SET field_name = "%d, %d, %d, %d, %d" WHERE unique_field = unique_value", podarok[0], podarok[1], podarok[2] ... podarok[n]); 
mysql_tquery(dbHandle, formatquery, "", "");

Ну а как считывать пример в теме дан. 

Переменную нужно уже объявлять таким образом: 
 


new podarok[?]; // где вместо ? кол-во подарков

 

 

Я сделал так, только он не сохраняет в БД, а он переводит в другое число.

На срине увидешь что там не то число которое  хотел.

Изображение 

Спойлер

    if(pickupid == podarok[0])
	{
 		if(podar[0][playerid] != 0) return SCM(playerid, COLOR_BLUE, "Вы забрали уже этот подарок!");
		{
			switch(random(3))
			{
				case 0:
				{
                    GivePlayerMoney(playerid, 5000000);
					pInfo[playerid][pCash] += 5000000;
	                format(stringer, sizeof(stringer), "Вы подобрали подарок. Приз %d рублей", GivePlayerMoney);
					SCM(playerid, COLOR_BLUE, stringer);
					sscanf(pInfo[playerid][pPodarok], "p<,>a<i>[3]",pInfo[playerid][pPodarok]);
				}
				case 1:
				{
                    GivePlayerMoney(playerid, 500000);
					pInfo[playerid][pCash] += 500000;
	                format(stringer, sizeof(stringer), "Вы подобрали подарок. Приз %d рублей", GivePlayerMoney);
					SCM(playerid, COLOR_BLUE, stringer);
					sscanf(pInfo[playerid][pPodarok], "p<,>a<i>[3]",pInfo[playerid][pPodarok]);
				}
				case 2:
				{
                    GivePlayerMoney(playerid, 50000);
					pInfo[playerid][pCash] += 50000;
	                format(stringer, sizeof(stringer), "Вы подобрали подарок. Приз %d рублей", GivePlayerMoney);
					SCM(playerid, COLOR_BLUE, stringer);
					sscanf(pInfo[playerid][pPodarok], "p<,>a<i>[3]",pInfo[playerid][pPodarok]);
				}
			}
		}
		podar[0][playerid] = 1;
		mysql_query_string[0] = EOS;
		format(mysql_query_string, sizeof(mysql_query_string), "UPDATE "T_ACCOUNTS"  SET podarok = '%d, %d, %d' WHERE id = %i", podarok[0], podarok[1], podarok[2], pInfo[playerid][pID]);
		mysql_tquery(dbHandle, mysql_query_string, "", "");
	}

 

 

Share this post


Link to post
  • 0

@Andrey_Akkerman какая переменная у тебя отвечает за хранение информации о получении подарка?

Share this post


Link to post
  • 0
11 минут назад, DEST сказал:

@Andrey_Akkerman какая переменная у тебя отвечает за хранение информации о получении подарка?

new podar[MAX_PLAYERS]

Share this post


Link to post
  • 0

@Andrey_Akkerman ну вот значит при получении игроком подарка присваивать: 

podar[playerid][XX] = 1; 
//где вместо XX ид номер получаемого подарка (начиная с нуля)

И при выходе его из игры сохранять: 

new mysql_query[X]; 
mysql_format(connectionid, mysql_query, X, "UPDATE `table_accounts` SET `podarok` = '%d'", podar[playerid][0], podar[playerid][1], podar[playerid][2]); 
mysql_function_query(connectionid, mysql_query, false, "", "");

Ну и объявление переменной заменить:

new podar[MAX_PLAYERS][YY]; 
//где вместо YY кол-во подарков всего

 

Share this post


Link to post
  • 0

Помоги ни как не могу разобратся, он в БД записывает подарки вот так: 1,1,1,1 и т.д.

Щас скину весь код по подаркам помоги.

 

Ко всем new

Спойлер

new podarok[3];
new podar[MAX_PLAYERS][3];

 

 

В enum аккаунта

Спойлер

pPodarok

 

 

в OnGameModeInit

Спойлер

	podarok[0] = CreateDynamicPickup(19054, 23, 2743.9409, -2491.8401, 21.6863, -1);
	podarok[1] = CreateDynamicPickup(19056, 23, 2741.4409, -2491.8401, 21.6863, -1);
	podarok[2] = CreateDynamicPickup(19054, 23, 2738.9409, -2491.8401, 21.6863, -1);

 

 

В OnPlayerConnect

Спойлер

pInfo[playerid][pPodarok] = 0;

 

 

В OnPlayerPickUpDynamicPickup

Для примера приведен 1 констант, остальные 2 точно такие же.

Спойлер

	if(pickupid == podarok[0])
	{
 		if(podar[0][playerid] >= 1) return SCM(playerid, COLOR_BLUE, "Вы забрали уже этот подарок!");
		{
			switch(random(3))
			{
				case 0:
				{
					switch(random(3))
					{
					    case 0:
						{
							pInfo[playerid][pExp] += 1;
			                format(stringer, sizeof(stringer), "Вы подобрали подарок. Приз +1 опыт");
							SCM(playerid, COLOR_BLUE, stringer);
							pInfo[playerid][pPodarok] = pInfo[playerid][pPodarok];
							sscanf(pInfo[playerid][pPodarok], "p<,>a<i>[3]",pInfo[playerid][pPodarok]);
						}
						case 1:
						{
							pInfo[playerid][pExp] += 10;
			                format(stringer, sizeof(stringer), "Вы подобрали подарок. Приз +10 опыта");
							SCM(playerid, COLOR_BLUE, stringer);
							pInfo[playerid][pPodarok] = pInfo[playerid][pPodarok];
							sscanf(pInfo[playerid][pPodarok], "p<,>a<i>[3]",pInfo[playerid][pPodarok]);
						}
						case 2:
						{
							pInfo[playerid][pExp] += 15;
			                format(stringer, sizeof(stringer), "Вы подобрали подарок. Приз +15 опыта");
							SCM(playerid, COLOR_BLUE, stringer);
							pInfo[playerid][pPodarok] = pInfo[playerid][pPodarok];
							sscanf(pInfo[playerid][pPodarok], "p<,>a<i>[3]",pInfo[playerid][pPodarok]);
						}
					}
				}
				case 1:
				{
                    GivePlayerMoney(playerid, 5000);
					pInfo[playerid][pCash] += 5000;
	                format(stringer, sizeof(stringer), "Вы подобрали подарок. Приз 5000 рублей");
					SCM(playerid, COLOR_BLUE, stringer);
					pInfo[playerid][pPodarok] = pInfo[playerid][pPodarok];
					sscanf(pInfo[playerid][pPodarok], "p<,>a<i>[3]",pInfo[playerid][pPodarok]);
				}
				case 2:
				{
					switch(random(3))
					{
					    case 0:
						{
							pInfo[playerid][pLevel] += 1;
			                format(stringer, sizeof(stringer), "Вы подобрали подарок. Приз +1 уровень");
							SCM(playerid, COLOR_BLUE, stringer);
							pInfo[playerid][pPodarok] = pInfo[playerid][pPodarok];
							sscanf(pInfo[playerid][pPodarok], "p<,>a<i>[3]",pInfo[playerid][pPodarok]);
						}
						case 1:
						{
							pInfo[playerid][pLevel] += 3;
			                format(stringer, sizeof(stringer), "Вы подобрали подарок. Приз +3 уровеня");
							SCM(playerid, COLOR_BLUE, stringer);
							pInfo[playerid][pPodarok] = pInfo[playerid][pPodarok];
							sscanf(pInfo[playerid][pPodarok], "p<,>a<i>[3]",pInfo[playerid][pPodarok]);
						}
						case 2:
						{
							pInfo[playerid][pLevel] += 5;
			                format(stringer, sizeof(stringer), "Вы подобрали подарок. Приз +5 уровеня");
							SCM(playerid, COLOR_BLUE, stringer);
							pInfo[playerid][pPodarok] = pInfo[playerid][pPodarok];
							sscanf(pInfo[playerid][pPodarok], "p<,>a<i>[3]",pInfo[playerid][pPodarok]);
						}
					}
				}
			}
		}
		podar[playerid][0] = 1;
		mysql_query_string[0] = EOS;
		format(mysql_query_string, sizeof(mysql_query_string), "UPDATE "T_ACCOUNTS"  SET podarok = '%i, %i, %i'", podar[playerid][0], podar[playerid][1], podar[playerid][2]);
		mysql_tquery(dbHandle, mysql_query_string, "", "");
	}

 

 

Вот весь код.

Он не сохраняет подарки после рестарта сервера.

Edited by Andrey_Akkerman

Share this post


Link to post
  • 0

@Andrey_Akkerman ты так и не разберешся, насоздавал 500 переменных, непонятно что хранящих. Сначала наведи порядок в своем коде, поудаляй вот эту хрень со сканфом, непонятно вообще что записывающую 

3 минуты назад, Andrey_Akkerman сказал:

sscanf(pInfo[playerid][pPodarok], "p<,>a<i>[3]",pInfo[playerid][pPodarok]);

Объясню в общем виде, под код сам подстроишь. 

В OnPlayerDisconnect добавь обнуление переменной для КАЖДОГО подарка: 

podarok[playerid][0] = 0; 
podarok[playerid][1] = 0; 
// и т.д. для всех

После там, где идет выдача изменяй значение нужного подарка на единицу. Т.е. с нуля на единицу. 
После, там, где у тебя идет сохранение аккаунта добавь по примеру сохранение своих подарков (скидывал выше готовый mysql запрос.

После, там,  где у тебя загрузка аккаунта добавь по примеру (скидывал тему в первом посте) загрузку этих данных, используя sscanf ( ИСПОЛЬЗОВАТЬ ЕГО НУЖНО ТОЛЬКО ЗДЕСЬ, А НЕ ПРИ ВЫДАЧЕ ). 

Share this post


Link to post
  • 0
37 минут назад, DEST сказал:

@Andrey_Akkerman ты так и не разберешся, насоздавал 500 переменных, непонятно что хранящих. Сначала наведи порядок в своем коде, поудаляй вот эту хрень со сканфом, непонятно вообще что записывающую 

Объясню в общем виде, под код сам подстроишь. 

В OnPlayerDisconnect добавь обнуление переменной для КАЖДОГО подарка: 


podarok[playerid][0] = 0; 
podarok[playerid][1] = 0; 
// и т.д. для всех

После там, где идет выдача изменяй значение нужного подарка на единицу. Т.е. с нуля на единицу. 
После, там, где у тебя идет сохранение аккаунта добавь по примеру сохранение своих подарков (скидывал выше готовый mysql запрос.

После, там,  где у тебя загрузка аккаунта добавь по примеру (скидывал тему в первом посте) загрузку этих данных, используя sscanf ( ИСПОЛЬЗОВАТЬ ЕГО НУЖНО ТОЛЬКО ЗДЕСЬ, А НЕ ПРИ ВЫДАЧЕ ). 

То есть в OnPlayerDiscconect добавить сохранение подарков, а в загрузку аккаунтов что добавить?

Share this post


Link to post
  • 0

@Andrey_Akkerman В OnPlayerDisconnect добавить обнуление. Там где все сохранения добавить сохранение, там где загрузка акка добавить загрузку по примеру, с использованием sscanf. Я же не знаю как у вас загрузка в моде идет. 

Share this post


Link to post
  • 0

@steve Много,у нас не адекватов развелось..Пора банить уже.. 

 

Share this post


Link to post
Guest
This topic is now closed to further replies.
Sign in to follow this  
Followers 0
  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • maximdemakov
      By maximdemakov
      Мы, команда проекта "State City", ищем увлеченного и талантливого **Pawn-разработчика**, который присоединится к нашему проекту на платформе  (CRMP). Если вы хотите реализовать свои идеи, улучшить свои навыки и стать частью интересного игрового мира, мы будем рады видеть вас в нашей команде!
      ### О проекте:
      "State City" — это уникальная многопользовательская игра, создаваемая для того, чтобы предложить игрокам захватывающий опыт взаимодействия в мире, полном возможностей. Наша цель — создать игру с увлекательным сюжетом, разнообразными квестами и активной игровым сообществом.
      ### Что мы ожидаем от вас:
      - **Опыт разработки на языке Pawn**: Умение писать качественный и чистый код, оптимизировать его.
      - **Знания и опыт работы с платформой CRMP**: Понимание основных концепций, механизмов и возможностей SAMP.
      - **Навыки работы с базами данных**: Опыт работы с MySQL или другими подобными системами для хранения и обработки данных.
      - **Опыт разработки игровых функционалов**: Создание уникальных игровых систем, таких как системы квестов, экономики и взаимодействия с миром.
      - **Командная работа**: Умение эффективно взаимодействовать с другими членами команды, открыто обсуждать идеи и решать проблемы.
      - **Креативность и инициатива**: Предложение новых идей и реализации в рамках проекта.
      ### Мы предлагаем:
      - **Гибкий график**: Возможность работать удаленно и управлять своим временем.
      - **Интересные задачи**: Работа над уникальными фичами и системами игры.
      - **Дружелюбная атмосфера**: Команда единомышленников, готовых поддержать и помочь вам в развитии.
      - **Возможности для роста**: Работа в динамичной среде, позволяющая развиваться и прокладывать карьерный путь в игровой индустрии.
      ### Как подать заявку:
      Если вы готовы стать частью нашей команды и внести свой вклад в создание "State City", отправьте нам ваше резюме и примеры предыдущих работ. В ВК https://vk.com/id884946285
      ---
    • maximdemakov
      By maximdemakov
      Чтобы привлечь разработчиков для проекта "State City" на платформе SAMP, необходимо сформировать четкое и привлекательное предложение. Ниже приведены рекомендации по набиранию команды, а также подходящие форматы для объявления.
      ### Рекомендации по привлечению разработчиков
      1. **Определение требований**:
         
           - Знание языка программирования Pawn.
           - Опыт разработки на платформе SAMP.
           - Знания в области сетевого программирования.
           - Опыт работы с базами данных.
           -
       
      3. **Предложение**:
         
      ---
      **Внимание, разработчики! Присоединяйтесь к проекту "State City" на платформе SAMP!**
      Мы ищем талантливых и увлеченных разработчиков для создания уникальной многопользовательской игры, сочетающей элементы реальной жизни и ролевого взаимодействия. Если вы:
      - Обладаетесь опытом разработки на языке Pawn.
      - Имеете навыки работы с SAMP и сетевым программированием.
      - Знакомы с работой с базами данных и моддингом.
      **Что мы предлагаем**:
      - Участие в разработке интересного проекта с большими возможностями роста.
      - Работа в дружной команде единомышленников.
      - Возможность внести свой вклад в мир игры, разрабатывая уникальные механики и системы.
      Интересно? Пишите нам в личные сообщения или на почту [ваш_email@domain.com]. Будем рады обсудить детали!
      ---
      ### Заключение
      Повышение интереса разработчиков к вашему проекту "State City" зависит от ясного описания задач, требований и возможностей. Поддерживайте открытую и активную коммуникацию с потенциальными кандидатами, чтобы привлечь лучших специалистов и создать успешную команду для реализации вашего проекта.
    • maximdemakov
      By maximdemakov
       
      1. **Определение требований**:
         
           - Знание языка программирования Pawn.
           - Опыт разработки на платформе SAMP.
           - Знания в области сетевого программирования.
           - Опыт работы с базами данных.
           -
       
      3. **Предложение**:
         
      ---
      **Внимание, разработчики! Присоединяйтесь к проекту "State City" на платформе SAMP!**
      Мы ищем талантливых и увлеченных разработчиков для создания уникальной многопользовательской игры, сочетающей элементы реальной жизни и ролевого взаимодействия. Если вы:
      - Обладаетесь опытом разработки на языке Pawn.
      - Имеете навыки работы с SAMP и сетевым программированием.
      - Знакомы с работой с базами данных и моддингом.
      **Что мы предлагаем**:
      - Участие в разработке интересного проекта с большими возможностями роста.
      - Работа в дружной команде единомышленников.
      - Возможность внести свой вклад в мир игры, разрабатывая уникальные механики и системы.
      Интересно? Пишите нам в личные сообщения или на почту [ваш_email@domain.com]. Будем рады обсудить детали!
      ---
      ### Заключение
      Повышение интереса разработчиков к вашему проекту "State City" зависит от ясного описания задач, требований и возможностей. Поддерживайте открытую и активную коммуникацию с потенциальными кандидатами, чтобы привлечь лучших специалистов и создать успешную команду для реализации вашего проекта.