[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 10 из 11
  • «
  • 1
  • 2
  • 8
  • 9
  • 10
  • 11
  • »
Модератор форума: Jery  
Форум » Knights and Merchants: Remake » Идеи и предложения » Скрипты
Скрипты
JeryДата: Воскресенье, 10.03.2013, 01:26 | Сообщение # 136
Мечник
Группа: Модераторы
Сообщений: 568
Награды: 2
Репутация: 50
Статус: Offline
Изначально одной из целей(по моему мнению) динамических скриптов предполагалась возможность написать полноценный кастомный ИИ, который мог бы оценивать ситуацию и делать действия. А если он никак не может узнать где строить каменоломню или лесника(хотя с лесником проще), то развитие города ИИ написать неполучится =) Только логику генерала. Хотя всегда можно просто "дарить" скриптами камень ИИшнику =)

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

Сообщение отредактировал Jery - Воскресенье, 10.03.2013, 01:39
 
KromДата: Воскресенье, 10.03.2013, 09:50 | Сообщение # 137
Воитель
Группа: Супер Модераторы
Сообщений: 2526
Награды: 25
Репутация: 153
Статус: Offline
Jery, цель динамических скриптов не скриптование ИИ, а скриптование миссии. С ИИ все и так достаточно сложно ..

Нашли баг в КаМ Ремейке? Отправьте отчет на с пометками, желательно на английском, в какой версии, что и когда случилось, приложите реплей или сохраненную игру в которой этот баг воспроизводится.
 
AlexandrVДата: Понедельник, 11.03.2013, 19:11 | Сообщение # 138
Воитель
Группа: Проверенные
Сообщений: 1320
Награды: 4
Репутация: 33
Статус: Offline
Jery, А есть скрипт которы бы возникал каждый раз когда в складе любой ресурс увеличивается на 1
 
KromДата: Понедельник, 11.03.2013, 19:53 | Сообщение # 139
Воитель
Группа: Супер Модераторы
Сообщений: 2526
Награды: 25
Репутация: 153
Статус: Offline
AlexandrV, нету, т.к. таких событий был бы вагон. Не рекомендую это отслеживать.

Нашли баг в КаМ Ремейке? Отправьте отчет на с пометками, желательно на английском, в какой версии, что и когда случилось, приложите реплей или сохраненную игру в которой этот баг воспроизводится.
 
AlexandrVДата: Понедельник, 11.03.2013, 21:48 | Сообщение # 140
Воитель
Группа: Проверенные
Сообщений: 1320
Награды: 4
Репутация: 33
Статус: Offline
Krom, мне нужно использовать этот скрипт но в какой процедуре
 
(States.StatResourceProducedCount(0,3) = 50) and (States.StatResourceProducedCount(0,4) = 50)

тик не подходит вот целый скрипт

var
 b1,b2,b3,b4:boolean;
procedure OnTick;   
begin   
  if (b1 = true)and(b2 = true) then Actions.PlayerWin([0],true);
  if (b3 = true) then Actions.PlayerDefeat(0);  
end;

procedure OnHouseLost;
begin
  if (States.StatHouseTypeCount(0,11) = 0)and(States.StatHouseTypeCount(0,14) = 0)and(States.StatHouseTypeCount(0,0) = 0) then b3:=true; else b3:=false;
end;

procedure OnHouseDestroyed;
begin
  if (States.StatHouseTypeCount(1,11) = 0)and(States.StatHouseTypeCount(1,14) = 0)and(States.StatHouseTypeCount(1,0) = 0) then b1:=true; else b1:=false;
end;

procedure OnHouseBuilt;
begin
  if (States.StatHouseTypeCount(0,5) = 3) and (States.StatHouseTypeCount(0,4) = 3) and (States.StatResourceProducedCount(0,3) = 50) and (States.StatResourceProducedCount(0,4) = 50) then b2:=true; else b2:=false;
end;

Добавлено (11.03.2013, 20:24)
---------------------------------------------
Krom

var
 b1,b2,b3,b4:boolean;
procedure OnTick;   
begin
  if (States.StatResourceProducedCount(0,3) = 50) and (States.StatResourceProducedCount(0,4) = 50) then b4:=true else b4:=false;   
  if (b1 = true)and(b2 = true)and(b4 = true) then Actions.PlayerWin([0],true);
  if b3 = true then Actions.PlayerDefeat([0]);  
end;

procedure OnHouseLost;
begin
  if (States.StatHouseTypeCount(0,11) = 0)and(States.StatHouseTypeCount(0,14) = 0)and(States.StatHouseTypeCount(0,0) = 0) then b3:=true; else b3:=false;
end;

procedure OnHouseDestroyed;
begin
  if (States.StatHouseTypeCount(1,11) = 0)and(States.StatHouseTypeCount(1,14) = 0)and(States.StatHouseTypeCount(1,0) = 0) then b1:=true; else b1:=false;
end;

procedure OnHouseBuilt;
begin
  if (States.StatHouseTypeCount(0,5) = 3) and (States.StatHouseTypeCount(0,4) = 3) then b2:=true; else b2:=false;
end;

Почему скрипт не работает ошибка в типах скрин выслать не могу хотя вот ошибка

[Error](7:46): Type mismatch 

Скрипты начинаются с 1 строки

Добавлено (11.03.2013, 21:48)
---------------------------------------------
Krom, Почему проблемы в скрипте в чем проблема

var
 b1,b2,b3,b4:boolean;
procedure OnTick;   
begin
  if (States.StatResourceProducedCount(0,3) = 50) and (States.StatResourceProducedCount(0,4) = 50) then b4:=true else b4:=false;   
  if (b1 = true)and(b2 = true)and(b4 = true) then Actions.PlayerWin([0],true);
  if b3 = true then Actions.PlayerDefeat(0);  
end;

procedure OnHouseLost;
begin
  if (States.StatHouseTypeCount(0,11) = 0)and(States.StatHouseTypeCount(0,14) = 0)and(States.StatHouseTypeCount(0,0) = 0) then begin b3:=true; end else begin b3:=false; end;
end;

procedure OnHouseDestroyed;
begin
  if (States.StatHouseTypeCount(1,11) = 0)and(States.StatHouseTypeCount(1,14) = 0)and(States.StatHouseTypeCount(1,0) = 0) then begin b1:=true; end else begin b1:=false; end;
end;

procedure OnHouseBuilt;
begin
  if (States.StatHouseTypeCount(0,5) = 3) and (States.StatHouseTypeCount(0,4) = 3) then begin b2:=true; end else begin b2:=false; end;
end;

 
JeryДата: Понедельник, 11.03.2013, 22:03 | Сообщение # 141
Мечник
Группа: Модераторы
Сообщений: 568
Награды: 2
Репутация: 50
Статус: Offline
Цитата (AlexandrV)
if b3 = true then Actions.PlayerDefeat([0]);
Здесь должно быть без квадратных скобочек.

Во всех событиях, в которые передаются аргументы они ОБЯЗАТЕЛЬНО должны передаваться. Типа так:

Код
procedure OnHouseDestroyed(aHouseID: Integer; //HouseID здания, которое было уничтожено.  
aDestroyerIndex: Integer; //Индекс игрока, который уничтожил.  
aFullyBuilt: Boolean //True если здание было достроенным.  
);  
var b:boolean;
begin  
     b:=true;
end;


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

Сообщение отредактировал Jery - Понедельник, 11.03.2013, 22:06
 
AlexandrVДата: Понедельник, 11.03.2013, 22:31 | Сообщение # 142
Воитель
Группа: Проверенные
Сообщений: 1320
Награды: 4
Репутация: 33
Статус: Offline
Здесь должно быть без квадратных скобочек и все будет ок.

var
b1,b2,b3,b4:boolean;
procedure OnTick;
begin
if (States.StatResourceProducedCount(0,3) = 50) and (States.StatResourceProducedCount(0,4) = 50) then b4:=true else b4:=false;
if (b1 = true)and(b2 = true)and(b4 = true) then Actions.PlayerWin([0],true);
if b3 = true then Actions.PlayerDefeat(0);
end;

procedure OnHouseLost;
begin
if (States.StatHouseTypeCount(0,11) = 0)and(States.StatHouseTypeCount(0,14) = 0)and(States.StatHouseTypeCount(0,0) = 0) then begin b3:=true; end else begin b3:=false; end;
end;

procedure OnHouseDestroyed;
begin
if (States.StatHouseTypeCount(1,11) = 0)and(States.StatHouseTypeCount(1,14) = 0)and(States.StatHouseTypeCount(1,0) = 0) then begin b1:=true; end else begin b1:=false; end;
end;

procedure OnHouseBuilt;
begin
if (States.StatHouseTypeCount(0,5) = 3) and (States.StatHouseTypeCount(0,4) = 3) then begin b2:=true; end else begin b2:=false; end;
end;

у меня и так не в квадратных

Добавлено (11.03.2013, 22:11)
---------------------------------------------
[/size][size=15][/size][size=10]procedure OnHouseDestroyed(aHouseID: Integer; //HouseID здания, которое было уничтожено.
aDestroyerIndex: Integer; //Индекс игрока, который уничтожил.
aFullyBuilt: Boolean //True если здание было достроенным.
);
var b:boolean;
begin
b:=true;
end;

[size=14][/size]

Что ты имеешь ввиду

Добавлено (11.03.2013, 22:18)
---------------------------------------------
Кажется понял но 
procedure OnHouseLost;
begin
  if (States.StatHouseTypeCount(0,11) = 0)and(States.StatHouseTypeCount(0,14) = 0)and(States.StatHouseTypeCount(0,0) = 0) then begin b3:=true; end else begin b3:=false; end;
end;

procedure OnHouseDestroyed;
begin
  if (States.StatHouseTypeCount(1,11) = 0)and(States.StatHouseTypeCount(1,14) = 0)and(States.StatHouseTypeCount(1,0) = 0) then begin b1:=true; end else begin b1:=false; end;
end;

procedure OnHouseBuilt;
begin
  if (States.StatHouseTypeCount(0,5) = 3) and (States.StatHouseTypeCount(0,4) = 3) then begin b2:=true; end else begin b2:=false; end;
end;
как я тебе в скобочках сразу несколько значений на 

ID уничтоженого здание сделаю

Добавлено (11.03.2013, 22:31)
---------------------------------------------
var
 b1,b2,b3,b4,b5:boolean;
procedure OnTick;   
begin
  if (States.StatResourceProducedCount(0,3) = 50) and (States.StatResourceProducedCount(0,4) = 50) then b4:=true else b4:=false;   
  if (b1 = true)and(b2 = true)and(b4 = true)and(b5 = true) then Actions.PlayerWin([0],true);
  if b3 = true then Actions.PlayerDefeat(0);  
end;

procedure OnHouseLost(11,1,true);
begin
  if (States.StatHouseTypeCount(0,14) = 0)and(States.StatHouseTypeCount(0,0) = 0) then begin b3:=true; end else begin b3:=false; end;
end;

procedure OnHouseDestroyed(11,0,true);
begin
  if (States.StatHouseTypeCount(1,14) = 0)and(States.StatHouseTypeCount(1,0) = 0) then begin b1:=true; end else begin b1:=false; end;
end;

procedure OnHouseBuilt(5);
begin
  if States.StatHouseTypeCount(0,5) = 3 then begin b2:=true; end else begin b2:=false; end;
end;

procedure OnHouseBuilt(5);
begin
if States.StatHouseTypeCount(0,4) = 3 then begin b5 := true; end else begin b5:=false; end;  
end;

ну а теперь че не так



Сообщение отредактировал AlexandrV - Понедельник, 11.03.2013, 22:12
 
JeryДата: Вторник, 12.03.2013, 04:11 | Сообщение # 143
Мечник
Группа: Модераторы
Сообщений: 568
Награды: 2
Репутация: 50
Статус: Offline
Что я тебе могу сказать, читай внимательно все что писали. Про квадратные скобочки я указал, конкретную строчку где их не не должно быть. Про передачу аргументов это уже вторая история, там ты должен выбирать имена переменным а не значения.


Код
procedure OnPlayerDefeated(aIndex: Integer);
begin
       if aIndex = 2 then Actions.ShowMsg(0, States.Text(2));
       if aIndex = 3 then Actions.ShowMsg(0, States.Text(3));
       if aIndex = 4 then Actions.ShowMsg(0, States.Text(4));
end;
Тоже самое что
Код
procedure OnPlayerDefeated(index_proigravshego_igroka: Integer);
begin
if index_proigravshego_igroka = 2 then Actions.ShowMsg(0, States.Text(2));
if index_proigravshego_igroka = 3 then Actions.ShowMsg(0, States.Text(3));
if index_proigravshego_igroka = 4 then Actions.ShowMsg(0, States.Text(4));
end;

Посмотри как в паскале объявляются процедуры и пойми что ты делаешь то же самое.


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

Сообщение отредактировал Jery - Вторник, 12.03.2013, 04:25
 
AlexandrVДата: Вторник, 12.03.2013, 04:21 | Сообщение # 144
Воитель
Группа: Проверенные
Сообщений: 1320
Награды: 4
Репутация: 33
Статус: Offline
Jery, У меня не стоит квадратных скобках при том ошибка в 10 строке то есть вот здесь procedure OnHouseLost(11,1,true);
 
JeryДата: Вторник, 12.03.2013, 04:26 | Сообщение # 145
Мечник
Группа: Модераторы
Сообщений: 568
Награды: 2
Репутация: 50
Статус: Offline
Все отстань я устал. Читай все уже написано.

«Художник не тогда знает, что он достиг совершенства, когда нечего добавить, но когда нечего больше отнять». (Антуан де Сент-Экзюпери)
 
AlexandrVДата: Вторник, 12.03.2013, 04:42 | Сообщение # 146
Воитель
Группа: Проверенные
Сообщений: 1320
Награды: 4
Репутация: 33
Статус: Offline
Jery, Сделал вот так

procedure OnTick;
var
 b1,b2,b3,b4,b5:boolean;   
begin
  if States.StatHouseTypeCount(0,5) = 3 then begin b2:=true; end else begin b2:=false; end;
  if States.StatHouseTypeCount(0,4) = 3 then begin b5 := true; end else begin b5:=false; end; 
  if (States.StatHouseTypeCount(1,11) = 0)and(States.StatHouseTypeCount(1,14) = 0)and(States.StatHouseTypeCount(1,0) = 0) then begin b1:=true; end else begin b1:=false; end;
  if (States.StatHouseTypeCount(0,11) = 0)and(States.StatHouseTypeCount(0,14) = 0)and(States.StatHouseTypeCount(0,0) = 0) then begin b3:=true; end else begin b3:=false; end;
  if (States.StatResourceProducedCount(0,3) = 50) and (States.StatResourceProducedCount(0,4) = 50) then b4:=true else b4:=false;   
  if (b1 = true)and(b2 = true)and(b4 = true)and(b5 = true) then Actions.PlayerWin([0],true);
  if b3 = true then Actions.PlayerDefeat(0);  
end;

в принципи одно и тоже. а можно перед победой и поражением ставить интервал определенного времени чтобы успеть пррочитать сообщения есть For но боюсь этот способ привидет к зависанию игры если сделать вот так например

procedure OnTick;
var
 b1,b2,b3,b4,b5:boolean;
i:integer;  
begin
  if States.StatHouseTypeCount(0,5) = 3 then begin b2:=true; end else begin b2:=false; end;
  if States.StatHouseTypeCount(0,4) = 3 then begin b5 := true; end else begin b5:=false; end; 
  if (States.StatHouseTypeCount(1,11) = 0)and(States.StatHouseTypeCount(1,14) = 0)and(States.StatHouseTypeCount(1,0) = 0) then begin b1:=true; end else begin b1:=false; end;
  if (States.StatHouseTypeCount(0,11) = 0)and(States.StatHouseTypeCount(0,14) = 0)and(States.StatHouseTypeCount(0,0) = 0) then begin b3:=true; end else begin b3:=false; end;
  if (States.StatResourceProducedCount(0,3) = 50) and (States.StatResourceProducedCount(0,4) = 50) then b4:=true else b4:=false;   
  if (b1 = true)and(b2 = true)and(b4 = true)and(b5 = true) then begin
  Actions.ShowMsg(0, States.Text('Урааааааааа. Теперь мы можем перейти в наступление на Карла'); 
  For i := 0 to 10000 do begin
  end;
  Actions.PlayerWin([0],true);
  end;
  if b3 = true then begin
  Actions.ShowMsg(0, States.Text('О нет наш город разрушен, а вражеские войска сумели прорвать оборону нашего королевства так что мы проиграли '); 
  For i := 0 to 10000 do begin
  end;
  Actions.PlayerDefeat(0);
  end; 
end;
 
JeryДата: Вторник, 12.03.2013, 05:51 | Сообщение # 147
Мечник
Группа: Модераторы
Сообщений: 568
Награды: 2
Репутация: 50
Статус: Offline
Мдаа, ну делай как знаешь. Это совсем не то о чем я говорил.

«Художник не тогда знает, что он достиг совершенства, когда нечего добавить, но когда нечего больше отнять». (Антуан де Сент-Экзюпери)
 
AlexandrVДата: Вторник, 12.03.2013, 05:58 | Сообщение # 148
Воитель
Группа: Проверенные
Сообщений: 1320
Награды: 4
Репутация: 33
Статус: Offline
Jery, я не понял тебе а задержку как сделать
 
JeryДата: Вторник, 12.03.2013, 05:59 | Сообщение # 149
Мечник
Группа: Модераторы
Сообщений: 568
Награды: 2
Репутация: 50
Статус: Offline
Не знаю, у меня старкрафт новый загрузился, я ушел.

«Художник не тогда знает, что он достиг совершенства, когда нечего добавить, но когда нечего больше отнять». (Антуан де Сент-Экзюпери)
 
AlexandrVДата: Вторник, 12.03.2013, 06:02 | Сообщение # 150
Воитель
Группа: Проверенные
Сообщений: 1320
Награды: 4
Репутация: 33
Статус: Offline
Какой еще старкрафт

Добавлено (12.03.2013, 06:02)
---------------------------------------------
Krom, Скажи мне скрипты чтобы сделать чит коды тоесть скрипты на проверку выделения ресурсов 
И как сделать задержку

 
Форум » Knights and Merchants: Remake » Идеи и предложения » Скрипты
  • Страница 10 из 11
  • «
  • 1
  • 2
  • 8
  • 9
  • 10
  • 11
  • »
Поиск: