Рекомендованные сообщения



Не найдено.

14 posts in this topic

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

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

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

 

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

 

Пример: 

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

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

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

 

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
37 минут назад, DEST сказал:

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

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

Share this post


Link to post
Share on other sites
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
Share on other sites

@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
Share on other sites
В 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
Share on other sites

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

Share this post


Link to post
Share on other sites
11 минут назад, DEST сказал:

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

new podar[MAX_PLAYERS]

Share this post


Link to post
Share on other sites

@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
Share on other sites

Помоги ни как не могу разобратся, он в БД записывает подарки вот так: 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
Share on other sites

@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
Share on other sites
37 минут назад, DEST сказал:

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

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

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


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

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

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

 

Share this post


Link to post
Share on other sites
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

    • sawe123
      By sawe123
      Есть ли какая то система видел в моде что можно настраивать вес авто ищу такую систему.