You are not logged in.
И ещё вопрос. Хотел сделать скрипт, что бы менять траффик на дорогах:
Thread "TRAFFICSET" 0@ = 5.0 :trafficset_10 wait 0 if and Player.Defined($PLAYER_ACTOR) 0AB0: key_pressed 107 0AB0: key_pressed 109 else_jump @trafficset_10 0ADF: add_dynamic_GXT_entry "_TRAFFICSET" text "Right and Left to select level of traffic. ~N~~k~~PED_SPRINT~ to set, ~N~~k~~VEHICLE_ENTER_EXIT~ to go back" 0512: show_permanent_text_box "_TRAFFICSET" Player.CanMove($PLAYER_CHAR) = False 03BF: set_player $PLAYER_CHAR ignored_by_everyone 1 jump @trafficset_150 :trafficset_150 wait 0 03F0: enable_text_draw 1 033F: set_text_draw_letter_size 0.5 2.0 045A: draw_text_1number 50.0 150.0 GXT "NUMBER" number 0@ jump @trafficset_151 :trafficset_151 wait 50 if or 0AB0: key_pressed 68 0AB0: key_pressed 37 else_jump @trafficset_184 0@ += 0.1 jump @trafficset_184 :trafficset_184 wait 50 if or 0AB0: key_pressed 65 0AB0: key_pressed 39 else_jump @trafficset_255 0@ -= 0.1 if 0@ == 0.0 else_jump @trafficset_255 0@ = 0.0 jump @trafficset_255 :trafficset_255 wait 0 if 00E1: player 0 pressed_key 16 else_jump @trafficset_288 01EB: set_traffic_density_multiplier_to 0@ jump @trafficset_316 :trafficset_288 wait 0 if 00E1: player 0 pressed_key 15 else_jump @trafficset_151 jump @trafficset_316 :trafficset_316 wait 0 03F0: enable_text_draw 0 03E6: remove_text_box 00BE: text_clear_all 0AE0: remove_dynamic_GXT_entry "_TRAFFICSET" 0581: enable_radar 1 03BF: set_player $PLAYER_CHAR ignored_by_everyone 0 Player.CanMove($PLAYER_CHAR) = True jump @trafficset_10 end_thread
но число 0@ при выводе на экран опкодом 045A появляется и сразу исчезает. В чём проблема?
SNKillers.net - всё о взломе и защите социальных сетей
Offline
Скажите, а в каких случаях после начала лэйбла wait 0 не ставится?
или просто, если можете, подправьте этот скрипт, а то я с ним так уже измучался, и всё-равно не работает ((
0@=0.5 :NONAME_10 wait 0 if and 0AB0: key_pressed 107 0AB0: key_pressed 109 else_jump @NONAME_10 Player.CanMove($PLAYER_CHAR) = False 03BF: set_player $PLAYER_CHAR ignored_by_everyone 1 jump @NONAME_248 :NONAME_248 wait 50 if 0AB0: key_pressed 33 else_jump @NONAME_284 0@ += 0.01 gosub @NONAME_500 gosub @NONAME_1000 :NONAME_284 if 0AB0: key_pressed 34 else_jump @NONAME_380 0@ -= 0.01 gosub @NONAME_600 gosub @NONAME_1000 :NONAME_380 if 00E1: player 0 pressed_key 16 else_jump @NONAME_248 03E6: remove_text_box 03BF: set_player $PLAYER_CHAR ignored_by_everyone 0 Player.CanMove($PLAYER_CHAR) = True jump @NONAME_10 :NONAME_500 if 0@ <= 0.0 then 0@ = 0.0 else return end return :NONAME_600 if 0@ >= 1.0 then 0@ = 1.0 else return end return :NONAME_1000 01EB: set_traffic_density_multiplier_to 0@ 0@ *= 100.0 0092: 0@ = float 0@ to_integer 0513: show_text_box_1number 'BJ_0' number 0@ 0@ /= 100 0093: 0@ = integer 0@ to_float return
Last edited by mr.Andrei (04-10-2010 18:06)
SNKillers.net - всё о взломе и защите социальных сетей
Offline
В большинстве. wait ставится если постоянно проверяется условие и происходит прыжок на начало лэйбэла.
Offline
@mr.Andrei -
{$CLEO} var 0@: Float = 1.0 1@: Float = 1.0 33@: Integer = 0 end while true wait 0 if and 0AB0: key_pressed 0x73 33@ > 150 then 0@ -= 0.01 if 0@ < 0.0 then 0@ = 0.0 end 33@ = 0 end if and 0AB0: key_pressed 0x74 33@ > 150 then 0@ += 0.01 if 0@ > 1.0 then 0@ = 1.0 end 33@ = 0 end if 1@ <> 0@ then 0ACE: show_formatted_text_box "%.2f" 0@ 01EB: set_traffic_density_multiplier_to 0@ 1@ = 0@ end end
Offline
Ага, ну я попробовал скомпилировать скрипт, и когда я нажимаю на F4, CJ вообще оказывается на дороге, а текст-бокса сверху всё-равно нет или я до чегото не доезжаю
SNKillers.net - всё о взломе и защите социальных сетей
Offline
@mr.Andrei - может конфликтует с другими скриптами?
Offline
Скажите, а в каких случаях после начала лэйбла wait 0 не ставится?
Утверждение, что нужно ставить wait после каждой метки - неверно. Ожидание (wait) необходимо применять в бесконечном цикле или участке кода, выполнение которого может занять много времени (например, цикл с проверкой на загрузку модели, или последовательный запуск нескольких scm-функций) - невыполнение этого требования приведёт к зависанию игры.
Не следует вставлять в код больше wait-ов, чем необходимо, т.к. с каждым wait-ом будет всё сильнее замедляться работа скрипта. Посмотреть, на какое время останавливает работу скрипта wait, можно с помощью простого кода:
{$CLEO} 0000: while true 03F0: enable_text_draw 1 32@ = 0 wait 0 045A: draw_text_1number 100.0 100.0 GXT 'NUMBER' number 32@ end
Last edited by Den_spb (04-10-2010 21:35)
Offline
что касается wait 0... Расскажу-ка я маленькую сказку на ночь.
Давным-давно, когда для программирования достаточно было девятивольтовой батарейки и твердой руки, вытесняющей многозадачности не было. Задачи долны были жить в мире и согласии, и уступать друг-другу процессор. Поработал сам - дай поработать другим. Для этого существовали специальные команды и функции, например Yield. А программы недружелюбные, другим мешавшие, процессора не дававшие - прерывались пользователем перезагрузкой страшною и больше не запускались.
Но, были случаи, когда ровный бег команд прерывался принудительно - системными функциями, на системные же нужды. Скажет задача printf - тут-то ее и остановят. Подожди, скажут, немного - дай системе что-нибудь написать.
Годы шли, и все больше систем задачи переключало самомстоятельно, контекстами щелкая. Росла их сложность недетская - а вдруг какой задаче действительно переключаться нельзя, вдруг она что делает важное, непрерываемое. Так и множились семафоры и мьютексы, эвенты и критические секции...
А если вдруг кому надо создать систему простенькую, скриптовую, задачи в которой все добрососедские и правильные, то не нужна ему синхронизация страшная, нужно только уступить процессор когда надобно. Ввод и вывод нынче-то весь асинхронный, с очередями простыми и приоритетными - отправил запросов в очередь и пусть они себе выполняются. Сначала другие задачи скриптовые, потом стириминг дисковый, потом рендеринг, а как выведется кадр на экран, тут-то управление к скриптам и вернется, а там и до нашей задачи ожидающей выполнение снова дойдет...
Говорит задача, что больше делать ей нечего, тут и другие задачи начинают работать. Сначала
Offline
@Sanchez
А у тебя скрипт нормально работал???
@всем_остальным
Так можете просто объяснить, в чём у меня ошибка в скрипте, а то игра то вылетает, то текст-бокса нет... Хоть убейте, всё равно не получается, хотя не надо, это уже лишнее
ЗЫ: Маленький вопросик, в каких случаях можно не начинать поток
SNKillers.net - всё о взломе и защите социальных сетей
Offline
Offline
Offline
а у тебя несколько групп?
Да.
если ты знаешь хэндлы всех групп, можно сделать несколько проверок опкодом
06EE: actor 263@ in_group 260@
Да вот проблема в том, что хэндлы мне как раз и не известны. А нельзя их как-нибудь узнать, через память, например?
Offline
Да вот проблема в том, что хэндлы мне как раз и не известны. А нельзя их как-нибудь узнать, через память, например?
ну через память как это сделать я не знаю, а вот например если это твой актёр - это игрок, то можно использовать этот опкод -
07AF: $PLAYER_GROUP = player $PLAYER_CHAR group
хотя я не проверял его на работоспособность...
а для чего это тебе нужно, я не очень понимаю как может быть несколько групп, если они созданы не тобой...
именно поток
что-то я не очень понял, что значит не начинать новый поток....может я ошибаюсь, но возможно ты хочешь несколько потоков соединить в один?
Offline
в смысле thread "что-то там" в начале скрипта не пишется
SNKillers.net - всё о взломе и защите социальных сетей
Offline
Offline
Ага, спасибо. Ну если там кто ещё что знает, напишите. Так может кто-нибудь поможет с моим скриптом???
SNKillers.net - всё о взломе и защите социальных сетей
Offline
если это твой актёр - это игрок
Увы, не мой случай.
а для чего это тебе нужно
Идёт по улице группа ганстеров. Я выхватил хэндл одного из них. Требуется получить хэндлы остальных.
Offline
хммм....извини за любопытство, но зачем это тебе?)))я сильно сомневаюсь что это группы, врядли движок игры смог бы управлять всеми группами гангстеров...ну если тебе это сильно нужно, можно собрать хэндлы всех гангстеров в определённом радиусе (например 10.0) окружающих того гангстера хэндл которого у тебя есть...хотя тут ещё подумать надо как это сделать)
Offline
Так может кто-нибудь мне всё-таки поможет?
SNKillers.net - всё о взломе и защите социальных сетей
Offline
хможно собрать хэндлы всех гангстеров в определённом радиусе (например 10.0) окружающих того гангстера хэндл которого у тебя есть
Ok, тогда попробую так сделать. Спасибо.
Offline
Offline
Добрый день, скриптеры-программисты, нужна ваша помощь!
Написал я простенькую дллку для тестов, и пытаюсь вызвать её единственную функцию из клео-скрипта.
Код дллки:
Заголовочный:
namespace testfuncs { class testfuncs { public: static __declspec(dllexport) int plus(int a, int b); }; }
Исходник:
#include "testfuncs.h" #include <stdexcept> using namespace std; namespace testfuncs { int testfuncs::plus(int a, int b) { return a + b; } }
Скрипт:
// This file was decompiled using sascm.ini published by Seemann (http://sannybuilder.com/files/SASCM.rar) on 13.10.2007 {$VERSION 3.1.0027} {$CLEO .cs} thread 'dlltest' 0AA2: 0@ = load_library "CLEO\mydll.dll" // IF and SET 0AA4: 1@ = get_proc_address "plus" library 0@ // IF and SET :dll1 wait 0 if and 0AB0: 16 //шифт 0AB0: 85 //u jf @dll1 0AA7: call_function 1@ num_params 2 pop 2 4 7 3@ 0AF1: write_int 3@ to_ini_file "cleo\mydll.ini" section "mydll" key "plus" wait 50000 jump @dll1
После нажатия кнопок игра вылетает.
PS: тестирую скрипты я в сампе, это может быть причиной вылета? (Сингл у меня почему-то не работает)
PPS: в сб режим форматирования - "Как есть", так что проблема не в этом
Помогите!
Offline