PDA

Просмотр полной версии : [Мануал] Система одежды (с магазином)



Unreal
22.05.2016, 11:29
Всем привет. Это система одежд которая позволяет одевать и раздевать вашего персонажа в игре.
Существует 3 слота для каждого игрока, Писал с нуля, идею взял из РакНет.

ко всем переменным:


// ============= [ одежда игрока by Scooter ] ===========
new
// === TD
Text:u_SkinPlayerMenuTD[5],
PlayerText:u_SkinPlayerMenuTDforPlayer[MAX_PLAYERS][4],
// === Other
u_SkinSlot[MAX_PLAYERS][4],
u_SelectedSkin[MAX_PLAYERS];
// ============= [ покупка одежды by Scooter ]===============
new
Text:u_SkinBuyMenuTD[15],
//SelectedSlot[15];
u_MenuSkinsMale[15] = { 0,2,14,24,25,29,59,60,82,83,84,170,185,240,299 },
u_MenuSkinsFemale[15] = { 0,12,13,40,55,56,76,90,141,148,169,192,190,193,216 },
u_skinshop_seller, u_toshop[2], u__inorder4 = INVALID_PLAYER_ID;

в OnGameModeInt


u_toshop[0] = CreatePickup(1318,23,499.509,-1360.63,16.3691,0);
u_toshop[1] = CreatePickup(1318,23,206.956,-140.373,1003.51,1);
u_skinshop_seller= CreateActor(241,207.0798,-127.8070,1003.5078,182.8684);
SetActorVirtualWorld(u_skinshop_seller, 1);

в OnPlayerPickUpPickup


if(pickupid == u_toshop[0])
{
SetPlayerVirtualWorld(playerid,1);
SetPlayerInterior(playerid,3);
SetPlayerPos(playerid,207.018,-138.37,1003.51);
SetPlayerFacingAngle(playerid, 358.31);
SetCameraBehindPlayer(playerid);
}
else if(pickupid == u_toshop[1])
{
SetPlayerVirtualWorld(playerid,0);
SetPlayerInterior(playerid,0);
SetPlayerPos(playerid,500.092,-1358.59,16.2078);
SetPlayerFacingAngle(playerid, 358.31);
SetCameraBehindPlayer(playerid);
}

в OnPlayerDisconnect


if(playerid == u__inorder4) u__inorder4 = INVALID_PLAYER_ID;



new SellerActSays[3][3][73] = {
{"- Продавец: Привет чувак, тебе чо ?","- Продавец: Здарова, я тя слушаю?","- Продавец: Брооо, чем я тебе могу помочь?"},
{"Привет, что у тебя на продаже?","Привет, что посоветуешь ?","Здарова, мне бы новую одежду ..."},
{"- Продавец: йо, вот, посмотри","- Продавец: посмотри на это","- Продавец: оцени"}
};

в OnPlayerClickTextDraw


if(GetPVarInt(playerid,"ShopTD_Active") == 1)
{
if(_:clickedid == INVALID_TEXT_DRAW) SelectTextDraw(playerid, 0xcfcfcfAA);
new empty_skin = (PlayerInfo[playerid][pSex] == 1) ? (154) : (140);
if(u_SkinSlot[playerid][0] != empty_skin) return SendClientMessage(playerid,COLOR_LIGHTRED,"[Ошибка] Вам нужно быть без одежды");
SetPlayerSkin(playerid,(PlayerInfo[playerid][pSex] == 1) ? (u_MenuSkinsMale[_:clickedid]) : (u_MenuSkinsFemale[_:clickedid]));
PlayerTextDrawSetPreviewModel(playerid,u_SkinPlayerMenuTDforPlayer[playerid][0],(PlayerInfo[playerid][pSex] == 1) ? (u_MenuSkinsMale[_:clickedid]) : (u_MenuSkinsFemale[_:clickedid]));
PlayerTextDrawShow(playerid, u_SkinPlayerMenuTDforPlayer[playerid][0]);
}
if(GetPVarInt(playerid,"u_SkinPlayerMenuTD_Active") == 1)
{
if(_:clickedid == INVALID_TEXT_DRAW) SelectTextDraw(playerid, 0xcfcfcfAA);
else if(clickedid == u_SkinPlayerMenuTD[2])
{
if(u_SelectedSkin[playerid] != -1) return SendClientMessage(playerid,COLOR_LIGHTRED,"[Ошибка] Положите вашу одежду в любой свободный слот.");
ReturnPlayerMenu(playerid,0);
}
else if(clickedid == u_SkinPlayerMenuTD[4])
{
if(u_SelectedSkin[playerid] != -1) u_SelectedSkin[playerid] = -1;
}
}


в OnPlayerClickPlayerTextDraw


if(GetPVarInt(playerid,"u_SkinPlayerMenuTD_Active") == 1)
{
// Если нажал 'ESC' не даем закрывать стрелку
if(playertextid == PlayerText:INVALID_TEXT_DRAW) SelectTextDraw(playerid, 0xcfcfcfAA);

// Если нажал на основной слот
else if(playertextid == u_SkinPlayerMenuTDforPlayer[playerid][0])
{
new empty_skin = PlayerInfo[playerid][pSex] == 1 ? 154 : 140;
if(u_SelectedSkin[playerid] == -1)
{
if(u_SkinSlot[playerid][0] == empty_skin) return SendClientMessage(playerid,COLOR_LIGHTRED,"[Ошибка] Вы без одежды");
u_SelectedSkin[playerid] = GetPlayerSkin(playerid);
u_SkinSlot[playerid][0] = empty_skin;
SetPlayerSkin(playerid,empty_skin);
}
else
{
if(u_SkinSlot[playerid][0] != empty_skin) return SendClientMessage(playerid,COLOR_LIGHTRED,"[Ошибка] Вам нужно быть без одежды");
u_SkinSlot[playerid][0] = u_SelectedSkin[playerid];
SetPlayerSkin(playerid,u_SkinSlot[playerid][0]);
u_SelectedSkin[playerid] = -1;
PlayerTextDrawSetPreviewModel(playerid,u_SkinPlayerMenuTDforPlayer[playerid][0],u_SkinSlot[playerid][0]);
}
PlayerTextDrawSetPreviewModel(playerid,u_SkinPlayerMenuTDforPlayer[playerid][0],u_SkinSlot[playerid][0]);
PlayerTextDrawShow(playerid, u_SkinPlayerMenuTDforPlayer[playerid][0]);
}
// Если нажал на слот 1
else if(playertextid == u_SkinPlayerMenuTDforPlayer[playerid][1])
{
if(u_SelectedSkin[playerid] == -1)
{
if(u_SkinSlot[playerid][1] == 19374) return 1;
u_SelectedSkin[playerid] = u_SkinSlot[playerid][1];
u_SkinSlot[playerid][1] = 19374;
}
else
{
if(u_SkinSlot[playerid][1] != 19374) return SendClientMessage(playerid,COLOR_LIGHTRED,"[Ошибка] Этот слот занят");
u_SkinSlot[playerid][1] = u_SelectedSkin[playerid];
u_SelectedSkin[playerid] = -1;
PlayerTextDrawSetPreviewModel(playerid,u_SkinPlayerMenuTDforPlayer[playerid][1],u_SkinSlot[playerid][1]);
}
PlayerTextDrawSetPreviewModel(playerid,u_SkinPlayerMenuTDforPlayer[playerid][1],u_SkinSlot[playerid][1]);
PlayerTextDrawShow(playerid, u_SkinPlayerMenuTDforPlayer[playerid][1]);
}
// Если нажал на слот 2
else if(playertextid == u_SkinPlayerMenuTDforPlayer[playerid][2])
{
if(u_SelectedSkin[playerid] == -1)
{
if(u_SkinSlot[playerid][2] == 19374) return 1;
u_SelectedSkin[playerid] = u_SkinSlot[playerid][2];
u_SkinSlot[playerid][2] = 19374;
}
else
{
if(u_SkinSlot[playerid][2] != 19374) return SendClientMessage(playerid,COLOR_LIGHTRED,"[Ошибка] Этот слот занят");
u_SkinSlot[playerid][2] = u_SelectedSkin[playerid];
u_SelectedSkin[playerid] = -1;
PlayerTextDrawSetPreviewModel(playerid,u_SkinPlayerMenuTDforPlayer[playerid][2],u_SkinSlot[playerid][2]);
}
PlayerTextDrawSetPreviewModel(playerid,u_SkinPlayerMenuTDforPlayer[playerid][2],u_SkinSlot[playerid][2]);
PlayerTextDrawShow(playerid, u_SkinPlayerMenuTDforPlayer[playerid][2]);
}
// Если нажал на слот 3
else if(playertextid == u_SkinPlayerMenuTDforPlayer[playerid][3])
{
if(u_SelectedSkin[playerid] == -1)
{
if(u_SkinSlot[playerid][3] == 19374) return 1;
u_SelectedSkin[playerid] = u_SkinSlot[playerid][3];
u_SkinSlot[playerid][3] = 19374;
}
else
{
if(u_SkinSlot[playerid][3] != 19374) return SendClientMessage(playerid,COLOR_LIGHTRED,"[Ошибка] Этот слот занят");
u_SkinSlot[playerid][3] = u_SelectedSkin[playerid];
u_SelectedSkin[playerid] = -1;
PlayerTextDrawSetPreviewModel(playerid,u_SkinPlayerMenuTDforPlayer[playerid][3],u_SkinSlot[playerid][3]);
}
PlayerTextDrawSetPreviewModel(playerid,u_SkinPlayerMenuTDforPlayer[playerid][3],u_SkinSlot[playerid][3]);
PlayerTextDrawShow(playerid, u_SkinPlayerMenuTDforPlayer[playerid][3]);
}
return 1;
}


в конец мода


// ===================== [ by Scooter ] =================
stock ReturnPlayerMenu(playerid,status)
{
// Если он в машине
if(IsPlayerInAnyVehicle(playerid)) return 1;
// Если он не активирован
if(status == 1)
{
TextDrawShowForPlayer(playerid,u_SkinPlayerMenuTD[0]); // Фон
TextDrawShowForPlayer(playerid,u_SkinPlayerMenuTD[1]); // Фон 2
TextDrawShowForPlayer(playerid,u_SkinPlayerMenuTD[2]); // Кнопка Close
TextDrawShowForPlayer(playerid,u_SkinPlayerMenuTD[3]); // Фон Дропа
TextDrawShowForPlayer(playerid,u_SkinPlayerMenuTD[4]); // Кнопка Дроп

new empty_skin = PlayerInfo[playerid][pSex] == 1 ? 154 : 140;
if(GetPlayerSkin(playerid) != empty_skin)
{
u_SkinSlot[playerid][0] = (PlayerInfo[playerid][pMember]) ? (PlayerInfo[playerid][pModel]) : (PlayerInfo[playerid][pChar]);
}
else u_SkinSlot[playerid][0] = empty_skin;
PlayerTextDrawSetPreviewModel(playerid,u_SkinPlayerMenuTDforPlayer[playerid][0],u_SkinSlot[playerid][0]);
PlayerTextDrawSetPreviewModel(playerid,u_SkinPlayerMenuTDforPlayer[playerid][1],u_SkinSlot[playerid][1]);
PlayerTextDrawSetPreviewModel(playerid,u_SkinPlayerMenuTDforPlayer[playerid][2],u_SkinSlot[playerid][2]);
PlayerTextDrawSetPreviewModel(playerid,u_SkinPlayerMenuTDforPlayer[playerid][3],u_SkinSlot[playerid][3]);

PlayerTextDrawShow(playerid,u_SkinPlayerMenuTDforPlayer[playerid][0]); // Основной
PlayerTextDrawShow(playerid,u_SkinPlayerMenuTDforPlayer[playerid][1]); // Слот 1
PlayerTextDrawShow(playerid,u_SkinPlayerMenuTDforPlayer[playerid][2]); // Слот 2
PlayerTextDrawShow(playerid,u_SkinPlayerMenuTDforPlayer[playerid][3]); // Слот 3

SelectTextDraw(playerid, 0xcfcfcfAA);
SetPVarInt(playerid,"u_SkinPlayerMenuTD_Active",1);
return 1;
}
// Иначе
TextDrawHideForPlayer(playerid,u_SkinPlayerMenuTD[0]); // Фон
TextDrawHideForPlayer(playerid,u_SkinPlayerMenuTD[1]); // Фон 2
TextDrawHideForPlayer(playerid,u_SkinPlayerMenuTD[2]); // Кнопка Close
TextDrawHideForPlayer(playerid,u_SkinPlayerMenuTD[3]); // Фон Дропа
TextDrawHideForPlayer(playerid,u_SkinPlayerMenuTD[4]); // Кнопка Дроп

PlayerTextDrawHide(playerid,u_SkinPlayerMenuTDforPlayer[playerid][0]); // Основной
PlayerTextDrawHide(playerid,u_SkinPlayerMenuTDforPlayer[playerid][1]); // Слот 1
PlayerTextDrawHide(playerid,u_SkinPlayerMenuTDforPlayer[playerid][2]); // Слот 2
PlayerTextDrawHide(playerid,u_SkinPlayerMenuTDforPlayer[playerid][3]); // Слот 3

CancelSelectTextDraw(playerid);
DeletePVar(playerid,"u_SkinPlayerMenuTD_Active");
return 1;
}



forward InTheShop(playerid,f);
public InTheShop(playerid,f)
{
#define M(%0) ProxDetector(20.0, playerid,%0,COLOR_FADE2,COLOR_FADE3,COLOR_FADE4,COLOR_FADE5)
switch(f)
{
case 0: M(SellerActSays[f][RandomEx(0,3)]),SetTimerEx("InTheShop",1800,false,"dd",playerid,f+1);
case 1: ApplyActorAnimation(u_skinshop_seller,"CARRY","crry_prtial",4.1,0,0,0,0,1),OnPlayerText(playerid,SellerActSays[f][RandomEx(0,3)]),SetTimerEx("InTheShop",2300,false,"dd",playerid,f+1);
case 2: ApplyAnimation(playerid, "BD_FIRE", "BD_Fire1", 4.1, 0, 0, 0, 0, 1, 1),ApplyActorAnimation(u_skinshop_seller, "PED","IDLE_CHAT", 4.1, 1, 1, 1, 1, 3),M(SellerActSays[f][RandomEx(0,3)]),SetTimerEx("InTheShop",1800,false,"dd",playerid,f+1);
case 3:
{
SetPlayerCameraPos(playerid,212.7066,-131.0801,1003.200);
SetPlayerCameraLookAt(playerid,214.3746,-127.8927,1003.5078,1);
ApplyActorAnimation(u_skinshop_seller,"CARRY","crry_prtial",4.1,0,0,0,0,1);
SetPlayerPos(playerid,214.3746,-127.8927,1003.5078);
SetPlayerFacingAngle(playerid,148.2331);
TogglePlayerControllable(playerid,false);
ReturnPlayerMenu(playerid,1);
SetPVarInt(playerid,"ShopTD_Active",1);
SendClientMessage(playerid, COLOR_BLUE,"Что-бы купить введите '/purch', отмена покупки: '/pcancel'");
for(new i = 0; i < sizeof u_SkinBuyMenuTD; i++)
{
if(i != 0) TextDrawSetPreviewModel(u_SkinBuyMenuTD[i],PlayerInfo[playerid][pSex] == 1 ? u_MenuSkinsMale[i] : u_MenuSkinsFemale[i]);
TextDrawShowForPlayer(playerid,u_SkinBuyMenuTD[i]);
}
}
}
#undef M
return 1;
}
ко всем текстдравам

// ====================== [ TD Buy by Scooter ] ========================= //
// Фон
u_SkinBuyMenuTD[0] = TextDrawCreate(404.500000, 136.644378, "LD_SPAC:white");
TextDrawLetterSize(u_SkinBuyMenuTD[0], 0.000000, 0.000000);
TextDrawTextSize(u_SkinBuyMenuTD[0], 172.000000, 130.666549);
TextDrawAlignment(u_SkinBuyMenuTD[0], 1);
TextDrawColor(u_SkinBuyMenuTD[0], -370605825);
TextDrawSetShadow(u_SkinBuyMenuTD[0], 0);
TextDrawSetOutline(u_SkinBuyMenuTD[0], 0);
TextDrawBackgroundColor(u_SkinBuyMenuTD[0], 0x00000000);
TextDrawFont(u_SkinBuyMenuTD[0], 4);
// Кнопки
u_SkinBuyMenuTD[1] = TextDrawCreate(407.000000, 140.266662, "PreviewModel");
u_SkinBuyMenuTD[2] = TextDrawCreate(440.500000, 140.022216, "PreviewModel");
u_SkinBuyMenuTD[3] = TextDrawCreate(474.000000, 140.399993, "PreviewModel");
u_SkinBuyMenuTD[4] = TextDrawCreate(507.500000, 140.155548, "PreviewModel");
u_SkinBuyMenuTD[5] = TextDrawCreate(541.000000, 140.533325, "PreviewModel");
u_SkinBuyMenuTD[6] = TextDrawCreate(421.000000, 181.977767, "PreviewModel");
u_SkinBuyMenuTD[7] = TextDrawCreate(454.500000, 181.733322, "PreviewModel");
u_SkinBuyMenuTD[8] = TextDrawCreate(488.500000, 182.111099, "PreviewModel");
u_SkinBuyMenuTD[9] = TextDrawCreate(522.000000, 181.866653, "PreviewModel");
u_SkinBuyMenuTD[10] = TextDrawCreate(407.000000, 223.933303, "PreviewModel");
u_SkinBuyMenuTD[11] = TextDrawCreate(440.500000, 223.688858, "PreviewModel");
u_SkinBuyMenuTD[12] = TextDrawCreate(474.500000, 223.444412, "PreviewModel");
u_SkinBuyMenuTD[13] = TextDrawCreate(508.500000, 223.822189, "PreviewModel");
u_SkinBuyMenuTD[14] = TextDrawCreate(542.500000, 222.955520, "PreviewModel");

for(new i = 1; i < sizeof u_SkinBuyMenuTD; i++)
{
//SelectedSlot[u_SkinBuyMenuTD[i]] = i;
TextDrawLetterSize(u_SkinBuyMenuTD[i], 0.000000, 0.000000);
TextDrawTextSize(u_SkinBuyMenuTD[i], 31.500000, 39.199943);
TextDrawAlignment(u_SkinBuyMenuTD[i], 1);
TextDrawColor(u_SkinBuyMenuTD[i], -1);
TextDrawSetShadow(u_SkinBuyMenuTD[i], 0);
TextDrawSetOutline(u_SkinBuyMenuTD[i], 0);
TextDrawBackgroundColor(u_SkinBuyMenuTD[i], -402677761);
TextDrawFont(u_SkinBuyMenuTD[i], 5);
TextDrawSetPreviewModel(u_SkinBuyMenuTD[i],0);
TextDrawSetPreviewRot(u_SkinBuyMenuTD[i], 0.000000, 0.000000, 0.000000, 1.000000);
TextDrawSetSelectable(u_SkinBuyMenuTD[i], true);
}
// ================= [ Одежда by Scooter ] ============
// Фон
u_SkinPlayerMenuTD[0] = TextDrawCreate(23.500000, 138.755554, "LD_SPAC:white");
TextDrawLetterSize(u_SkinPlayerMenuTD[0], 0.000000, 0.000000);
TextDrawTextSize(u_SkinPlayerMenuTD[0], 107.000000, 154.311019);
TextDrawAlignment(u_SkinPlayerMenuTD[0], 1);
TextDrawColor(u_SkinPlayerMenuTD[0], -370605825);
TextDrawSetShadow(u_SkinPlayerMenuTD[0], 0);
TextDrawSetOutline(u_SkinPlayerMenuTD[0], 0);
TextDrawBackgroundColor(u_SkinPlayerMenuTD[0], 0x00000000);
TextDrawFont(u_SkinPlayerMenuTD[0], 4);

// Фон 2
u_SkinPlayerMenuTD[1] = TextDrawCreate(27.000000, 295.311187, "LD_SPAC:white");
TextDrawLetterSize(u_SkinPlayerMenuTD[1], 0.000000, 0.000000);
TextDrawTextSize(u_SkinPlayerMenuTD[1], 99.500000, 23.644292);
TextDrawAlignment(u_SkinPlayerMenuTD[1], 1);
TextDrawColor(u_SkinPlayerMenuTD[1], -370605825);
TextDrawSetShadow(u_SkinPlayerMenuTD[1], 0);
TextDrawSetOutline(u_SkinPlayerMenuTD[1], 0);
TextDrawBackgroundColor(u_SkinPlayerMenuTD[1], 0x00000000);
TextDrawFont(u_SkinPlayerMenuTD[1], 4);
TextDrawSetSelectable(u_SkinPlayerMenuTD[1], true);

// Кнопка Закрыть
u_SkinPlayerMenuTD[2] = TextDrawCreate(47.000000, 299.288879, "close");
TextDrawLetterSize(u_SkinPlayerMenuTD[2], 0.449999, 1.600000);
TextDrawAlignment(u_SkinPlayerMenuTD[2], 1);
TextDrawColor(u_SkinPlayerMenuTD[2], -1);
TextDrawSetShadow(u_SkinPlayerMenuTD[2], 0);
TextDrawSetOutline(u_SkinPlayerMenuTD[2], 1);
TextDrawBackgroundColor(u_SkinPlayerMenuTD[2], 51);
TextDrawFont(u_SkinPlayerMenuTD[2], 2);
TextDrawSetProportional(u_SkinPlayerMenuTD[2], 1);
TextDrawSetSelectable(u_SkinPlayerMenuTD[2], true);

// Фон дропа
u_SkinPlayerMenuTD[3] = TextDrawCreate(27.000000, 320.000000, "LD_SPAC:white");
TextDrawLetterSize(u_SkinPlayerMenuTD[3], 0.000000, 0.000000);
TextDrawTextSize(u_SkinPlayerMenuTD[3], 99.500000, 23.644292);
TextDrawAlignment(u_SkinPlayerMenuTD[3], 1);
TextDrawColor(u_SkinPlayerMenuTD[3], -370605825);
TextDrawSetShadow(u_SkinPlayerMenuTD[3], 0);
TextDrawSetOutline(u_SkinPlayerMenuTD[3], 0);
TextDrawBackgroundColor(u_SkinPlayerMenuTD[3], 0x00000000);
TextDrawFont(u_SkinPlayerMenuTD[3], 4);
TextDrawSetSelectable(u_SkinPlayerMenuTD[3], true);

// Дроп
u_SkinPlayerMenuTD[4] = TextDrawCreate(46.500000, 323.933349, "drope");
TextDrawLetterSize(u_SkinPlayerMenuTD[4], 0.449999, 1.600000);
TextDrawAlignment(u_SkinPlayerMenuTD[4], 1);
TextDrawColor(u_SkinPlayerMenuTD[4], -1);
TextDrawSetShadow(u_SkinPlayerMenuTD[4], 0);
TextDrawSetOutline(u_SkinPlayerMenuTD[4], 1);
TextDrawBackgroundColor(u_SkinPlayerMenuTD[4], 51);
TextDrawFont(u_SkinPlayerMenuTD[4], 2);
TextDrawSetProportional(u_SkinPlayerMenuTD[4], 1);
TextDrawSetSelectable(u_SkinPlayerMenuTD[4], true);

к другим текстдравам для игроков

// ============= Система одежд by Scooter
u_SkinPlayerMenuTDforPlayer[playerid][0] = CreatePlayerTextDraw(playerid, 27.000000, 141.866668, "PreviewModel"); // Основной
u_SkinPlayerMenuTDforPlayer[playerid][1] = CreatePlayerTextDraw(playerid, 28.000000, 248.644500, "PreviewModel"); // Слот 1
u_SkinPlayerMenuTDforPlayer[playerid][2] = CreatePlayerTextDraw(playerid, 61.500000, 248.400054, "PreviewModel"); // Слот 2
u_SkinPlayerMenuTDforPlayer[playerid][3] = CreatePlayerTextDraw(playerid, 95.000000, 248.777832, "PreviewModel"); // Слот 3
for(new i = 0; i != 4; i++)
{
PlayerTextDrawTextSize(playerid, u_SkinPlayerMenuTDforPlayer[playerid][i],(i == 0) ? (99.500000) : (31.500000), (i == 0) ? (96.444442) : (39.199943));
PlayerTextDrawLetterSize(playerid, u_SkinPlayerMenuTDforPlayer[playerid][i], 0.000000, 0.000000);
PlayerTextDrawAlignment(playerid, u_SkinPlayerMenuTDforPlayer[playerid][i], 1);
PlayerTextDrawColor(playerid, u_SkinPlayerMenuTDforPlayer[playerid][i], -1);
PlayerTextDrawSetShadow(playerid, u_SkinPlayerMenuTDforPlayer[playerid][i], 0);
PlayerTextDrawSetOutline(playerid, u_SkinPlayerMenuTDforPlayer[playerid][i], 0);
PlayerTextDrawBackgroundColor(playerid, u_SkinPlayerMenuTDforPlayer[playerid][i],0xcfcfcfAA);
PlayerTextDrawFont(playerid, u_SkinPlayerMenuTDforPlayer[playerid][i], 5);
PlayerTextDrawSetPreviewModel(playerid, u_SkinPlayerMenuTDforPlayer[playerid][i], 0);
PlayerTextDrawSetPreviewRot(playerid, u_SkinPlayerMenuTDforPlayer[playerid][i], 0.000000, 0.000000, 0.000000, 1.000000);
PlayerTextDrawSetSelectable(playerid, u_SkinPlayerMenuTDforPlayer[playerid][i], true);
}

в OnPlayerKeyStateChange


if(oldkeys & KEY_YES)
{
ReturnPlayerMenu(playerid,1);
}
if(oldkeys & KEY_SECONDARY_ATTACK)
{
if(PlayerInfo[playerid][pInt])
{
if(IsPlayerInRangeOfPoint(playerid,2.0,207.0940,-129.1801,1003.5078))
{
if(PlayerInfo[playerid][pCash] < 3000) return SendClientMessage(playerid,COLOR_ADM,"[Ошибка] Вам нужно $3000");
if(u__inorder4 != INVALID_PLAYER_ID) return SendClientMessage(playerid,COLOR_LIGHTRED,"Пожалуйста, подождите ...");
SetPlayerPos(playerid,207.0940,-129.1801,1003.5078);
u__inorder4 = playerid;
ApplyActorAnimation(u_skinshop_seller, "PED","IDLE_CHAT", 4.1, 1, 1, 1, 1, 3);
return InTheShop(playerid,0);
}
}
}

где данные игрока очищаются


u_SkinSlot[playerid][0] = 0;
u_SkinSlot[playerid][1] = u_SkinSlot[playerid][2] = u_SkinSlot[playerid][3] = 19374;
u_SelectedSkin[playerid] = -1;
команды


CMD:purch(playerid)
{
if(GetPVarInt(playerid,"ShopTD_Active") == 1)
{
for(new i = 0; i < sizeof u_SkinBuyMenuTD; i++)
{
TextDrawHideForPlayer(playerid,u_SkinBuyMenuTD[i]);
}
GameTextForPlayer(playerid,"~r~-$3000", 3000, 1);
PlayerInfo[playerid][pCash] -= 3000;
ReturnPlayerMenu(playerid,0);
new skin = GetPlayerSkin(playerid);
u_SkinSlot[playerid][0] = skin;
SetPlayerSkin(playerid,skin);
TogglePlayerControllable(playerid,true);
SetCameraBehindPlayer(playerid);
u__inorder4 = INVALID_PLAYER_ID;
DeletePVar(playerid,"ShopTD_Active");
}
return 1;
}
CMD:pcancel(playerid)
{
if(GetPVarInt(playerid,"ShopTD_Active") == 1)
{
for(new i = 0; i < sizeof u_SkinBuyMenuTD; i++)
{
TextDrawHideForPlayer(playerid,u_SkinBuyMenuTD[i]);
}
ReturnPlayerMenu(playerid,0);
TogglePlayerControllable(playerid,true);
SetCameraBehindPlayer(playerid);
u__inorder4 = INVALID_PLAYER_ID;
u_SkinSlot[playerid][0] = PlayerInfo[playerid][pSex] == 1 ? 154 : 140;
SetPlayerSkin(playerid,u_SkinSlot[playerid][0]);
DeletePVar(playerid,"ShopTD_Active");
}
return 1;
}


http://ihost.pro-pawn.ru/image.php?di=PB6B
http://ihost.pro-pawn.ru/image.php?di=PU4N


Автор - Scooter

Если что-то забыл - скажите об этом
И создание TD должна быть первой. В начале, что-бы ID TD было 0-1. Тогда глюков не будет.

Daniel_Cortez
22.05.2016, 14:42
Автор - Scooter
Разрешение от Scooter на публикацию его кода здесь?

Unreal
22.05.2016, 16:55
Разрешение от Scooter на публикацию его кода здесь?

Да, есть

TheMallard
22.05.2016, 19:45
seller - не уникальное имя. Продавцов может быть много, в разных местах.

Unreal
22.05.2016, 21:26
seller - не уникальное имя. Продавцов может быть много, в разных местах.

хорошо, сейчас подправлю

TheMallard
23.05.2016, 07:36
bot_seller - не уникальное имя. М. б. skinshop_seller?

Unreal
23.05.2016, 11:40
bot_seller - не уникальное имя. М. б. skinshop_seller?

ну ладно

Иван Бубнов
23.05.2016, 19:10
Скриншот текстдравов скинь пожалуйста

Battista
24.05.2016, 03:21
Это мол типо инвентарь с одеждой?

Иван Бубнов
24.05.2016, 15:23
Это мол типо инвентарь с одеждой?

самому интересно

Daniel_Cortez
24.05.2016, 21:37
Это я сам, просто на другом портале
Вы находитесь на Pro-Pawn, а не на каком-то "другом портале", поэтому будьте добры, указывайте ник, который у вас на этом форуме.
Либо можете попросить меня или Osetin'а сменить вам ник, здесь это бесплатно.

Теперь по поводу кода.
Если ваш код критикуют, старайтесь вникнуть в суть критики, понять, в чём заключается недостаток, на который вам указывают - возможно он в вашей работе не один.
TheMallard уже правильно подметил, что название "seller" не уникальное - видимо рассчитывал, что вы поймёте, что у других переменных точно такие же неуникальные названия (в чужом моде наверняка могут найтись и какие-нибудь другие "PlayerMenuTD" или "BuyMenu"), но вы послушно сделали только то, о чём вас попросили, и ни грамма больше.

Вот вам небольшая задача. В моде есть 5 переменных:


new action[MAX_PLAYERS];
new pickup;
new selected[MAX_PLAYERS char];
new uses[MAX_PLAYERS char];
new object[MAX_PLAYERS];

Определите по названию, какая из них (только одна) относится к системе работы лесоруба.

Надеюсь, сможете сделать из этого какие-нибудь выводы.

arzumanov
08.06.2016, 04:46
// ===================== [ by Scooter ] =================
stock ReturnPlayerMenu(playerid,status)
{
// Если он в машине
if(IsPlayerInAnyVehicle(playerid)) return 1;
// Если он не активирован
if(status == 1)
{
TextDrawShowForPlayer(playerid,u_SkinPlayerMenuTD[0]); // Фон
TextDrawShowForPlayer(playerid,u_SkinPlayerMenuTD[1]); // Фон 2
TextDrawShowForPlayer(playerid,u_SkinPlayerMenuTD[2]); // Кнопка Close
TextDrawShowForPlayer(playerid,u_SkinPlayerMenuTD[3]); // Фон Дропа
TextDrawShowForPlayer(playerid,u_SkinPlayerMenuTD[4]); // Кнопка Дроп

new empty_skin = PlayerInfo[playerid][pSex] == 1 ? 154 : 140;
if(GetPlayerSkin(playerid) != empty_skin)
{
u_SkinSlot[playerid][0] = (PlayerInfo[playerid][pMember]) ? (PlayerInfo[playerid][pModel]) : (PlayerInfo[playerid][pChar]);
}
else u_SkinSlot[playerid][0] = empty_skin;
PlayerTextDrawSetPreviewModel(playerid,u_SkinPlayerMenuTDforPlayer[playerid][0],u_SkinSlot[playerid][0]);
PlayerTextDrawSetPreviewModel(playerid,u_SkinPlayerMenuTDforPlayer[playerid][1],u_SkinSlot[playerid][1]);
PlayerTextDrawSetPreviewModel(playerid,u_SkinPlayerMenuTDforPlayer[playerid][2],u_SkinSlot[playerid][2]);
PlayerTextDrawSetPreviewModel(playerid,u_SkinPlayerMenuTDforPlayer[playerid][3],u_SkinSlot[playerid][3]);

PlayerTextDrawShow(playerid,u_SkinPlayerMenuTDforPlayer[playerid][0]); // Основной
PlayerTextDrawShow(playerid,u_SkinPlayerMenuTDforPlayer[playerid][1]); // Слот 1
PlayerTextDrawShow(playerid,u_SkinPlayerMenuTDforPlayer[playerid][2]); // Слот 2
PlayerTextDrawShow(playerid,u_SkinPlayerMenuTDforPlayer[playerid][3]); // Слот 3

SelectTextDraw(playerid, 0xcfcfcfAA);
SetPVarInt(playerid,"u_SkinPlayerMenuTD_Active",1);
return 1;
}
// Иначе
TextDrawHideForPlayer(playerid,u_SkinPlayerMenuTD[0]); // Фон
TextDrawHideForPlayer(playerid,u_SkinPlayerMenuTD[1]); // Фон 2
TextDrawHideForPlayer(playerid,u_SkinPlayerMenuTD[2]); // Кнопка Close
TextDrawHideForPlayer(playerid,u_SkinPlayerMenuTD[3]); // Фон Дропа
TextDrawHideForPlayer(playerid,u_SkinPlayerMenuTD[4]); // Кнопка Дроп

PlayerTextDrawHide(playerid,u_SkinPlayerMenuTDforPlayer[playerid][0]); // Основной
PlayerTextDrawHide(playerid,u_SkinPlayerMenuTDforPlayer[playerid][1]); // Слот 1
PlayerTextDrawHide(playerid,u_SkinPlayerMenuTDforPlayer[playerid][2]); // Слот 2
PlayerTextDrawHide(playerid,u_SkinPlayerMenuTDforPlayer[playerid][3]); // Слот 3

CancelSelectTextDraw(playerid);
DeletePVar(playerid,"u_SkinPlayerMenuTD_Active");
return 1;
}



Думаю так будет лучше


// ===================== [ by Scooter ] =================
stock ReturnPlayerMenu(playerid,status)
{
// Если он в машине
if(IsPlayerInAnyVehicle(playerid)) return 1;
// Если он не активирован
if(status == 1)
{
new empty_skin = PlayerInfo[playerid][pSex] == 1 ? 154 : 140;
if(GetPlayerSkin(playerid) != empty_skin)
{
u_SkinSlot[playerid][0] = (PlayerInfo[playerid][pMember]) ? (PlayerInfo[playerid][pModel]) : (PlayerInfo[playerid][pChar]);
}
else u_SkinSlot[playerid][0] = empty_skin;

for(new i; i<5; i++)
{
TextDrawShowForPlayer(playerid,u_SkinPlayerMenuTD[i]);
if(i < 4)
{
PlayerTextDrawSetPreviewModel(playerid,u_SkinPlayerMenuTDforPlayer[playerid][i],u_SkinSlot[playerid][i]);
PlayerTextDrawShow(playerid,u_SkinPlayerMenuTDforPlayer[playerid][i]);
}
}

SelectTextDraw(playerid, 0xcfcfcfAA);
SetPVarInt(playerid,"u_SkinPlayerMenuTD_Active",1);
return 1;
}
// Иначе
for(new i; i<5; i++)
{
TextDrawHideForPlayer(playerid,u_SkinPlayerMenuTD[i]);
if(i < 4) PlayerTextDrawHide(playerid,u_SkinPlayerMenuTDforPlayer[playerid][i]); // Основной
}

CancelSelectTextDraw(playerid);
DeletePVar(playerid,"u_SkinPlayerMenuTD_Active");
return 1;
}


P.S. Вообще не похоже на мануал, это скорее просто готовое решение.

TheMallard
09.06.2016, 16:48
У нас готовое решение называется мануалом, а мануал уроком.

Unreal
09.06.2016, 16:58
У нас готовое решение называется мануалом, а мануал уроком.

а разве есть такой раздел ? готовое решение?

arzumanov
10.06.2016, 02:26
а разве есть такой раздел ? готовое решение?

тут это называется "Разработки".


У нас готовое решение называется мануалом, а мануал уроком.

мануал и урок - практически синонимы. отличий нет.

DeimoS
19.06.2016, 09:47
мануал и урок - практически синонимы. отличий нет.

Как "RP" и "RPG". Только вот в SA-MP они приобрели свой смысл. Так же и с "Мануал/Урок"