[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Модератор форума: Jery  
Форум » Knights and Merchants: Remake » Идеи и предложения » Скрипты
Скрипты
AlexandrVДата: Суббота, 09.03.2013, 23:52 | Сообщение # 121
Воитель
Группа: Проверенные
Сообщений: 1316
Награды: 4
Репутация: 29
Статус: Offline
Ну и еще надо давать поражения тогда что использовать если не States.StatHouseTypeCount(0,11) = 0

тогда нужно функция разрушеных зданий а неколичество их
 
JeryДата: Воскресенье, 10.03.2013, 00:00 | Сообщение # 122
Мечник
Группа: Модераторы
Сообщений: 568
Награды: 2
Репутация: 50
Статус: Offline
Тебе нужно процедура, которая бы вызывалась при потере здания. Найди ее в предыдущем посте, заметь что среди них есть и OnTick, а ты ее уже использовал, остальные используются по аналогии, подумай как. Еще тебе нужна функция, которая бы провозглашала поражение нужному игроку. Это Actions.PlayerDefeat(player_index). Больше ничего нового не нужно, только проверяй кол-во нужных зданий при потере любого здания игроком, если их кол-во равно нулю, то делай поражение.

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

Сообщение отредактировал Jery - Воскресенье, 10.03.2013, 00:01
 
AlexandrVДата: Воскресенье, 10.03.2013, 00:12 | Сообщение # 123
Воитель
Группа: Проверенные
Сообщений: 1316
Награды: 4
Репутация: 29
Статус: Offline
Jery, Тьфу ты сообщения это я уже писал ты предыдущий пост сделай нормально а то не разберешь

Добавлено (10.03.2013, 00:12)
---------------------------------------------
Jery, Ты хочешь сказать вместо OnTick

Надо использовать другое а разве так нельзя

Если здание склад у игрока 1 разрушено тогда поражение

 
JeryДата: Воскресенье, 10.03.2013, 00:20 | Сообщение # 124
Мечник
Группа: Модераторы
Сообщений: 568
Награды: 2
Репутация: 50
Статус: Offline
Ничего не мешает отслеживать несколько событий. Можно в OnTick делать одни действия, а в другом событии другие.

Цитата (AlexandrV)
Если здание склад у игрока 1 разрушено тогда поражение

Если здание склад разрушено - это твое событие. Далее ты проверяешь у какого игрока оно разрушено и какое здание, и даешь ему поражение. Но это нелепо потому, что у игрока может быть два склада, и если ему разрушат только один склад он проиграет по твоей логике.
Я исправил тот пост, все что на английском для тебя не важно. Для начала, выбери подходящее для тебя событие. "ВАШ КОД" это твоя логика его обработки, то есть все проверки того что у нужного игрока и нужное здание и затем выдача поражения.


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

Сообщение отредактировал Jery - Воскресенье, 10.03.2013, 00:20
 
AlexandrVДата: Воскресенье, 10.03.2013, 00:31 | Сообщение # 125
Воитель
Группа: Проверенные
Сообщений: 1316
Награды: 4
Репутация: 29
Статус: Offline
States.StatHouseTypeCount(0,11) = 0 Then поражение

Вот эта процедура подходит так как всегда когда начинаешь игру на развитие нужен склад а без склада и тех зданий которые бы могли заменить склад невозможно продолжать
States.StatHouseTypeCount(0,11) = 0

это только пример для склада дополнения к этому надо написать например если нет лесопилки и каменаломни для постройки нового склада.

Нужно еще событие точнее вот это

если количество человек в определенной армии у определенного игрока составляет 0 тогда победа или поражение

Jery напиши еще типы солдат и тогда я смогу делать условия победы любые


Сообщение отредактировал AlexandrV - Воскресенье, 10.03.2013, 00:32
 
JeryДата: Воскресенье, 10.03.2013, 00:38 | Сообщение # 126
Мечник
Группа: Модераторы
Сообщений: 568
Награды: 2
Репутация: 50
Статус: Offline
States.GroupMemberCount(GroupID) возвращает кол-во человек в группе с номером GroupID.
States.GroupDead(GroupID) проверяет мертва ли группа(результат true или false).
States.GroupOwner(GroupID) возвращает индекс игрока владельца группы с номером GroupID.
States.StatUnitTypeCount(Player_index, unit_type) возвращает кол-во юнитов типа unit_type у игрока player_index.
States.StatArmyCount(player_index) возвращает число военных юнитов у игрока player_index.
Думай как это приспособить. И я не знаю типов солдат =)

Это конечно правильно:
if States.StatHouseTypeCount(0,11) = 0 Then поражение

Но ты так и не сказал куда это писать =)


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

Сообщение отредактировал Jery - Воскресенье, 10.03.2013, 00:42
 
AlexandrVДата: Воскресенье, 10.03.2013, 00:42 | Сообщение # 127
Воитель
Группа: Проверенные
Сообщений: 1316
Награды: 4
Репутация: 29
Статус: Offline
ну можно в OnTick а лучше процедуру OnHouseDestroyed
 
JeryДата: Воскресенье, 10.03.2013, 00:43 | Сообщение # 128
Мечник
Группа: Модераторы
Сообщений: 568
Награды: 2
Репутация: 50
Статус: Offline
А лучше в OnHouseLost потому, что если игрок сам себе снесет единственный склад, то он тоже наверное должен проиграть =)

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

Добавлено (10.03.2013, 00:50)
---------------------------------------------
OnUnitKilled - Возникает когда юнит убит. Called just before the unit is destroyed so UnitID is usable only during this event. 
Принимает: 
aUnitID: Integer; //UnitID убитого юнита. 
aKillerIndex: Integer; //Индекс убившего игрока. 

А тут он может иметь кооличество убитых юнитов если да то можно допустим если умрет 10 юнитов то выдовать сообщения Мы столько не можем терять юнитов

а если будет уничтожено еще больше то порожение

 
JeryДата: Воскресенье, 10.03.2013, 01:00 | Сообщение # 130
Мечник
Группа: Модераторы
Сообщений: 568
Награды: 2
Репутация: 50
Статус: Offline
Объяви глобальную(вне всяких функций) целочисленную(integer) переменную. И увеличивай ее на 1 внутри OnUnitKilled, если убит юнит нужного игрока; и проверяй, если она стала равна 10, то пиши сообщение.
Понадобятся:
States.UnitOwner(UnitID) - возвращает индекс игрока владельца юнита.
States.UnitType(UnitId) - возвращает тип юнита.
Actions.ShowMsg(player_index, msg) - пишет сообщение игроку с индексом player_index, сообщение msg (обычная строка в кавычках, например "У вас большие потери").


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

Сообщение отредактировал Jery - Воскресенье, 10.03.2013, 01:01
 
AlexandrVДата: Воскресенье, 10.03.2013, 01:02 | Сообщение # 131
Воитель
Группа: Проверенные
Сообщений: 1316
Награды: 4
Репутация: 29
Статус: Offline
Jery, а 
States.UnitOwner(UnitID) - возвращает индекс игрока владельца юнита. 
States.UnitType(UnitId) - возвращает тип юнита. 

зачем
 
JeryДата: Воскресенье, 10.03.2013, 01:09 | Сообщение # 132
Мечник
Группа: Модераторы
Сообщений: 568
Награды: 2
Репутация: 50
Статус: Offline
Ну смотри OnUnitKilled вызывается при каждом убийстве юнита, независимо от того чей он был и какого типа. Внутри этой функции у тебя доступны все глобальные переменные, локальные переменные, которые ты объявишь внутри, и ЕЩЕ ДВЕ локальные переменные, которые передадутся в качестве аргументов. Эти две переменные aUnitID и aKillerIndex, в них сразу же будет содержаться ID убитого юнита и индекс игрока убийцы. Используя States.UnitOwner от aUnitID ты можешь узнать, кто был хозяином убитого юнита, а используя States.UnitType от aUnitID ты узнаешь какого типа он был, если тебе нужно например посчитать только убитых ополченцев.

А вообще я тут заметил, что мы изобретаем велосипед и есть функция States.StatUnitLostCount(player_index, unit_type), которая показывает потери юнитов типа unit_type игрока player_index.


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

Сообщение отредактировал Jery - Воскресенье, 10.03.2013, 01:10
 
AlexandrVДата: Воскресенье, 10.03.2013, 01:15 | Сообщение # 133
Воитель
Группа: Проверенные
Сообщений: 1316
Награды: 4
Репутация: 29
Статус: Offline
Jery, Это в будущих миссиях в 6 это не надо так как там враг атакует и тебе не только надо сдержать врага но и построить определенные здания а также собрать необходимые ресурсы.

в 7 миссии скрипты не понадобится так как там просто уничтожить врага хотя раз скрипты Evt в новой версии ремейка не поддерживаются то такие скрипты в любом случаее прийдется писать
 
JeryДата: Воскресенье, 10.03.2013, 01:21 | Сообщение # 134
Мечник
Группа: Модераторы
Сообщений: 568
Награды: 2
Репутация: 50
Статус: Offline
Где тебе это нужно это твое дело. Я просто описываю возможности. Почти все, что можно вообразить, можно написать на новых скриптах, исключая любые действия с ландшафтом, что печально. Нельзя даже никак узнать есть ли близко каменная гора, чтобы заставить ИИ построить там каменоломню. Нельзя следить за действиями игрока, а только за их последствиями. И нельзя отследить юнита убийцу в OnUnitKilled, а только его владельца =)

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

Сообщение отредактировал Jery - Воскресенье, 10.03.2013, 01:22
 
AlexandrVДата: Воскресенье, 10.03.2013, 01:22 | Сообщение # 135
Воитель
Группа: Проверенные
Сообщений: 1316
Награды: 4
Репутация: 29
Статус: Offline
Jery, Ну выдвени это в придложении по скриптам и думаю кром сделает
 
Форум » Knights and Merchants: Remake » Идеи и предложения » Скрипты
Поиск: