free.time_
Умник
Написал систему магазина скинов на TextDraw, подобных мануалов/уроков я тут не видел.
И так приступим:
Сперва нам нужно создать пикап входа в магазин:
Для этого нам необходимо объявить несколько переменных:
После чего, необходимо прикрепить пикапы к нашим переменным, входа/выхода(public OnGameModeInit):
После создания пикапов, необходимо чтобы они реагировали когда мы к ним подходим(public OnPlayerPickUpPickup):
Ах да, совсем забыл про TD:
Теперь нам необходимо создать сами td(OnPlayerConnect):
Теперь можно и настроить кликабельность TD(OnPlayerClickTextDraw), у кого нет этого паблика создайте:
Теперь нам необходимо сделать диалог, о согласии покупки скина(public OnDialogResponse):
Вот и все, всем спасибо за внимание!
Дополнительно:
Переменные скина, лидерки, фракции, а так же функцию обновления аккаунта(UPDATE `accounts`), заменить на свои!
В противном случае могут быть ошибки.
Доп.функция(в конец мода):
Удачи всем!
И так приступим:
Сперва нам нужно создать пикап входа в магазин:
Для этого нам необходимо объявить несколько переменных:
PHP:
new buyskinv, selectskin, buyskinvix;
PHP:
buyskinv = CreatePickup(19132, 23, 461.7174,-1500.8893,31.0443,-1);
buyskinvix = CreatePickup(19132, 23, 207.0089,-140.2160,1003.5078,-1);
selectskin = CreatePickup(19134, 23, 201.9689,-131.0056,1003.5078,-1);
PHP:
if(pickupid == buyskinv)
{
SetPlayerVirtualWorld(playerid, playerid);
SetPlayerInterior(playerid, 3);
SetPlayerPos(playerid, 206.4627,-137.7076,1003.0938);
}
if(pickupid == buyskinvix)
{
SetPlayerVirtualWorld(playerid, playerid);
SetPlayerInterior(playerid, 0);
SetPlayerPos(playerid, 459.2481,-1501.1431,31.0392);
SetPlayerFacingAngle(playerid,98.1108);
}
if(pickupid == selectskin)
{
if(Player[playerid][pMember] != 0 || Player[playerid][pSetLeader] != 0) return SendClientMessage(playerid, -1, ""Y"Вы состоите во фракции введите /leave, чтобы уволится"); // проверку заменить на свою
SetPlayerVirtualWorld(playerid, playerid);
SetPlayerInterior(playerid, 3);
TogglePlayerControllable(playerid, 0);
SetPlayerPos(playerid,215.3667,-131.4807,1003.5078);
SetPlayerFacingAngle(playerid,89.6741);
SetPlayerCameraPos(playerid,209.4374,-131.5909,1003.5078);
SetPlayerCameraLookAt(playerid,209.4374,-131.5909,1003.5078);
if(Player[playerid][pSex] == 1) SetPlayerSkin(playerid, 1), SelectModel[playerid] = 28, SetSkin[playerid] = 1, SetMoney[playerid] = 1305;
else SetPlayerSkin(playerid, 151), SelectModel[playerid] = 28, SetSkin[playerid] = 151, SetMoney[playerid] = 1700;
TextDrawShowForPlayer(playerid,ButtonLeftt);
TextDrawShowForPlayer(playerid,ButtonRightt);
TextDrawShowForPlayer(playerid,ButtonSelectt);
SelectTextDraw(playerid, 0xFF4040AA);
LevelModel[playerid] = 1;
TogglePlayerControllable(playerid, 0);
SendClientMessage(playerid, -1, "{bbbbbb}Подсказка: Нажмите {f36223}ESC{bbbbbb}, чтобы отменить выбор одежды.");
}
PHP:
new LevelModel[MAX_PLAYERS], SelectModel[MAX_PLAYERS], SetMoney[MAX_PLAYERS], Text:ButtonLeftt, Text:ButtonRightt, Text:ButtonSelectt, SetMoney[MAX_PLAYERS], SetSkin[MAX_PLAYERS];
PHP:
//
ButtonLeftt = TextDrawCreate(50.0, 200.0, "LD_BEAT:left");
TextDrawFont(ButtonLeftt, 4);
TextDrawTextSize(ButtonLeftt, 50, 25);
TextDrawSetSelectable(ButtonLeftt, 1);
ButtonRightt = TextDrawCreate(530.0, 200.0, "LD_BEAT:right");
TextDrawFont(ButtonRightt, 4);
TextDrawTextSize(ButtonRightt, 50, 25);
TextDrawSetSelectable(ButtonRightt, 1);
ButtonSelectt = TextDrawCreate(382.000000, 371.000000, "Select");
TextDrawTextSize(ButtonSelectt, 482.0, 22.0);
TextDrawBackgroundColor(ButtonSelectt, 255);
TextDrawFont(ButtonSelectt, 3);
TextDrawLetterSize(ButtonSelect, 0.899999, 2.400000);
TextDrawColor(ButtonSelectt, 869072895);
TextDrawSetOutline(ButtonSelectt, 0);
TextDrawSetProportional(ButtonSelectt, 1);
TextDrawSetShadow(ButtonSelectt, 1);
TextDrawSetSelectable(ButtonSelectt, 1);
PHP:
public OnPlayerClickTextDraw(playerid, Text:clickedid)
{
if(LevelModel[playerid] == 1)
{
if(clickedid == ButtonRightt)
{
if(Player[playerid][pSex] == 1)
{
switch(SelectModel[playerid])
{
case 1: SetPlayerSkin(playerid, 1), SelectModel[playerid] = 2, SetSkin[playerid] = 1, SetMoney[playerid] = 1305;
case 2: SetPlayerSkin(playerid, 230), SelectModel[playerid] = 3, SetSkin[playerid] = 230, SetMoney[playerid] = 1453;
case 3: SetPlayerSkin(playerid, 212), SelectModel[playerid] = 4, SetSkin[playerid] = 212, SetMoney[playerid] = 1500;
case 4: SetPlayerSkin(playerid, 210), SelectModel[playerid] = 5, SetSkin[playerid] = 210, SetMoney[playerid] = 1600;
case 5: SetPlayerSkin(playerid, 202), SelectModel[playerid] = 6,SetSkin[playerid] = 202, SetMoney[playerid] = 2000;
case 6: SetPlayerSkin(playerid, 4), SelectModel[playerid] = 7, SetSkin[playerid] = 4, SetMoney[playerid] = 2400;
case 7: SetPlayerSkin(playerid, 3), SelectModel[playerid] = 8, SetSkin[playerid] = 3, SetMoney[playerid] = 2700;
case 8: SetPlayerSkin(playerid, 15), SelectModel[playerid] = 9, SetSkin[playerid] = 15, SetMoney[playerid] = 3102;
case 9: SetPlayerSkin(playerid, 66), SelectModel[playerid] = 10, SetSkin[playerid] = 66, SetMoney[playerid] = 3400;
case 10: SetPlayerSkin(playerid, 19), SelectModel[playerid] = 11, SetSkin[playerid] = 19, SetMoney[playerid] = 3600;
case 11: SetPlayerSkin(playerid, 170), SelectModel[playerid] = 12, SetSkin[playerid] = 170, SetMoney[playerid] = 3850;
case 12: SetPlayerSkin(playerid, 21), SelectModel[playerid] = 13, SetSkin[playerid] = 21, SetMoney[playerid] = 3900;
case 13: SetPlayerSkin(playerid, 221), SelectModel[playerid] = 14, SetSkin[playerid] = 221, SetMoney[playerid] = 4070;
case 14: SetPlayerSkin(playerid, 272), SelectModel[playerid] = 15, SetSkin[playerid] = 272, SetMoney[playerid] = 6400;
case 15: SetPlayerSkin(playerid, 126), SelectModel[playerid] = 16, SetSkin[playerid] = 126, SetMoney[playerid] = 7000;
case 16: SetPlayerSkin(playerid, 249), SelectModel[playerid] = 17, SetSkin[playerid] = 249, SetMoney[playerid] = 7800;
case 17: SetPlayerSkin(playerid, 48), SelectModel[playerid] = 18, SetSkin[playerid] = 48, SetMoney[playerid] = 8500;
case 18: SetPlayerSkin(playerid, 46), SelectModel[playerid] = 19, SetSkin[playerid] = 46, SetMoney[playerid] = 12000;
case 19: SetPlayerSkin(playerid, 297), SelectModel[playerid] = 20, SetSkin[playerid] = 297, SetMoney[playerid] = 14566;
case 20: SetPlayerSkin(playerid, 149), SelectModel[playerid] = 21, SetSkin[playerid] = 149, SetMoney[playerid] = 15945;
case 21: SetPlayerSkin(playerid, 299), SelectModel[playerid] = 22, SetSkin[playerid] = 299, SetMoney[playerid] = 17080;
case 22: SetPlayerSkin(playerid, 82), SelectModel[playerid] = 23, SetSkin[playerid] = 82, SetMoney[playerid] = 18645;
case 23: SetPlayerSkin(playerid, 289), SelectModel[playerid] = 24, SetSkin[playerid] = 289, SetMoney[playerid] = 21090;
case 24: SetPlayerSkin(playerid, 291), SelectModel[playerid] = 25, SetSkin[playerid] = 291, SetMoney[playerid] = 20400;
case 25: SetPlayerSkin(playerid, 147), SelectModel[playerid] = 26, SetSkin[playerid] = 147, SetMoney[playerid] = 23000;
case 26: SetPlayerSkin(playerid, 296), SelectModel[playerid] = 27, SetSkin[playerid] = 296, SetMoney[playerid] = 24050;
case 27: SetPlayerSkin(playerid, 83), SelectModel[playerid] = 28, SetSkin[playerid] = 83, SetMoney[playerid] = 24456;
case 28: SetPlayerSkin(playerid, 294), SelectModel[playerid] = 1, SetSkin[playerid] = 294, SetMoney[playerid] = 26740;
//case 29: SetPlayerSkin(playerid, 4), SelectModel[playerid] = 1, SetSkin[playerid] = 78, SetMoney[playerid] -= 2400;
// case 30: SetPlayerSkin(playerid, 4), SelectModel[playerid] = 1, SetSkin[playerid] = 78, SetMoney[playerid] -= 2400;
}
}
else
{
switch(SelectModel[playerid])
{
case 1: SetPlayerSkin(playerid, 151), SelectModel[playerid] = 28, SetSkin[playerid] = 151, SetMoney[playerid] = 1700;
case 2: SetPlayerSkin(playerid, 201), SelectModel[playerid] = 1, SetSkin[playerid] = 201, SetMoney[playerid] = 2000;
case 3: SetPlayerSkin(playerid, 152), SelectModel[playerid] = 2, SetSkin[playerid] = 152, SetMoney[playerid] = 3460;
case 4: SetPlayerSkin(playerid, 55), SelectModel[playerid] = 5, SetSkin[playerid] = 55, SetMoney[playerid] = 5600;
case 5: SetPlayerSkin(playerid, 9), SelectModel[playerid] = 6, SetSkin[playerid] = 9, SetMoney[playerid] = 6450;
case 6: SetPlayerSkin(playerid, 211), SelectModel[playerid] = 7, SetSkin[playerid] = 211, SetMoney[playerid] = 7480;
case 7: SetPlayerSkin(playerid, 69), SelectModel[playerid] = 8, SetSkin[playerid] = 69, SetMoney[playerid] = 7856;
case 8: SetPlayerSkin(playerid, 214), SelectModel[playerid] = 9, SetSkin[playerid] = 214, SetMoney[playerid] = 9300;
case 9: SetPlayerSkin(playerid, 215), SelectModel[playerid] = 10, SetSkin[playerid] = 215, SetMoney[playerid] = 10000;
case 10: SetPlayerSkin(playerid, 193), SelectModel[playerid] = 11, SetSkin[playerid] = 193, SetMoney[playerid] = 10734;
case 11: SetPlayerSkin(playerid, 216), SelectModel[playerid] = 12, SetSkin[playerid] = 216, SetMoney[playerid] = 11490;
case 12: SetPlayerSkin(playerid, 233), SelectModel[playerid] = 13, SetSkin[playerid] = 233, SetMoney[playerid] = 13000;
case 13: SetPlayerSkin(playerid, 40), SelectModel[playerid] = 14, SetSkin[playerid] = 40, SetMoney[playerid] = 13740;
case 14: SetPlayerSkin(playerid, 192), SelectModel[playerid] = 15, SetSkin[playerid] = 192, SetMoney[playerid] = 14500;
case 15: SetPlayerSkin(playerid, 91), SelectModel[playerid] = 1, SetSkin[playerid] = 91, SetMoney[playerid] = 16000;
}
}
}
else if(clickedid == ButtonLeftt)
{
if(Player[playerid][pSex] == 1)
{
switch(SelectModel[playerid])
{
case 1: SetPlayerSkin(playerid, 1), SelectModel[playerid] = 28, SetSkin[playerid] = 1, SetMoney[playerid] = 1305;
case 28: SetPlayerSkin(playerid, 294), SelectModel[playerid] = 27, SetSkin[playerid] = 294, SetMoney[playerid] = 26740;
case 27: SetPlayerSkin(playerid, 83), SelectModel[playerid] = 26, SetSkin[playerid] = 83, SetMoney[playerid] = 24456;
case 26: SetPlayerSkin(playerid, 296), SelectModel[playerid] = 25, SetSkin[playerid] = 296, SetMoney[playerid] = 24050;
case 25: SetPlayerSkin(playerid, 147), SelectModel[playerid] = 24, SetSkin[playerid] = 147, SetMoney[playerid] = 23000;
case 24: SetPlayerSkin(playerid, 291), SelectModel[playerid] = 23, SetSkin[playerid] = 291, SetMoney[playerid] = 20400;
case 23: SetPlayerSkin(playerid, 289), SelectModel[playerid] = 22, SetSkin[playerid] = 289, SetMoney[playerid] = 21090;
case 22: SetPlayerSkin(playerid, 82), SelectModel[playerid] = 21, SetSkin[playerid] = 82, SetMoney[playerid] = 18645;
case 21: SetPlayerSkin(playerid, 299), SelectModel[playerid] = 20, SetSkin[playerid] = 299, SetMoney[playerid] = 17080;
case 20: SetPlayerSkin(playerid, 149), SelectModel[playerid] = 19, SetSkin[playerid] = 149, SetMoney[playerid] = 15945;
case 19: SetPlayerSkin(playerid, 297), SelectModel[playerid] = 18, SetSkin[playerid] = 297, SetMoney[playerid] = 14566;
case 18: SetPlayerSkin(playerid, 46), SelectModel[playerid] = 17, SetSkin[playerid] = 46, SetMoney[playerid] = 12000;
case 17: SetPlayerSkin(playerid, 48), SelectModel[playerid] = 16, SetSkin[playerid] = 48, SetMoney[playerid] = 8500;
case 16: SetPlayerSkin(playerid, 249), SelectModel[playerid] = 15, SetSkin[playerid] = 249, SetMoney[playerid] = 7800;
case 15: SetPlayerSkin(playerid, 126), SelectModel[playerid] = 14, SetSkin[playerid] = 126, SetMoney[playerid] = 7000;
case 14: SetPlayerSkin(playerid, 272), SelectModel[playerid] = 13, SetSkin[playerid] = 272, SetMoney[playerid] = 6400;
case 13: SetPlayerSkin(playerid, 221), SelectModel[playerid] = 12, SetSkin[playerid] = 221, SetMoney[playerid] = 4070;
case 12: SetPlayerSkin(playerid, 21), SelectModel[playerid] = 11, SetSkin[playerid] = 21, SetMoney[playerid] = 3900;
case 11: SetPlayerSkin(playerid, 170), SelectModel[playerid] = 10, SetSkin[playerid] = 170, SetMoney[playerid] = 3850;
case 10: SetPlayerSkin(playerid, 19), SelectModel[playerid] = 9, SetSkin[playerid] = 19, SetMoney[playerid] = 3600;
case 9: SetPlayerSkin(playerid, 66), SelectModel[playerid] = 8, SetSkin[playerid] = 66, SetMoney[playerid] = 3400;
case 8: SetPlayerSkin(playerid, 15), SelectModel[playerid] = 7, SetSkin[playerid] = 15, SetMoney[playerid] = 3102;
case 7: SetPlayerSkin(playerid, 3), SelectModel[playerid] = 6, SetSkin[playerid] = 3, SetMoney[playerid] = 2700;
case 6: SetPlayerSkin(playerid, 4), SelectModel[playerid] = 5, SetSkin[playerid] = 4, SetMoney[playerid] = 2400;
case 5: SetPlayerSkin(playerid, 202), SelectModel[playerid] = 4,SetSkin[playerid] = 202, SetMoney[playerid] = 2000;
case 4: SetPlayerSkin(playerid, 210), SelectModel[playerid] = 3, SetSkin[playerid] = 210, SetMoney[playerid] = 1600;
case 3: SetPlayerSkin(playerid, 212), SelectModel[playerid] = 2, SetSkin[playerid] = 212, SetMoney[playerid] = 1500;
case 2: SetPlayerSkin(playerid, 230), SelectModel[playerid] = 1, SetSkin[playerid] = 230, SetMoney[playerid] = 1453;
}
}
else
{
switch(SelectModel[playerid])
{
case 1: SetPlayerSkin(playerid, 151), SelectModel[playerid] = 15, SetSkin[playerid] = 151, SetMoney[playerid] = 1700;
case 15: SetPlayerSkin(playerid, 91), SelectModel[playerid] = 14, SetSkin[playerid] = 91, SetMoney[playerid] = 16000;
case 14: SetPlayerSkin(playerid, 192), SelectModel[playerid] = 13, SetSkin[playerid] = 192, SetMoney[playerid] = 14500;
case 13: SetPlayerSkin(playerid, 40), SelectModel[playerid] = 12, SetSkin[playerid] = 40, SetMoney[playerid] = 13740;
case 12: SetPlayerSkin(playerid, 233), SelectModel[playerid] = 11, SetSkin[playerid] = 233, SetMoney[playerid] = 13000;
case 11: SetPlayerSkin(playerid, 216), SelectModel[playerid] = 10, SetSkin[playerid] = 216, SetMoney[playerid] = 11490;
case 10: SetPlayerSkin(playerid, 193), SelectModel[playerid] = 9, SetSkin[playerid] = 193, SetMoney[playerid] = 10734;
case 9: SetPlayerSkin(playerid, 215), SelectModel[playerid] = 8, SetSkin[playerid] = 215, SetMoney[playerid] = 10000;
case 8: SetPlayerSkin(playerid, 214), SelectModel[playerid] = 7, SetSkin[playerid] = 214, SetMoney[playerid] = 9300;
case 7: SetPlayerSkin(playerid, 69), SelectModel[playerid] = 6, SetSkin[playerid] = 69, SetMoney[playerid] = 7856;
case 6: SetPlayerSkin(playerid, 211), SelectModel[playerid] = 5, SetSkin[playerid] = 211, SetMoney[playerid] = 7480;
case 5: SetPlayerSkin(playerid, 9), SelectModel[playerid] = 4, SetSkin[playerid] = 9, SetMoney[playerid] = 6450;
case 4: SetPlayerSkin(playerid, 55), SelectModel[playerid] = 3, SetSkin[playerid] = 55, SetMoney[playerid] = 5600;
case 3: SetPlayerSkin(playerid, 152), SelectModel[playerid] = 2, SetSkin[playerid] = 152, SetMoney[playerid] = 3460;
case 2: SetPlayerSkin(playerid, 201), SelectModel[playerid] = 1, SetSkin[playerid] = 201, SetMoney[playerid] = 2000;
}
}
}
else if(clickedid == ButtonSelectt)
{
if(GetPlayerCash(playerid) < SetMoney[playerid]) return SendClientMessage(playerid, COLOR_YELLOW, "У Вас недостаточно денег для покупки этой одежды.");
format(tsg, sizeof(tsg), "Данная одежда стоит %d$, Вы действительно желаете ее приобрести?", SetMoney[playerid]);
ShowPlayerDialog(playerid, 39, DIALOG_STYLE_MSGBOX, ""Y"Магазин одежды", tsg, "Конечно", "Нет");
}
if(_:clickedid == INVALID_TEXT_DRAW)
{
if(LevelModel[playerid] == 1)
{
TogglePlayerControllable(playerid, 1);
TextDrawHideForPlayer(playerid,ButtonLeftt);
TextDrawHideForPlayer(playerid,ButtonRightt);
TextDrawHideForPlayer(playerid,ButtonSelectt);
CancelSelectTextDraw(playerid);
SetCameraBehindPlayer(playerid);
LevelModel[playerid] = 0, SetSkin[playerid] = 0, SelectModel[playerid] = 0, SetMoney[playerid] = 0;
SetPlayerSkin(playerid, Player[playerid][pModel]);
return true;
}
return true;
}
}
return true;
}
PHP:
case 39:
{
if(!response) return true;
MinuPlayerCash(playerid, SetMoney[playerid]);
Player[playerid][pModel] = SetSkin[playerid];
SelectModel[playerid] = 0;
LevelModel[playerid] = 0;
TogglePlayerControllable(playerid, 1);
TextDrawHideForPlayer(playerid,ButtonLeftt);
TextDrawHideForPlayer(playerid,ButtonRightt);
TextDrawHideForPlayer(playerid,ButtonSelectt);
CancelSelectTextDraw(playerid);
SetCameraBehindPlayer(playerid);
SendClientMessage(playerid, -1, ""B"Поздравляем Вас, с покупкой новой одежды.");
mysql_format(CHDL,query,128, "UPDATE `accounts` SET `model` = '%d' WHERE `Name` = '%s'", SetSkin[playerid], Player[playerid][pSendername]);
mysql_function_query(CHDL, query, false, "", "");
return true;
}
Дополнительно:
Переменные скина, лидерки, фракции, а так же функцию обновления аккаунта(UPDATE `accounts`), заменить на свои!
В противном случае могут быть ошибки.
Доп.функция(в конец мода):
PHP:
stock MinuPlayerCash(playerid, money)// Функция, чтоб отнять деньги у игрока
{
Player[playerid][pMoney] -= money;
ResetPlayerMoney(playerid);
GivePlayerMoney(playerid,Player[playerid][pMoney]);
return Player[playerid][pMoney];
}
Последнее редактирование:
