Перейти к содержанию
Авторизация  
Eduard Vestornович

Как сделать систему рангов?

Рекомендуемые сообщения

Eduard Vestornович

На данный момент у меня вот такая вещь

case 1: pInfo[params[0]][pFrak][1]=5, f(frak),"УМВД"), strmid(pInfo[params[0]][pDol], "Сотрудник УМВД", 0, strlen("Сотрудник УМВД"), 35);
		case 2: pInfo[params[0]][pFrak][1]=5, f(frak),"ОМОН"), strmid(pInfo[params[0]][pDol], "Сотрудник ОМОН", 0, strlen("Сотрудник ОМОН"), 35);
		case 3: pInfo[params[0]][pFrak][1]=5, f(frak),"УГИБДД"), strmid(pInfo[params[0]][pDol], "Сотрудник УГИБДД", 0, strlen("Сотрудник УГИБДД"), 35);
		case 4: pInfo[params[0]][pFrak][1]=5, f(frak),"Правительство"), strmid(pInfo[params[0]][pDol], "Сотрудник правительства", 0, strlen("Сотрудник правительства"), 35);
		case 5: pInfo[params[0]][pFrak][1]=5, f(frak),"СПСЧ №31"), strmid(pInfo[params[0]][pDol], "Сотрудник СПСЧ №31", 0, strlen("Сотрудник СПСЧ №31"), 35);
		case 6: pInfo[params[0]][pFrak][1]=5, f(frak),"ГКБ им. Владимирского"), strmid(pInfo[params[0]][pDol], "Сотрудник ГКБ им. Владимирского", 0, strlen("Сотрудник ГКБ им. Владимирского"), 35);
		case 7: pInfo[params[0]][pFrak][1]=5, f(frak),"ТРК Нижегородск-24"), strmid(pInfo[params[0]][pDol], "Сотрудник ТРК", 0, strlen("Сотрудник ТРК"), 35);
		case 8: pInfo[params[0]][pFrak][1]=5, f(frak),"МУП АТУ"), strmid(pInfo[params[0]][pDol], "Сотрудник МУП АТУ", 0, strlen("Сотрудник МУП АТУ"), 35);

Мне нужно , чтобы писало там "Рядовой,Прапорщик и т.д"

Но когда переписываю кейс, то выдает ошибку
Кто сможет помочь?

Изменено пользователем Vestorn

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
noname_idk

@Vestorn, массивом делай.

static const gRankName[][] = 
{
	{//фракция 1
		"название 1",
		"название 2",
		"название 3"
	},
	{//фракция 2 
		"название 1",
		"название 2",
		"название 3"
	}
}; 

(в каждой фракции одинаковое количество рангов должно быть. Если есть лишние, просто пишите "" без текста).

И не занимайся ерундой с форматированием строк. format сам по себе медленный.

 

И еще один совет. В каждой строке у тебя дважды один и тот же текст присутствует. А это значит, что один и тот же текст дважды попадает в сегментную память. То есть лишний расход памяти. Да, я не буду говорить, что это очень страшно, это часто и много где можно встретить, не буду говорить, что делать так нельзя, память недорого стоит. Но все же, зачем делать то, что все равно будете исправлять, когда познаете эти нюансы. По сути своей все, что заключено в двойных кавычках, попадает в сегментную память.

Изменено пользователем Elrmrnt-Kritik

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Web

Вынести в базу и делов то. А потом динамически редактировать и настраивать как душе угодно.

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Eduard Vestornович

 

 


static const gRankName[][] = { {//фракция 1 "название 1", "название 2", "название 3" }, {//фракция 2 "название 1", "название 2", "название 3" } }; 

это понятно , мне нужно , чтобы на каждый ранг свое звание было , а не объединялось все в одно звание

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
noname_idk

@Vestorn, типа как Web сказал, с возможность редактирования? 

Изменено пользователем Elrmrnt-Kritik

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Eduard Vestornович

,да 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
noname_idk

@Vestorn, тогда в чем вопрос? Он же предложил способ реализации. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Eduard Vestornович

,  

D:\Users\Vlad\Desktop\Lore [CRMP]\exciting\exciting\gamemodes\new.pwn(27009) : error 035: argument type mismatch (argument 1)
case 1: pInfo[params[0]][pFrak][1]=5, f(frak),"УМВД"), strmid(pInfo[params[0]][pDol] = 10, "Сотрудник УМВД", 0, strlen("Сотрудник УМВД"), 35);

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
noname_idk

@Vestorn, что-то я не пойму логику кода. Ты что хочешь сделать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Eduard Vestornович

, чтобы 10 рангу выдавался данный ранг.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
noname_idk

@Vestorn

case 1:
{
	if(/*ранг игрока*/ == 10)
		strcpy(/*переменная ранга игрока*/, "Сотрудник УМВД");
} 

И куда-нибудь в мод:

stock strcpy(dest[], scr[], const size = sizeof dest)
{
	dest[0] = '\0';
	return strcat(dest, scr, size);
} 

У тебя еще для каждого игрока свои названия рангов что ли?

Почему бы просто не создать переменную под ранги:

#define MAX_FRACS 10 // максимальное количество фрак
#define MAX_RANKS 10 // максимальное количество рангов (вписываем наибольшее кол-во рангов в одной фракции)
#define MAX_LENGTH_RANK 40 // максимальная длина ранга
new gFracRank[MAX_FRAC][MAX_RANKS][MAX_LENGTH_RANK];

Далее в OnGameModeInit добавить загрузку:

mysql_tquery(/*переменная подключения к базе*/, "SELECT * FROM ranks", "LoadFracRanks");

И создать функцию, которая будет загружать ранги:

forward LoadFracRanks();
public LoadFracRanks()
{
	new rows = cache_num_rows();
	if(!rows)
		return printf("Ранги не были загружены. Записи отсутствуют в базе данных") & 0;
	
	new frac, rank;
	for(new i = 0; i < rows; i++)
	{
		cache_get_value_name_int(i, "fracid", frac);

		for(new idx = 1; idx < MAX_RANKS; idx++)
		{
			format(string, sizeof string, "rank%d", idx);
			cache_get_value_name(i, string, gFracRank[frac][idx]);
		}
	}
	printf("Ранги успешно загружены.");
        return 1;
}

Ну, и пример функции, которая бы обновляла ранг:

stock UpdateRankName(fracid, rankid, const name[])
{
	strcpy(gFracRank[fracid][rankid], name, MAX_LENGTH_RANK);

	new string[48+(-2+2)+(-2+MAX_LENGTH_RANK)+(-2+2)+1];
	format(string, sizeof string, "UPDATE ranks SET rank%d = '%s' WHERE fracid = %d", rankid, gFracRank[fracid][rankid], fracid);
	return mysql_tquery(/*переменная подключения к базе данных*/, string);
}
Изменено пользователем Elrmrnt-Kritik

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Гость
Эта тема закрыта для публикации ответов.
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

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

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