drift airport

by Lucas_adm Postado sexta-feira, 23 de maio de 2008 às 20:16 0 comentários


A terceira versão de um mod ja conhecido por muitos amantes de Drift do gta Por ser de fácil instalação e ser bem leve o mod não trás consigo um grande desafio e não chega a ser uma das melhores pistas de Drift mas é bem divertExistem locais na pista onde se pode alcançar mais de 250 km/h e algumas curvas exigem bastante dos condutores.
ido। O mod ainda trás a Garagem de Doherty com o seu interior completo e suas rampas de manutenção o que ainda lhe dá algo para explora Clique aqui e veja a versão antiga do Drift Airport e tambem uma pista para Drift no Aeroporto de Las Venturas CLIKE AKI para baixar (duvidas ou segestoes add no msn cronos_bomba@hotmail।com) divirta-se!!!!

>iniciativa dharma

by Lucas_adm Postado às 11:51 2 comentários



Para quem é fã da série Lost e gosta de todo o mistério e suspense envolto na ilha e na Iniciativa Dharma este mod troca as texturas da Zombotech pelos Logotipo e imagens da misteriosa Organização। (bs)CLIKE na imagen para baixar ou qualquer duvida add cronos_bomba@hotmail।com divirta-se !!!! ou qualquer duvida add no msn cronos_bomba@hotmail.com

Tutorial de Programação Iniciante/Intermediário

Índice:
  • Iniciando
  • Strings e Variáveis
  • Strtok
  • Multi-Array Strings
  • Stock Functions
  • User Databases (dudb)
  • Y_Objects
  • Races

1. Iniciando
Neste tutorial vou explicar algumas funções do pawno que algumas pessoas vem me perguntando bastante. Lembrando que este é umtutorial de nível Iniciante/Intermediário. Para aprender o seguinte, você deve saber no mínimo as funções básicas do pawno, e a função de cada callback (você deve no mínimo dos mínimos saber o que é um callback). Logo estarei postando outros tutoriais, de nível Intermediário/Avançado e de Nível Iniciante.


2. Strings e Variáveis
Variáveis são as funções que vão definir o que vai acontecer se esta variável tiver um certo valor. Ex: Se o jogador fulano tiver a profissão número 12, ele vai explodir, etc... E strings são funções que geralmente são criadas para mandar mensagens que tenham variáveis, Ex.: Você está jogando e vai no banco para ver seu saldo. Então aparece a mensagem: "Seu saldo bancário: 504031904913". Sendo que 504031904913 é uma variável que define a quantia que você tem no banco.
Então, vamos começar criando uma variável. Ponha isto no topo do seu gamemode:

CÓDIGO
new kills[MAX_PLAYERS];
new deaths[MAX_PLAYERS];

Estas variáveis vao ser usadas para mostrar o numero de kills e mortes de um player.
Agora vamos botar a seguinte função no OnPlayerDeath:

CÓDIGO
kills[killerid] ++;
deaths[playerid] ++;

E agora vamos fazer um comando para mostrar os status do player. Ponha isso no OnPlayerCommandText:

CÓDIGO
if(strcmp(cmdtext, "/stats", true) == 0)
{
new stringkills[256];
new stringmortes[256];
format(stringkills,sizeof(stringkills), "Kills: %d",kills[playerid]);
format(stringmortes,sizeof(stringmortes), "Mortes: %d",mortes[playerid]);
SendClientMessage(playerid, 0xFFFF00AA, "Seus stats:");
SendClientMessage(playerid, 0xFFFF00AA, stringkills);
SendClientMessage(playerid, 0xFFFF00AA, stringmortes);
return 1;
}

O que acabamos de fazer:
Quando botamos new kills[MAX_PLAYERS]; nós criamos uma variável, que seria executada particularmente para cada player. Após isso, colocamos no OnPlayerDeath kills[killerid] ++; & deaths[playerid] ++;, isso fará com que o assassino ganhe + 1 na variável kills, e o morto + 1 na variavel deaths. Após isso, fizemos um comando que mostraria o numero de kills e mortes do player quando ele digitasse /stats, usando strings. Como você pode perceber, usamos a função format(stringkills,sizeof(stringkills), "Kills: %d",kills[playerid]);, que significa que formatou a string para aparecer o número de kills, e usamos SendClientMessage(playerid, 0xFFFF00AA, stringkills); para mandar uma mensagem com a string para o player.
OBS: Nunca se pode usar uma variável em SendClientMessage sem ter usado uma string!
OBS²: Você não precisa usar strings em todas as mensagens, só precisa usar nas que tem variáveis!


3. Strtok
A função strtok é usada para usar comandos com variáveis, por exemplo /vida id vida. Se nós não usarmos strtok para fazer comandos como /vida id vida, teríamos que fazer um comando para cada id, por exemplo /vida 1 100 depois /vida 2 100 depois /vida 3 100, e isso gastaria muito do tempo e totalmente inútil. Então vamos começar fazendo um comando com strtok.
Adicione esta função (strtok) no final do seu Gamemode/Filterscript:
CÓDIGO
strtok(const string[], &index)
{
new length = strlen(string);
while ((index < offset =" index;"> ' ') && ((index - offset) < (sizeof(result) - 1))) { result[index - offset] = string[index]; index++; } result[index - offset] = EOS; return result; }


Agora vamos colocar isso em cima de tudo no OnPlayerCommandText:
CÓDIGO
new cmd[256];
new idx;
cmd = strtok(cmdtext, idx);

E agora vamos fazer o comando, que neste caso será o comando /vida id vida.
CÓDIGO
if(strcmp(cmd,"/vida", true)==0 && IsPlayerAdmin(playerid))
{
new string [256];
new tmp[256];
new plid, vida;
new nomeentregador[MAX_PLAYER_NAME];
new nomerecebedor[MAX_PLAYER_NAME];
tmp = strtok(cmdtext, idx);
if(!strlen(tmp)){
SendClientMessage(playerid, cinza, "[ERRO DE SINTAXE] /vida [id] [vida]");
return 1;
}
plid = strval(tmp);
tmp = strtok(cmdtext, idx);
if(!strlen(tmp)) {
SendClientMessage(playerid, cinza, "[ERRO DE SINTAXE] /vida [id] [vida]");
return 1;
}
vida = strval(tmp);
if(IsPlayerConnected(plid)){
GetPlayerName(plid, nomerecebedor, sizeof(nomerecebedor));
GetPlayerName(playerid, nomeentregador, sizeof(nomeentregador));
format(string, sizeof(string), "O Admnistrador %s setou a vida de %s para %d.", nomeentregador,nomerecebedor,vida);
SendClientMessageToAll(branco, string);
SetPlayerHealth(plid,vida);
return 1;
}
else
{
SendClientMessage(playerid, cinza, "Jogador não conectado.");
return 1;
}
}

Traduzindo:
Fizemos um comando, que se o player for admin, vai setar a vida do jogador escolhido para a vida escolhida. Criamos a variável tmp, que representaria o strtok. Você pode notar que botamos a função if(!strlen(tmp)){, que significa que se o jogador não digitar o id e a vida desejada, vai aparecer a mensagem "[ERRO DE SINTAXE] /vida id vida". Então criamos uma variável chamada vida e uma chamada plid. A variável plid será o id do player escolhido, e a variável vida seria a vida que seria dada ao player. Então usamos uma string para mandar a mensagem "O Admnistrador %s setou a vida de %s para %d." e depois como final do code, usamos o SetPlayerHealth(plid, vida);, que setaria a vida do player desejado.


4. Multi-Array Strings
Multi array strings são strings que carregam várias mensagens ao mesmo tempo, ou vários números, coordenadas, etc... Um exemplo muito conhecido de multi-array string é a multi-array do nome dos carros.

CÓDIGO
new VehicleName[212][0] = {
"Landstalker",//--------> Numero 0
"Bravura",// --------> Numero 1
"Buffalo",// -------> Numero 2
"Linerunner",// -------> E assim vai...
"Pereniel",
"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",
"Previon",
"Coach",
"Cabbie",
"Stallion",
"Rumpo",
"RC Bandit",
"Romero",
"Packer",
"Monster Truck",
"Admiral",
"Squalo",
"Seasparrow",
"Pizzaboy",
"Tram",
"Trailer",
"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",
"Hotring Racer",
"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",
"Hustler",
"Intruder",
"Primo",
"Cargobob",
"Tampa",
"Sunrise",
"Merit",
"Utility",
"Nevada",
"Yosemite",
"Windsor",
"Monster Truck",
"Monster Truck",
"Uranus",
"Jester",
"Sultan",
"Stratum",
"Elegy",
"Raindance",
"RC Tiger",
"Flash",
"Tahoma",
"Savanna",
"Bandito",
"Freight",
"Trailer",
"Kart",
"Mower",
"Duneride",
"Sweeper",
"Broadway",
"Tornado",
"AT-400",
"DFT-30",
"Huntley",
"Stafford",
"BF-400",
"Newsvan",
"Tug",
"Trailer",
"Emperor",
"Wayfarer",
"Euros",
"Hotdog",
"Club",
"Trailer",
"Trailer",
"Andromada",
"Dodo",
"RC Cam",
"Launch",
"Polícia (LSPD)",
"Polícia (SFPD)",
"Polícia (LVPD)",
"Police Ranger",
"Picador",
"S.W.A.T. Van",
"Alpha",
"Phoenix",
"Glendale",
"Sadler",
"Trailer de Bagagens",
"Trailer de Bagagens",
"Stair Trailer",
"Boxville",
"Farm Plow",
"Trailer de Utilidades"
};

Como você pode ter visto, esta string tem o nome de todos os carros. Agora vamos usá-la. Vamos fazer um comando /nomeveiculo [id], que vai mostrar o nome do veículo do id escolhido.
CÓDIGO
if (strcmp(cmd, "/nomeveiculo", true)==0)
{
new string [256];
new tmp[256];
new idveiculo;
tmp = strtok(cmdtext, idx);
if(!strlen(tmp)){
SendClientMessage(playerid, cinza, "[ERRO DE SINTAXE] /nomeveiculo [id]");
return 1;
}
idveiculo = strval(tmp);
format(string, sizeof(string), "Nome do veículo: %s.", VehicleName[idveiculo - 400]);
SendClientMessageToAll(branco, string);
return 1;
}

Agora fizemos um comando que vai mostrar o nome do veículo, e usamos VehicleName[idveiculo - 400] para poder mostrar o nome do veículo certo. Ou seja, quando ele digita /nomeveiculo 400, vai mostrar o veículo Nº 0, já que mostra a variável idveiculo - 400.


5. Stock Functions
Stocks e são funções criadas pelo player, para simplificar funções e adicionar novas funções ao sa-mp. Aqui um exemplo bem conhecido de função stock:
CÓDIGO
stock GetXYInFrontOfPlayer(playerid, &Float:x, &Float:y, Float:distance)
{ // Created by Y_Less

new Float:a;

GetPlayerPos(playerid, x, y, a);
GetPlayerFacingAngle(playerid, a);

if (GetPlayerVehicleID(playerid)) {
GetVehicleZAngle(GetPlayerVehicleID(playerid), a);
}

x += (distance * floatsin(-a, degrees));
y += (distance * floatcos(-a, degrees));
}


Esse stock adiciona uma função ao sa-mp, de pegar as coordenadas na frente do jogador. Agora vamos criar nossa própria função no sa-mp, uma função de SETAR o dinheiro das pessoas. (Não tem função de setar, so de dar dinheiro)
CÓDIGO
stock SetarGrana(playerid, grana)
{
ResetPlayerMoney(playerid);
GivePlayerMoney(playerid, grana);
}

Ok, nosso stock function está pronto, ou seja, vai resetar a grana do player e depois vai dar o dinheiro, sendo assim a mesma coisa que setar. Agora nós podemos usar a função que nós criamos em qualquer parte do nosso script. Por Exemplo, tente combinar o que aprendemos antes com os strtok com o SetarGrana, vamos criar um comando /setargrana id grana com a função que acabamos de fazer.
CÓDIGO
if (strcmp(cmd, "/setargrana", true)==0 && IsPlayerAdmin(playerid))
{
new tmp[256];
new string[256];
new plid, grana;
new nomeentregador[MAX_PLAYER_NAME];
new nomerecebedor[MAX_PLAYER_NAME];
tmp = strtok(cmdtext, idx);
if(!strlen(tmp)){
SendClientMessage(playerid, cinza, "[ERRO DE SINTAXE] /setargrana [id] [grana]");
return 1;
}
plid = strval(tmp);
tmp = strtok(cmdtext, idx);
if(!strlen(tmp)) {
SendClientMessage(playerid, cinza, "[ERRO DE SINTAXE] /setargrana [id] [grana]");
return 1;
}
grana = strval(tmp);
if(IsPlayerConnected(plid)){
GetPlayerName(plid, nomerecebedor, sizeof(nomerecebedor));
GetPlayerName(playerid, nomeentregador, sizeof(nomeentregador));
format(string, sizeof(string), "O Admnistrador %s setou o dinheiro de %s para R$%d.", nomeentregador,nomerecebedor,grana);
SendClientMessageToAll(branco, string);
SetarGrana(plid, grana);
return 1;
}
else
{
SendClientMessage(playerid, cinza, "Jogador não conectado.");
return 1;
}
}

Pronto! Aí está o nosso code simplificado de setar grana(na verdade nem tanto, mas vc pode simplificar mais do jeito q vc quiser fazer seu stock function). Stocks podem fazer qualquer função, e são geralmente usados para fazer includes.

6. User Databases
User databases são includes usados para salvar os dados de algum jogador. Neste tutorial vou explicar como usar o DUDB.
O dudb, na minha opinião é o melhor include de database. Aqui vou explicar como utilizar as funções do dudb:

udb_Create(Filename[], password[]): Função utilizada para criar uma conta no dudb. Veja no exemplo de sistema de registro/login.
udb_UserSet(Filename[], key[], value[]): Função utilizada para salvar algum dado em formato de texto.

udb_UserSetInt(Filename[], key[], value): Função utilizada para salvar algum dado em formato de número INTEIRO. Ex: Variáveis de kills /mortes

udb_UserSetFloat(Filename[], key[], Float:value): Função utilizada para salvar algum dado em formato de float ( como por exemplo, as coordenadas de spawn de algum player )

udb_UserInt(Filename[], key[]): Checa o valor de alguma variável de número INTEIRO no arquivo, utilizada para carregar os dados.

udb_UserFloat(Filename[], key[]): Checa o valor de alguma variável de número FLOAT no arquivo, utilizada para carregar dados de coordenadas.

udb_CheckLogin(Filename[], password[]): Função utilizada nos sistemas de login/registro para ver se a senha está correta.

Bom, agora que sabemos as funções principais do DUDB e pra que elas servem, vamos criar nosso sistema de login/registro.
Vamos adicionar isso no nosso gamemode:
CÓDIGO
//No topo de tudo, junto com os outros includes:
#include
#define amarelo 0xFFFF00AA
#define verde 0x33FF33AA
#define vermelho 0xFF0000AA
#define vermelhoescuro 0xAA3333AA
#define branco 0xFFFFFFAA
#define rosa 0xCCFF00FFAA
#define azul 0x057ABDAA
#define cinza 0xC0C0C0AA
#define yellow 0xFFFF00AA
#define laranja 0xFFA500AA

//agora no OnPlayerConnect:
new nomepl[MAX_PLAYER_NAME];
GetPlayerName(playerid, nomepl, sizeof(nomepl))
if(!udb_Exists(nomepl))
{
SendClientMessage(playerid, azul, "[LOGIN/REGISTRO] Você não está registrado, registre-se com /registrar senha");
}
else
{
SendClientMessage(playerid, azul, "[LOGIN/REGISTRO] Você já está registrado, logue-se com /logar senha");
}

//agora no OnPlayerCommandText
if (strcmp(cmd, "/registrar", true)==0)
{
new tmp[256];
new senha[256];
tmp = strtok(cmdtext, idx);
if(!strlen(tmp))
{
SendClientMessage(playerid,vermelhoescuro,"/registrar [senha] - Exemplo: /registrar 123");
return 1;
}
if(udb_Exists(PlayerName(playerid)))
{
SendClientMessage(playerid, vermelhoescuro, "Você já tem uma conta no Renaissance RPG!");
return 1;
}
format(senha, sizeof(senha), "%s", tmp);
new nomepl[MAX_PLAYER_NAME];
GetPlayerName(playerid, nomepl, sizeof(nomepl));
udb_Create(nomepl, senha);
SendClientMessage(playerid, azul, "Registrado com sucesso!");
return 1;
}
if (strcmp(cmd, "/logar", true)==0)
{
new tmp[256];
new senha[256];
tmp = strtok(cmdtext, idx);
if(!strlen(tmp))
{
SendClientMessage(playerid,vermelhoescuro,"/logar [senha] - Exemplo: /logar 123");
return 1;
}
if(logado[playerid] == 1)
{
SendClientMessage(playerid, vermelhoescuro, "Você já está logado!");
return 1;
}
format(senha, sizeof(senha), "%s", tmp);
if (udb_CheckLogin(PlayerName(playerid),tmp)) {
SendClientMessage(playerid, azul, "Logado com sucesso!");
return 1;
}
else
{
SendClientMessage(playerid, vermelho, "Senha errada!");
}
return 1;
}

Agora acabamos de criar nosso sistema de login/registro. Vamos criar agora um sistema para salvar o dinheiro de alguém.
CÓDIGO
//no OnPlayerDisconnect
new grana;
new nomepl[MAX_PLAYER_NAME];
GetPlayerName(playerid, nomepl, sizeof(nomepl));
grana = GetPlayerMoney(playerid);
udb_UserSetInt(nomepl, "Grana", grana);

//agora no OnPlayerSpawn
new grana;
new nomepl[MAX_PLAYER_NAME];
GetPlayerName(playerid, nomepl, sizeof(nomepl));
grana = udb_UserInt(nomepl, "Grana");
GivePlayerMoney(playerid, grana);

Pronto! Agora criamos um sistema que salva o dinheiro de alguém quando esta pessoa volta ao servidor! Para fazer as variáveis salvarem, é muito simples, basta adicionar o seguinte code no /logar e no OnPlayerDisconnect:
CÓDIGO
//No OnPlayerDisconect
new nomepl[MAX_PLAYER_NAME];
GetPlayerName(playerid, nomepl, sizeof(nomepl));
udb_UserSetInt(nomepl, "Banco", banco[playerid]);/*isso faz salvar, coloquei a variável banco[playerid] por pedido do Cronos, mas dependendo do que vc quiser salvar, mude isto*/

//no sistema de /logar
new nomepl[MAX_PLAYER_NAME];
GetPlayerName(playerid, nomepl, sizeof(nomepl));
Banco[playerid] = udb_UserInt(nomepl, "Banco");//Isso faz carregar, mude a variável Banco[playerid] e "Banco" pela variavel que quiser carregar

Isso vai fazer salvar a variável banco quando o player desconectar, e carregar quando ele logar.

7. Y_Objects
Y_Objects é um streamer de objetos usado para poder exceder o limite de objetos no sa-mp, evitando crashs. O ponto bom dele, é que você pode criar muitos objetos, o ponto ruim é que deixa seu script muito pesado e demora um pouco para carregar os objetos dentro do jogo. Enfim, vamos ao que interessa:
Para começar criando seus objetos, você deve trocar a função CreateObject por CreateDynamicObject, sem mudar as funções dentro dos parênteses. Após ter feito isso, você bota o seguinte no gamemode:

CÓDIGO
//no OnGameModeInit
Object_Object();
AQUI VC POE OS CREATEDYNAMICOBJECT

//no OnPlayerDisconnect
Object_OnPlayerDisconnect();

Pronto! Agora os objetos foram criados.
Caso vc queira saber um pouco mais sobre o Y_Objects, vou colocar aqui o que faz cada função.


Object_AddToPlayer(objectid, playerid) - Adiciona um certo objeto apenas para um player(use uma variável para definir o objeto)
Object_AddToWorld(objectid, world) - Adiciona um certo objeto apenas para um mundo virtual(lembrando que se não definir o world, o objeto será setado no inicial)
Object_AddToAllPlayers(objectid) - Adiciona um certo objeto a todos os players conectados(quem se conectar depois não verá os objetos)
Object_AddToAllWorlds(objectid) - Adiciona um certo objeto a todos os virtual worlds
Object_RemoveFromPlayer(objectid, playerid) - Remove um certo objeto para apenas um player
Object_RemoveFromWorld(objectid, world) - Remove um certo objeto de apenas um world.
Object_RemoveFromAllPlayers(objectid) - Remove o objeto de todos os players
Object_RemoveFromAllWorlds(objectid) - Remove de todos os virtual worlds
Object_SetViewDistance(objectid, distance) - Seta a distância no qual o objeto pode ser visto (normal = 1000)
MoveDynamicObject(object, x, y, z, speed) - Move um objeto
StopDynamicObject(objectid) - Para de mover um objeto
IsValidDynamicObject(objectid) - Checa se o objeto (do Y_Objects) existe
CreateDynamicObject(object, x, y, z, rx, ry, rz) - Cria um objeto do include
DestroyDynamicObject(object) - Destroy o objeto
AttachDynamicObjectToPlayer - Puxa o objeto junto ao jogador, ou seja, se o jogador se mover, o objeto vai junto
AttachDynamicObjectToObject - Puxa o objeto junto ao objeto, ou seja, se o objeto se mover, este objeto vai junto
DettachDynamicObjectFromPlayer - Despuxa o objeto do jogador



8. Races
Para fazer corridas, é um processo meio complicado, estaremos usando a função SetPlayerRaceCheckpoint.
Primeiramente, vou explicar como funciona cada função necessária para se criar uma corrida:
CÓDIGO
SetPlayerRaceCheckpoint(playerid, tipo, x, y, z, nextx, nexty, nextz, tamanho):
No playerid, vamos colocar o id da pessoa que vai receber o checkpoint, no tipo, o tipo do checkpoint, estes são os tipos:
0 - Normal: Checkpoints normais da corrida, aqueles que tem a seta apontando para onde vai ser o próximo checkpoint.
1 - Finish: Checkpoint Final de uma Corrida.
2 - Nothing: Checkpoint que não tem nada dentro dele.
3 - Air: Checkpoint feito para corridas aéreas.
4 - Air Finish: Checkpoint feito para final de corridas aéreas.
Em x,y e z colocaremos as coordenadas onde serão os checkpoints, e em nextx, nexty e nextz, as coordenadas do próximo checkpoint(caso seja um checkpoint de final, deixe as coordenadas do mesmo).
E por último, em tamanho colocaremos o tamanho do checkpoint(o natural é geralmente colocar 8.0)

DisablePlayerRaceCheckpoint(playerid):
Usaremos essa função para trocar de checkpoint quando o player chegar em algum checkpoint da corrida.

Agora vamos fazer nossa corrida. Para simplificar as coordenadas de checkpoint da corrida, vamos usar um Float Multi-Array.
Acrescentaremos isso em cima de OnGamemodeInit:

CÓDIGO
new checkcorrida[MAX_PLAYERS];

new Float:ChecksAvenida[17][3] = {
{2021.9279,851.2713,6.4387},
{1806.2888,851.1154,10.3762},
{1597.7745,850.9503,6.4374},
{1315.8704,886.0849,6.5154},
{1227.3850,1170.5470,6.5219},
{1228.7192,1804.4149,6.4378},
{1229.5260,2301.2026,6.4387},
{1447.5416,2452.2988,6.4377},
{1849.4731,2497.6997,6.5153},
{2287.5569,2607.9063,6.4585},
{2609.7202,2514.3423,5.8201},
{2706.6592,2158.3931,6.4492},
{2705.5173,1674.4374,6.4448},
{2706.8931,1278.5399,6.4373},
{2624.1135,932.2136,6.4433},
{2312.5583,854.1749,6.4375},
{2049.3154,853.4050,6.4387}
};

Pronto! Acabamos de fazer um Multi-Array com as coordenadas dos checkpoints da corrida! Essa corrida está localizada na avenida, em LV. Agora vamos fazer um comando para o player entrar na corrida. (vamos fazer uma corrida singleplayer por enquanto, apenas para explicar como fazer a troca de checkpoints) Logo que ele digitar o comando, o checkpoint 1 da corrida vai aparecer no mapa do player, e quando entrar no checkpoint, vai aparecer o 2, e assim por diante... Então, aqui o code do comando:

CÓDIGO
if(strcmp(cmdtext,"/entrarcorrida",true)==0)
{
checkcorrida[playerid] = 0;
SetPlayerRaceCheckpoint(playerid, 0, ChecksAvenida[checkcorrida[playerid]][0], ChecksAvenida[checkcorrida[playerid]][1], ChecksAvenida[checkcorrida[playerid]][2], ChecksAvenida[checkcorrida[playerid] + 1][0], ChecksAvenida[checkcorrida[playerid] + 1][1], ChecksAvenida[checkcorrida[playerid] + 1][2], 8.0);
return 1;
}

E agora, faremos um sistema para trocar de checkpoint, usando o callback OnPlayerEnterRaceCheckpoint. Caso não o tenha no seu gamemode, adicione.
CÓDIGO
public OnPlayerEnterRaceCheckpoint(playerid)
{
if(checkcorrida[playerid] == 17)
{
SendClientMessage(playerid, 0xFFFF00AA, "Você terminou a corrida!");
DisablePlayerRaceCheckpoint(playerid);
checkcorrida[playerid] = 0;
return 1;
}
else
{
DisablePlayerCheckpoint(playerid);
checkcorrida[playerid] ++;
SetPlayerRaceCheckpoint(playerid, 0, ChecksAvenida[checkcorrida[playerid]][0], ChecksAvenida[checkcorrida[playerid]][1], ChecksAvenida[checkcorrida[playerid]][2], ChecksAvenida[checkcorrida[playerid] + 1][0], ChecksAvenida[checkcorrida[playerid] + 1][1], ChecksAvenida[checkcorrida[playerid] + 1][2], 8.0);
return 1;
}
}

Então, o que acabamos de fazer?
Criamos uma multi-array para simplificar as coordenadas dos checkpoints, e também criamos uma variável para definir o checkpoint que o player está. Então, cada vez que o player entrava em um checkpoint, a variável aumentava e se setava um checkpoint de acordo com o número que estava a variável. Quando a variável chegasse em 17, finalizaria a corrida. Assim fizemos nossa corrida.


FIM
Acompanhe as atualizações desse tutorial no link a seguir: http://forum.samp-br.com/index.php?showtopic=230

Feito por waxhunter

BMW 730i X-Games tuning

by Lucas_adm Postado quarta-feira, 21 de maio de 2008 às 12:38 1 comentários

para fazer o dowload clike na imagem acima ^^ ou qual quer duvida add no msn cronos_bomba@hotmail.com esse carro eh ecelente ja vem tunado!!!!!!

mod gasolina

by Lucas_adm Postado às 11:30 0 comentários

para baixar o mod clik na imagem utorial de como instalar e usar: para baixar o mod clik na imagem

Instalando:

Ele tambem tem um velocimetro embutido que vocês podem escolher entre milha e km/h, depois de escolher qual vocês vão usar copiem os 2 arquivos de dentro da pasta e cole na pasta C:\Arquivos de programas\Rockstar Games\GTA San Andreas\data\script.
Depois disso pegue os arquivos "american.gxt" e "french.gxt" e cole na pasta C:\Arquivos de programas\Rockstar Games\GTA San Andreas\text.
Pronto, está instalado.para baixar o mod clik na imagem

Como usar:
Todos os posto do GTA vai ter um lugar marcado em vermelho e so parar em cima que o tanque começa encher.para baixar o mod clik na imagem


para baixar o mod clik na imagem acima ^^^^ ou qualquer duvida add no seu msn cronos_bomba@hotmail.com

velocimetro news speed

by Lucas_adm Postado às 10:41 0 comentários


ola galera sou um novo colaborador aki
quero lhe apresentar o velocimetro news speed clike na foto para baixar

SA:MP voltou denovo!

by Anônimo Postado sábado, 17 de maio de 2008 às 15:04 8 comentários

É daqui a pouco o blog está cheio de "voltou, acabou, voltou, acabou"!

SA-MP acabou de novo!

by Anônimo Postado às 07:43 2 comentários

Bom gente logo algum tempo depois de mim postar a notícia que a lista de servers da internet voltou, ela voltou a fecha!

Bom espero que o SA:MP volte...

SA:MP NÃO ACABOU!

by Anônimo Postado quinta-feira, 15 de maio de 2008 às 14:50 10 comentários

Gente venho trazer uma ÓTIMA notícia para todos.

O SA:MP está... DEVOLTA!!!!

Lista de servidores da Internet está online novamente, sem precisar de plugins!!! \o/

Grande Makabo \o/

[APP] AMX Decompiler

by Anônimo Postado quarta-feira, 14 de maio de 2008 às 19:09 3 comentários

Programa que decompila arquivos AMX para PWN. Instruções de como usar no arquivo Leia_Me.txt.

OS ARQUIVOS PWN PODERÃO VIR COM ALGUNS ERROS E ALGUNS FS/GM TALVEZ NEM DECOMPILEM!

Créditos não encontrados.

SA:MP 0.2.2 R2 Client (para jogar online)


SA:MP 0.2.2 R2 Server (para criar um servidor caseiro)




Se a lista de servidores da Internet não aparecer, baixe este plugin: http://cronosbr.blogspot.com/2008/05/samp-plugin-para-ver-os-servidores-da.html

[FS] CountDown

by Anônimo Postado às 18:49 2 comentários

FS de contagem regressiva.
Comandos:

/count [quantia]


Créditos não encontrados.

[FS] Nome dos Carros

by Anônimo Postado às 18:40 0 comentários

Esse FS permite que quando você entre em algum veículo mostre o nome dele no canto da tela.

Créditos não encontrados.

[GM] Bayside RPG + PWN

by Anônimo Postado às 18:35 7 comentários

Um RPG bem legal não totalmente traduzido com o código PAWN para download. Os comando poderão ser vistos no próprio gamemode.


Créditos não encontrados.

[GM] SFTDM V4 + Codigo Fonte

by Anônimo Postado às 17:34 4 comentários

NÃO RETIREM OS CREDITOS!

Nova Versão:

~> Nome dos Carros
~> Drop de Armas
~> Alguns Ajustes

Gangs:

Swat
Pimp
Rifa
Triads

Weapons:

Swat: M4 - 9mm - Granada
Pimp: Escopeta - Desert - Molotov
Rifa: AK47 - Desert - Molotov
Triads: Mac10 - 9mm - Granada

Comandos:

/ajuda
/morrer
/transferir
/creditos

Creditos:

Wilton Borim


wilton_32@hotmail.com



Screens:

http://img151.imageshack.us/my.php?image=samp008av2.png
http://img186.imageshack.us/my.php?image=samp004zw8.png
http://img175.imageshack.us/my.php?image=samp005gt8.png
http://img186.imageshack.us/my.php?image=samp006vl2.png
http://img178.imageshack.us/my.php?image=imagemzm7.png
http://img504.imageshack.us/my.php?image=imagembz2.jpg
http://img504.imageshack.us/my.php?image=imagem2nd9.jpg

Bom gente, como muitos sabem a lista de servidores da Internet fechou. Então eu estava olhando a comunidade GTA San Andreas Online SA-MP e vi um plugin para download, ele serve para visualizar todos os servidores da Internet. Já testei e funciona!

Para instala-lo apenas descompacte em algum lugar fácil, execute o SA:MP e logo em seguida execute o Plugin, ai é só clicar em Internet e escolher seu server!

OBS: Cada vez que você for usar a lista de servidores da internet você precisa executar o Plugin.


SA-MP AINDA NÃO MORREU!

Assim com a lista de servers da Internet fechada, trago a vocês um arquivo que adiciona 51 servers 24h de SA:MP nos favoritos.

Para instalar, arraste o arquivo até a pasta do GTA San Andreas e substitua o arquivo.

AVISO: FAÇA BACKUP DO ARQUIVO USERDATA.DAT

Feito por: João

[SA:MP] A verdadeira história

by Anônimo Postado às 12:36 0 comentários

[KaE]Sinatra deixou suas palavras na comunidade do orkut "GTA San Andreas Online SA-MP", dando uma luz para aqueles que estão "boiando" e se perguntando o por que do fechamento do SA:MP. Veja o que ele disse:

"Como todos devem estar se perguntando sobre os fatos que se sucederam até que finalmente o desenvolvimento do SA:MP sucumbisse a ponto de desaparecer permanentemente como oficial, creio que este relatório que desenvolvi (com base nas palavras dos próprios criadores, como consta nesse fórum: http://www.gamerxserver.com/forum/index.php?topic=1027.0) será de grande ajuda na compreensão dos fatos, visto que até agora apenas foram lançadas especulações.
Primeiro gostaria de demonstrar que, perante meu ponto de vista e segundo os rumores do que se sucedeu naquela discussão, não há a mínima possibilidade de que futuras versões venham a ser lançadas nem de que o fórum volte a sua atividade normal ou que isso seja algo meramente temporário.
Como começou: A princípio, Sacky, um dos desenvolvedores do SA:MP foi até o fórum do GamerX prestar sérias denúncias contra o desenvolvedor e criador do SA:MP, Kyeman, pelo que, segundo ele, era uma fraude e desvio de recurso. Na denúncia de Sacky, constava que Kye desviava constantemente o dinheiro pago pelos servidores oficiais para o seu usufruto próprio, sem que para isso os servidores fossem avisados. De fato, Kyeman admitiu que o dinheiro (cerca de US$200,00) era realmente direcionado a sua conta particular e que os demais desenvolvedores não recebiam nenhuma parte desse dinheiro, porém, alegou que essa quantia fosse retida como forma de reduzir os gastos que tinha para manter todo o sistema do SA:MP funcionando.
Não satisfeito apenas com isso, Sacky trouxe a pauta várias denúncias contra Kyeman apontando irregularidades e ações ilegais passíveis de punição, e por diversas vezes divulgou informações pessoais atacando a imagem de Kyeman, que por sua vez ameaçou Sacky de tomar as devidas atitudes legais em defesa de sua pessoa. A comunidade da GamerX apoiou a atitude de Sacky em realizar tais denúncias, muitas vezes se utilizando de meios baixos para realizar tal apoio.
O motim: Após várias páginas de ameaças e trocas de acusações entre as partes (e a grande desaprovação dos membros com Kyeman, com a exceção de Y_Less que permaneceu do lado deste), levantaram-se questões interessantes, como a de Sacky possuir um perfil em uma comunidade de cheats de SA:MP e procurar falhas no sistema para desenvolver armas de ataque (como o sistema de ataque via DoS que circulou recentemente e foi consertado com a versão 0.2.2 R2 do SA:MP). Sacky também foi acusado de conspirar contra o desenvolvimento do mod e de agir de má fé mesmo estando em meio à equipe desenvolvedora.
A conclusão: Ao final de várias páginas cheias de comentários, Kyeman acabou por desistir do projeto SA:MP uma vez que tal realização estava a ponto de comprometer seu nome e carreira como programador, e que certamente tal perda não era válida, visto que a vida pessoal é muito mais importante do que um mero mod de jogo online. Ao que parece, Cam, dono do PartyServer, foi atacado pelas palavras de um anônimo e parece ter dado fim ao projeto de um dos mais famosos e populares servidores de DM. E após toda essa parte decisória, a finalização se deu por xingamentos e ofensas vindas de ambas as partes com opiniões diversas.
Resumindo: Uma grande falta de comunicação por parte dos desenvolvedores levou Sacky e a comunidade do GamerX a matar o projeto do SA:MP. Pessoas imbecis e sem uma opinião formada em dados sólidos também contribuíram para que isso ocorresse, e o pior, algumas pessoas correm sérios riscos de serem processadas por descumprir as leis, o que certamente transcende o que o projeto do SA:MP jamais sonhou em ser, um incidente na vida real.

[KaE]Sinatra"

Minha Opinião: Esse caso ai ta pior que os políticos lá de Brasília.

SA:MP ACABOU!

by Anônimo Postado terça-feira, 13 de maio de 2008 às 17:02 15 comentários

Bom gente, quem quis procurar um servidor na lista de servidores da internet se deparou com a derrota, descepção e tristeza.
Depois da notícia que o site do SA:MP e do Grand-Larceny(ex-futuro SA:MP 2.5) fechou os fãs fanáticos, choraram!!!!
A maldita lista de servidores da internet está fechada e só sobrou a porcaria dos servidores oficiais com uns gamemodes bem ridiculos!
Bom, não sei o que vou fazer sobre o blog, aprender a programar gamemodes pra MTA ou sei lá!

Acho que todos que adoravam esse mod Multiplayer para GTA SA querem dizer o mesmo que eu:

ADEUS SA:MP, SENTIREMOS SUA FALTA!

[MOD] Gráficos do GTA IV no GTA San Andreas!

by Anônimo Postado quarta-feira, 7 de maio de 2008 às 10:27 11 comentários

Esse mod deixa os gráficos do GTA San Andreas parecidos com o do GTA IV(não é lá aquelas coisas, mas fica mais bonito ^^).

Para ativar, durante o jogo aperta Shift+F12

Vídeo:

GTA IV Bug: Moto mágica

by Anônimo Postado às 10:24 0 comentários

Um bug achado por um gringo jogando GTA IV Online, a moto está de ponta cabeça e com o jogador dentro dela, e ainda da pra girar um pouco ela acelerando.

Vídeo que mostra as mulheres da cidade do GTA IV, des de stripers até prostitutas dando. GTA IV vai mostrar muita cenas picantes, por isso não recomendo à menores de 18 anos assistirem isso!

Mal lançou o GTA IV e já tem Easter Egg rolando por ai. Dessa vez é um coração pulsando na Estátua da Liberdade do GTA IV, nomeado de "Coração da Cidade". Olhem o vídeo:

Bom, antes do dia de lançamento do GTA IV(29/04/08), um malandro que tinha sua cópia pirata do GTA IV colocou 5 vídeos na net mostrando como é o jogo:

Vídeo 1: http://br.youtube.com/watch?v=1x7t5RMsy14
Vídeo 2: http://br.youtube.com/watch?v=-R13X9BOaCU
Vídeo 3: http://br.youtube.com/watch?v=_j1iXZ2R2j4
Vídeo 4: http://br.youtube.com/watch?v=ktZ-ePCE41g
Vídeo 5: http://br.youtube.com/watch?v=efWQWeCoat4

AVISO: SE FOREM COMENTAR OS VÍDEOS NÃO FALEM O NOME DO JOGO POR QUE SE NÃO A Take2 BANI O VÍDEO!!!

Nosso amigo [MPA]matraka_IDG upou os 5 vídeos para download:

Vídeo 1:
http://www.samp-br.com/videos/GTA_IV_Video_1.mp4
Vídeo 2:
http://www.samp-br.com/videos/GTA_IV_Video_2.mp4
Vídeo 3:
http://www.samp-br.com/videos/GTA_IV_Video_3.mp4
Vídeo 4:
http://www.samp-br.com/videos/GTA_IV_Video_4.mp4
Vídeo 5:
http://www.samp-br.com/videos/GTA_IV_Video_5.mp4

Aproveitem e babem até terem um ps3, xbox ou esperar lançarem o GTA IV pra pc. xP

Mini-tutorial de como instalar veículos no seu GTA SA.

Segundo o site Msn Jogos, a garota do pirulito de uma artwork do GTA IV ganha no Top 20 - Os mulherões dos games.

"1) Chupadora de pirulito do Grand Theft Auto IV

Ela não tem nome. Não faz parte do jogo. Não tem uma fala sequer. Não é nada mais que um pedaço do loading inicial, dividindo essa aparição pífia com outras carinhas do jogo, sendo alguns parte da história, e não tem, em nenhum dos quatro cantos da internet, nenhuma outra imagem, que seja diferente ou que mostre mais pele do que essa que está na galeria mais abaixo. Ainda assim, leva o ouro por causa do pirulito."

Fonte: http://jogos.br.msn.com/noticias/top-20-os-mulheroes-dos-games

Uma screen da vencedora:
PS: Nome malicioso que derão pra ela! =x