Sign in to follow this  
Followers 0
chel38

Создание актеров | MySQL

3 posts in this topic

Простенькая система создания актеров на сервере.

Актеры добавлены в SA-MP 0.3.7 и не будет работать в более ранних версиях!

 

Использовалось

MySQL | R41-4

Streamer | version 2.0

 

Приступим. Первым делом подключим инклуды: <a_actor> <a_mysql> <streamer>, далее создадим переменные:

Спойлер

enum ActorInfo
{
	aID,
	aName[37],
	aModel,
	Float:aPosX, Float:aPosY, Float:aPosZ, Float:aPosA,
	aWorld, aInterior
}
new AI[MAX_ACTORS][ActorInfo];
new TOTALACTORS;

 

Приступим к созданию команды:

Спойлер

cmd:addactor(playerid, params[])
{
	extract params -> new model, string:name[37]; else return SendClientMessage(playerid, 0xFFFFFFFF, !"CMD | /addactor [model] [name]");
	new Float:X, Float:Y, Float:Z, Float:A, world = GetPlayerVirtualWorld(playerid), interior = GetPlayerInterior(playerid);
	GetPlayerPos(playerid, X, Y, Z), GetPlayerFacingAngle(playerid, A);
	static const qurty[] = "INSERT INTO `actors` (`Name`, `Model`, `PosX`, `PosY`, `PosZ`, `PosA`, `World`, `Inter`) VALUE ('%s', '%d', '%f', '%f', '%f', '%f', '%d', '%d')";
    new m_string[sizeof(qurty)+(-2+36)+(-2+3)+(-2+10)+(-2+8)+(-2+8)+(-2+8)+(-2+3)+(-2+4)];
	format(m_string, sizeof(m_string), qurty, name, model, X, Y, Z, A, world, interior);
	mysql_tquery(dbHandle, m_string);
	SendClientMessage(playerid, 0xA9C4E4FF, !"[addActor] Отображение актера доступно после перезапуска сервера");
	return true;
}

 

Сразу говорю мне удобней отобразить актера(ов) после рестарта сервера.

Теперь переходим в public OnGameModeInit() и вставляем туда LoadServerActors();

 

Загрузим актера(ов) на сервер:

Спойлер

stock LoadServerActors()
{
    new Cache:result = mysql_query(dbHandle, !"SELECT * FROM `actors`");
	new rows = cache_num_rows();
	if(!rows) print(!"[SERVER ACTORS] Loading error");
	else
	{
	    for(new i = 0; i != rows; i++)
	    {
	        cache_get_value_name_int(i, "ID", AI[i][aID]);
	    	cache_get_value_name(i, "Name", AI[i][aName], 37);
	    	cache_get_value_name_int(i, "Model", AI[i][aModel]);
	    	cache_get_value_name_float(i, "PosX", AI[i][aPosX]);
			cache_get_value_name_float(i, "PosY", AI[i][aPosY]);
			cache_get_value_name_float(i, "PosZ", AI[i][aPosZ]);
			cache_get_value_name_float(i, "PosA", AI[i][aPosA]);
			cache_get_value_name_int(i, "World", AI[i][aWorld]);
			cache_get_value_name_int(i, "Inter", AI[i][aInterior]);
			AI[i][aID] = CreateActor(AI[i][aModel], AI[i][aPosX], AI[i][aPosY], AI[i][aPosZ], AI[i][aPosA]);
			SetActorVirtualWorld(AI[i][aID], AI[i][aWorld]);
			CreateDynamic3DTextLabel(AI[i][aName], 0xFFFFFFFF, AI[i][aPosX], AI[i][aPosY], AI[i][aPosZ]+1.0, 8.0, INVALID_PLAYER_ID, INVALID_PLAYER_ID, 0, AI[i][aWorld], AI[i][aInterior], -1, 100.0);
	    	TOTALACTORS++;
		}
		printf("[SERVER ACTORS] Loading %d actors", TOTALACTORS);
	}
	cache_delete(result);
}

 

На этом пока все. Если будет время, добавлю более обширный функционал (настройка актера из игры: удаление, смена позиции и тд.). 

 

Так же прикрепил таблицу.

actors.zip

Edited by Gromov000

Share this post


Link to post
Share on other sites

Fix bug.

Исправлена загрузка актеров. Баг заключался в том, что загружался из базы только один актер, теперь буду загружаться все.

Share this post


Link to post
Share on other sites

А зачем ты используешь кэш? Мне вот что интересно 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0

  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content