PDA

Просмотр полной версии : [Вопрос] Безопасная система.



JR_Junior
19.06.2021, 02:46
Я пытаюсь создать безопасную систему с дверью, которая открывается и закрывается.
Моя цель - создать хранилище по любой координате и автоматически создать дверь в правильном положении.


new safe = CreateDynamicObject(19618, 414.47070, 2537.35913, 9.45900, 0.00000, 0.00000, 90.00000);
new door = CreateDynamicObject(19619, 414.70401, 2536.93848, 9.45800, 0.00000, 0.00000, 90.00000);

new Float:door_offsetX = (414.70401-414.47070);//0.23331
new Float:door_offsetY = (2537.35913-2536.93848);//0.42065
new Float:door_offsetZ = (9.45900-9.45800);//0.001

stock CreateSafeBox(Float:px,Float:py,Float:pz,Float:rz)
{
CreateDynamicObject(19618, px, py, pz 0.0, 0.0, rz);//Safe

CreateDynamicObject(19619, floatsin(-rz,degrees)*-0.42065-floatcos(-rz,degrees)*0.23331+px,
floatcos(-py,degrees)*-0.42065+floatsin(-py,degrees)*0.23331+py, pz-0.001, 0.0, 0.0, rz);//Door
return 1;
}

Это результат, но я не могу заставить его работать должным образом. Кто-нибудь Помогите мне?
https://i.postimg.cc/wvtz8Z8V/Screenshot-39.png

Scander
19.06.2021, 17:12
Тебе нужно просто создать дверь с координатами сейфа + величины оффсетов, которые ты уже нашел.
Остается только придумать, как поворачивать дверь для открытия сейфа.



stock CreateSafeBox(Float:px,Float:py,Float:pz,Float:rz)
{
CreateDynamicObject(19618, px, py, pz 0.0, 0.0, rz);//Safe

CreateDynamicObject(19619, px + 0.23331, py + 0.42065, pz + 0.001, 0.0, 0.0, rz);//Door
return 1;
}

JR_Junior
19.06.2021, 19:41
Тебе нужно просто создать дверь с координатами сейфа + величины оффсетов, которые ты уже нашел.
Остается только придумать, как поворачивать дверь для открытия сейфа.



stock CreateSafeBox(Float:px,Float:py,Float:pz,Float:rz)
{
CreateDynamicObject(19618, px, py, pz 0.0, 0.0, rz);//Safe

CreateDynamicObject(19619, px + 0.23331, py + 0.42065, pz + 0.001, 0.0, 0.0, rz);//Door
return 1;
}


Не сработало!
https://i.postimg.cc/5yqWn9fj/Screenshot-43.png

vawylon
19.06.2021, 20:26
https://pawn-wiki.ru/index.php?/topic/53098-safemaker/

Не удержался и реализовал. Вот пожалуйста)
Обязательно залью на этот форум)

tg @vawylon

Scander
19.06.2021, 20:31
Не сработало!
https://i.postimg.cc/5yqWn9fj/Screenshot-43.png

У тебя оффсеты неправильные походу. Я посмотрел урок, который выше скинули и они другие.
По X: -0.4224850000000515
По Y: -0.24340800000004492
По Z не меняется.

Попробуй:


stock CreateSafeBox(Float:px,Float:py,Float:pz,Float:rz)
{
CreateDynamicObject(19618, px, py, pz 0.0, 0.0, rz);//Safe

CreateDynamicObject(19619, px - 0.4224850000000515, py - 0.24340800000004492, pz, 0.0, 0.0, rz);//Door
return 1;
}

JR_Junior
19.06.2021, 20:43
У тебя оффсеты неправильные походу. Я посмотрел урок, который выше скинули и они другие.
По X: -0.4224850000000515
По Y: -0.24340800000004492
По Z не меняется.

Попробуй:


stock CreateSafeBox(Float:px,Float:py,Float:pz,Float:rz)
{
CreateDynamicObject(19618, px, py, pz 0.0, 0.0, rz);//Safe

CreateDynamicObject(19619, px - 0.4224850000000515, py - 0.24340800000004492, pz, 0.0, 0.0, rz);//Door
return 1;
}


К сожалению, это тоже не работает.
https://i.postimg.cc/7Z0FMMnX/Screenshot-45.png

vawylon
19.06.2021, 20:49
Тригонометрия в помощь!

JR_Junior
19.06.2021, 20:50
https://pawn-wiki.ru/index.php?/topic/53098-safemaker/

Не удержался и реализовал. Вот пожалуйста)
Обязательно залью на этот форум)

tg @vawylon

А почему вы не разместили SafeEditor.pwn?

$continue$
20.06.2021, 00:46
Чтобы создать дверь нужно сделать подобные действия:


const Float: SAFE_WIDTH = 0.664063;
const Float: SAFE_LENGTH = 0.851563;
const Float: DOOR_WIDTH = 0.1796874;


new
Float: cos_z = floatcos(rot_z_safe, degrees),
Float: sin_z = floatsin(rot_z_safe, degrees),
Float: width = (SAFE_WIDTH - DOOR_WIDTH) * 0.5,
Float: length = SAFE_LENGTH * 0.5;

CreateObject(
19619,
x_safe_pos + sin_z * width - cos_z * length,
y_safe_pos - cos_z * width - sin_z * length,
z_safe_pos,
0.0,
0.0,
rot_z_safe
);



https://i.imgur.com/pKo8zJy.png

JR_Junior
20.06.2021, 01:26
Чтобы создать дверь нужно сделать подобные действия:


const Float: SAFE_WIDTH = 0.664063;
const Float: SAFE_LENGTH = 0.851563;
const Float: DOOR_WIDTH = 0.1796874;


new
Float: cos_z = floatcos(rot_z_safe, degrees),
Float: sin_z = floatsin(rot_z_safe, degrees),
Float: width = (SAFE_WIDTH - DOOR_WIDTH) * 0.5,
Float: length = SAFE_LENGTH * 0.5;

CreateObject(
19619,
x_safe_pos + sin_z * width - cos_z * length,
y_safe_pos - cos_z * width - sin_z * length,
z_safe_pos,
0.0,
0.0,
rot_z_safe
);



https://i.imgur.com/pKo8zJy.png


Сработало отлично! Большое спасибо!
Какое приложение вы использовали для получения этих размеров? Я хотел получить размеры идентификаторов 2003 и 2004 годов.

Изменить: найдено https://dev.prineside.com/en/gtasa_samp_model_id/model/2003-cr_safe_body/