ФВУО. Качаем таминг. Хочу чтоб на зверях в одном домашнем загоне на 10 голов скота качалось одновременно несколько чаров.
Есть 2 скрипта: "серверный" и клиентский. Клиентские запускаются для каждого прокачиваемого чара и ссылаются на серверный. Серверный скрипт - по сути база ИДшников и состояний зверья, в которую пишут и из которой читают клиентские скрипты.
Проблема в том, что через некоторое время (~2 круга по зверям) один из клиентских скриптов перестает писать в серверный, в результате чего все соответствующие поля массива заполняются метками второго скрипта (тестилось на примере 2.1) и для него не остается приемлемых целей,в то время как первый продолжает работать/читать нормально. Хотя на первом круге пишут и читают оба скрипта.
Client
Код
// taming group (1/2) (c) Sindoatan
// структура %arr: каждая строка массива - значения параметров одного животного
// 1 - ИД животного, 2 - индикатор занятости, 3 - индикатор последнего хозяина
set $mark A // метка авторства приручения, должна быть индивидуальна для каждого участвующего тамера
//set #bd 5 // номер потока "северного" скрипта // вещь полезная и логичная, но в пилоте еще не реализована %), поэтому заменяем в теле скрипта руками (строки отмечены МЕТКОЙ, всего строк 6) маска: set $aN %arr.#bd[#a N]
set $btnRel F6 // say+all_release в клиенте
set $btnUse F12 // LastObject/WFT/LastTarget в ассисте с UseItemType посоха
set $remember remembers
set $success accept
set $tamed already tame
set $failed fail
set $hungry hungry
set $far far away
set $skill changed
set $wait you must wait
set $cant see the target
:loop
set #a 1
while #a < 11
//set lastobjectid 1234567890 // ИД еды для себя
//send F5 // lastobject
//set lastobjectid 1234567899 // ИД зеленой палки
set $a2 %arr.5[#a 2] //обход невозможности использования массивов в if'ах // МЕТКА #bd
set $a3 %arr.5[#a 3] //обход невозможности использования массивов в if'ах // МЕТКА #bd
say MyMark><$mark IsFree><$a2 BeastMark><$a3
if ($a2 = 0) and ($a3 <> $mark) //если зверь свободен и не мы его последний хозяин
set %arr.5[#a 2] 1 // занимаем его // МЕТКА #bd
set lasttargetid %arr.5[#a 1] // МЕТКА #bd
else
goto next
end_if
set #q 0
:repeat
set #q #q +1
if #q > 45 // тамим пока не затамим, но это на всякий случай
goto next
end_if
set #i 0
send $btnUse // LastObject/WFT/LastTarget в ассисте с UseItemType посоха
wait 1000
if lastmsg already
goto next
end_if
say пЗверушка № #a, попытка № #q
while_not lastmsg $success
if (lastmsg $failed) or (#i > 3) // здесь #i вместо таймера
goto repeat
end_if
repeat 10
if (lastmsg old) or (lastmsg Loved) or (lastmsg again) or (lastmsg return)
send {Tab}
goto next
end_if
wait 200
end_repeat
if (lastmsg $wait) or (lastmsg $cant) or (lastmsg $hungry) or (lastmsg $skill) or (lastmsg $remember) or (lastmsg $tamed) or (lastmsg $far)
goto next
end_if
set #i #i +1
end_while
:next
set %arr.5[#a 3] $mark // отмечаем. что мы - последний хозяин зверя // МЕТКА #bd
set %arr.5[#a 2] 0 // освобождаем зверя // МЕТКА #bd
send $btnRel //say all release
set #a #a +1
end_while
goto loop
Server
Код
// taming group (2/2) (c) by Sindoatan
// структура %arr: каждая строка массива - значения параметров одного животного
// 1 - ИД животного, 2 - индикатор занятости, 3 - индикатор последнего хозяина
// и заставь наконец себя выяснить на кой мы качаем при таминге скотинке спиристпик посохом!!!
set %arr[1 1] 1302049
set %arr[2 1] 1313566
set %arr[3 1] 35768
set %arr[4 1] 1309509
set %arr[5 1] 1242385
set %arr[6 1] 1203135
set %arr[7 1] 1320501
set %arr[8 1] 16166
set %arr[9 1] 31435
set %arr[10 1] 1319811
set %arr[1 2] 0
set %arr[2 2] 0
set %arr[3 2] 0
set %arr[4 2] 0
set %arr[5 2] 0
set %arr[6 2] 0
set %arr[7 2] 0
set %arr[8 2] 0
set %arr[9 2] 0
set %arr[10 2] 0
set %arr[1 3] 0
set %arr[2 3] 0
set %arr[3 3] 0
set %arr[4 3] 0
set %arr[5 3] 0
set %arr[6 3] 0
set %arr[7 3] 0
set %arr[8 3] 0
set %arr[9 3] 0
set %arr[10 3] 0
while 1 = 1
wait 5m
end_while
Подскажите, плиз, в чем может быть ошибка и как ее/их исправить? Или киньте ссылкой, если уже обсуждалось, не нашел.
Я занят.. другой, более важной ерундой
May the Force be with you..