[Tutorial] Criando um GameMode [GM]
#1

Olб manolos do fуrum, neste tutorial irei ensinar passo-a-passo a como criar um gamemode do zero, aqui irei ensinar a fazer um GM com algumas funзхes mais usadas e irei explica-las totalmente, entгo vamos lб...

Algumas pessoas tem dъvida se Pawno й a mesma coisa que Pawn, entгo eu digo, nada a vкr...
O Pawno й um programa editor de C++ que й usado para criar gamemodes, filterscript e includes..
O Pawn й uma linguagem de script de cуdigo aberto dentro do Pawno, que tem por abreviaзгo o formato do arquivo chamado .pwn, o mesmo sу й reconhecido ao ser compilado apertando F5.

Entгo vamos ao restante..

No topo:
pawn Код:
#include a_samp
Esta include ela й a principal funзгo que faz com que seu GM funcione, motivo: dentro da include a_samp.inc bem dizer tem tooodas as funзхes, exemplo: SetTimer, SetPlayerHealth, SetPlayerArmour, etc...

Depois vamos adicionar o:
pawn Код:
main()
{
}
Esta funзгo deve ser adicionada no GM ou seu GM nгo compila, entгo dentro desta main() vocк pode adicionar uma
pawn Код:
print("Mensagem");
Pra que serve essa print?
Entгo ela serve para mandar uma mensagem no log do seu servidor, que vocк pode adicionar em qualquer funзгo do gamemode, exemplo:
pawn Код:
main()
{
    print("Servidor execultado com sucesso");
    print("-------------------------");
    print("Forum.SA-MP.com - Acesse!");
}
Ele enviarб as seguintes mensagens para seu server-log.txt,
Servidor execultado com sucesso
-------------------------
Forum.SA-MP.com - Acesse!


Logo apуs vocк adiciona uma das principais funзхes de um gm
pawn Код:
public OnGameModeInit()
{
    return 1;
}
Nesta funзгo vocк adiciona as funзхes que vai fazer funcionar no seu gm, exemplo: quero adicionar skins e veнculos, vocк usarб
pawn Код:
public OnGameModeInit()
{
    AddPlayerClass(skinid, Float:X, Float:Y, Float:Z, weapon1, weapon1_ammo, weapon2, weapon2_ammo, weapon3, weapon3_ammo);
    AddStaticVehicle(modelid, Float:spawn_x, Float:spawn_y, Float:spawn_z, Float:angle, color1, color2);
    return 1;
}
Que para aumentar o nъmero de skins e veнculos basta apenas vocк ir duplicando...

Logo apуs viemos fazer o:
pawn Код:
public OnPlayerRequestClass(playerid, classid)
{
    return 1;
}
Aqui serб a visualizaзгo dos skins que terб no servidor, que para exibir as skins vocк usarб

SetPlayerPos
SetPlayerInterior
SetPlayerCameraPos
SetPlayerCameraLookAt

Essa sгo apenas algumas das funзхes mais usadas na public OnPlayerRequestClass(playerid, classid) com seus links da wiki com suas explicaзхes...

Voltando ao public anterior que fizermos e com suas funзхes ele ficaria deste modo:
pawn Код:
public OnPlayerRequestClass(playerid, classid)
{
    SetPlayerPos(playerid, Float:x, Float:y, Float:z);
    SetPlayerInterior(playerid, interiorid);
    SetPlayerCameraPos(playerid, Float:x, Float:y, Float:z);
    SetPlayerCameraLookAt(playerid, Float:x, Float:y, Float:z);
    return 1;
}
Agora passando para o prуximo passo й o:
pawn Код:
public OnPlayerConnect(playerid)
{
    return 1;
}
Nesta calbak й usada para quando o player se conecta ao servidor ou para carregar alguns sistemas ou funзхes, exemplo: sistema de login, entre outros que nгo me vem na cabeзa '-'

Aqui vai um exemplo de um cуdigo na public OnPlayerConnect(playerid) que vai identificar quando o player se conecta ao servidor:
pawn Код:
public OnPlayerConnect(playerid)
{
    new str[78], pnome[MAX_PLAYER_NAME];
    GetPlayerName(playerid, pnome, sizeof(pnome));
    format(str, sizeof(str), "%s (ID:%d) conectou-se ao servidor.", pnome, playerid);
    SendClientMessageToAll(-1, str);
    return 1;
}
Entгo aqui vai o nome das funзхes com seus links de explicaзхes na SA-MP Wiki

GetPlayerName
format
SendClientMessageToAll - OBS: Na wiki eles tгo dando a SendClientMessageToAll em uma sу linha como se fosse SendClientMessage, mais aqui neste tutorial avanзei um pouco fazendo com format '-', nгo й difнcil de entender

Prуximo passo serб o:
pawn Код:
public OnPlayerDisconnect(playerid, reason)
{
    return 1;
}
Na public OnPlayerDisconnect й quase a mesma coisa que o public OnPlayerConnect sу que na public OnPlayerDisconnect jб fala nй, quando o player desconecta do servidor.. й usado a mesma funзгo da que estб na public OnPlayerConnect(playerid) nгo tem nada de difнcil

Prуximo passo й o:
pawn Код:
public OnPlayerSpawn(playerid)
{
    return 1;
}
Esta calbak й a funзгo que o player nasce, que para fazer o player nascer й usado SetPlayerPos e SetPlayerInterior exemplo:
pawn Код:
public OnPlayerSpawn(playerid)
{
    SetPlayerInterior(playerid, interiorid);
    SetPlayerPos(playerid, Float:x, Float:y, Float:z);
    return 1;
}
Lembrando que para pegar os interiores vocк deve entrar dentro do interior que deseja depois digitar /interior, vocк pode fazer com que o player dк spawn dentro de interior ou nгo...

Prуximo passo iremos mecher com:
pawn Код:
public OnPlayerCommandText(playerid, cmdtext[])
{
    return 0;
}
Hoje em dia, muitos scripters profissional ou atй mesmo iniciantes ou intermediбrios usam o strcmp enquantos alguns usam ZCMD, para dar inicio a criaзгo de um comando simples usaremos o seguinte:
pawn Код:
if(strcmp(cmdtext, "/seucomando", true) == 0)
{
    //Funзгo
    return 1;
}
Este й um comando para vocк ter uma noзгo de como se faz o comando, que o mesmo tambйm pode ser desta forma:
pawn Код:
if(strcmp("/seucomando", cmdtext, true, 10) == 0)
{
    //Funзгo
    return 1;
}
Vai dar na mesma coisa, sу que pelo que vimos fica maior nй? Dai vocк se pergunta o que aquele 10 faz ali? Entгo ela й uma string para o comando que nгo pode ser definida em nome, somente em nъmero.. O comando junto com a public OnPlayerCommandText ficarб:
pawn Код:
public OnPlayerCommandText(playerid, cmdtext[])
{
    if(strcmp(cmdtext, "/seucomando", true) == 0)
    {
        //Funзгo
        return 1;
    }
    return 0;
}
Simples nй? Para finalizar o:
pawn Код:
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    return 1;
}
Este й para vocк por dialogs com id direcionado em comandos, sistema de logins e etc... Para saber mais informaзхes sobre a OnDialogReponse acesse: https://sampwiki.blast.hk/wiki/OnDialogResponse
Lб tem tudo sobre o OnDialogResponse..

Entгo й isso aк pessoal, espero que tenham gostado, lembrando que fiz este tutorial para quem й "INICIANTE" depois nгo fale besteira =}

Qualquer dъvida, pode postar ai!
Hб... Se eu esqueci de alguma coisa sу falar ok?

Obrigado a todos, grande abraзo!
Reply
#2

Bom mais o melhor metodo й o new.pwn
Reply
#3

Quote:
Originally Posted by Vai_Besta
Посмотреть сообщение
Bom mais o melhor metodo й o new.pwn
Sim, mais como eu disse "...neste tutorial irei ensinar passo-a-passo a como criar um gamemode do zero...", nem usar base nenhuma nem do new.pwn com as funзхes jб prontinhas e o manolo ir fazer, o carinha tem que vкr cada funзгo para poder tambйm decorar nй
Reply
#4

Eu nгo sei o que й tгo bom de aprender no new.pwn sendo que as pessoas que dizem isso ainda editam GF.
Reply
#5

Quote:
Originally Posted by Stewie`
Посмотреть сообщение
Eu nгo sei o que й tгo bom de aprender no new.pwn sendo que as pessoas que dizem isso ainda editam GF.
Poisй nй...
Sу fiz minha parte
Reply
#6

kkkkkkkkkkk
o mais engraзado й as pessoas que editam GF/Thug e querem ter moral...

Bom Tutorial!
Reply
#7

\o/ Bom tutorial lek
Reply
#8

Quote:
Originally Posted by [O.z]Caroline
Посмотреть сообщение
Bom Tutorial!
Obrigado.

Quote:
Originally Posted by PlueX
Посмотреть сообщение
\o/ Bom tutorial lek
Valeu!!
Reply
#9

Quote:

#include a_samp
Esta include ela й a principal funзгo que faz com que seu GM funcione

Errado, a diretiva #include a_samp inclui a livraria a_samp ao seu cуdigo.

Quote:

main()
{
}
Esta funзгo deve ser adicionada no GM ou seu GM nгo compila

Errado, o main й como o cabeзalho do cуdigo, sem ele o cуdigo compila porem, й apresentado uma mensagem de erro na tela do console.

Quote:

print("Mensagem");
Pra que serve essa print?
Entгo ela serve para mandar uma mensagem no log do seu servidor

Errado, o print й uma funзгo de E/S = entrada e saнda de dados, ele serve pra imprimir uma mensagem а tela do console.

Quote:

Hoje em dia, muitos scripters profissional ou atй mesmo iniciantes ou intermediбrios usam o strcmp enquantos alguns usam ZCMD

strcmp nгo й um processador de comandos.

Quote:

Vai dar na mesma coisa, sу que pelo que vimos fica maior nй? Dai vocк se pergunta o que aquele 10 faz ali? Entгo ela й uma string para o comando que nгo pode ser definida em nome, somente em nъmero...

Errado, o 10 ali й o nъmero de cells que possui a string que vocк utiliza como comando claro, tambйm com o caracter NULL.

Quote:

Entгo й isso aк pessoal, espero que tenham gostado, lembrando que fiz este tutorial para quem й "INICIANTE" depois nгo fale besteira =}

Qualquer dъvida, pode postar ai!
Hб... Se eu esqueci de alguma coisa sу falar ok?

Como vocк disse, este tutorial й pra novatos, o que os novatos vгo pensar lendo tutoriais com cуdigos feitos de maneira errada onde nem mesmo o autor do tutorial sabe a real funзгo dos cуdigos utilizados?
Й por tutoriais como este que os novatos tem dificuldade em aprender e em um ato de desespero acabam baixando GF e colocando online servidores bugados o que consequentemente faz com que os players percam o interesse em samp todos os dias.

Eu nгo gostei por estar mal feito, por vocк querer explicar coisas de que nem vocк sabe.
Reply
#10

Код:
public OnPlayerConnect(playerid)
{
    new str[78], pnome[MAX_PLAYERS];
    GetPlayerName(playerid, pnome, sizeof(pnome));
    format(str, sizeof(str), "%s (ID:%d) conectou-se ao servidor.", pnome, playerid);
    SendClientMessageToAll(-1, str);
    return 1;
}




LOL?


@topic

FicouBom Para Os NOvatos que Quiserem Comeзar do 0

nao ja comeзarem editando
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)