Доступ к готовым решениям

Переход в группу "Пользователь"

300.00
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

Мануал Система партий Diamond Role Play

ihNNNNNify

Мастер
Пользователь
Регистрация
18 Июн 2014
Сообщения
2,553
Лучшие ответы
44
Репутация
434
Награды
2
Party System Diamond RP


В спойлере "Система партий" лишь пример (это значит что это не просто скопировать, вставить), остальное дело за вами, настройка под ваш мод.
Систему не проверял, занималься только переписыванием кода (да, это чисто обновление структуры, функций кода, и т.д), по этому если возникнут проблемы опишите в теме, или в личных сообщениях на форуме.

Команды:

  • /partylist - Показать информацию о партии
  • /party - Меню партии
  • /pobject - Создать обьект партии

PHP:
#include <a_samp>

#define MAX_PARTY 1

main() { }

enum e_player {
    party,
    name[MAX_PLAYER_NAME + 1]
}

enum e_dialogs {
    d_partyInfo,
    d_partyCreate,
    d_partyPanel,
    d_partyDescription,
    d_partyName,
}

enum e_party {
    creation_name[MAX_PLAYER_NAME + 1],
    creation_date[22],
    party_name[32],
    party_text[144],
    party_members,
}

new
    Player[MAX_PLAYERS][e_player],
    Party[MAX_PARTY][e_party],

    partyTotal,
    partyPickup,

    Text3D:textparty[MAX_PLAYERS] = {Text3D:-1, ...},
    MySQL:db_connection;

public OnGameModeInit()
{
    party_OnGameModeInit();
    return true;
}

stock party_OnGameModeInit()
{
    mysql_tquery(db_connection, "SELECT * FROM `party`", "@MySQL_onPartyLoad", "");

    partyPickup = CreatePickup(19131, 23, 2033.1632, 1346.0590, 10.8203);
    Create3DTextLabel ("{8DFDFF}Информация о партиях", -1, 2033.1632, 1346.0590, 10.8203, 20, 0);

    return 1;
}
public OnPlayerConnect(playerid)
{
    GetPlayerName(playerid, Player[playerid][name], MAX_PLAYER_NAME + 1);
    return true;
}

public OnPlayerPickUpPickup(playerid, pickupid)
{
    if (pickupid == partyPickup) {
        ShowPlayerDialog(playerid, d_partyInfo, DIALOG_STYLE_LIST, "{C697E5}Партии",
            "{DEF78C}1. {ffffff}Информация о партии\n{DEF78C}2. {ffffff}Создание партии\n{DEF78C}3. {ffffff}Список партий", "Далее", "Закрыть");
    }
    return true;
}

public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
    if (newkeys & KEY_YES && GetPVarInt(playerid, "party_list")) {
        new
            string[300],
            targetid = GetPVarInt(playerid, "party_list"),
            target_partyID = Player[targetid][party];

        format(string, sizeof string,
            "\n\n{ffffff}Партия {C47A04}%s\n\n\
            {ffffff}Состав партии: {DEF78C}%i {ffffff}участник(ов)\n\
            {ffffff}Дата образования: {DEF78C}%s\n\n\
            {ffffff}Руководитель партии: {89B1F2}%s\n\n\n\n\n\
            {89B1F2}%s",
            Party[target_partyID][party_name], Party[target_partyID][party_members], Party[target_partyID][creation_name], Party[target_partyID][party_text]);

        DeletePVar(playerid, "party_list");
        ShowPlayerDialog(playerid, 0000, DIALOG_STYLE_MSGBOX, "{DEF78C}Листовка", string, "Закрыть", "");
    }
    return 1;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    switch(dialogid) {
        case d_partyInfo: {
            if (!response) {
                return 1;
            }

            switch(listitem) {
                case 0: mysql_tquery(db_connection, "SELECT * FROM `party` LIMIT 15", "@MySQL__onPlayerPartySearch", "i", playerid);
                case 1: {
                    ShowPlayerDialog(playerid, d_partyCreate, DIALOG_STYLE_INPUT, "Создание партии",
                        "\n\n{ffffff}Стоимость создания партии: {047D12}$1000000\n\n{89B1F2}Введите название партии:\n\n", "Далее", "Закрыть");
                }
                case 2: mysql_tquery(db_connection, "SELECT * FROM `party` LIMIT 15", "@MySQL__onPlayerPartyList", "i", playerid);
            }
        }
        case d_partyCreate: {
            if (!response) {
                return 1;
            }
       
            if (!strlen(inputtext) || strlen(inputtext) > 32) {
                return SendClientMessage(playerid, -1, "Ошибка. Количество символов больше 32, или пустая строка.");
            }
           
            static const
                str_party_create[] = "{047D12}[Успешно] {ffffff}Вы успешно создали партию %s. Для управление используйте: {FFA20D}/party",
                add_party[] = "SELECT `ID` FROM `party` WHERE `ID` = '%i' LIMIT 15";

            new
                str_party[sizeof str_party_create + 32 - 2],
                party_add[sizeof add_party + 2 - 2];

             format(str_party, sizeof str_party,    str_party_create, inputtext);
            SendClientMessage(playerid, -1, str_party);

            format(party_add, sizeof party_add, add_party, partyTotal);
            mysql_tquery(db_connection, party_add, "@MySQL__onPlayerPartyCreate", "i", playerid);
       
            strmid(Party[partyTotal][party_name], inputtext, 0, strlen(inputtext));
            strmid(Party[partyTotal][creation_name], Player[playerid][name], 0, strlen(Player[playerid][name]));
        }
        case d_partyPanel: {
            if (!response) {
                return 1;
            }

            switch(listitem)
            {
                case 0: {
                    new
                        string[300],
                        partyID = Player[playerid][party];

                    format(string,    sizeof string,
                        "\n\n{ffffff}Партия {C47A04}%s\n\n\
                        {ffffff}Состав партии: {DEF78C}%i {ffffff}участник(ов)\n\
                        {ffffff}Дата образования: {DEF78C}%s\n\n\
                        {ffffff}Руководитель партии: {89B1F2}%s\n\n\n\n\n\
                        {89B1F2}%s",
                        Party[partyID][party_name], Party[partyID][party_members], Party[partyID][creation_date], Party[partyID][creation_name], Party[partyID][party_text]);
                    ShowPlayerDialog(playerid, 0000, DIALOG_STYLE_MSGBOX, "{DEF78C}Информация о партии", string, "Закрыть", "");
                }
                case 1: {
                    static const query[] = "SELECT `party_id` FROM 'accounts' WHERE `id` = '%d'";

                    new query_string[sizeof query + 3 - 2];

                    format(query_string, sizeof query_string, query, Player[playerid][party]);
                    mysql_tquery(db_connection, query_string, "@MySQL__onPlayerInParty", "");
                }
                case 2: {
                    new
                        string[30],
                        party_membersOnline;

                    foreach (new i : Player) {
                        if (Player[i][party] == Player[playerid][party]) {
                            format(string, sizeof string , "%s {A92F03}%i. {ffffff}%s\n", string, party_membersOnline + 1, Player[i][name]);
                            party_membersOnline++;
                        }
                    }

                    ShowPlayerDialog(playerid, 0000, DIALOG_STYLE_MSGBOX, "{ffffff}Состав партии {047D12}online", string, "Закрыть", "");
                }
                case 3: {
                    ShowPlayerDialog(playerid, d_partyDescription, DIALOG_STYLE_INPUT,
                        "{C697E5}Изменение описания партии", "\n\n{89B1F2}Введите новое описание партии:\n\n", "Далее", "Закрыть");
                }
                case 4: {
                    ShowPlayerDialog(playerid, d_partyName, DIALOG_STYLE_INPUT,
                        "{C697E5}Изменение названия партии", "\n\n{89B1F2}Введите новое название партии:\n\n", "Далее", "Закрыть");
                }
                case 5: {
                    Player[playerid][party] = partyTotal - 1;
                    SendClientMessage(playerid, -1, "Вы покинули партию");
                }
            }
        }
        case d_partyDescription: {
            if (!response) {
                return 1;
            }
       
            if (!strlen(inputtext) || strlen(inputtext) > 144) {
                return SendClientMessage(playerid, -1, "Ошибка. Количество символов больше 144, или пустая строка.");
            }

            static const
                str_text[] = "{047D12}[Успешно] {ffffff}Вы успешно изменили описание партии на: {C697E5}%s.",
                str_query[] = "UPDATE `party` SET `party_text`= '%s' WHERE `id` = '%d'";

            new
                str[sizeof str_text + 128 - 2].
                str_message[sizeof str_query + 144 - 2 + 3 - 2];

            format(str, sizeof str, str_text, inputtext);
            SendClientMessage(playerid, -1, str);

              format(str_message, sizeof str_message, str_query, inputtext, Player[playerid][party]);
            mysql_tquery(db_connection, str_message, "", "");
        }
        case d_partyName: {
            if (!response) {
                return 1;
            }

            if (!strlen(inputtext) || strlen(inputtext) > 32) {
                return SendClientMessage(playerid, -1, "Ошибка. Количество символов больше 32, или пустая строка.");
            }

            static const
                str_text[] = "{047D12}[Успешно] {ffffff}Вы успешно изменили название партии на: {C697E5}%s.",
                str_query[] = "UPDATE `party` SET `party_name` = '%s' WHERE `id` = '%d'";

            new
                str[sizeof str_text + 32 - 2],
                str_name[sizeof str_query + 32 - 2 + 3 - 2];

            format(str, sizeof str, str_text, inputtext);
            SendClientMessage(playerid, -1, str);
       
              format(str_name,sizeof str_name, str_query, inputtext, Player[playerid][party]);
            mysql_tquery(db_connection, str_name, "", "");
        }
    }
    return true;
}

@MySQL_onPartyLoad();
@MySQL_onPartyLoad()
{
    new row_count;
    cache_get_row_count(row_count);

    if (!row_count) {
        return print("Ошибка. Таблица партий пустая");
    }

     for(new i; i < row_count; i++) {
        if (i > MAX_PARTY - 1) {
            break;
        }

        cache_get_value_name(i, "creation_name", Party[i][creation_name], MAX_PLAYER_NAME + 1);
        cache_get_value_name(i, "creation_date", Party[i][creation_date], 22);
        cache_get_value_name(i, "party_name", Party[i][party_name], 32);
        cache_get_value_name(i, "party_text", Party[i][party_text], 144);
        partyTotal++;
    }

    printf("Загружено количество партий #%d", partyTotal);
    return 1;
}

@MySQL__onPlayerPartyCreate(playerid);
@MySQL__onPlayerPartyCreate(playerid)
{
    if (partyTotal >= (MAX_PARTY - 2)) {
        return SendClientMessage(playerid, -1, "Ошибка. Превышен лимит партий.");
    }
   
    static const str_create_party[] = "INSERT INTO `party` (`creation_name`,`party_name`)VALUES('%s','%s')";
    new create_party_str[sizeof str_create_party  + 3 + 21 + 1 + 22  + 32 + 2 - 10];

       format(create_party_str, sizeof create_party_str, str_create_party,    Party[partyTotal][creation_name], Party[partyTotal][party_name]);
    mysql_tquery(db_connection, create_party_str, "", "");

    Player[playerid][party] = partyTotal + 1;

    partyTotal++;
    return 1;
}

@MySQL__onPlayerPartySearch(playerid);
@MySQL__onPlayerPartySearch(playerid)
{
    new row_count;
    cache_get_row_count(row_count);

    if (row_count()) {
        static const str_search_party[] = "\n\n\n\n{ffffff}Зарегистрировано партий: {610BC4}%d\n\n{89B1F2}Введите название партии:\n\n\n\n";
        new search_party_str[sizeof str_search_party + 3 - 2];

        format(search_party_str, sizeof search_party_str, str_search_party, cache_num_rows());
        ShowPlayerDialog(playerid, 0000, DIALOG_STYLE_INPUT, "{DEF78C}Поиск партии", search_party_str, "Далее", "Закрыть");
    } else {
        return SendClientMessage(playerid, -1, "Ошибка. Количество зарегистрированых партий 0.");
    }

    return 1;
}

@MySQL__onPlayerPartyList(playerid);
@MySQL__onPlayerPartyList(playerid)
{
    new row_count;
    cache_get_row_count(row_count);

    if (!row_count) {
        return SendClientMessage(playerid, -1, "Ошибка. Количество зарегистрированых партий 0.");
    }

    new
        string[100],
        name_party[32];

    for(new i; i < row_count; i++) {
        cache_get_value_name(i, "party_name", name_party);
   
         format(string, sizeof string, "{ffffff}%s{A92F03}%i. \t\t\t{ffffff}%s\n", string, i + 1, name_party);
        ShowPlayerDialog(playerid, 0000, DIALOG_STYLE_LIST, "{F7E388}Список партий:", string, "Далее", "Закрыть");
    }
    return 1;
}

@MySQL__onPlayerInParty(playerid);
@MySQL__onPlayerInParty(playerid)
{
    Party[Player[playerid][party]][party_members] = cache_num_rows();

    static const str_all_members[] = "{A92F03}Всего {ffffff}%i {A92F03}членов в партии";
    new all_members[sizeof str_all_members  + 3 - 2];

    format(all_members, sizeof all_members, str_all_members, Party[Player[playerid][party]][party_members]);
    SendClientMessage(playerid, -1, all_members);
    return 1;
}

CMD:party(playerid,params[])
{
    if (!Player[playerid][party]) {
        return SendClientMessage(playerid, -1, "Ошибка. Вы не состоите в партии.");
    }

    ShowPlayerDialog(playerid, d_partyPanel, DIALOG_STYLE_LIST,
        "{DEF78C}Партия",
        "{DEF78C}1. {ffffff}Информация о партии\
        \n{DEF78C}2. {ffffff}Состав партии\
        \n{DEF78C}3. {ffffff}Состав партии {047D12}online\
        \n{DEF78C}4. {ffffff}Изменить описание партии\
        \n{DEF78C}5. {ffffff}Изменить название партии\
        \n{DEF78C}6. {BD0707}Покинуть партию",
        "Далее", "Закрыть");
    return 1;
}
CMD:pobject(playerid,params[])
{
    if (!Player[playerid][party]) {
        return SendClientMessage(playerid, -1, "Ошибка. Вы не состоите в партии.");
    }

     if(isnull(params)) {
        return SendClientMessage(playerid, -1, "{FBFF09}[Подсказка] {ffffff}/pobject <objectid (1, 3)>");
    }

    new
        Float:x,
        Float:y,
        Float:z,
        Float:angle;
   
    if (params[0] < 1 || params[0] > 3) {
        return SendClientMessage(playerid, -1, "Ошибка. Вы ввели неверное число. Ввдетие число от 1 до 3.");
    }

    if (GetPVarInt(playerid, "object_created")) {
        DestroyDynamicObject(GetPVarInt(playerid, "objectid"));
        Delete3DTextLabel(Text3D:textparty[playerid]);

        DeletePVar(playerid, "objectid");
        DeletePVar(playerid, "object_created");

        textparty[playerid] = Text3D: -1;
        SendClientMessage(playerid, -1, "Вы убрали предмет");
        return 1;
    }

    GetPlayerPos(playerid, x, y, z);
    GetPlayerFacingAngle(playerid, angle);

    x += floatsin(-angle, degrees);
    y += floatcos(-angle, degrees);

    ApplyAnimation(playerid, "BOMBER", "BOM_Plant", 2, 0, 0, 0, 0, 0);

    if (!GetPVarInt(playerid, "object_created")) {
        switch(params[0]) {
            case 1: SetPVarInt(playerid, "p_object", CreateDynamicObject(3862, x, y, z, 0, 0, 0));
            case 2: SetPVarInt(playerid, "objectid", CreateDynamicObject(1955, x, y, z, 0, 0, 0));
            case 3: SetPVarInt(playerid, "objectid", CreateDynamicObject(2773, x, y, z-0.49, 0, 0, 0));
        }
   
        new p_object_str[4];

        format(p_object_str, sizeof p_object_str, "%d", playerid);
        SendClientMessage(playerid, -1, "Вы установили предмет. Используйте {ffffff}'{610BC4}/pobject{ffffff}' ещё раз, чтобы убрать его");

        textparty[playerid] = Create3DTextLabel(p_object_str, -1, x, y, z-0.7, 30.0, 0, 0);
        SetPVarInt(playerid, "object_created", 1);
    }
    return 1;
}

CMD:partylist(playerid,params[])
{
    if (!Player[playerid][party]) {
        return SendClientMessage(playerid, -1, "Ошибка. Вы не состоите в партии");
    }

     if(isnull(params)) {
        return SendClientMessage(playerid, -1, "{FBFF09}[Подсказка] {ffffff}/partylist <playerid>");
    }

    if (GetPVarInt(params[0], "party_list")) {
        return SendClientMessage(playerid, -1, "Ошибка. Вы уже предложили взять партийную листовку.");
    }

    static const str_party_list[] = "{269BD8}Вы предложили {ffffff}%s {269BD8}взять листовку";
    new party_list_str[sizeof str_party_list  + 21 - 2];

    format(party_list_str, sizeof party_list_str, str_party_list, Player[params[0]][name]);
    SendClientMessage(playerid, -1, party_list_str);

    static const str_party_list2[] = "%s {269BD8}предложил Вам взять партийную листовку. Чтобы подтвердить нажмите {047D12}Y, {269BD8}иначе {9F0000}N";
    new party_list_str2[sizeof str_party_list2 + 21 - 2];

    format(party_list_str2, sizeof party_list_str2, str_party_list2, Player[playerid][name]);
    SendClientMessage(params[0], -1, party_list_str2);

    SetPVarInt(params[0], "party_list", playerid);
       return 1;
}
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!

PHP:
CREATE TABLE IF NOT EXISTS `party` (
  `id` INT AUTO_INCREMENT PRIMARY KEY,
  `creation_name` varchar(24),
  `creation_date` timestamp,
  `party_name` varchar(24),
  `party_text` varchar(144))
ENGINE=InnoDB DEFAULT CHARACTER SET cp1251 COLLATE cp1251_bin;
 
Последнее редактирование модератором:
Сверху Снизу