[Tutorial] Sistema de skin com mSelection
#1

Olб,

Bom, aqui neste tуpico irei criar um simples tutorial de como criar um sistema de skin com a include mSelection. Creio que ela seja boa tanto como para servidor RP/G tanto para MATA-MATA.

Demo:
http://prntscr.com/1dsw4g

Vocк pode usar esse sistema como exemplo e aprimorar para seu servidor, utilizando ele como um menu para binco / zip com cada um menu com um tipo de skin.

pawn Код:
#include <a_samp> // nгo hб oque explicar.
#include <mSelection> // include que utilizaremos para fazer o sistema de skin
#include <ZCMD> // Processador de comandos utilizado no sistema

new skinlist = mS_INVALID_LISTID;
public OnFilterScriptInit()
{ // abrindo a chave
    skinlist = LoadModelSelectionMenu("skins.txt"); // nesta funзгo quando o sistema for iniciado ele irб carregar oque ta dentro da skins.txt
    return 1; // na skin.txt localiza em scriptfiles vocк pode Adicionar / retirar o ID de skin que vocк quiser, assim fazendo do seu jeito.
} // fechando a chave

CMD:skin(playerid) // comando /skin para mostrar o menu
{ // abrindo a chave do cmd
        ShowModelSelectionMenu(playerid, skinlist, "Menu de Skin"); // aqui mostrarб o menu de skin e em "Menu de Skin" vocк bota o nome desejado  para aparecer como titulo
        return 1; // retornando o comando. Sem ele virб a mensage
} // fechamento da chave do cmd
   

public OnPlayerModelSelection(playerid, response, listid, modelid) // public da include MSelection, esta public quando vocк clicar em um item serб executada uma funзгo.
{//abrimento da chave da public
    if(listid == skinlist) // essa й a listid da skinlist ( skinlist = LoadModelSelectionMenu("skin.txt");
    {//chave aberta
        if(response)
        if(GetPlayerMoney(playerid) >=  500) // essa funзгo irб checar se o dinheiro do player й maior ou igual a 500 se nгo executarб o else abaixo
        {//abre chave
            SendClientMessage(playerid, -1, "[ > ] Vocк optou por uma nova skin"); // se a funзгo acima for executada  o servidor enviarб esta mensagem ao player dizendo que ele comprou a skin
            GivePlayerMoney(playerid, -500); // Essa funзгo irб retirar $500 do player quando ele clicar na skin desejada
            SetPlayerSkin(playerid, modelid); // Aqui irб setar a skin do player quando ele comprar ela.
        }//fecha chave
        else
        {//abre chave
            SendClientMessage(playerid, 0xFF0000FF, " [ x ] Vocк precisa de $500 para obter uma nova skin");//se o player nao tiver 500$ esse else enviarб essa mensagem ao player
        }// fecha chave
        else SendClientMessage(playerid, 0xFF0000FF, "[ x ] Vocк decidiu fechar o menu de skin.");// quando o player clicar em Cancelar para fechar o menu, o server enviarб esta mensagem ao player.
       
        return 1;// retornando true/verdadeiro
    }//chave fechada
    return 1; // retornando true/verdadeiro
}//fechamento da chave da public
Bom, atravйs de um post do @iMega eu decidi atualizar o tutorial.


Vamos lб..


No arquivo skins.txt ou o arquivo de seu nome que vocк colocou й possнvel colocar outros objetos.
Como Ex: Rodas, aerofуlios, veнculos e etc..

Existe algumas formas de colocar o arquivo, que sгo essas:

MODELID Rotaзгo:X Rotaзгo:Y Rotaзгo:Z

Ex:
pawn Код:
1000 0.0
1000 0.0 0.1 0.2
1000
Se vocк colocar dessa forma acima, nгo irб funcionar. Isso quer dizer que na hora de mostrar o menu, ele nгo serб mostrado.
A forma correta seria:
pawn Код:
1000
1000 0.0 0.1 0.2
1000
Conclusгo: 1: http://prntscr.com/1efby4
pawn Код:
1000: // ID do objeto / veнculo / componente
0.0: // Rotaзгo X
0.1: // Rotaзгo Y
0.2: // Rotaзгo Z
Vamos ao segundo exemplo que seria o menu de rodas.
rodas.txt:
pawn Код:
1073 0.0 .0 90.0
1074 0.0 .0 90.0
1075 0.0 .0 90.0
1076 0.0 .0 90.0
1077 0.0 .0 90.0
1078 0.0 .0 90.0
1079 0.0 .0 90.0
1080 0.0 .0 90.0
1081 0.0 .0 90.0
1082 0.0 .0 90.0
  // Vejam o exemplo na imagem abaixo se vocкs deixarem essa linha vazia.
Conclusгo: http://prntscr.com/1efd4j

Vejam que na imagem ficou o CJ, porque no caso abaixo do modelid 1082 eu deixei um espaзo em "branco" que no caso foi considerado como " 0 " que o ID da skin do CJ.

@Crйditos

mSelection - d0 tуpico: mSelection 1.1
Tуpico - Coe1.

O script/exemplo utilizado para explicar as funзхes й de autoria do D0. ( O script encontra-se no tуpico da include. )

Crнticas ? Pode falar para que o prуximo tуpico saia melhor.

Obrigado.


@Tуpico atualizado.
Reply
#2

Fico bom +REP eu gostei
Reply
#3

Quote:
Originally Posted by Coe1
Посмотреть сообщение
pawn Код:
#include <a_samp> // nгo hб oque explicar.
#include <mSelection> // include que utilizaremos para fazer o sistema de skin
#include <ZCMD> // Processador de comandos utilizado no sistema

new skinlist = mS_INVALID_LISTID;
public OnFilterScriptInit()
{ // abrindo a chave
    skinlist = LoadModelSelectionMenu("skins.txt"); // nesta funзгo quando o sistema for iniciado ele irб carregar oque ta dentro da skins.txt
    return 1; // na skin.txt localiza em scriptfiles vocк pode Adicionar / retirar o ID de skin que vocк quiser, assim fazendo do seu jeito.
} // fechando a chave

CMD:skin(playerid) // comando /skin para mostrar o menu
{ // abrindo a chave do cmd
        ShowModelSelectionMenu(playerid, skinlist, "Menu de Skin"); // aqui mostrarб o menu de skin e em "Menu de Skin" vocк bota o nome desejado  para aparecer como titulo
        return 1; // retornando o comando. Sem ele virб a mensage
} // fechamento da chave do cmd
   

public OnPlayerModelSelection(playerid, response, listid, modelid) // public da include MSelection, esta public quando vocк clicar em um item serб executada uma funзгo.
{//abrimento da chave da public
    if(listid == skinlist) // essa й a listid da skinlist ( skinlist = LoadModelSelectionMenu("skin.txt");
    {//chave aberta
        if(response)
        if(GetPlayerMoney(playerid) >=  500) // essa funзгo irб checar se o dinheiro do player й maior ou igual a 500 se nгo executarб o else abaixo
        {//abre chave
            SendClientMessage(playerid, -1, "[ > ] Vocк optou por uma nova skin"); // se a funзгo acima for executada  o servidor enviarб esta mensagem ao player dizendo que ele comprou a skin
            GivePlayerMoney(playerid, -500); // Essa funзгo irб retirar $500 do player quando ele clicar na skin desejada
            SetPlayerSkin(playerid, modelid); // Aqui irб setar a skin do player quando ele comprar ela.
        }//fecha chave
        else
        {//abre chave
            SendClientMessage(playerid, 0xFF0000FF, " [ x ] Vocк precisa de $500 para obter uma nova skin");//se o player nao tiver 500$ esse else enviarб essa mensagem ao player
        }// fecha chave
        else SendClientMessage(playerid, 0xFF0000FF, "[ x ] Vocк decidiu fechar o menu de skin.");// quando o player clicar em Cancelar para fechar o menu, o server enviarб esta mensagem ao player.
       
        return 1;// retornando true/verdadeiro
    }//chave fechada
    return 1; // retornando true/verdadeiro
}//fechamento da chave da public
Quote:
Originally Posted by d0
Посмотреть сообщение
Example Script

Example #1 Static Lists
Scriptfiles: planes.txt - skins.txt
pawn Код:
#include <a_samp>
#include <mSelection>

new planelist = mS_INVALID_LISTID;
new skinlist = mS_INVALID_LISTID;
public OnFilterScriptInit()
{
    planelist = LoadModelSelectionMenu("planes.txt");
    skinlist = LoadModelSelectionMenu("skins.txt");
    return 1;
}

public OnPlayerCommandText(playerid, cmdtext[])
{
    if(strcmp(cmdtext, "/plane", true) == 0)
    {
        ShowModelSelectionMenu(playerid, planelist, "->Planes<-");
        return 1;
    }
    if(strcmp(cmdtext, "/changeskin", true) == 0)
    {
        ShowModelSelectionMenu(playerid, skinlist, "Select Skin");
        return 1;
    }
    return 0;
}

public OnPlayerModelSelection(playerid, response, listid, modelid)
{
    if(listid == planelist)
    {
        if(response)
        {
            SendClientMessage(playerid, 0xFF0000FF, "Plane Spawned");
            new Float:pos[3]; GetPlayerPos(playerid, pos[0], pos[1], pos[2]);
            CreateVehicle(modelid, pos[0] + 2.5, pos[1], pos[2] + 2.5, 0.0, random(128), random(128), -1);
        }
        else SendClientMessage(playerid, 0xFF0000FF, "Canceled plane selection");
        return 1;
    }
    if(listid == skinlist)
    {
        if(response)
        {
            SendClientMessage(playerid, 0xFF0000FF, "Skin Changed");
            SetPlayerSkin(playerid, modelid);
        }
        else SendClientMessage(playerid, 0xFF0000FF, "Canceled skin selection");
        return 1;
    }
    return 1;
}
Example #2 Dynamic per player lists
pawn Код:
#include <a_samp>
#include <mSelection>

#define CUSTOM_TRAILER_MENU 1

public OnPlayerCommandText(playerid, cmdtext[])
{
    if(strcmp(cmdtext, "/selectVehicleTrailer", true) == 0)
    {
        new cars[15];
        cars[0] = 435;
        cars[1] = 450;
        cars[2] = 569;
        cars[3] = 570;
        cars[4] = 584;
        cars[5] = 590;
        cars[6] = 591;
        cars[7] = 606;
        cars[8] = 607;
        cars[9] = 608;
        cars[10] = 610;
        cars[11] = 611;
        ShowModelSelectionMenuEx(playerid, cars, 12, "Select trailer", CUSTOM_TRAILER_MENU, 16.0, 0.0, -55.0);
        return 1;
    }
    return 0;
}

public OnPlayerModelSelectionEx(playerid, response, extraid, modelid)
{
    if(extraid == CUSTOM_TRAILER_MENU)
    {
        if(response)
        {
            SendClientMessage(playerid, 0xFF0000FF, "Trailer Spawned");
            new Float:pos[3]; GetPlayerPos(playerid, pos[0], pos[1], pos[2]);
            CreateVehicle(modelid, pos[0] + 2.5, pos[1], pos[2] + 2.5, 0.0, random(128), random(128), -1);
        }
        else SendClientMessage(playerid, 0xFF0000FF, "Canceled trailer selection");
    }
    return 1;
}
Humm
Reply
#4

Deu muito trabalho de " fazer " ? ¬¬'
Reply
#5

Eu acho esse modo ridнculo de selecionar skin e.e Prefiro por cmd /skin [ID]
Reply
#6

Eu disse que foi eu quem fiz ? D:

Usei o example script como exemplo para que os demais possam fazer o seu entendendo o exemplo.

Agora nгo, vocкs que sгo o "fodгo" nгo sabem ao menos interpretar um texto. --'
Reply
#7

Coe1 tem que aprender a aceitar as criticas.

#Topic:Esta bom de sua parte...

@OFF: Uma coisa sу pra deixar bem claro, eu nгo sou fodгo e nem a maioria aqui dos 'scripters' vou mencionar assim, porque seria um insulto a ciкncia da computaзгo(mundo da programaзгo e Programadores), chamar de Programadores.

A linguagem PAWN й muito й bem Limitada, POREM eu ainda acho que pode ser feito muita coisa.
Coisas incrнveis podem ser feitas com ela (PAWN)!..

Quero dizer que nгo й porque as pessoas que tem um pouco mais de conhecimento й que se acham os 'fodхes' como dizem os novatos aqui do forum, se tem fodгo aqui sгo poucos

Muitos tbm sу sгo bons em PAWN.

NOTA:2 Numero de postagens nгo significa nada.... SГO APENAS NЪMEROS!....
NOVATOS PAREM DE MENCIONAR QUE OS 'High-roller' sгo fodгo.
e tbm
PAREM DE USAR ISSO CONTRA/ou em FLAME WARS (coisa de crianзa!)

Eu sou High-roller mas sou noob ainda!
P:Como assim vc й noob cara?
R:Sim ainda tem muito o que aprender na linguagem PAWN

Para aqueles que nгo sabem o significado de newbie = novato
Reply
#8

Quote:
Originally Posted by Schocc
Посмотреть сообщение
Coe1 tem que aprender a aceitar as criticas.

#Topic:Esta bom de sua parte...

A linguagem PAWN й muito й bem Limitada, POREM eu ainda acho que pode ser feito muita coisa.
Coisas incrнveis podem ser feitas com ela (PAWN)!..

Quero dizer que nгo й porque as pessoas que tem um pouco mais de conhecimento й que se acham os 'fodхes' como dizem os novatos aqui do forum, se tem fodгo aqui sгo poucos

Muitos tbm sу sгo bons em PAWN.

NOTA:2 Numero de postagens nгo significa nada.... SГO APENAS NЪMEROS!....
NOVATOS PAREM DE MENCIONAR QUE OS 'High-roller' sгo fodгo.
e tbm
PAREM DE USAR ISSO CONTRA/ou em FLAME WARS (coisa de crianзa!)
Entendo seu lado. E obrigado.

Eu nгo quis dizer que por ele ter "5.000" posts ele й melhor que alguns e etc. Posts nгo significam nada como vocк disse. Tem muitos usuбrios aqui no fуrum que tem 500 posts e sabem muito pouco de pawn ou todos eles foram tуpicos pedindo ajuda...Eu sу acho errado "alguns" aqui por entenderem um pouco a mais que o outro usam isso como uma arma contra ele, assim fazendo-se como se o outro fosse um lixo e ele o melhor. Claro que muitos aqui sгo programadores mas eu nгo quis chegar a este lado.

Quer criticar ? Critique sobre oque foi feito no tуpico e nгo porque eu usei um exemplo para que "outros" que nгo sabem usar a include aprender a usa-la, eles postaram como se eu tivesse dito que eu quem fiz o script/exemplo.


@Off

Й sу aqui ou o fуrum estб caindo direto ?
Reply
#9

Jamais fui foda , Jamais serei foda em pawn.
Utilizo o forum dentro das regras , jamais julgue alguem pelo seus post ou reputation.

Vocк em momento nenhum mensionou que nгo teria cido vocк que fez .
Reply
#10

@Don_Spped, nгo quis dizer que era vocк. Mas, "alguns" sim. Acompanho seus trabalhos e sгo уtimos, parabйns por isso.

E desculpe por nгo mencionar que o script usado como exemplo й do D0.
Acabei de adicionar que o script utilizado como exemplo й de autoria do D0.

Desculpe por qualquer coisa.
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)