Portal SAMP
[Ajuda] Actor weapon - Versão de Impressão

+- Portal SAMP (https://portalsamp.com)
+-- Fórum: SA-MP (https://portalsamp.com/forumdisplay.php?fid=5)
+--- Fórum: Área de suporte (https://portalsamp.com/forumdisplay.php?fid=6)
+--- Tópico: [Ajuda] Actor weapon (/showthread.php?tid=673)

Páginas: 1 2


Actor weapon - annety - 19/01/2021

Baseado nesse actor
Código:
// 24-7

CreateDynamicActor(bizzid, 17, 142, -29.0206,-186.8182,1003.5469,1.6775);

Com editdynamic object achei uma formula pra pegar a posição da arma baseada na posição do ator (pra colocar a arma na mão do ator):
Código:
    // criado [15:21:57] x[-29.020599] y[-186.818206] z[1003.546875] RotX[0] RotY[0] RotZ[0]
    new Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz;
    GetDynamicActorPos(actorid, x, y, z);
    // movido [15:23:45] x[-28.945550] y[-186.275421] z[1003.882324] rx[0.000000] ry[-3.300002] rz[98.899940]
    x += 1.0;
    x -= 0.924951;
    y += 0.542785;
    z += 0.335449;
    rx = 0.0;
    ry = -3.300002;
    rz = 98.899940;
    DestroyDynamicObject(ActorInfo[actorid][actorGun]);
    ActorInfo[actorid][actorGun] = CreateDynamicObject(GetGunObjectID(24), x, y, z, rx, ry, rz);

Ficou bonitão assim:
[Imagem: Tfc0wa7.png]




Eu pensei que ia funcionar em todos os outros atores, mas não funcionou, em outros como:
Código:
// pizza

CreateDynamicActor(bizzid, 5, 155, 374.7394,-117.2788,1001.4922,180.5908);

Ficou assim:
[Imagem: igOe4f7.png]

Código:
// alambra

CreateDynamicActor(bizzid, 17, 194, 501.6993,-20.4994,1000.6797,88.5219);

[Imagem: rA9pALX.png]

Alguém mais experiente sabe um jeito de fazer o que eu fiz pra um ACTOR de forma generica pra todos?
Seria uma feature legal pra todos os servidores conseguirem de certa forma colocar uma arma na mão de um ator. (baseado na posição do ator criar a arma na mão dele)


RE: Actor weapon - guikommander2 - 19/01/2021

Porque você não usa logo o FCNPC? Aonde você coloca a arma na mão do jogador e Seta a animação?

https://github.com/ziggi/FCNPC


RE: Actor weapon - xbruno1000x - 19/01/2021

(19/01/2021 19:43)guikommander2 Escreveu: Porque você não usa logo o FCNPC? Aonde você coloca a arma na mão do jogador e Seta a animação?

https://github.com/ziggi/FCNPC

Porque NPC != Actor.
Npc's gastam slots do servidor, atores não.


RE: Actor weapon - annety - 19/01/2021

(19/01/2021 21:24)xbruno1000x Escreveu:
(19/01/2021 19:43)guikommander2 Escreveu: Porque você não usa logo o FCNPC? Aonde você coloca a arma na mão do jogador e Seta a animação?

https://github.com/ziggi/FCNPC

Porque NPC != Actor.
Npc's gastam slots do servidor, atores não.

Boa, por esse e outros motivos Wink

---

Me ajudem aí galera, seria massa pra todo mundo ter armas pra atores


RE: Actor weapon - guikommander2 - 20/01/2021

O deslocamento da arma vai mudar um pouco para cada skin.

Por isso eu estou falando para usar FCNPC. Com o FCNPC Você pode ainda fazer com que o NPC atire.

Se você tem uma VPS, você mesmo pode definir quantos slots vai ter o servidor e não se preocupar com o mesmo


RE: Actor weapon - annety - 21/01/2021

(20/01/2021 19:44)guikommander2 Escreveu: Por isso eu estou falando para usar FCNPC. Com o FCNPC Você pode ainda fazer com que o NPC atire.

Se você tem uma VPS, você mesmo pode definir quantos slots vai ter o servidor e não se preocupar com o mesmo

Eu sei que seria mais fácil usar NPCs, mas a ideia do tópico é adicionar feature de armas pra atores, eu tenho varios motivos pra não usar NPCs assim como outras pessoas vão ter, como por exemplo slots, mesmo com VPS, se eu tiver muitos atores ou muitos jogadores seria prejudicado ao usar NPCs ao invés de atores, mas o merito não é esse, é só ajustar essa forma de adicionar armas a atores e todos saem ganhando Wink


RE: Actor weapon - annety - 06/02/2021

Queria tanto de alguma forma ter essa feature pra atores Sad


RE: Actor weapon - xbruno1000x - 08/02/2021

Essa função não pode ser feita da forma que você fez, pois deve ser adaptada para cada ângulo dos atores.
Imagino que essas funções possam te ajudar
Código:
stock GetXYInFrontOfPos(Float:xx,Float:yy,Float:a, &Float:x2, &Float:y2, Float:distance)
{
    if(a>360)
    {
        a=a-360;
    }
    xx += (distance * floatsin(-a, degrees));
    yy += (distance * floatcos(-a, degrees));
    x2=xx;
    y2=yy;
}
stock GetAngleToXY(Float:X, Float:Y, Float:CurrX, Float:CurrY, &Float:angle)
{
    angle = atan2(Y-CurrY, X-CurrX);
    angle = floatsub(angle, 90.0);
    if(angle < 0.0) angle = floatadd(angle, 360.0);
}
Tente usar essa função de pegar a coordenada frontal do actor e adaptar o ângulo nela. Provavelmente irá exigir bastante conhecimento, então se não entende, nem gaste seu tempo com isso. Boa sorte.


RE: Actor weapon - annety - 15/02/2021

tentei o que vc falou com:

Código:
// criado-> x[-29.049873] y[-185.818634] z[1003.546875] RotX[0] RotY[0] RotZ[0]
    new Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz, Float:a;
    GetDynamicActorPos(actorid, x, y, z);
    GetDynamicActorFacingAngle(actorid, a);
    GetXYFront(x, y, a, 1.0);
    // movido-> x[-28.911067] y[-186.339630] z[1003.927917] rx[2.899999] ry[1.600000] rz[92.999923]
    x -= -0.1388060000000024;
    y += -0.5209959999999967;
    z += 0.3810419999999795;
    printf("x[%f] y[%f] z[%f] rx[%f] ry[%f] rz[%f]", x, y, z, rx, ry, rz);
    rx = 2.899999;
    ry = 1.600000;
    rz = 92.999923;
    DestroyDynamicObject(ActorInfo[actorid][actorGun]);
    ActorInfo[actorid][actorGun] = CreateDynamicObject(GetGunObjectID(24), x, y, z, rx, ry, rz);
    SetDynamicObjectPos(ActorInfo[actorid][actorGun], x, y, z);
    SetDynamicObjectRot(ActorInfo[actorid][actorGun], rx, ry, rz);


por causa da arma que eu criei usando:
Código:
stock GetXYFront(&Float:x, &Float:y, Float:a, Float:distance)
{
    x += distance * floatsin(-a, degrees);
    y += distance * floatcos(-a, degrees);
}  

CMD:actorweapon(playerid, params[]) {
    // http://wiki.sa-mp.com/wiki/EditAttachedObject  ~  http://wiki.sa-mp.com/wiki/EditObject
    if(admin[playerid] < 1337) return 0;
    new actorid; // 1001 = primeiro npc
    if(sscanf(params,"i", actorid)) return SendClientMessage(playerid, -1, "Use: /actorweapon [actorid]");
    if(IsValidDynamicActor(actorid)) {
        ApplyDynamicActorAnimation(actorid, "PED","ARRESTgun", 4.1, 0, 0, 0, 1, 0);
        new Float:x, Float:y, Float:z, Float:a;
        GetDynamicActorPos(actorid, x, y, z);
        GetDynamicActorFacingAngle(actorid, a);
        GetXYFront(x, y, a, 1.0);
        new string[128];
        format(string, sizeof(string), "[ACTOR POS] x[%f] y[%f] z[%f] RotX[0] RotY[0] RotZ[0] / a[%f]", x, y, z, a);
        SendClientMessage(playerid, COLOR_GREY, string);
        new weaponobj = CreateDynamicObject(GetGunObjectID(24), x, y, z, 0.0, 0.0, 0.0);
        EditingDynamicObjectID[playerid] = weaponobj;
        EditingDynamicObjectTYPE[playerid] = 3;
        EditDynamicObject(playerid, EditingDynamicObjectID[playerid]);
    }
    return 1;
}


mas só ficou bom pro actor que eu fiz ali na hora, os outros não ficaram certos

acho que eu tenho que fazer algo com o angulo, mas eu não faço ideia de como


RE: Actor weapon - Davi.Xit5370 - 23/07/2022

E possível fazer um actor andar?