Перейти к содержанию

Поиск сообщества

Показаны результаты для тегов 'мануал'.

  • Поиск по тегам

    Введите теги через запятую.
  • Поиск по автору

Тип контента


Форумы

  • Информационный раздел
    • Новости портала
    • Техническая поддержка
    • Приватный форум
  • CRMP 0.3е
    • Помощь по Скриптингу
    • Ошибки
    • Готовые сервера
    • Дополнительные скрипты
    • Мануалы/Уроки
    • Модификации
    • Поиск
    • Архив Вопросов/Проблем/Ошибок
    • Файловый архив
    • Другое
  • SAMP/CRMP 0.3.7
    • Помощь по Скриптингу
    • Ошибки
    • Готовые сервера
    • Плагины
    • Поиск
    • Документация
  • Другое
    • Флейм

Поиск результатов в...

Поиск результатов, которые содержат...


Дата создания

  • Начало

    Конец


Дата обновления

  • Начало

    Конец


Фильтр по количеству...

Найдено: 385 результатов

  1. Данная система позволяет прямо из игры, старшим администраторам управлять администрацией сервера, при этом администраторы, их уровни и пароли хранятся в отдельной базе данных. В профиле игрока ничего храниться не будет, все в базе администраторов. PHP код: #define TABLE_ADMIN "admin"- задэфайним для удобства PHP код: new query[2048], string[512]Сама команда авторизации:PHP код: CMD:alogin(playerid, params[]) { if(PlayerLogged[playerid] == 0) return 1; format(query, sizeof(query), "SELECT * FROM "TABLE_ADMIN" WHERE name = '%s'", PlayerInfo[playerid][pSendername]); mysql_query(query); mysql_store_result(); if(!mysql_fetch_row_format(query)) return true; if(!strcmp(GetAdmin(PlayerInfo[playerid][pSendername], "password"), "qwerty", true)) { SetPVarInt(playerid, "Alogin", 1); ShowPlayerDialog(playerid, 1227, 1, "Регистрация", "Зарегистрируйте ваш пароль:", "Принять", "Отмена"); SendClientMessage(playerid, COLOR_GREY, "Зарегистрируйте администраторский пароль. Он должен быть больше 5 и меньше 16 символов!"); } else ShowPlayerDialog(playerid, 1227, 1, "Авторизация", "Введите администраторский ключ:", "Принять", "Отмена"), SetPVarInt(playerid, "Alogin", 2); return true; }Диалог авторизации: PHP код: case 1227: { if(!response) return 1; if(!strlen(inputtext)) return ShowPlayerDialog(playerid, 1227, 1, "Регистрация", "Зарегистрируйте ваш пароль:", "Принять", "Отмена"); new pass2, level = strval(GetAdmin(PlayerInfo[playerid][pSendername], "level")); if(GetPVarInt(playerid, "Alogin") == 1) { if(sscanf(inputtext, "s[16]", pass2)) ShowPlayerDialog(playerid, 1227, 1, "Регистрация", "Зарегистрируйте ваш пароль:", "Принять", "Отмена"); if(!strcmp(inputtext, "qwerty", true)) return ShowPlayerDialog(playerid, 1227, 1, "Регистрация", "Зарегистрируйте ваш пароль:", "Принять", "Отмена"); if(strlen(inputtext) < 6 || strlen(inputtext) > 16) return ShowPlayerDialog(playerid, 1227, 1, "Регистрация", "Зарегистрируйте ваш пароль:", "Принять", "Отмена"); format(query, sizeof(query), "UPDATE "TABLE_ADMIN" SET password = '%s' WHERE name = '%s' LIMIT 1", pass2, PlayerInfo[playerid][pSendername]); mysql_query(query); SendClientMessage(playerid, COLOR_GREEN, "Поздравляем! Вы получили доступ модератора"); PlayerInfo[playerid][pAdmin] = level; AdminLogged[playerid] = true; format(string, 90, "[AP] Администратор {ffffff}%s[%d]{9ACD32} авторизовался", PlayerInfo[playerid][pSendername], playerid); return true; } else if(GetPVarInt(playerid, "Alogin") == 2) { if(strcmp(inputtext, GetAdmin(PlayerInfo[playerid][pSendername], "password"), true)) return SendClientMessage(playerid, COLOR_LIGHTRED, "Неверный пароль модератора!"), Kick(playerid); SendMes(playerid, COLOR_LIGHTGREEN, "Вы вошли как модератор %d уровня", level); PlayerInfo[playerid][pAdmin] = level; AdminLogged[playerid] = true; format(string, 90, "[AP] Администратор {ffffff}%s[%d]{9ACD32} авторизовался", PlayerInfo[playerid][pSendername], playerid); SendAdminMessage(COLOR_LIGHTGREEN, string); } }Команда для добавления/удаления/повышения модераторов PHP код: CMD:moderator(playerid, params[]) { if(PlayerLogged[playerid] == 0) return 1; if(PlayerInfo[playerid][pAdmin] < 8 || AdminLogged[playerid] == false) return 1; new data[32], name[32]; if(sscanf(params, "s[32]i", name, params[1])) return SendClientMessage(playerid, COLOR_WHITE, "Введите: /moderator [name] [lvl]"); if(params[1] < 0) return SendClientMessage(playerid, COLOR_WHITE, "Введите: /moderator [name] [lvl]"); format(query, sizeof(query), "SELECT * FROM "TABLE_ADMIN" WHERE name = '%s'", name); mysql_query(query); mysql_store_result(); if(mysql_fetch_row_format(query)) { if(params[1] == 0) { format(query, sizeof(query), "DELETE FROM "TABLE_ADMIN" WHERE `name`='%s'", name); mysql_query(query); mysql_free_result(); SendMes(playerid, COLOR_LIGHTRED, "%s успешно удален из списка модераторов", name); } else { format(query, sizeof(query), "UPDATE "TABLE_ADMIN" SET level = '%d' WHERE name = '%s' LIMIT 1", params[1],name); mysql_query(query); SendMes(playerid, COLOR_GREEN, "Уровень администрирования у %s изменен на %d", name, params[1]); } } else { getdate(years, months, days); format(data, 32, "%02d.%02d.%04d", days, months, years); format(query, 512, "INSERT INTO "TABLE_ADMIN" (Name, level, LastCon) VALUES ('%s', %d, '%s')", name, params[1], data); mysql_query(query); SendMes(playerid, COLOR_GREEN, "%s успешно добавлен в список модераторов. Уровень полномочий %d", name, params[1]); } return true; }В конец модаPHP код: stock GetAdmin(username[], obtaining[]) { new Query[128]; format(Query, 128, "SELECT %s FROM "TABLE_ADMIN" WHERE name = '%s' LIMIT 1", obtaining, username); mysql_query(Query); mysql_store_result(); if(mysql_fetch_row(Query) == 1) { mysql_free_result(); return Query; } return Query; }Теперь берем, и все что связано с сохранением и создание в базе поля pAdmin удаляем. И создаем таблицу в базе данных. PHP код: CREATE TABLE IF NOT EXISTS `admin` ( `Name` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, `level` int(2) NOT NULL, `password` varchar(32) NOT NULL DEFAULT 'qwerty', `LastCon` varchar(32) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8;После каждого своего повышения, администратор находящийся в онлайне должен ввести команду /alogin заново, тогда уровень администрирования изменится. Если администратор оффлайн, то ничего этого проделывать не нужно. Если хотите снять администратора который в онлайне, просто вводите /moderator Jasper_Fox 0 и кикаете/баните/варните или просите выйти. PHP код: AdminLogged[playerid] = true;Переменная которая показывает, авторизован игрок как администратор или нет. У каждого она своя. PHP код: SendAdminMessageОтправка сообщения в администраторский чат. У каждого данная функция своя. Автор: Djcrem
  2. John_Smith

    Система доната.

    Решил выложить систему доната, так, как никто не выкладывал, думаю пригодиться. Автор: Alan_Waket Дата: 19.05.2013г Ко всем new PHP код: new DonateMoney1;В enum pInfoPHP код: pDonateRank, pDonateMoney1,В public OnPlayerRegister(playerid, password[])PHP код: ini_setInteger(File,"DonateMoney1",PlayerInfo[playerid][pDonateMoney1]); ini_setInteger(File,"DonateRank",PlayerInfo[playerid][pDonateRank]);В public OnPlayerLogin(playerid,password[])PHP код: ini_getInteger(File,"DonateMoney1",PlayerInfo[playerid][pDonateMoney1]); ini_getInteger(File,"DonateRank",PlayerInfo[playerid][pDonateRank]);В public OnPlayerConnect(playerid)PHP код: PlayerInfo[playerid][pDonateMoney1] = 0; PlayerInfo[playerid][pDonateRank] = 0;В public OnPlayerCommandText(playerid, cmdtext[])PHP код: else if(strcmp(cmd, "/givedonate", true) == 0) { if(PlayerInfo[playerid][pAdmin] > 9) { tmp = strtok(cmdtext, idx); if(!strlen(tmp)) return SendClientMessage(playerid, COLOR_WHITE, "::: Введите: /givedon [ид] [рублей]"); new playa; playa = ReturnUser(tmp); tmp = strtok(cmdtext, idx); DonateMoney1 = strval(tmp); if (PlayerInfo[playerid][pAdmin] >= 9) { if(IsPlayerConnected(playa)) { if(playa != INVALID_PLAYER_ID) { format(string, sizeof(string), "- %d донат переведён на счёт игроку", DonateMoney1); SendClientMessage(playerid, COLOR_WHITE, string); PlayerInfo[playa][pDonateMoney1] += DonateMoney1; SendClientMessage(playa, COLOR_NEWS, "Пополнение доната аккаунта"); format(string, sizeof(string), "- Пополнение счёта на сумму: {d53e07}%d {33ccff}рублей", DonateMoney1); SendClientMessage(playa, COLOR_WHITE, string); format(string, sizeof(string), "- Ваш донатный счёт: {d53e07}%d {33ccff}рублей", PlayerInfo[playa][pDonateMoney1]); SendClientMessage(playa, COLOR_WHITE, string); } } } } return true; }PHP код: else if(strcmp(cmd, "/donate", true) == 0) { new lvlexp[80]; new listitems[] = "[1] Покупка скинаn[2] Снятие наказанийn[3] Прочие покупкиn[4] Покупка VIP статусаn[5] Игровые привилегии"; format(lvlexp,70,"Донат | Баланс: %d рублей",PlayerInfo[playerid][pDonateMoney1]); ShowPlayerDialog(playerid, 10055, DIALOG_STYLE_LIST, lvlexp, listitems, "Выбрать", "Отмена"); }В public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])PHP код: case 10055: { if(response) { switch(listitem) { case 0: { new string3[512]; format(string3,sizeof(string3),"n{ffffff}Введите ID скина на который вы хотите сменить свой скин и нажмите {34c924}'Ок'nnn{ffffff}Стоимость любого скина составляет {34c924}50 {ffffff}DonateMoney"); ShowPlayerDialog(playerid,5563,DIALOG_STYLE_INPUT,"{ffffff}Введите ID скина",string3,"Ок","Выйти"); } case 1:ShowPlayerDialog(playerid, 10056, DIALOG_STYLE_LIST, "Cнятие наказаний", "[1] Снять бан чата (20р)n[2] Снятие варнов (50р)n[3] Выйти из тюрьмы (30р)", "Выбрать", "Назад"); case 2:ShowPlayerDialog(playerid, 10057, DIALOG_STYLE_LIST, "Прочее", "[1] Прибавить 1к наркозависимости (30р)n[2] Убавить 1к наркозависимости (30р)n[3] Купить 1кг наркотиков(15)n[4] Купить 1000 материалов (20р)n[5] Получить набор оружия(бесконечные патроны) (40р)n[6] Купить комплект лицензий (20р)n[7] Покупка скиллов (50р)n[8]Снятие розыска (20)n[9]Обнулить счет преступлений (100р)n[10] Купить 50 законопослушности (20р)", "Выбрать", "Назад"); case 3:ShowPlayerDialog(playerid, 10058, DIALOG_STYLE_LIST, "Покупка VIP", "[1] Bronze VIP (50р)n[2] Silver VIP(100р)n[3] Gold VIP(150р)", "Выбрать", "Назад"); case 4:ShowPlayerDialog(playerid, 10059, DIALOG_STYLE_LIST, "Игровые привелегии", "[1] 500.000$ (20р)n[2] 1.000.000$ (40р)n[3] 3.000.000$ (120р)n[4] 5.000.000$ (160р)n[5] 10.000.000$ (320р))", "Выбрать", "Назад"); } } } case 10056: { if(response) { switch(listitem) { case 0: { if(PlayerInfo[playerid][pDonateMoney1] < 20) return SendClientMessage(playerid, COLOR_GREY, "Не достатoчно денег"); PlayerInfo[playerid][pMuted] = 0; PlayerInfo[playerid][pMuteTime] = 0; SendClientMessage(playerid, 0x6495EDFF, "{FFBF00}Вы разблокировали себе чат"); PlayerInfo[playerid][pDonateMoney1] -= 20; } case 1: { if(PlayerInfo[playerid][pDonateMoney1] < 50) return SendClientMessage(playerid, COLOR_GREY, "Не достатoчно денег"); PlayerInfo[playerid][pWarns] = 0; PlayerInfo[playerid][punWarnstime] = 0; PlayerInfo[playerid][punWarns] = 0; SendClientMessage(playerid, 0x6495EDFF, "{FFBF00}Варны с данного аккаунта успешно сняты"); PlayerInfo[playerid][pDonateMoney1] -= 50; } case 2: { if(PlayerInfo[playerid][pDonateMoney1] < 30) return SendClientMessage(playerid, COLOR_GREY, "Не достаточно денег"); PlayerInfo[playerid][pJailTime] = 0; PlayerInfo[playerid][pCheat] = 0; PlayerInfo[playerid][pJailed] = 0; SendClientMessage(playerid, 0x6495EDFF, "{FFBF00}Вы вышли из тюрьмы"); PlayerInfo[playerid][pDonateMoney1] -= 30; SpawnPlayer(playerid); } } } else { return true; } } case 10057: { if(response) { switch(listitem) { case 0: { if(PlayerInfo[playerid][pDonateMoney1] < 30) return SendClientMessage(playerid, COLOR_GREY, "Не достаточно денег"); PlayerInfo[playerid][pNarcoZavisimost] += 1000; SendClientMessage(playerid, 0x6495EDFF, "{FFBF00}Вы прибавили 1к наркозависимости"); PlayerInfo[playerid][pDonateMoney1] -= 30; } case 1: { if(PlayerInfo[playerid][pDonateMoney1] < 30) return SendClientMessage(playerid, COLOR_GREY, "Не достаточно денег"); PlayerInfo[playerid][pNarcoZavisimost] -= 1000; SendClientMessage(playerid, 0x6495EDFF, "{FFBF00}Вы уменьшили наркозависмость на 1к"); PlayerInfo[playerid][pDonateMoney1] -= 30; } case 2: { if(PlayerInfo[playerid][pDonateMoney1] < 15) return SendClientMessage(playerid, COLOR_GREY, "Не достаточно денег"); PlayerInfo[playerid][pDrugs] += 1000; SendClientMessage(playerid, 0x6495EDFF, "{FFBF00}Вы купили 1кг наркотиков"); PlayerInfo[playerid][pDonateMoney1] -= 15; } case 3: { if(PlayerInfo[playerid][pDonateMoney1] < 20) return SendClientMessage(playerid, COLOR_GREY, "Не достаточно денег"); PlayerInfo[playerid][pMats] += 1000; SendClientMessage(playerid, 0x6495EDFF, "{FFBF00}Вы купили 1к материалов"); PlayerInfo[playerid][pDonateMoney1] -= 20; } case 4: { if(PlayerInfo[playerid][pDonateMoney1] < 40) return SendClientMessage(playerid, COLOR_GREY, "Не достаточно денег"); GivePlayerWeapon(playerid,24,9999); GivePlayerWeapon(playerid,25,9999); GivePlayerWeapon(playerid,29,9999); GivePlayerWeapon(playerid,31,9999); GivePlayerWeapon(playerid,43,9999); GivePlayerWeapon(playerid,46,9999); GivePlayerWeapon(playerid,41,9999); SendClientMessage(playerid, 0x6495EDFF, "{FFBF00}Вы приобрели комплект оружия, пропадает после смерти"); PlayerInfo[playerid][pDonateMoney1] -= 40; } case 5: { if(PlayerInfo[playerid][pDonateMoney1] < 20) return SendClientMessage(playerid, COLOR_GREY, "Не достаточно денег"); PlayerInfo[playerid][pVodPrava] = 1; PlayerInfo[playerid][pFishLic] = 1; PlayerInfo[playerid][pBoatLic] = 1; PlayerInfo[playerid][pFlyLic] = 1; PlayerInfo[playerid][pGunLic] = 1; PlayerInfo[playerid][pBizLic] = 1; SendClientMessage(playerid, 0x6495EDFF, "{FFBF00}Вы купили комплект лицензий"); // PlayerInfo[playerid][pDonateMoney1] -= 20; } case 6: { if(PlayerInfo[playerid][pDonateMoney1] < 50) return SendClientMessage(playerid, COLOR_GREY, "Не достаточно денег"); PlayerInfo[playerid][pDesertEagle] = 100; PlayerInfo[playerid][pSDPistol] = 100; PlayerInfo[playerid][pMP5] = 100; PlayerInfo[playerid][pAK47] = 100; PlayerInfo[playerid][pM4] = 100; PlayerInfo[playerid][pShotGun] = 100; SendClientMessage(playerid, 0x6495EDFF, "{FFBF00}Вы улучшили навыки владения оружия до максимума"); // PlayerInfo[playerid][pDonateMoney1] -= 50; } case 7: { if(PlayerInfo[playerid][pDonateMoney1] < 20) return SendClientMessage(playerid, COLOR_GREY, "Не достаточно денег"); PlayerInfo[playerid][pZvezdi]= 0; SendClientMessage(playerid, 0x6495EDFF, "{FFBF00}Вы удалили себя из списка розыскиваемый"); // PlayerInfo[playerid][pDonateMoney1] -= 20; } case 8: { if(PlayerInfo[playerid][pDonateMoney1] < 100) return SendClientMessage(playerid, COLOR_GREY, "Не достаточно денег"); PlayerInfo[playerid][pKills] = 0; SendClientMessage(playerid, 0x6495EDFF, "{FFBF00}Вы обнулили счетчик преступлений"); // PlayerInfo[playerid][pDonateMoney1] -= 100; } case 9: { if(PlayerInfo[playerid][pDonateMoney1] < 20) return SendClientMessage(playerid, COLOR_GREY, "Не достаточно денег"); PlayerInfo[playerid][pZakonp] += 50; SendClientMessage(playerid, 0x6495EDFF, "{FFBF00}Вы стали законопослушным гражданином"); // PlayerInfo[playerid][pDonateMoney1] -= 20; } } } else { return true; } } case 10058: { if(response) { switch(listitem) { case 0: { if(PlayerInfo[playerid][pDonateMoney1] < 50) return SendClientMessage(playerid, COLOR_GREY, "Не достатoчно денег"); PlayerInfo[playerid][pDonateRank] = 1; SendClientMessage(playerid, 0x6495EDFF, "{FFBF00}Вы купили Bronze VIP статус"); PlayerInfo[playerid][pDonateMoney1] -= 50; } case 1: { if(PlayerInfo[playerid][pDonateMoney1] < 100) return SendClientMessage(playerid, COLOR_GREY, "Не достатoчно денег"); PlayerInfo[playerid][pDonateRank] = 2; SendClientMessage(playerid, 0x6495EDFF, "{FFBF00}Вы купили Silver VIP статус"); PlayerInfo[playerid][pDonateMoney1] -= 50; } case 2: { if(PlayerInfo[playerid][pDonateMoney1] < 150) return SendClientMessage(playerid, COLOR_GREY, "Не достаточно денег"); PlayerInfo[playerid][pDonateRank] = 3; SendClientMessage(playerid, 0x6495EDFF, "{FFBF00}Вы купили Gold VIP статус"); PlayerInfo[playerid][pDonateMoney1] -= 150; } } } else { return true; } } case 10059: { if(response) { switch(listitem) { case 0: { if(PlayerInfo[playerid][pDonateMoney1] < 20) return SendClientMessage(playerid, COLOR_GREY, "Не достатoчно денег"); PlayerInfo[playerid][pCash] += 500000; SendClientMessage(playerid, 0x6495EDFF, "{FFBF00}Вы купили 500к"); PlayerInfo[playerid][pDonateMoney1] -= 20; } case 1: { if(PlayerInfo[playerid][pDonateMoney1] < 40) return SendClientMessage(playerid, COLOR_GREY, "Не достатoчно денег"); PlayerInfo[playerid][pCash] += 1000000; SendClientMessage(playerid, 0x6495EDFF, "{FFBF00}Вы купили 1кк"); PlayerInfo[playerid][pDonateMoney1] -= 40; } case 2: { if(PlayerInfo[playerid][pDonateMoney1] < 120) return SendClientMessage(playerid, COLOR_GREY, "Не достаточно денег"); PlayerInfo[playerid][pCash] += 3000000; SendClientMessage(playerid, 0x6495EDFF, "{FFBF00}Вы купили 3кк"); PlayerInfo[playerid][pDonateMoney1] -= 120; } case 3: { if(PlayerInfo[playerid][pDonateMoney1] < 160) return SendClientMessage(playerid, COLOR_GREY, "Не достаточно денег"); PlayerInfo[playerid][pCash] += 5000000; SendClientMessage(playerid, 0x6495EDFF, "{FFBF00}Вы купили 5кк"); PlayerInfo[playerid][pDonateMoney1] -= 160; } case 4: { if(PlayerInfo[playerid][pDonateMoney1] < 320) return SendClientMessage(playerid, COLOR_GREY, "Не достаточно денег"); PlayerInfo[playerid][pCash] += 10000000; SendClientMessage(playerid, 0x6495EDFF, "{FFBF00}Вы купили 10кк"); PlayerInfo[playerid][pDonateMoney1] -= 320; } } } else { return true; } }Собственно все.
  3. Доброго времени суток, сейчас я расскажу вам о "Автоматическом рестарте". Я думаю многие видели на серверах в определенное время происходит рестарт сервера, при этом администрации не приходится вводить команду. Сервер делает это автоматически. Как это сделать? В Public OnPlayerUpdate: PHP код: new h, m, s; gettime(h, m, s); // Узнаем время if(h == 1 && m == 25 s == 0) // Если 1 час 25 минут (Можно заменить время на свое) { format(string, 128, "Уважаемые игроки, через 5 минут произойдет АвтоРестарт."); // Тест, отправляемый в чат SendClientMessageToAll(COLOR_WHITE, string);// Выводим сообщение в общий чат } if(h == 1 && m == 30 s == 0) // Если 1 час 30 минут и 0 секунд (Можно заменить время на свое) { SaveAccounts(); // Замените эту строчку на функции сохранения у вас в моде (С помощью вашей команды рестарта можно их найти (там они будут написаны)) format(string, 128, "Происходит автоматический рестарт сервера, подождите 10-15 секунд..."); // Тест, отправляемый в чат SendClientMessageToAll(COLOR_WHITE, string);// Выводим сообщение в общий чат SendRconCommand("gmx"); // Делаем рестарт }Автор: Я.Внимание! Секунды не убирать иначе каждую секунду будет рестарт.
  4. Начнём Ко всем forward'ам PHP код: forward LoadDip(); forward SaveDip(); Ко всем new PHP код: new TotalGzR;//rifa new TotalGzA;//actek new TotalGzB;//ballas new TotalGzG;//grove new TotalGzV;//vagos enum dInfo { dRGrove, dRAztec, dRVagos, dRBallas, // dBGrove, dBAztec, dBVagos, dBRifa, // dAGrove, dAVagos, dABallas, dARifa, // dGRifa, dGAztec, dGVagos, dGBallas, // dVGrove, dVAztec, dVBallas, dVRifa, };new Dip[1][dInfo]; PHP код: public LoadDip() { new iniFile = ini_openFile("logs/LoadDip.cfg"); ini_getInteger(iniFile,"Dip[0][dRGrove]",Dip[0][dRGrove]); ini_getInteger(iniFile,"Dip[0][dRAztec]",Dip[0][dRAztec]); ini_getInteger(iniFile,"Dip[0][dRVagos]",Dip[0][dRVagos]); ini_getInteger(iniFile,"Dip[0][dRBallas]",Dip[0][dRBallas]); // ini_getInteger(iniFile,"Dip[0][dBGrove]",Dip[0][dBGrove]); ini_getInteger(iniFile,"Dip[0][dBAztec]",Dip[0][dBAztec]); ini_getInteger(iniFile,"Dip[0][dBVagos]",Dip[0][dBVagos]); ini_getInteger(iniFile,"Dip[0][dBRifa]",Dip[0][dBRifa]); // ini_getInteger(iniFile,"Dip[0][dAGrove]",Dip[0][dAGrove]); ini_getInteger(iniFile,"Dip[0][dAVagos]",Dip[0][dAVagos]); ini_getInteger(iniFile,"Dip[0][dABallas]",Dip[0][dABallas]); ini_getInteger(iniFile,"Dip[0][dARifa]",Dip[0][dARifa]); // ini_getInteger(iniFile,"Dip[0][dGRifa]",Dip[0][dGRifa]); ini_getInteger(iniFile,"Dip[0][dGAztec]",Dip[0][dGAztec]); ini_getInteger(iniFile,"Dip[0][dGVagos]",Dip[0][dGVagos]); ini_getInteger(iniFile,"Dip[0][dGBallas]",Dip[0][dGBallas]); // ini_getInteger(iniFile,"Dip[0][dVGrove]",Dip[0][dVGrove]); ini_getInteger(iniFile,"Dip[0][dVAztec]",Dip[0][dVAztec]); ini_getInteger(iniFile,"Dip[0][dVBallas]",Dip[0][dVBallas]); ini_getInteger(iniFile,"Dip[0][dVRifa]",Dip[0][dVRifa]); ini_closeFile(iniFile); return 1; }PHP код: public SaveDip() { new iniFile = ini_openFile("logs/LoadDip.cfg"); ini_setInteger(iniFile, "Dip[0][dRGrove]",Dip[0][dRGrove]); ini_setInteger(iniFile, "Dip[0][dRAztec]",Dip[0][dRAztec]); ini_setInteger(iniFile, "Dip[0][dRVagos]",Dip[0][dRVagos]); ini_setInteger(iniFile, "Dip[0][dRBallas]",Dip[0][dRBallas]); // ini_setInteger(iniFile, "Dip[0][dBGrove]",Dip[0][dBGrove]); ini_setInteger(iniFile, "Dip[0][dBAztec]",Dip[0][dBAztec]); ini_setInteger(iniFile, "Dip[0][dBVagos]",Dip[0][dBVagos]); ini_setInteger(iniFile, "Dip[0][dBRifa]",Dip[0][dBRifa]); // ini_setInteger(iniFile, "Dip[0][dAGrove]",Dip[0][dAGrove]); ini_setInteger(iniFile, "Dip[0][dAVagos]",Dip[0][dAVagos]); ini_setInteger(iniFile, "Dip[0][dABallas]",Dip[0][dABallas]); ini_setInteger(iniFile, "Dip[0][dARifa]",Dip[0][dARifa]); // ini_setInteger(iniFile, "Dip[0][dGRifa]",Dip[0][dGRifa]); ini_setInteger(iniFile, "Dip[0][dGAztec]",Dip[0][dGAztec]); ini_setInteger(iniFile, "Dip[0][dGVagos]",Dip[0][dGVagos]); ini_setInteger(iniFile, "Dip[0][dGBallas]",Dip[0][dGBallas]); // ini_setInteger(iniFile, "Dip[0][dVGrove]",Dip[0][dVGrove]); ini_setInteger(iniFile, "Dip[0][dVAztec]",Dip[0][dVAztec]); ini_setInteger(iniFile, "Dip[0][dVBallas]",Dip[0][dVBallas]); ini_setInteger(iniFile, "Dip[0][dVRifa]",Dip[0][dVRifa]); ini_closeFile(iniFile); return 1; }В public OnGameModeInit() добавимPHP код: LoadDip(); В public PayDay() добавим PHP код: if(GZInfo[i][gFrakVlad] == 18) TotalGzR++; if(GZInfo[i][gFrakVlad] == 17) TotalGzA++; if(GZInfo[i][gFrakVlad] == 15) TotalGzG++; if(GZInfo[i][gFrakVlad] == 13) TotalGzV++; if(GZInfo[i][gFrakVlad] == 12) TotalGzB++; FracBank[0][fGrove] += TotalGzG*300; FracBank[0][fBallas] += TotalGzB*300; FracBank[0][fVagos] += TotalGzV*300; FracBank[0][fAztek] += TotalGzA*300; FracBank[0][fRifa] += TotalGzR*300; ClearTotalGz(); SaveBankFrac(); В конец мода PHP код: stock ClearTotalGz() { TotalGzR = 0;//rifa TotalGzA = 0;//actek TotalGzB = 0;//ballas TotalGzG = 0;//grove TotalGzV = 0;//vagos printr("ClearTotalGz"); } Добавим команду /ginfo PHP код: if(strcmp(cmd,"/ginfo", true)== 0) { if(IsPlayerConnected(playerid)) { if(IsAGang(playerid)) { ClearTotalGz(); for(new i =0;i<sizeof(GZInfo);i++) { if(GZInfo[i][gFrakVlad] == 18) TotalGzR++; if(GZInfo[i][gFrakVlad] == 17) TotalGzA++; if(GZInfo[i][gFrakVlad] == 15) TotalGzG++; if(GZInfo[i][gFrakVlad] == 13) TotalGzV++; if(GZInfo[i][gFrakVlad] == 12) TotalGzB++; } ////////////////////////Vagos///////////////////////////// new BallasDipV[32];//Ballas if(Dip[0][dVBallas] == 0) { BallasDipV = "{ffffff}Нейтрал"; } else if(Dip[0][dVBallas] == 1) { BallasDipV = "{00BF36}Союз"; } else if(Dip[0][dVBallas] == 2) { BallasDipV = "{C43E3E}Война"; } new GroveDipV[32];//Grove if(Dip[0][dVGrove] == 0) { GroveDipV = "{ffffff}Нейтрал"; } else if(Dip[0][dVGrove] == 1) { GroveDipV = "{00BF36}Союз"; } else if(Dip[0][dVGrove] == 2) { GroveDipV = "{C43E3E}Война"; } new AztecDipV[32];//Aztec if(Dip[0][dVAztec] == 0) { AztecDipV = "{ffffff}Нейтрал"; } else if(Dip[0][dVAztec] == 1) { AztecDipV = "{00BF36}Союз"; } else if(Dip[0][dVAztec] == 2) { AztecDipV = "{C43E3E}Война"; } new RifaDipV[32];//Rifa if(Dip[0][dVRifa] == 0) { RifaDipV = "{ffffff}Нейтрал"; } else if(Dip[0][dVRifa] == 1) { RifaDipV = "{00BF36}Союз"; } else if(Dip[0][dVRifa] == 2) { RifaDipV = "{C43E3E}Война"; } ////////////////////////Ballas////////////////////////////// new VagosDipB[32];//Vagos if(Dip[0][dBVagos] == 0) { VagosDipB = "{ffffff}Нейтрал"; } else if(Dip[0][dBVagos] == 1) { VagosDipB = "{00BF36}Союз"; } else if(Dip[0][dBVagos] == 2) { VagosDipB = "{C43E3E}Война"; } new GroveDipB[32];//Grove if(Dip[0][dBGrove] == 0) { GroveDipB = "{ffffff}Нейтрал"; } else if(Dip[0][dBGrove] == 1) { GroveDipB = "{00BF36}Союз"; } else if(Dip[0][dBGrove] == 2) { GroveDipB = "{C43E3E}Война"; } new AztecDipB[32];//Aztec if(Dip[0][dBAztec] == 0) { AztecDipB = "{ffffff}Нейтрал"; } else if(Dip[0][dBAztec] == 1) { AztecDipB = "{00BF36}Союз"; } else if(Dip[0][dBAztec] == 2) { AztecDipB = "{C43E3E}Война"; } new RifaDipB[32];//Rifa if(Dip[0][dBRifa] == 0) { RifaDipB = "{ffffff}Нейтрал"; } else if(Dip[0][dBRifa] == 1) { RifaDipB = "{00BF36}Союз"; } else if(Dip[0][dBRifa] == 2) { RifaDipB = "{C43E3E}Война"; } /////////////////////////Grove//////////////////////////// new VagosDipG[32];//Vagos if(Dip[0][dGVagos] == 0) { VagosDipG = "{ffffff}Нейтрал"; } else if(Dip[0][dGVagos] == 1) { VagosDipG = "{00BF36}Союз"; } else if(Dip[0][dGVagos] == 2) { VagosDipG = "{C43E3E}Война"; } new AztecDipG[32];//Aztec if(Dip[0][dGAztec] == 0) { AztecDipG = "{ffffff}Нейтрал"; } else if(Dip[0][dGAztec] == 1) { AztecDipG = "{00BF36}Союз"; } else if(Dip[0][dGAztec] == 2) { AztecDipG = "{C43E3E}Война"; } new BallasDipG[32];//Ballas if(Dip[0][dGBallas] == 0) { BallasDipG = "{ffffff}Нейтрал"; } else if(Dip[0][dGBallas] == 1) { BallasDipG = "{00BF36}Союз"; } else if(Dip[0][dGBallas] == 2) { BallasDipG = "{C43E3E}Война"; } new RifaDipG[32];//Rifa if(Dip[0][dGRifa] == 0) { RifaDipG = "{ffffff}Нейтрал"; } else if(Dip[0][dGRifa] == 1) { RifaDipG = "{00BF36}Союз"; } else if(Dip[0][dGRifa] == 2) { RifaDipG = "{C43E3E}Война"; } //////////////////////////Aztec////////////////////////// new BallasDipA[32];//Ballas if(Dip[0][dABallas] == 0) { BallasDipA = "{ffffff}Нейтрал"; } else if(Dip[0][dABallas] == 1) { BallasDipA = "{00BF36}Союз"; } else if(Dip[0][dABallas] == 2) { BallasDipA = "{C43E3E}Война"; } new VagosDipA[32];//Vagos if(Dip[0][dAVagos] == 0) { VagosDipA = "{ffffff}Нейтрал"; } else if(Dip[0][dAVagos] == 1) { VagosDipA = "{00BF36}Союз"; } else if(Dip[0][dAVagos] == 2) { VagosDipA = "{C43E3E}Война"; } new GroveDipA[32];//Grove if(Dip[0][dAGrove] == 0) { GroveDipA = "{ffffff}Нейтрал"; } else if(Dip[0][dAGrove] == 1) { GroveDipA = "{00BF36}Союз"; } else if(Dip[0][dAGrove] == 2) { GroveDipA = "{C43E3E}Война"; } new RifaDipA[32];//Rifa if(Dip[0][dARifa] == 0) { RifaDipA = "{ffffff}Нейтрал"; } else if(Dip[0][dARifa] == 1) { RifaDipA = "{00BF36}Союз"; } else if(Dip[0][dARifa] == 2) { RifaDipA = "{C43E3E}Война"; } /////////////////////////Rifa////////////////////////////// new BallasDipR[32];//Ballas if(Dip[0][dRBallas] == 0) { BallasDipR = "{ffffff}Нейтрал"; } else if(Dip[0][dRBallas] == 1) { BallasDipR = "{00BF36}Союз"; } else if(Dip[0][dRBallas] == 2) { BallasDipR = "{C43E3E}Война"; } new VagosDipR[32];//Vagos if(Dip[0][dRVagos] == 0) { VagosDipR = "{ffffff}Нейтрал"; } else if(Dip[0][dRVagos] == 1) { VagosDipR = "{00BF36}Союз"; } else if(Dip[0][dRVagos] == 2) { VagosDipR = "{C43E3E}Война"; } new GroveDipR[32];//Grove if(Dip[0][dRGrove] == 0) { GroveDipR = "{ffffff}Нейтрал"; } else if(Dip[0][dRGrove] == 1) { GroveDipR = "{00BF36}Союз"; } else if(Dip[0][dRGrove] == 2) { GroveDipR = "{C43E3E}Война"; } new AztecDipR[32];//Aztec if(Dip[0][dRAztec] == 0) { AztecDipR = "{ffffff}Нейтрал"; } else if(Dip[0][dRAztec] == 1) { AztecDipR = "{00BF36}Союз"; } else if(Dip[0][dRAztec] == 2) { AztecDipR = "{C43E3E}Война"; } /////////////////////////////////////////////////////// switch(PlayerInfo[playerid][pMember]) { case 13: { format(string, sizeof(string),"{ffffff}Количество контролируемых кварталов: {DBD604}%dn{ffffff}Ежедневный доход(в payday): {DBD604}$%dn{ffffff}Баланс банка банды: {DBD604}%dnn{0B9B17}Grove %sn{3582AE}Rifa %sn{A600C0}Ballas %sn{05DADA}Aztec %s",TotalGzV,TotalGzV*300,FracBank[0][fVagos],GroveDipV,RifaDipV,BallasDipV,AztecDipV); ShowPlayerDialog(playerid,1043,DIALOG_STYLE_MSGBOX,"The Vagos Gang",string, "X", ""); } case 12: { format(string, sizeof(string),"{ffffff}Количество контролируемых кварталов: {B313E7}%dn{ffffff}Ежедневный доход(в payday): {B313E7}$%dn{ffffff}Баланс банка банды: {B313E7}%dnn{0B9B17}Grove %sn{3582AE}Rifa %sn{05DADA}Aztec %sn{CCEB04}Vagos %s",TotalGzB,TotalGzB*300,FracBank[0][fBallas],GroveDipB,RifaDipB,AztecDipB,VagosDipB); ShowPlayerDialog(playerid,1042,DIALOG_STYLE_MSGBOX,"The Ballas Gang",string, "X", ""); } case 15: { format(string, sizeof(string),"{ffffff}Количество контролируемых кварталов: {009F00}%dn{ffffff}Ежедневный доход(в payday): {009F00}$%dn{ffffff}Баланс банка банды: {009F00}%dnn{05DADA}Aztec %sn{3582AE}Rifa %sn{A600C0}Ballas %sn{CCEB04}Vagos %s",TotalGzG,TotalGzG*300,FracBank[0][fGrove],AztecDipG,RifaDipG,BallasDipG,VagosDipG); ShowPlayerDialog(playerid,1045,DIALOG_STYLE_MSGBOX,"The Grove Street Gang",string, "X", ""); } case 17: { format(string, sizeof(string),"{ffffff}Количество контролируемых кварталов: {30d5c8}%dn{ffffff}Ежедневный доход(в payday): {30d5c8}$%dn{ffffff}Баланс банка банды: {30d5c8}%dnn{0B9B17}Grove %sn{3582AE}Rifa %sn{A600C0}Ballas %sn{CCEB04}Vagos %s",TotalGzA,TotalGzA*300,FracBank[0][fAztek],GroveDipA,RifaDipA,BallasDipA,VagosDipA); ShowPlayerDialog(playerid,1047,DIALOG_STYLE_MSGBOX,"The Aztecas Gang",string, "X", ""); } case 18: { format(string, sizeof(string),"{ffffff}Количество контролируемых кварталов: {2A9170}%dn{ffffff}Ежедневный доход(в payday): {2A9170}$%dn{ffffff}Баланс банка банды: {2A9170}%dnn{0B9B17}Grove %sn{05DADA}Aztec %sn{A600C0}Ballas %sn{CCEB04}Vagos %s",TotalGzR,TotalGzR*300,FracBank[0][fRifa],GroveDipR,AztecDipR,BallasDipR,VagosDipR); ShowPlayerDialog(playerid,1048,DIALOG_STYLE_MSGBOX,"The Rifa Gang Gang",string, "X", ""); } } ClearTotalGz(); } return true; } } И команду /diplomation PHP код: else if (strcmp("/diplomation", cmdtext, true) == 0){ new f = PlayerInfo[playerid][pLeader]; if(f == 12 || f == 13 || f == 15 || f == 17 || f == 18){ ShowPlayerDialog(playerid, 11100, DIALOG_STYLE_LIST, "Дипломатия","[1]-Войнаn[2]-Нейтралn[3]-Союз", "Далее", "Выход");} return true;} Далее в папке scriptfileslogs создаём документ LoadDip.cfg и вставляем в него PHP код: Dip[0][dGrove] = 0 Dip[0][dRifa] = 0 Dip[0][dBallas] = 0 Dip[0][dVagos] = 0 Dip[0][dRGrove] = 0 Dip[0][dRAztec] = 0 Dip[0][dRVagos] = 0 Dip[0][dRBallas] = 0 Dip[0][dBGrove] = 0 Dip[0][dBAztec] = 0 Dip[0][dBVagos] = 0 Dip[0][dBRifa] = 0 Dip[0][dAGrove] = 0 Dip[0][dAVagos] = 0 Dip[0][dABallas] = 0 Dip[0][dARifa] = 0 Dip[0][dGRifa] = 0 Dip[0][dGAztec] = 0 Dip[0][dGVagos] = 0 Dip[0][dGBallas] = 0 Dip[0][dVGrove] = 0 Dip[0][dVAztec] = 0 Dip[0][dVBallas] = 0 Dip[0][dVRifa] = 0Ну вот и всё! Автор: Nike_
  5. John_Smith

    Потребность сна.

    К переменным: PHP код: new psleep[MAX_PLAYERS]; // Создаёт каждому игроку счётчик Энергитических очков... forward UpdateSleep(playerid); // Для паблика апдейта очков энергии... Далее создаём publik самого апдейта очков энергии (отбираем очки энергии): PHP код: public UpdateSleep(playerid) { // Паблик апдейта очков энергии psleep[playerid]++; switch(psleep[playerid]) { case 7 .. 9: { SendClientMessage(playerid, -1, "(( Вы устали, вам нужно поспать! ))"); } case 10: { SendClientMessage(playerid, -1, "(( Вы уснули. (Проснуться - /unsleep). ))"); TogglePlayerControllable(playerid, 0); SetPVarInt(playerid,"SLEEP",gettime()+120); ApplyAnimation(playerid,"CRACK","crckidle2",4.1,0,1,1,1,1); ApplyAnimation(playerid,"CRACK","crckidle2",4.1,0,1,1,1,1); } } return 1; }в public OnGameModeInit вставляем: PHP код: SetTimer("UpdateSleep",300000,1);Создаём команду что бы проснуться. Добавляем в public OnPlayerCommandText(playerid, cmdtext[]):PHP код: if (strcmp(cmd, "/unsleep", true) == 0) { if(GetPVarInt(playerid,"SLEEP") > gettime()) { SendClientMessage(playerid,-1,"(( Вы ещё не выспались... ))"); return 1; } TogglePlayerControllable(playerid, 1); SendClientMessage(playerid,-1,"(( Вы выспались... ))"); psleep[playerid] = 0; return 1; }И ко всем командамPHP код: if (strcmp(cmd, "/sleep", true) == 0) { if (!PlayerToPoint(3.0, playerid, X,Y,Z) { // X,Y,Z - Координаты кровати SendClientMessage(playerid,-1,"(( Вы не на кровати! ))"); return 1; } if (psleep[playerid] <= 3) { SendClientMessage(playerid,-1,"(( Вы не устали, что-бы спать! ))"); return 1; } TogglePlayerControllable(playerid, 0); SendClientMessage(playerid,-1,"(( Вы легли спать... (1 минута) (Что-бы проснуться /unsleep) ))"); SetPVarInt(playerid,"SLEEP",gettime()+60); ApplyAnimation(playerid,"CRACK","crckidle2",4.1,0,1,1,1,1); ApplyAnimation(playerid,"CRACK","crckidle2",4.1,0,1,1,1,1); return 1; }Автор:SanStar
  6. Rustyk

    Делаем диалог

    Для начала , делаем команду с помощью которой будет открываться сам диалог: if(!strcmp(cmdtext, "/ваша кмд", true)) { ShowPlayerDialog(playerid, 1, DIALOG_STYLE_LIST, "Общее Название", "nНазвание1nНазвание2", "Ok", "Exit"); return 1; }((1 если что , меняем на своё , чтобы иды диалогов не совпали (выделено красным) ))Теперь делаем функцию (действие) для диалога: В public OnDialogResponse: if(dialogid == 1 && response) { switch(listitem) { case 0: { Здесь вставляем, действие Например: вы сделали команду для покупки алкоголя, здесь пишем, сколько с вас возьмут денег, анимацию, сообщение в чат. if(GetPlayerMoney(playerid) < 0) SetPlayerSpecialAction(playerid, SPECIAL_ACTION_DRINK_WINE); SendClientMessage(playerid, 0xFFFFFF, "Вы купили алкоголь"); } } return 1; } Типы диалогов: ТИП1=DIALOG_STYLE_MSGBOX - тип диалога, для вывода сообщения. ТИП2=DIALOG_STYLE_INPUT - обычно используется в системе регистрации. ТИП3=DIALOG_STYLE_LIST - Лист функций Автор: не известен.
  7. Доброго времени суток, сейчас я расскажу вам о "Автоматическом рестарте". Я думаю многие видели на серверах в определенное время происходит рестарт сервера, при этом администрации не приходится вводить команду. Сервер делает это автоматически. Как это сделать? В Public OnPlayerUpdate: PHP код: new h, m, s; gettime(h, m, s); // Узнаем время if(h == 1 && m == 25 s == 0) // Если 1 час 25 минут (Можно заменить время на свое) { format(string, 128, "Уважаемые игроки, через 5 минут произойдет АвтоРестарт."); // Тест, отправляемый в чат SendClientMessageToAll(COLOR_WHITE, string);// Выводим сообщение в общий чат } if(h == 1 && m == 30 s == 0) // Если 1 час 30 минут и 0 секунд (Можно заменить время на свое) { SaveAccounts(); // Замените эту строчку на функции сохранения у вас в моде (С помощью вашей команды рестарта можно их найти (там они будут написаны)) format(string, 128, "Происходит автоматический рестарт сервера, подождите 10-15 секунд..."); // Тест, отправляемый в чат SendClientMessageToAll(COLOR_WHITE, string);// Выводим сообщение в общий чат SendRconCommand("gmx"); // Делаем рестарт }Автор: Я.Внимание! Секунды не убирать иначе каждую секунду будет рестарт.
  8. >ТРЕБОВАНИЯ 1. Наличие сайте с FTP доступом. 2. Знание хотя бы самое маленькое php и MySQL. (не знаете вообще что это такое, не беритесь.) 1. Начнём с регистрации на сайте услуг биллинга. Заходим по адресу www.a1pay.ru В правом верхнем углу выбираем "Вход для клиентов" либо "Регистрация" войти можно через гугл, яндекс, майл... После входа выбираем "Инструменты" вверху. 2.Нажимаем "Добавить сервис" Открывается Далее указываем всё как на картинке (нажмите на неё, чтобы увеличить). "ваш_сайт" замените на адрес вашего сайта. Нажимаем добавить. 3. Теперь нажимаем "Создать кнопку" (выделено на картинке). Заполняем поля и нажимаем "Создать код кнопки" 4.Получаем код кнопки и пока оставим это. Идём в phpmyadmin вашего сайта и создаём таблицу, допустим "Donate" и создаём такие поля: 5.Теперь, непосредственно на вашем сайте создаём файлы script.php donate.php nodonate.php В файл script.php записываем следующий код (В коде изменяем Логины , Пароли , и Базу данных , больше нечего) (Эти файлы вы можете создать в программе Notepad++ и загрузить на свой сайт через FileZilla) PHP код: <? FUNCTION A1Lite_processor ($t,$secret) // не что вроде public (комментарии удали) { $params = array( 'tid' => $t['tid'], 'name' => $t['name'], 'comment' => $t['comment'], 'partner_id' => $t['partner_id'], 'service_id' => $t['service_id'], 'order_id' => $t['order_id'], 'type' => $t['type'], 'partner_income' => $t['partner_income'], 'system_income' => $t['system_income'] ); $params['check'] = md5(join('', array_values($params)) . $secret); if ($params['check'] === $t['check']) { // Действия по зачислению платежа. A1Lite - Ключи совпали. $ok=TRUE; } else { // Действия по ошибке. A1Lite - Ключи не совпали. $ok= FALSE; } return $ok; } $secret = 'KEY'; // секретный ключ который указали при регистрации на a1pay (ИЗМЕНЯЕМ ПОД СЕБЯ) if(A1Lite_processor($_POST,$secret) === TRUE) { $code = rand(1000000,10000000); //От этих чисел получаем кода $email = $_POST['email']; // получаем e-mail, указанный клиентом $text = "Здравствуйте!rnВот ваш донат код: '$code'rn Чтобы его использовать, введите в игре /donate в окошко, которое появится введите данный код."; // пишем письмо клиенту mail($email, "Пополнение средств на сервере ********", $text); // отправляем письмо клиенту $money = 100000; // Деньги которые игрок получает при вводе правильного кода (меняем под себя) $db = mysql_connect("localhost", "root", "") or die("Ошибка подключения к серверу."); //подключаемся к базе сайта (ДАННЫЕ ПИШЕМ СВОИ) mysql_select_db("SITE") or die("Не выбрана база!"); //выбираем базу mysql_query("INSERT INTO `Donate` (Code,Money,Status) VALUES ('$code','$money','1')"); // записываем всю эту конитель в базу (`Donate` 'это назавание таблицы ) } else { echo 'Not'; // здесь выведем сообщение, если игрок как попытался обмануть вас } ?> 6.Теперь заполняем файл donate.php (тут уже не только код, но и весь скелет сайта) В нужное место добавьте код: PHP код: FUNCTION A1Lite_processor ($t,$secret) { $params = array( 'tid' => $t['tid'], 'name' => $t['name'], 'comment' => $t['comment'], 'partner_id' => $t['partner_id'], 'service_id' => $t['service_id'], 'order_id' => $t['order_id'], 'type' => $t['type'], 'partner_income' => $t['partner_income'], 'system_income' => $t['system_income'], ); $params['check'] = md5(join('', array_values($params)) . $secret); if ($params['check'] === $t['check']) { $ok=TRUE; } else { // Действия по ошибке. A1Lite - Ключи не совпали. $ok= FALSE; } return $ok; } $secret = 'KEY'; // Изменяем ключ под себя if(A1Lite_processor($_GET,$secret) == TRUE) { echo 'На ваш e-mail выслан код. Введите в игре /donate в это окошко введите код, посланный вам на почту.'; // сообщение выдаваемое игроку, может быть любое, это не важно } else { echo 'Произошла ошибка.'; // игрок попытался вас надурить }7.Файл nodonate.php заполните сами, этот файл вызывается только когда на сервере произошла ошибка.Теперь идём в pawno. 8.В OnPlayerCommandText(playerid, cmdtext[]) PHP код: else if(strcmp(cmd, "/donate", true) == 0) { ShowPlayerDialog(playerid, 197, DIALOG_STYLE_INPUT, "Пополнение счёта.","Введите донат-код полученный вами на e-mail в поле ниже.", "Далее","Закрыть"); // выведем игроку окошко, куда он введёт код return 1; } В OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) PHP код: else if(dialogid == 197) { if(response) { if(!strlen(inputtext) || (!IsNumeric(inputtext))) { ShowPlayerDialog(playerid, 197, DIALOG_STYLE_INPUT, "Пополнение счёта.","Введите донат-код полученный вами на e-mail в поле ниже.", "Далее","Закрыть"); return 1; } new code = strval(inputtext); format(string, sizeof(string),"SELECT Money FROM Donate WHERE Code = '%d' AND Status = '1'",code); mysql_query(string); mysql_store_result(); if(mysql_num_rows()) { new name[24], money; mysql_fetch_row_format(name, "|"); sscanf(name, "p<|>d",money); PlayerInfo[playerid][pBankMoney] += money; // выдаем деньги в банк (как на SAMP-RP ) можно изменить типо под PlayerInfo[playerid][pDonateMoney] += dmoney format(string, sizeof(string),"Ваш счёт пополнен на %d рублей. Деньги лежат в банке.",money); SendClientMessage(playerid, COLOR_ORANGE, string); format(string, sizeof(string),"UPDATE Donate SET Status = '0' WHERE Code = '%d'",code); mysql_query(string); } else { ShowPlayerDialog(playerid, 19, DIALOG_STYLE_MSGBOX, "EROR", "Ошибка! Этот код либо не существует, либо не действителен.","Ок", "");//если код не правильный } } }Вот собственно и всё, код останется в базе данных, но не будет активен, а можно и удалять.
  9. Кирилл Сергеевич

    Помещаем IP в 4 ячейки

    stock ip2int(ip[]) { new ip[4]; unformat(ip, "p<.>a<i>[4]", ip); return (ip[0] << 24) | (ip[1] << 16) | (ip[2] << 8) | ip[3]; } stock int2ip(integer, ip[], size = sizeof ip) { format(ip, size, "%i.%i.%i.%i", ((integer >>> 24) & 255), ((integer >>> 16) & 255), ((integer >>> 8) & 255), (integer & 255)); } Автор:Владокс
  10. Я думаю название говорит само за себя. В public OnGameModeInit(): SetTimer("HS",2000,true); // раз в 2 сек. будем менять название/можно поменять! Потом создаём новый паблик: public HS(){ switch(random(3)) { case 1:SendRconCommand("hostname 1 ваше название сервера"); case 2:SendRconCommand("hostname 2 ваше название сервера"); Ко всем forward добовляем это: forward HS(); Создаём паблик public Timer(){ new var = random(5); switch (var) { case 0: SendRconCommand("mapname твоё"); // тут название Карты case 1: SendRconCommand("mapname твоё2");// тут название Карты case 2: SendRconCommand("mapname твоё3");// тут название Карты case 3: SendRconCommand("mapname твоё4");// тут название Карты case 4: SendRconCommand("mapname твоё5");// тут название Карты } new rend = random(2); switch (rend ) { case 0: SendRconCommand("gamemodetext Первое Название Мода"); case 1: SendRconCommand("gamemodetext Второе Название Мода"); }} Автор:
  11. В этом уроке я вам для примера расскажу, как сделать регистрацию в new.pwn моде и в процессе этого я Вам расскажу, что тут к чему, позже вы сможете использовать полученные знания для других целей, например для разных домов, системы банов, всякой фигни для ГФ мода и так дальше. Итак, для этого грязного мы будем использовать: 1. Denwer - через эту программу мы будем запускать и администрировать SQL сервер. Скачать 2. MySQL Plugin R6-2 - плагин для работы с базой данных. Это кинуть в папку Plugins Это кинуть в папку с сервером + в server.cfg добавить строку plugins mysql sscanf Это кинуть в папку PawnoIncludes 3. Sscanf Plugin - плагин, при помощи которого нам будет удобней и быстрей извлекать данные из результата при выборке из таблицы. Скачать! Начнём. > Устанавливаем Denwer, запускаем сервер (на рабочем столе будет ярлык "Start Denwer"). > Заходим в браузер и в адресной строке вводим "localhost" (без кавычек). > Спускаемся ниже и переходим по ссылке: http://localhost/Too...admin/index.php > Итак, вы видите phpmyadmin, сейчас мы можем управлять базой данных. > Создаём таблицу: >> Там примерно в центре есть "Create new database". >>> Я назвал свою БД "pawno", кодировку выбрал "cp1251_bin". >>> БД создана >>>> Теперь нам нужно создать таблицу для аккаунтов. Name - Название таблицы, Number of Fields - количество полей. Мы используем 3 поля, 1 - ID аккаунта, чтобы можно было его распознать в таблице, можно, конечно использовать ник, но с ИД удобней; 2 - Ник игрока, думаю тут всё ясно. 3 - Пароль игрока. >>>> Таблица создана, сейчас мы настроим наши поля. Нажимаем Save. Все нужное я выделил красным, теперь расскажу, что за что отвечает. Field - название поля; Type - тип данных, есть integer, string (VARCHAR, TEXT), float, DATE, DATETIME, TIME и т.д., в общем как в павно, тут я использую VARCHAR для стринга, и INT для ID. Length/Values - сколько "ячеек" мы выделяем для поля, для ника 24 (MAX_PLAYER_NAME), для пароля - 64. Collation - кодировка. AUTO_INCREMENT - генерирует значения для ID игрока в порядке возрастания (1, 2, 3...). >>>> Так будет выглядеть пустая, без аккаунтов таблица: > Базу данных и таблицу мы подготовили, теперь перейдем к моду. >> Сверху мода, где вы подключаете все инкдюлы добавляем эти строки: #include <a_mysql> // SQL функции. #include <sscanf2> // Извлечение данных. >> Чуть ниже задефайним парметры БД: #define SQL_HOST "localhost" // IP адресс БД. #define SQL_USER "root" // Login БД. #define SQL_DB "pawno" // Название БД. #define SQL_PASS "" // Пароль БД. >> Дефайны для ID'ов диалогов и цвета сообщений. #define DIALOG_LOGIN 1 #define DIALOG_REGISTER 2 #define DIALOG_WRONGPAS 3 #define COLOR_LIGHTRED 0xFF6347AA #define COLOR_YELLOW 0xFFFF00AA >> Создадим массив для хранения данных аккаунта. enum Variables { aID, aName[MAX_PLAYER_NAME], aPassword[64], bool: aLogged, aWrongPassword, }; new playerVariable[100][Variables]; // 100 - моё кол-во слотов для игроков на сервере. >> Создадим сток для подключения и отключения к БД. stock ConnectMySQL() { // В OnGameModeInIt вставьте ConnectMySQL(); mysql_connect(SQL_HOST, SQL_USER, SQL_DB, SQL_PASS); // Тут мы используем все данные, которые мы дефайнили. switch(mysql_ping()) { // Проверка на то, что мы подключены к БД. case 1: print("MySQL connection: alive."); // Если подключена БД. case -1: print("MySQL connection: dead."); // Если не подключена БД. } return 1; }[/background][/size][/font][/color] [color=#1C2837][font=tahoma, arial, verdana, sans-serif][size=3][background=rgb(251, 253, 254)]stock DisconnectMySQL() { // Вставьте DisconnectMySQL(); в OnGameModeExit, отключаемся от БД. mysql_close(); print("MySQL connection closed."); }[/background][/size][/font][/color] [color=#1C2837][font=tahoma, arial, verdana, sans-serif][size=3][background=rgb(251, 253, 254)]stock CheckMySQLConnection() { // Этот сток мы будем использовать для проверки, подключена ли БД перед её использованием. if(mysql_ping() == -1) mysql_reconnect(); return 1; } >> Тут у нас стоки для регистрации и логина. stock CreateAccount(playerid, password[]) { new query[128], // Для запроса. sqlname[MAX_PLAYER_NAME], sqlpassword[32]; mysql_real_escape_string(playerVariable[playerid][aName], sqlname); // Защитит от sql inject mysql_real_escape_string(password, sqlpassword); // Защитит от sql inject format(query, sizeof(query), "INSERT INTO `Accounts` (`Nickname`, `Password`) VALUE ('%s', '%s')", sqlname, sqlpassword); // Добавляем в таблицу запись. // INSERT - добавление записи в таблицу, 1. () - поля. 2. VALUE - значения этих полей. mysql_query(query); // Отправляем запрос. GetAccountID(playerid); // Узнаём ИД аккаунта, будет использоваться для сохранения и прочих операций. strmid(playerVariable[playerid][aPassword], password, 0, 64, 255); // Внедряем в массив аккаунта введенный игроком пароль. playerVariable[playerid][aLogged] = true; // Мы авторизованы. return 1; } stock LoadAccount(playerid, password[]) { new query[128], sqlpass[32], result[5+24+64], dialog[128]; mysql_real_escape_string(password, sqlpass); // Защита от SQL Inject, шифрует кодировку. format(query, sizeof(query), "SELECT * FROM `Accounts` WHERE `Password` = '%s' AND `ID` = '%i'", sqlpass, playerVariable[playerid][aID]); // SELECT * - выбрать, FROM - с таблицы, WHERE - где, пароль равен введенному паролю и ID равен иду ника человека. mysql_query(query); // Отправляем запрос. mysql_store_result(); // Смотрим записи, которые мы выбрали запросом выше. if(mysql_num_rows() == 1) { // Если выбрало только 1 аккаунт с таким паролем и ИД - успех, пароль введен верно, загружаем данные в массив. mysql_fetch_row_format(result, "|"); // split, данные в результате записываются типо "1|Snoowker|parol" sscanf(result, "p<|>is[24]s[32]", // i - ид (int), s[размер] - string, ник и пароль. playerVariable[playerid][aID], playerVariable[playerid][aName], playerVariable[playerid][aPassword]); playerVariable[playerid][aLogged] = true; mysql_free_result(); // Очищаем память. return 1; } else { // Мы ввели неверный пароль. if(playerVariable[playerid][aWrongPassword] == 4) { SendClientMessage(playerid, COLOR_LIGHTRED, "Вы 3 раза ввели неверный пароль и были отключены от сервера."); Kick(playerid); return 1; } format(dialog, sizeof(dialog), "Вы ввели неверный пароль.n У Вас осталось %i/3 попыток ввода.", 3 - playerVariable[playerid][aWrongPassword]); ShowPlayerDialog(playerid, DIALOG_WRONGPAS, DIALOG_STYLE_MSGBOX, "Ошибка.", dialog, "Повтор", "Отмена"); } return 1; } stock GetAccountID(playerid) { new query[128]; format(query, sizeof(query),"SELECT `ID` FROM `Accounts` WHERE `Nickname` = '%s'", playerVariable[playerid][aName]); // Выбираем ID, с таблицы Accounts, где Ник равен нику игрока. mysql_query(query); // Отправляем запрос. mysql_store_result(); // Видим if(mysql_num_rows() == 1) { // Если у нас в результате выбрало 1 запись, т.е. аккаунт игрока. playerVariable[playerid][aID] = mysql_fetch_int(); // ИД игрока равен номеру записи. mysql_free_result(); // Очищаем память. return playerVariable[playerid][aID]; // Возвращаем ИД игрока. } return 0; }[/background][/size][/font][/color] [color=#1C2837][font=tahoma, arial, verdana, sans-serif][size=3][background=rgb(251, 253, 254)]stock SaveAccount(playerid) { // Сохранение аккаунта. if(playerVariable[playerid][aLogged] == true) { // Проверка, если аккаунт авторизован. CheckMySQLConnection(); // Проверяем, подключена ли БД. new query[186], sqlname[MAX_PLAYER_NAME], sqlpass[64]; mysql_real_escape_string(playerVariable[playerid][aName], sqlname); mysql_real_escape_string(playerVariable[playerid][aPassword], sqlpass); format(query, sizeof(query), "UPDATE `Accounts` SET `Nickname` = '%s', `Password` = '%s' WHERE `ID` = '%i'", sqlname, sqlpass, playerVariable[playerid][aID]); mysql_query(query); // Отправляем запрос } return 1; } Создадим сток для очистки массивов при коннекте/дисконнекте. stock RemovePlayerVariables(playerid) { playerVariable[playerid][aWrongPassword] = 0; playerVariable[playerid][aID] = 0; playerVariable[playerid][aLogged] = false; return 1; } Наши диалоги: public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) { switch(dialogid) { case DIALOG_LOGIN: { // Диалог авторизации. if(!response) { // Если нажал "Отмена". SendClientMessage(playerid, COLOR_YELLOW, "* Введите /q(uit), чтобы выйти из игры."); Kick(playerid); return 1; } if(!strlen(inputtext)) { // Если поле ввода пустое. new dialog[134+MAX_PLAYER_NAME]; format(dialog, sizeof(dialog), "Добро пожаловать на Сервер!n Этот аккаунт зарегистрирован.nn Логин: %sn Введите пароль:", playerVariable[playerid][aName]); ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT, "Авторизация.", dialog, "Войти", "Отмена"); return 1; } LoadAccount(playerid, inputtext); // Пробуем его авторизовать. } case DIALOG_REGISTER: { // Диалог регистрации. if(!response) { // Если нажал "Отмена". SendClientMessage(playerid, COLOR_YELLOW, "* Введите /q(uit), чтобы выйти из игры."); Kick(playerid); return 1; } if(!strlen(inputtext) || strlen(inputtext) < 6 || strlen(inputtext) > 64) { // Если пустое поле ввода или пароль имеет меньше 6 или больше 64 символов new dialog[380+24+10]; format(dialog, sizeof(dialog), "Добро пожаловать на Сервер!n Этот аккаунт не зарегистрирован.nn Логин: %sn Введите пароль и нажмите "Далее".nn Примечания:n - Пароль чувствительный к регистру.n - Длина пароля от 6 до 32 символов.n - В пароле можно использовать символы на кириллице и латинице.n", playerVariable[playerid][aName]); ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT, "Регистрация.", dialog, "Далее", "Отмена"); return 1; } CreateAccount(playerid, inputtext); // Создаём аккаунт. playerVariable[playerid][aLogged] = true; // Авторизуем игрока. } case DIALOG_WRONGPAS: { // Если неверный пароль. if(response) { new dialog[134+MAX_PLAYER_NAME]; format(dialog, sizeof(dialog), "Добро пожаловать на Сервер!n Этот аккаунт зарегистрирован.nn Логин: %sn Введите пароль:", playerVariable[playerid][aName]); ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT, "Авторизация.", dialog, "Войти", "Отмена"); return 1; } else { // Если нажал "Отмена". Kick(playerid); return 1; } } } return 1; } >> Отключаем возможность писать в чат неавторизованному. public OnPlayerText(playerid, text[]) { if(playerVariable[playerid][aLogged] == false) return 0; return 1; } >> Наш OnPlayerConnect. public OnPlayerConnect(playerid) { RemovePlayerVariables(playerid); //------------------------------------------------------------------------------ GetPlayerName(playerid, playerVariable[playerid][aName], MAX_PLAYER_NAME); //------------------------------------------------------------------------------ if(GetAccountID(playerid)) { // Аккаунт зарегистрирован new dialog[128+MAX_PLAYER_NAME]; format(dialog, sizeof(dialog), "Добро пожаловать на Сервер!n Этот аккаунт зарегистрирован.nn Логин: %sn Введите пароль:", playerVariable[playerid][aName]); ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT, "Авторизация.", dialog, "Войти", "Отмена"); } else { // Аккаунт не зарегистрирован (return 0, в функции GetAccountID, т.е. не нашло записи с аккаунтом). new dialog[344+MAX_PLAYER_NAME]; format(dialog, sizeof(dialog), "Добро пожаловать на Сервер!n Этот аккаунт не зарегистрирован.nn Логин: %sn Введите пароль и нажмите "Далее".nn Примечания:n - Пароль чувствительный к регистру.n - Длина пароля от 6 до 32 символов.n - В пароле можно использовать символы на кириллице и латинице.n", playerVariable[playerid][aName]); ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT, "Регистрация.", dialog, "Далее", "Отмена"); } return 1; } Готово, у нас есть система регистрации. Вот так выглядит таблица с аккаунтами: Автор урока: snoowker
  12. У некоторых возникают проблемы с МТА 1.3 на GTA Криминальную Россию. Так вот, полазив по просторам интернета, вот какое решение я нашёл: Если нету МТА, то скачайте здесь Обновите DirectX, переу становитеMicrosoft Visual C++ 2008 Попробуйте установить C++ 2008 SP1 Redistributable package. Если помогло,ставьте +
  13. У некоторых возникают проблемы с МТА 1.3 на GTA Криминальную Россию. Так вот, полазив по просторам интернета, вот какое решение я нашёл: Если нету МТА, то скачайте здесь Обновите DirectX, переустановите Microsoft Visual C++ 2008 Попробуйте установить C++ 2008 SP1 Redistributable package. Сделайте также, что и на скриншоте:
  14. Vladislav334

    cmd /admins

    Здраствуйте,вот команда /admins если ошибки пишите исправлю! if (strcmp(cmd, "/admins", true) == 0) { if(IsPlayerConnected(playerid)) { if(PlayerInfo[playerid][pAdmin] < 1) return SendClientMessage(playerid, COLOR_GRAD1, "{ffffff}-."); SendClientMessage(playerid, COLOR_GREY, "{6699FF} Администрация {FFFFFF}Online"); for(new i = 0; i < MAX_PLAYERS; i++) { if(IsPlayerConnected(i)) { if(PlayerInfo[i][pAdmin] >= 0) { GetPlayerName(i, sendername, sizeof(sendername)); format(string, 256, "{6699FF}Администратор[%d]: {FFFFFF} %s {6699FF} [id: %d]",PlayerInfo[i][pAdmin], sendername, i); SendClientMessage(playerid, COLOR_GREY, string); } } } } return 1; }
  15. Egorcik

    Textdraw (By Egor4ik)

    Вот TextDraw делал себе но теперь он мне недао вот держите Ко всем new: new Text:Textdraw94; new Text:Textdraw93; В public OnPlayerConnect(playerid) TextDrawShowForPlayer(playerid,Textdraw94); TextDrawShowForPlayer(playerid,Textdraw93); В public OnGameModeInit() Textdraw94 = TextDrawCreate(500.000000, 8.000000, "Sailent RP"); TextDrawBackgroundColor(Textdraw94, -16776961); TextDrawFont(Textdraw94, 1); TextDrawLetterSize(Textdraw94, 0.800000, 1.700000); TextDrawColor(Textdraw94, -65281); TextDrawSetOutline(Textdraw94, 0); TextDrawSetProportional(Textdraw94, 1); TextDrawSetShadow(Textdraw94, 1); Textdraw93 = TextDrawCreate(0.000000, 424.000000, "Vk.Com/Sailentcrmp"); TextDrawBackgroundColor(Textdraw93, -16776961); TextDrawFont(Textdraw93, 1); TextDrawLetterSize(Textdraw93, 0.800000, 1.700000); TextDrawColor(Textdraw93, -65281); TextDrawSetOutline(Textdraw93, 0); TextDrawSetProportional(Textdraw93, 1); TextDrawSetShadow(Textdraw93, 1); Скрины
  16. artem13038

    Как установить MTA?

    Всем привет. Сегодня хочу рассказать об полной установке MTA. 1. Обновите на своём компьютере DirectX 2. Переустановите Microsoft Visual C++ 2008 3. Если нету C++ 2008 SP1 Redistributable package устанавливаем, если есть то тогда переустанавливаем. 4. MTA 1.3.2 - https://disk.yandex....z1Osbx6Gekt1J0= Разберёмся с GTA CR. Предупреждения: если вы хотите устанавливать MTA на свою GTA CR, то она должна быть без модов. 1. Установите вот эту GTA CR - http://www.torrentin...g=52:1191:22798 2. Установка MTA 1.3.2. Запускаем установочный файл. В первом выборе пути не чего не меняем. Во втором выборе пути, указываем папку с игрой. После того как MTA 1.3.2 установилась, заходим в неё. После того как она открылась заходим в Setting, в первом окне ставим везде галочки, и перезапускаим MTA. Потом нажимаем Map Editor и радуемся. Вот и всё, если будут какие то проблемы пишите в эту тему. Скачать CRMP клиент
  17. if(strcmp("/jlist", cmdtext, true, 10) == 0){new bool:players = false;for(new i = 0; i < MAX_PLAYERS; i++){if(!IsPlayerConnected(i) || IsPlayerNPC(i)) continue;if(PlayerInfo[i][pJailTime] != 0){new name[MAX_PLAYER_NAME], str[150];GetPlayerName(i, name, sizeof(name));format(str, sizeof(str), "%sn{FFFFFF}ID: {FF9D00}%d {FFFFFF}Ник: {FF9D00}%s {FFFFFF}Осталось: {FF9D00}%d", str, i, name, PlayerInfo[i][pJailTime]);ShowPlayerDialog(playerid,487,DIALOG_STYLE_LIST,"{FFFF00}Список заключенных",str,"Принято","");players = true;}}if(players == false) return SendClientMessage(playerid, -1, "Список заключенных пуст!");} В команде нужно только изменить переменную отвечающую за время в тюрьме, это pJailTime и PlayerInfo если у вас конечно не так как в команде. Скриншот:
  18. От того что все Античиты с каким то странным кодом, выкладываю свой код. Более понятный, и нету не чего лишнего. Защита самая простая, деньги отнимаются, оружие так же. stock GivePlayerMoneys(p,m) return SetPVarInt(p, "FHMoney", GetPVarInt(p, "FHMoney")+m), GivePlayerMoney(p, m); stock ResetPlayerMoneys(p) return SetPVarInt(p, "FHMoney", 0), ResetPlayerMoney(p, 0); stock GetPlayerMoneys(p) return GetPVarInt(p, "FHMoney"); stock GivePlayerWeapons(player, weapid, ammo) return Weapons[player][weapid] = 1, GivePlayerWeapon(player, weapid, ammo); Инструкция по установке: 1. Засунуть в любое место вне пабли(ка/ов) 2. Заменить стандартные функции, на данные: - GivePlayerMoney на GivePlayerMoneys - ResetPlayerMoney на ResetPlayerMoneys - GetPlayerMoney на GetPlayerMoneys - GivePlayerWeapon на GivePlayerWeapons, Ваш КЭП. Author: FanHamMer
  19. Доброго времени суток! Сегодня я вам покажу ,оптимизированный вид регистрации! И так просмотрим код : Добавим парочку переменных: new PlayerName[MAX_PLAYER_NAME]/*Имя игрока*/, dialogitem[MAX_PLAYERS]/*Переменная отвечающая за переход диалога*/, pass[64]/*Переменная сохраняющая в себя веденный пароль*/,use[256]/*Переменная отвечающая за форматирование диалогов*/,file[128]/*Переменная отвечающая за форматирования файла*/ Добавим #define: #define LOGIN_ID 10 Потом ставим в OnPlayerConnect или OnPlayerRequest ,куда пожелаете : GetPlayerName(playerid,PlayerName,26); format(file,128,"Дерриктория файла"); if(fexist(file)) format(use,sizeof(use),"{ffffff}Привет %snПройдите авторизацию",PlayerName),dialogitem[playerid] = 1; // Форматируем диалог ,даём направление! else format(use,sizeof(use),"{ffffff}Привет %snПройдите регистрацию",PlayerName),dialogitem[playerid] = 2; // Форматируем диалог ,даём направление! ShowPlayerDialog(playerid,LOGIN_ID,DIALOG_STYLE_INPUT,"Авторизация аккаунта",use,"Ввод","Отмена");// Показываем диалог Добавим диалоги*(OnPlayerDialogResponse) : if(dialogid == LOGIN_ID && dialogitem[playerid] == 1) { if(!response) SendClientMessage(playerid,-1,"Вы отменили авторизацию ,Досвидание!"),Kick(playerid); // При нажатии кнопки отмена ,кик! if(!strlen(inputtext)) ShowPlayerDialog(playerid, LOGIN_ID, DIALOG_STYLE_INPUT, "", "Вы оставили поле пустымnВведите пароль придуманный при регистрации", "Ввод", "Отмена"); // Сообщение при пустом поле strmid(pass,inputtext,0,strlen(inputtext),64);// Фрагментируем пароль Registration(dialogitem[playerid],playerid,pass); // Записываем в файлик } //----------------------------------- if(dialogid == LOGIN_ID && dialogitem[playerid] == 2) { if(!response) SendClientMessage(playerid,-1,"Вы отменили авторизацию ,Досвидание!"),Kick(playerid); // При нажатии кнопки отмена ,кик! if(!strlen(inputtext)) ShowPlayerDialog(playerid, LOGIN_ID, DIALOG_STYLE_INPUT, "", "Вы оставили поле пустымnВведите пароль придуманный при регистрации", "Ввод", "Отмена"); // Сообщение при пустом поле if(!strlen(inputtext) < 6 || !strlen(inputtext) > 15) rerurn ShowPlayerDialog(playerid,LOGIN_ID,DIALOG_STYLE_MSGBOX,"{C0C0C0}Ошибка!","{FF6347}Длина пароля должна быть от 6 до 15 символов!","Повтор",""); // strlen(inputtext) < 6 Минимальное значение ввода! strmid(pass,inputtext,0,strlen(inputtext),64); // Фрагментируем пароль Registration(dialogitem[playerid],playerid,pass); // Записываем в файл ShowPlayerDialog(playerid,LOGIN_ID,DIALOG_STYLE_INPUT,"{C0C0C0}Этап 1/2","Введите пароль для ,продолжения!","Ввод","Отмена"); // Переходим на диалог входа } Теперь в конец мода добавим : forward Registration(type,playerid,password[]); public Registration(type,playerid,password[]) { //----------------- if(type == 1) // Тип 1 : Авторизация / Login { // Сюда ставим файлы получения при авторизации } //----------------- if(type == 2) // Тип 2 : Регистрация { // Сюда ставим сохранение файлов при регистрации } return true; } Автор : Trateus
  20. Посидел пару минут на форуме, увидел уроки всякие, где один ужасный код и в комментариях темы написано что "ВАЩЕ КУРУТЯК". Ну что же, надо развивать Вас как то. Вот Вам самый обычный, и самый рабочий антифлуд. if(GetPVarInt(playerid, "ChatFlood") > gettime()) return SendClientMessage(playerid, -1, "Команды можно вводить раз в 2 секунды!") & 0; SetPVarInt(playerid, "ChatFlood", gettime() + 2); Думаю сам код описывать особо не нужно, что да как. Тут итак понятно, сам код Вы можете вставить к примеру в паблик отправки текста "OnPlayerText", или просто даже в любую команду, где нужен ограничитель по времени. Чтобы изменить время длительности, в конце кода вместо 2 поставьте своё значение. В чём плюсы данного кода? Код не занимает лишнии ячейки памяти из-за PVar's. Не используются таймеры, как любят это делать недо-скриптеры. Да и лишнего не чего нету. Если Вы хотите использовать код несколько раз в моде, то название пивоваров меняйте, чтобы значение не путалось. Author: FanHamMer
  21. Здравствуйте, уважаемые пользователи портала! Сейчас хотелось бы разобрать принцип работы часов на тексдравах. Для начала выложу скриншот того, что получится(нажмите для увеличения): Итак, приступим!С самого начала логично было бы создать сам тексдрав. Объявляем переменную: new Text:Clock;//часы Далее создадим тексдрав. Добавляем в public OnGameModeInit следующее: Clock = TextDrawCreate(549.000000, 25.000000, "00:00"); TextDrawAlignment(Clock,0); TextDrawBackgroundColor(Clock, 255); TextDrawFont(Clock, 3); TextDrawTextSize(Clock, 0.599999, 2.200000); TextDrawLetterSize(Clock,0.599999, 2.200000); TextDrawSetOutline(Clock, 1); TextDrawSetShadow(Clock, 0); TextDrawUseBox(Clock, 0); TextDrawColor(Clock, 0x33AA33AA); А теперь что? Ведь нужно сделать так, чтобы текстдрав был виден игрокам, верно? Верно. Добавляем в public OnPlayerConnect показ текстдрава: TextDrawShowForPlayer(playerid, Clock); Есть. Все отображается. Все как на картинке. НО - тексдрав будет постоянно показывать лишь 00:00 Как это исправить? Как сделать обновление? Ровно об этом принципе работы рассказать и хочется. Создадим паблик и таймер, ссылающийся на этот паблик. Повтор функции? Конечно. А иначе как будет обновляться тексдрав? Приступим. forward UpdateTime(); public UpdateTime() { new string[32]; new hour,minute,second; gettime(hour,minute,second); format(string, sizeof(string), "%02d:%02d", hour, minute); SetWorldTime( hour ); TextDrawSetString(Clock,string); } Все? Нет, не все. Ведь нету вызова функции. Сделаем его по стандарту, в public OnGameModeInit: SetTimer("UpdateTime", 1000, 1); И что у нас получится? Паблик UpdateTime будет вызываться каждую секунду и обновлять часы.Спасибо за внимание.
  22. Всем привет, сегодня мы научимся создавать ворота с открытием. Затем создадим объект к этой переменной, пусть это будет (OnGameModeInit): К OnPlayerCommandText: Теперь давайте разберём всё подробнее.
  23. Amfy

    Раздевалка

    Собственно в названии темы всё понятно. Простая раздевалка для РП сервера. if(strcmp("/clothes", cmdtext, true, 10) == 0)//Команда{if(!IsPlayerInRangeOfPoint(playerid, 1.0, X, Y, Z)) return SendClientMessage(playerid, -1, "Вы должны быть в раздевалке!");//X, Y, Z замените на свои координатыif(GetPVarInt(playerid, "CLOTHES") != 1)//Если CLOTHES не равен одному - надевает форму{SendClientMessage(playerid, -1, "Вы надели служебную форму.");//ТекстSetPVarInt(playerid, "SKIN", GetPlayerSkin(playerid));//Записывает скин в переменную SKINSetPlayerSkin(playerid, 280);//Выдает новый скинSetPVarInt(playerid, "CLOTHES", 1);//CLOTHES становится равен одномуreturn 1;//Удачно}else//Если CLOTHES равен одному - снимает форму{SendClientMessage(playerid, -1, "Вы надели гражданскую одежду.");//ТекстSetPlayerSkin(playerid, GetPVarInt(playerid, "SKIN"));//Выдает скин из переменной SKINDeletePVar(playerid, "CLOTHES");//Удаляет переменную CLOTHESreturn 1;//Удачно}} P.S Табуляция не много попортилась..Автор: Amfy
  24. Доброго времени суток. В этом уроке я расскажу как отправлять сообщение прямо с сервера. Установка функций: В начало мода/скрипта после инклудов #include <a_http> // если есть не добовлять #define MAILER_URL "путь к .php файлу" #define MAILER_MAX_MAIL_SIZE (1024) в любое место мода / скрипта. forward OnMailScriptResponse(iIndex, iResponseCode, const szData[ ]); public OnMailScriptResponse(iIndex, iResponseCode, const szData[ ]) { if(szData[ 0 ]) printf( "Mailer script says: %s", szData ); } stock SendMail(const szReceiver[ ], const szSenderMail[ ], const szSenderName[ ], const szSubject[ ], const szMessage[ ]) { new szBuffer[ MAILER_MAX_MAIL_SIZE ] = "t=", iPos = strlen( szBuffer ), iLength = strlen( szReceiver ); memcpy( szBuffer, szReceiver, iPos * 4, ( iLength + 1 ) * 4 ); StringURLEncode( szBuffer[ iPos ], 1024 - iPos ); strcat( szBuffer, "&f=" ); iPos = strlen( szBuffer ); iLength = strlen( szSenderName ); memcpy( szBuffer, szSenderName, iPos * 4, ( iLength + 1 ) * 4 ); StringURLEncode( szBuffer[ iPos ], 1024 - iPos ); strcat( szBuffer, "&n=" ); iPos = strlen( szBuffer ); iLength = strlen( szSenderMail ); memcpy( szBuffer, szSenderMail, iPos * 4, ( iLength + 1 ) * 4 ); StringURLEncode( szBuffer[ iPos ], 1024 - iPos ); strcat( szBuffer, "&s=" ); iPos = strlen( szBuffer ); iLength = strlen( szSubject ); memcpy( szBuffer, szSubject, iPos * 4, ( iLength + 1 ) * 4 ); StringURLEncode( szBuffer[ iPos ], 1024 - iPos ); strcat( szBuffer, "&m=" ); iPos = strlen( szBuffer ); iLength = strlen( szMessage ); memcpy( szBuffer, szMessage, iPos * 4, ( iLength + 1 ) * 4 ); StringURLEncode( szBuffer[ iPos ], 1024 - iPos ); HTTP( 0xD00D, HTTP_POST, MAILER_URL, szBuffer, "OnMailScriptResponse" ); } stock StringURLEncode(szString[ ], iSize = sizeof( szString )) { for ( new i = 0, l = strlen( szString ); i < l; i++ ) { switch ( szString[ i ] ) { case '!', '(', ')', ''', '*', '0' .. '9', 'A' .. 'Z', 'a' .. 'z': { continue; } case ' ': { szString[ i ] = '+'; continue; } } new s_szHex[ 8 ] ; if ( i + 3 >= iSize ) { szString[ i ] = EOS; break; } if ( l + 3 >= iSize ) szString[ iSize - 3 ] = EOS; format( s_szHex, sizeof( s_szHex ), "%02h", szString[ i ] ); szString[ i ] = '%'; strins( szString, s_szHex, i + 1, iSize ); l += 2; i += 2; if ( l > iSize - 1 ) l = iSize - 1; } } дальше ,Открываем текстовый документ и записываем в него <?php ini_set( 'html_errors', false ); if ( empty( $_POST[ 't' ] ) || empty( $_POST[ 'f' ] ) || empty( $_POST[ 'n' ] ) || empty( $_POST[ 's' ] ) || empty( $_POST[ 'm' ] ) ) die( 'Error: Missing parameters.' ); mail( $_POST[ 't' ], utf8_encode( $_POST[ 's' ] ), $_POST[ 'm' ], implode( "rn", array ( 'From: "' . addslashes( $_POST[ 'f' ] ) . "" <{$_POST[ 'n' ]}>", "Reply-To: {$_POST['f']}", "X-Mailer: PHP/" . phpversion( ), ) ) ); ?> Затем сохраняем файл в формате .php под название mail. После чего нам нужно загрузить его на хостинг. рекомендую hostinger.ru для бесплатного хранения файлов. Не забудьте в #define MAILER_URL заменить адрес загруженного файла 'mail.php' (http//: и www. писать не нужно) Например: #define MAILER_URL "адрес-сайта.ru/mail.php" Использование: SendMail("mail получателя", "mail отправителя", "ник отправителя", "темя письма", "само сообщение"); Там где "mail отправителя"" можно написать любой mail или же просто поставить знак @
×

Важная информация

Мы разместили cookie-файлы на ваше устройство, чтобы помочь сделать этот сайт лучше. Вы можете изменить свои настройки cookie-файлов, или продолжить без изменения настроек.