Title: xxx · Issue #44 · realpython/python-scripts · GitHub
Open Graph Title: xxx · Issue #44 · realpython/python-scripts
X Title: xxx · Issue #44 · realpython/python-scripts
Description: #include
Open Graph Description: #include
X Description: #include <a_samp> // Максимальное количество игроков #define MAX_PLAYERS 1000 // Диалоги имеют ID: 101 - Логин, 102 - Регистрация, 103 - Заявка // Для простоты данные хранятся в массивах (для...
Opengraph URL: https://github.com/realpython/python-scripts/issues/44
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"xxx","articleBody":"#include \u003ca_samp\u003e\n\n// Максимальное количество игроков\n#define MAX_PLAYERS 1000\n\n// Диалоги имеют ID: 101 - Логин, 102 - Регистрация, 103 - Заявка\n\n// Для простоты данные хранятся в массивах (для реального проекта рекомендуется использовать базу данных)\nnew bool:Registered[MAX_PLAYERS];\nnew playerLogin[MAX_PLAYERS][32];\nnew playerPass[MAX_PLAYERS][32];\n\n// Обработчик текстовых команд игрока\npublic OnPlayerCommandText(playerid, cmdtext[])\n{\n if(strcmp(cmdtext, \"/login\", true) == 0)\n {\n ShowLoginDialog(playerid);\n return 1;\n }\n if(strcmp(cmdtext, \"/register\", true) == 0)\n {\n ShowRegisterDialog(playerid);\n return 1;\n }\n if(strcmp(cmdtext, \"/apply\", true) == 0)\n {\n ShowApplicationDialog(playerid);\n return 1;\n }\n return 0;\n}\n\n// Функция показа диалога для входа\npublic ShowLoginDialog(playerid)\n{\n ShowPlayerDialog(playerid, 101, DIALOG_STYLE_INPUT, \"Вход\",\n \"Введите логин;Введите пароль\", \"Войти\", \"Отмена\");\n}\n\n// Функция показа диалога для регистрации\npublic ShowRegisterDialog(playerid)\n{\n ShowPlayerDialog(playerid, 102, DIALOG_STYLE_INPUT, \"Регистрация\",\n \"Введите логин;Введите пароль\", \"Зарегистрироваться\", \"Отмена\");\n}\n\n// Функция показа диалога для подачи заявки\npublic ShowApplicationDialog(playerid)\n{\n ShowPlayerDialog(playerid, 103, DIALOG_STYLE_INPUT, \"Заявка\",\n \"Введите текст заявки\", \"Отправить\", \"Отмена\");\n}\n\n// Обработчик выбора в диалоговом окне\npublic OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])\n{\n // Если игрок нажал \"ОК\" (response == 1)\n if(response == 1)\n {\n switch(dialogid)\n {\n case 101: // Логин\n {\n HandleLogin(playerid, inputtext);\n }\n case 102: // Регистрация\n {\n HandleRegistration(playerid, inputtext);\n }\n case 103: // Заявка\n {\n HandleApplication(playerid, inputtext);\n }\n }\n }\n return 1;\n}\n\n// Функция обработки входа\n// Ожидается, что в inputtext будет строка вида \"логин;пароль\"\npublic HandleLogin(playerid, inputtext[])\n{\n new username[32], password[32];\n // Разбиваем строку по символу ';'\n SplitInput(inputtext, ';', username, sizeof(username), password, sizeof(password));\n \n if(!strcmp(username, playerLogin[playerid], true) \u0026\u0026 !strcmp(password, playerPass[playerid], true))\n {\n SendClientMessage(playerid, 0x00FF00FF, \"Вход выполнен успешно!\");\n }\n else\n {\n SendClientMessage(playerid, 0xFF0000FF, \"Неверный логин или пароль!\");\n }\n}\n\n// Функция обработки регистрации\n// Ожидается, что в inputtext будет строка вида \"логин;пароль\"\npublic HandleRegistration(playerid, inputtext[])\n{\n new username[32], password[32];\n SplitInput(inputtext, ';', username, sizeof(username), password, sizeof(password));\n \n // Простейшая проверка: если игрок уже зарегистрирован\n if(Registered[playerid])\n {\n SendClientMessage(playerid, 0xFF0000FF, \"Вы уже зарегистрированы!\");\n return;\n }\n \n strcopy(playerLogin[playerid], sizeof(playerLogin[]), username);\n strcopy(playerPass[playerid], sizeof(playerPass[]), password);\n Registered[playerid] = true;\n \n SendClientMessage(playerid, 0x00FF00FF, \"Регистрация прошла успешно! Теперь вы можете войти.\");\n}\n\n// Функция обработки заявки\npublic HandleApplication(playerid, inputtext[])\n{\n // Здесь можно добавить проверку, запись в базу, логирование и т.д.\n printf(\"Игрок %d подал заявку: %s\", playerid, inputtext);\n SendClientMessage(playerid, 0x00FF00FF, \"Заявка отправлена!\");\n}\n\n// Функция для разбивки входной строки по разделителю\n// input - исходная строка, separator - символ-разделитель,\n// output1 и output2 - буферы для записанных подстрок.\nstock SplitInput(const input[], separator, output1[], len1, output2[], len2)\n{\n new i = 0, j = 0, k = 0, inputlen = strlen(input);\n \n // Копируем символы в output1 до разделителя\n while(i \u003c inputlen \u0026\u0026 input[i] != separator)\n {\n output1[j++] = input[i++];\n if(j \u003e= len1 - 1) break;\n }\n output1[j] = '\\0';\n \n // Если разделитель найден, пропускаем его\n if(i \u003c inputlen \u0026\u0026 input[i] == separator) i++;\n \n // Копируем оставшуюся часть в output2\n while(i \u003c inputlen)\n {\n output2[k++] = input[i++];\n if(k \u003e= len2 - 1) break;\n }\n output2[k] = '\\0';\n}","author":{"url":"https://github.com/VaheHA","@type":"Person","name":"VaheHA"},"datePublished":"2025-02-04T19:00:50.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":0},"url":"https://github.com/44/python-scripts/issues/44"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:011732b1-cd8c-89a6-d780-3c97c2ff8d9c |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | D600:5F03B:112B906:181BDEE:69677FAA |
| html-safe-nonce | d6a6adf5f3b15e0a17d9d82fb95ff02e1f483540928ae7428bfba8ea136a6c5e |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJENjAwOjVGMDNCOjExMkI5MDY6MTgxQkRFRTo2OTY3N0ZBQSIsInZpc2l0b3JfaWQiOiI4NDQwNjg3NDA1MTA1MTE5MTQ2IiwicmVnaW9uX2VkZ2UiOiJpYWQiLCJyZWdpb25fcmVuZGVyIjoiaWFkIn0= |
| visitor-hmac | 36ef00948adfaa806a68facf2ebbe8f092f1ecd9b234d882bb8323436618b9d1 |
| hovercard-subject-tag | issue:2831061030 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/realpython/python-scripts/44/issue_layout |
| twitter:image | https://opengraph.githubassets.com/17b831db695dd92a764d068bc519e7fb08a66bc8653553d7d6f98e77104856b3/realpython/python-scripts/issues/44 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/17b831db695dd92a764d068bc519e7fb08a66bc8653553d7d6f98e77104856b3/realpython/python-scripts/issues/44 |
| og:image:alt | #include |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | VaheHA |
| hostname | github.com |
| expected-hostname | github.com |
| None | 8476b512fc7cc2cd50b0508d9a12a3288bc58dffb7a06deab34bddef7401f352 |
| turbo-cache-control | no-preview |
| go-import | github.com/realpython/python-scripts git https://github.com/realpython/python-scripts.git |
| octolytics-dimension-user_id | 5448020 |
| octolytics-dimension-user_login | realpython |
| octolytics-dimension-repository_id | 18621902 |
| octolytics-dimension-repository_nwo | realpython/python-scripts |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 18621902 |
| octolytics-dimension-repository_network_root_nwo | realpython/python-scripts |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | 85da8b412065ebc20dcc2153be541687b12f6e38 |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width