[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 5 из 11«12345671011»
Модератор форума: Jery 
Форум » Knights and Merchants: Remake » Идеи и предложения » Скрипты
Скрипты
JeryДата: Понедельник, 25.02.2013, 15:00 | Сообщение # 61
Мечник
Группа: Модераторы
Сообщений: 568
Награды: 2
Репутация: 50
Статус: Offline
Код
procedure OnTick;
begin
....
              if States.HouseResourceAmount(СКЛАД, РЕСУРС) = X then             
                Actions.PlayerWin(HouseOwner(СКЛАД), false);
....
end;
Actions.PlayerWin(HouseOwner(СКЛАД), false); возможно это не будет работать из-за того, что неправильно передан игрок, который должен победить. Но логики действий это не меняет.

Остается только каким-либо образом присвоить переменной СКЛАД собственно склад =) И возможно засунуть условный оператор в цикл, чтобы пробегаться по всем складам.

Решение второй проблемы:
Код
procedure OnHouseBuilt(builded);
begin
            for i:=0 to MAX_PLAYER_COUNT do
            begin
                if States.PlayerEnabled(i) and States.StatHouseTypeCount(i, "ТИП ПОСТРОЙКИ") > X then
                Actions.PlayerWin(i, false);
            end
end;
Ну и собственно надо где-то объявить i и константу MAX_PLAYER_COUNT и в принципе все. Возможно будут проблемы с AND в условии, если в ПаскальСкрипте нет сокращенного вычисления логических функций. Тогда придется сделать два условия одно вложено в другое.

Третья проблема решается точно так же =)
Цитата
PlayerWinSet specified player(s) victorious, and all team members of those player(s) if the 2nd parameter TeamVictory is set to true. All players who were not set to victorious are set to defeated.
 Т.е. эта процедура вызывает победу для всех перечисленных игроков, а для остальных поражение. Если нужно точечно задать поражение, а победиших еще нет то нужно использовать:
Цитата
PlayerDefeatProclaims player defeated1 - player index


«Художник не тогда знает, что он достиг совершенства, когда нечего добавить, но когда нечего больше отнять». (Антуан де Сент-Экзюпери)

Сообщение отредактировал Jery - Четверг, 07.03.2013, 02:10
 
KromДата: Понедельник, 25.02.2013, 15:00 | Сообщение # 62
Воитель
Группа: Супер Модераторы
Сообщений: 2514
Награды: 25
Репутация: 153
Статус: Offline
Jery, все верно, только пара уточнений: PascalScript использует сокращенное вычисление логических выражений, и сравнение надо обернуть в скобки - if States.PlayerEnabled(i) and (States.StatHouseTypeCount(i, "ТИП ПОСТРОЙКИ") > X) then

Нашли баг в КаМ Ремейке? Отправьте отчет на contact@kamremake.com с пометками, желательно на английском, в какой версии, что и когда случилось, приложите реплей или сохраненную игру в которой этот баг воспроизводится.
 
AlexandrVДата: Понедельник, 25.02.2013, 15:00 | Сообщение # 63
Гвардеец
Группа: Проверенные
Сообщений: 1308
Награды: 4
Репутация: 29
Статус: Offline
Jery, все понятно но где писать и какой файл создать чтобы кам ремейк читал

Добавлено (07.03.2013, 20:11)
---------------------------------------------
Krom, Добавь эти скрипты в редактор миссий Левина пожалуйста

Если игрок насобирает определенное количество ресурсов то победа. 

Если игрок построит определенное количество построек определенного типа например 10 золотых рудников то победа. 

в условия победы их нужно добавить. Это позволит мне создать 6 миссию. в которой надо накопить 50 золотой и железной руды, построить 5 золотых и 5 железных шахт и отбить атаку врага. или скажите как можно это сделать и что для этого нужно.


Скайп - borisov.alexandr.7_1
 
JeryДата: Понедельник, 25.02.2013, 15:00 | Сообщение # 64
Мечник
Группа: Модераторы
Сообщений: 568
Награды: 2
Репутация: 50
Статус: Offline
открываешь блокнотик начинаешь писать на паскале, сохраняешь файл <MapName>.script и закидываешь в папку с картой.

«Художник не тогда знает, что он достиг совершенства, когда нечего добавить, но когда нечего больше отнять». (Антуан де Сент-Экзюпери)
 
AlexandrVДата: Понедельник, 25.02.2013, 15:00 | Сообщение # 65
Гвардеец
Группа: Проверенные
Сообщений: 1308
Награды: 4
Репутация: 29
Статус: Offline
Но для этого нужно знать скрипты. Я не профиссионал в программирование чтобы разобраться в коде ремейка и писать скрипт.

Скайп - borisov.alexandr.7_1
 
andreusДата: Понедельник, 25.02.2013, 15:00 | Сообщение # 66
Sir James Vagabond
Группа: Администраторы
Сообщений: 3876
Награды: 21
Репутация: 391
Статус: Offline
на самом деле ничего сложного. Скрипт - последовательность команд типа if States.УСЛОВИЕ then Actions.ДЕЙСТВИЕ
Почитай вики http://code.google.com/p/castlesand/w/list - все будет ясно)


 
AlexandrVДата: Понедельник, 25.02.2013, 15:01 | Сообщение # 67
Гвардеец
Группа: Проверенные
Сообщений: 1308
Награды: 4
Репутация: 29
Статус: Offline
Непонятно что эти переменные означают и скрипты. 

andreus, Слушай ты можешь написать как сделать такой скрипт 

Если игрок насобирает определенное количество ресурсов то победа. 

Если игрок построит определенное количество построек определенного типа например 10 золотых рудников то победа. 

Если враг наберет определенное количество ресурсов или построит определенное количество построек определенного типа то поражения. 

а также написать как в скрипте пишется тип здания, число зданий, число и тип ресурсов.


Скайп - borisov.alexandr.7_1
 
andreusДата: Понедельник, 25.02.2013, 15:01 | Сообщение # 68
Sir James Vagabond
Группа: Администраторы
Сообщений: 3876
Награды: 21
Репутация: 391
Статус: Offline
Цитата (AlexandrV)
Если игрок построит определенное количество построек определенного типа например 10 золотых рудников то победа.


procedure OnTick;
begin
if States.StatHouseTypeCount(0,5) = 10 then Actions.PlayerWin(0,true); //если игроком с индексом 0 построено 10 золотых рудников то игрок 0 и его команда побеждают
end;

Цитата (andreus)
Если игрок насобирает определенное количество ресурсов то победа.


procedure OnTick;
begin
if States.StatResourceProducedCount(0,1) = 1000 then Actions.PlayerWin(0,true); //если игроком с индексом 0 произведено 1000 камня то игрок 0 и его команда побеждают
end;

Цитата (AlexandrV)
Если враг наберет определенное количество ресурсов или построит определенное количество построек определенного типа то поражения.


те же команды только индекс игрока меняй.

Как определить индекс игрока: в редакторе карт в ремейке указаны номера игроков - от 1 до 8. Индексы соответственно от 0 до 7. Т.е. игрок №4 имеет индекс в скрипте 3.
Как задать тип ресурса: заходишь в склад и смотришь. 0 - бревно, 1 - камень, 2 - доска и т.д.
Как задать тип здания:

13 - школа
27 - харчевня
14 - каменоломня
9 - лесник
0 - лесопилка
8 - ферма
22 - мельница
7 - пекарня
16 - свинарник
24 - колбаске
28 - бухлодельня
5 - золотая шахта
3 - угольная шахта
15 - выплавка золота
19 - оружейня
25 - дубильня
20 - доспешня
12 - конячке
4 - железная шахта
1 - выплавка железа
2 - кузница
10 - доспешня
21 - казармы
11 - склад
17 - башня
6 - рыбак
29 - рынок


 
AlexandrVДата: Понедельник, 25.02.2013, 15:01 | Сообщение # 69
Гвардеец
Группа: Проверенные
Сообщений: 1308
Награды: 4
Репутация: 29
Статус: Offline
andreus, 5 это получается золотой рудник

и 0 это 1 игрок тоесть команда такая

индекс игрока - 1

procedure OnTick; 
begin 
if States.StatHouseTypeCount(0,5) = 10 then Actions.PlayerWin(0,true); //если игроком с индексом 0 построено 10 золотых рудников то игрок 0 и его команда побеждают 
end; 

а это писать в блокноте и сохранять  Neme_Mission.Script

Спасибо большое тебе.


Скайп - borisov.alexandr.7_1

Сообщение отредактировал AlexandrV - Четверг, 07.03.2013, 22:03
 
andreusДата: Четверг, 07.03.2013, 22:44 | Сообщение # 70
Sir James Vagabond
Группа: Администраторы
Сообщений: 3876
Награды: 21
Репутация: 391
Статус: Offline
перенес обсуждение скриптов сюда.

 
AlexandrVДата: Четверг, 07.03.2013, 22:53 | Сообщение # 71
Гвардеец
Группа: Проверенные
Сообщений: 1308
Награды: 4
Репутация: 29
Статус: Offline
andreus, Слушай скажи а скрипты которое делает кам едит 9 будут работать вместе со скриптами NameMap.script

Скайп - borisov.alexandr.7_1
 
andreusДата: Четверг, 07.03.2013, 22:59 | Сообщение # 72
Sir James Vagabond
Группа: Администраторы
Сообщений: 3876
Награды: 21
Репутация: 391
Статус: Offline
KaM Edit работает только с .dat и .map

.script будет работать только в новой версии ремейка


 
KromДата: Четверг, 07.03.2013, 23:17 | Сообщение # 73
Воитель
Группа: Супер Модераторы
Сообщений: 2514
Награды: 25
Репутация: 153
Статус: Offline
Лучше вот так сделать, чтобы проверка шла только когда построен новый дом, а не каждый тик игры )

procedure OnHouseBuilt(aHouseID: Integer);
begin  
  if States.StatHouseTypeCount(0,5) = 10 then Actions.PlayerWin(0,true); //если игроком с индексом 0 построено 10 золотых рудников то игрок 0 и его команда побеждают  
end;


Нашли баг в КаМ Ремейке? Отправьте отчет на contact@kamremake.com с пометками, желательно на английском, в какой версии, что и когда случилось, приложите реплей или сохраненную игру в которой этот баг воспроизводится.
 
andreusДата: Четверг, 07.03.2013, 23:29 | Сообщение # 74
Sir James Vagabond
Группа: Администраторы
Сообщений: 3876
Награды: 21
Репутация: 391
Статус: Offline
Да, с OnHouseBuilt лучше, и вычислений компу меньше))

 
AlexandrVДата: Четверг, 07.03.2013, 23:42 | Сообщение # 75
Гвардеец
Группа: Проверенные
Сообщений: 1308
Награды: 4
Репутация: 29
Статус: Offline
Почемута скрипт в одиночных миссиях не работает

файл SKR06.script

сам скрипт procedure OnTick; begin
if (States.StatHouseTypeCount(0,5) = 5) and (States.StatHouseTypeCount(0,4) = 5) and (if States.StatResourceProducedCount(0,3) = 50) and (if States.StatResourceProducedCount(0,4) = 50) then Actions.PlayerWin(0,true);

end;

Ремейк версия r4179


Скайп - borisov.alexandr.7_1

Сообщение отредактировал AlexandrV - Пятница, 08.03.2013, 17:10
 
Форум » Knights and Merchants: Remake » Идеи и предложения » Скрипты
Страница 5 из 11«12345671011»
Поиск: