Вверх ↑
Ответов: 5446
Рейтинг: 323
#1: 2013-01-01 23:59:43 ЛС | профиль | цитата
[offtop]Я немного пьяный, поэтому сильно занудный.[/offtop]
Номер ноль: Схема местами (сам ведь знаешь, какими) представляет собой "ядерный писец" ((с) народ). "В грязном коде баги водятся, и чем грязнее код - тем толще баги".

Номер раз: Зачем связь onStop -> doStop? Это что за онанизм, простите мой французский?

Номер два: Для кого nesco запилил компонент EnvVars?
Вот эта колбаса
Add(Dir,3732171,64,105)
{
Point(SendToDir)
}
Add(StrCat,9559343,64,161)
{
Str1="!"
link(onStrCat,1304200:doSearch,[])
link(Str2,3732171:DesktopDir,[])
}
Add(BlockFind,1304200,106,161)
{
IncludeBlock=1
Delete=0
StartBlock="!"
EndBlock="Desktop"
link(onSearch,2158649:doString,[])
link(Text,9559343:Result,[(112,156)(92,156)(92,200)(70,200)])
}
Add(FormatStr,2158649,147,161)
{
DataCount=1
Mask="%1appdataRoaming.alexcraft"
Point(FString)
}
может быть заменена на вот такую аккуратную связку:
Add(EnvVars,13481656,966,322)
{
Name="AppData"
link(onExpand,6267438:doStrCat,[])
}
Add(StrCat,6267438,1029,322)
{
Str2="\.alexcraft\"
}
И кстати, определять этот путь можно один раз при старте программы, а дальше запихать его в GlobalVar. Есть такое правило в талмудах на тему "как стать настоящим программистом": DNR - Do Not Repeat, не повторяйся. Мои самые "любимые" баги (и поверь мне, я готов был сгореть на месте от стыда, когда меня носом в них тыкали!) возникали именно тогда, когда я этому правилу не следовал.

Номер три: Ещё раз DNR (каламбур, однако!). Повторять должен не ты, а твой комп: он не ошибается. Почувству разницу:
Add(MultiElement,16049185,1050,308)
{
}
BEGIN_SDK
Add(EditMulti,10413824,49,371)
{
EventCount=1
WorkCount=1
Width=538
link(doWork1,15214164:doEvent1,[(80,377)(80,510)])
}
Add(DirTools,13541774,427,455)
{
NoConfirmation=1
Point(doExists)
link(onOK,12907621:doCase,[])
link(Source,139965:Result,[(433,443)(370,443)(370,520)(307,520)])
}
Add(StrCat,139965,301,476)
{
Str2="bin"
link(onStrCat,13541774:doExists,[])
link(Str1,2863309:Var,[])
}
Add(GlobalVar,2863309,301,448)
{
Name="sysdir"
}
Add(Hub,15214164,91,504)
{
link(onEvent1,11307181:doEnum,[(175,510)(175,482)])
link(onEvent2,10413824:onEvent1,[(546,517)(546,377)])
}
Add(StrList,12526498,231,399)
{
Strings=#3:bin|6:config|8:coremods|4:mods|
}
Add(ArrayEnum,11307181,245,476)
{
link(onItem,139965:doStrCat,[])
link(Array,12526498:Array,[])
}
Add(Case,12907621,483,455)
{
Value=Integer(0)
link(onNextCase,13541774:doDelete,[(526,461)(526,435)(415,435)(415,475)])
}
END_SDK

Номер четыре: я уверен, что использовать StrList для чтения и записи бинарной информации - это плохая идея. Используй связку
Add(FileStream,11110613,280,49)
{
link(onLoad,7879394:doConvert,[])
}
Add(StreamConvertor,7879394,329,49)
{
Mode=6
}
и просмотри примеры в Wiki: Примеры, Примеры 2, Примеры 3.

Номер пять: Правильно "Обнаружено", а не "Обнoружено". Спасибо хоть, что "пароль", а не "пороль"

Номер шесть: почему-то скрипт обновлений выдаёт ответ в два приёма (206 Partial Content с начальной кавычкой, затем 200 OK с "{ret: punt}"), это (по всей видимости) сбивает с толку HTTP_Get.

Пока хватит. Как это исправишь - выкладывай обновлённую схему, продолжим разговор.
карма: 1

3
Голосовали:Alex_P, KisL()R()[), ashkalov