Portal SAMP
[Ajuda] enum cm matriz - Versão de Impressão

+- Portal SAMP (https://portalsamp.com)
+-- Fórum: SA-MP (https://portalsamp.com/forumdisplay.php?fid=5)
+--- Fórum: Área de suporte (https://portalsamp.com/forumdisplay.php?fid=6)
+--- Tópico: [Ajuda] enum cm matriz (/showthread.php?tid=4082)



enum cm matriz - Klaba - 15/10/2023

Olá amigos. Eu queria fazer um sistema de concessionária, mas cada carro tem seu preço, então tentei fazer isso:
Código:
enum CONCE_LS1
{
    vehmodel[][] =
    {
        {605, 300},
        {604, 300},
        {404, 500},
        {479, 550},
        {542, 400},
        {445, 700},
        {517, 750}
    }
}
não seu certo... Eu queria pegar o ID do carro, e dizer seu preço. Exemplo: 411 (infernus) é $100000. Como posso fazer isto?

Queria saber como ficaria o script se fosse num txt...
Também queria entender a lógica por trás da maneira mais apropriada de se fazer


RE: enum cm matriz - leonardos08bt - 16/10/2023

Vai criar em mSelection ou em diálog/textdraw?

( Uma opção: mSelection é muito bom pra criar isso além de ser muito mais fácil para desenvolver uma conce ou algo do tipo (minha opinião) )

OBS: mSelection é uma include que utiliza se textdraw mas é melhor do que criar uma textdraw (na minha opinião). Mas é de 2013 [bem ultrapassado]...

Eu digo que o mSelection é bom por sua simplicidade (feito pelo Kalcor).
Também possui uma opção ainda melhor que é a include eSelection.

/--\
Se for criar em mSelection:

Código:
#include <a_samp>
#include <mSelection> // DOWNLOAD: https://github.com/blint96/mysantos-main/blob/master/pawno/include/mSelection.inc

enum{//Dialogs
    Dialog_Conce,
}

new VehicleName[212][] =
{
   {"Landstalker"},{"Bravura"},{"Buffalo"},{"Linerunner"},{"Perrenial"},{"Sentinel"},{"Dumper"},
   {"Firetruck"},{"Trashmaster"},{"Stretch"},{"Manana"},{"Infernus"},{"Voodoo"},{"Pony"},{"Mule"},
   {"Cheetah"},{"Ambulance"},{"Leviathan"},{"Moonbeam"},{"Esperanto"},{"Taxi"},{"Washington"},
   {"Bobcat"},{"Mr Whoopee"},{"BF Injection"},{"Hunter"},{"Premier"},{"Enforcer"},{"Securicar"},
   {"Banshee"},{"Predator"},{"Bus"},{"Rhino"},{"Barracks"},{"Hotknife"},{"Trailer 1"},{"Previon"},
   {"Coach"},{"Cabbie"},{"Stallion"},{"Rumpo"},{"RC Bandit"},{"Romero"},{"Packer"},{"Monster"},
   {"Admiral"},{"Squalo"},{"Seasparrow"},{"Pizzaboy"},{"Tram"},{"Trailer 2"},{"Turismo"},
   {"Speeder"},{"Reefer"},{"Tropic"},{"Flatbed"},{"Yankee"},{"Caddy"},{"Solair"},{"Berkley's RC Van"},
   {"Skimmer"},{"PCJ-600"},{"Faggio"},{"Freeway"},{"RC Baron"},{"RC Raider"},{"Glendale"},{"Oceanic"},
   {"Sanchez"},{"Sparrow"},{"Patriot"},{"Quad"},{"Coastguard"},{"Dinghy"},{"Hermes"},{"Sabre"},
   {"Rustler"},{"ZR-350"},{"Walton"},{"Regina"},{"Comet"},{"BMX"},{"Burrito"},{"Camper"},{"Marquis"},
   {"Baggage"},{"Dozer"},{"Maverick"},{"News Chopper"},{"Rancher"},{"FBI Rancher"},{"Virgo"},{"Greenwood"},
   {"Jetmax"},{"Hotring"},{"Sandking"},{"Blista Compact"},{"Police Maverick"},{"Boxville"},{"Benson"},
   {"Mesa"},{"RC Goblin"},{"Hotring Racer A"},{"Hotring Racer B"},{"Bloodring Banger"},{"Rancher"},
   {"Super GT"},{"Elegant"},{"Journey"},{"Bike"},{"Mountain Bike"},{"Beagle"},{"Cropdust"},{"Stunt"},
   {"Tanker"}, {"Roadtrain"},{"Nebula"},{"Majestic"},{"Buccaneer"},{"Shamal"},{"Hydra"},{"FCR-900"},
   {"NRG-500"},{"HPV1000"},{"Cement Truck"},{"Tow Truck"},{"Fortune"},{"Cadrona"},{"FBI Truck"},
   {"Willard"},{"Forklift"},{"Tractor"},{"Combine"},{"Feltzer"},{"Remington"},{"Slamvan"},
   {"Blade"},{"Freight"},{"Streak"},{"Vortex"},{"Vincent"},{"Bullet"},{"Clover"},{"Sadler"},
   {"Firetruck LA"},{"Hustler"},{"Intruder"},{"Primo"},{"Cargobob"},{"Tampa"},{"Sunrise"},{"Merit"},
   {"Utility"},{"Nevada"},{"Yosemite"},{"Windsor"},{"Monster A"},{"Monster B"},{"Uranus"},{"Jester"},
   {"Sultan"},{"Stratum"},{"Elegy"},{"Raindance"},{"RC Tiger"},{"Flash"},{"Tahoma"},{"Savanna"},
   {"Bandito"},{"Freight Flat"},{"Streak Carriage"},{"Kart"},{"Mower"},{"Duneride"},{"Sweeper"},
   {"Broadway"},{"Tornado"},{"AT-400"},{"DFT-30"},{"Huntley"},{"Stafford"},{"BF-400"},{"Newsvan"},
   {"Tug"},{"Trailer 3"},{"Emperor"},{"Wayfarer"},{"Euros"},{"Hotdog"},{"Club"},{"Freight Carriage"},
   {"Trailer 3"},{"Andromada"},{"Dodo"},{"RC Cam"},{"Launch"},{"Police Car (LSPD)"},{"Police Car (SFPD)"},
   {"Police Car (LVPD)"},{"Police Ranger"},{"Picador"},{"S.W.A.T. Van"},{"Alpha"},{"Phoenix"},{"Glendale"},
   {"Sadler"},{"Luggage Trailer A"},{"Luggage Trailer B"},{"Stair Trailer"},{"Boxville"},{"Farm Plow"},
   {"Utility Trailer"}
};

new conce_list = mS_INVALID_LISTID;

public OnGamemodeInit()
{
    conce_list = LoadModelSelectionMenu("conce.txt");
    return 1;
}

public OnPlayerModelSelection(playerid, response, listid, modelid)
{
    if(response)
    {
        //if(listid == lista)
        if(listid == conce_list)
        {
            new info[256]; format(info, sizeof(info), "\
            Você deseja comprar este veículo?\n\
            \n\
            Nome do Veiculo: %s\n\
            Preco do Veiculo: %d", VehicleName[modelid - 400], GetVehiclePrice(modelid));
            ShowPlayerDialog(playerid, Dialog_Conce, DIALOG_STYLE_MSGBOX, "Concessionária", info, "Comprar", "Cancelar");
            SetPVarInt(playerid, "ComprandoVeiculo", modelid);
        }
    }
    return 1;
}

public OnPlayerConnect(playerid)
{
    SetPVarInt(playerid, "ComprandoVeiculo", -1);
    return 1;
}

public OnPlayerDisconnect(playerid)
{
    SetPVarInt(playerid, "ComprandoVeiculo", -1);
    return 1;
}

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    switch(dialogid)
    {
        case Dialog_Conce:
        {
            if(!response) return SetPVarInt(playerid, "ComprandoVeiculo", -1);
            else
            {
                new vehicleid = GetPVarInt(playerid, "ComprandoVeiculo"); //vehicleid armazena o id do veiculo que o jogador está interagindo.

                if(GetVehiclePrice(vehicleid) == -1) return 1; //Valor do veículo invalido.
                if(GetPlayerMoney(playerid) < GetVehiclePrice(vehicleid)) //Jogador não tem dinheiro.
                    return SetPVarInt(playerid, "ComprandoVeiculo", -1), SendClientMessage(playerid, -1, "Você não possuí dinheiro suficiente.");
                
                //----- Sete o Veiculo -----//
                new Float:Pos[4];
                GetPlayerPos(playerid, Pos[0], Pos[1], Pos[2]); GetPlayerFacingAngle(playerid, Pos[3]);
                CreateVehicle(vehicleid, Pos[0], Pos[1], Pos[2], Pos[3], -1, -1, -1);

                new info[121]; format(info, sizeof(info), "Você comprou um %s por R$%d", VehicleName[vehicleid - 400], GetVehiclePrice(vehicleid));
                GivePlayerMoney(playerid, -GetVehiclePrice(vehicleid));
                SendClientMessage(playerid, -1, info);
                SetPVarInt(playerid, "ComprandoVeiculo", -1);
                return 1;
            }
        }
    }
    return 1;
}

stock GetVehiclePrice(vehicleid)
{
    new price;
    switch(vehicleid)
    {
        case 411: price = 10000;
        case 521: price = 20000;
        //case ID_VEICULO: price = :VALOR

        default: price = -1; //Caso não seja nenhum dos veículos acima, o valor é indefinido/inválido.
    }
    return price;
}

e no arquivo "conce.txt" em seu scriptfiles você adiciona os id's dos veículos que irão aparecer na lista.
Código:
411 0.0 0.0 -45.0
522 0.0 0.0 -45.0
Lembrando que "modelid rotX rotY rotZ".


Imagem de como é o mSelection:


RE: enum cm matriz - pushline - 16/10/2023

mSelection é defasado, de 2013 e feito pelo Kalcor (o maluco da minha foto), ou seja, ruim.
Use o eSelection que é do TommyB, um dos beta-testers do SA-MP antes de ser expulso pelo próprio Kalcor da equipe.
Link - https://github.com/TommyB123/eSelection
Ele necessita do plugin PawnPlus pra funcionar, por que ele requer listas, e o pawnplus oferece isto.