[Plugin] FCNPC - Fully Controllable NPC (Russian Thread)
#81

См. вложение.
Reply
#82

Quote:
Originally Posted by ZiGGi
View Post
Ещё попытка пересобрать.
Запустилось, внезапно, сейчас пощупаю.
Reply
#83

Quote:
Originally Posted by eakwarp
View Post
Запустилось, внезапно, сейчас пощупаю.
Попробуй дебаг версию тоже, пожалуйста.
Reply
#84

Quote:
Originally Posted by ZiGGi
View Post
Попробуй дебаг версию тоже, пожалуйста.
Тот же самый рантайм.
Reply
#85

Quote:
Originally Posted by eakwarp
View Post
Тот же самый рантайм.
В смысле оно тоже работает?
Reply
#86

Quote:
Originally Posted by ZiGGi
View Post
В смысле оно тоже работает?
Нет, в смысле сервер не падает, равно как и с обычной версией. Но выдает ошибку в дебаге, и не коннектится не одного непися.
Reply
#87

Вот, особо не тестировал, но боты бегают и ездят. Также с версией под Linux.
Reply
#88

Работает, спасибо.
Reply
#89

Добрый день!

Те вопросы, с которыми я к вам обращался, уже решены. Везде моя вина) ошибки нашел - исправил.

Теперь насчет FCNPC_GoByMovePath с машиной(https://github.com/ziggi/FCNPC/issues/88). Я решил сделать собственную реализацию поездки, и на удивление, вышло всё очень хорошо. Во-первых, машина на больших скоростях едет плавно и не телепортируется из точки в точку. Во-вторых, езда по горке не идеальная, но более менее терпимая: телепорты есть, но не такие(чем больше угол, тем ярче они выражены). А также, независимо от mapandreas,coladnreas машина принимает угол наклона горки.

Видео:
https://www.youtube.com/watch?v=sTRe...ature=*********

Все-таки нужно исправить это в плагине. С моим методом машина едет куда лучше, чем через стандартный в плагине. Да, может быть есть что и подправить в моем способе, но это уже пустяки.

Вот мой код, который я буду использовать вместо FCNPC_GoByMovePath. Использовал углы, а не кватернионы, так как пока их не знаю(GetRotationQuaternion - это нужно добавить отдельно).
PHP Code:
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) //использование 
Reply
#90

И еще проблемка....
Нашел серьезный баг. Я так понимаю, он связан с тем багом, про который я говорил в предыдущем своем сообщении тогда, когда у меня крашило сервер. Нужно срочно исправить. А то из-за этого возникает целая цепочка других багов и краш

Когда удаляешь путь 1, удаляется каким-то образом путь 2. Вот в моих логах примерно следующее. Стоит все в таймере.
PHP Code:
point = 0(path=2, exist = 1)
remove path = 1
point 
= 0(path=2, exist = 0) 
Однако, в этом случае все нормально. Удаляем 2 - удаляется 2
PHP Code:
point = 0(path=1, exist = 1)
remove path = 2
point 
= 0(path=1, exist = 1) 
Можете проверить.
PHP Code:
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)); 
Reply
#91

Я вижу, FCNPC_IsValidMovePath исправлен, значит и проблем с FCNPC_DestroyMovePath тоже нет?
Reply
#92

Хм.. Есть одно но. Колбек не учитывает взрывной урон, то есть , если танк стреляет в машину/бота, то урон не учитывается. Также прошу сделайте, угол поворота камеры бота, то есть, если например бот ведет машину с пушкой(Пожарная машина/водомет/танк) , то чтобы бот мог поворачивать пушку

Это бы хорошо расширило возможности ботов
Reply
#93

Quote:
Originally Posted by Anomis
View Post
Хм.. Есть одно но. Колбек не учитывает взрывной урон, то есть , если танк стреляет в машину/бота, то урон не учитывается. Также прошу сделайте, угол поворота камеры бота, то есть, если например бот ведет машину с пушкой(Пожарная машина/водомет/танк) , то чтобы бот мог поворачивать пушку

Это бы хорошо расширило возможности ботов
Определение взрыва будет довольно не точным, и будет возможным только с использованием colandreas.
Стрельбу с пассажирского сидения я пытался сделать, но у меня не вышло.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)