#1 26-05-2008 04:17

svetka
Registered: 29-12-2006
Posts: 222

Наемнички:)

Можно нанять в охрану любого прохожего. Особенно занятно, когда нанимаешь разных по типу педов. Например, если нанять полицейского и криминал, то они будут совместно обстреливать как представителей полиции, так и представителей криминалитета)
Собственно:

{$CLEO}
0000:

wait 0 
Model.Load(#MICRO_UZI)
038B: load_requested_models 

:NONAME_13
wait 0 
  $ONMISSION == 0 
else_jump @NONAME_13 
if and
   Model.Available(#MICRO_UZI)
   Player.Defined($PLAYER_CHAR)
else_jump @NONAME_13  

:NONAME_62
wait 0 
00E1: key_Pressed 0 10 
else_jump @NONAME_100
jump @NONAME_94  

:NONAME_94
wait 0 
0AB5: store_actor $PLAYER_ACTOR closest_vehicle_to 0@ closest_ped_to 1@ 
if 
  1@ > -1 
else_jump @NONAME_94 
0631: put_actor 1@ in_group $PLAYER_GROUP 
07FE: set_actor 1@ fighting_style_to 7 6 
01B2: give_actor 1@ weapon 28 ammo 6000 // Load the weapon model before using this 
Actor.WeaponAccuracy(1@) = 100
Actor.Health(1@) = 500
Actor.Armour(1@) = 200
Player.Money($PLAYER_CHAR) += -250
Model.Destroy(#MICRO_UZI)   
Actor.RemoveReferences(1@)

:NONAME_100
wait 0
00E1: key_Pressed 0 4
else_jump @NONAME_62
06C9: remove_actor 1@ from_group
jump @NONAME_94

Пока не удалось решить проблему с роспуском всей группы "наемников". Один обязательно остается с CJ hmm

Offline

#2 27-05-2008 07:11

Capushon
Registered: 13-08-2006
Posts: 350
Website

Re: Наемнички:)

@svetka -
А кол-во маней у плеера кто проверять будет?


Сначала ты надежда и гордость,
Потом о спину ломают аршин. (c)БГ

Offline

#3 27-05-2008 07:47

svetka
Registered: 29-12-2006
Posts: 222

Re: Наемнички:)

Capushon , это специально. Вот нет у CJ ни оружия, ни денег, а наркоторговца побить надо ) Или вдруг нападение на завоеванную территорию в войне банд? А ситуация у CJ та же.
Можно сделать честнее, и просто взять охрану в долг:

:NONAME_100
wait 0
00E1: key_Pressed 0 4
else_jump @NONAME_62
06C9: remove_actor 1@ from_group
Player.Money($PLAYER_CHAR) += -250
jump @NONAME_94

Эти вопросы для меня пока не очень  важны. Пусть CJ уходит в минус. Или отсутствие проверки наличности чем-то еще чревато?
Но вот почему последний наемник не отпускается? Эх, логика... Не сестра она мне)
Этот вариант скрипта не окончательный по замыслу. Так.., заготовка. Ее бы до ума довести. А уж доведу... Ох, выложу скриптик! Каким я его задумала)

Last edited by svetka (27-05-2008 07:50)

Offline

#4 27-05-2008 11:19

Yarik
Registered: 22-02-2008
Posts: 173
Website

Re: Наемнички:)

1) Последний отпускается, но jump @NONAME_94 и он сразу же нанимается...я так думаю
2) Хорошо бы сделать рендомное оружие охранникам

Offline

#5 27-05-2008 12:17

svetka
Registered: 29-12-2006
Posts: 222

Re: Наемнички:)

Yarik,

Последний отпускается, но jump @NONAME_94 и он сразу же нанимается...я так думаю

Я попробую) Спасибо за подсказку:)

Хорошо бы сделать рендомное оружие охранникам

Это в планах. И не просто в планах, а давать оружие каждому нанятому педу на свое усмотрение. Этому я научилась) Пробный скрипт уже есть. По аналогии с вариантом Seemanna.  Работает)

Last edited by svetka (27-05-2008 12:20)

Offline

#6 28-05-2008 12:50

svetka
Registered: 29-12-2006
Posts: 222

Re: Наемнички:)

Да, Yarik. Ты прав на счет jump @NONAME_94. Никак пока что-то не соображу как исправить код.
Вот тот же код с рендомным оружием. Только вот непонятно почему текстуры некоторых моделей не всегда загружаются. Т.е. пед из пустых рук палит, как из винтовки (и выстрел есть, и огонь), но самой ее нет.
Вобщем вот код по аналогии с кодом Seemanna про цветы и пр.

{$CLEO}
0000: 

:NONAME_2
wait 250 
if 
   Player.Defined($PLAYER_CHAR)
jf @NONAME_2 
if 
  $ONMISSION == 0 
jf @NONAME_2  

:NONAME_3
if 
0AB0:   key_pressed 90 // Z
jf @NONAME_159  

:NONAME_4
0AB5: store_actor $PLAYER_ACTOR closest_vehicle_to 0@ closest_ped_to 1@ 
if 
  1@ > -1 
jf @NONAME_4 
0209: 2@ = random_int_in_ranges #chromegun #minigun  
Model.Load(2@)

:NONAME_101
   not Model.Available(2@)
jf @NONAME_124 
wait 0 
jump @NONAME_101 

:NONAME_124
0085: 3@ = 2@ // (int) 
3@ -= 324 
01B2: give_actor 1@ weapon 3@ ammo 6000 // Load the weapon model before using this 
0631: put_actor 1@ in_group $PLAYER_GROUP
07FE: set_actor 1@ fighting_style_to 7 6  
actor.SetImmunities(1@,0,1,1,0,0) 
Actor.WeaponAccuracy(1@) = 100
Actor.Health(1@) = 500
Actor.Armour(1@) = 200
Model.Destroy(2@)
wait 1000   

:NONAME_159
wait 0
0AB0:   key_pressed 88 // X
jf @NONAME_2
0632: release_group $PLAYER_GROUP
jump @NONAME_2

Last edited by svetka (31-05-2008 10:18)

Offline

#7 29-05-2008 06:12

svetka
Registered: 29-12-2006
Posts: 222

Re: Наемнички:)

Как мне остановить процесс поиска педов? Или я не в ту сторону думаю?)

Last edited by svetka (29-05-2008 06:13)

Offline

#8 29-05-2008 09:22

svetka
Registered: 29-12-2006
Posts: 222

Re: Наемнички:)

Ёлки-палки!!! 0632: release_group $PLAYER_GROUP !!! И все с умным видом молчали ) Ну, с памятью у меня на опкоды не ай-яй))
Всё. Теперь нажатием "Х" распускаем сразу всю группу.
Но я так и не поняла - почему же оружие не всегда проявляется, хотя и стреляет? Хоть на это ответьте? М?:) Может нельзя выходить за рамки группы оружия?

Offline

#9 29-05-2008 15:51

svetka
Registered: 29-12-2006
Posts: 222

Re: Наемнички:)

Seemann, и все же есть один непонятный (даже неприятный) момент, в т.ч. и в твоем варианте скрипта о цветах. Если я жму F (я про твой вариант) несколько раз на одном и том же педе - все появляющиеся у него в руках дидлы и цветы он в ходе перебора прячет за пазухой. Если педа прибить - весь набор вызванных ранее штучек будет вращаться над его трупом. Ведь это ненормально или как?

Offline

#10 30-05-2008 05:07

Seemann
Registered: 07-08-2006
Posts: 2,155

Re: Наемнички:)

1. В блоке NONAME_159 нужно изменить метки NONAME_3 на NONAME_2, иначе скрипт зацикливается между проверками нажатий и не проверяет состояние игрока и ONMISSION.

2.

jump @NONAME_4  

:NONAME_4

если JUMP идет на метку, которая стоит сразу после этого JUMP, то jump не нужен. В данном случае, нужно убрать jump @NONAME_4.

3.

0209: 2@ = random_int_in_ranges #chromegun #minigun

Эта команда выбирает случайное число в интервале 349..361, хотя #minugun = 362. Это особенность этого опкода 0209, что он возвращает число в интервале A..B-1, где A и B - заданные числа. Если ты хочешь, чтобы у наемника появлялся миниган (читерство!), то нужно увеличить второе число на 1 (#satchel). Это раз.
Второе.

01B2: give_actor 1@ weapon 3@ ammo 6000 // Load the weapon model before using this

здесь для передачи игроку оружия используется номер оружия. Номер для каждой модели можно найти в справке SB (Документация по SCM-SA). Для получения нужного номера в скрипте с цветами я использовал простой трюк - отнимал от номера модели, полученного при помощи 0209, число 311. Это отлично подходило для цветов и дилдо (см. таблицу):

10  321  #gun_dildo1   
11  322  #gun_dildo2   
12  323  #gun_vibe1   
13  324  #gun_vibe2   
14  325  #flowera   
15  326  #gun_cane

Для этого же скрипта такой трюк не пройдет. У тебя был правильный ход мыслей с числом 324, но к сожалению для всех вариантов моделей это число не подойдет:

25  349  #chromegun // подходит
30  355  #ak47 // не подходит
31  356  #m4 // не подходит
33  357  #cuntgun // подходит

Кроме того, в заданном интервале моделей есть число 354, а это не относится к доступной модели оружия (по крайней мере в таблице в справке такого числа нет).

Поэтому когда выпадают числа 354, 355, 356 - скрипт отрабатывает неправильно (модель загружается, но актеру передается оружие по другому номеру, поэтому нет визуального отображения модели)

Вывод: вариант со случайной выборкой модели как в скрипте с цветами тут не подойдет.

Как вариант, можно сделать так: выбирать число от 0 до 11 (по числу оружия), потом выпавшее число использовать в опкоде 0871, 0872. В 0871 сделать набор вариантов, где в 2 переменные будут записываться номер модели и номер оружия (например для 0 - н.м. = #chromegun, н.о. = 25). Переменные с номерами модели и оружия потом использовать как обычно.

Насчет дублирования оружия при передаче одному и тому же актеру - можно добавить проверку на наличие у актера такого оружия (0491), если есть, то не передавать.

Offline

#11 30-05-2008 08:52

svetka
Registered: 29-12-2006
Posts: 222

Re: Наемнички:)

Спасибо, Seemann, за подробный ответ. Осталось освоить такие незамысловатые опкоды, как 0871, 0872 smile  Надеюсь, что разберусь) Я их всегда боялась smile

Offline

#12 30-05-2008 17:14

3Doomer
From: КаZан
Registered: 14-05-2008
Posts: 659
Website

Re: Наемнички:)

svetka wrote:

Спасибо, Seemann, за подробный ответ. Осталось освоить такие незамысловатые опкоды, как 0871, 0872 smile  Надеюсь, что разберусь) Я их всегда боялась smile

Испацтала:
З0чем тебе эти jump table? Они поидее ненужны нигде и только усложняют работу=)

Last edited by 3Doomer (31-05-2008 21:13)


GIMS developer

Offline

#13 30-05-2008 22:12

yelmi
Registered: 10-12-2006
Posts: 134
Website

Re: Наемнички:)

svetka wrote:

Осталось освоить такие незамысловатые опкоды, как 0871, 0872 smile  Надеюсь, что разберусь) Я их всегда боялась smile

Sanny Builder Help: Статьи/Опытным пользователям/Таблицы переходов
И чего их бояться. smile

Last edited by yelmi (30-05-2008 22:13)

Offline

#14 31-05-2008 06:59

svetka
Registered: 29-12-2006
Posts: 222

Re: Наемнички:)

yelmi, хелп я читала. Если б всё так просто помогало. Только не мне ) Я ж приступая к работе над скриптами как на войну собираюсь. Страшно, но вдруг победю? smile Да победю конечно) И с этими "прыгающими столами" тоже разберусь. А пока этот аналог массива мой мозг своей массой и подавляет))

Offline

#15 31-05-2008 10:12

yelmi
Registered: 10-12-2006
Posts: 134
Website

Re: Наемнички:)

Там нет ничего сложного, все зависит от значения переменной.

0871: init_jump_table 0@ total_jumps 7 0 @метка_выхода jumps 0 @метка1 1 @метка2 2 @метка3 3 @метка4 4 @метка5 5 @метка6 6 @метка7

Принцип его работы можно представить в таком виде:

:метка1
if 
0@ == 0
jf @метка2
<код>
jump  @метка_выхода

:метка2
if
0@ == 1
jf @метка3 
<код>
jump  @метка_выхода

….

:метка_выхода

Last edited by yelmi (31-05-2008 10:14)

Offline

#16 31-05-2008 17:22

3Doomer
From: КаZан
Registered: 14-05-2008
Posts: 659
Website

Re: Наемнички:)

2 svetka:
Вот я нашёл хороший способ случайного выбора, через массив

var
$BLABLABLA array 5 of int
end
$BLABLABLA[0] = 33
$BLABLABLA[1] = 38
$BLABLABLA[2] = 31
$BLABLABLA[3] = 30
$BLABLABLA[4] = 29

0209: 2@ = random_int_in_ranges 0 4  
Model.Load($BLABLABLA[2@])
и так далее...

Last edited by 3Doomer (31-05-2008 21:31)


GIMS developer

Offline

#17 01-06-2008 07:36

Seemann
Registered: 07-08-2006
Posts: 2,155

Re: Наемнички:)

@3Doomer - такой способ подходит далеко не всегда. В CLEO-скрипте нужно будет использовать локальный массив (1@: array 5 of int). Если массив достаточно большой, или массивов несколько (как в данном скрипте, тут понадобятся 2 массива для номеров моделей и номеров оружия), то 32-х локальных переменных может просто не хватить.

А в некоторых случаях способ очень хорош.

Offline

#18 01-06-2008 17:46

3Doomer
From: КаZан
Registered: 14-05-2008
Posts: 659
Website

Re: Наемнички:)

Seemann wrote:

@3Doomer - такой способ подходит далеко не всегда. В CLEO-скрипте нужно будет использовать локальный массив (1@: array 5 of int). Если массив достаточно большой, или массивов несколько (как в данном скрипте, тут понадобятся 2 массива для номеров моделей и номеров оружия), то 32-х локальных переменных может просто не хватить.

А в некоторых случаях способ очень хорош.

Локальный массив не объявляется, СБ ругается при компиляции на строчку     32@[0] = 33, где я пытаюсь забить в ячейку значение...пишет Неверный символ в идентификаторе 2@
Вот код


var
32@ array 5 of int
end
32@[0] = 33

Весь код скрипта почти дописан...

Last edited by 3Doomer (01-06-2008 18:01)


GIMS developer

Offline

#19 01-06-2008 18:06

Seemann
Registered: 07-08-2006
Posts: 2,155

Re: Наемнички:)

А локальные переменные и не получится с индексами-константами использовать. Предполагается, что ты можешь сам вручную посчитать нужный индекс (10@[5] = 15@).

Offline

#20 01-06-2008 20:08

3Doomer
From: КаZан
Registered: 14-05-2008
Posts: 659
Website

Re: Наемнички:)

Скрипт я написал, но всёравно из оружий загружается только миниган, а ещё иногда игра вылетает на загрузке модели......похимичьте если хотите=)

{$CLEO}
0000: 
var
$MYARMYSCRid array 5 of int
$MYARMYSCRmodel array 5 of int
end
$MYARMYSCRid[0] = 33
$MYARMYSCRid[1] = 38
$MYARMYSCRid[2] = 31
$MYARMYSCRid[3] = 30
$MYARMYSCRid[4] = 29

$MYARMYSCRmodel[0] = #CUNTGUN
$MYARMYSCRmodel[1] = #MINIGUN
$MYARMYSCRmodel[2] = #M4
$MYARMYSCRmodel[3] = #AK47
$MYARMYSCRmodel[4] = #MP5LNG

:NONAME_2
wait 250 
if 
   Player.Defined($PLAYER_CHAR)
jf @NONAME_2 
if 
  $ONMISSION == 0 
jf @NONAME_2  

:NONAME_3
if 
0AB0:   key_pressed 90 // Z
jf @NONAME_159  

:NONAME_4
0AB5: store_actor $PLAYER_ACTOR closest_vehicle_to 0@ closest_ped_to 1@ 
if 
  1@ > -1 
jf @NONAME_4 
0209: 2@ = random_int_in_ranges 0 4 
Model.Load($MYARMYSCRmodel[2@])

:NONAME_101
   not Model.Available($MYARMYSCRmodel[2@])
jf @NONAME_124 
wait 0 
jump @NONAME_101 

:NONAME_124
01B2: give_actor 1@ weapon $MYARMYSCRid[2@] ammo 6000 // Load the weapon model before using this 
0631: put_actor 1@ in_group $PLAYER_GROUP
07FE: set_actor 1@ fighting_style_to 7 6  
actor.SetImmunities(1@,0,1,1,0,0) 
Actor.WeaponAccuracy(1@) = 100
Actor.Health(1@) = 500
Actor.Armour(1@) = 200
Model.Destroy($MYARMYSCRmodel[2@])
wait 1000   

:NONAME_159
wait 0
0AB0:   key_pressed 88 // X
jf @NONAME_2
0632: release_group $PLAYER_GROUP
jump @NONAME_2

GIMS developer

Offline

#21 01-06-2008 20:58

yelmi
Registered: 10-12-2006
Posts: 134
Website

Re: Наемнички:)

А так не пробовал?

{$CLEO}
0000: 
5@ = 33
6@ = 38
7@ = 31
8@ = 30
9@ = 29

11@ = #CUNTGUN
12@ = #MINIGUN
13@ = #M4
14@ = #AK47
15@ = #MP5LNG

:NONAME_2
wait 250 
if 
   Player.Defined($PLAYER_CHAR)
jf @NONAME_2 
if 
  $ONMISSION == 0 
jf @NONAME_2  

:NONAME_3
if 
0AB0:   key_pressed 90 // Z
jf @NONAME_159  

:NONAME_4
0AB5: store_actor $PLAYER_ACTOR closest_vehicle_to 0@ closest_ped_to 1@ 
if 
  1@ > -1 
jf @NONAME_4 
0209: 2@ = random_int_in_ranges 0 5 
Model.Load(11@(2@,5i))

:NONAME_101
   not Model.Available(11@(2@,5i))
jf @NONAME_124 
wait 0 
jump @NONAME_101 

:NONAME_124
01B2: give_actor 1@ weapon 5@(2@,5i) ammo 6000 // Load the weapon model before using this 
01B9: set_actor 1@ armed_weapon_to 5@(2@,5i) 

0631: put_actor 1@ in_group $PLAYER_GROUP
07FE: set_actor 1@ fighting_style_to 7 6  
actor.SetImmunities(1@,0,1,1,0,0) 
Actor.WeaponAccuracy(1@) = 100
Actor.Health(1@) = 500
Actor.Armour(1@) = 200
Model.Destroy(11@(2@,5i))
wait 1000   

:NONAME_159
wait 0
0AB0:   key_pressed 88 // X
jf @NONAME_2
0632: release_group $PLAYER_GROUP
jump @NONAME_2

Offline

#22 02-06-2008 06:08

svetka
Registered: 29-12-2006
Posts: 222

Re: Наемнички:)

Я опробовала скрипт. Пока без проблем)
Эх, ребята и молодцы же вы все! smile
Спешу всех поблагодарить за помощь. Сегодня мне инет должны отключить)
Всем В-О-О-О-Т такое спасибо! ))

Offline

#23 02-06-2008 06:25

Fess
Registered: 29-04-2008
Posts: 62

Re: Наемнички:)

Номер оружия можно найти опкодом:

0781: get_weapon_with_ID $AMMU_SELECTED_WEAPON model_to $AMMU_SELECTED_WEAPON_MODEL

---
Точнее наоборот позволяет узнать модель оружия по его ид, но в любом случае это позволяет использовать только один массив, экономя локальные переменные:

{$CLEO}
var
    0@: Array 5 of Integer
    5@: Integer
end
0@ = 29
1@ = 30
2@ = 31
3@ = 33
4@ = 38
while true
    wait 250
    if
        Player.Defined($PLAYER_CHAR)
    then
        if
            0AB0:  key_pressed 90
        then
            0AB5: store_actor $PLAYER_ACTOR closest_vehicle_to 5@ closest_ped_to 6@
            if
                6@ > -1
            then
                5@ = Random(0, 5)
                0781: get_weapon_with_ID 0@[5@] model_to 7@
                Model.Load(7@)
                while not Model.Available(7@)
                    wait 0
                end
                0631: put_actor 6@ in_group $PLAYER_GROUP
                01B2: give_actor 6@ weapon 0@[5@] ammo 9999 // Load the weapon model before using this
                Model.Destroy(7@)
            end
        end
        if
            0AB0:  key_pressed 88
        then
            0632: release_group $PLAYER_GROUP 
        end   
    end
end

Last edited by Fess (02-06-2008 10:46)

Offline

#24 02-06-2008 12:05

yelmi
Registered: 10-12-2006
Posts: 134
Website

Re: Наемнички:)

Все то же самое, но только с таблицей переходов, используем всего 2 переменные.

{$CLEO}
0000: 

:NONAME_2
wait 250 
if and
   Player.Defined($PLAYER_CHAR)
  $ONMISSION == 0 
jf @NONAME_2  

:NONAME_3
if 
0AB0:   key_pressed 90 // Z
jf @NONAME_159  

:NONAME_4
0AB5: store_actor $PLAYER_ACTOR closest_vehicle_to 0@ closest_ped_to 1@ 
if 
  1@ > -1 
jf @NONAME_4 


:NONAME_5
0209: 2@ = random_int_in_ranges 0 5 
0871: init_jump_table 2@ total_jumps 5 default_jump 0 @END jumps 0 @CUNTGUN 1 @MINIGUN 2 @M4 3 @AK47 4 @MP5LNG -1 @END -1 @END 

:CUNTGUN
5@ = 33
6@ = #CUNTGUN
jump @END

:MINIGUN
5@ = 38
6@ = #MINIGUN
jump @END

:M4
5@ = 31
6@ = #M4
jump @END

:AK47
5@ = 30
6@ = #AK47
jump @END

:MP5LNG
5@ = 29
6@ = #MP5LNG
jump @END

:END
wait 100
Model.Load(6@)
038B: load_requested_models 

:NONAME_101
   not Model.Available(6@)
jf @NONAME_124 
wait 0 
jump @NONAME_101 

:NONAME_124
01B2: give_actor 1@ weapon 5@ ammo 6000 // Load the weapon model before using this 
01B9: set_actor 1@ armed_weapon_to 5@ 
02E2: set_actor 1@ weapon_accuracy_to 85 
0631: put_actor 1@ in_group $PLAYER_GROUP
077A: set_actor 1@ default_action 4 to_actors_pedtype 6 
077A: set_actor 1@ default_action 4 to_actors_pedtype 7 
077A: set_actor 1@ default_action 4 to_actors_pedtype 9 
077A: set_actor 1@ default_action 4 to_actors_pedtype 10 
077A: set_actor 1@ default_action 4 to_actors_pedtype 11 
077A: set_actor 1@ default_action 4 to_actors_pedtype 12 
077A: set_actor 1@ default_action 4 to_actors_pedtype 13 
077A: set_actor 1@ default_action 4 to_actors_pedtype 14 
0350: toggle_actor 1@ maintain_position_when_attacked 1
actor.SetImmunities(1@,0,1,1,0,0) 
Actor.Health(1@) = 500
Actor.Armour(1@) = 200
Model.Destroy(6@)
   

:NONAME_159
wait 0
0AB0:   key_pressed 88 // X
jf @NONAME_2
0632: release_group $PLAYER_GROUP
jump @NONAME_2

Offline

#25 02-06-2008 12:31

Yarik
Registered: 22-02-2008
Posts: 173
Website

Re: Наемнички:)

Зачем таблица перехода или масив
Просто рандомно взять номер ID и по нему получить имя модели
0781: get_weapon_with_ID $AMMU_SELECTED_WEAPON model_to $AMMU_SELECTED_WEAPON_MODEL

Offline

Board footer

Powered by FluxBB