Dima_Neo
Умник
Здравствуйте,уважаемые пользователи P-I.Хочу представить вашему вниманию систему фракционных машин как на GameWorld на базе Musql .
Frac vehicles system.
Автор:MacMailler. Доработка кода Salvador_Golovorez (Dima_Neo)
Код кривоват извините :dr:
Ссылка на файлы dialog и BD
Commands:
/addfc [fracid] - Добавление транспорта.
/delfc - Удалить транспорт.
/editmode - Включения режима редактирования для администраторв 1338 уровня.
/showmodel [fracid] - Просмотр списка доступных моделей
/lmenu - Меню через которое лидер может редактировать параметры фракционных машин
- Смена ранга доступности
Установка:
- Установить плагин MySQL R5
- Установить плагин sscanf
- Указать свои данные к Базе данных.
- Залить таблицы в Базу данных.
- Залить папку dialog в scriptfiles
Ко всем #include
ко всем define
Ко всем enum
Ко всем new
В конец мода
В public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
Далее в public OnPlayerStateChange добавим
В public OnGameModeInit()
В public OnPlayerCommandText(playerid, cmdtext[])
На этом все,если что то забыл допишу
Frac vehicles system.
Автор:MacMailler. Доработка кода Salvador_Golovorez (Dima_Neo)
Код кривоват извините :dr:
Ссылка на файлы dialog и BD
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
Commands:
/addfc [fracid] - Добавление транспорта.
/delfc - Удалить транспорт.
/editmode - Включения режима редактирования для администраторв 1338 уровня.
/showmodel [fracid] - Просмотр списка доступных моделей
/lmenu - Меню через которое лидер может редактировать параметры фракционных машин
- Смена ранга доступности
Установка:
- Установить плагин MySQL R5
- Установить плагин sscanf
- Указать свои данные к Базе данных.
- Залить таблицы в Базу данных.
- Залить папку dialog в scriptfiles
Ко всем #include
PHP:
#include <sscanf2>
PHP:
#define FC:: FC_
#define bd:: mysql_
#define FC_MAX (100)
#define FC_DEF_NUMBER "V 123 FC"
#define Send SendClientMessage
#define SPD ShowPlayerDialog
#define D_IDX (8000)
#define D_LMENU (10000 + D_IDX)
#define D_ADD_FC (10100 + D_IDX)
#define D_DEL_FC (10200 + D_IDX)
#define D_ADD_MODEL (10300 + D_IDX)
#define D_SHOW_MODEL (10400 + D_IDX)
#define D_EDIT_MODEL (10500 + D_IDX)
#define scf(%0,%1,%2) format(%1,sizeof(%1),%2), strcat(%0,%1)
#define clear(%0) %0[ 0 ] = '\0'
PHP:
enum FC::ENUM
{
FC::ID[2], // id траспорта
FC::MODEL, // модель
FC::FRAC, // фракция
FC::RANK, // доступность по рангу
FC::COLOR[2], // 1 цвет, 2 цвет
FC::NUMBER[10], // номерной знак
Float: FC::R_POS[4], // 0 - x. 1 - y. 2 - z. 3 - позиция
}
PHP:
new query[1024], dialog[1024], FC::TOTAL;
new bool: FC::EDIT_MODE = false;
new FC::INFO[ FC::MAX ][ FC::ENUM ];
PHP:
stock FC::Load( )
{
new colors[10], resp_pos[64], time = GetTickCount();
format(query, sizeof(query), "SELECT * FROM `frac_vehicles` ORDER BY `frac_vehicles`.`ID` ASC");
if( bd::query(query) && bd::store_result() )
{
new rows = bd::num_rows();
if( rows )
{
if( rows > FC::MAX ) rows = FC::MAX;
for( new i; i < rows; i++ )
{
bd::fetch_row( query );
sscanf
(
query, "p<|>iiiis[10]s[10]s[64]",
FC::INFO[ i ][ FC::ID ][ 0 ],
FC::INFO[ i ][ FC::MODEL ],
FC::INFO[ i ][ FC::FRAC ],
FC::INFO[ i ][ FC::RANK ],
colors,
FC::INFO[ i ][ FC::NUMBER ],
resp_pos
);
sscanf(colors, "p<,>a<i>[2]", FC::INFO[ i ][ FC::COLOR ]);
sscanf(resp_pos, "p<,>a<f>[4]", FC::INFO[ i ][ FC::R_POS ]);
FC::INFO[ i ][ FC::ID ][ 1 ] =
CreateVehicle
(
FC::INFO[ i ][ FC::MODEL ],
FC::INFO[ i ][ FC::R_POS ][ 0 ],
FC::INFO[ i ][ FC::R_POS ][ 1 ],
FC::INFO[ i ][ FC::R_POS ][ 2 ],
FC::INFO[ i ][ FC::R_POS ][ 3 ],
FC::INFO[ i ][ FC::COLOR ][ 0 ],
FC::INFO[ i ][ FC::COLOR ][ 1 ],
1200
);
if( !strlen( FC::INFO[ i ][ FC::NUMBER ] ) )
strmid(FC::INFO[ i ][ FC::NUMBER ], FC::DEF_NUMBER, 0, strlen(FC::DEF_NUMBER), 255);
SetVehicleNumberPlate(FC::INFO[ i ][ FC::ID ][ 1 ], FC::INFO[ i ][ FC::NUMBER ]);
FC::TOTAL ++;
}
bd::free_result();
printf("FC::Load() : vehicle loaded %i; (Time: %i ticks)", FC::TOTAL, GetTickCount()-time);
}
else printf("FC::Load() : returned rows %i; (Time: %i ticks)", rows, GetTickCount()-time);
}
else printf("FC::Load() : table not found! (Time: %i; ticks)", GetTickCount()-time);
return;
}
/** обновляет данные в бд */
stock FC::Update( idx )
{
if( idx >= 0 && idx < sizeof(FC::INFO) )
{
new handle[64]; clear( query );
scf( query, handle, "UPDATE `frac_vehicles` SET ");
scf( query, handle, "`model` = '%i',", FC::INFO[ idx ][ FC::MODEL ]);
scf( query, handle, "`frac` = '%i',", FC::INFO[ idx ][ FC::FRAC ]);
scf( query, handle, "`colors` = '%i,%i',", FC::INFO[ idx ][ FC::COLOR ][ 0 ], FC::INFO[ idx ][ FC::COLOR ][ 1 ]);
scf( query, handle, "`number` = '%s',", FC::INFO[ idx ][ FC::NUMBER ]);
scf( query, handle, "`resp_pos` = '%.3f,%.3f,%.3f,%.3f' ",\
FC::INFO[ idx ][ FC::R_POS ][ 0 ], FC::INFO[ idx ][ FC::R_POS ][ 1 ], FC::INFO[ idx ][ FC::R_POS ][ 2 ], FC::INFO[ idx ][ FC::R_POS ][ 3 ]);
scf( query, handle, "WHERE `ID` = '%i'", FC::INFO[ idx ][ FC::ID ][ 0 ]);
if( bd::query(query) ) return 1;
}
return 0;
}
/** пересоздает машину*/
stock FC::RecreateVehicle( idx )
{
if( idx >= 0 && idx < sizeof(FC::INFO) )
{
DestroyVehicle( FC::INFO[ idx ][ FC::ID ][ 1 ] );
FC::INFO[ idx ][ FC::ID ][ 1 ] =
CreateVehicle
(
FC::INFO[ idx ][ FC::MODEL ],
FC::INFO[ idx ][ FC::R_POS ][ 0 ],
FC::INFO[ idx ][ FC::R_POS ][ 1 ],
FC::INFO[ idx ][ FC::R_POS ][ 2 ],
FC::INFO[ idx ][ FC::R_POS ][ 3 ],
FC::INFO[ idx ][ FC::COLOR ][ 0 ],
FC::INFO[ idx ][ FC::COLOR ][ 1 ],
1200
);
return 1;
}
return 0;
}
/** удаляет машину из бд */
stock FC::Delete( idx )
{
if( idx >= 0 && idx < sizeof(FC::INFO) )
{
format(query, sizeof(query), "DELETE FROM `frac_vehicles` WHERE `ID` = '%i'", FC::INFO[ idx ][ FC::ID ][ 0 ]);
if( bd::query(query) && bd::free_result() ) return 1;
}
return 0;
}
/** показывает список доступных моделей ТС */
stock FC::ShowModel( playerid, fracid, dialogid )
{
format(query, sizeof(query), "SELECT `model_id` FROM `frac_models` WHERE `frac_id` = '%i'", fracid);
if( bd::query(query) && bd::store_result() )
{
new rows = bd::num_rows();
if( rows )
{
new model_id;
clear( dialog );
for( new i; i < rows; i++)
{
bd::fetch_row( query );
sscanf( query, "i", model_id );
scf( dialog, query, "%s\n", PlayerVehicle[ model_id-400 ], model_id );
}
if( PlayerInfo[playerid][pAdmin] >= 1338 && dialogid != D_ADD_FC && dialogid != D_LMENU+7 ) strcat( dialog, "Äîáàâèòü");
SPD( playerid, dialogid, DIALOG_STYLE_LIST, "Frac Models", dialog, "Enter", "Cancle");
}
else
{
if( PlayerInfo[playerid][pAdmin] >= 1338 && dialogid != D_ADD_FC && dialogid != D_LMENU+7 )
SPD( playerid, dialogid, 2, "Frac Models", "Добавить", "Enter", "Cancle");
else
SPD( playerid, dialogid, 0, "Frac Models", "Нет моделей для выбора!", "ok", "");
}
SetPVarInt( playerid, "SelectFrac", fracid );
}
return;
}
stock FC::GetInfo(vehicleid, &fc_frac = 0, &fc_rank = 0, &fc_idx = 0)
{
for(new i; i < FC::TOTAL; i++)
{
if( FC::INFO[ i ][ FC::ID ][ 1 ] == vehicleid )
{
fc_idx = i;
fc_frac = FC::INFO[ i ][ FC::FRAC ];
fc_rank = FC::INFO[ i ][ FC::RANK ];
return 1;
}
}
return 0;
}
stock FC::IsEditMode( playerid )
{
if( PlayerInfo[playerid][pAdmin] >= 1338 && FC::EDIT_MODE) return true;
return false;
}
stock FC::IsThereModel( frac_id, model_id )
{
format(query, sizeof(query), "SELECT * FROM `frac_models` WHERE `frac_id` = '%i' AND `model_id` = '%i'", frac_id, model_id);
if( bd::query(query) && bd::store_result() ) if( bd::num_rows() ) return 1;
return 0;
}
SSCANF:vehicle(string[])
{
// This function is VERY basic, needs VASTLY improving to detect variations.
if ('0' <= string[0] <= '9')
{
new ret = strval(string);
if (400 <= ret <= 611) return ret;
}
else
{
for(new i; i < sizeof(PlayerVehicle); i++)
if( !strcmp(string, PlayerVehicle[i], true) ) return (i + 400);
}
return -1;
}
PHP:
switch( dialogid )
{
case D_LMENU :
{
if( response )
{
switch( listitem )
{
case 0 : SPD(playerid, D_LMENU+1, 0, "L-Menu: Смена цвета", "Какой цвет хотите поменять?", "[-1-]", "[-2-]");
case 1 : SPD(playerid, D_LMENU+4, 1, "L-Menu: Смена ранга", "Введите ранг с которого будет доступно машина.", "Enter", "Back");
case 2 : SPD(playerid, D_LMENU+5, 1, "L-Menu: Смена номера", "Введите новый номер(макс 8 символов)", "Enter", "Back");
case 3 : SPD(playerid, D_LMENU+6, 0, "L-Menu: смена места спавна", "Смените места спавно этого авто?", "Enter", "Back");
case 4 :
{
if( FC::IsEditMode( playerid ) )
{
new idx, v_frac, v_rank, carid = GetPlayerVehicleID(playerid);
if( FC::GetInfo( carid, v_frac, v_rank, idx ) ) FC::ShowModel( playerid, v_frac, D_LMENU+7 );
}
else FC::ShowModel( playerid, GetFracID( playerid ), D_LMENU+7 );
}
}
}
return 1;
}
case D_LMENU+1 :
{
if( response )
{
LoadText("dialog/lmenu/colors.lst", dialog);
SPD(playerid, D_LMENU+2, 1, "L-Menu: Смена цвета", dialog, "Enter", "Cancel");
}
else
{
LoadText("dialog/lmenu/colors.lst", dialog);
SPD(playerid, D_LMENU+3, 1, "L-Menu: Смена цвета", dialog, "Enter", "Cancel");
}
return 1;
}
case D_LMENU+2 :
{
if( response )
{
if( sscanf(inputtext, "i", inputtext[0]) )
{
Send(playerid, COLOR_GREY, "* Вы оставили поле ввода пустым!");
LoadText("dialog/lmenu/colors.lst", dialog);
SPD(playerid, D_LMENU+2, 1, "L-Menu: Смена цвета", dialog, "Enter", "Cancel");
}
else if( inputtext[0] < 0 || inputtext[0] > 126 )
{
Send(playerid, COLOR_GREY, "* Вы ввели не правильный ID цвета!");
LoadText("dialog/lmenu/colors.lst", dialog);
SPD(playerid, D_LMENU+2, 1, "L-Menu: Смена цвета", dialog, "Enter", "Cancel");
}
else
{
new idx, v_frac, v_rank, carid = GetPlayerVehicleID(playerid);
if( FC::GetInfo( carid, v_frac, v_rank, idx ) )
{
if( v_frac == PlayerInfo[playerid][pLeader] && !FC::IsEditMode( playerid ) )
{
new Float: posx, Float: posy, Float: posz, Float: posa;
GetVehiclePos(carid, posx, posy, posz); GetVehicleZAngle(carid, posa);
FC::INFO[ idx ][ FC::COLOR ][ 0 ] = inputtext[0];
FC::RecreateVehicle( idx ); FC::Update( idx );
SetVehiclePos(FC::INFO[ idx ][ FC::ID ][ 1 ], posx, posy, posz); SetVehicleZAngle(carid, posa);
SetVehicleNumberPlate(FC::INFO[ idx ][ FC::ID ][ 1 ], FC::INFO[ idx ][ FC::NUMBER ]);
PutPlayerInVehicle(playerid, FC::INFO[ idx ][ FC::ID ][ 1 ], 0);
format(string, sizeof(string),"* Цвет машины был изменен: %d", inputtext[0]);
Send(playerid, COLOR_WHITE, string);
}
else Send(playerid, -1, "* Вы не лидер!");
}
}
}
return 1;
}
case D_LMENU+3 :
{
if( response )
{
if( sscanf(inputtext, "i", inputtext[0]) )
{
Send(playerid, COLOR_GREY, "* Вы оставили поле ввода пустым!");
LoadText("dialog/lmenu/colors.lst", dialog);
SPD(playerid, D_LMENU+3, 1, "L-Menu: Смена цвета", dialog, "Enter", "Cancel");
}
else if( inputtext[0] < 0 || inputtext[0] > 126 )
{
Send(playerid, COLOR_GREY, "* Вы ввели не правильный ID цвета!");
LoadText("dialog/lmenu/colors.lst", dialog);
SPD(playerid, D_LMENU+3, 1, "L-Menu: Смена цвета", dialog, "Enter", "Cancel");
}
else
{
new idx, v_frac, v_rank, carid = GetPlayerVehicleID(playerid);
if( FC::GetInfo( carid,v_frac, v_rank, idx ) )
{
if( v_frac == PlayerInfo[playerid][pLeader] && !FC::IsEditMode( playerid ) )
{
new Float: posx, Float: posy, Float: posz, Float: posa;
GetVehiclePos(carid, posx, posy, posz); GetVehicleZAngle(carid, posa);
FC::INFO[ idx ][ FC::COLOR ][ 1 ] = inputtext[0];
FC::RecreateVehicle( idx ); FC::Update( idx );
SetVehiclePos(FC::INFO[ idx ][ FC::ID ][ 1 ], posx, posy, posz); SetVehicleZAngle(carid, posa);
SetVehicleNumberPlate(FC::INFO[ idx ][ FC::ID ][ 1 ], FC::INFO[ idx ][ FC::NUMBER ]);
PutPlayerInVehicle(playerid, FC::INFO[ idx ][ FC::ID ][ 1 ], 0);
format(string, sizeof(string),"* Цвет машины был изменен: %d", inputtext[0]);
Send(playerid, COLOR_WHITE, string);
}
else Send(playerid, -1, "* Вы не лидер!");
}
}
}
return 1;
}
case D_LMENU+4 :
{
if( response )
{
if( sscanf(inputtext, "i", inputtext[0]) )
{
SPD(playerid, D_LMENU+4, DIALOG_STYLE_INPUT, "L-Menu: Смена ранга", "Введите ранг с которого будет доступна машина.", "Enter", "Back");
}
else
{
new idx, v_frac, v_rank, carid = GetPlayerVehicleID(playerid);
if( FC::GetInfo( carid, v_frac, v_rank, idx ) )
{
if( v_frac == PlayerInfo[playerid][pLeader] && !FC::IsEditMode( playerid ) )
{
FC::INFO[ idx ][ FC::RANK ] = inputtext[0]; FC::Update( idx );
format(string, sizeof(string),"* Теперь машина доступна с %d-го ранга!", inputtext[0]);
Send(playerid, COLOR_WHITE, string);
}
else Send(playerid, -1, "* Вы не лидер!");
}
}
}
else
{
LoadText("dialog/lmenu/main.lst", dialog);
SPD(playerid, D_LMENU, 2, "L-Menu: Что хотите изменить?", dialog, "Выбор", "отмена");
}
return 1;
}
case D_LMENU+5 :
{
if( response )
{
new number[10];
if( sscanf(inputtext, "s[10]", number) ) return SPD(playerid, D_LMENU+5, 1, "L-Menu: Смена номера", "Введите новый номер(макс 8 символов) ", "Enter", "Back");
if( strlen(number) < 1 || strlen(number) > 8 ) return SPD(playerid, D_LMENU+5, 1, "L-Menu: Смена номера", "Введите новый номер(макс 8 символов) ", "Enter", "Back");
if( str_check( number ) ) return SPD(playerid, D_LMENU+5, 1, "L-Menu: Смена номера", "Введите новый номер(макс 8 символов)", "Enter", "Back");
new idx, v_frac, v_rank, carid = GetPlayerVehicleID(playerid);
if( FC::GetInfo( carid, v_frac, v_rank, idx ) )
{
if( v_frac == PlayerInfo[playerid][pLeader] && !FC::IsEditMode( playerid ) )
{
format(FC::INFO[ idx ][ FC::NUMBER ], 10, "%s", number);
new Float: posx, Float: posy, Float: posz, Float: posa;
GetVehiclePos(carid, posx, posy, posz); GetVehicleZAngle(carid, posa);
FC::RecreateVehicle( idx ); FC::Update( idx );
SetVehiclePos(FC::INFO[ idx ][ FC::ID ][ 1 ], posx, posy, posz); SetVehicleZAngle(carid, posa);
SetVehicleNumberPlate(FC::INFO[ idx ][ FC::ID ][ 1 ], FC::INFO[ idx ][ FC::NUMBER ]);
PutPlayerInVehicle(playerid, FC::INFO[ idx ][ FC::ID ][ 1 ], 0);
Send(playerid, COLOR_WHITE, "* Номер был изменен!");
}
else Send(playerid, -1, "* Вы не лидер!");
}
}
else
{
LoadText("dialog/lmenu/main.lst", dialog);
SPD(playerid, D_LMENU, 2, "L-Menu: Что хотите изменить?", dialog, "Выбор", "Отмена");
}
return 1;
}
case D_LMENU+6 :
{
if( response )
{
new idx, v_frac, v_rank, carid = GetPlayerVehicleID(playerid);
if( FC::GetInfo( carid, v_frac, v_rank, idx ) )
{
if( v_frac == PlayerInfo[playerid][pLeader] && !FC::IsEditMode( playerid ) )
{
GetVehiclePos(carid, FC::INFO[ idx ][ FC::R_POS ][ 0 ], FC::INFO[ idx ][ FC::R_POS ][ 1 ], FC::INFO[ idx ][ FC::R_POS ][ 2 ]);
GetVehicleZAngle(carid, FC::INFO[ idx ][ FC::R_POS ][ 3 ]);
FC::RecreateVehicle( idx ); FC::Update( idx );
SetVehicleNumberPlate(FC::INFO[ idx ][ FC::ID ][ 1 ], FC::INFO[ idx ][ FC::NUMBER ]);
PutPlayerInVehicle(playerid, FC::INFO[ idx ][ FC::ID ][ 1 ], 0);
Send(playerid, COLOR_WHITE, "* Место спавна было изменено!");
}
else Send(playerid, -1, "* Вы не лидер!");
}
}
else
{
LoadText("dialog/lmenu/main.lst", dialog);
SPD(playerid, D_LMENU, 2, "L-Menu: Что хотите изменить?", dialog, "Выбор", "Отмена");
}
return 1;
}
case D_LMENU+7 :
{
if( response )
{
new model_id, mname[30]; strcat( mname, inputtext );
insert( mname, "\\" ); sscanf( mname, "k<vehicle>", model_id);
if( model_id < 400 || model_id > 611 ) return Send(playerid, COLOR_GREY, "* Unknown model id!");
new idx, v_frac, v_rank, carid = GetPlayerVehicleID(playerid);
if( FC::GetInfo( carid, v_frac, v_rank, idx ) )
{
if( v_frac == PlayerInfo[playerid][pLeader] && !FC::IsEditMode( playerid ) )
{
new Float: posx, Float: posy, Float: posz, Float: posa;
GetVehiclePos(carid, posx, posy, posz); GetVehicleZAngle(carid, posa);
FC::INFO[ idx ][ FC::MODEL ] = model_id;
FC::RecreateVehicle( idx ); FC::Update( idx );
SetVehiclePos(FC::INFO[ idx ][ FC::ID ][ 1 ], posx, posy, posz); SetVehicleZAngle(carid, posa);
SetVehicleNumberPlate(FC::INFO[ idx ][ FC::ID ][ 1 ], FC::INFO[ idx ][ FC::NUMBER ]);
PutPlayerInVehicle(playerid, FC::INFO[ idx ][ FC::ID ][ 1 ], 0);
Send(playerid, COLOR_WHITE, "* Модель была изменена!");
}
else Send(playerid, -1, "* Вы не лидер!");
}
}
else
{
LoadText("dialog/lmenu/main.lst", dialog);
SPD(playerid, D_LMENU, 2, "L-Menu: Что хотите изменить?", dialog, "Выбор", "Отмена");
}
}
case D_ADD_FC :
{
if( response )
{
new model_id, mname[30]; strcat( mname, inputtext );
insert( mname, "\\" ); sscanf( mname, "k<vehicle>", model_id);
new frac_id = GetPVarInt( playerid, "SelectFrac");
if( model_id < 400 || model_id> 611 ) return Send(playerid, COLOR_GREY, "* Unknown model id!");
new Float: r_pos[4]; GetPlayerPos( playerid, r_pos[0], r_pos[1], r_pos[2]); GetPlayerFacingAngle(playerid, r_pos[3]);
format(query, sizeof(query), "INSERT INTO `frac_vehicles` (`model`,`frac`,`resp_pos`) VALUES ('%i','%i','%.3f,%.3f,%.3f,%.3f')",
model_id, frac_id, r_pos[0], r_pos[1], r_pos[2], r_pos[3]);
if( bd::query(query) && bd::free_result() )
{
new id = FC::TOTAL; FC::TOTAL++;
FC::INFO[ id ][ FC::ID ][ 0 ] = bd::insert_id();
FC::INFO[ id ][ FC::MODEL ] = model_id;
FC::INFO[ id ][ FC::FRAC ] = frac_id;
FC::INFO[ id ][ FC::COLOR ][ 0 ] = -1;
FC::INFO[ id ][ FC::COLOR ][ 1 ] = -1;
FC::INFO[ id ][ FC::R_POS ][ 0 ] = r_pos[0];
FC::INFO[ id ][ FC::R_POS ][ 1 ] = r_pos[1];
FC::INFO[ id ][ FC::R_POS ][ 2 ] = r_pos[2];
FC::INFO[ id ][ FC::R_POS ][ 3 ] = r_pos[3];
strmid(FC::INFO[ id ][ FC::NUMBER ], FC::DEF_NUMBER, 0, strlen(FC::DEF_NUMBER), 255);
FC::INFO[ id ][ FC::ID ][ 1 ] =
CreateVehicle
(
FC::INFO[ id ][ FC::MODEL ],
FC::INFO[ id ][ FC::R_POS ][ 0 ],
FC::INFO[ id ][ FC::R_POS ][ 1 ],
FC::INFO[ id ][ FC::R_POS ][ 2 ],
FC::INFO[ id ][ FC::R_POS ][ 3 ],
FC::INFO[ id ][ FC::COLOR ][ 0 ],
FC::INFO[ id ][ FC::COLOR ][ 1 ],
1200
);
SetVehicleNumberPlate(FC::INFO[ id ][ FC::ID ][ 1 ], FC::INFO[ id ][ FC::NUMBER ]);
PutPlayerInVehicle(playerid, FC::INFO[ id ][ FC::ID ][ 1 ], 0); FC::Update( id );
Send( playerid, COLOR_YELLOW, "* Машина добавлена!");
}
}
return 1;
}
case D_SHOW_MODEL :
{
if( response )
{
if( !strcmp(inputtext, "Добавить", true) )
{
LoadText("dialog/lmenu/addmodel.lst", dialog);
SPD( playerid, D_ADD_MODEL, 1, "Добавить", dialog, "Ok", "Cancel");
}
else
{
new model_id, mname[30]; strcat( mname, inputtext );
insert( mname, "\\" ); sscanf( mname, "k<vehicle>", model_id);
if( model_id < 400 || model_id > 611 ) return Send(playerid, COLOR_GREY, "* Unknown model id!");
SetPVarInt( playerid, "SelectModel", model_id);
SPD( playerid, D_EDIT_MODEL, 2, "Options", "Изменить\nУдалить", "Ok", "Cancel");
}
}
return 1;
}
case D_EDIT_MODEL :
{
new frac_id = GetPVarInt( playerid, "SelectFrac" );
if( response )
{
switch( listitem )
{
case 0 :
{
SPD( playerid, D_EDIT_MODEL+1, 1, "Edit model", "Введите новый ID или название модели.\n\
Пример: 400 или Landstalker", "Ok", "Cancel");
}
case 1 :
{
new model_id = GetPVarInt( playerid, "SelectModel" );
format(query, sizeof(query), "DELETE FROM `frac_models` WHERE `frac_id` = '%i' AND `model_id` = '%i'",
frac_id, model_id);
if( bd::query(query) && bd::free_result() )
Send( playerid, COLOR_WHITE, " Эта модель была из списка доступных!");
}
}
}
else FC::ShowModel( playerid, frac_id, D_SHOW_MODEL );
return 1;
}
case D_EDIT_MODEL+1 :
{
if( response )
{
new newmodel, mname[30];
strcat( mname, inputtext ); insert( mname, "\\" );
if( sscanf( mname, "k<vehicle>", newmodel ) )
{
SPD( playerid, D_EDIT_MODEL+1, 1, "Edit model", "Введите новый ID или название модели.\n\
Пример: 400 или Landstalker", "Ok", "Cancel");
}
else
{
if( newmodel < 400 || newmodel > 611 ) return Send(playerid, COLOR_GREY, "* Unknown model id!");
new frac_id = GetPVarInt( playerid, "SelectFrac" );
new model_id = GetPVarInt( playerid, "SelectModel" );
format(query, sizeof(query), "UPDATE `frac_models` SET `model_id` = '%i' WHERE `frac_id` = '%i' AND `model_id` = '%i'",
newmodel, frac_id, model_id);
if( bd::query(query) && bd::free_result() )
Send( playerid, COLOR_WHITE, " Модель была изменена!");
}
}
return 1;
}
case D_ADD_MODEL :
{
if( response )
{
new model_id, mname[30];
strcat( mname, inputtext ); insert( mname, "\\" );
if( sscanf( mname, "k<vehicle>", model_id ) )
{
LoadText("dialog/lmenu/addmodel.lst", dialog);
SPD( playerid, D_ADD_MODEL, 1, "Äîáàâèòü", dialog, "Ok", "Cancel");
}
else
{
new frac_id = GetPVarInt( playerid, "SelectFrac" );
if( model_id < 400 || model_id > 611 ) return Send(playerid, COLOR_GREY, "* Unknown model id!");
if( FC::IsThereModel( frac_id, model_id ) ) return Send(playerid, COLOR_RED, "* Эта модель уже есть в списке!");
format(query, sizeof(query), "INSERT INTO `frac_models` (`frac_id`, `model_id`) VALUES ('%i','%i')", frac_id, model_id);
if( bd::query(query) && bd::free_result() )
{
format(string, sizeof(string), " Модель добавлена! Model_id: %i; Model_name: %s", model_id, PlayerVehicle[model_id-400]);
Send(playerid, COLOR_WHITE, string);
}
}
}
return 1;
}
}
PHP:
new fc_frac, fc_rank;
if(FC::GetInfo(newcar, fc_frac, fc_rank))
{
if( !FC::IsEditMode( playerid ) )
{
if(fc_frac == GetFracID(playerid))
{
if(PlayerInfo[playerid][pRank] < fc_rank && !PlayerInfo[playerid][pLeader])
{
format(string, sizeof(string), "* Траспорт досутпен только с %d-го ранга!", fc_rank);
Send(playerid, COLOR_GREY, string);
return RemovePlayerFromVehicle(playerid);
}
}
else
{
Send(playerid, COLOR_WHITE, "* Транспорт зарезервирован!");
return RemovePlayerFromVehicle(playerid);
}
}
}
PHP:
if( sqlConnect() )
{
FC::Load( );
}
PHP:
sscanf(cmdtext, "s[32]s[128]", cmd, xxx);
if( !strcmp(cmd, "/lmenu", true) )
{
if( !PlayerInfo[playerid][pLeader] ) return Send(playerid, COLOR_GREY, "* Недостаточно прав!");
if( !IsPlayerInAnyVehicle(playerid) ) return Send(playerid, COLOR_GREY, "* Нужно быть в машине!");
if( !FC::GetInfo(idcar) ) return Send(playerid, COLOR_GREY, "* Это не фракционная машина!");
LoadText("dialog/lmenu/main.lst", dialog);
SPD(playerid, D_LMENU, 2, "L-Menu: Что хотите изменить?", dialog, "Выбор", "Отмена");
}
if( !strcmp(cmd, "/editmode", true) )
{
if( PlayerInfo[playerid][pAdmin] < 1338 ) return Send(playerid, COLOR_GREY, "* Недостаточно прав!");
if( !FC::EDIT_MODE )
{
FC::EDIT_MODE = true;
Send(playerid, COLOR_RED, "Edit mode activated!");
}
else
{
FC::EDIT_MODE = false;
Send(playerid, COLOR_RED, "Edit mode deactivated!");
}
return 1;
}
if( !strcmp(cmd, "/addfc", true) )
{
if( PlayerInfo[playerid][pAdmin] < 1338 ) return Send(playerid, COLOR_GREY, "* Недостаточно прав!");
if( sscanf(xxx, "i", xxx[0]) ) return Send(playerid, COLOR_GREY, "Use: /addfc [fracid]");
if( xxx[0] < 1 || xxx[0] > 21 ) return Send(playerid, COLOR_GREY, "* Неверный ID фракции!");
if( FC::TOTAL >= FC::MAX ) return Send(playerid, COLOR_GREY, "* Создано макс. кол-во транспорта!");
FC::ShowModel( playerid, xxx[0], D_ADD_FC );
return 1;
}
if( !strcmp(cmd, "/delfc", true) )
{
if( PlayerInfo[playerid][pAdmin] < 1338 ) return Send(playerid, COLOR_RED, "* Недостаточно прав!");
if( !IsPlayerInAnyVehicle(playerid) ) return Send(playerid, COLOR_GREY, "* Нужно быть в автомобиле!");
if( !FC::GetInfo(idcar, xxx[0], xxx[0], idx ) ) return Send(playerid, COLOR_GREY, "* Это не фракционная машина!");
if( FC::Delete( idx ) )
{
DestroyVehicle( FC::INFO[ idx ][ FC::ID ][ 1 ] ); FC::TOTAL --;
FC::INFO[ idx ][ FC::ID ][ 0 ] = FC::INFO[ FC::TOTAL ][ FC::ID ][ 0 ];
FC::INFO[ idx ][ FC::ID ][ 1 ] = FC::INFO[ FC::TOTAL ][ FC::ID ][ 1 ];
FC::INFO[ idx ][ FC::MODEL ] = FC::INFO[ FC::TOTAL ][ FC::MODEL ];
FC::INFO[ idx ][ FC::FRAC ] = FC::INFO[ FC::TOTAL ][ FC::FRAC ];
FC::INFO[ idx ][ FC::COLOR ][ 0 ] = FC::INFO[ FC::TOTAL ][ FC::COLOR ][ 0 ];
FC::INFO[ idx ][ FC::COLOR ][ 1 ] = FC::INFO[ FC::TOTAL ][ FC::COLOR ][ 1 ];
strmid(FC::INFO[ idx ][ FC::NUMBER ], FC::INFO[ FC::TOTAL ][ FC::NUMBER ], 0, strlen(FC::INFO[ FC::TOTAL ][ FC::NUMBER ]), 255);
FC::INFO[ idx ][ FC::R_POS ][ 0 ] = FC::INFO[ FC::TOTAL ][ FC::R_POS ][ 0 ];
FC::INFO[ idx ][ FC::R_POS ][ 1 ] = FC::INFO[ FC::TOTAL ][ FC::R_POS ][ 1 ];
FC::INFO[ idx ][ FC::R_POS ][ 2 ] = FC::INFO[ FC::TOTAL ][ FC::R_POS ][ 2 ];
FC::INFO[ idx ][ FC::R_POS ][ 3 ] = FC::INFO[ FC::TOTAL ][ FC::R_POS ][ 3 ];
Send(playerid, COLOR_YELLOW, "* Машина была удалена!");
}
return 1;
}
if( !strcmp(cmd, "/showmodel", true) )
{
if( PlayerInfo[playerid][pAdmin] < 6 ) return Send(playerid, COLOR_RED, "* Недостаточно прав!");
if( sscanf(xxx, "i", xxx[0]) ) return Send(playerid, COLOR_RED, "Use: /showmodel [fracid]");
if( xxx[0] < 1 || xxx[0] > 21 ) return Send(playerid, COLOR_RED, "* Неверный ID фракции!");
FC::ShowModel( playerid, xxx[0], D_SHOW_MODEL );
return 1;
}
Последнее редактирование:
