Скрипты
|
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, Скажи мне скрипты чтобы сделать чит коды тоесть скрипты на проверку выделения ресурсов И как сделать задержку
|
|
| |
|