yellyex
offline
Опыт:
4,667Активность: |
Отследить номер массива
Здравствуйте!
У меня есть целочисленная переменная Здоровье равная 100 единицам. Я её преобразовываю в действительную и даю значение целочисленной здоровью морпеха. Вобщем, если кратко, то здоровье морпеха делаю равным значению целочисленной. Сделано это для того, чтобы все процессы урона и остальных действий происходили сначала в арифметических действиях, а результат уже давался юниту. То есть переменная Damage и Health. Health (Юнита 1) - Damage (Юнита 2) = Health (Юнита 1) И устанавливаем результат на Юнита 1. С этим разобрались. Так вот в чём проблема:
У нас есть Здоровье и Урон в массиве из 10 со значениями 100 и 10. На карте последовательно появляются юниты и каждому в порядке очереди присваиваются переменные Здоровье и Урон соответственно их номеру. Первому появившемуся юниту Здоровье [1] и Урон [1] и так далее. Далее идёт триггер боя:
Событие: Юнит атакован.
Условие: И: Атакованный юнит 7 (например) Атакующий юнит 2 (тоже например:) Действие: Здоровье[7] (100) минус Урон[2] (10) равно Здоровье[7] (90). Задать Юниту[7] Здоровье Преобразовать из целочисленной в действительную Здоровье[7]. Сделать вручную все триггеры взаимодействия каждого юнита с каждым я могу. Но представте, что юниты на карте то и дело появляются и их далеко не 10. Соответственно у меня возник вопрос: Как можно отследить момент, когда происходит событие Любой юнит атакован и при этом узнать под каким номером массива Атакующий юнит и под каким номером массива Атакованный юнит, чтобы в дальнейшем произвести арифметическое действие Здоровья с Уроном этих юнитов? |
15.01.2013, 12:00 | #1
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
H
hello world
offline
Опыт:
130,725Активность: |
wtf?
Что ты пытаешься сделать и почему таким странным образом. Скажи конечную цель, я кажу как это сделать одной функцией и без массивов. |
15.01.2013, 13:00 | #2
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
yellyex
offline
Опыт:
4,667Активность: |
Текущий вариант у меня сделан методом перебора в ручную. Во всех условиях Атакованного и Атакующего юнита перебраны все номера массивов этих юнитов. Если один триггер, то он будет тяжёлым (сильно загруженным и время на его выполнение будет долгим). Ну и второй для каждого юнита свой триггер. Тоже самое как в первом варианте, только триггеров очень много, но они все лёгкие. И самое главное оба варианты не динамические. То есть нелья взять номер массива Если атакованный юнит, то массив n, и Если атакующий юнит, то его массив p. Как взять массивы атакованного и атакующего юнита мне не понятно. |
15.01.2013, 13:01 | #3
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
Doc
offline
Опыт:
63,163Активность: |
Черт возьми прям расписываешь как Пушкин.
|
15.01.2013, 13:10 | #4
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
yellyex
offline
Опыт:
4,667Активность: |
Doc:
А ты как Менделеев. Я вот нифига не понял :) Сейчас карту выложу. |
15.01.2013, 13:11 | #5
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
H
hello world
offline
Опыт:
130,725Активность: |
Я так и не понял что ты хочешь сделать и зачем делать по триггеру на каждого юнита с перебором по массиву. |
15.01.2013, 13:12 | #6
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
yellyex
offline
Опыт:
4,667Активность: |
Чтобы сделать каждого юнита на карте индивидуальными и обращаться к его характеристикам (Здоровье, Урон, Броня и так далее). А если характеристики будут одни на всех, то получится бред. Я отнимаю здоровье у юнита, а у какого не понятно? |
15.01.2013, 13:19 | #7
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
Doc
offline
Опыт:
63,163Активность: |
Кто первый мне скажет, что я "разделом ошибся"? |
15.01.2013, 13:19 | #8
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
Faion
Noblesse Oblige
offline
Опыт:
30,395Активность: |
|
15.01.2013, 13:23 | #9
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
yellyex
offline
Опыт:
4,667Активность: |
Вот карта. Юнит 1 атакует Юнита 2. Doc, ты не ошибся. Тут вопрос не по разделу, а вообще по программированию. |
15.01.2013, 13:24 | #10
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
Faion
Noblesse Oblige
offline
Опыт:
30,395Активность: |
Тьфу блин, это ск2. |
15.01.2013, 13:26 | #11
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
yellyex
offline
Опыт:
4,667Активность: |
Спасибо парни! Сейчас почитаю статьи, посмотрю что да как.
yellyex добавил:
Вот то, что у меня сейчас. |
15.01.2013, 13:44 | #12
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
Doc
offline
Опыт:
63,163Активность: |
Мы все итак уже поняли. Перечитай еще раз мои посты. Тебе нужно хранить "внутри юнита" его номер и при атаке доставать его. |
15.01.2013, 13:59 | #13
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
ScorpioT1000
Работаем
offline
Опыт: отключен
|
|
15.01.2013, 14:44 | #14
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
yellyex
offline
Опыт:
4,667Активность: |
Doc:
А когда у меня юнит появляется, я записываю в переменную типа юнита с индексом его номер. То есть 1,2,3,4 и 5. То есть номера уже есть. Я не понял, как брать номер юнита, когда происходит событие атаки? (Статьи ещё не читал) |
15.01.2013, 17:42 | #15
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
yellyex
offline
Опыт:
4,667Активность: |
Объясняю всю картину целиком. На карте будут появляться много премного разных юнитов. Каждый юнит будет содержать две целочисленные переменные Здоровье и Урон. Когда эти юниты будут атаковать друг друга, все действия будут просиходить в триггерах, а не в данных. То есть, как я уже писал выше. Спавнится юнит, я ему даю переменную Здоровье и Урон с его номером спавна, например 95 юнит. Соответственно и Здоровье и Урон у него тоже должны быть его номером 95, чтобы при взятии их в арифметические действия Здоровье минус Урон, они различались. |
15.01.2013, 18:02 | #16
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
ScorpioT1000
Работаем
offline
Опыт: отключен
|
смотри я тебе показываю, есть какаято база начальных значений, допустим 3 массива (это как аналог базы РО)
массив потому что может быть разные типы юнита, предположим типа "mariner" это номер 666
заполняем базу данных для типов юнитов, представь в ро есть разные равкоды (типы юнитов) 666, 667, мы каждому задаем поля
дальше база данных тип юнита из нашей базы - тип юнита в ск2
дальше есть набор констант, чтобы не тыкаться со всякими твоими 95 юнит, делают перечисления:
они упрощают понимание, где какое поле, иначе запутаешься в цифрах
подготовим функцию создания юнита
дальше при создании юнита u ты делаешь (помним что тип - маринер - 666, как определять какой тип какому номеру это другой вопрос):
подготовим функцию для атаки
меняем здоровье у юнита u тут можно все сделать еще быстрее, но для наглядности я создал переменные
дальше при атаке, например случился удар по юниту u (current) - от юнита w (damager)
вызываем нашу функцию
вот пример как обратно вылечивать
смотри выше я дописал 3 показатель теперь путь у нас лекарь будет типом 667 дальше при создании лекаря u ты делаешь, все так же как у маринера, потому что мы все сделали в базе типов юнитов
дальше сделаем нехитрое лечение, пускай просто каждую секунду берутся все лекари на карте, не знаю как, пусть текущий будет uh и берутся все "свои" в какойто области, не важно
дальше для каждого такого "своего" uu c типом UU (666 или 667 или еще как это другой вопрос)
Отредактировано ScorpioT1000, 15.01.2013 в 19:46. |
15.01.2013, 18:20 | #17
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
Харгард
Epic
offline
Опыт:
7,829Активность: |
Вместо массивов используй пользовательский тип данных. Их заполнять намного удобней. И полей может быть сколько угодно |
15.01.2013, 22:53 | #18
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
yellyex
offline
Опыт:
4,667Активность: |
Харгард:
Это в дате или где? |
15.01.2013, 23:06 | #19
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
Харгард
Epic
offline
Опыт:
7,829Активность: |
Да в дате.
Сперва создаешь свой тип данных (эдакий аналог структуры из С++ или просто таблица БД) Затем там же заполняешь. Ссылку на юнита/его тип, имя, иконка, пол, ориентация и прочие параметры. А уже триггером, при помощи Фор Ич, перебираешь их, сравнивая триггерного юнита с User Data (ТИП, Instance, ПОЛЕ, 1)) пока не найдешь нужный тебе. |
16.01.2013, 00:21 | #20
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|