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

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

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

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

Мануал Динамическая система создания Актеров [MySQL R38]

SlimX

Умник
К дефайнам:
PHP:
#define MAXACTORS               1000 // Максимум актеров
#define D_DYNAMIC                  21
#define D_ACTORCREATE           22

К enum:
PHP:
new TotalActors;
enum ainfo
{
	aID,
	aSkinModel,
	Float:aFloat[4],
	Text3D:aLabel,
	aLabelText
}
new ActorInfo[MAXACTORS][ainfo];
В OnGameModeInit
PHP:
mysql_function_query(MYSQL_CONNECT, "SELECT * FROM `actors`", true, "LoadActors","");
В конец мода:

PHP:
publics: LoadActors()
{
    new currenttime = GetTickCount();
	new temp[50];
	new rows,fields;
	cache_get_data(rows, fields);
	for(new i = 0; i < rows; i++)
	{
		cache_get_field_content(i, "ID", temp),     ActorInfo[i][aID] = strval(temp);
		cache_get_field_content(i, "Skinid", temp), ActorInfo[i][aSkinModel] = strval(temp);
		cache_get_field_content(i, "Float", temp), 	sscanf(temp, "p<|>a<f>[4]", ActorInfo[i][aFloat]);
		cache_get_field_content(i, "Text", temp),   strmid(ActorInfo[i][aLabelText], temp, 0, strlen(temp), 32);

		CreateActor(ActorInfo[i][aSkinModel], ActorInfo[i][aFloat][0], ActorInfo[i][aFloat][1], ActorInfo[i][aFloat][2], ActorInfo[i][aFloat][3]);
		if(strcmp(ActorInfo[i][aLabelText], "None", true)) ActorInfo[i][aLabel] = CreateDynamic3DTextLabel(ActorInfo[i][aLabelText],0xFFFFFFFF, ActorInfo[i][aFloat][0], ActorInfo[i][aFloat][1], ActorInfo[i][aFloat][2]+1.1,3.0,INVALID_PLAYER_ID,INVALID_VEHICLE_ID,1);
		TotalActors++;
	}
	new time = GetTickCount() -currenttime;
	printf("<console log> - Актеров было загружено %i за %i мс",TotalActors,time);
	return true;
}
К командам:

PHP:
CMD:actorpos(playerid, params[])
{
	new Float:get[4];
	if(PlayerInfo[playerid][pAdmin] < 5) return true;
	//if(GetPVarInt(playerid, "CreateActor") == 2) return SendClientMessage(playerid, COLOR_GREY, "
	if(GetPVarInt(playerid, "CreateActor") != 1) return SendClientMessage(playerid, COLOR_GREY, "Вы не в режиме создания бота!");
	GetPlayerPos(playerid, get[0], get[1], get[2]);
	GetPlayerFacingAngle(playerid, get[3]);
	SetPVarFloat(playerid, "acFloatX", get[0]);
	SetPVarFloat(playerid, "acFloatY", get[1]);
	SetPVarFloat(playerid, "acFloatZ", get[2]);
	SetPVarFloat(playerid, "acRotation", get[3]);
	ShowPlayerDialog(playerid, D_ACTORCREATE, DIALOG_STYLE_INPUT, "Выбрать", "Выберите скин для персонажа и введите текст, который будет высвечиватся над ним\nNone - Нет текста\nПример: 5, Тест (Через запятую)", "Создать", "Отмена");
	return true;
}

CMD:dynamic(playerid)
{
	if(PlayerInfo[playerid][pAdmin] < 5) return true;
	ShowPlayerDialog(playerid, D_DYNAMIC, DIALOG_STYLE_LIST, "{779A3F}  Динамические функции", "[1] Создать актёров", "Выбрать", "Отмена");
	return true;
}
В OnPlayerDialogResponse

PHP:
    	case D_DYNAMIC:
    	{
    	    if(!response) return true;
			switch(listitem)
			{
			    case 0:
			    {
			        if(PlayerInfo[playerid][pAdmin] < 5) return true;
			        ShowPlayerDialog(playerid, D_ACTORCREATE, DIALOG_STYLE_LIST, "Выбрать", "Создать бота", "Выбрать", "Отмена");
			    }
			}
    	}
    	case D_ACTORCREATE:
    	{
    	    if(!response)
    	    {
        		SendClientMessage(playerid, -1, "Вы отменили создание бота");
	        	SetPVarInt(playerid, "CreateActor", 0);
				return true;
    	    }
			new skin, text[32];
			if(!response) return true;
		    if(!strlen(inputtext)) return ShowPlayerDialog(playerid, D_ACTORCREATE, DIALOG_STYLE_INPUT, "Выбрать", "Выберите скин для персонажа и введите текст, который будет высвечиваться над ним\nNone - Нет текста\nПример: 5, Тест", "Создать", "Отмена");
		    if(sscanf(inputtext, "p<,>ds[32]", skin, text)) return ShowPlayerDialog(playerid, D_ACTORCREATE, DIALOG_STYLE_INPUT, "Выбрать", "Выберите скин для персонажа и введите текст, который будет высвечиваться над ним\nNone - Нет текста\nПример: 5, Тест", "Создать", "Отмена");
    	    new query[500];
			SendClientMessage(playerid, COLOR_GREY, "Вы успешно создали бота");
			format(query, sizeof(query), "INSERT INTO `actors` (`Skinid`, `Float`, `Text`) VALUES ('%d', '%f|%f|%f|%f', '%s')", skin, GetPVarFloat(playerid, "acFloatX"), GetPVarFloat(playerid, "acFloatY"), GetPVarFloat(playerid, "acFloatZ"), GetPVarFloat(playerid, "acRotation"), text);
	  		mysql_function_query(MYSQL_CONNECT, query, false, "", "");
            mysql_function_query(MYSQL_CONNECT, "SELECT * FROM `actors`", true, "LoadActors","");
            SetPVarInt(playerid, "CreateActor", 0);
            return true;
    	}
БД:

PHP:
CREATE TABLE IF NOT EXISTS `actors` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `Skinid` int(3) NOT NULL,
  `Float` varchar(220) NOT NULL,
  `Text` varchar(32) NOT NULL,
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=0 ;
 
Последнее редактирование:
Сверху Снизу