Yoko

All sides of Injection
It is currently 2025-11-11 04:03:23

All times are UTC+02:00




Post new topic  Reply to topic  [ 23 posts ]  Go to page 1 2 Next
Author Message
PostPosted: 2006-04-16 21:39:50 
Offline
User avatar

Joined: 2005-07-17 15:30:52
Posts: 308
Location: www.drw.ru
Вобщем тк во всех скриптах goto выходит за пределы оборотов, что вызывает глюки, как написал йоко, написал новй скрипт, добавил его с остальным, а в нем все прально но из за непрального использования готу, глючат другие, подскажите че нить дельное плз, в основном готу я использую на проверку физла при касте.


Top
   
 Post subject:
PostPosted: 2006-04-16 21:55:01 
Offline
Junior Expert
User avatar

Joined: 2004-06-24 22:08:56
Posts: 3220
Переписывай все скрипты.

Пример с GoTo
Code:
sub main()
:start
if uo.injournal("Fizzle") then
goto Medit
endif
if uo.injournal("Successfully") then
goto Success
endif
:Cast
uo.deletejournal()
uo.cast("Magic Arrow","self")
wait(3000)
goto start
:Medit
uo.useskill("Meditation")
wait(5000)
goto Cast
:Success
uo.print("Magic Arrow successfully casted to self")
endsub


Пример без goto:
Code:
sub main()
repeat
if uo.injournal("Fizzle") then
uo.useskill("Meditation")
wait(5000)
endif
uo.deletejournal()
uo.cast("Magic Arrow","self")
wait(3000)
until not uo.injournal("Successfully")
uo.print("Magic Arrow successfully casted to self")
endsub


Top
   
 Post subject:
PostPosted: 2006-04-16 22:37:23 
Offline
User avatar

Joined: 2005-07-17 15:30:52
Posts: 308
Location: www.drw.ru
Ща на ночь глядя мне что то не думается никак, у меня что то вроде, после каста, если физл, он переходит на опять првоерку маны и каст, мне интересна сама технолгия замены, тк имхо вещь оч удобная, но глючит, зарание благодарю.


Top
   
 Post subject:
PostPosted: 2006-04-17 00:12:27 
Offline
Expert!
User avatar

Joined: 2006-02-25 21:48:38
Posts: 1032
Sanch wrote:
Ща на ночь глядя мне что то не думается никак, у меня что то вроде, после каста, если физл, он переходит на опять првоерку маны и каст, мне интересна сама технолгия замены, тк имхо вещь оч удобная, но глючит, зарание благодарю.


-=...ЫЫЫ...=-

Вобщем совет простой: просто навсегда забудь про goto и пиши все скрипты без него... поверь, это не сложно до всего самому догадатся...
{
Quote:
использование циклов и процедурное программирование полностью исключают необходимость использования команды goto
}


Top
   
 Post subject:
PostPosted: 2006-04-17 00:14:01 
Offline
Expert!
User avatar

Joined: 2006-02-25 21:48:38
Posts: 1032
Sanch wrote:
...имхо вещь оч удобная...

- ГЛУПОСТЬ, не говори это никому... просто засмеют :)


Top
   
 Post subject:
PostPosted: 2006-04-17 01:06:46 
Offline
User avatar

Joined: 2005-01-13 07:20:54
Posts: 528
у тебя стоит метка 1 ТУТ
скрипт
метка 2 ТУТ
скрипт
условие да на 2
условие да то на 1
(условие ,да -2 нет -1 )

как сделать цикл ...

while условие 1 {
..
while условие 2 {
..
}
}


=========
с 1 меткой

МЕТКА ТУТ
...
условие ДА - метка

while условие {
..
}

либо

repeat
..
until условие


Top
   
 Post subject:
PostPosted: 2006-04-17 08:27:56 
Offline
Expert!

Joined: 2004-04-03 17:36:29
Posts: 2544
Location: Saint-Petersburg
Der wrote:
Sanch wrote:
...имхо вещь оч удобная...

- ГЛУПОСТЬ, не говори это никому... просто засмеют :)


Глупость не признавать удобства гоуту. Если бы он был не нужен - его не было бы в языке. При этом он есть во всех языках программирования. Другое дело - его неудобство для структурного программирования. Для чтения кода написанного скрипта. Для анализа логики этого скрипта. И т. д.

Именно поэтому гоуту стараются не использовать когда это возможно. Но если замена гоуту равнозначна введению сложной громоздкой структуры других операторов (иногда так бывает) - лучше использовать гоуту. Я думаю, примерно в 3-5% моих скриптов иногда используется гоуту, счас точно не помню, никогда не запоминал этого.

Гоуту можно использовать без опаски, соблюдая парочку несложных правил:
1. Не выходить по гоуту из функций и процедур наружу.
2. Не выходить из циклов (то есть while, repeat, for) за их пределы


Top
   
 Post subject:
PostPosted: 2006-04-17 08:44:23 
Offline
User avatar

Joined: 2005-07-17 15:30:52
Posts: 308
Location: www.drw.ru
Quote:
1. Не выходить по гоуту из функций и процедур наружу.
2. Не выходить из циклов (то есть while, repeat, for) за их пределы


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


Top
   
 Post subject:
PostPosted: 2006-04-17 22:09:29 
Offline
Expert!
User avatar

Joined: 2006-02-25 21:48:38
Posts: 1032
Харошь гнать :)
Не видел я в своей жизни еще таких ситуаций, гдеб вместо гоуту пришлось бы использовать какие-то сверхсложные условия...

А гоуту всегда можно заменить (без каких-либо сложностей) , если правильно пользоватся процедурами...


Top
   
 Post subject:
PostPosted: 2006-04-17 22:11:29 
Offline
Expert!
User avatar

Joined: 2006-02-25 21:48:38
Posts: 1032
Sanch wrote:
Quote:
1. Не выходить по гоуту из функций и процедур наружу.
2. Не выходить из циклов (то есть while, repeat, for) за их пределы


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


А ты не лепи в циклы по многу действий... используй процедуры...
Разделяй алгоритм на блоки... Кароч, харошь гнать! ГОуТУ в отстой...


Top
   
 Post subject:
PostPosted: 2006-04-17 22:32:04 
Offline
Expert!
User avatar

Joined: 2005-05-04 14:05:19
Posts: 2580
Location: Москва
Раздвоение личности?


Top
   
 Post subject:
PostPosted: 2006-04-17 22:50:25 
Offline
Expert!

Joined: 2004-04-03 17:36:29
Posts: 2544
Location: Saint-Petersburg
Der wrote:
Харошь гнать :)
Не видел я в своей жизни еще таких ситуаций, гдеб вместо гоуту пришлось бы использовать какие-то сверхсложные условия...


Мало значит ты видел вообще ситуаций... Я с головы придумывать не буду, но подобные ситуации бывают. Железно. И вообще: чтобы оценивать что есть гоуту для скрипта, надо почитать как скриптовый модуль работает... Не знаю, есть ли у тебя такой файлик, но вот цитата:

Quote:
Идея парсера

Собственно заключается в том, чтобы использовать Bison по максимуму. Единственное ограничение – Бизон рассчитан на написание компиляторов. То есть таких программ, в которых переданный скрипт просматривается целиком и притом всего один раз. У меня же интерпретатор. А в интерпретаторе, как известно, части скрипта могут вообще не выполняться (например, тело IF) или выполняться несколько раз (в случае цикла). Как я из этого выкручиваюсь?
Тупо. Бизон генерирует разборщик грамматики yyparse, который зависит от внешней функции yylex, сообщающей ему, какое именно слово требуется разобрать в дальнейшем. Так я в функции yylex вру что, например, в случае ложного условия IF тело до ENDIF пустое, а в случае цикла FOR a=1 to 10, тело цикла повторяется 10 раз.
Правда в этом случае пришлось функцию yylex сделать слишком «интеллектуальной»: она сама определяет, когда надо убрать строки, а когда наоборот. К счастью «добавление» лишних строк осуществляется простой установкой внутреннего указателя ScriptPos в соответствующую позицию (кстати, таким же образом реализован GoTo). А «удаление» строк сделано функциями SkipToEndIf, SkipToCR, SkipToElseOrEndif, SkipToWend и т.д. Их назначение ясно из названия.
Комментарии по тексту парсера находятся в myparser.h, по синтаксису в script.y.
Еще одно замечание. Главной частью парсера является класс TVariable, который, несмотря на название, хранит не только переменные, но и классы, массивы, а так же море внутренней информации используемой в основном внутри script.y


Так что как видишь, гоуту для скрипта не представляет в обработке каких-либо сложностей, не сложнее ифа.


Top
   
 Post subject:
PostPosted: 2006-04-17 23:02:06 
Offline
Expert!
User avatar

Joined: 2006-02-25 21:48:38
Posts: 1032
Вобщем, хороший программист никогда не использует команду goto... вот это железно.

А до парсера мне до лампочки что там и как работает... раз команда гоуту не может выводить из цикла она совершенно не нужна! Всё очень красиво реальзуется через процедуры...


Top
   
 Post subject:
PostPosted: 2006-04-17 23:04:17 
Offline
Expert!
User avatar

Joined: 2006-02-25 21:48:38
Posts: 1032
Grin wrote:
Раздвоение личности?


Нет, просто так получилось... я имел ввиду что если замена гоуту на что то другое приводит к возникновению кучи условий вместо красивого алгоритма то это значит что у скриптописателя бардак в голове и пора пить пиво... :)


Top
   
 Post subject:
PostPosted: 2006-04-17 23:15:25 
Offline
Expert!

Joined: 2004-04-03 17:36:29
Posts: 2544
Location: Saint-Petersburg
Der wrote:
Вобщем, хороший программист никогда не использует команду goto... вот это железно.


Хороший программист старается не использовать команду гоуту. Потому что хороший программист пишет обычно большие скрипты, сложно структурированные, модульные, и хорошему программисту часто приходится залезать в эти скрипты и что-то изменять, совершенствовать, править. А команда гоуту затрудняет чтение такого скрипта. И все. Больше ничего. Все остальное - фантазии.

ЗЫ: скрипты = программы

ЗЗЫ: поверь моему двадцатилетнему (с лишком) опыту программирования. Я знал очень много высококлассных программеров. Да и сам когда-то был таким.


Top
   
 Post subject:
PostPosted: 2006-04-17 23:21:23 
Offline
Expert!
User avatar

Joined: 2006-02-25 21:48:38
Posts: 1032
Edred wrote:
Der wrote:
Вобщем, хороший программист никогда не использует команду goto... вот это железно.


Хороший программист старается не использовать команду гоуту. Потому что хороший программист пишет обычно большие скрипты, сложно структурированные, модульные, и хорошему программисту часто приходится залезать в эти скрипты и что-то изменять, совершенствовать, править. А команда гоуту затрудняет чтение такого скрипта. И все. Больше ничего. Все остальное - фантазии.

ЗЫ: скрипты = программы

ЗЗЫ: поверь моему двадцатилетнему (с лишком) опыту программирования. Я знал очень много высококлассных программеров. Да и сам когда-то был таким.


Ой мля, нун@х с вами спорить... у меня Батя отличный программист, и когда я был маленький и он меня пытался научить программировать. Одно из первых что он мне сказал: "Про goto забудь раз и навсегда...
Вот так...


Top
   
 Post subject:
PostPosted: 2006-04-17 23:27:37 
Offline
Junior Expert
User avatar

Joined: 2004-06-24 22:08:56
Posts: 3220
Der wrote:
Edred wrote:
Der wrote:
Вобщем, хороший программист никогда не использует команду goto... вот это железно.


Хороший программист старается не использовать команду гоуту. Потому что хороший программист пишет обычно большие скрипты, сложно структурированные, модульные, и хорошему программисту часто приходится залезать в эти скрипты и что-то изменять, совершенствовать, править. А команда гоуту затрудняет чтение такого скрипта. И все. Больше ничего. Все остальное - фантазии.

ЗЫ: скрипты = программы

ЗЗЫ: поверь моему двадцатилетнему (с лишком) опыту программирования. Я знал очень много высококлассных программеров. Да и сам когда-то был таким.


Ой мля, нун@х с вами спорить... у меня Батя отличный программист, и когда я был маленький и он меня пытался научить программировать. Одно из первых что он мне сказал: "Про goto забудь раз и навсегда...
Вот так...

Это в другом языке было :-D


Top
   
 Post subject:
PostPosted: 2006-04-17 23:30:10 
Offline
Expert!
User avatar

Joined: 2006-02-25 21:48:38
Posts: 1032
Да какая разница какой язык, да хоть BrainFuck!!! Хотя это уже совсем другая история :)


Top
   
 Post subject:
PostPosted: 2006-04-18 00:10:27 
Offline
Expert!
User avatar

Joined: 2005-05-04 14:05:19
Posts: 2580
Location: Москва
о да фак брен это классика;))) нравились мнетакие приколы;)))
нуапоповоду гоуту...
как и всем процесору свойственная ошибка;)) так вот существует такое понятие как проскок;)
в чем он проевляется то что указатель в памяти может быть неправельно выставлен... И что быэто исправитьидет проверкаиповторное выставление...так воткогда идетскачек на большие дистанцции проскокна иболее вероятен;) Но поверьте это не как не скажетсянавас и на ваших скриптах;) этоувсе уровни памитей процесса и другойдребедени;) все это относительно... гоуту обыкновеный без условныйпереход... только как как он выполнен в этом скриптовоммодуле... оставляет желать лутшего...
Вобщем это не повод длядраки...


Top
   
 Post subject:
PostPosted: 2006-04-18 00:14:04 
Offline
Expert!
User avatar

Joined: 2004-08-11 23:56:17
Posts: 746
Location: The Citadel
Ну чтож.. я опять, побив рекорд (дойдя от вино-водочного магазина до кондиции за 2.5 минуты) полез постить на форуме.
Раньше (когда Цитадель работала) я постоянно использовал функции с GoTo. На крутого програмиста я не притендую, т.к. крмое инжекта я писал код только на уроках паскаля в 9 классе... Так вот, GoTo c выходом за приделы цыкла ни разу не выдавал ошибки ни у меня, ни у половина шарда, которые моими скриптами пользовались. Вот пример такого "кривого" GoTo:

Code:
################# 
Sub medit()
#################
var xtime = 0
var mfail = "lose your concentration"
var mpeace = "You are at peace" 
  medit:
  DeleteJournal(mfail)
  DeleteJournal(mpeace)
  xtime = uo.timer()
  uo.warmode(0)
  uo.useskill( 'Meditation' )
    repeat
      if uo.injournal(mfail) then
        goto medit
      else
        wait(500)
      endif
    until UO.InJournal( 'You are at peace') OR (uo.timer() >= xtime + 1200)     
endsub


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 23 posts ]  Go to page 1 2 Next

All times are UTC+02:00


Who is online

Users browsing this forum: No registered users and 4 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Powered by phpBB® Forum Software © phpBB Limited