Sistema de Atores (Actor System) -
Rhayziin - 10.05.2015
O que й um Actor?
De uma forma direta e simplificada de explicar, sгo considerados NPC's estбticos, nгo ocuparгo SLOTS em seu servidor. Sabe aqueles NPC's que ficam parados atrбs de balcхes? O ator(Actor) й a mesma coisa. Diferente do NPC normal, ele tem uma funcionalidade limitada.
OBS: O limite mбximo de Actors й 1000 (MAX_ACTORS).
Quais sгo as funзхes?
✖ CreateActor(modelid, Float:X, Float:Y, Float:Z, Float:Rotation)
Descriзгo: A funзгo jб fala por si sу, criarб um novo ator no game.
Especificaзхes da funзгo:
Код:
modelid - ID da Skin que o ator receberб.
Float:X - A Coordenada X da posiзгo do Ator.
Float:Y - A Coordenada Y da posiзгo do Ator.
Float:Z - A Coordenada Z da posiзгo do Ator.
Float:Rotation - O Вngulo (Rotaзгo) do Ator.
Modo de uso:
PHP код:
new SashaGray;
public OnGameModeInit()
{
// Criarб um novo actor, com a skin ID 306 (WFYCLPD) na posiзгo 1480.94, -1764.35, 18.79 e rotaзгo 0.60
SashaGray = CreateActor(306, 1480.94, -1764.35, 18.79, 0.60);
}
✖ DestroyActor(actorid)
Descriзгo: Destruirб um Ator desejado, para usar esta funзгo, antes terб que criб-lo com a funзгo
CreateActor.
Especificaзхes da funзгo:
Код:
actorid - O ID do Ator, usado em CreateActor.
Modo de uso:
PHP код:
new SashaGray;
public OnGameModeInit()
{
SashaGray = CreateActor(306, 1480.94, -1764.35, 18.79, 0.60);
}
public OnGameModeExit()
{
DestroyActor(SashaGray);
}
✖ IsValidActor(actorid)
Descriзгo: Verificarб se um Ator й vбlido ou nгo.
Especificaзхes da funзгo:
Код:
actorid - O ID do Ator para checar.
Valores que retornarгo:
0 - O ator nгo й vбlido.
1 - O ator й vбlido.
Modo de uso:
PHP код:
new SashaGray;
public OnFilterScriptInit()
{
SashaGray = CreateActor(306, 1480.94, -1764.35, 18.79, 0.60);
if(IsValidActor(SashaGray)) //Verificando se o Ator 'SashaGray' й vбlido, se sim, executa o cуdigo abaixo:
{
print("Ator 'SashaGray' vбlido, aquela safadinha, adoro :)");
}
else //Se o Ator nгo for vбlido, entгo executa o cуdigo abaixo:
{
print("Ator 'SashaGray' invбlido, deve tб fazendo outro filme porno :(");
}
return 1;
}
✖ GetActorPos(actorid, &Float:X, &Float:Y, &Float:Z)
Descriзгo: Muito parecida com a funзгo
GetPlayerPos, esta funзгo geta a posiзгo X, Y, Z do Ator.
Especificaзхes da funзгo:
Код:
actorid - O ID do Ator, usado em CreateActor.
&Float:X - Uma variбvel flutuante (float) que receberб o valor da posiзгo X do ator.
&Float:Y - Uma variбvel flutuante (float) que receberб o valor da posiзгo Y do ator.
&Float:Z - Uma variбvel flutuante (float) que receberб o valor da posiзгo Z do ator.
Modo de uso:
PHP код:
new SashaGray;
public OnFilterScriptInit()
{
SashaGray = CreateActor(306, 1480.94, -1764.35, 18.79, 0.60);
new Float:x, Float:y, Float:z; //Criando as variбveis flutuantes x, y, z
GetActorPos(SashaGray, x, y, z); //Pegando e atribuindo os valores аs variбveis criadas
//ou
new Float:PosActor[3];
GetActorPos(SashaGray, PosActor[0], PosActor[1], PosActor[2]);
return 1;
}
⇡ Debug ⇡
✖ SetActorPos(actorid, Float:X, Float:Y, Float:Z)
Descriзгo: Setarб a posiзгo do Ator para algum lugar desejado.
Especificaзхes da funзгo:
Код:
actorid - O ID do Ator, usado em CreateActor.
Float:X - A Coordenada X que o ator se teleportarб.
Float:Y - A Coordenada Y que o ator se teleportarб.
Float:Z - A Coordenada Z que o ator se teleportarб.
Modo de uso:
PHP код:
new SashaGray;
public OnFilterScriptInit()
{
SashaGray = CreateActor(306, 1480.94, -1764.35, 18.79, 0.60);
SetActorPos(SashaGray, 2176.64, -986.69, 64.46); //Teletransportarб o Ator para 2176.64, -986.69, 64.46
return 1;
}
✖ SetActorVirtualWorld(actorid, vworld)
Descriзгo: Setarб o Virtual World (Mundo Virtual) de um Ator.
Especificaзхes da funзгo:
Код:
actorid - O ID do Ator, usado em CreateActor.
vworld - O ID do Virtual World que o Ator serб colocado.
Modo de uso:
PHP код:
new SashaGray;
public OnFilterScriptInit()
{
SashaGray = CreateActor(306, 1480.94, -1764.35, 18.79, 0.60);
SetActorVirtualWorld(SashaGray, 24); //Colocando o Ator no Virtual World(Mundo virtual) 24
return 1;
}
✖ GetActorVirtualWorld(actorid)
Descriзгo: Pegarб o Virtual World (Mundo Virtual) de um Ator. O Virtual World por padrгo, ou seja, quando o Ator for criado, й 0.
Especificaзхes da funзгo:
Код:
actorid - O ID do Ator, usado em CreateActor.
Modo de uso:
PHP код:
new SashaGray;
public OnFilterScriptInit()
{
SashaGray = CreateActor(306, 1480.94, -1764.35, 18.79, 0.60);
SetActorVirtualWorld(SashaGray, 24); //Colocando o Ator no Virtual World(Mundo virtual) 24
if(GetActorVirtualWorld(SashaGray) == 24) //Se o Virtual World do Ator for 24, entгo...
{
//Reaзгo...
}
return 1;
}
✖ SetActorInvulnerable(actorid, invulnerable = true)
Descriзгo: Alterar invulnerabilidade de um Ator. Uma vez que o Ator й invulnerбvel, nгo chama a Callback
OnPlayerGiveDamageActor.
Especificaзхes da funзгo:
Код:
actorid - O ID do Ator, usado em CreateActor.
invulnerable - Coloque 0 (false) para tornб-lo vulnerбvel ou coloque 1 (true) para tornб-lo invulnerбvel.
Modo de uso:
PHP код:
new SashaGray;
public OnFilterScriptInit()
{
SashaGray = CreateActor(306, 1480.94, -1764.35, 18.79, 0.60);
SetActorInvulnerable(SashaGray, true); //Tornarб o Ator invulnerбvel, vocк tambйm poderia usar apenas SetActorInvulnerable(SashaGray); para fazer o mesmo.
return 1;
}
✖ IsActorInvulnerable(actorid)
Descriзгo: Verificarб se um Ator й invulnerбvel ou nгo.
Especificaзхes da funзгo:
Код:
actorid - O ID do Ator, usado em CreateActor para chegar se й invulnerбvel ou nгo.
Valores que retornarгo:
0 - O ator й vulnerбvel, ou seja, sofrerб dano.
1 - O ator й invulnerбvel, ou seja, nгo sofrerб dano.
Modo de uso:
PHP код:
new SashaGray;
public OnFilterScriptInit()
{
SashaGray = CreateActor(306, 1480.94, -1764.35, 18.79, 0.60);
if(IsActorInvulnerable(SashaGray)) //Verificando se o Ator 'SashaGray' й Invulnerбvel, se sim, executa o cуdigo abaixo:
{
print("O Ator й invulnerбvel, nгo sofrerб dano.");
}
else //Se nгo for invulnerбvel, executa o cуdigo abaixo:
{
print("O Ator й vulnerбvel, vamos matar esse fi de rapariga.");
}
return 1;
}
✖ SetActorHealth(actorid, Float:health)
Descriзгo: Setarб a vida de um determinado Ator.
Especificaзхes da funзгo:
Код:
actorid - O ID do Ator, usado em CreateActor.
Float:health - A quantidade de vida que o serб atribuнda ao Ator.
Modo de uso:
PHP код:
new SashaGray;
public OnFilterScriptInit()
{
SashaGray = CreateActor(306, 1480.94, -1764.35, 18.79, 0.60);
SetActorHealth(SashaGray, 100); //Seta a vida do Ator para 100
return 1;
}
✖ GetActorHealth(actorid, &Float:health)
Descriзгo: Pega a vida de um determinado Ator.
Especificaзхes da funзгo:
Код:
actorid - O ID do Ator, usado em CreateActor.
&Float:health - A variбvel flutuante (float) que armazenarб a quantidade de vida do Ator.
Modo de uso:
PHP код:
new SashaGray;
public OnFilterScriptInit()
{
SashaGray = CreateActor(306, 1480.94, -1764.35, 18.79, 0.60);
SetActorHealth(SashaGray, 100); //Seta a vida do Ator para 100
new Float:Health_Actor; //Criando a variбvel que armazenarб o quantidade de vida
GetActorHealth(SashaGray, Health_Actor); //Pegando e atribuindo a vida do Ator а variбvel
printf("A vida do Ator ID %d й %.2f", SashaGray, Health_Actor); //[DEBUG]
return 1;
}
⇡ Debug ⇡
✖ SetActorFacingAngle(actorid, Float:ang)
Descriзгo: Setarб o вngulo (rotaзгo) de um determinado Ator.
Especificaзхes da funзгo:
Код:
actorid - O ID do Ator, usado em CreateActor.
Float:ang - O вngulo (rotaзгo) desejado que o Ator ficarб.
Modo de uso:
PHP код:
new SashaGray;
public OnFilterScriptInit()
{
SashaGray = CreateActor(306, 1480.94, -1764.35, 18.79, 0.60);
SetActorFacingAngle(SashaGray, 180.0); //Setarб a rotaзгo do Ator para 180.0
return 1;
}
✖ GetActorFacingAngle(actorid, &Float:ang)
Descriзгo: Pegarб o вngulo (rotaзгo) de um determinado Ator existente.
Especificaзхes da funзгo:
Код:
actorid - O ID do Ator, usado em CreateActor.
&Float:ang - Variбvel flutuante (float) que armazenarб a rotaзгo do Ator.
Modo de uso:
PHP код:
new SashaGray;
public OnFilterScriptInit()
{
SashaGray = CreateActor(306, 1480.94, -1764.35, 18.79, 0.60);
new Float:AnguloAtor; //Criando a variбvel que armazenarб o valor da rotaзгo do Ator
GetActorFacingAngle(SashaGray, AnguloAtor); //Pegando e atribuindo o valor da rotaзгo а variбvel criada acima
printf("O вngulo(rotaзгo) do Ator ID %d й %.2f", SashaGray, AnguloAtor); //[DEBUG]
return 1;
}
⇡ Debug ⇡
✖ ApplyActorAnimation
(actorid, animlib[], animname[], Float:fDelta, loop, lockx, locky, freeze, time)
Descriзгo: Aplicarб uma animaзгo a um determinado Ator existente.
Especificaзхes da funзгo:
Код:
actorid - O ID do Ator, usado em CreateActor.
animlib[] - A biblioteca que a animaзгo pertence.
animname[] - O nome da animaзгo da biblioteca especificada.
fDelta - A velocidade para reproduzir a animaзгo (use 4.1).
loop - Se definido como 1, a animaзгo se repetirб. Se definido como 0, a animaзгo vai reproduzir apenas uma vez.
lockx - Se definido como 0, o Ator й devolvido а sua antiga posiзгo (X) e uma vez que a animaзгo й completa (para animaзхes que movem o ator, como caminhar). Se definido como 1, nгo vai devolvк-lo а antiga posiзгo.
locky - O mesmo que acima, mas para o eixo Y. Deve ser mantido o mesmo que o parвmetro anterior.
freeze - Se definido como 1, irб congelar o Ator no final da animaзгo, se definido como 0, isso nгo acontecerб.
time - Tempo em milissegundos. Para um loop sem fim deverб colocar 0.
Modo de uso: (Listei algumas animaзхes, se quiserem й sу clicar aqui)
PHP код:
new SashaGray;
public OnFilterScriptInit()
{
SashaGray = CreateActor(306, 1480.94, -1764.35, 18.79, 0.60);
ApplyActorAnimation(SashaGray, "DEALER", "shop_pay", 4.1, 0, 0, 0, 0, 0); // Pay anim
return 1;
}
Descriзгo: Pararб a animaзгo executada por um determinado Ator.
Especificaзхes da funзгo:
Код:
actorid - O ID do Ator, usado em CreateActor.
Modo de uso:
PHP код:
new SashaGray;
public OnFilterScriptInit()
{
SashaGray = CreateActor(306, 1480.94, -1764.35, 18.79, 0.60);
ApplyActorAnimation(SashaGray, "DEALER", "shop_pay", 4.1, 0, 0, 0, 0, 0); // Pay anim
return 1;
}
//Coloque em alguma funзгo, comando, public e etc...
ClearActorAnimations(SashaGray); //Pararб a animaзгo que o determinado Ator estiver executando
✖ GetPlayerTargetActor(playerid)
Descriзгo: Obtйm o id de um Ator que estб sendo mirado por um jogador. Nгo funciona para joypads / controladores, depois de uma certa distвncia e tambйm nгo funciona se o jogador estiver mirando com rifle sniper.
Код:
playerid - O ID do Jogador que estб mirando para algum Ator.
Modo de uso:
PHP код:
public OnPlayerUpdate(playerid)
{
new AtorMirado = GetPlayerTargetActor(playerid); //Criado uma variбvel e atribuindo-a o ID do ator que o jogador estб mirando
if(IsValidActor(AtorMirado) && GetPlayerWeapon(playerid) != 0) //Verifica se o Ator que estб sendo mirado й vбlido e se o jogador estб desarmado, se o Ator for invбlido ou o jogador estiver sem armas, nгo й executado o cуdigo abaixo.
{
new WeaponName[24], String[128]; //Criando as variбveis para armazenar Textos, como o nome da arma(WeaponName) e a mensagem que serб transmitida(String).
GetWeaponName(GetPlayerWeapon(playerid), WeaponName, sizeof(WeaponName)); //Pegando o nome da arma que o jogador estб segurando na mгo
format(String, sizeof(String), "{00FF00}Vocк estб mirando para o Actor de ID {FF8000}%d {00FF00}com a arma {FF8000}%s", AtorMirado, WeaponName); //Formatando a mensagem que serб transmitida
SendClientMessage(playerid, -1, String); //Enviando a mensagem - isso й como se fosse um debug
}
return 1;
}
✖ GetActorPoolSize()
Descriзгo: Obtйm a maior ActorID(ID do Ator) criado no servidor.
Modo de uso:
PHP код:
public OnFilterScriptInit()
{
CreateActor(306, 1480.94, -1764.35, 18.79, 0.60); //ID 0
CreateActor(228, 0.0, 0.0, 0.0, 0.90); //ID 1
CreateActor(228, 3.0, 2.0, 0.0, 0.90); //ID 2
CreateActor(228, 6.0, 4.0, 0.0, 0.90); //ID 3
CreateActor(228, 9.0, 6.0, 0.0, 0.90); //ID 4
CreateActor(228, 12.0, 8.0, 0.0, 0.90); //ID 5
for(new j; j <= GetActorPoolSize(); ++j) //Criando um loop, se a variбvel 'j' for menor ou igual ao maior Actor ID criado no servidor, o cуdigo abaixo й executado
{
if(IsValidActor(j)) //Se o Actor ID 'j' for vбlido entгo...
{
SetActorVirtualWorld(j, 69); //Setando o Virtual World (Mundo Virtual) do Ator ID 'j' para 69
SetActorInvulnerable(j, false); //Deixando o Ator ID 'j' vulnerбvel
SetActorHealth(j, 100.0); //Setando a vida do Ator ID 'j' para 100
}
}
printf("Maior ActorID do servidor: %d", GetActorPoolSize()); //[DEBUG]
return 1;
}
⇡ Debug ⇡
✖ GetPlayerCameraTargetActor(playerid)
Descriзгo: Pega o ID do Ator que o jogador estб olhando. Esta funзгo й desabilitada por padrгo para economizar largura de banda. Terб que usar primeiro a funзгo
EnablePlayerCameraTarget para habilitб-lo para cada jogador.
Код:
playerid - O ID do Jogador que estб olhando para algum Ator.
Modo de uso:
PHP код:
public OnPlayerConnect(playerid)
{
EnablePlayerCameraTarget(playerid, 1); //Como dito na descriзгo da funзгo, isso deverб ser habilitado para que o cуdigo funcione.
return 1;
}
public OnPlayerUpdate(playerid)
{
new AtorObservado = GetPlayerCameraTargetActor(playerid); //Criando uma variбvel e atribuindo-a o ID de algum ator que o jogador estб olhando
new String[128];
if(AtorObservado != INVALID_ACTOR_ID) //Verificando se o jogador nгo й invбlido, se ele for vбlido, executa o cуdigo abaixo:
{
format(String, sizeof(String), "Vocк estб olhando para o Actor ID %d", AtorObservado); //Formata uma mensagem onde diz qual o ID do Ator que o jogador estб observando.
SendClientMessage(playerid, -1, String); //Enviando a mensagem no chat
}
return 1;
}
Descriзгo: Essa funзгo verificarб se existe hб um determinado Ator(
actorid) no campo de visгo do Jogador(
forplayerid).
Especificaзхes da funзгo:
Код:
actorid - actorid - O ID do Ator, usado em CreateActor.
forplayerid - O ID do jogador que estб vendo ou nгo o Ator (actorid).
Modo de uso:
PHP код:
new SashaGray;
public OnFilterScriptInit()
{
SashaGray = CreateActor(306, 1480.94, -1764.35, 18.79, 0.60);
return 1;
}
public OnPlayerSpawn(playerid)
{
if(IsActorStreamedIn(SashaGray, playerid)) //Verificando se o playerid estб vendo o Ator 'SashaGray' no seu campo de visгo, se sim, executa o cуdigo abaixo:
{
SendClientMessage(playerid, -1, "O Ator 'SashaGray' estб em seu campo de visгo.");
}
else //Se o jogador (playerid) nгo estiver vendo o Ator 'SashaGray' no campo de visгo, executa o cуdigo abaixo:
{
SendClientMessage(playerid, -1, "O Ator 'SashaGray' nгo estб em seu campo de visгo.");
}
return 1;
}
Quais sгo as Callbacks?
✖ OnPlayerGiveDamageActor
(playerid, damaged_actorid, Float:amount, weaponid, bodypart)
Descriзгo: Essa callback й chamada quando um jogador dб dano a um ator que й vulnerбvel.
Especificaзхes da funзгo:
Код:
playerid - O ID do jogador que deu danos ao Ator(damaged_actorid).
damaged_actorid - O ID do Ator que recebeu danos.
Float:amount - A quantidade de vida/colete que o Ator perdeu.
weaponid - O ID da arma que causou o dano, ou seja, a arma que o jogador estava usando quando deu dano ao Ator.
bodypart - A parte do corpo que foi atingida.
Modo de uso:
PHP код:
public OnPlayerGiveDamageActor(playerid, damaged_actorid, Float: amount, weaponid, bodypart)
{
new StringActor[150], WeaponName[24]; //Criando as variбveis que amazenarб o nome da arma(WeaponName) e a mensagem que serб transmitida no chat(StringActor)
GetWeaponName(weaponid, WeaponName, sizeof (WeaponName)); //Pegando o nome da arma que foi usada para causa dano ao Ator
if(!IsActorInvulnerable(damaged_actorid)) //Verificando se o Ator й vulnerбvel, se sim, segue o cуdigo. Se nгo, o cуdigo abaixo nгo й executado
{
new Float:Actor_Health; //Criando a variбvel que armazenarб a vida do Ator
GetActorHealth(damaged_actorid, Actor_Health); //Pegando a vida atual do Ator
SetActorHealth(damaged_actorid, Actor_Health-amount); //Aplicando o dano ao Ator
format(StringActor, sizeof(StringActor), "ActorID: %d | VW: %d | Arma: %s | BodyPartID: %d | Dano: %.0f | Vida: %.0f", damaged_actorid, GetActorVirtualWorld(damaged_actorid), WeaponName, bodypart, amount, Actor_Health-amount); //Formatando a mensagem que serб enviada no chat
SendClientMessage(playerid, -1, StringActor); //Enviando a mensagem no chat
}
return 1;
}
✖ OnActorStreamIn(actorid, forplayerid)
Descriзгo: Essa Callback й chamada quando um Ator (
actorid) entra no campo de visгo de um jogador (
forplayerid).
Especificaзхes da funзгo:
Код:
actorid - O ID do Ator que entra no campo de visгo do jogador (forplayerid).
forplayerid - O ID do jogador que estб vendo o Ator (actorid).
Modo de uso:
PHP код:
public OnActorStreamIn(actorid, forplayerid)
{
new String[40]; //Criando uma variбvel que armazenarб Textos, aqui no caso, serб uma mensagem formatada.
format(String, sizeof(String), "Ator ID %d entrou no seu campo de visгo.", actorid); //Formatando a mensagem, mostrarб qual o ID de qualquer ator que entrar no campo de visгo do jogador.
SendClientMessage(forplayerid, 0xFFFFFFFF, String); //Enviando a mensagem no Chat
return 1;
}
✖ OnActorStreamOut(actorid, forplayerid)
Descriзгo: Essa Callback й chamada quando um Ator (
actorid) sai do campo de visгo de um jogador (
forplayerid), e lembrando: isto nгo й aplicado apenas a distвncia, se o Jogador(
forplayerid) e o Ator(
actorid) ficarem em mundos(Virtual World) diferentes, tambйm chamarб a Callback.
Especificaзхes da funзгo:
Код:
actorid - O ID do Ator que sai do campo de visгo do jogador (forplayerid).
forplayerid - O ID do jogador que estб vendo ou nгo o Ator (actorid).
Modo de uso:
PHP код:
public OnActorStreamOut(actorid, forplayerid)
{
new String[40]; //Criando uma variбvel que armazenarб Textos, aqui no caso, serб uma mensagem formatada.
format(String, sizeof(String), "Ator ID %d saiu do seu campo de visгo.", actorid); //Formatando a mensagem, mostrarб qual o ID de qualquer ator que sair do campo de visгo do jogador.
SendClientMessage(forplayerid, 0xFFFFFFFF, String); //Enviando a mensagem no Chat
return 1;
}
Cуdigos ъteis, sistemas e exemplos
1. A vida do Ator chega a 0, ele morre e fica deitado no chгo, como faзo pare revivк-lo?
2. Outros cуdigos?
Код:
Funзхes Adicionadas:
ResyncActor(actorid);
RespawnActor(actorid);
IsActorDead(actorid);
SetActorRespawnTime(actorid, time);
IsPlayerInRangeOfActor(playerid, actorid, Float:radius = 5.0);
Text3D:Attach3DTextLabelToActor(actorid, text[], color, Float:fOffsetX, Float:fOffsetY, Float:fOffsetZ, Float:distance = 10.0, worldid = 0, testlos = 0);
Callbacks Adicionadas:
OnActorDeath(actorid, killerid, reason)
OnActorSpawn(actorid)
OnPlayerTargetActor(playerid, newtarget, oldtarget)
4. Algum sistema demonstrativo?
Este tуpico serб atualizado frequentemente.
Re: Sistema de Atores (Actor System) -
D3sconn3ct - 10.05.2015
Bom tutorial, Bastante explicado. Sera muuiiiiiiiiiittttoo ъtil,
Parabйns pelo trabalho
++Rep
Re: Sistema de Atores (Actor System) -
Breno Da Silva Pereira - 10.05.2015
"SashaGray" Eu sei quem e ( ͡° ͜ʖ ͡°)
Re: Sistema de Atores (Actor System) -
WLSF - 10.05.2015
Muito bacana seu tуpico, parabйns pelo tutorial.
Abraзos.
Re: Sistema de Atores (Actor System) -
PT - 10.05.2015
Gostei do tutorial,
Bom trabalho.
Re: Sistema de Atores (Actor System) -
LockedLucas - 10.05.2015
Muito bom parabйns.
Re: Sistema de Atores (Actor System) -
SkullFire - 10.05.2015
Mutio bem feito, organizado e bem explicado.
Congratz. +rep
Re: Sistema de Atores (Actor System) -
RebeloX - 10.05.2015
A estruturaзгo do tуpico estб bastante boa e agradбvel, limpo e ъtil.
Bom tutorial rapaz.
Re: Sistema de Atores (Actor System) -
Locky_ - 11.05.2015
Bastante bacana o tutorial. Bem explicativo. Parabйns
Re: Sistema de Atores (Actor System) -
#Luca[S]. - 11.05.2015
Уtimo, vai ajudar muitas pessoas. Tуpico bem organizado, explicando direitinho!
Realmente, parabйns.