Доступ к архиву

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

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

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

Динамическая система Фракций [MySQL]

Статус
В этой теме нельзя размещать новые ответы.

Тём4ик

Умник
Динамическая система фракций


Хорошо этот мануал научит вас, как легко это сделать динамические системы для вашего сервера. Когда я начал заниматся скриптингом, это была моя мечта сделать все, динамичный, и теперь у меня хватает знаний, чтобы сделать.

Я буду делать это с нуля, с пояснениями к большинству вещей, давайте начнем
PHP:
#define MAX_FACTIONS 10 // Max amount of factions you could create/have

enum faction // Enums, way better then using 10 variables per thing needed for faction system.
{
    ID, // Faction ID
    Name[32], // Name of the faction
    Type, // What kind of faction? Criminal, law, etc
    Rank1[32], // Rank Name
    Rank2[32], // Rank Name
    Rank3[32], // Rank Name
    Rank4[32], // Rank Name
    Rank5[32] // Rank Name
};

new Factions[MAX_FACTIONS][faction], Total_Factions_Created, facid[MAX_PLAYERS]; 
// The Factions[Max_factions] is for the enum, the total factions checks how many factions
// are created and the facid is for admin things, which you will find out about later.
Теперь, давайте добавим include MySQL,SSCANF2, и ZCMD
PHP:
#include <zcmd>
#include <a_mysql>
#include <sscanf2>
Далее добавим подключения
PHP:
#define     MYSQLIP         "localhost"
#define     MYSQLUSER       "root"
#define     MYSQLDB         "test"
#define     MYSQLPASSWORD   ""
И в OnGameModeInit, добавьте эти 2 линии, которые будут получать MySQL для подключения:
PHP:
mysql_connect(MYSQLIP, MYSQLUSER, MYSQLDB, MYSQLPASSWORD);
mysql_debug(1);
Теперь добавим ко всем командам ету команду
PHP:
CMD:fcreate(playerid, params[])
{
    new string[128], query[400], fname[32];
    if(sscanf(params, "s[32]", fname)) return SendClientMessage(playerid, -1, "USAGE: /fcreate factionname");
    // GETTING ALL THE FACTIONS CREATED, THEN ADDING 1 TO MAKE THE NEW ONE
    Total_Factions_Created++;
    //=====================================================================
    
    // THIS SETS THE FACTIONS NAME TO WHATEVER YOU JUST NAMED IT, PLUS SETS THE ID FOR THE FACTION
    format(Factions[Total_Factions_Created][Name], 64, "%s", fname);
    Factions[Total_Factions_Created][ID] = Total_Factions_Created;
    //==============================================================================================
    
    // THIS IS JUST TELLING YOU CREATED A FACTION, WITH THE NAME
    format(string, sizeof(string), "You have created a faction named: %s(ID:%d).",Factions[Total_Factions_Created][Name], Factions[Total_Factions_Created][ID]);
    SendClientMessage(playerid, -1, string);
    //================================================================================================
    
    // THIS IS SETTING ALL THE FACTION NAMES, WILL BE USED LATER FOR EDITTING AROUND
    format(Factions[Total_Factions_Created][Rank1], 32, "Rank 1 - Lowest");
    format(Factions[Total_Factions_Created][Rank2], 32, "Rank 2");
    format(Factions[Total_Factions_Created][Rank3], 32, "Rank 3");
    format(Factions[Total_Factions_Created][Rank4], 32, "Rank 4");
    format(Factions[Total_Factions_Created][Rank5], 32, "Rank 5 - Leader");
    //================================================================================
    
    // THIS IS FOR SAVING ALL THE DATA INTO THE MYSQL DATABASE
    format(query, sizeof(query), "INSERT INTO `Factions` (ID, Name, Rank1, Rank2, Rank3, Rank4, Rank5) VALUES(%d,'%s','%s','%s','%s','%s','%s')",

                        Factions[Total_Factions_Created][ID], Factions[Total_Factions_Created][Name],
                        Factions[Total_Factions_Created][Rank1],Factions[Total_Factions_Created][Rank2],
                        Factions[Total_Factions_Created][Rank3],Factions[Total_Factions_Created][Rank4],
                        Factions[Total_Factions_Created][Rank5]);
    mysql_query(query);
    //=================================================================================
    return 1;
}
Объяснения там должны помочь достаточно, чтобы понять, что происходит, если не обратитесь и я объясню еще дальше, чтобы вы поняли.


Теперь мы только что прошли самую сложную часть, создавая группировки, не так уж плохо еу? Давайте создадим загрузки системы:


Поместите это в OnGameModeInit, поэтому он загружается при запуске режима игры:
PHP:
LoadFactions();
А теперь функция, которая загружает фракций, будьте осторожны, это может выглядеть очень запутанным:
PHP:
stock LoadFactions()
{
    new query[400];
    for(new id; id < MAX_FACTIONS; id++) // Goes through all the slots, looking for the data
    {
        format(query, sizeof(query), "SELECT * FROM Factions WHERE ID = %d", id); // Selects all the information from the table
        mysql_query(query);
        mysql_store_result();
        if(mysql_num_rows())
        if(mysql_fetch_row_format(query,"|"))
        {
            sscanf(query, "p<|>e<is[64]ds[32]s[32]s[32]s[32]s[32]>",Factions[id]); // SSCANF seperates the data into the variables
            Total_Factions_Created++; // Counts the factions created
        }

    }
    printf("> %d factions have been loaded from the database.", Total_Factions_Created); // Prints out the information of how many factions created
    return 1;
}
Вы могли бы бросить этот код на всем пути в нижней, она должна работать безупречно. В очередной раз, я добавил комментарии, чтобы объяснить информацию, нет действительно намного больше, чем это.



Теперь у вас есть команда, чтобы сделать фракцию .. работать, чтобы загрузить функцию .. давайте еще ​​2 команды, чтобы установить ранг, и фракция имя:
PHP:
CMD:editfname(playerid, params[])
{
    new string[128], query[400], fname[32], fid;
    
    if(sscanf(params, "ds[32]", fid,fname)) return SendClientMessage(playerid, -1, "USAGE: /editfname factionid newfactionname");
    
    // SETS THE NEW NAME
    format(Factions[fid][Name], 32, "%s", fname);
    //=============================================
    
    // TELLS YOU THAT YOU CHANGED THE NAME OF THE FACTION
    format(string, sizeof(string), "You have renamed faction id %d to %s", fid, Factions[fid][Name]);
    SendClientMessage(playerid, -1, string);
    //======================================================
    
    // UPDATES THE INFORMATION ON THE TABLE
    format(query, sizeof(query), "UPDATE Factions SET Name = '%s' WHERE ID = %d", Factions[fid][Name],fid);
    mysql_query(query);
    //======================================
    return 1;
}
Но опять же, все объяснения размещаются в виде комментариев в коде выше, задать любые вопросы, если вы застряли на нем.



Теперь просто сделать ранга имя сменный:
PHP:
CMD:editrank1(playerid, params[])
{
    new string[128], rname[32], query[400], fid;
    if(sscanf(params, "ds[32]", fid,rname)) return SendClientMessage(playerid, -1, "USAGE: /editrank1 factionid newrankname");
    
    format(Factions[fid][Rank1], 32, "%s", rname);
    format(string, sizeof(string), "You have set faction ids %d rank 1 to %s", fid, Factions[fid][Rank1]);
    
    // UPDATES THE INFORMATION ON THE TABLE
    format(query, sizeof(query), "UPDATE Factions SET Rank1 = '%s' WHERE ID = %d", Factions[fid][Rank1],fid);
    mysql_query(query);
    //======================================
    return 1;
}


CMD:editrank2(playerid, params[])
{
    new string[128], rname[32], query[400], fid;
    if(sscanf(params, "ds[32]", fid,rname)) return SendClientMessage(playerid, -1, "USAGE: /editrank2 factionid newrankname");

    format(Factions[fid][Rank2], 32, "%s", rname);
    format(string, sizeof(string), "You have set faction ids %d rank 2 to %s", fid, Factions[fid][Rank2]);

    // UPDATES THE INFORMATION ON THE TABLE
    format(query, sizeof(query), "UPDATE Factions SET Rank2 = '%s' WHERE ID = %d", Factions[fid][Rank2],fid);
    mysql_query(query);
    //======================================
    return 1;
}

CMD:editrank3(playerid, params[])
{
    new string[128], rname[32], query[400], fid;
    if(sscanf(params, "ds[32]", fid,rname)) return SendClientMessage(playerid, -1, "USAGE: /editrank3 factionid newrankname");

    format(Factions[fid][Rank3], 32, "%s", rname);
    format(string, sizeof(string), "You have set faction ids %d rank 3 to %s", fid, Factions[fid][Rank3]);

    // UPDATES THE INFORMATION ON THE TABLE
    format(query, sizeof(query), "UPDATE Factions SET Rank3 = '%s' WHERE ID = %d", Factions[fid][Rank3],fid);
    mysql_query(query);
    //======================================
    return 1;
}

CMD:editrank4(playerid, params[])
{
    new string[128], rname[32], query[400], fid;
    if(sscanf(params, "ds[32]", fid,rname)) return SendClientMessage(playerid, -1, "USAGE: /editrank4 factionid newrankname");

    format(Factions[fid][Rank4], 32, "%s", rname);
    format(string, sizeof(string), "You have set faction ids %d rank 4 to %s", fid, Factions[fid][Rank4]);

    // UPDATES THE INFORMATION ON THE TABLE
    format(query, sizeof(query), "UPDATE Factions SET Rank4 = '%s' WHERE ID = %d", Factions[fid][Rank4],fid);
    mysql_query(query);
    //======================================
    return 1;
}

CMD:editrank5(playerid, params[])
{
    new string[128], rname[32], query[400], fid;
    if(sscanf(params, "ds[32]", fid,rname)) return SendClientMessage(playerid, -1, "USAGE: /editrank5 factionid newrankname");

    format(Factions[fid][Rank5], 32, "%s", rname);
    format(string, sizeof(string), "You have set faction ids %d rank 5 to %s", fid, Factions[fid][Rank5]);

    // UPDATES THE INFORMATION ON THE TABLE
    format(query, sizeof(query), "UPDATE Factions SET Rank5 = '%s' WHERE ID = %d", Factions[fid][Rank5],fid);
    mysql_query(query);
    //======================================
    return 1;
}
Существует так много других способов, затем 5 различных команд, чтобы сделать, например, диалогов и т.д., если вы не понимаете эти коды, идти вперед и задать любые вопросы



Часть B: РЕШЕНИЙ таблицы в PHPMYADMIN / MySQL:

Первый открыть PhpMyAdmin, будь то WAMP или фактического хозяина.
Далее перейдите к базе данных вы создали для этого
Теперь создайте новый стол с 8 столбцов
Для столбцов, установить их следующим образом:

Быстрый внимание, что для ID, она не должна быть 5, 2 будет гораздо более уместно, так как вам не придется более 99 фракций, так как это только 10 определены.


Вот и все на уроке, если у вас есть другие вопросы, спросите прочь. В этом уроке я не включил игрока частично или вступления в группировки и прочее, что вам нужно сделать, что сами, если достаточно много людей просят об этом.
__________________
УРОК был взять с оффициального сайта ​
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу