Помощь в создании "Асатамы III"

Re: Помощь в создании "Асатамы III"

Engineer, вот ситуация:

Re: Как сделать?
Ошибка 123
Слишком много переменных с одинаковым хэшем!

Через 3 игровых дня начинает ругаться на эту строку.

Код:

!код добавляющий нпс на локацию
dynamic '$loc_<<X[num]>>_<<Y[num]>>_<<Z[num]>>_<<R[num]>>[] = num'

А чит в том, что символы <> недопустимы в названии переменной, согласно документации. Но я не исключаю того, что я просто мало знаю о qsp и dynamic специально для такого случая и придумали.

dmvikar
useravatar
Offline
44 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: Помощь в создании "Асатамы III"

В названии переменной не участвуют символы <>, это подвыражение для dynamic.
В указанном примере проблема в том, что слишком много разных строковых переменных имеют одинаковое значение. Похоже, автор упустил утечку, или просто забыл их подчищать. К названию переменной это не имеет никакого отношения.

Опытным путем определил, что может быть максимум 8149 переменных с одинаковым хэшем.

Код:

i=0

:jump
i+=1
dynamic '$g<<str(i)>> = "test"'
dynamic '*nl $g<<str(i)>> + "+" + "$g<<str(i)>>"'
if i<=10000: jump 'jump'
!выводит строку 8149 раз, после чего - ошибка 123

Изменено: Engineer
29.Янв.20 21:13:21
Engineer
useravatar
Offline
29 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: Помощь в создании "Асатамы III"

Engineer, по документации 50 переменных может быть с одинаковым хешем.
Я ковырял аналог этого кода с этой переменной, там не было утечки и все подчищалось, даже там, где не надо. Я выводил список образованных переменных каждый ход и они топтались в районе количества 1100-1300 (если не путаю ничего), а потом внезапный крах.
Я сейчас использовал твой код:
сделал переменную <<str(i)>><<str(i)>><<str(i)>><<str(i)>>, получил 4617 записей;
сделал переменную <<str(i)>><<str(a)>><<str(b)>><<str(c)>>, где a,b,c =rand(0,10), получил 8407 записей;
сделал rand(0,100) - 9091;
сделал rand(0,1000) - 7615.
Возможно, из всего этого и можно вывести какую-то закономерность, но главный вывод - не злоупотреблять в dynamic <<>>.

dmvikar
useravatar
Offline
44 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: Помощь в создании "Асатамы III"

Значит я перепутал, хэш действительно идет для имени переменной, но может быть одинаковым для разного, но похожего набора символов. И когда одного из вариантов полученного хэша становится больше 50 - игра выдает ошибку.
Трудно злоупотребить dynamic. Только может запутаешь себя кодом. Но вот 1100 сгенерированных переменных... конечно такой кошмар никогда не рекомендуется, с dynamic или без.
А на предыдущий мой комментарий не обращайте внимания.

Engineer
useravatar
Offline
29 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: Помощь в создании "Асатамы III"

Aleks Versus
воздвигатель башни
useravatar
Offline
1512 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Информация

Статистика форума:
 
Всего тем:
978
Всего опросов:
14
Всего сообщений:
16790682
Сообщений на этой неделе:
8
Пользователи форума:
 
Всего пользователей:
2400
Последним зарегистрировался:
Valkiriya616