CLOUDCPANEL: Conheça os planos e serviços!

Sistema de Atores (Actor System)


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:
Code:
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 Code:
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(3061480.94, -1764.3518.790.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:
Code:
actorid - O ID do Ator, usado em CreateActor.
Modo de uso:
PHP Code:
new SashaGray;
 
public 
OnGameModeInit()
{
    
SashaGray CreateActor(3061480.94, -1764.3518.790.60);
}

public 
OnGameModeExit()
{
    
DestroyActor(SashaGray);
}  
 IsValidActor(actorid)

Descrição: Verificará se um Ator é válido ou não.

Especificações da função:
Code:
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 Code:
new SashaGray;

public 
OnFilterScriptInit()
{
    
SashaGray CreateActor(3061480.94, -1764.3518.790.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:
Code:
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 Code:
new SashaGray;

public 
OnFilterScriptInit()
{
    
SashaGray CreateActor(3061480.94, -1764.3518.790.60);
    
    new 
Float:xFloat:yFloat:z//Criando as variáveis flutuantes x, y, z
    
GetActorPos(SashaGrayxyz); //Pegando e atribuindo os valores às variáveis criadas
    //ou
    
new Float:PosActor[3];
    
GetActorPos(SashaGrayPosActor[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:
Code:
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 Code:
new SashaGray;

public 
OnFilterScriptInit()
{
    
SashaGray CreateActor(3061480.94, -1764.3518.790.60);
    
SetActorPos(SashaGray2176.64, -986.6964.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:
Code:
actorid - O ID do Ator, usado em CreateActor.
vworld - O ID do Virtual World que o Ator será colocado.
Modo de uso:
PHP Code:
new SashaGray;

public 
OnFilterScriptInit()
{
    
SashaGray CreateActor(3061480.94, -1764.3518.790.60);
    
SetActorVirtualWorld(SashaGray24); //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:
Code:
actorid - O ID do Ator, usado em CreateActor.
Modo de uso:
PHP Code:
new SashaGray;

public 
OnFilterScriptInit()
{
    
SashaGray CreateActor(3061480.94, -1764.3518.790.60);
    
SetActorVirtualWorld(SashaGray24); //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:
Code:
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 Code:
new SashaGray;

public 
OnFilterScriptInit()
{
    
SashaGray CreateActor(3061480.94, -1764.3518.790.60);
    
SetActorInvulnerable(SashaGraytrue); //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:
Code:
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 Code:
new SashaGray;

public 
OnFilterScriptInit()
{
    
SashaGray CreateActor(3061480.94, -1764.3518.790.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:
Code:
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 Code:
new SashaGray;

public 
OnFilterScriptInit()
{
    
SashaGray CreateActor(3061480.94, -1764.3518.790.60);
    
SetActorHealth(SashaGray100); //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:
Code:
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 Code:
new SashaGray;

public 
OnFilterScriptInit()
{
    
SashaGray CreateActor(3061480.94, -1764.3518.790.60);
    
SetActorHealth(SashaGray100); //Seta a vida do Ator para 100
    
    
new Float:Health_Actor//Criando a variável que armazenará o quantidade de vida
    
GetActorHealth(SashaGrayHealth_Actor); //Pegando e atribuindo a vida do Ator à variável
    
printf("A vida do Ator ID %d é %.2f"SashaGrayHealth_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:
Code:
actorid - O ID do Ator, usado em CreateActor.
Float:ang - O ângulo (rotação) desejado que o Ator ficará.
Modo de uso:
PHP Code:
new SashaGray;

public 
OnFilterScriptInit()
{
    
SashaGray CreateActor(3061480.94, -1764.3518.790.60);
    
SetActorFacingAngle(SashaGray180.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:
Code:
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 Code:
new SashaGray;

public 
OnFilterScriptInit()
{
    
SashaGray CreateActor(3061480.94, -1764.3518.790.60);
    
    new 
Float:AnguloAtor//Criando a variável que armazenará o valor da rotação do Ator
    
GetActorFacingAngle(SashaGrayAnguloAtor); //Pegando e atribuindo o valor da rotação à variável criada acima
    
printf("O ângulo(rotação) do Ator ID %d é %.2f"SashaGrayAnguloAtor); //[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:
Code:
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 Code:
new SashaGray;

public 
OnFilterScriptInit()
{
    
SashaGray CreateActor(3061480.94, -1764.3518.790.60);
    
ApplyActorAnimation(SashaGray"DEALER""shop_pay"4.100000); // Pay anim
    
return 1;
}  

Descrição: Parará a animação executada por um determinado Ator.

Especificações da função:
Code:
actorid - O ID do Ator, usado em CreateActor.
Modo de uso:
PHP Code:
new SashaGray;

public 
OnFilterScriptInit()
{
    
SashaGray CreateActor(3061480.94, -1764.3518.790.60);
    
ApplyActorAnimation(SashaGray"DEALER""shop_pay"4.100000); // 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.

Code:
playerid - O ID do Jogador que está mirando para algum Ator.
Modo de uso:
PHP Code:
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), WeaponNamesizeof(WeaponName)); //Pegando o nome da arma que o jogador está segurando na mão
        
format(Stringsizeof(String), "{00FF00}Você está mirando para o Actor de ID {FF8000}%d {00FF00}com a arma {FF8000}%s"AtorMiradoWeaponName); //Formatando a mensagem que será transmitida
        
SendClientMessage(playerid, -1String); //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 Code:
public OnFilterScriptInit()
{
    
CreateActor(3061480.94, -1764.3518.790.60); //ID 0
    
CreateActor(2280.00.00.00.90); //ID 1
    
CreateActor(2283.02.00.00.90); //ID 2
    
CreateActor(2286.04.00.00.90); //ID 3
    
CreateActor(2289.06.00.00.90); //ID 4
    
CreateActor(22812.08.00.00.90); //ID 5
    
    
for(new 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(j69); //Setando o Virtual World (Mundo Virtual) do Ator ID 'j' para 69
            
SetActorInvulnerable(jfalse); //Deixando o Ator ID 'j' vulnerável
            
SetActorHealth(j100.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.

Code:
playerid - O ID do Jogador que está olhando para algum Ator.
Modo de uso:
PHP Code:
public OnPlayerConnect(playerid)
{
    
EnablePlayerCameraTarget(playerid1); //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(Stringsizeof(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, -1String); //Enviando a mensagem no chat
    
}
    return 
1;
}  
VEJA O VÍDEO DO CÓDIGO ACIMA EM AÇÃO

✖ IsActorStreamedIn(actorid, forplayerid)

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:
Code:
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 Code:
new SashaGray;

public 
OnFilterScriptInit()
{
    
SashaGray CreateActor(3061480.94, -1764.3518.790.60);
    return 
1;
}

public 
OnPlayerSpawn(playerid)
{
    if(
IsActorStreamedIn(SashaGrayplayerid)) //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:
Code:
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 Code:
public OnPlayerGiveDamageActor(playeriddamaged_actoridFloatamountweaponidbodypart)
{
    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(weaponidWeaponNamesizeof (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_actoridActor_Health); //Pegando a vida atual do Ator
        
SetActorHealth(damaged_actoridActor_Health-amount); //Aplicando o dano ao Ator

        
format(StringActorsizeof(StringActor), "ActorID: %d | VW: %d | Arma: %s | BodyPartID: %d | Dano: %.0f | Vida: %.0f"damaged_actoridGetActorVirtualWorld(damaged_actorid), WeaponNamebodypartamountActor_Health-amount); //Formatando a mensagem que será enviada no chat
        
SendClientMessage(playerid, -1StringActor); //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:
Code:
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 Code:
public OnActorStreamIn(actoridforplayerid)
{
    new 
String[40]; //Criando uma variável que armazenará Textos, aqui no caso, será uma mensagem formatada.
    
format(Stringsizeof(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(forplayerid0xFFFFFFFFString); //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:
Code:
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 Code:
public OnActorStreamOut(actoridforplayerid)
{
    new 
String[40]; //Criando uma variável que armazenará Textos, aqui no caso, será uma mensagem formatada.
    
format(Stringsizeof(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(forplayerid0xFFFFFFFFString); //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?

3. Existe alguma include que adiciona novas funções?

Sim! A Include do Emmet_clique aqui para visitar o tópico. Agradecimentos ao Nickvj7 que me passou o link.

Code:
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?

0 comentários:

Postar um comentário