Скрипты
|
Krom | Дата: Воскресенье, 18.11.2012, 11:44 | Сообщение # 1 |
Воитель
Группа: Супер Модераторы
Сообщений: 2526
Награды: 25
Репутация: 153
Статус: Offline
| Была тут идея сделать скрипты для событий в игре, собственно она уже реализована в учебных миссиях и кампаниях - файл с расширением EVT. В нем указано что делать при каких событиях - например в учебной, при постройке школы показать сообщение про Харчевню, а в военной после поражения лучников врага показать сообщение про конных. Вот тут старая информация по скриптам: http://code.google.com/p/castlesand/wiki/MissionEvents
Нашли баг в КаМ Ремейке? Отправьте отчет на с пометками, желательно на английском, в какой версии, что и когда случилось, приложите реплей или сохраненную игру в которой этот баг воспроизводится.
|
|
| |
|
Krom | Дата: Воскресенье, 18.11.2012, 19:31 | Сообщение # 2 |
Воитель
Группа: Супер Модераторы
Сообщений: 2526
Награды: 25
Репутация: 153
Статус: Offline
| Так вот к чему это я - Обсуждали даже написание собственного языка скриптования, а ларчик просто открывался - есть готовые скриптовые языки для Делфи. В текстовом файле пишется код, который имеет доступ к игре и может это выглядеть примерно вот так:
Code program MissionScript;
begin if Time = 400 then ShowMessage(0, 1); //Show message to player_0
if HouseBuilt(0, 5) then //player_0 has built Tannery GiveWares(0, 8, 100); //Give player_0 100 Coal
if ((Time = 100) and UnitCount(0) >=30) or (WareCount(0,8) < 100) then //If player 0 has more than 30 units after 10sec or has less than 100 Coal Defeat(0); //Proclaim player_0 defeated end;
Нашли баг в КаМ Ремейке? Отправьте отчет на с пометками, желательно на английском, в какой версии, что и когда случилось, приложите реплей или сохраненную игру в которой этот баг воспроизводится.
|
|
| |
|
AntonP | Дата: Понедельник, 19.11.2012, 11:08 | Сообщение # 3 |
Дозорный
Группа: Проверенные
Сообщений: 339
Награды: 1
Репутация: 7
Статус: Offline
| Отлично, самое то.
Война и мир лучшая!
|
|
| |
|
Sazabi | Дата: Понедельник, 19.11.2012, 12:44 | Сообщение # 4 |
Ополченец
Группа: Проверенные
Сообщений: 21
Награды: 0
Репутация: 0
Статус: Offline
| А в мультиплеере скрипты чем помогут?
|
|
| |
|
Krom | Дата: Понедельник, 19.11.2012, 13:15 | Сообщение # 5 |
Воитель
Группа: Супер Модераторы
Сообщений: 2526
Награды: 25
Репутация: 153
Статус: Offline
| Sazabi, тут все зависит от фантазии картодела. Хочешь например сделать ИИ, которого игроки осаждают - и за каждого убитого воина давать игрокам по 3 золота. Хочешь сделать бонусы, первому кто построит здание какого-то типа - открывать кусочек карты. Возможности безграничны, надо только включить фантазию и убедить нас, что это будет работать и интересно другим игрокам.
Нашли баг в КаМ Ремейке? Отправьте отчет на с пометками, желательно на английском, в какой версии, что и когда случилось, приложите реплей или сохраненную игру в которой этот баг воспроизводится.
|
|
| |
|
dimasik468 | Дата: Понедельник, 19.11.2012, 16:26 | Сообщение # 6 |
Дозорный
Группа: Заблокированные
Сообщений: 244
Награды: 2
Репутация: 4
Статус: Offline
| Quote (Krom) Sazabi, тут все зависит от фантазии картодела. Хочешь например сделать ИИ, которого игроки осаждают - и за каждого убитого воина давать игрокам по 3 золота. Хочешь сделать бонусы, первому кто построит здание какого-то типа - открывать кусочек карты. Возможности безграничны, надо только включить фантазию и убедить нас, что это будет работать и интересно другим игрокам. было бы интересно, появилась бы возможность создания не совсем стандартных карт
skype: dimask468 - добавляйтесь для совместных игр в KaM Remake
|
|
| |
|
Krom | Дата: Среда, 28.11.2012, 13:54 | Сообщение # 7 |
Воитель
Группа: Супер Модераторы
Сообщений: 2526
Награды: 25
Репутация: 153
Статус: Offline
| Продолжаю оттачивать скрипты, вот так выглядит скрипт для учебной миссии:
Code var NextMsg: Integer; NextTime: Integer; MsgShown: array [0..29] of Boolean;
procedure Show(aMsg, aMsg2: Byte); begin if MsgShown[aMsg] then Exit; //Show messages only once
Actions.ShowMsg(0, aMsg); if aMsg2 <> 0 then begin NextMsg := aMsg2; NextTime := States.GameTime + 100; end; MsgShown[aMsg] := True; end;
procedure OnHouseBuilt(aIndex: Integer; aHouseType: Integer); begin if aIndex = 0 then //Make sure we process only human player case aHouseType of 13: Show(4,5); 27: Show(6,0); 14: Show(7,0); 9: Show(8,0); 0: Show(9,0); 6: Show(10,0); 8: Show(11,0); 22: Show(12,0); 7: Show(13,0); 28: Show(14,0); 16: Show(15,0); 24: Show(16,0); 21: Show(17,18); 19: Show(19,20); 25: Show(21,0); 20: Show(22,23); end; end;
procedure OnPlayerDefeated(aIndex: Integer); begin if aIndex = 1 then Actions.ShowMsg(0, 24); if aIndex = 2 then Actions.ShowMsg(0, 25); end;
begin if States.GameTime = 30 then Actions.ShowMsg(0,1); if States.GameTime = 160 then Actions.ShowMsg(0,2); if States.GameTime = 340 then Actions.ShowMsg(0,3);
if States.GameTime = NextTime then Actions.ShowMsg(0,NextMsg); end.
Поддерживаются глобальные переменные (NextMsg, NextTime, MsgShown) простых типов и массивы. Переменные запоминаются между вызовами скрипта и при сохранении/загрузке игры.
Обработчики событий выглядят вот так: procedure OnPlayerDefeated(aIndex: Integer); внутри код обработки события. Для каждого события обработчик вызывается отдельно (если построено 10 домов за 1сек то будет 10 вызовов обработчика).
Нашли баг в КаМ Ремейке? Отправьте отчет на с пометками, желательно на английском, в какой версии, что и когда случилось, приложите реплей или сохраненную игру в которой этот баг воспроизводится.
|
|
| |
|
AntonP | Дата: Среда, 28.11.2012, 17:00 | Сообщение # 8 |
Дозорный
Группа: Проверенные
Сообщений: 339
Награды: 1
Репутация: 7
Статус: Offline
| Krom, былобы замечательно если текст можно былобы писать свой, а не выбирать 20,21,22. Теперь по скрипту. Будетли возможность запретить игроку контролировать свою армию? Представьте, играете вы в миссию, приходит сообщение "Ваше войско демарализовано и дезертирует", у вас утрачивается контроль городом\войском на 20 секунд и ваше войско само разбегается в разные стороны:)) Будетли возможность динамически изменять отряду "владельца". Тоесть идет отряд игрока 1, и через 10 секунд отряд принадлежит игроку 4. Ну я в общем много чего могу вынести на рассмотрение, типо такого.
Теоретически можнобылобы уже делать миссии с заданиями не просто "Убить всех врагов", а например "переманить врага на свою сторону", "ограбить чужой город" в прямом смысле, или допустим союзник бот сможет при определенных условиях отдать вам свое войско. Но это всё детали.
Война и мир лучшая!
Сообщение отредактировал AntonP - Среда, 28.11.2012, 17:06 |
|
| |
|
Jery | Дата: Среда, 28.11.2012, 22:30 | Сообщение # 9 |
Мечник
Группа: Модераторы
Сообщений: 568
Награды: 2
Репутация: 50
Статус: Offline
| Нужно расширять API доступный картоделам. Я уже писал про это и даже выкладывал интерфейсы используемые в варкрафте. В данный момент API доступный картоделам слишком ограничен, это по сути события "здание построено", "здание потеряно", "юнит потерян", "игрок проиграл" ну и действий там тоже меньше десяти.
«Художник не тогда знает, что он достиг совершенства, когда нечего добавить, но когда нечего больше отнять». (Антуан де Сент-Экзюпери)
Сообщение отредактировал Jery - Среда, 28.11.2012, 22:44 |
|
| |
|
AlexandrV | Дата: Четверг, 29.11.2012, 06:48 | Сообщение # 10 |
Воитель
Группа: Проверенные
Сообщений: 1320
Награды: 4
Репутация: 33
Статус: Offline
| Code Теоретически можнобылобы уже делать миссии с заданиями не просто "Убить всех врагов", а например "переманить врага на свою сторону", "ограбить чужой город" в прямом смысле, или допустим союзник бот сможет при определенных условиях отдать вам свое войско. Но это всё детали.
Да Кром это надо бы сделать, но побольше целей и условий поражений добавить.
|
|
| |
|
Krom | Дата: Четверг, 29.11.2012, 09:46 | Сообщение # 11 |
Воитель
Группа: Супер Модераторы
Сообщений: 2526
Награды: 25
Репутация: 153
Статус: Offline
| AntonP, Текст нужно выбирать из LIBX файла, чтобы можно было делать локализации миссий.
Запрет управления армией .. неуверен что это стоит делать, надо обсуждать, я пока против. Но как вариант действия - нормально. То же насчет смены владельца.
Jery, Совершенно верно, надо расширять, а для этого надо предлагать и обсуждать идеи.
Возможно стоит идти от картоделов - то есть придумать и сделать карту, а для нее все необходимые события, состояния и действия добавить в скриптовый движок.
Кто хочет создать тему - идеи для скриптов? )
Нашли баг в КаМ Ремейке? Отправьте отчет на с пометками, желательно на английском, в какой версии, что и когда случилось, приложите реплей или сохраненную игру в которой этот баг воспроизводится.
|
|
| |
|
Gamerus | Дата: Вторник, 05.02.2013, 11:00 | Сообщение # 12 |
Ополченец
Группа: Проверенные
Сообщений: 27
Награды: 0
Репутация: 0
Статус: Offline
| Нужна небольшая помощь. Допустим по сценарию для сингла через 5 минут от старта на координатах 21, 8 должно появиться (или - высветиться) здание, допустим - хижина каменотёса. Первое и самое разумное, что пришло в ум: .................. !SET_HOUSE COUNTER 3000 // !SET_HOUSE 14 21 8 // .................. Конечно же, не работает, а то бы и меня здесь не было, первая строчка вообще игнорируется ремейком. Тот же вопрос для появлении отряда в нужном месте карты, типа - подмога пришла, по истечении определённого времени или же при определённом событии (последнее куда проще). Как это реализовать в скрипте? Подобный вопрос возникает при необходимости высветить часть карты в нужном месте с нужным диаметром не со старта, а при нужных обстоятельствах.
Сообщение отредактировал Gamerus - Вторник, 05.02.2013, 11:07 |
|
| |
|
Krom | Дата: Вторник, 05.02.2013, 11:49 | Сообщение # 13 |
Воитель
Группа: Супер Модераторы
Сообщений: 2526
Награды: 25
Репутация: 153
Статус: Offline
| Gamerus, подобный скрипт не заработает по той простой причине, что таких команд (в dat файле) игра не знает. Мы сейчас пишем новый скриптовый движок на основе PascalScript (см пример кода выше). Он будет доступен со следующей версии.
Добавление здания не так просто как кажется кстати, нужно предусмотреть множество нюансов (например, что если на месте кто-то стоит или уже что-то построено?). Мы подумаем как это сделать, но пока план таков, что здания добавлять нельзя, а можно только менять им владельцев.
Нашли баг в КаМ Ремейке? Отправьте отчет на с пометками, желательно на английском, в какой версии, что и когда случилось, приложите реплей или сохраненную игру в которой этот баг воспроизводится.
|
|
| |
|
Gamerus | Дата: Вторник, 05.02.2013, 12:13 | Сообщение # 14 |
Ополченец
Группа: Проверенные
Сообщений: 27
Награды: 0
Репутация: 0
Статус: Offline
| Krom, это я предполагал... лень было о своих предположениях писать. Но ладно, другой вариант - объект существует с 0, со старта, но скрыт, а в нужный момент высвечивается? Скорее всего тоже невозможно...
И ещё, повторюсь: ..... вопрос возникает при необходимости высветить часть карты в нужном месте с нужным диаметром не со старта, а при нужных обстоятельствах. Это тоже невозможно делать? А если по сценарию игры просто необходимо сделать подсказку или показать цель?Добавлено (05.02.2013, 12:13) --------------------------------------------- В принципе на некотором уровне первая проблема обходима... Уже написал т.ск. пробный эскиз.
|
|
| |
|
Krom | Дата: Вторник, 05.02.2013, 13:29 | Сообщение # 15 |
Воитель
Группа: Супер Модераторы
Сообщений: 2526
Награды: 25
Репутация: 153
Статус: Offline
| Gamerus, открывать область карты не с начала с текущими скриптами - никак. С новыми - можно будет.
Нашли баг в КаМ Ремейке? Отправьте отчет на с пометками, желательно на английском, в какой версии, что и когда случилось, приложите реплей или сохраненную игру в которой этот баг воспроизводится.
|
|
| |
|