Делать так не быстрее, чем считать с 0 и проверять все возможные значения; каждая итерация будет уменьшать границы только на одну. Что еще более важно, llTransferLindenDollars ограничен скоростью до 1 в секунду, поэтому вы скорее достигнете предела, чем в любом случае найдете какой-либо полезный результат. Предполагая, что у кого-то есть L $ 20, если вы использовали сценарий Python и начинали с L $ 100 000 000, выполнение этой процедуры заняло бы более трех лет.
Итак, поскольку большинство пользователей SL не имеют L $ 50 000 000, вероятно, было бы быстрее просто считать с нуля и продолжать проверять до тех пор, пока не будет получен сбой:
integer amount;
key trans_id;
default
{
touch_start(integer total_number)
{
amount = 0;
trans_id = llTransferLindenDollars(llGetOwner(), amount);
}
transaction_result(key id, integer success, string data)
{
if (id != trans_id) return;
if (success)
{
llOwnerSay("Last amount: " + (string)amount);
llSleep(1.0); // avoid rate limiting
trans_id = llTransferLindenDollars(llGetOwner(), ++amount);
}
else if (data == "LINDENDOLLAR_INSUFFICIENTFUNDS")
{ // this is the error we care about
llOwnerSay("L$ balance: " + (string)(amount - 1));
}
else
{ // some other error
llOwnerSay("Error: " + data);
llSleep(10.0); // wait and retry
trans_id = llTransferLindenDollars(llGetOwner(), amount);
}
}
}
Это все еще невероятно медленно и практически бесполезно для тех, у кого более нескольких L $, частично для безопасности причины - скрипты, знающие баланс аккаунта, означают, что он может мгновенно опустошить весь аккаунт без ошибки. Просто не существует быстрого способа определить баланс L $ в учетной записи, если только учетная запись не является ботом, и любой используемый вами бот-сервис имеет функцию API, которая может это сделать.
Кроме того, к вашему сведению, плохая практика предшествовать пользователю - определенные функции с "ll"; Для удобства читаемости функции ll должны быть только встроенными.