Уроки моддинга
Основной раздел
Search…
⌃K
Links

000162. Используем scm-функции в качестве проверок

Используем scm-функции в качестве проверок|Вроде нигде не видел подобного урока, поэтому решил написать о использовании scm-функции в качестве проверок.|BoPoH|BoPoH||||Впрочем, тут и писать особо нечего. Например, вам нужно сделать scm-функцию поиска педа в радиусе с определённым ID модели. Выглядеть она будет примерно так:
:SearchPedWithModel
/*
0AB1: @SearchPedWithModel 5 point [email protected] [email protected] [email protected] radius 40.0 model 7 get_handle [email protected]
*/
if
0AE1: [email protected] = random_actor_near_point [email protected] [email protected] [email protected] in_radius [email protected] find_next 0 pass_deads 0
then
if
then
0AB2: ret 1 [email protected]
end
while 0AE1: [email protected] = random_actor_near_point [email protected] [email protected] [email protected] in_radius [email protected] find_next 1 pass_deads 0
if
then
0AB2: ret 1 [email protected]
end
end
end
0AB2: ret 1 0
В основном коде вы можете сделать так:
0AB1: @SearchPedWithModel 5 point [email protected] [email protected] [email protected] radius 40.0 model 7 get_handle [email protected]
if
056D: actor [email protected] defined
then
// выполняем действие
end
Но, согласитесь, было бы гораздо удобнее иметь такую конструкцию:
if
0AB1: @SearchPedWithModel 5 point [email protected] [email protected] [email protected] radius 40.0 model 7 get_handle [email protected]
then
// выполняем действие
end
Для того, чтобы такая конструкция сработала, нам необходимо вставить следующие строки в функцию перед возвратом значения:
0A9F: [email protected] = current_thread_pointer
0AA6: call_method 0x4859D0 struct [email protected] num_params 1 pop 0 return 0xFF
Вместо переменной [email protected] здесь можно использовать любую удобную переменную, главное заменить её в обеих строках. Значение 0xFF в конце означает возвращаемое булевое значение: если вы укажете 0xFF, то функция вернёт true, а если укажете 0, то функция вернёт false.
Однако, если мы захотим использовать несколько проверок в основном коде сразу ( if and или if or ), то нашу функцию нужно ставить в самое начало проверок. К тому же, если мы захотим использовать сразу несколько функций-проверок, то они будут работать только если внутри функций нет проверок/циклов. Короче говоря, лучше всего использовать такие проверки поодиночке. В конечном счёте, наша функция будет выглядеть так:
:SearchPedWithModel
/*
0AB1: @SearchPedWithModel 5 point [email protected] [email protected] [email protected] radius 40.0 model 7 get_handle [email protected]
*/
if
0AE1: [email protected] = random_actor_near_point [email protected] [email protected] [email protected] in_radius [email protected] find_next 0 pass_deads 0
then
if
then
0A9F: [email protected] = current_thread_pointer
0AA6: call_method 0x4859D0 struct [email protected] num_params 1 pop 0 return 0xFF
0AB2: ret 1 [email protected]
end
while 0AE1: [email protected] = random_actor_near_point [email protected] [email protected] [email protected] in_radius [email protected] find_next 1 pass_deads 0
if
then
0A9F: [email protected] = current_thread_pointer
0AA6: call_method 0x4859D0 struct [email protected] num_params 1 pop 0 return 0xFF
0AB2: ret 1 [email protected]
end
end
end
0A9F: [email protected] = current_thread_pointern
0AA6: call_method 0x4859D0 struct [email protected] num_params 1 pop 0 return 0x0
0AB2: ret 1 0
|1421|315|0|69473416png793510400`257``||ispolzuem_scm_funkcii_v_kachestve_proverok|1504601800