PDA

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



SlimX
22.06.2016, 14:14
К дефайнам:

#define MAXACTORS 1000 // Максимум актеров
#define D_DYNAMIC 21
#define D_ACTORCREATE 22



К enum:


new TotalActors;
enum ainfo
{
aID,
aSkinModel,
Float:aFloat[4],
Text3D:aLabel,
aLabelText
}
new ActorInfo[MAXACTORS][ainfo];


В OnGameModeInit

mysql_function_query(MYSQL_CONNECT, "SELECT * FROM `actors`", true, "LoadActors","");

В конец мода:



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;
}


К командам:


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



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;
}


БД:



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 ;