Динамические ранги [MySQL R40].
#1

Привет всем, мой вопрос заключается в том, как можно сделать динамические ранги?
Вот что у меня получилось:
PHP Code:
enum E_PLAYER_RANG_DATA{
    
ORM_r_ormid,
    
// mysql synced
    
id,
    
rang1[32],
    
rang2[32],
    
rang3[32],
    
rang4[32],
    
rang5[32],
    
rang6[32],
    
rang7[32],
    
rang8[32],
    
rang9[32],
    
rang10[32],
}
new 
RG[1][E_PLAYER_RANG_DATA]; 
PHP Code:
mysql_tquery(MySQL:1,"SELECT * FROM `rangs`""OnMySQL_SelectRangs"); 
PHP Code:
public OnMySQL_SelectRangs()
{
    new 
TotalRanks;
    for(new 
x=0sizeof(RG); x++){
        
RG[x][_r_ormid] = orm_create("rangs");
        
orm_addvar_int(RG[x][_r_ormid],RG[x][id],"ID");
        
orm_setkey(RG[x][_r_ormid],"ID");
        
orm_addvar_string(RG[x][_r_ormid],RG[x][rang1], 32"Rang1");
        
orm_addvar_string(RG[x][_r_ormid],RG[x][rang2], 32"Rang2");
        
orm_addvar_string(RG[x][_r_ormid],RG[x][rang3], 32"Rang3");
        
orm_addvar_string(RG[x][_r_ormid],RG[x][rang4], 32"Rang4");
        
orm_addvar_string(RG[x][_r_ormid],RG[x][rang5], 32"Rang5");
        
orm_addvar_string(RG[x][_r_ormid],RG[x][rang6], 32"Rang6");
        
orm_addvar_string(RG[x][_r_ormid],RG[x][rang7], 32"Rang7");
        
orm_addvar_string(RG[x][_r_ormid],RG[x][rang8], 32"Rang8");
        
orm_addvar_string(RG[x][_r_ormid],RG[x][rang9], 32"Rang9");
        
orm_addvar_string(RG[x][_r_ormid],RG[x][rang10], 32"Rang10");
        
TotalRanks++;
    }
    
printf("Загруженно Рангов:%i       [Длительность загрузки: %d ms]",TotalRanks,cache_get_query_exec_time(MILLISECONDS));

Сделал таблицу:

Но, я не знаю как именно сделать "выгрузка" этих рангов.
PHP Code:
printf("%s"rang5); //выдает ошибку 
printf("%s",RG[0][rang5]); //тоже
//а если добавить в цикл
printf("%s",RG[x][rang5]);//В консоль появляется пустое место 
Нуждаюсь в совете, какой-то помощи, может у кого есть примеры подбного.
Спасибо.
P.S: Я еще писал на разных форумах, никто не смог помочь...
Reply
#2

Хоть это и не относится к решению твоей проблемы, но структура БД не нормализована.
Reply
#3

Quote:
Originally Posted by Mutha_X
View Post
Хоть это и не относится к решению твоей проблемы, но структура БД не нормализована.
А как лучше сделать?
Просто я впервые работаю с рангами, обычно я встречал у других подобное(т.е.в самом моде):
PHP Code:
stock Get_RangName(playerid)
{
    new 
dests[43];
    switch(
P[playerid][p_job_team]){
        case 
ORG_FBI:{
            switch(
P[playerid][p_rang]){
                case 
1dests "Стажер";
                case 
2dests "Младший агент";
                case 
3dests "Агент отдела ГНК";
                case 
4dests "Агент отдела КСО";
                case 
5dests "Старший агент";
                case 
6dests "Глава отдела ГНК";
                case 
7dests "Глава отдела КСО";
                case 
8dests "Инспектор ФБР";
                case 
9dests "Заместитель директора ФБР";
                case 
10dests "Директор ФБР";
            }
        }
    }
    return 
dests;

Вообщем, нуждаюсь в совете как всё лучше сделать...
Reply
#4

Как-то так:

PHP Code:
// fraction ranks table
id fraction_id name
// ...
// ...
#define INVALID_FRACTION_ID -1
#define INVALID_MEMBER_ID -1
#define INVALID_RANK_ID -1
#define MAX_FRACTIONS 100
#define MAX_FRACTION_PLAYERS 50
// ...
// ...
enum E_RANK_INFO {
    
ORM:_r_ormid,
    
e_r_id,
    
e_r_name[MAX_RANK_NAME],
}
static 
gRanks[MAX_RANKS][E_RANK_INFO];
// ...
// ...
enum E_FRACTION_MEMBER_INFO {
    
// ...
    
e_fm_rankid,
    
// ...
}
static 
gFractionMembers[MAX_FRACTIONS][MAX_FRACTION_PLAYERS][E_FRACTION_MEMBER_INFO];
// ...
// ...
stock FractionMember_GetRankName(fractionidmemberidname[], const size sizeof(name))
{
    new 
rankid FractionMember_GetRank(fractionidmemberid);
    if (
rankid == INVALID_RANK_ID) {
        return 
0;
    }
    
name[0] = '\0';
    
strcat(namegRanks[rankid][e_r_name], size);
    return 
1;
}
// ...
// ...
stock GetPlayerFractionRankName(playeridname[], const size sizeof(name))
{
    new
        
fractionid,
        
memberid;
    
fractionid GetPlayerFractionID(playerid);
    
memberid GetPlayerFractionMemberID(playerid);
    if (
fractionid == INVALID_FRACTION_ID || memberid == INVALID_MEMBER_ID) {
        return 
0;
    }
    return 
FractionMember_GetRankName(fractionidmemberidnamesize);
}
// ... 
Reply
#5

Quote:
Originally Posted by ZiGGi
View Post
Как-то так:

PHP Code:
// fraction ranks table
id fraction_id name
// ...
// ...
#define INVALID_FRACTION_ID -1
#define INVALID_MEMBER_ID -1
#define INVALID_RANK_ID -1
#define MAX_FRACTIONS 100
#define MAX_FRACTION_PLAYERS 50
// ...
// ...
enum E_RANK_INFO {
    
ORM:_r_ormid,
    
e_r_id,
    
e_r_name[MAX_RANK_NAME],
}
static 
gRanks[MAX_RANKS][E_RANK_INFO];
// ...
// ...
enum E_FRACTION_MEMBER_INFO {
    
// ...
    
e_fm_rankid,
    
// ...
}
static 
gFractionMembers[MAX_FRACTIONS][MAX_FRACTION_PLAYERS][E_FRACTION_MEMBER_INFO];
// ...
// ...
stock FractionMember_GetRankName(fractionidmemberidname[], const size sizeof(name))
{
    new 
rankid FractionMember_GetRank(fractionidmemberid);
    if (
rankid == INVALID_RANK_ID) {
        return 
0;
    }
    
name[0] = '\0';
    
strcat(namegRanks[rankid][e_r_name], size);
    return 
1;
}
// ...
// ...
stock GetPlayerFractionRankName(playeridname[], const size sizeof(name))
{
    new
        
fractionid,
        
memberid;
    
fractionid GetPlayerFractionID(playerid);
    
memberid GetPlayerFractionMemberID(playerid);
    if (
fractionid == INVALID_FRACTION_ID || memberid == INVALID_MEMBER_ID) {
        return 
0;
    }
    return 
FractionMember_GetRankName(fractionidmemberidnamesize);
}
// ... 
Спасибо, всё скомпилил.
Но как этим пользоваться?
оч.тупой вопрос
Reply
#6

Quote:
Originally Posted by Johhnyllll
View Post
Но как этим пользоваться?
оч.тупой вопрос
Вот вам рецепт:
  1. Выключаете компьютер.
  2. Одеваетесь.
  3. Идёте в ближайший макдональдс.
  4. Устраивайтесь на работу.
  5. Кричите: "Свободная касса!".
С такими вопросами программирование явно не для вас.
Reply
#7

Quote:
Originally Posted by Stepashka
View Post
Вот вам рецепт:
  1. Выключаете компьютер.
  2. Одеваетесь.
  3. Идёте в ближайший макдональдс.
  4. Устраивайтесь на работу.
  5. Кричите: "Свободная касса!".
С такими вопросами программирование явно не для вас.
Okay.
Reply
#8

если макдональдс не шик, скриптьте самостоятельно, без задавания вопросов на форумах, за столько лет скопилось полным полно всякого материала, пользуйтесь, все придет со временем и практикой йо
Reply
#9

Quote:
Originally Posted by Mcc
View Post
если макдональдс не шик, скриптьте самостоятельно, без задавания вопросов на форумах, за столько лет скопилось полным полно всякого материала, пользуйтесь, все придет со временем и практикой йо
Будет сток ранги.
Может в будущем переделаю на динамическую ранговую систему...
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)