[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 94 из 125«129293949596124125»
Форум » Игры серии GTA » GTA San Andreas » Вопросы по скриптингу Sanny Builder и заказы (Вы можете получить ответы на вопросы по SB и сделать заказ)
Вопросы по скриптингу Sanny Builder и заказы
wmysterio
Администраторы
Скриптер
22.11.11 21:52
Offline
Если у вас возник вопрос по скриптингу Sanny Builder, обращайтесь! Мы постараемся решить вашу проблему wink Это ещё не значит, что все прям бросятся решать во чтобы то не стало, но ответ вы сможете вы получить как вариант решения или как невозможность или сложность решения.
УВАЖАЕМЫЕ ПОЛЬЗОВАТЕЛИ! ПРОСЬБА КОД СКРИПТОВ ПОМЕЩАТЬ В КОНСТРУКЦИЮ КОДА:

или

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

Внимание! От этого момента тема предназначена ещё и для заказов скриптов и миссий. Я это сделал по одной причине - пользователи постоянно путают/или не ищут темы и приводят заказ здесь. Теперь этой путаницы не будет. Здесь можно проводить заказы, но Вы должны указать в начале поста текст "НА ЗАКАЗ". Постарайтесь как можно детальнее объяснить суть скрипта.
Прикрепления: 0248203.png(1Kb) · 9085525.png(0Kb)

BoPoH
Друзья
14.04.14 18:53
Offline
Цитата Slivkin-Sergey ()
Иными словами: равен ли этот код
Если в первый код добавить в начало строку

Код
v$STRING = 'STR'
 тогда будет эквивалентен. И, да, переменной v$var можно присвоить только строки с двойными кавычками. А переменным вида s$var - только с одинарными кавычками. По сути, разницы никакой, но SB их различает - для присваивания s-переменным и v-переменным используются разные опкоды.
Цитата Slivkin-Sergey ()
Хм-м... Здесь мне не очень ясно. С одной стороны, это и есть имя строки, а с другой, в переменной строка и хранится.
Про строки у меня ничего не было написано. Я объяснил, что есть GXT-записи, у каждой из них есть своё имя (обычно длиной 7 символов). Так вот, в переменную ты должен записать имя GXT-записи (а не саму запись, т.е. текст), чтобы потом её использовать в опкодах, где идёт работа с GXT.

Если ты до сих пор не понял, то давай разберём пример, который ты приводил выше.
Код
08D4: 8@ = create_panel_with_title 'HEADER' position 29.0 170.0 width 180.0 columns 2 interactive 1 background 1 alignment 0   
08DB: set_panel 8@ column 0 header 'HEADER' data v$array[0] v$array[1] v$array[2] v$array[3] v$array[4] v$array[5] v$array[6] 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY'
08DB: set_panel 8@ column 1 header 'HEADER2' data v$arrayPrices[0] v$arrayPrices[1] v$arrayPrices[2] v$arrayPrices[3] v$arrayPrices[4] v$arrayPrices[5] v$arrayPrices[6] 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY'
 Я изменил названия глобальных переменных, чтобы код не выглядел столь громоздким. Первая ошибка, которую ты допустил - это использование простых строк вместо GXT-записей (по крайней мере, я так тебя понял).
Во-первых, тут можно было обойтись вообще без использования строковых переменных (тем более глобальных, если, конечно, речь не идёт о main.scm).
Во-вторых, если уж приспичило использовать переменные, то ты сперва должен их заполнить соответствующими значениями - именами GXT-записей. Сами GXT-записи должны быть добавлены заранее, и массив строк тоже должен быть инициализирован заранее.

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

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

Код
0ADF: add_dynamic_GXT_entry "MYTOV0" text "Tovar0"
0ADF: add_dynamic_GXT_entry "MYTOV1" text "Tovar1"
0ADF: add_dynamic_GXT_entry "MYTOV2" text "Tovar2"
0ADF: add_dynamic_GXT_entry "MYTOV3" text "Tovar3"
0ADF: add_dynamic_GXT_entry "MYTOV4" text "Tovar4"
0ADF: add_dynamic_GXT_entry "MYTOV5" text "Tovar5"
0ADF: add_dynamic_GXT_entry "MYTOV6" text "Tovar6"
v$array[0] = "MYTOV0" // Записываем в массив имена GXT-записей
v$array[1] = "MYTOV1" // Если не использовать переменные, то
v$array[2] = "MYTOV2" // при создании панели указываем сразу имена GXT-записей
v$array[3] = "MYTOV3" // вместо переменных
v$array[4] = "MYTOV4"
v$array[5] = "MYTOV5"
v$array[6] = "MYTOV6"
$arrayPrices[0] = 100 // Записываем в массив стоимость товаров
$arrayPrices[1] = 200
$arrayPrices[2] = 300
$arrayPrices[3] = 400
$arrayPrices[4] = 500
$arrayPrices[5] = 600
$arrayPrices[6] = 700
08D4: 8@ = create_panel_with_title 'HEADER' position 29.0 170.0 width 180.0 columns 2 interactive 1 background 1 alignment 0   
08DB: set_panel 8@ column 0 header 'HEADER' data v$array[0] v$array[1] v$array[2] v$array[3] v$array[4] v$array[5] v$array[6] 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY'
08EE: set_panel 8@ column 1 row 0 text_1number GXT 'DOLLAR' number $arrayPrices[0]
08EE: set_panel 8@ column 1 row 1 text_1number GXT 'DOLLAR' number $arrayPrices[1]
08EE: set_panel 8@ column 1 row 2 text_1number GXT 'DOLLAR' number $arrayPrices[2]
08EE: set_panel 8@ column 1 row 3 text_1number GXT 'DOLLAR' number $arrayPrices[3]
08EE: set_panel 8@ column 1 row 4 text_1number GXT 'DOLLAR' number $arrayPrices[4]
08EE: set_panel 8@ column 1 row 5 text_1number GXT 'DOLLAR' number $arrayPrices[5]
08EE: set_panel 8@ column 1 row 6 text_1number GXT 'DOLLAR' number $arrayPrices[6]

Slivkin-Sergey
Модераторы
14.04.14 19:09
Offline
Да-да, я уже понял свою ошибку после того, как нашёл пресловутый 'DOLLAR' в оригинальном майне.

А вот что насчёт задержки?

BoPoH
Друзья
14.04.14 20:30
Offline
Цитата Slivkin-Sergey ()
А вот что насчёт задержки?
Почему бы тебе не попробовать использовать таймер (32@ или 33@) вместо wait?

Slivkin-Sergey
Модераторы
15.04.14 05:31
Offline
Цитата BoPoH ()
Почему бы тебе не попробовать использовать таймер (32@ или 33@) вместо wait?

В общем, задача такая: игрок указывает количество дней Н, и нужно, чтобы Н раз прошло по 24 игровых часа.

А о работе 32@ и 33@ я ничего не знаю, обычные переменные (хотя всё же их не использую из-за особенности).

BoPoH
Друзья
15.04.14 08:36
Offline
Цитата Slivkin-Sergey ()
В общем, задача такая: игрок указывает количество дней Н, и нужно, чтобы Н раз прошло по 24 игровых часа.
Записываешь в какую-нибудь переменную нужное количество милисекунд, обнуляешь 32@ (или 33@) и ждёшь, пока она не достигнет нужного значения. Эти переменные являются своеобразными таймерами - их значение увеличивается с течением времени. Проще говоря, если ты обнулишь такую переменную, потом подождёшь 1000 мс, то в этой переменной будет 1000.

Slivkin-Sergey
Модераторы
15.04.14 14:50
Offline
Вот так вот:
Код
for 17@ = 0 to 13@ step 1 // для счёта количества дней
33@ = 0
repeat
wait 0
until 33@ >= 1440000
end

Всё равно ничего не происходит

d13m1
Пользователи
15.04.14 20:49
Offline
Цитата Slivkin-Sergey ()
игрок указывает количество дней Н, и нужно, чтобы Н раз прошло по 24 игровых часа.
почему бы просто не вычислить необходимую дату?
0835: get_month_day_to 0@ get_month_to 1@
00BF: 0@ = current_time_hours, 1@ = current_time_minutes

BoPoH
Друзья
15.04.14 23:30
Offline
Цитата Slivkin-Sergey ()
Всё равно ничего не происходит
1) Уверен, что присвоил переменной 13@ нужное тебе значение?
2) Как ты определяешь, что "ничего не происходит"? Что должно произойти?
Лично у меня этот код полностью работает, в чём я, собственно говоря, и не сомневался.

Slivkin-Sergey
Модераторы
16.04.14 14:43
Offline
Цитата d13m1 ()
почему бы просто не вычислить необходимую дату?

Если бы всё было так просто... Попробуй учесть возможность инициализации в конце игрового месяца.
Цитата BoPoH ()
1) Уверен, что присвоил переменной 13@ нужное тебе значение?

Код
13@ = 1
0085: 13@ = 9@ // (int)

13@ = 1 я написал в процессе поиска ошибки, так-то там всё по-другому.

Добавлено (16.04.14, 12:43)
---------------------------------------------
Хм-м, после определённых манипуляций стало ясно, что даже при 13@ = 1 цикл имеет больше одной итерации (переменная сбрасывается и идёт отсчёт заново).


BoPoH
Друзья
16.04.14 16:47
Offline
Этот код к чему вообще?

Код
13@ = 1  
0085: 13@ = 9@ // (int)
Если ты так сделаешь, то переменная 13@ в конечном итоге примет значение, содержащееся в переменной 9@. Ты бы лучше полный код скрипта привёл, тогда было бы проще определить ошибку.

Slivkin-Sergey
Модераторы
16.04.14 18:11
Offline
Цитата BoPoH ()
Если ты так сделаешь, то переменная 13@ в конечном итоге примет значение, содержащееся в переменной 9@. Ты бы лучше полный код скрипта привёл, тогда было бы проще определить ошибку.

Да-а, моя невнимательность не знает границ. Там просто: 13@ = 1. А 13@ = 9@ - так и нужно, я её просто на время дебага закомментировал.

BoPoH
Друзья
16.04.14 18:21
Offline
Цитата Slivkin-Sergey ()
Да-а, моя невнимательность не знает границ.
Так вопрос решён?

Slivkin-Sergey
Модераторы
16.04.14 19:11
Offline
Цитата BoPoH ()
Так вопрос решён?

Не совсем. Я имел ввиду, что разместил неправильный код в посте. На самом деле просто 13@ = 1.

BoPoH
Друзья
16.04.14 20:20
Offline
Цитата Slivkin-Sergey ()
Не совсем.
Тогда выложи весь код, так будет проще понять в чём ошибка.

Slivkin-Sergey
Модераторы
20.04.14 16:55
Offline
Ладно, пускай пылится пока на диске. Вот что интересует теперь:
Код
0ADF: add_dynamic_GXT_entry 'M1S2' text "~z~~b~C¦њўe®co®~w~: O¦ћњ¤®o, Po—. Њoeџ›aќ ў ѓ›e˜˜epco®, p¬љoЇ c ўeћoЈapkoЇ, џљa®њe cћeўa o¦ c¦poќkњ, ®e ЈpoЈyc¦њҐ©."

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

wmysterio
Администраторы
Скриптер
22.04.14 17:23
Offline
Цитата Slivkin-Sergey ()
Вот я и подумал, может, есть какое-то ограничение на длину строки?
Опкод выглядит так:
Код
0ADF: "_TEST" "Test string"
Ты же его объявляешь как:
Код
0ADF: '_TEST' "Test string"
Как показало моё наблюдение ошибка возникает именно тогда, когда кавычки не того формата задавать. Попробуй так:
Код
0ADF: add_dynamic_GXT_entry "M1S2" text "~z~~b~C¦њўe®co®~w~: O¦ћњ¤®o, Po—.  Њoeџ›aќ ў ѓ›e˜˜epco®, p¬љoЇ c ўeћoЈapkoЇ, џљa®њe cћeўa o¦ c¦poќkњ, ®e  ЈpoЈyc¦њҐ©."
А в опкоде, где выводить текст нужно указывать одинарные кавычки:
Код
03E5: show_text_box 'M1S2'

Slivkin-Sergey
Модераторы
22.04.14 18:05
Offline
Цитата wmysterio ()
Ты же его объявляешь как:

Но ведь я и все остальные так объявляю, и всё работает нормально.

BoPoH
Друзья
23.04.14 00:42
Offline
Цитата Slivkin-Sergey ()
Но ведь я и все остальные так объявляю, и всё работает нормально.
Может попробовать укоротить и проверить? Почему обязательно тупо ждать, когда кто-нибудь решит твою проблему вместо тебя? Пробуй сам, это ведь не так уж сложно wink
Можно попробовать убрать в начале строки теги ~z~~b~. Да много чего можно сделать, нужно просто пробовать.
Отредактировал BoPoH - Среда, 23.04.14, 00:43

Slivkin-Sergey
Модераторы
23.04.14 08:25
Offline
Цитата BoPoH ()
Может попробовать укоротить и проверить? Почему обязательно тупо ждать, когда кто-нибудь решит твою проблему вместо тебя? Пробуй сам, это ведь не так уж сложно

Ты молодец, конечно, наезжать на кого-то просто так. Я убирал тег ~z~ и последнее предложение - запись отображалась, почему и спрашиваю.

d13m1
Пользователи
23.04.14 19:37
Offline
~z~  -subtitle (doesn't shown when the Subtitles option is off)
menu->options->display->subtitles=on i butet tebe schast'e
vsia infa tut http://gta.wikia.com/GXT

Форум » Игры серии GTA » GTA San Andreas » Вопросы по скриптингу Sanny Builder и заказы (Вы можете получить ответы на вопросы по SB и сделать заказ)
Страница 94 из 125«129293949596124125»
Поиск: