29.01.2018, 19:20
См. вложение.
Public:BotMoveInVehicle(botid, path, point, Float:velocity) {
new Float: x, Float: y, Float: z,
Float: fx, Float: fy, Float: fz;
FCNPC_GetPosition(botid, x, y, z);
FCNPC_GetMovePoint(path, point, fx, fy, fz);
new Float: dist = floatsqroot(kv(x - fx) + kv(y - fy) + kv(z - fz)),
time = floatround(dist / velocity * 1000.0);
if ( dist <= 1.5 ) {
if ( point != FCNPC_GetNumberMovePoint(path) - 1 ) {
BotMoveInVehicle(botid, path, point + 1, velocity);
} else {
FCNPC_SetVelocity(botid, 0.0, 0.0, 0.0);
}
return 1;
}
new Float: alpha = atan2(fy - y, fx - x),
Float: sinBeta = (fz - (z - 1.0)) / dist,
Float: beta = atan2(sinBeta, floatsqroot(1.0 - sinBeta * sinBeta));
FCNPC_SetVelocity(botid, velocity * floatcos(alpha, degrees) * 0.02515, velocity * floatsin(alpha, degrees) * 0.02515, velocity * floatsin(beta, degrees) * 0.02515, true);
new Float: w;
GetRotationQuaternion(beta, 0.0, alpha - 90.0, w, x, y, z);
FCNPC_SetQuaternion(botid, w, x, y, z);
SetTimerEx("BotMoveInVehicle", ((30 < time < 150) ? time / 2 : time), false, "iiif", botid, path, point, velocity);
return 1;
}
BotMoveInVehicle(npcid, pathid, 0, Float:velocity) //использование
point = 0(path=2, exist = 1)
remove path = 1
point = 0(path=2, exist = 0)
point = 0(path=1, exist = 1)
remove path = 2
point = 0(path=1, exist = 1)
FCNPC_CreateMovePath();
new path2 = FCNPC_CreateMovePath(),
path = FCNPC_CreateMovePath();
printf("path = %i, exist = %b", path, FCNPC_IsValidMovePath(path));
FCNPC_DestroyMovePath(path2);//удаляем только path2
printf("destroy path = %i, %b", path2, FCNPC_IsValidMovePath(path2));
printf("path = %i, exist = %b", path, FCNPC_IsValidMovePath(path));
Хм.. Есть одно но. Колбек не учитывает взрывной урон, то есть , если танк стреляет в машину/бота, то урон не учитывается. Также прошу сделайте, угол поворота камеры бота, то есть, если например бот ведет машину с пушкой(Пожарная машина/водомет/танк) , то чтобы бот мог поворачивать пушку
Это бы хорошо расширило возможности ботов |