Скрипты
|
andreus | Дата: Пятница, 08.02.2013, 22:10 | Сообщение # 31 |
Sir James Vagabond
Группа: Администраторы
Сообщений: 3876
Награды: 21
Репутация: 391
Статус: Offline
| Хех, написали ответы одновременно)
Ок, подождем стабильного релиза. Самое главное что уже найдено и исправлено несколько багов
Кстати насчет PlayerDefeated: мб стоит добавить еще 1 параметр для более гибкой настройки? PlayerDefeated(ID, true/false)
Это может пригодиться, например когда сообщение отправляется в опр. время при условии что игрок не побежден. А если игрока победили до того как выслано сообщение, задуманное действие теряет смысл)
Пример:
if States.GameTime = 10000 and States.PlayerDefeated(1, false) then Actions.ShowMsg(0, 1);
Либо:
if States.GameTime = 10000 and States.PlayerDefeated(1) = false then Actions.ShowMsg(0, 1);
И еще вопрос: как определяется ID отряда для команд типа
Actions.UnitOrderWalk(ID, X, Y) ?
|
|
| |
|
Krom | Дата: Пятница, 08.02.2013, 22:27 | Сообщение # 32 |
Воитель
Группа: Супер Модераторы
Сообщений: 2526
Награды: 25
Репутация: 153
Статус: Offline
| Используй магию программирования: if (States.GameTime = 10000) and States.PlayerDefeated(1) then Actions.ShowMsg(0, 1); //покажет если повержен if (States.GameTime = 10000) and not States.PlayerDefeated(1) then Actions.ShowMsg(0, 1); //покажет если НЕ повержен
UnitID определяется командами типа HitTest или, что правильнее, при добавлении юнита. Во время игры ID не меняется и уникален для каждого юнита/дома/отряда.
Нашли баг в КаМ Ремейке? Отправьте отчет на с пометками, желательно на английском, в какой версии, что и когда случилось, приложите реплей или сохраненную игру в которой этот баг воспроизводится.
|
|
| |
|
andreus | Дата: Пятница, 08.02.2013, 22:31 | Сообщение # 33 |
Sir James Vagabond
Группа: Администраторы
Сообщений: 3876
Награды: 21
Репутация: 391
Статус: Offline
| Ок, будем пробовать, спасибо)
|
|
| |
|
Jery | Дата: Пятница, 08.02.2013, 22:39 | Сообщение # 34 |
Мечник
Группа: Модераторы
Сообщений: 568
Награды: 2
Репутация: 50
Статус: Offline
| Смысл в том что я расставил объекты в редакторе ремейка и сразу полез писать скрипт. И как только я запускал карту я сразу побеждал, хотя постройки второго игрока стояли=) Вот это меня высаживает, пришлось разбираться что там за goals и как их поставить.
«Художник не тогда знает, что он достиг совершенства, когда нечего добавить, но когда нечего больше отнять». (Антуан де Сент-Экзюпери)
Сообщение отредактировал Jery - Пятница, 08.02.2013, 22:40 |
|
| |
|
andreus | Дата: Пятница, 08.02.2013, 23:01 | Сообщение # 35 |
Sir James Vagabond
Группа: Администраторы
Сообщений: 3876
Награды: 21
Репутация: 391
Статус: Offline
| Продолжаем тестить...
Заметил в городе вражеских конячке-одиночек, арабов-одиночек, мечей-одиночек. Включил меню F11, выбрал игрока №2. Увиденное убило:
ИИ плодит воинов-одиночек, хотя заданы формации ИИ и позиции защиты. А затем эти одиночки идут ко мне, тоже по одному, хотя заданы атаки по 40 чел:
p.s. Пишу все что нашел сюда. Если не в тему, могу перенести))) Хотя эти проблемы тоже мб связаны со скриптом...
|
|
| |
|
Gamerus | Дата: Суббота, 09.02.2013, 15:19 | Сообщение # 36 |
Ополченец
Группа: Проверенные
Сообщений: 27
Награды: 0
Репутация: 0
Статус: Offline
| Вопрос не совсем по теме. Можно ли копировать - переносить карты? Создалась такая необходимость - увеличит площадь уже готовой карты, понятно, что проще создать новую с нужными размерами и туда вклеить необходимое. Если можно, то как?
|
|
| |
|
Krom | Дата: Суббота, 09.02.2013, 16:59 | Сообщение # 37 |
Воитель
Группа: Супер Модераторы
Сообщений: 2526
Награды: 25
Репутация: 153
Статус: Offline
| andreus, это проблемка с ИИ - постараемся исправить. В 4179 такого не было.
Gamerus, пока нельзя, но к рлизу такую штуку сделаем в редакторе.
Нашли баг в КаМ Ремейке? Отправьте отчет на с пометками, желательно на английском, в какой версии, что и когда случилось, приложите реплей или сохраненную игру в которой этот баг воспроизводится.
|
|
| |
|
Gamerus | Дата: Воскресенье, 10.02.2013, 03:45 | Сообщение # 38 |
Ополченец
Группа: Проверенные
Сообщений: 27
Награды: 0
Репутация: 0
Статус: Offline
| Ещё вопрос не в тему, почти. Можно ли вставить свои звуки в игровой процесс? Пример: по сюжету в определённое время войска ИИ игрока выходят на позицию, строятся, играет волынка, пошли в атаку. Как это сделать? И ещё - голос за кадром - было бы неплохо... Добавлено (10.02.2013, 03:45) --------------------------------------------- Блин, как плохо без полноценного редактора миссий под ремейк! Эти танцы с бубном уже укачали....
|
|
| |
|
Krom | Дата: Воскресенье, 10.02.2013, 12:13 | Сообщение # 39 |
Воитель
Группа: Супер Модераторы
Сообщений: 2526
Награды: 25
Репутация: 153
Статус: Offline
| Gamerus, звуков пока не будет, а с речью сам понимаешь - нужен механизм переводов на те же 16 языков - пока не в приоритете.
Принимаются обоснованные предложения по улучшениям редактора в "полноценный". )
Нашли баг в КаМ Ремейке? Отправьте отчет на с пометками, желательно на английском, в какой версии, что и когда случилось, приложите реплей или сохраненную игру в которой этот баг воспроизводится.
|
|
| |
|
Gamerus | Дата: Воскресенье, 10.02.2013, 16:59 | Сообщение # 40 |
Ополченец
Группа: Проверенные
Сообщений: 27
Награды: 0
Репутация: 0
Статус: Offline
| Ну, кому надо - нехай сами переводят. А так пусть наслаждаются силой и красотой русского языка!
|
|
| |
|
Krom | Дата: Вторник, 12.02.2013, 21:57 | Сообщение # 41 |
Воитель
Группа: Супер Модераторы
Сообщений: 2526
Награды: 25
Репутация: 153
Статус: Offline
| Gamerus, запомню и процитирую тебе, когда будешь спрашивать документацию по коду или разъяснения по скриптам ))))) "Ну, кому надо - нехай сами переводят. А так пусть наслаждаются силой и красотой английского языка!" *шучу
Нашли баг в КаМ Ремейке? Отправьте отчет на с пометками, желательно на английском, в какой версии, что и когда случилось, приложите реплей или сохраненную игру в которой этот баг воспроизводится.
|
|
| |
|
Gamerus | Дата: Среда, 13.02.2013, 17:41 | Сообщение # 42 |
Ополченец
Группа: Проверенные
Сообщений: 27
Награды: 0
Репутация: 0
Статус: Offline
| А нехорошо быть злопамятным!... Хотя - не напугаете, 99,9 % всего софта переведено на русский язык далеко не авторами. Взять тот же Windows в 90-е годы... Ладно, есть вопрос: допустим по сюжету определённая группа войск ИИ игрока должна в определённое время от какого-то события, скажем - от старта, перейти в нужную точку и остановиться там. Как это сделать? Мною за короткое время был изучен скриптовый язык, на котором написан КаМ, честно говоря очень удивлён мягко сказать незамысловатостью, играя подозревал большее. К примеру - так и не нашёл на картах каких-либо рестрикторов, хотя в существовании последних был просто уверен. Ещё подозревал что ИИ следит за игроком и от его состояния (накопление ресурсов, численность юнитов и пр.) меняет тактику. Увы, этого нет, а жаль...
Есть предложение - создать тему на форуме ремейка где можно будет обнародовать необходимые и интересные скриптовые решения с кратким описанием. Народу будет куда проще творить, можно сказать - как из кубиков начинать делать индивидуальные проекты. Толк, думается, из этого будет. Беру себя в пример, рисование карт - детская забава, написание миссии в стиле ВиМ или ВК не увлекает, слишком просто, очень хочется более изощрённого. Может таким образом упростить творчество?
Сообщение отредактировал Gamerus - Среда, 13.02.2013, 17:49 |
|
| |
|
Jery | Дата: Среда, 13.02.2013, 20:05 | Сообщение # 43 |
Мечник
Группа: Модераторы
Сообщений: 568
Награды: 2
Репутация: 50
Статус: Offline
| Скриптовый язык в данный момент позволяет делать то, что ты хочешь. UnitOrderWalk позволяет отправить конкретную группу в конкретную точку. У тебя есть событие OnTick, в которую можно дописать логику чего угодно от круглых или прямоугольных зон, до тотального контроля за каждым юнитом, знай только перехватывай события. Попробую привести пример скрипта, только сформулируй точно задачу.
PS: Винду всегда переводили люди нанятые microsoft'ом, что сейчас что в 90ые годы.
Добавлено (13.02.2013, 20:05) --------------------------------------------- Плохой парсер паскаля! В нем нельзя объявить функцию, потому что когда я пытаюсь вернуть значение он думает что вызываю эту функцию!
Код var Hero: Integer; GroupArr: array[0..100] of integer; GroupCounter: integer; //int Actions.GiveGroup //(int Player, int UType, int X, int Y, int FDir, int Count, int PerRow); //Da ya lublu pisat na C++ =)
procedure MyGiveGroup(Player:integer; UType:integer; X:integer; Y:integer; FDir:integer; Count:integer; PerRow:integer; var return:integer); var temp:integer; begin temp:=Actions.GiveGroup(Player, UType, X, Y, FDir, Count, PerRow); if temp<>-1 then begin GroupArr[GroupCounter]:=temp; GroupCounter:=GroupCounter+1; end; return:=temp; end;
procedure OnMissionStart(); var i: integer; begin GroupCounter:= 0; MyGiveGroup(0,26,10,54,1,1,1, Hero); if Hero=-1 then Actions.GiveUnit(0,1,1,1,1); MyGiveGroup(1,14,54, 20, 5, 30, 6, i); end;
procedure OnTick(); var i:integer; begin if ((States.GameTime > 20) and (States.GroupDead(Hero))) then Actions.Defeat(0); if (States.GameTime = 100) then for i:=0 to GroupCounter do Actions.GroupOrderWalk(GroupArr[i], 32, 32, 1); end; Осуществлен, контроль за первыми 100 группами добавленными с помощью GiveGroup. Им можно отдавать общие приказы. Собственно можешь вставить этот код в карту 64Х64 и посмотреть что будет или я выложу саму карту. Если отслеживать события OnWarriorEquipped и добавлять начальные отряды скриптами, то можно контролировать абсолютно все группы на карте. Если отслеживать смерть, обернуть экшены сплит и линк, то можно еще и исключать из массива уничтоженные группы. А если хорошенько подумать и реализовать хорошую структуру вместо массива для хранения ID групп, то можно хранить неогранниченное кол-во групп, и быстро обращаться к любой. Я сильно над этой темой не парился и просто сделал массив на 100 интов.
Не объявляй своих функций, они не будут работать (интерпретатор убогий). Если тебе нужно вернуть значение, передавай параметр по ссылке в процедуру, как сделано у меня в MyGiveGroup.
И еще хотелось бы добавить, если этот интерпретатор поддерживает перечисления, то можно попробовать сделать типы юнитов не по ID а нормальными осмысленными названиями.
«Художник не тогда знает, что он достиг совершенства, когда нечего добавить, но когда нечего больше отнять». (Антуан де Сент-Экзюпери)
Сообщение отредактировал Jery - Среда, 13.02.2013, 20:43 |
|
| |
|
Krom | Дата: Среда, 13.02.2013, 21:17 | Сообщение # 44 |
Воитель
Группа: Супер Модераторы
Сообщений: 2526
Награды: 25
Репутация: 153
Статус: Offline
| Jery, что-то мне подсказывает, что ты неверно функцию объявлял и использовал. Классически паскаль использовал для возврата или имя ф-ии или Result. Второй вариант предпочтительнее (т.к. меньше путает). Вероятно PascalScript использует 2й вариант. Ты пробовал с Result := ?
Свои процедуры точно работают и функции тоже должны по идее ) Перечисления поддерживаются, но я пока не хочу их добавлять, отчасти из-за преемственности с DAT скриптами, отчасти из-за сложностей с сохранением/загрузкой нестандартных типов.
Нашли баг в КаМ Ремейке? Отправьте отчет на с пометками, желательно на английском, в какой версии, что и когда случилось, приложите реплей или сохраненную игру в которой этот баг воспроизводится.
|
|
| |
|
Krom | Дата: Среда, 13.02.2013, 21:20 | Сообщение # 45 |
Воитель
Группа: Супер Модераторы
Сообщений: 2526
Награды: 25
Репутация: 153
Статус: Offline
| Gamerus, то что ты описал отлично выражается в DAT скрипте, создать нового ИИ, дать ему 1 группу войск и указать ADD_ATTACK с задержкой и целью. Примитивно, но эффективно. Так весь ИИ КаМ устроен. А если не видно разницы (как ты говоришь, что сам думал что ИИ куда изощренее), значит свою задачу КаМ ИИ выполнял на все 100% )
Нашли баг в КаМ Ремейке? Отправьте отчет на с пометками, желательно на английском, в какой версии, что и когда случилось, приложите реплей или сохраненную игру в которой этот баг воспроизводится.
|
|
| |
|