[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 11
  • 1
  • 2
  • 3
  • 10
  • 11
  • »
Модератор форума: Jery  
Форум » Knights and Merchants: Remake » Идеи и предложения » Скрипты
Скрипты
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, открывать область карты не с начала с текущими скриптами - никак. С новыми - можно будет.

Нашли баг в КаМ Ремейке? Отправьте отчет на с пометками, желательно на английском, в какой версии, что и когда случилось, приложите реплей или сохраненную игру в которой этот баг воспроизводится.
 
Форум » Knights and Merchants: Remake » Идеи и предложения » Скрипты
  • Страница 1 из 11
  • 1
  • 2
  • 3
  • 10
  • 11
  • »
Поиск: