GetPlayerTargetPlayer && GetPlayerTargetDynamicActor SAMP MOBILE - annety - 27/10/2020
Pessoal como muitos de vocês devem saber nenhum client mobile tem acesso a questões de mira, detectar quem um player estar mirando
Seja esse target um player ou um ator
Eu tentei contornar isso com:
Código: public OnPlayerUpdate(playerid)
{
new playerAim = GetPlayerTargetPlayerEx(playerid);
if(playerAim != 65535) {
format(dmgstring, sizeof(dmgstring), "PLAYER AIM PLAYER: [%i]", playerAim);
SendClientMessage(playerid,COLOR_PARAMEDIC,dmgstring);
// func
return true;
}
else if(playerAim == 65535) { // else pra só rodar o loop do actor se já não tiver mirando em player
new actorAim = GetPlayerTargetDynamicActorEx(playerid);
if(actorAim != 65535)
{
format(dmgstring, sizeof(dmgstring), "PLAYER AIM ACTOR: [%i]", actorAim);
SendClientMessage(playerid,COLOR_PARAMEDIC,dmgstring);
// func
return true;
}
}
}
Código: forward GetPlayerTargetPlayerEx(playerid);
public GetPlayerTargetPlayerEx(playerid) {
new x = 65535;
foreach(new targetid : Player)
{
if(IsPlayerFacingPlayer(playerid, targetid, 25.0)) {
x = targetid;
return true;
}
}
return x;
}
forward GetPlayerTargetDynamicActorEx(playerid);
public GetPlayerTargetDynamicActorEx(playerid) {
new x = 65535;
foreach(new targetid : Actor)
{
if(IsPlayerFacingActor(playerid, targetid, 25.0)) {
x = targetid;
return true;
}
}
return x;
}
stock static IsAngleInRangeOfAngle(Float:a1, Float:a2, Float:range = 10.0)
{
a1 -= a2;
if((a1 < range) && (a1 > -range)) return true;
return false;
}
stock IsPlayerFacingPlayer(playerid, targetid, Float:range = 10.0)
{
new Float:pos[3];
GetPlayerPos(targetid, pos[0], pos[1], pos[2]);
return IsPlayerFacingPoint(playerid, pos[0], pos[1], range);
}
stock IsPlayerFacingActor(playerid, targetid, Float:range = 10.0)
{
new Float:pos[3];
GetDynamicActorPos(targetid, pos[0], pos[1], pos[2]);
return IsPlayerFacingPoint(playerid, pos[0], pos[1], range);
}
stock IsPlayerFacingPoint(playerid, Float:x, Float:y, Float:range = 10.0)
{
new Float:pos[3];
GetPlayerPos(playerid, pos[0], pos[1], pos[2]);
new Float:facing;
GetPlayerFacingAngle(playerid, facing);
new Float:angle;
if( pos[1] > y ) angle = (-acos((pos[0] - x) / floatsqroot((pos[0] - x)*(pos[0] - x) + (pos[1] - y)*(pos[1] - y))) - 90.0);
else if( pos[1] < y && pos[0] < x ) angle = (acos((pos[0] - x) / floatsqroot((pos[0] - x)*(pos[0] - x) + (pos[1] - y)*(pos[1] - y))) - 450.0);
else if( pos[1] < y ) angle = (acos((pos[0] - x) / floatsqroot((pos[0] - x)*(pos[0] - x) + (pos[1] - y)*(pos[1] - y))) - 90.0);
return (IsAngleInRangeOfAngle(-angle, facing, range));
}
Algumas vezes está detectando, mas muitas vezes está errando, alguém mais experiente poderia me ajudar?
RE: GetPlayerTargetPlayer && GetPlayerTargetDynamicActor SAMP MOBILE - ForT - 28/10/2020
você está usando foreach(new targetid : Player) em ambas as funções, não deveria fazer um loop nos actors criados na função GetPlayerTargetDynamicActorEx?
Código PHP: GetPlayerTargetDynamicActorEx(playerid) { for (new actors = Streamer_GetUpperBound(STREAMER_TYPE_ACTOR) + 1, e; e < actors; ++e) { if(IsValidDynamicActor(e) && IsPlayerFacingActor(playerid, e, 25.0)) { return e; } } return INVALID_ACTOR_ID; }
RE: GetPlayerTargetPlayer && GetPlayerTargetDynamicActor SAMP MOBILE - annety - 28/10/2020
(28/10/2020 03:19)ForT Escreveu: você está usando foreach(new targetid : Player) em ambas as funções, não deveria fazer um loop nos actors criados na função GetPlayerTargetDynamicActorEx?
Código PHP: GetPlayerTargetDynamicActorEx(playerid) { for (new actors = Streamer_GetUpperBound(STREAMER_TYPE_ACTOR) + 1, e; e < actors; ++e) { if(IsValidDynamicActor(e) && IsPlayerFacingActor(playerid, e, 25.0)) { return e; } } return INVALID_ACTOR_ID; }
Ah foi um erro na hora de copiar, no meu código já tava
if(IsPlayerFacingActor(playerid, targetid, 25.0)) {
mas obg, de um ++
Não tá detectando quando tá mirando pra outro player ou pra um actor, só as vezes do nada printa um monte de:
PLAYER AIM PLAYER: [1]
RE: GetPlayerTargetPlayer && GetPlayerTargetDynamicActor SAMP MOBILE - annety - 31/10/2020
será que a galera do open.mp tem a base disso aqui?
pq eles tiveram que fazer GetPlayerTargetPlayer e GetPlayerTargetDynamicActor funcionar né...
---
edit:
bruno já me explicou que não, vou esperar ter suporte mesmo
RE: GetPlayerTargetPlayer && GetPlayerTargetDynamicActor SAMP MOBILE - L10motos - 25/12/2023
Pensei em ressuscitar esse topico, pq passo pelo mesmo problema, alguém mais experiente consegue me ajudar?
|