danrj3 Новичок 0 Новичок Posted May 16, 2020 · Report post Здравствуйте Как создать команду для получение приза с рулетки сайта? Есть таблица с игроками и таблица выигрышами 0 Share this post Link to post
0 iQua Освоившийся 3 Освоившийся Posted May 17, 2020 · Report post В .pwn нужно искать команду, а не в базе данных. 0 Share this post Link to post
0 danrj3 Новичок 0 Новичок Posted May 17, 2020 · Report post 3 часа назад, iQua сказал: В .pwn нужно искать команду, а не в базе данных. не, я понимаю.. ее нету вообще. Нужно ка-кто сделать обращение на таблицу, проверки на приз и тп, чтоб игрок мог забрать свой приз (деньги, донат, машину, скин) 0 Share this post Link to post
0 Cawfee Великий Гуру 525 Великий Гуру Posted May 17, 2020 · Report post @danrj3, ну, вот Вам пример. Спойлер stock givePrizes(playerid) { new string[109+(-2+MAX_PLAYER_NAME)+1]; GetPlayerName(playerid, string, MAX_PLAYER_NAME); format(string, sizeof string, "SELECT p_value, p_id FROM ucp_drop_roulette WHERE p_user = '%s' AND p_status = 0", string); new MySQL:cache = mysql_query(dbHandle, string); new rows = cache_num_rows(); for (new i = 0, prizeID; i < rows; i++) { // не знаю ваших обозначений, поэтому считаю, что id - идентификатор подарка cache_get_value_name_int(i, "p_id", prizeID); switch (prizeID) { case 0: { // выдадим, например, машну } case 1: { // выдадим, например, деньги } case 2: { // ... } } } return rows; // вернем количество выданных игроку призов } Хотя, как по мне, лучше здесь работать с битами (тот же куш представляет собой совокупность ряда других призов, потому можно не создавать под него отдельный идентификатор, а проверять, проставлены ли все остальные флажки, чтобы понимать, действительно ли это куш). Спойлер enum e_ROULETTE_PRIZES (<<= 1) { // список призов в рулетке ROULETTE_PRIZE_NONE = 1 ROULETTE_PRIZE_VEHICLE, // транспортное средство ROULETTE_PRIZE_MONEY, // денежные средства // здесь еще ряд призов ROULETTE_PRIZE_JACKPOT = -1 // джекпот - игроку достается все, что только можно } stock givePrizes(playerid) { if (prize & ROULETTE_PRIZE_NONE) { return 0; // подарков нет, выходим из функции } if (prize & ROULETTE_PRIZE_VEHICLE) { // игрок выиграл машину } if (prize & ROULETTE_PRIZE_MONEY) { // игрок выиграл деньги } return 1; } Правда в примере нет кода загрузки данных из базы. К сожалению, с битами в MySQL работал давно, поэтому почти ничего и не помню. Если будет желание поковыряться, можете объединить оба примера, дополнив код загрузки с первого, и будет счастье. 0 Share this post Link to post
0 danrj3 Новичок 0 Новичок Posted May 17, 2020 · Report post 20 минут назад, odosenok сказал: @danrj3, ну, вот Вам пример. Код (закрыть спойлер) stock givePrizes(playerid) { new string[109+(-2+MAX_PLAYER_NAME)+1]; GetPlayerName(playerid, string, MAX_PLAYER_NAME); format(string, sizeof string, "SELECT p_value, p_id FROM ucp_drop_roulette WHERE p_user = '%s' AND p_status = 0", string); new MySQL:cache = mysql_query(dbHandle, string); new rows = cache_num_rows(); for (new i = 0, prizeID; i < rows; i++) { // не знаю ваших обозначений, поэтому считаю, что id - идентификатор подарка cache_get_value_name_int(i, "p_id", prizeID); switch (prizeID) { case 0: { // выдадим, например, машну } case 1: { // выдадим, например, деньги } case 2: { // ... } } } return rows; // вернем количество выданных игроку призов } Хотя, как по мне, лучше здесь работать с битами (тот же куш представляет собой совокупность ряда других призов, потому можно не создавать под него отдельный идентификатор, а проверять, проставлены ли все остальные флажки, чтобы понимать, действительно ли это куш). Код (закрыть спойлер) enum e_ROULETTE_PRIZES (<<= 1) { // список призов в рулетке ROULETTE_PRIZE_NONE = 1 ROULETTE_PRIZE_VEHICLE, // транспортное средство ROULETTE_PRIZE_MONEY, // денежные средства // здесь еще ряд призов ROULETTE_PRIZE_JACKPOT = -1 // джекпот - игроку достается все, что только можно } stock givePrizes(playerid) { if (prize & ROULETTE_PRIZE_NONE) { return 0; // подарков нет, выходим из функции } if (prize & ROULETTE_PRIZE_VEHICLE) { // игрок выиграл машину } if (prize & ROULETTE_PRIZE_MONEY) { // игрок выиграл деньги } return 1; } Правда в примере нет кода загрузки данных из базы. К сожалению, с битами в MySQL работал давно, поэтому почти ничего и не помню. Если будет желание поковыряться, можете объединить оба примера, дополнив код загрузки с первого, и будет счастье. Спасибо, кажется начал понимать. сейчас проверим) 0 Share this post Link to post
0 danrj3 Новичок 0 Новичок Posted May 17, 2020 · Report post 8 часов назад, odosenok сказал: @danrj3, ну, вот Вам пример. Код (закрыть спойлер) stock givePrizes(playerid) { new string[109+(-2+MAX_PLAYER_NAME)+1]; GetPlayerName(playerid, string, MAX_PLAYER_NAME); format(string, sizeof string, "SELECT p_value, p_id FROM ucp_drop_roulette WHERE p_user = '%s' AND p_status = 0", string); new MySQL:cache = mysql_query(dbHandle, string); new rows = cache_num_rows(); for (new i = 0, prizeID; i < rows; i++) { // не знаю ваших обозначений, поэтому считаю, что id - идентификатор подарка cache_get_value_name_int(i, "p_id", prizeID); switch (prizeID) { case 0: { // выдадим, например, машну } case 1: { // выдадим, например, деньги } case 2: { // ... } } } return rows; // вернем количество выданных игроку призов } Хотя, как по мне, лучше здесь работать с битами (тот же куш представляет собой совокупность ряда других призов, потому можно не создавать под него отдельный идентификатор, а проверять, проставлены ли все остальные флажки, чтобы понимать, действительно ли это куш). Код (открыть спойлер) enum e_ROULETTE_PRIZES (<<= 1) { // список призов в рулетке ROULETTE_PRIZE_NONE = 1 ROULETTE_PRIZE_VEHICLE, // транспортное средство ROULETTE_PRIZE_MONEY, // денежные средства // здесь еще ряд призов ROULETTE_PRIZE_JACKPOT = -1 // джекпот - игроку достается все, что только можно } stock givePrizes(playerid) { if (prize & ROULETTE_PRIZE_NONE) { return 0; // подарков нет, выходим из функции } if (prize & ROULETTE_PRIZE_VEHICLE) { // игрок выиграл машину } if (prize & ROULETTE_PRIZE_MONEY) { // игрок выиграл деньги } return 1; } Правда в примере нет кода загрузки данных из базы. К сожалению, с битами в MySQL работал давно, поэтому почти ничего и не помню. Если будет желание поковыряться, можете объединить оба примера, дополнив код загрузки с первого, и будет счастье. Вот работает, но выдает бесконечно приз givePrizes(playerid) { new string[109+(-2+MAX_PLAYER_NAME)+1]; GetPlayerName(playerid, string, MAX_PLAYER_NAME); format(string, sizeof(string), "SELECT p_id FROM ucp_drop_roulette WHERE p_user = '%s' AND p_status = 0", string); mysql_query(dbHandle, string); new rows = cache_num_rows(); for (new i = 0; i < rows; i++) { new prizID = cache_get_field_content_int(i, "p_id"); switch (prizID) { case 1: { player[playerid][pmoney] += 1000; SCM(playerid, COLOR_RED, !"[Рулетка Revold]: {B4B4B4}Ваш приз 10000$"); SavePlayer(playerid, "Money", player[playerid][pmoney], "d"); } case 2: { player[playerid][pdonate] += 50; SCM(playerid, COLOR_RED, !"[Рулетка Revold]: {B4B4B4}Ваш приз 50 руб"); SavePlayer(playerid, "Donate", player[playerid][pdonate], "d"); } } } return rows; } Ещё 0 Share this post Link to post
0 DEST Maintainer 1,037 Maintainer Posted May 17, 2020 · Report post @danrj3 после того, как приз выдали, p_status нужно выставить в число, не равное 0 (исходя из сформированного запроса) 25 минут назад, danrj3 сказал: format(string, sizeof(string), "SELECT p_id FROM ucp_drop_roulette WHERE p_user = '%s' AND p_status = 0", string); 0 Share this post Link to post
0 danrj3 Новичок 0 Новичок Posted May 17, 2020 · Report post 47 минут назад, DEST сказал: @danrj3 после того, как приз выдали, p_status нужно выставить в число, не равное 0 (исходя из сформированного запроса) Да, знаю пытался "UPDATE", ничего не вышло format(string, sizeof(string), "UPDATE ucp_drop_roulette SET p_status = 1 WHERE p_user = '%s' AND p_status = 0", string); 0 Share this post Link to post
0 DEST Maintainer 1,037 Maintainer Posted May 18, 2020 · Report post @danrj3 скиньте итоговый код, который получился вместе с запросом UPDATE 0 Share this post Link to post
0 danrj3 Новичок 0 Новичок Posted May 18, 2020 · Report post givePrizes(playerid) { new string[109+(-2+MAX_PLAYER_NAME)+1]; GetPlayerName(playerid, string, MAX_PLAYER_NAME); format(string, sizeof(string), "SELECT p_id FROM ucp_drop_roulette WHERE p_user = '%s' AND p_status = 0", string); mysql_query(dbHandle, string); new rows = cache_num_rows(); for (new i = 0; i < rows; i++) { new prizID = cache_get_field_content_int(i, "p_id"); switch (prizID) { case 1: { player[playerid][pmoney] += 1000; SCM(playerid, COLOR_RED, !"[Рулетка Revold]: {B4B4B4}Ваш приз 10000$"); SavePlayer(playerid, "Money", player[playerid][pmoney], "d"); format(string, sizeof(string), "UPDATE ucp_drop_roulette SET p_status = 1 WHERE p_user = '%s' AND p_status = 0", string); } case 2: { player[playerid][pdonate] += 50; SCM(playerid, COLOR_RED, !"[Рулетка Revold]: {B4B4B4}Ваш приз 50 руб"); SavePlayer(playerid, "Donate", player[playerid][pdonate], "d"); format(string, sizeof(string), "UPDATE ucp_drop_roulette SET p_status = 1 WHERE p_user = '%s' AND p_status = 0", string); } } } return rows; } 0 Share this post Link to post
0 DEST Maintainer 1,037 Maintainer Posted May 18, 2020 · Report post @danrj3 1. Код обновления статуса можно вынести за цикл, т.к. он выполняется сразу для всех призов, которые есть у игрока (в принципе старайтесь избегать запросов к базе в цикле). 2. После форматирования запроса (записи его в переменную string) необходимо его отправить в базу, с помощью функции mysql_query. 3. В параметрах форматирования использована переменная string, в которую до этого с помощью format записан запрос на отображение данных. Заведите разные переменные: одну под запрос, другую под ник игрока. 0 Share this post Link to post
0 danrj3 Новичок 0 Новичок Posted May 18, 2020 · Report post 1 час назад, DEST сказал: @danrj3 1. Код обновления статуса можно вынести за цикл, т.к. он выполняется сразу для всех призов, которые есть у игрока (в принципе старайтесь избегать запросов к базе в цикле). 2. После форматирования запроса (записи его в переменную string) необходимо его отправить в базу, с помощью функции mysql_query. 3. В параметрах форматирования использована переменная string, в которую до этого с помощью format записан запрос на отображение данных. Заведите разные переменные: одну под запрос, другую под ник игрока. Что-то ничего не выходит( 0 Share this post Link to post
danrj3 Новичок 0
Здравствуйте
Как создать команду для получение приза с рулетки сайта? Есть таблица с игроками и таблица выигрышами
Share this post
Link to post