Вопросы по скриптам и динам. скриптам.
|
Alexandr_5 | Дата: Пятница, 20.06.2014, 14:01 | Сообщение # 91 |
Воитель
Группа: Проверенные
Сообщений: 1330
Награды: 4
Репутация: 33
Статус: Offline
| StatHouseTypeCount
Это как понимать а получения просто кооличество всех зданий у игрока нет возможности. Это значит что делать свой цикл для того чтобы получить все здания у игрока или AI
|
|
| | |
andreus | Дата: Пятница, 20.06.2014, 16:12 | Сообщение # 92 |
Sir James Vagabond
Группа: Администраторы
Сообщений: 3876
Награды: 21
Репутация: 391
Статус: Offline
| Цитата AlexandrV ( ) StatHouseTypeCount Это как понимать а получения просто кооличество всех зданий у игрока нет возможности. Это значит что делать свой цикл для того чтобы получить все здания у игрока или AI
HousesCount := length(States.PlayerGetAllHouses(aPlayer))
чудеса да и только)
Нашли баг на моей карте? Есть идеи по улучшению карт? Дайте мне знать
|
|
| | |
Alexandr_5 | Дата: Пятница, 20.06.2014, 16:43 | Сообщение # 93 |
Воитель
Группа: Проверенные
Сообщений: 1330
Награды: 4
Репутация: 33
Статус: Offline
| States.PlayerGetAllHouses а что это возвращает
|
|
| | |
andreus | Дата: Пятница, 20.06.2014, 16:49 | Сообщение # 94 |
Sir James Vagabond
Группа: Администраторы
Сообщений: 3876
Награды: 21
Репутация: 391
Статус: Offline
| Цитата AlexandrV ( ) States.PlayerGetAllHouses а что это возвращает возвращает ИД всех зданий игрока как массив
Нашли баг на моей карте? Есть идеи по улучшению карт? Дайте мне знать
|
|
| | |
Stone | Дата: Суббота, 04.10.2014, 09:40 | Сообщение # 95 |
Группа: Удаленные
| Как сделать захват здания для игрока 1 с условием, что у здания меньше 100 жизней и в радиусе 1 клетки есть войска игрока 1?
|
|
| | |
Jery | Дата: Воскресенье, 05.10.2014, 17:37 | Сообщение # 96 |
Мечник
Группа: Модераторы
Сообщений: 568
Награды: 2
Репутация: 50
Статус: Offline
| Используешь событие OnHouseDamaged, оттуда получаешь houseID. По houseID проверяешь все что нужно про здание, в частности проверка на кол-во здоровья делается через HouseTypeMaxHealth - HouseDamage. HouseDamage принимает houseId, а HouseTypeMaxHealt принимает тип здания, который можно узнать через houseID использовав функцию HouseType. Далее пойдут сложности с определением радиуса одной клетки. Дом это прямоугольник, и этот прямоугольник напрямую скриптами получить нельзя. Если немного ослабить условие захвата например в радиусе 5 клеток от входа, то задача сильно упрощается. Можно использовать HousePositionX HousePositionY получить координаты входа, и затем просто пройтись циклом по всем клеткам в радиусе 5 и посмотреть есть ли там интересующий воин GroupAt или юнит UnitAt. Чтобы передать здание от одного владельца другому придется разрушить старое здание и построить его заново для другого владельца. Для разрушения здания HouseDestroy, для постройки GiveHouse. Постройке здания может помешать его окупант который останется после разрушения, так что с ним тоже что-то нужно сделать =)
Все аргументы и возвращаемые значения функций смотри здесь
PS. Суть я описал. Сам скрипт писать не буду, функции которые точно пригодятся я описал. Это не единственный способ решения, некоторые части можно сделать по другому. Если есть вопросы по поводу приведенных функций, то ответы есть по ссылке. Если есть вопросы по алгоритму, то задавай.
«Художник не тогда знает, что он достиг совершенства, когда нечего добавить, но когда нечего больше отнять». (Антуан де Сент-Экзюпери)
Сообщение отредактировал Jery - Воскресенье, 05.10.2014, 17:42 |
|
| | |
Stone | Дата: Понедельник, 06.10.2014, 15:46 | Сообщение # 97 |
Группа: Удаленные
| Цитата Jery ( ) Используешь событие OnHouseDamaged, оттуда получаешь houseID. По houseID проверяешь все что нужно про здание, в частности проверка на кол-во здоровья делается через HouseTypeMaxHealth - HouseDamage. HouseDamage принимает houseId, а HouseTypeMaxHealt принимает тип здания, который можно узнать через houseID использовав функцию HouseType.Далее пойдут сложности с определением радиуса одной клетки. Дом это прямоугольник, и этот прямоугольник напрямую скриптами получить нельзя. Если немного ослабить условие захвата например в радиусе 5 клеток от входа, то задача сильно упрощается. Можно использовать HousePositionX HousePositionY получить координаты входа, и затем просто пройтись циклом по всем клеткам в радиусе 5 и посмотреть есть ли там интересующий воин GroupAt или юнит UnitAt. Чтобы передать здание от одного владельца другому придется разрушить старое здание и построить его заново для другого владельца. Для разрушения здания HouseDestroy, для постройки GiveHouse. Постройке здания может помешать его окупант который останется после разрушения, так что с ним тоже что-то нужно сделать =)
Все аргументы и возвращаемые значения функций смотри здесь
PS. Суть я описал. Сам скрипт писать не буду, функции которые точно пригодятся я описал. Это не единственный способ решения, некоторые части можно сделать по другому. Если есть вопросы по поводу приведенных функций, то ответы есть по ссылке. Если есть вопросы по алгоритму, то задавай. Цитата Jery ( ) Используешь событие OnHouseDamaged, оттуда получаешь houseID. По houseID проверяешь все что нужно про здание, в частности проверка на кол-во здоровья делается через HouseTypeMaxHealth - HouseDamage. HouseDamage принимает houseId, а HouseTypeMaxHealt принимает тип здания, который можно узнать через houseID использовав функцию HouseType.Далее пойдут сложности с определением радиуса одной клетки. Дом это прямоугольник, и этот прямоугольник напрямую скриптами получить нельзя. Если немного ослабить условие захвата например в радиусе 5 клеток от входа, то задача сильно упрощается. Можно использовать HousePositionX HousePositionY получить координаты входа, и затем просто пройтись циклом по всем клеткам в радиусе 5 и посмотреть есть ли там интересующий воин GroupAt или юнит UnitAt. Чтобы передать здание от одного владельца другому придется разрушить старое здание и построить его заново для другого владельца. Для разрушения здания HouseDestroy, для постройки GiveHouse. Постройке здания может помешать его окупант который останется после разрушения, так что с ним тоже что-то нужно сделать =)
Все аргументы и возвращаемые значения функций смотри здесь
PS. Суть я описал. Сам скрипт писать не буду, функции которые точно пригодятся я описал. Это не единственный способ решения, некоторые части можно сделать по другому. Если есть вопросы по поводу приведенных функций, то ответы есть по ссылке. Если есть вопросы по алгоритму, то задавай. Большое спасибо! Скрипт написал, стал проверять в СкриптВалидаторе, пишет, что 2 ошибки вот в этом фрагменте:
procedure OnHouseDamaged (aHouseID, aAttackerIndex: integer); begin T:= States.HouseType (aHouseID); MH:= States.HouseTypeMaxHealth (aHouseID); <Unknown identifier D:= States.HouseDamage (aHouseID); RD:= MH-D; X:= States.HousePositionX (aHouseID); Y:= States.HousePositionY (aHouseID); < Unknown identifier Все проверил на 2 раза, вроде бы нигде нет ошибок... подскажешь, из-за чего это? В скриптах я пока новичок
PS: T - type (дома) MH - MaxHealth D - Damage (текущий) RD - остаток жизни X - X Y - Y
Сообщение отредактировал Stone - Понедельник, 06.10.2014, 15:49 |
|
| | |
Jery | Дата: Вторник, 07.10.2014, 22:15 | Сообщение # 98 |
Мечник
Группа: Модераторы
Сообщений: 568
Награды: 2
Репутация: 50
Статус: Offline
| Прикладывай весь скрипт файлом. Этот кусок без остального скрипта не имеет смысла, хотя бы потому что нет объявления всех используемых переменных. В частности может MH и Y ты забыл объявить=) Так же обрати внимание на требуемую версию у каждой функции, она написана в левом столбце таблицы. Валидатор может быть для старой версии ремейка, в которой еще нет используемых тобой функций.
PS. Сокращать вот так названия это плохой стиль. Нужно писать так чтобы любой другой понял назначения переменных без легенды.
«Художник не тогда знает, что он достиг совершенства, когда нечего добавить, но когда нечего больше отнять». (Антуан де Сент-Экзюпери)
Сообщение отредактировал Jery - Вторник, 07.10.2014, 22:18 |
|
| | |
Jery | Дата: Среда, 08.10.2014, 01:48 | Сообщение # 99 |
Мечник
Группа: Модераторы
Сообщений: 568
Награды: 2
Репутация: 50
Статус: Offline
| Код MH:= States.HouseTypeMaxHealth (aHouseID); Здесь должно быть так: Код MH:= States.HouseTypeMaxHealth (T); Эта функция принимает не конкретный дом а тип дома.
«Художник не тогда знает, что он достиг совершенства, когда нечего добавить, но когда нечего больше отнять». (Антуан де Сент-Экзюпери)
|
|
| | |
Stone | Дата: Среда, 08.10.2014, 10:15 | Сообщение # 100 |
Группа: Удаленные
| Jery, привет, решил сделать, чтобы захват здания для игрока 1 происходил при атаке здания солдатами игрока 1 и повреждении здания более чем на 200 едениц. вверху приветствие при старте и спаун варваров. procedure OnMissionStart; begin //приветствие Actions.ShowMsg(0, 'Приветствие.'); end; procedure OnTick; var j: Integer; begin //варвары j:= States.HouseAt (148,10); if (States.GameTime mod 900 = 0) and (States.HouseOwner (j) = 3) then if (States.GameTime mod 900 = 0) then Actions.GiveGroup (3, 23, 129, 19, 4, 12, 4) end; procedure OnHouseDamaged (aHouseID: Integer; aAttackerIndex: Integer); var T, D, X, Y, O: Integer; begin D:= States.HouseDamage (aHouseID); X:= States.HousePositionX (aHouseID); O:= States.GroupOwner (aAttackerIndex); Y:= States.HousePositionY (aHouseID); T:= States.HouseType (aHouseID); if (States.HouseDamage (aHouseID)) > 200 then begin if (States.GroupOwner (aAttackerIndex)) = 0 then begin Actions.HouseDestroy (aHouseID, True); Actions.GiveHouse (0,(States.HouseType (aHouseID)), X,Y); Actions.ShowMsg(0, 'Приветствие.'); end; end; end;
Ошибок как бы нет, но в игре здание не хочет появляться и сообщение "Приветствие" тоже не дается 2 раз... Также сделал сначала с переменными, но с ними не работало, поэтому в if сделал напрямую. Версия ремейка r5503.
Сообщение отредактировал Stone - Среда, 08.10.2014, 10:23 |
|
| | |
Jery | Дата: Среда, 08.10.2014, 11:11 | Сообщение # 101 |
Мечник
Группа: Модераторы
Сообщений: 568
Награды: 2
Репутация: 50
Статус: Offline
| OnHouseDamaged есть только с версии 5882. В 5503 его нужно мастерить самому через OnTick и PlayerGetAllHouses или использовать конкретный заранее известный дом и в OnTick смотреть за его уроном. Код совсем плохой, один и тот же if проверяется два раза, делаются локальные переменные а потом не используются =)
«Художник не тогда знает, что он достиг совершенства, когда нечего добавить, но когда нечего больше отнять». (Антуан де Сент-Экзюпери)
Сообщение отредактировал Jery - Среда, 08.10.2014, 11:13 |
|
| | |
Stone | Дата: Среда, 08.10.2014, 11:20 | Сообщение # 102 |
Группа: Удаленные
| Понял, а где можно скачать новую версию 5882?
|
|
| | |
Jery | Дата: Среда, 08.10.2014, 18:02 | Сообщение # 103 |
Мечник
Группа: Модераторы
Сообщений: 568
Награды: 2
Репутация: 50
Статус: Offline
| Можно собрать самому.
«Художник не тогда знает, что он достиг совершенства, когда нечего добавить, но когда нечего больше отнять». (Антуан де Сент-Экзюпери)
|
|
| | |
Krom | Дата: Четверг, 09.10.2014, 12:50 | Сообщение # 104 |
Воитель
Группа: Супер Модераторы
Сообщений: 2526
Награды: 25
Репутация: 153
Статус: Offline
| Stone, или отправить заявку на включение в список бета-тестировщиков на
Нашли баг в КаМ Ремейке? Отправьте отчет на с пометками, желательно на английском, в какой версии, что и когда случилось, приложите реплей или сохраненную игру в которой этот баг воспроизводится.
|
|
| | |
Stone | Дата: Четверг, 09.10.2014, 13:08 | Сообщение # 105 |
Группа: Удаленные
| Jery, Krom, понял, это значит бета. Будем ждать выхода, а пока - воспользуемся доступными командами.
Jery, еще раз спасибо за объяснения
|
|
| |
|