GTA: Modification Area

A website for the GTA modding scene

Search
 
 

Display results as :
 


Rechercher Advanced Search

Latest topics
» Big-game starts raising Schneider's profile
Sun Mar 04, 2012 2:28 am by lavivi

» [Help] cleo created lighting
Thu Oct 14, 2010 1:03 am by findmy012

» Mission Question
Thu Oct 14, 2010 1:02 am by findmy012

» [IV] Spoiler Script
Thu Oct 14, 2010 1:02 am by findmy012

» Mission mod [help]
Sat Sep 18, 2010 5:50 pm by jayd00

» Bc7 Mod Help
Fri Aug 20, 2010 11:19 am by pengpeng

» Found a bug
Fri Dec 18, 2009 4:22 am by _CJ360_

» [IV] Novitec Rosso 599 GTB
Tue Nov 17, 2009 4:22 pm by Kotton

» Hello/Guidance Request
Mon Oct 12, 2009 6:45 am by Adler

Navigation
 Portal
 Index
 Memberlist
 Profile
 FAQ
 Search
Affiliates
image

Image

Image

Image

Image

Image

Image

Image

Image

Image

image

Image

steve-m.com

Image


----- Русский -----

Если ваш сайт содержит большую коллекцию SCM/CLEO-скриптов (больше 16), напишите на мой e-mail, и я добавлю его в список. Приветствуются скрипты, которые не встречаются на других сайтах ... Спасибо. ))))


----- English -----

If your website has a big enough collection of SCM/CLEO scripts (more than 16) notify me by e-mail
, and I will add it to the list. The unique scripts are preferable ... Thank you. ))))

Log in

I forgot my password



December 2016
MonTueWedThuFriSatSun
   1234
567891011
12131415161718
19202122232425
262728293031 

Calendar Calendar


You are not connected. Please login or register

CLEO - 'set_status_text' и 'set_timer'

View previous topic View next topic Go down  Message [Page 1 of 1]

1 CLEO - 'set_status_text' и 'set_timer' on Sat Jun 20, 2009 10:01 am




Можно ли в CLEO-скриптах использовать опкоды set_status_text и set_timer?

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

Поскольку написать альтернативу этим опкодам довольно непросто, я решил пойти другим путем. Я написал 4 функции, которые работают аналогично опкодам 03C3, 03С4, 014F, 0151, только принимают в качестве переменной - локальную переменную. Это позволяет использовать статус_текст и таймеры в CLEO-скриптах и CLEO-миссиях.

Внимание! Для корректной работы функций нужен CLEO 3 v3.0.950 и выше.

Функции работают только в GTA: SA v1.0.


Code:

:AddStatusText               
0AB1: call_scm_func @__VarToOffset 1 0@ 0@
0AB1: call_scm_func @__LabelToOffset 1 2@ 2@
0AA6: call_method 0x0044CDA0 struct 0x00BA1788 num_params 4 pop 0 ( LINE = 3@ GXT = 2@ TYPE = 1@ VARNUMBER = 0@ )
0AB2: ret 0

:RemoveStatusText
0AB1: call_scm_func @__VarToOffset 1 0@ 0@
0AA6: call_method 0x0044CE80 struct 0x00BA1788 num_params 1 pop 0 ( VARNUMBER = 0@ )
0AB2: ret 0

:SetTimer
0AB1: call_scm_func @__VarToOffset 1 0@ 0@
0AB1: call_scm_func @__LabelToOffset 1 2@ 2@
0AA6: call_method 0x0044CD50 struct 0x00BA1788 num_params 3 pop 0 ( TYPE = 1@ GXT = 2@ VARNUMBER = 0@ )
0AB2: ret 0

:StopTimer
0AB1: call_scm_func @__VarToOffset 1 0@ 0@
0AA6: call_method 0x0044CE60 struct 0x00BA1788 num_params 1 pop 0 ( VARNUMBER = 0@ )
0AB2: ret 0

:__VarToOffset
0A9F: 1@ = current_thread_pointer
0A8E: 2@ = 1@ + 0xDC // mission Flag
0A8D: 2@ = read_memory 2@ size 1 virtual_protect 0
if
    2@ == 1
then
    1@ = 0x00A48960 // mission locals
else
    1@ += 0x3C
end
0@ *= 4
005A: 1@ += 0@ // address of the local variable
1@ -= 0xA49960
0AB2: ret 1 1@

:__LabelToOffset
if
    0@ == 0
then
    0AB2: ret 1 0
end
0A9F: 1@ = current_thread_pointer
1@ += 0x10
0A8D: 1@ = read_memory 1@ size 4 virtual_protect 0 // baseIP
0062: 1@ -= 0@ // label address
1@ += 3
0AB2: ret 1 1@

:StatusText
0900: 'BB_19'
0000:


Вот эти 4 функции.

1. AddStatusText эмулирует опкод
03C4: set_status_text $BEEFYBARON_SCORE type 0 GXT 'ZER2_43'.

Пример использования:


Code:

0AB1: call_scm_func @AddStatusText 4 VARNUMBER = 33 TYPE = 0 GXT = @StatusText LINE = 3


Параметры: VARNUMBER = 33 - это номер локальной переменной, значение которой будет выведено (т.е. 33@)

TYPE = 0 - как и в 03С4 тип статуса: полоска (1) или число (0).

GXT = @StatusText - это основное отличие от опкода. Напрямую передать строку в функцию нельзя (также как и в новый поток, например). Поэтому мы передаем метку, на которой стоит опкод 0900 с нужным текстом (GXT) (в данном случае 0900: 'BB_19'). Можно добавить несколько подряд опкодов 0900, каждый со своим GXT и своей меткой, и передавать в функцию нужную метку. Надеюсь, с этим проблем не возникнет. Можно вместо метки написать 0, тогда будет выводиться только число, без текста слева.

LINE = 3 - номер строки, на которой появится статус. Если равно 0, то статус добавится к первой свободной строке.

2. RemoveStatusText эмулирует опкод 0151: remove_status_text $1924

Пример использования:


Code:

0AB1: call_scm_func @RemoveStatusText 1 VARNUMBER = 33



Параметр только один - номер локальной переменной, которая использовалась в AddStatusText.

3. SetTimer эмулирует опкод 03C3: set_timer_to $1923 type 1 GXT 'BB_19'

Пример использования:


Code:

0AB1: call_scm_func @SetTimer 3 VARNUMBER = 1 TYPE = 1 GXT = @StatusText



Параметры VARNUMBER и GXT аналогичны AddStatusText. Параметр TYPE означает вид таймера: увеличивающийся или уменьшающийся.

4. StopTimer эмулирует 014F: stop_timer $1923

Пример использования:


Code:

0AB1: call_scm_func @StopTimer 1 VARNUMBER = 1


Параметр - номер локальной переменной, которая использовалась в SetTimer.

Поскольку это лишь эмуляция настоящих опкодов, все ограничения сохраняются (1 таймер и 4 статуса).

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

Вот пример скрипта, который в течение 10 секунд показывает состояние переменной 33@ (т.е. таймера) http://cleo.sannybuilder.com/scripts/status_text.cs




View user profile http://gtamodding.com

View previous topic View next topic Back to top  Message [Page 1 of 1]

Permissions in this forum:
You cannot reply to topics in this forum