Вход

Просмотр полной версии : [Вопрос] Таксофон



Gressie
05.08.2021, 01:42
Доброго времени суток. Наверняка, вы играли в игру Grand Theft Auto Vice City (GTA Vice City), и сталкивались с телефонными миссиями. Собственно вопрос:
Как реализовано то, что таксофон прыгает? Увидел этот эффект, и удивился. Ни на каком проекте кроме этого который на видеоролике я не видел подобных реализаций.
Исходя из этого, у меня появились некоторые догадки, что тут применяется как PlayerPlaySound так и MoveObject. Я прав?

https://www.youtube.com/watch?v=bYFIz-o44OA

execution
05.08.2021, 09:42
Да, скорей всего

$continue$
06.08.2021, 23:40
Через MoveObject (https://sampwiki.blast.hk/wiki/MoveObject), OnObjectMoved (https://sampwiki.blast.hk/wiki/OnObjectMoved)


#include <a_samp>
#include <Pawn.CMD>

main()
{

}

#if !defined MAX_PAYPHONES
const MAX_PAYPHONES = 1;
#endif


static g_payphone_object_state[MAX_OBJECTS] = { -1, -1, -1, ... };
static g_payphone_object_id[MAX_PAYPHONES] = { INVALID_OBJECT_ID };

public OnGameModeInit()
{
g_payphone_object_id[0] = CreateObject(
1216,
-1310.75,
2700.40,
49.69,
0.0,
0.0,
0.0
);
return 1;
}

public OnObjectMoved(objectid)
{
for (new i = 0; i < sizeof(g_payphone_object_id); i++)
{
if (objectid == g_payphone_object_id[i])
{
new
payphone_state = g_payphone_object_state[objectid],
Float: payphone_x_pos,
Float: payphone_y_pos,
Float: payphone_z_pos,
Float: payphone_x_rot,
Float: payphone_y_rot,
Float: payphone_z_rot;

GetObjectRot(
objectid,
payphone_x_rot,
payphone_y_rot,
payphone_z_rot
);
GetObjectPos(
objectid,
payphone_x_pos,
payphone_y_pos,
payphone_z_pos
);

if ((payphone_state & 1) == 0)
{
MoveObject(
objectid,
payphone_x_pos,
payphone_y_pos,
payphone_z_pos - 0.1,
0.7,
payphone_x_rot,
payphone_y_rot,
payphone_z_rot
);
}
else
{
MoveObject(
objectid,
payphone_x_pos,
payphone_y_pos,
payphone_z_pos + 0.1,
0.7,
payphone_x_rot,
payphone_y_rot,
payphone_z_rot
);
}

g_payphone_object_state[objectid] = !g_payphone_object_state[objectid];
break;
}
}
return 1;
}


CMD:teleportphone(playerid)
{
SetPlayerPos(playerid, -1310.4550, 2694.6719, 50.0625);
SetPlayerFacingAngle(playerid, 1.1488);

new
Float: payphone_x_pos,
Float: payphone_y_pos,
Float: payphone_z_pos,
Float: payphone_x_rot,
Float: payphone_y_rot,
Float: payphone_z_rot,
payphone_object_id = g_payphone_object_id[0];

GetObjectPos(
payphone_object_id,
payphone_x_pos,
payphone_y_pos,
payphone_z_pos
);
GetObjectPos(
payphone_object_id,
payphone_x_pos,
payphone_y_pos,
payphone_z_pos
);
MoveObject(
payphone_object_id,
payphone_x_pos,
payphone_y_pos,
payphone_z_pos + 0.1,
0.1,
payphone_x_rot,
payphone_y_rot,
payphone_z_rot
);
g_payphone_object_state[payphone_object_id] = 0;
return 1;
}



Что-то вроде такого

P.S: это всего лишь пример. Он далек от идеала, нужно настроить прыжки более лучшим способом.
P.S.S: чтобы Вам не нужно было искать ид звонка: 23000

Gressie
07.08.2021, 12:22
Спасибо большое.