#2526 03-10-2010 19:46

mr.Andrei
Registered: 03-07-2010
Posts: 38
Website

Re: Один вопрос

И ещё вопрос. Хотел сделать скрипт, что бы менять траффик на дорогах:

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

#2527 03-10-2010 19:59

Den_spb
From: Ленинград
Registered: 23-11-2008
Posts: 941
Website

Re: Один вопрос

Число надо выводить на экран постоянно, команда wait должна быть только одна.
Если это клео, то необходимо заменить end_thread на 0A93.

Offline

#2528 04-10-2010 17:45

mr.Andrei
Registered: 03-07-2010
Posts: 38
Website

Re: Один вопрос

Скажите, а в каких случаях после начала лэйбла wait 0 не ставится?

или просто, если можете, подправьте этот скрипт, а то я с ним так уже измучался, и всё-равно не работает sad((

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

#2529 04-10-2010 18:00

~AquaZ~
Registered: 01-03-2010
Posts: 726

Re: Один вопрос

В большинстве. wait ставится если постоянно проверяется условие и происходит прыжок на начало лэйбэла.

Offline

#2530 04-10-2010 18:38

Sanchez
Registered: 18-08-2006
Posts: 280

Re: Один вопрос

@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

#2531 04-10-2010 18:57

mr.Andrei
Registered: 03-07-2010
Posts: 38
Website

Re: Один вопрос

Ага, ну я попробовал скомпилировать скрипт, и когда я нажимаю на F4, CJ вообще оказывается на дороге, а текст-бокса сверху всё-равно нет cry или я до чегото не доезжаю crazy


SNKillers.net - всё о взломе и защите социальных сетей

Offline

#2532 04-10-2010 19:44

Sanchez
Registered: 18-08-2006
Posts: 280

Re: Один вопрос

@mr.Andrei - может конфликтует с другими скриптами?

Offline

#2533 04-10-2010 21:34

Den_spb
From: Ленинград
Registered: 23-11-2008
Posts: 941
Website

Re: Один вопрос

Скажите, а в каких случаях после начала лэйбла 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

#2534 05-10-2010 00:14

listener
From: Vice City
Registered: 09-11-2006
Posts: 616
Website

Re: Один вопрос

что касается wait 0... Расскажу-ка я маленькую сказку на ночь.

Давным-давно, когда для программирования достаточно было девятивольтовой батарейки и твердой руки, вытесняющей многозадачности не было. Задачи долны были жить в мире и согласии, и уступать друг-другу процессор. Поработал сам - дай поработать другим. Для этого существовали специальные команды и функции, например Yield. А программы недружелюбные, другим мешавшие, процессора не дававшие - прерывались пользователем перезагрузкой страшною и больше не запускались.
Но, были случаи, когда ровный бег команд прерывался принудительно - системными функциями, на системные же нужды. Скажет задача printf - тут-то ее и остановят. Подожди, скажут, немного - дай системе что-нибудь написать.

Годы шли, и все больше систем задачи переключало самомстоятельно, контекстами щелкая. Росла их сложность недетская - а вдруг какой задаче действительно переключаться нельзя, вдруг она что делает важное, непрерываемое. Так и множились семафоры и мьютексы, эвенты и критические секции...

А если вдруг кому надо создать систему простенькую, скриптовую, задачи в которой все добрососедские и правильные, то не нужна ему синхронизация страшная, нужно только уступить процессор когда надобно. Ввод и вывод нынче-то весь асинхронный, с очередями простыми и приоритетными - отправил запросов в очередь и пусть они себе выполняются. Сначала другие задачи скриптовые, потом стириминг дисковый, потом рендеринг, а как выведется кадр на экран, тут-то управление к скриптам и вернется, а там и до нашей задачи ожидающей выполнение снова дойдет...
Говорит задача, что больше делать ей нечего, тут и другие задачи начинают работать. Сначала

Offline

#2535 05-10-2010 07:57

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

Re: Один вопрос

обрезалось, похоже...всё равно, wait 0 нужен при отрисовке интерфейса, иначе моргает всё(( а в остальных случаях можно и 50 поставить


GIMS developer

Offline

#2536 05-10-2010 09:54

mr.Andrei
Registered: 03-07-2010
Posts: 38
Website

Re: Один вопрос

@Sanchez

А у тебя скрипт нормально работал???

@всем_остальным

Так можете просто объяснить, в чём у меня ошибка в скрипте, а то игра то вылетает, то текст-бокса нет... Хоть убейте, всё равно не получается, хотя не надо, это уже лишнее rolleyes

ЗЫ: Маленький вопросик, в каких случаях можно не начинать поток


SNKillers.net - всё о взломе и защите социальных сетей

Offline

#2537 05-10-2010 11:37

BoPoH
From: Каушаны
Registered: 21-02-2009
Posts: 77

Re: Один вопрос

mr.Andrei wrote:

ЗЫ: Маленький вопросик, в каких случаях можно не начинать поток

Поток или лэйбл? Если лэйбл, то тогда когда ты не будешь ставить на него переходы, или это не зацикленная проверка.


userbar.png

Offline

#2538 05-10-2010 11:54

mr.Andrei
Registered: 03-07-2010
Posts: 38
Website

Re: Один вопрос

именно поток


SNKillers.net - всё о взломе и защите социальных сетей

Offline

#2539 05-10-2010 13:27

CraZZZy-GameRRR
From: Москва
Registered: 11-08-2009
Posts: 97
Website

Re: Один вопрос

BoPoH wrote:

а у тебя несколько групп?

Да.

BoPoH wrote:

если ты знаешь хэндлы всех групп, можно сделать несколько проверок опкодом

06EE:   actor 263@ in_group 260@

Да вот проблема в том, что хэндлы мне как раз и не известны. А нельзя их как-нибудь узнать, через память, например?

Offline

#2540 05-10-2010 15:10

BoPoH
From: Каушаны
Registered: 21-02-2009
Posts: 77

Re: Один вопрос

CraZZZy-GameRRR wrote:

Да вот проблема в том, что хэндлы мне как раз и не известны. А нельзя их как-нибудь узнать, через память, например?

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

07AF: $PLAYER_GROUP = player $PLAYER_CHAR group

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

mr.Andrei wrote:

именно поток

что-то я не очень понял, что значит не начинать новый поток....может я ошибаюсь, но возможно ты хочешь несколько потоков соединить в один?


userbar.png

Offline

#2541 05-10-2010 15:37

mr.Andrei
Registered: 03-07-2010
Posts: 38
Website

Re: Один вопрос

в смысле thread "что-то там" в начале скрипта не пишется


SNKillers.net - всё о взломе и защите социальных сетей

Offline

#2542 05-10-2010 16:04

BoPoH
From: Каушаны
Registered: 21-02-2009
Posts: 77

Re: Один вопрос

mr.Andrei wrote:

в смысле thread "что-то там" в начале скрипта не пишется

это делается для того чтобы при декомплировании не получались метки NONAME_10, а получались метки что-то_там_10. Ну может есть и другое применение этого, но я заметил только это...


userbar.png

Offline

#2543 05-10-2010 17:14

mr.Andrei
Registered: 03-07-2010
Posts: 38
Website

Re: Один вопрос

Ага, спасибо. Ну если там кто ещё что знает, напишите. Так может кто-нибудь поможет с моим скриптом???


SNKillers.net - всё о взломе и защите социальных сетей

Offline

#2544 05-10-2010 19:02

CraZZZy-GameRRR
From: Москва
Registered: 11-08-2009
Posts: 97
Website

Re: Один вопрос

BoPoH wrote:

если это твой актёр - это игрок

Увы, не мой случай.

BoPoH wrote:

а для чего это тебе нужно

Идёт по улице группа ганстеров. Я выхватил хэндл одного из них. Требуется получить хэндлы остальных.

Offline

#2545 06-10-2010 13:41

BoPoH
From: Каушаны
Registered: 21-02-2009
Posts: 77

Re: Один вопрос

хммм....извини за любопытство, но зачем это тебе?)))я сильно сомневаюсь что это группы, врядли движок игры смог бы управлять всеми группами гангстеров...ну если тебе это сильно нужно, можно собрать хэндлы всех гангстеров в определённом радиусе (например 10.0) окружающих того гангстера хэндл которого у тебя есть...хотя тут ещё подумать надо как это сделать)


userbar.png

Offline

#2546 06-10-2010 13:53

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

Re: Один вопрос

ну, если получил хендл группы...

092B: 8@ = group $PLAYER_GROUP member 6@
07F6: get_group 260@ number_of_leaders_to 262@ number_of_members_to 261@

GIMS developer

Offline

#2547 06-10-2010 15:49

mr.Andrei
Registered: 03-07-2010
Posts: 38
Website

Re: Один вопрос

Так может кто-нибудь мне всё-таки поможет?


SNKillers.net - всё о взломе и защите социальных сетей

Offline

#2548 06-10-2010 16:00

CraZZZy-GameRRR
From: Москва
Registered: 11-08-2009
Posts: 97
Website

Re: Один вопрос

BoPoH wrote:

хможно собрать хэндлы всех гангстеров в определённом радиусе (например 10.0) окружающих того гангстера хэндл которого у тебя есть

Ok, тогда попробую так сделать. Спасибо.

Offline

#2549 06-10-2010 17:34

BoPoH
From: Каушаны
Registered: 21-02-2009
Posts: 77

Re: Один вопрос

3Doomer wrote:

ну, если получил хендл группы...

092B: 8@ = group $PLAYER_GROUP member 6@
07F6: get_group 260@ number_of_leaders_to 262@ number_of_members_to 261@

я об этом уже говорил...


userbar.png

Offline

#2550 07-10-2010 12:15

Wire
From: Днепр
Registered: 19-08-2009
Posts: 56

Re: Один вопрос

Добрый день, скриптеры-программисты, нужна ваша помощь!
Написал я простенькую дллку для тестов, и пытаюсь вызвать её единственную функцию из клео-скрипта.
Код дллки:

Заголовочный:

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: в сб режим форматирования - "Как есть", так что проблема не в этом

Помогите! crazy

Offline

Board footer

Powered by FluxBB