Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: New Magic system for WoG
DF2 :: ФОРУМЫ > Игровые форумы > Heroes of Might & Magic III > Архив разделов форума Heroes III
Страницы: 1, 2, 3
Д'якон
Да, но при помощи
AND=!!VR#:&$; - можно проверить бит, как написано в хэлпе.

Как мне тогда проверить какой бит присвоен?
Demiurg
Обычно не требуется узнать, какой бит присвоен. Главное назначение команды & - узнать присвоен ли данный бит (набор битов).
Д'якон
Так вот я перебираю все биты, и смотрю какой присвоен. А не работает.
gamecreator
а ты сохраняешь переменную перед проверкой??
Д'якон
В смысле сохраняешь?
Demiurg
Если честно, то приведенный тобой код выглядит весьма сомнительно.

Добавлено ([mergetime]1190478008[/mergetime]):
И я так и не понял, зачем нужно узнавать номер бита. Их же может быть несколько установлено. Что тогда?
Д'якон
А что если установленно несколько битов, то я не смогу проверить один?
А код можешь протестить, по крайней мере до !?BA1 - работает все корректно.
gamecreator
Цитата(Д'якон @ 22 Sep 2007, 19:16)
В смысле сохраняешь?

в ЕРМ результат действия записывается в текущую переменную
Demiurg
Сможешь.
!!VR:&(2^(bit_number-1));
Д'якон
Цитата(Demiurg @ 22 Sep 2007, 19:20)
И я так и не понял, зачем нужно узнавать номер бита.


Я по твоему же совету. Смотри посты выше. Заношу каждый закл в отдельный бит. Для того чтобы их потом после битвы вернуть герою
Demiurg
Цитата(Д'якон @ 22 Sep 2007, 20:26)
Я по твоему же совету. Смотри посты выше. Заношу каждый закл в отдельный бит. Для того чтобы их потом после битвы вернуть герою

Только, когда ты возвращаешь закл герою тебе не нужно узнавать номер бита.
Ты подставляешь номер закла в формулу.
Если проверка дает положительный ответ, то даешь закл герою.
Д'якон
НУ. Я так и делаю.
Demiurg
Цитата(Д'якон @ 22 Sep 2007, 20:28)
НУ. Я так и делаю.

Ты говорил, что ты узнаешь номер бита. В предлагаемом варианте тебе не нужно знать номер бита. Ты перебираешь в цикле все заклы.
Berserker
Извиняюсь, в упор не понимаю в чём проблема.
До битвы запоминаем все заклы в битах 0..30 серии v-переменных, после восстанавливаем.
Д'якон
Да да ты прав. Приведи пример.
Demiurg
Набросок.

int v = 0;

Before
int j = 1;
For (i = 0; i < 30; i++)
{
if (hero has spell #i) v:|j;
j*=2;
}

After
int i = 0;
For (j = 1; j < 2^30; j = j*2)
{
if (v&j) get hero spell #i;
i++;
}
Berserker
Читаемость С всегда была на высоте smile.gif
Дьякон, дам совет. Не берись за то, что сложно. Начни с более простого. Или юзай вариант такой: (простой в реализации)

1) на ИИ не действует
2) алгоритм

!?BG0...
Проверили, может ли герой колдовать закл, если нет, то

!!IF:M^Учение - свет, качай нужные скилы сперва!^;
!!BG:A0;
Выходим.

Элегантно и просто, хотя челу неудобно. Впрочем, если написано, что для магии огня 4-го уровня нужна грамотность, то нечего все заклы 4 и 5-го пробовать smile.gif
Д'якон
Я такой скрипт уже делал. Посмотри предыдущие посты. А с проблемами разобрался. Ничего сложного, хоть и потребовалась помощь Демиурга sorry.gif .


Добавлено ([mergetime]1190486255[/mergetime]):
Сейчас потестю и выложу.
Д'якон
yahoo.gif
Наконец. Вот. Может кривоват, я посмотрю может подправлю, но работает нормально (например используется глобальная переменная, но от этого можно уйти). Теперь составлю какая магия от чего зависит и допишу окончательно.
Код
!?BA0;
!!FU1234:Px1/x2/x3/x4/x5;
!!IF:V2/1;
!!FU1234:Px1/x2/x3/x4/x5;

!?BA1;
!!VRy1:S1;
!!BA:H0/?y2;
!!IF:V3/0;
!!DO1235/10/40/1:Py1/y2;
!!IF:V3/1;
!!DO1235/41/69/1:Py1/y2;
!!BA:H1/?y2;
!!IF:V3/0;
!!DO1235/10/40/1:Py1/y2;
!!IF:V3/1;
!!DO1235/41/69/1:Py1/y2;


!?FU1234
!!IF:V1/0;
!!BA&-2:H0/?y1;
!!BA&2:H1/?y1;
!!HEy1:Sx2/?y4 Sx4/?y5 Mx1/?y7;
!!if&y4<x3|y5<x5:;
  !!IF:V1/1;
!!en;
!!HEy1&1:Mx1/0;
!!IF:Wy1;
!!if&y7=1/x1>9/x1<41:;
!!VRy8:S1;
!!VRx1:-10;
!!DO1236/10/40/1:Py8/x1;
!!VRw1:|v1;
!!en;
!!if&y7=1/x1>41/x1<60;
!!VRy8:S1;
!!VRx1:-41;
!!DO1236/41/69/1:Py8/x1;
!!VRw2:|v1;
!!en;
!!IF:V2/0;


!?FU1235;
!!IF:Wx2;
!!VRy1&-3:Sw1&x1;
!!VRy1&3:Sw2&x1;
!!VRx1:*2;
!!FU&y1=0:E;
!!HEx2:Mx16/1;


!?FU1236;
!!if&x2>0:;
!!VRx1:+x1;
!!VRx2:-1;
!!en;
!!VRv1:Sx1;
Д'якон
Предлогаю, Вам, предлогать (каламбур, блин) от каких навыков должна зависить какая магия.

Общий принцип считаю должен быть таким:
для магии более низкого ур-ня должны в основном использоваться часто изучаемые навыки.
А вот для более высокого и полезной магии навыки типа грамотности и т.п.
Вот предлогаю некоторые:

Щит - защита базовая, тактика базовая;
лечение - первая помощь, грамотность;
воскрешение - первая помощь эксперт, интелект эксперт;
поднять мертвецов - некромантия базовая, первая помощь продвинутая
ускорение - логистика базовая, поиск пути базовый;
защита от огня,воды,земли,воздуха - защита базовая, грамотность базовая

Что-то в этом роде. Для низкоуровневых заклов можно и по одному навыку.
Docent Picolan
Цитата
Предлогаю, Вам, предлогать

ха-ха. и оба раза написал с ошибкой laugh.gif

Fire Shield (Огненный Щит) - магия огня продвинутая
Anti-Magic (Анти-магия) - сопротивление магии базовое
Д'якон
Выставляю на одобрение. Вносите свои коррективы. Чтобы не затянулось обсуждение (если будет), принимаю предложения до пятницы. Потом доделываю код.

1=basic, 2 =advanced, 3 =expert

5 level

Implosion - Earth Magic 3, Scholar 3;
Fire Elemental - Fire Magic 3; Learning 3;
Air Elemental - Air Magic 3; Learning 3;
Earth Elemental - Earth Magic 3; Learning 3;
Water Elemental - Water Magic3; Learning 3;
Armageddon -Fire Magic 3; Mysticism 3;
Sacrifice - Scholar 3; Mysticism 3;

4 level

Resurrection - Earth Magic 3, First Aid 3;
Meteor Shower - Earth Magic 2, Fire Magic 2;
Animate Dead - Necromancy 3, First Aid 3;
Prayer - Leadership 3; Luck 3;
Clone - Scholar 2; Learning 2;
Inferno - Fire Magic 2; Offence 2;
Fire Shield - Fire Magic 2; Armorer 2;
Berserk - Fire Magic 2; Leadership 2;
Magic Mirror - Mysticism 1; Resistance 2;
Chain Ligtning - Air Magic 3; Sorcery 3;

3 level
Sorrow - Leadership 1; Resistance 1;
Protect from Earth - Armorer 2; Resistance 2;
Force Field -Earth Magic 1; Armorer 1;
Earthquake - Earth Magic 2;
Teleport - Air Magic 2;
Mirth - Water Magic 2; Luck 2;
Frost Ring - Water Magic 1;
Forgetfulness - Resistance 1; Archery 1;
Slayer - Luck 3; Offence 3;
Frenzy - Offence 2; Leadership 1;
Fireball - Fire Magic 1; Ballistics 1;
Hypnotize - Intelligence 1; Sorcery 2;
Destroy Undead - Armorer 1; Sorcery 1;
Counterstrike - Armorer 3; Armorer 3;
Anti-magic - Resistance 2;

2 level

Slow - Earth Magic 1;Logistics 1;
Death Ripple - Necromancy 2; Sorcery 1;
Ice Bolt - Water Magic 1; Artillery 1;
Cure - First Aid 1;
Misfortune - Luck 1;
Land Mine - Scouting 1;
Fire Wall - Fire Magic 1;
Blind - Eagle Eye 1;
Lightning Bolt - Artillery 1; Air Magic 1;
Fortune - Luck 1;
Disrupting Ray - Sorcery 1;

1 Level

Stone Skin - Armorer 1; Earth Magic 1;
Shield -Armorer 1;
QuickSand - Scouting 1;
Weakness - Sorcery 1;
Remove Obstacle - Intelligence 1;
Protect from water - Water magic 1; Resistance 1;
Dispel - First Aid 1;
Bless - Leadership 1;
Protect from fire - Fire Magic 1; Resistance 1;
Curse - Mysticism 1;
Bloodlust - Offence 1;
Protect from air - Air Magic 1; Resistance 1;
Precision - Archery 1;
Magic Arrow - Archery 1; Air Magic 1;
Haste - Logistics 1;
Air Shield - Archery 1; Armorer 1;
Docent Picolan
Цитата
Fire Shield - Fire Magic 2; Offence 2;

а оффенс зачем? это ведь усиление атаки. какое отношение это имеет огненному щиту? лучше sorcery или оставить только одну магию огня...
Д'якон
I'm sorry. Now better?
Docent Picolan
yes. так ещё куда не шло wink.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2025 IPS, Inc.