IPB

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Reply to this topicStart new topic
> Помогите разобраться с удачей!
ERMMASTER
сообщение 17 Jan 2010, 21:54 (Сообщение отредактировал ERMMASTER - 18 Jan 2010, 00:12)
Сообщение #1

Learning Dart Arts
Сообщений: 48
Спасибо сказали: 2 раза




Итак в прошлом году я уже поднимал этот вопрос, потом забил и сейчас довожу дело до конца..

С прошлого раза я знаю что флага удачи(как например морали) в игре нет (или его не нашли)
На вопрос как определить сработала ли у юнита в текущем раунде удача мне ответили:

****
Наверно единственный вариант - вручную посчитать урон, который должен быть нанесен существу, и если он примерно в 2 раза меньше текущего (!!MF:D), значит, видимо, выпала удача.
Можно, наверно, как-нибудь через UN:C узнать...
****
Итак моя задача сделать так чтоб при срабатывании удачи в 50% случаев наносился еще 50% доп.урона. Вот что я сделал..

!?MF1&v5105=1; Тригер на атаку (v5105 определяет есть ли у героя нужный для срабатывания скил)

!!BG:Q?y8; /сиотрим кто ходит
!!FU&y8<>0:E; /если не левая сторона то выходим
!!BG:N?y1; /№ текужего стэка
!!BMy1:T?y2; /тип текущего стэка
!!FU&y1>20:E; /если стэк врага(правой стороны) выходим
!!VRy7:Sy1; /запоминаем номер стэка в y7
!!BMy1:U1/?y2; /берем минимальный урон стэка
!!BMy1:N?y3; /берем количество воинов в стэке
!!BMy1:A?y5; /берем атаку(с бонусами стэка)
!!VRy5:Sy5*5; /т.к. каждая ед. атки это +5% дамаги сразу вносим это в переменную
!!VRy5&y5>400:S400; /т.к. бонус дамаг от атаки не может быть больше 400% исключаем такую возможность
!!VRy4:Sy3*y2; /умножаем кол-во существ на их минимальный урон
!!VRy8:Sy4*50:100; /берем 50% этого показателя (т.к. при срабатывании удачи урон не удваеваеться а увеличиваеться на 50%)

!!VRy6:Sy4*y5:100; /получаем доп. урон с учетом атаки
!!VRy4:Sy4+y6; /прибавляем этот урон
!!MF:N?y1; /берем номер атакуемого отряда
!!BMy1:D?y5; /берем его защиту
!!VRy3:Sy5*25:1000; /Каждая ед. защиты уменьшает урон на 2.5% учитываем это
!!VRy3&y3>70:S70; /не может снижать урон более чем на 70% исключаем такое
!!VRy6:Sy4*y3:100; /вычисляем % урона, который "уйдет в защиту'
!!VRy4:Sy4-y6; /вычитаем этот урон
!!VRy4:+y8; /прибавляем 50% (типа сработала удача)

!!MF:D?y1; /смотрим какой урон нанесен
!!FU&y1<y4:E; /если этот урон меньше чем тот что мы расчитали +50% выходим(значит удача не сработала)
!!VRy6:S1R1; /кидаем кость на 50%
!!FU&y6=1:E; /смотрим нрань если несовпала выходим

!!BMy7:V18; /анимация удачи на атакующий отряд (будет 2 анимации удачи эта+родная) так мы увиди что сработал скил дамага
!!VRy2:Sy1*50:100; /50% от урона
!!VRy1:Sy1+y2; /прибавляем их к урону
!!VRz2:M3/y1; /переводим строковую переменную в числовую

!!BU:Mz2; /сообщение в быструю строку с нанесенным уроном
!!MF:Fy1; /наносим отредактированный урон


Вот такой гемморой! при проверке с маленькими показателями атаки/защиты все работает, но на больших картах со сверх показателями эта фигня часто срабатывает даже если небыло удачной атаки я уже заманался искать что тут неверно...
HELP!!!!
Go to the top of the pageAdd Nick
 
+Quote Post
Гость_Berserker_*
сообщение 17 Jan 2010, 22:54
Сообщение #2







А что за чай "Уда"?
Go to the top of the pageAdd Nick
 
+Quote Post
Дьяк
сообщение 17 Jan 2010, 23:48
Сообщение #3

Member
Сообщений: 97
Спасибо сказали: 80 раз




А навыки героя? Кинь название дефа удачи, может чем помогу.
Go to the top of the pageAdd Nick
 
+Quote Post
ERMMASTER
сообщение 18 Jan 2010, 00:13
Сообщение #4

Learning Dart Arts
Сообщений: 48
Спасибо сказали: 2 раза




УдаЧай! laugh.gif) Нашел к чему придраться, ну соскочил палец при наборе)
Всмысле название дэфа удачи??

Добавлено ([mergetime]1263762804[/mergetime]):
Исправил название темы чтоб не отвлекались на подколки а помогли разобраться с проблемой!
Go to the top of the pageAdd Nick
 
+Quote Post
feanor
сообщение 18 Jan 2010, 00:47
Сообщение #5

laughed as one fey
Сообщений: 12 167
Спасибо сказали: 20603 раза




http://forum.df2.ru/index.php?showtopic=68...ndpost&p=193891

Внизу поста написано, как задавать-считывать удачу.
Можно попробовать считывать её в 77007 событии Эры, обнулять и на основе считанного значения прикручивать свой механизм.


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
tolich
сообщение 18 Jan 2010, 00:48
Сообщение #6

😸🧡✊✌️
Сообщений: 16 436
Спасибо сказали: 3308 раз




C09SPA0.DEF - удача
C10SPF0.DEF - неудача
C09SPW0.DEF - мораль
C14SPE0.DEF - немораль

Добавлено ([mergetime]1263764926[/mergetime]):
feanor: чел хочет узнать, сработала удача или нет, а не повысить или понизить...


--------------------
Я слежу за тобой!
* tolic.narod.ru

Цитата
Всегда приятно осознавать, что кто-то делает что-то хуже, чем делал бы ты, если бы умел.
Борис "Бонус" Репетур, "От винта!", выпуск 38.


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
ERMMASTER
сообщение 18 Jan 2010, 01:52
Сообщение #7

Learning Dart Arts
Сообщений: 48
Спасибо сказали: 2 раза




tolich спасибо конечно, но чем мне это поможет? Может я чегото непонял обьясни подробнее как DEF может помочь определить сработала ли удача?
Go to the top of the pageAdd Nick
 
+Quote Post
Haart of the Aby...
сообщение 18 Jan 2010, 01:57
Сообщение #8

Рыцарь в лесу.
Сообщений: 4 467
Спасибо сказали: 6233 раза




Цитата
!!VRy5:Sy5*5; /т.к. каждая ед. атки это +5% дамаги сразу вносим это в переменную
!!VRy5&y5>400:S400; /т.к. бонус дамаг от атаки не может быть больше 400% исключаем такую возможность
!!VRy4:Sy3*y2; /умножаем кол-во существ на их минимальный урон
!!VRy8:Sy4*50:100; /берем 50% этого показателя (т.к. при срабатывании удачи урон не удваеваеться а увеличиваеться на 50%)

!!VRy6:Sy4*y5:100; /получаем доп. урон с учетом атаки
!!VRy4:Sy4+y6; /прибавляем этот урон
!!MF:N?y1; /берем номер атакуемого отряда
!!BMy1:D?y5; /берем его защиту
!!VRy3:Sy5*25:1000; /Каждая ед. защиты уменьшает урон на 2.5% учитываем это
!!VRy3&y3>70:S70; /не может снижать урон более чем на 70% исключаем такое
!!VRy6:Sy4*y3:100; /вычисляем % урона, который "уйдет в защиту'
Атака с защитой работают не так. Насколько я понял, ваш скрипт построен в рассчёте на то, что игра сначала увеличивает урон в соответствии с такой, затем уменьшает его в соответствии с защитой. На самом же деле защита вычитается из атаки и в зависимости от результата урон либо увеличивается, либо уменьшается.

P. S. Я нуб и не шарю.


--------------------


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
Гость_Berserker_*
сообщение 18 Jan 2010, 02:08
Сообщение #9







Лорд Хаарт, верно. И важно не забыть про ограничения макс бонуса атаки в 300% и макс. защиты в 70%.

Цитата
tolich спасибо конечно, но чем мне это поможет?

Дьяк в отладчике найдёт по перекрёстной ссылке, где юзается деф. Я так на мораль выходил, если не ошибаюсь.


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
pHOMM
сообщение 18 Jan 2010, 09:11
Сообщение #10

Что же Вы , Маэстры, ну-ка гряньте нам что-нибудь !!!
Сообщений: 226
Спасибо сказали: 171 раз




Если честно, граждане, тут много тонких моментов. Основной конечно это всякие блесы шилды арморы офенсы и т.п., как их учитывать при той реализации, что предлагает автор ???
Второй момент, автор берёт специальный расчёт дамагу, однако лучше воспользоваться конкретным изученным алгоритмом расчёта - в физмиге http://homm3world.narod.ru там скачаете физмиг, в нём лист № 21 или пункт 5.7 в оглавлении. Там чётко описано как и на что работает атака, защита, спелы и УдаЧай.
Ещё один очень жуткий момент - ненависть/иммуны существ(что можно глянуть там же в физмиге, пункт 2.2) , это будет портить все эти рас чёты, придётся и это учитывать...

да и расчёт нанесённого урона, просто жесть математики - выстрелы полной/ неполной стрелы, рукопашная стрелков и штраф стен города (плюс иже с ними армор арчери, 2 разных лука, один из них сборный, и 3 арта на арчери ) не будем думать каков расчёт для спецов по всему этому делу *death*

ну и даже не будем вспоминать о таких моментах как баллиста (на неё тоже удача влияет) и опять же спецам по баллисте...

Сколько всё это считать и учитывать *rofl* ?

Мой совет - искать структуры в экзешке/памяти, трудоёмко, зато надёжно !!

П.С. Извиняюсь за напрашиваемость, а мне помогите пжлст, с адресами структур для препятствий на поле битвы http://forum.df2.ru/index.php?showtopic=54...F%BDentry38295#


--------------------
Это всё я : кодинГ, мэпмейкинГ, скриптинГ

Инфо о моих проектах, в основном геройских, http://phomm.narod.ru
Раздел моей тактической игры Интакт http://forum.df2.ru/index.php?showforum=135


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
ERMMASTER
сообщение 18 Jan 2010, 10:16
Сообщение #11

Learning Dart Arts
Сообщений: 48
Спасибо сказали: 2 раза




pHOOM Ты абсолютно прав! Я слишком поверхностно подошел к данному вопросу. Пытаться учесть все эти тонкости ради такой реализации, это разрыв мозга! laugh.gif
Остаеться ждать другой вариант или надеяться что кто-то таки найдет флаг удачи!
P.S. Всем СпасибО!
Go to the top of the pageAdd Nick
 
+Quote Post
pHOMM
сообщение 18 Jan 2010, 10:50 (Сообщение отредактировал pHOMM - 18 Jan 2010, 11:07)
Сообщение #12

Что же Вы , Маэстры, ну-ка гряньте нам что-нибудь !!!
Сообщений: 226
Спасибо сказали: 171 раз




Есть, конечно, и такая мысль: ресивер ММ, он позволяет получать текст из лога битвы, надо только избрать все варианты всяких разных переводов и кучи языков начиная с английского для процедуры проверки строки на вхождение слова Удача, ещё и в разных падежах )))

Есть и хитрый способ, берем функцию замены строк http://forum.df2.ru/index.php?showtopic=5931 и делаем свою собственную строку для лога битвы при выпадении удачи, например с одной англ а в слове удача, и там уже дело техники, дерзайте , автор )


UPD Так-c, там же в теме по ссылке, в конце темы МоР сделал чтение строк из файлов, тебе нужен genrltxt.txt там 54 строка - "Удача улыбнулась %s", меняй её функцией МоР'а на свою строку, потом в битве читай каждую строку лога и загоняй в функцию проверки строк (её уж самому только писать, сравнивать строку лога со своей строкой, в итоге достигается языко/переводо - независимый скрипт) и, таким образом, думаю, ты достигнешь нужного тебе результата !!!

Тут только возникает неизвестная вещь - если строка лога записывается после нужного действия, то извиняй, получится только факт что удача сработала, но последствия удачи уже применены (убито больше народу), и тут как менять уж как то жестко надо...


--------------------
Это всё я : кодинГ, мэпмейкинГ, скриптинГ

Инфо о моих проектах, в основном геройских, http://phomm.narod.ru
Раздел моей тактической игры Интакт http://forum.df2.ru/index.php?showforum=135


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
ERMMASTER
сообщение 18 Jan 2010, 10:58
Сообщение #13

Learning Dart Arts
Сообщений: 48
Спасибо сказали: 2 раза




Интересная идея! Мне такого в голову не могло прити)
Буду пробовать, еще раз спс.
Go to the top of the pageAdd Nick
 
+Quote Post
pHOMM
сообщение 20 Jan 2010, 08:15
Сообщение #14

Что же Вы , Маэстры, ну-ка гряньте нам что-нибудь !!!
Сообщений: 226
Спасибо сказали: 171 раз




Ну, что? Разобрался с удачей тем способом со строками ?? Всё-таки эффект удачи произходит до вывода строки в лог битвы, или после ? Если после, то можно ли на эффект повлиять ?


--------------------
Это всё я : кодинГ, мэпмейкинГ, скриптинГ

Инфо о моих проектах, в основном геройских, http://phomm.narod.ru
Раздел моей тактической игры Интакт http://forum.df2.ru/index.php?showforum=135
Go to the top of the pageAdd Nick
 
+Quote Post
Дьяк
сообщение 22 Jan 2010, 17:38
Сообщение #15

Member
Сообщений: 97
Спасибо сказали: 80 раз




Ну с работой удачи - я разобрался, но написать скрипт, если и возможно, то только через эру и очень геморройно. Во-первых, обращение к длл Angel должно быть в том же потоке, что и поток обрабатывающий битву и вероятность удачи (вероятнее всего так оно и есть). Т.к. случайное число для генерации получается из TlsGetValue (ячейка №12). Далее несколько действий над полученным значением (значение в eax):
MOV ECX,[DWORD EAX+14]
IMUL ECX,ECX,343FD
ADD ECX,269EC3
MOV [DWORD EAX+14],ECX
MOV EAX,ECX
SHR EAX,10
AND EAX,7FFF

и

SUB ESI,EDI
CDQ
INC ESI
IDIV ESI
MOV EAX,EDX
ADD EAX,EDI

в eax - значение, которое сравнивается с удачей героя, если оно меньше или равно, то удача срабатывает иначе нет.




Добавлено ([mergetime]1264171116[/mergetime]):
Хотя... можно попробовать вызвать процедуру генерации случайного числа для удачи через эру, если получиться и сравнивать с удачей героя. - это лучший вариант. Адресс процедуры 50C7C0h тип register eax = удача героя edx = 18 ecx = 1
результат есно в eax


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
ERMMASTER
сообщение 24 Jan 2010, 18:22
Сообщение #16

Learning Dart Arts
Сообщений: 48
Спасибо сказали: 2 раза




Способ со строками прокатил но немного с предподвыпердвертом smile.gif
В строку естественно добавляеться после срабатывания удачи. такчто после считывания и сравнения можно определить была ли удача, но изменить урон в текущей атаке никак, только функцией (после действия) наносим доп. урон через !!BM:K# но при этом монстр будет странно дергаться после атаки и еще если этот урон его добьет, то останеться картинка отряда, но без численности. Вобщем баги.. баги

Добавлено ([mergetime]1264346563[/mergetime]):
А с Эрой я не сталкивался и абсолютно не шарю в этом... Но все равно спасибо Дьяк!
Go to the top of the pageAdd Nick
 
+Quote Post
Haart of the Aby...
сообщение 25 Jan 2010, 00:09
Сообщение #17

Рыцарь в лесу.
Сообщений: 4 467
Спасибо сказали: 6233 раза




Цитата
Есть, конечно, и такая мысль: ресивер ММ, он позволяет получать текст из лога битвы, надо только избрать все варианты всяких разных переводов и кучи языков начиная с английского для процедуры проверки строки на вхождение слова Удача, ещё и в разных падежах
Смотрите с падежами не перемудрите. А то будет срабатывать после каждого каста одноимённого заклинания.


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
tolich
сообщение 25 Jan 2010, 20:39
Сообщение #18

😸🧡✊✌️
Сообщений: 16 436
Спасибо сказали: 3308 раз




Есть другая идея: генерировать сработавшую удачу/неудачу скриптом, а чтобы она не срабатывала стандартно, перед каждым действием монстра принудительно ее обнулять. Тогда вопрос "сработала/не сработала" вообще стоять не будет.


--------------------
Я слежу за тобой!
* tolic.narod.ru

Цитата
Всегда приятно осознавать, что кто-то делает что-то хуже, чем делал бы ты, если бы умел.
Борис "Бонус" Репетур, "От винта!", выпуск 38.


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
DracoLich
сообщение 26 Jan 2010, 12:15
Сообщение #19

Banished
Сообщений: 1 782
Спасибо сказали: 116 раз




хоббиты


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
tolich
сообщение 26 Jan 2010, 12:25 (Сообщение отредактировал tolich - 26 Jan 2010, 12:25)
Сообщение #20

😸🧡✊✌️
Сообщений: 16 436
Спасибо сказали: 3308 раз




Что, хоббитам нельзя поставить нулевую удачу, в принципе?


--------------------
Я слежу за тобой!
* tolic.narod.ru

Цитата
Всегда приятно осознавать, что кто-то делает что-то хуже, чем делал бы ты, если бы умел.
Борис "Бонус" Репетур, "От винта!", выпуск 38.
Go to the top of the pageAdd Nick
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 26 September 2025 - 22:44
Copyright by Алексей Крючков
Strategy Gamez by GrayMage
Programming by Degtyarev Dmitry
  Яндекс.Метрика