You are not logged in.
(Не решенные вопросы внизу (последний пост))
Мой первый скрипт. Если глупые вопросы или просто забыл чего - не ругайтесь, пожалуйста.
Делает скрипт следующее:
если подойти к больнице, появится доктор (достаточно далеко, чтобы его появления около больницы не было видно), если к нему подойти ближе, он подойдет к игроку и спросит, хотите ли вы "полечится", лечит (ну или не лечит). Если отойти доктор уничтожится.
Реализовано так:
массив заполняю кооринатами медицинских центров
пробегая по массиву, в цикле, проверяю, подошел ли CJ к центру
если подошел - сохраняю индексы
создаю доктора
проверяю, подошел ли CJ ближе. одновременно проверяю - если отойдет дальше - уничтожаю доктора
если подошел, доктор бежит к CJ
добежав и остановившись, доктор задает вопрос
CJ отвечает или уходит
если отвечает, доктор его "лечит" и возвращается к месту, на котором появлялся
Ошибки такие:
(решен)1) если CJ подходит к доктору, он не подходит к нему, а сразу лечит и все (но поворачивается к нему)
(решен)2) лечит сразу. а должен был подождать нажатия кнопки
И вопросы:
(решен)1) наверно, это особенность опкода (00EC: actor $PLAYER_ACTOR 0 near_point 6@[3@] 6@[4@] 6@[5@] radius 50.0 50.0).
Для быстрого тестирования у меня больница около дома, там есть навес, как только я под него захожу - доктор пропадает (хотя расстояние там много меньше указанного для уничтожения доктора)
2) как сделать, чтобы на экране появлялся вопрос (текст)? используя CLEO_TEXT, fxt
как назвать текстовый файл? и где то же его нужно указать, наверно, в скрипте?
3) в одной из версий я не делал массив, а поставил в ряд семь условий и семь jump (каждый к своему центру, после jump в переменные заносились координаты нужного центра (здесь заносятся только индексы)). в остальном тоже самое. игра сильно тормозила. семь условий нахождения в сфере подряд - это так тяжело?
Last edited by ChCyrill (01-09-2011 16:28)
Offline
Во-первых - не используй ГЛОБАЛЬНЫХ переменных в CLEO - скрипте!!! Можно исп. только "специальные", типа $PLAYER_ACTOR.
Имя FXT-файла любое. Указывать на файл нигде не нужно. Но лучше юзай опкоды 0ACA-0AD1.
Проверка нажатия кнопки - 0AB0.
Offline
Примерно так. Учись конструкциями писать.
{$CLEO .cs} // 5@ - индекс 6@ = 1577.762 12@ = 1771.0668 18@ = 10.7753 7@ = -316.6812 13@ = 1056.377 19@ = 19.7422 8@ = -2199.7195 14@ = -2308.075 20@ = 30.625 9@ = -1514.823 15@ = 2527.1189 21@ = 55.7444 10@ = -2670.2854 16@ = 616.4364 22@ = 14.4545 11@ = 2027.77 17@ = -1420.52 23@ = 16.9922 while true wait 0 if player.Defined(0) then actor.StorePos($PLAYER_ACTOR, 24@, 25@, 26@) for 5@ = 0 to 5 050A: 27@ = distance_between_XYZ 24@ 25@ 26@ and_XYZ 6@(5@,5f) 12@(5@,5f) 18@(5@,5f) if 27@ < 50.0 then 4@ = marker.CreateIconWithoutSphere(22, 6@(5@,5f), 12@(5@,5f), 18@(5@,5f)) #LAEMT1.Load 038B: load_requested_models 3@ = actor.Create(18, #LAEMT1, 6@(5@,5f), 12@(5@,5f), 18@(5@,5f)) #LAEMT1.Destroy :loop_near while true wait 0 if or not player.Defined(0) not actor.Defined(3@) then goto @breakinst else if or actor.Dead($PLAYER_ACTOR) actor.Dead(3@) then goto @breakinst else 050A: 27@ = distance_between_XYZ 24@ 25@ 26@ and_XYZ 6@(5@,5f) 12@(5@,5f) 18@(5@,5f) if 27@ > 50.0 then goto @breakinst else if 00EC: actor $PLAYER_ACTOR 0 near_point 6@(5@,5f) 12@(5@,5f) 18@(5@,5f) radius 3.5 3.5 then camera.Restore_WithJumpCut player.CanMove(0) = false 04C4: store_coords_to 0@ 1@ 2@ from_actor $PLAYER_ACTOR with_offset 0.0 1.5 0.0 0637: AS_actor 3@ goto 0@ 1@ 2@ mode 6 turn_radius 0.0 stop_radius 0.0 look_at_actor $PLAYER_ACTOR while true wait 0 if or not player.Defined(0) not actor.Defined(3@) then break else if or actor.Dead($PLAYER_ACTOR) actor.Dead(3@) then break else if 00F2: actor 3@ near_actor $PLAYER_ACTOR radius 2.0 2.0 0 then 0ACA: show_text_box "Press Y or N" while true wait 0 if or not player.Defined(0) not actor.Defined(3@) then break else if or actor.Dead($PLAYER_ACTOR) actor.Dead(3@) then break else if 00E1: key_pressed 0 11 // Y then 0A96: 31@ = actor $PLAYER_ACTOR struct inc(31@, 0x544) 0A8D: 31@ = read_memory 31@ size 4 virtual_protect 0 // max health 0090: 31@ = float 31@ to_integer 30@ = actor.Health($PLAYER_ACTOR) 0A8F: 31@ = 31@ - 30@ dec(31@) if player.Money(0) > 31@ then inc(31@) actor.Health($PLAYER_ACTOR) = 1000 0B13: 31@ = NOT 31@ // 31@ = -31@ inc(31@) // player.Money($PLAYER_CHAR) += 31@ player.CanMove(0) = true 0603: AS_actor 3@ goto 6@(5@,5f) 12@(5@,5f) 18@(5@,5f) mode 6 timelimit -1 wait 10000 goto @loop_near else 0ACA: show_text_box "Show me your money first :trollface:" player.CanMove(0) = true 0603: AS_actor 3@ goto 6@(5@,5f) 12@(5@,5f) 18@(5@,5f) mode 6 timelimit -1 wait 10000 goto @loop_near end else if 00E1: key_pressed 0 10 // N then player.CanMove(0) = true 0603: AS_actor 3@ goto 6@(5@,5f) 12@(5@,5f) 18@(5@,5f) mode 6 timelimit -1 wait 10000 goto @loop_near end end end end end end end end end end end end end continue :breakinst if 075C: marker 4@ enabled then marker.Disable(4@) else if actor.Defined(3@) then actor.DestroyInstantly(3@) end end while true wait 0 if not player.Defined(0) then break else 050A: 27@ = distance_between_XYZ 24@ 25@ 26@ and_XYZ 6@(5@,5f) 12@(5@,5f) 18@(5@,5f) if 27@ > 50.0 then break end end end break end end end end end
Last edited by DK22Pac (30-08-2011 12:38)
Plugin-SDK https://github.com/DK22Pac/plugin-sdk
Discord-сервер по plugin-sdk и программированию в GTA
RU https://discord.gg/QEesDGb
ENG https://discord.gg/zaVqFQv
Offline
Наверно, очень глупый вопрос.
Почему сразу создались все маркеры (иконки)?
Ведь
4@ = marker.CreateIconWithoutSphere(22, 6@(5@,5f), 12@(5@,5f), 18@(5@,5f))
после условия "подхода"
Offline
А. я, кажется, понял. Создав глобальные переменные моих иконок, я их поместил на карту навсегда. Они оставались, даже, когда я убрал скрипт.
я их выключил
не. не выключил. они почему то так и висят на карте. что делать?
Last edited by ChCyrill (30-08-2011 14:25)
Offline
Новую игру начни.
Plugin-SDK https://github.com/DK22Pac/plugin-sdk
Discord-сервер по plugin-sdk и программированию в GTA
RU https://discord.gg/QEesDGb
ENG https://discord.gg/zaVqFQv
Offline
я лучше в скрипте напишу отключение иконок
Большое спасибо за помощь. Переписал свой скрипт, используя совет и ваш код (новые конструкции и опкоды узнал) - вроде все работает.
Я наоборот разучался конструкциями писать (я программирую). Думал тут (в скриптах) их лучше не использовать.
И еще вопрос. По fxt (CLEO_TEXT). Все таки хочу его использовать. Я переименовал запись (строку), по примеру другого скрипта, в SPD_1. Заработало. Для имен строк есть какие-нибудь правила?
Last edited by ChCyrill (30-08-2011 17:03)
Offline
Раз моя тема все еще первая и просмотров много.
Как "правильно" вызвать актера в машине к CJю. Чтобы он приехал, а не вдруг появился, и чтобы на дороге.
А именно - теперь я хочу вызвать доктора. Он должен подъехать ко мне, как он подъезжает, когда на улице умирают.
P.S. про текст никто не может ответить?
Offline
Блин. Что-то застреваю я в скриптинге на каждом шагу.
Не проигрывается анимация. 6@ - мой доктор
04ED: load_animation "POOL"
while 04EE: not animation "POOL" loaded
wait 10
end
0605: actor 6@ perform_animation_sequence "POOL_LONG_SHOT" from_file "POOL" 4.0 loop 0 0 0 1 -1 ms
wait 5000
Last edited by ChCyrill (31-08-2011 15:54)
Offline
Вместо actor -1 надо указывать $PLAYER_ACTOR и вместо -1ms надо нормальное время.
Offline
Спасибо
Актер у меня правильно стоит, я просто из примера в справке копировал, а не из кода.
А вот время я -1 оставил. Поставил другое - заработало.
Offline
Как можно узнать, что игрок кого-то (актера) убил?
конкретного и любого (неизвестного, просто педа на улице)
Last edited by ChCyrill (01-09-2011 16:27)
Offline
если всё ещё интересно, то вот:
0xB6F3B8 = Поинтер на цель.
+0xC0 = Поинтер на последний объект, педа, машину с которым ты столкнулся.
переходи на адрес из указателя и проверяй пед-ли это, а если пед - то умер-ли он.
на форуме есть примеры использования адресов памяти и работы с ними.
Offline
Еще интересно, но сейчас не попробую.
Спасибо.
Offline