[TUTORIAL]Abrindo portão por busina

by Anônimo Postado segunda-feira, 26 de janeiro de 2009 às 13:08 2 comentários

Primeiramenta va ate a linha: public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
se no seu GameMode não tiver ela adicione.
Embaixo do public coloque este code:

/* Se o jogador apertar o BOTÃO DE BUZINA E ESTIVER DENTRO DE UM VEÍCULO */
if((newkeys == KEY_HORN) && (IsPlayerInAnyVehicle(playerid)))
{
// ENTÃO ELE PROCESSA O QUE ESTÁ AQUI
}
return 1;
}

--explicação--
o if está dizendo que se o jogador estiver em um carro e aperta o botão da busina "H" ou "CapsLook" (Que neste caso é a key "horn") o portão ira abrir (Ou o que você colocou ali no code)

Obs:. Não se esqueça de por o define: #define KEY_HORN 2

Bom dia, senhores leitores do blog do Cronos, eu sou o novo colaborador, antigo [JPP]MrBean, e hoje, vou ensinar vocês a salvar as coisas...

-- Introdução --

Voces vao ver o que salvar com o que eu vou ensinar voces a fazerem, claro que voces podem se aprimorar mais, mais apenas vou ensinar o básico...

enum aAcc
{
aPassword[128],
aScore,
aCash,
Float:aX,
Float:aY,
Float:aZ,
Float:aA,
aLogged,
}


Como visto acima, nós usamos apenas uma variável em vez de colocar uma variável pra cada coisa ocupando mais memória...

new AccountInfo[MAX_PLAYERS][aAcc];


A variável acima, será o que vai reconhecer o PlayerID do jogador para salvar as informaçoes...

-- Criando, Carregando e Salvando contas --

- Registrando

forward RegisterPlayer(playerid, password[]);
public RegisterPlayer(playerid, password[])
{
if(IsPlayerConnected(playerid))
{
new name[MAX_PLAYER_NAME], str[128];
GetPlayerName(playerid, name, sizeof name);
format(str, sizeof str, "%s.ini", name);
new File:account = fopen(str, io_write);
if (account)
{
strmid(AccountInfo[playerid][aPassword], password, 0, strlen(password), 128);
AccountInfo[playerid][aCash] = GetPlayerMoney(playerid);
AccountInfo[playerid][aScore] = GetPlayerScore(playerid);
GetPlayerPos(playerid, AccountInfo[playerid][aX], AccountInfo[playerid][aY], AccountInfo[playerid][aZ]);
GetPlayerFacingAngle(playerid, AccountInfo[playerid][aA]);
new file[128];
{
format(file, sizeof file, "Password: %s\n", AccountInfo[playerid][aPassword]);
{ fwrite(account, file); }
format(file, sizeof file, "Grana: %d\n",AccountInfo[playerid][aCash]);
{ fwrite(account, file); }
format(file, sizeof file, "Score: %d\n", AccountInfo[playerid][aScore]);
{ fwrite(account, file); }
format(file, sizeof file, "X: %f\n",AccountInfo[playerid][aX]);
{ fwrite(account, file); }
format(file, sizeof file, "Y: %f\n",AccountInfo[playerid][aY]);
{ fwrite(account, file); }
format(file, sizeof file, "Z: %f\n",AccountInfo[playerid][aZ]);
{ fwrite(account, file); }
format(file, sizeof file, "Angulo: %f\n",AccountInfo[playerid][aA]);
{ fwrite(account, file); }
}
fclose(account);
SendClientMessage(playerid, 0x21DD00FF, "Voce foi registrado, agora logue-se.");
}
}
return 1;
}


- Agora que a conta foi criada vamos fazer o jogador se logar...

forward LoginPlayer(playerid, password[]);
public LoginPlayer(playerid, password[])
{
new name[MAX_PLAYER_NAME], str[128];
GetPlayerName(playerid, name, sizeof name);
format(str, sizeof str, "%s.ini", name);
new File:account = fopen(str, io_read);
if (account)
{
new pass[256];
new passres[128], value[128];
fread(account, pass, sizeof pass);
passres = GetFileString(pass);
if (!strcmp("Password", passres))
{
value = GetFileValue(pass);
strmid(AccountInfo[playerid][aPassword], value, 0, strlen(value)-1, 128); // -1 to remove the extra space(\n)
}
if (!strcmp(AccountInfo[playerid][aPassword], password, true))
{
while (fread(account, pass, 256))
{
passres = GetFileString(pass);
if (strfind(passres, "Cash") != -1)
{
value = GetFileValue(pass);
AccountInfo[playerid][aCash] = strval(value);
}
if (strfind(passres, "Score") != -1)
{
value = GetFileValue(pass);
AccountInfo[playerid][aScore] = strval(value);
}
if (strfind(passres, "X") != -1)
{
value = GetFileValue(pass);
AccountInfo[playerid][aX] = floatstr(value);
}
if (strfind(passres, "Y") != -1)
{
value = GetFileValue(pass);
AccountInfo[playerid][aY] = floatstr(value);
}
if (strfind(passres, "Z") != -1)
{
value = GetFileValue(pass);
AccountInfo[playerid][aZ] = floatstr(value);
}
if (strfind(passres, "Angle") != -1)
{
value = GetFileValue(pass);
AccountInfo[playerid][aA] = floatstr(value);
}
}
fclose(account);
AccountInfo[playerid][aLogged] = 1;
}
else
{
SendClientMessage(playerid, 0xE60000FF, "Senha errada.");
fclose(account);
return 1;
}
GivePlayerMoney(playerid, AccountInfo[playerid][aCash]);
SetPlayerScore(playerid, AccountInfo[playerid][aScore]);
SetPlayerPos(playerid, AccountInfo[playerid][aX], AccountInfo[playerid][aY], AccountInfo[playerid][aZ]);
SetPlayerFacingAngle(playerid, AccountInfo[playerid][aA]);
SendClientMessage(playerid, 0x21DD00FF, "Logado com sucesso");
printf("%s logou", name);
}
return 1;
}


Agora vamos salvar....

forward SavePlayer(playerid);
public SavePlayer(playerid)
{
if(IsPlayerConnected(playerid))
{
if(AccountInfo[playerid][aLogged] == 1)
{
new name[MAX_PLAYER_NAME], str[128];
GetPlayerName(playerid, name, sizeof name);
format(str, sizeof str, "%s.ini", name);
new File:account = fopen(str, io_write);
if (account)
{
AccountInfo[playerid][aCash] = GetPlayerMoney(playerid);
AccountInfo[playerid][aScore] = GetPlayerScore(playerid);
GetPlayerPos(playerid, AccountInfo[playerid][aX], AccountInfo[playerid][aY], AccountInfo[playerid][aZ]);
GetPlayerFacingAngle(playerid, AccountInfo[playerid][aA]);
new file[128];
{
format(file, sizeof file, "Password: %s\n", AccountInfo[playerid][aPassword]);
{ fwrite(account, file); }
format(file, sizeof file, "Grana: %d\n",AccountInfo[playerid][aCash]);
{ fwrite(account, file); }
format(file, sizeof file, "Score: %d\n", AccountInfo[playerid][aScore]);
{ fwrite(account, file); }
format(file, sizeof file, "X: %f\n",AccountInfo[playerid][aX]);
{ fwrite(account, file); }
format(file, sizeof file, "Y: %f\n",AccountInfo[playerid][aY]);
{ fwrite(account, file); }
format(file, sizeof file, "Z: %f\n",AccountInfo[playerid][aZ]);
{ fwrite(account, file); }
format(file, sizeof file, "Angulo: %f\n",AccountInfo[playerid][aA]);
{ fwrite(account, file); }
}
fclose(account);
}
}
}
return 1;
}


-- AGORA FAZENDO O BONECO SALVAR MESMO --

public OnPlayerDisconnect(playerid, reason)
{
SavePlayer(playerid);
return 1;
}


Isso vai salvar quando ele sair =D

public OnPlayerConnect(playerid)
{
AccountInfo[playerid][aCash] = 0;
AccountInfo[playerid][aScore] = 0;
AccountInfo[playerid][aX] = 0;
AccountInfo[playerid][aY] = 0;
AccountInfo[playerid][aZ] = 0;
AccountInfo[playerid][aA] = 0;
strmid(AccountInfo[playerid][aPassword], "-", 0, 1, 1);
return 1;
}


Isso vai criar um pedaço da conta quando ele entrar =D

-- AGORA OS COMANDOS --

new cmd[128], tmp[128], idx;
cmd = strtok(cmdtext, idx);

if (!strcmp(cmd, "/logar", true))
{
new tmppass[128];
if(AccountInfo[playerid][aLogged] == 1) return SendClientMessage(playerid, 0xE60000FF, "Você já está logado.");
tmp = strtok(cmdtext, idx);
if(!strlen(tmp)) return SendClientMessage(playerid, 0xF97804FF, "USE: /logar [password]");
new plname[MAX_PLAYER_NAME];
GetPlayerName(playerid, plname, sizeof plname);
format(plname, sizeof plname, "%s.ini", plname);
if(!fexist(plname)) return SendClientMessage(playerid, 0xE60000FF, "Por favor registre-se primeiro");
strmid(tmppass, tmp, 0, strlen(cmdtext), 128);
Encrypt(tmppass);
LoginPlayer(playerid, tmppass);
return 1;
}

if (!strcmp(cmd, "/registrar", true))
{
if(AccountInfo[playerid][aLogged] == 1) return SendClientMessage(playerid, 0xE60000FF, "Você já está logado.");
new plname[MAX_PLAYER_NAME];
GetPlayerName(playerid, plname, sizeof plname);
format(plname, sizeof plname, "%s.ini", plname);
new File: hFile = fopen(plname, io_read);
if (hFile)
{
SendClientMessage(playerid, 0xE60000FF, "Alguem já está usando esse nick.");
fclose(hFile);
return 1;
}
new tmppass[128];
tmp = strtok(cmdtext, idx);
if(!strlen(tmp)) return SendClientMessage(playerid, 0xF97804FF, "USE: /registrar [password]");
strmid(tmppass, tmp, 0, strlen(cmdtext), 128);
Encrypt(tmppass);
RegisterPlayer(playerid, tmppass);
return 1;
}


-- E AGORA AS FUNÇOES DE PROTEÇAO DE SENHA --

stock Encrypt(string[]) // Made by Y_Less
{
for(new x=0; x < class="pawnkeyword">if(string[x] > (0xff))
{
string[x] -= 256;
}
}
}

stock strtok(const string[], &index,seperator=' ')
{
new length = strlen(string);
new offset = index;
new result[128];
while ((index < class="pawnkeyword">if ((index < class="pawnkeyword">return result;
}



Gente, de meu próximo tutorial, vou ensinar a usar dini, esse é so para voces verem mesmo que pode-se fazer sem usar outro include...

Um DeathMatch feito em Liberty City.


Feito por: [TSSA]Tiego

GameMode de guerra na Área 69!


Feito por: [TSSA]Tiego

[FS] Salvar Ângulo para Vídeos

by Anônimo Postado domingo, 25 de janeiro de 2009 às 15:11 0 comentários

Nosso leitor, Roger, nos mandou esse filterscript, que serve para salvar o ângulo, para produções de vídeos de SA-MP.

Contém arquivo .amx e .pwn.



Créditos: Roger Gomes Costa e Felipy Tavares | Niko e Scooby

[TUTORIAL] Diretiva #define

by Anônimo Postado às 14:31 0 comentários

A diretiva #define serve para substiuir um valor ou script de uma linha por uma palavra de sua escolha. Por exemplo:

#include

#define SKABUSKA print("Oi!");

main()
{
SKABUSKA
}

Entendendo o código

A primeira linha inclue a biblioteca a_samp no script, obrigatória para fazer gamemodes e filterscripts para SA-MP.

A segunda linha vai definir a palavra SKABUSKA para que seja a "representante" da função print("Oi");.

A terceira linha, a função main() é obrigatória para inicializar seu gamemode.

Dentro das chaves ( { e } ) ou corpo da função, colocamos a palavrava SKABUSKA que irá representar a função print("Oi");.

Assim depois de compilar(F5) o script, inicie o seu servidor com o gamemode que contenha esse script e veja na tela do console do windows que aparecerá a palavra "Oi!". O resultado seria o mesmo se fizessimos desse jeito:

#include

main()
{
print("Oi!");
}
Substituindo valores por palavras

Para fazer uma profissão, por exemplo, existe uma técnica, que funciona da seguinte forma:

Declaramos o nome da profissão com a diretiva #define e colocamos um valor para que seja substituido pelo nome da profissão. Por exemplo:

#define DESEMPREGADO 0
#define POLICIAL 1

Esses valores seriam os IDs (ou números de indentificação) das profissões. Para setar a profissão você precisa atribuir o valor, que no caso seria o número que repesenta a profissão (ID), à uma array, se você não sabe o que são arrays, clique aqui.
Assim não precisamos nos preocupar de memorizar o ID de cada profissão.

Essa técnica pode ser aplica na criação de gangs, profissões e inúmeras coisas, mas não tratarei disso nesse tutorial.

E é assim que funciona a diretiva #define.

Até mais pessoal.

Feito por: Cr0Nos

[TUTORIAL] Arrays - Parte 1

by Anônimo Postado às 13:39 1 comentários

Arrays, conhecidades também como vetores ou matrizes, são um conjunto de váriaveis com o mesmo nome, porém, quando as utilizamos, nos referimos à cada uma por um número entre colchetes ( [ e ] ), esses são os elementos da array.

Arrays unidimensionais

São arrays de uma dimensão. Por exemplo:

new Array[10];

Nesse caso teriamos uma array com 10 elementos (dez variaveis com o mesmo nome representada por um número).

O começo de uma array é sempre 0, sendo assim:

x-1
Onde x é o número de elementos que depois é subtraido por 1.

Por exemplo:

new MinhaArray[1000];

O começo dessa array é 0 e o final é 999.

Para acessar cada elemento da array, temos que nos referir ao número do elemento que está entre colchetes. Por exemplo:

new MinhaArray[10];

MinhaArray[2] = 3;

Nesse exemplo declaramos a array MinhaArray e em seguida atribuimos ao segundo elemento da mesma o valor de 3 inteiros.

As arrays são muito úteis para várias coisas, ai vai um exemplo de como utilizá-las em seu gamemode ou filterscript:

No exemplo a seguir mostrarei como utilizar arrays para setar uma profissão à um certo ID de um certo player:

//declaração da array
new Profissao[MAX_PLAYERS];

//utilizando a array para setar a profissão ao player
Profissao[playerid] = POLICIAL;

Entendendo o código

Primeiro declaramos a array com elementos equivalente ao limite de players no servidor.
Depois colocamos o valor do elemento playerid (ID do player) como POLICIAL.

Caso não saiba o motivo de colocar POLICIAL como valor de uma array, veja o tutorial "Diretiva #define" clicando aqui.

Sobre a constante MAX_PLAYERS: Cada servidor de SA-MP tem uma quantidade limitada de jogadores. A constante MAX_PLAYERS serve para capturar o número do limite de players do servidor e assim adicionar elementos, equivalente ao limite de players, à array, no nosso caso, a array Profissao.

Sobre o playerid: O playerid guarda o ID de cada player, quando se entra em um servidor, cada player recebe um ID, que seria como um número de indentificação, os IDs dos players não são fixos, eles mudam, se você entrar e ver que seu ID é 20, depois você sai do servidor e alguém entra no servidor e depois você decide entrar de novo, seu ID mudará, provavelmente, para 21. Então, em termos de programação, o playerid seria como acessar o elemento da array onde o elemento seria o ID do jogador, para que quando você for setar a profissão, setar para UM ID especifico em vez de todos.

Se você ainda não entendou vou fazer uma explicação melhor:

O player vai e digita um comando e vira policial.

Graças ao playerid, apenas o player que digitou o comando vai virar policial, em vez de todos.

Arrays podem ser usadas para fazer diversas coisas (como sistema de level etc.) e também são muito poderosas e muito úteis na hora de programar.

Na segunda parte desse tutorial veremos as Arrays Bidimensionais, ou seja, arrays de duas dimensões.

Feito por: Cr0Nos

GTA IV Patch 1.0.2.0

by Anônimo Postado às 12:28 1 comentários

A Rockstar Games lançou o patch de correções versão 1.0.2.0 para a plataforma PC.
Várias mudanças foram feitas, fazendo com que, o seu GTA IV, ganhe mais desempenho em seu computador, além de mais opções nas configurações gráficas.

Acesse o link a seguir e clique em "DOWNLOAD Grand Theft Auto IV Update Version 1.0.2.0", para iniciar o download do novo patch:

http://www.rockstargames.com/support/IV/PC/patch/index.html

Eu instalei esse patch em meu GTA IV e funciona perfeitamente e aumentou muito o desempenho do jogo em meu pc. Antes de instalar o FPS dentro da cidade era 20~30 (com commandline), agora com o novo patch o FPS dentro da cidade é 30~41, além de poder colocar algumas coisas com qualidade mais alta sem perder tanto FPS.

*FPS: Frame Per Second (Frame por Segundo), que significa o número de quadros por segundo de um dispositivo de geração de imagem. (Fonte: Wikipédia)