StarCraft: Триггеры: деньги за убийства

» Раздел: 1. История

Что происходит при убийстве!!


Давайте сначала проясним, что происходит, когда какой-либо игрок А убивает юнит другого игрока Б. Игроку А начисляют определенное (в зависимости от убитого юнита, см. список в конце) количество очков Kills Score или Razings Score (не путать со счетчиком убитых юнитов Kills) и увеличивают счетчик Kills убитого юнита на единицу, а игроку Б увеличивают счетчик Deaths этого же убитого юнита на единицу.
С самого начала игры все игроки начинают с нулевыми значениями счетчиков Deaths и Kills и всевозможных очков Score.

Что можно менять и проверять


В действиях (Actions) триггеров можно изменять (прибавлять/вычитать или ставить на определенное количество) лишь счетчик Deaths на любой юнит или группу юнитов (Men, Buildings, Factories, All Units) и счетчики очков Kills Score и Razings Score, но нельзя изменять счетчик Kills; однако в условиях (Conditions) можно проверять как очки (Kills Score и Razings Score) так и счетчики Kills и Deaths. Наблюдательный человек может заметить, что это еще не все. Мы так же имеем возможность проверить на обладание Наибольшим или Наименьшим количеством очков (Score) и величиной счетчика убийств (Most Kills и Least Kills), а так же косвенно увеличить (только увеличить! ) счетчик Kills, принудительно заставив игрока убить определенного юнита. Кстати, последние две идеи используются для построения 'Идеального' метода награждения (см. ниже).

Способы


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

Способ 1


Сначала нам хотелось бы научиться получать награду за убийство юнитов, в не зависимости от типа убитого юнита. Пусть это будет один минерал.

Действительно, самое первое, что может придти в голову - это проверять количество очков (скажем Kills Score), и, если оно больше нуля, то давать минерал.
 
**!!Conditions!!**
Current player Kills score is at least 1.
**!!Actions!!**
Preserve Trigger.
Modify score for Current player: Set to 0 Kills.
Modify resources for Current player: Add 1 Minerals.

Достоинства:
+ Предельная простота.

Недостатки:
  • Награждения не могут быть определены для разных юнитов.
  • Убийство нескольких юнитов до срабатывания триггера даст вам такую же награду как если бы вы убили одного.
Рекомендации:
  • Используйте Гиппер Триггеры.
  • Избегайте использования многих юнитов и юнитов со сплэшем.

Способ 2


Теперь нам бы хотелось учесть убийство различных типов юнитов, ведь в большинстве случаев за Марина, как правило, должны давать меньше, чем за Арбитера. Этот способ развивают эту идею.

Будем давать по минералу за каждые 25 очков Kills Score.

Наивная реализация этого метода выглядит следующим образом:
 
**!!Conditions!!**
Current player Kills score is at least 25.
**!!Actions!!**
Preserve Trigger.
Modify score for Current player: Subtract 25 Kills.
Modify resources for Current player: Add 1 Minerals.

В таком виде минералы будут начисляться очень медленно. К счастью, данный способ легко усовершенствовать, что бы все происходило гораздо быстрее, и делается это следующим образом:
 
**!!Conditions!!**
Current player Kills score is at least **100**.
**!!Actions!!**
Preserve Trigger.
Modify score for Current player: Subtract **100** Kills.
Modify resources for Current player: Add **4** Minerals.
 
**!!Conditions!!**
Current player Kills score is at least **50**.
**!!Actions!!**
Preserve Trigger.
Modify score for Current player: Subtract **50** Kills.
Modify resources for Current player: Add **2** Minerals.
 
**!!Conditions!!**
Current player Kills score is at least **25**.
**!!Actions!!**
Preserve Trigger.
Modify score for Current player: Subtract **25** Kills.
Modify resources for Current player: Add **1** Minerals.
Мы расположили несколько триггеров дублирующих необходимое действие сверху вниз в порядке от больших очков к меньшим.

Достоинства:
+ Простота.

Недостатки:
  • За некоторых юнитов дают больше очков чем за других (см. список в конце), причем изменить ситуацию нельзя. Например за Арбитера вам начислят 2050 Kills Score, в то время как за Брудлинга только 25, так что за Арбитера вы получите 82 минерала, а за Брудлинга всего 1.
  • Этот метод работает медленно, если ОЧЕНЬ быстро убиватеся действительно МНОГО юнитов. Иногда приходится делать триггеры для очков больших 5000 и также добавлять Гиппер Триггеры, если вообще возможно.
Рекомендации:
  • Используйте Гиппер Триггеры.
  • Избегайте использования многих юнитов и юнитов со сплэшем.

Способ 3


Мы видели, что за разных юнитов дается разное количество очков (Kills Score или Razings Score), которое строго зашито в игру и, вообще говоря, может нам не подойти.

Предположим, мы хотим получать определенное (нами) награждение за каждого убитого. Пусть мы можем убивать только 3 типа юнитов: Маринов (100 Kills Score), Гостов (350 Kills Score) и Арбитеров (2050 Kills Score), - и желаем получать за Арбитера 5 минералов, за Госта - 10, а за Марина - 15.

Вот как это делается:
 
**!!Conditions!!**
Current player Kills score is at least 2050.
**!!Actions!!**
Preserve Trigger.
Modify score for Current player: Subtract 2050 Kills.
Modify resources for Current player: Add 5 Minerals.

**!!Conditions!!**
Current player Kills score is at least 350.
**!!Actions!!**
Preserve Trigger.
Modify score for Current player: Subtract 350 Kills.
Modify resources for Current player: Add 10 Minerals.

**!!Conditions!!**
Current player Kills score is at least 100.
**!!Actions!!**
Preserve Trigger.
Modify score for Current player: Subtract 100 Kills.
Modify resources for Current player: Add 15 Minerals.
Учтите, что расположение триггеров от больших очков к меньшим играет здесь большую роль. Так, если бы марин стоял на первом месте, то при убийстве Арбитера, сначала проверился бы триггер с Марином и удовлетворилось бы условие Current player Kills score is at least 100, после чего на Арбитера уже очков не хватило бы.

Достоинства:
+ Можно варировать размер награждения для каждого юнита.

Недостатки:
  • В действительности, метод не подходит для игр, где много юнитов может быть убито одновременно, что включает карты со сплэш юнитами или просто большим количеством юнитов игрока(ов). Если вы убъете 6 Гостов перед тем как выполнятся триггеры то получите только 5 минералов вместо 60, т.к. выполняются условия триггера, начисляющего минералы за Арбитера, который проверяется первым. Более того, даже за просто одновременное убийство 2 Гостов начислится 25 минералов: 10 за Госта и еще 15 за Марина.
Рекомендации:
  • Располагайте триггеры с большими очками выше.
  • Используйте Гиппер Триггеры.
  • Избегайте использования многих юнитов и юнитов со сплэшем. Одновременное убийство большого числа юнитов все перепутает.

Способ 4


Далее хотелось бы повысить точность предыдущего метода. Для чего на ряду с информацией об очках Kills Score будем использовать дополнительную информацию о счетчике Deaths. Здесь, как и в предыдущем методе, будем предполагать что разрешается убивать только 3 типа юнитов.
 
**!!Conditions!!**
Current player Kills score is at least 2050.
Foes has suffered at least 1 deaths of Arbiter.
**!!Actions!!**
Preserve Trigger.
Modify score for Current player: Subtract 2050 Kills.
Modify deaths for Foes: Subtract 1 for Arbiter.
Modify resources for Current player: Add 5 Minerals.

**!!Conditions!!**
Current player Kills score is at least 350.
Foes has suffered at least 1 deaths of Ghost.
**!!Actions!!**
Preserve Trigger.
Modify score for Current player: Subtract 350 Kills.
Modify deaths for Foes: Subtract 1 for Ghost.
Modify resources for Current player: Add 10 Minerals.

**!!Conditions!!**
Current player Kills score is at least 100.
Foes has suffered at least 1 deaths of Marine.
**!!Actions!!**
Preserve Trigger.
Modify score for Current player: Subtract 100 Kills.
Modify deaths for Foes: Subtract 1 for Marine.
Modify resources for Current player: Add 15 Minerals.
Можно видеть, что теперь контрпример с шестью Гостами (как в предыдущем случае) не проходит, т.к. у всех врагов счетчик Deaths для Арбитера равен нулю и условия первого триггера не выполняются, однако если кто-то другой одновременно с этим убил Арбитера все летит к чертовой бабушке.

Так же надо заметить, что изменение счетчика Deaths происходит для Foes, т.е. для всех врагов игрока, чей триггер выполнился, а не только для того чей юнит он убил. Таким образом, если два игрока одновременно убили марина у разных врагов (которые являются их общими врагами), то минералы дадут лишь тому из них, чей триггер выполнится первым, т.е. игроку имеющему меньший порядковый номер (т.к. он уменьшит счетчик Deaths всех своих врагов, а значит и того врага у которого второй игрок убил марика). Но очки-то у второго игрока будут накапливаться!

В данном случае дело обстоит проще если на карте всего один враг (например в РПГ, где Игрок 8 единственный враг игроков), юниты которого убивают все остальные игроки и в Триггерах Foes можно заменить на этого игрока (в нашем примере на Игрока 8).

Достоинства:
+ Можно варьировать размер награждения для каждого юнита.
+ Приемлемая степень точности и относительно малая вероятность ошибки.

Недостатки:
  • Одновременное убийство юнитов все еще вызывает ограничения.
  • При уменьшении счетчика Deaths он уменьшается для всех врагов а не только для того чей юнит убит.
Рекомендации:
  • Используйте этот способ только в тех случаях, когда хотите назначить индивидуальное награждение за каждого юнита, например добавление опыта в РПГ.
  • Старайтесь избегать использования многих юнитов и юнитов со сплэшем.
  • Используйте Гиппер Триггеры.
  • Метод работает тем лучше чем меньше врагов, как например только Игрок 8 в РПГ. В этом случае заменяйте Foes на этого игрока.

Способ 5 (Идеальный)


В конце концов нам хотелось бы окончательно избавиться от ограничения одновременного убийства юнитов.

Основная идея основывается на использовании условия Most Kills. Вот как это делается:

Есть Хранитель Очков (Keeper) - игрок-компьютер, который не имеет возможности убивать юнитов или это разрушит всю систему. Хранитель Очков начинает игру в состоянии "Most Kills", при помощи триггера, который дает ему одно убийство, так что в самом начале счетчик Kills Хранителя равен единице, в то время как у всех остальных игроков он равен нулю. Когда какой-либо игрок убивает юнита, его счетчик убийств увеличивается на единицу, и как только это случается этот игрок имеет больше всего убийств и засекается условием Most Kills, где мы даем ему награду, а всем остальным игрокам, включая Хранителя, даем по одному убийству, так что Хранитель опять оказывается на первом месте.

Хранитель должен опережать остальных игроков на одно убийство, так что бы иметь больше всего убийств, до того как какой-нибудь игрок не убъет юнита и, тем самым, не окажется первым, что активизирует триггер дающий награду и обновляющий счетчик убийств других игроков, что опять поместит Хранителя впереди всех.

Следующий триггер создает юнита, который должен быть убит, что бы обновить счетчик Kills игрока. Он вызывается по счетчику Deaths определенного юнита - для этого в данном примере используется Rhynadon, хотя можно было бы взять любого другого:
 
**!!Players!!**
All Players.
**!!Conditions!!**
Current player has suffered at least 1 deaths of **__Rhynadon__**.
**!!Actions!!**
Preserve trigger.
Center location labeled '**__Update Kill Score__**' on **__Protoss Pylon__** owned by Current Player at '**__Anywhere__**'.
Create 1 **__Zerg Zergling__** at '**__Update Kill Score__**' for **__Enemy__**. Apply **__properties*__**.
Modify death counts for Current player: Subtract 1 for **__Rhynadon__**.
Теперь нам надо проинициализировать Хранителя одним убийством:
 
**!!Players!!**
Player **__Keeper__**
**!!Conditions!!**
Always.
**!!Actions!!**
Modify death counts for Player **__Keeper__**: Add 1 for **__Rhynadon__**.
Следующий триггер - основная часть системы. Он награждает игрока и обновляет счетчик убийств. Все что надо сделать - проверить, что игрок имеет больше всего убийств (Most Kills), затем убедиться, что Хранитель больше не ожидает юнитов на респаун и после того убедиться, что все созданные юниты (в нашем случае Зерглинги) были убиты. Если все это - правда, то тогда он дает награду (минерал) игроку, имеющему наибольшее количество убийств и обновляет убийства всем остальным игрокам, так что бы все было точно:
 
**!!Players!!**
All Players.
**!!Conditions!!**
Current player has most kills of any unit.
**__Keeper__** has suffered exactly 0 deaths of **__Rhynadon__**.
**__Enemy__** brings exactly 0 **__Zerg Zergling__** to '**__Check__**'.
Elapsed scenario time is at least 1 game seconds.
**!!Actions!!**
Preserve trigger.
Modify death counts for All Players: Add 1 for **__Rhynadon__**.
Modify death counts for **__Keeper__**: Add 1 for **__Rhynadon__**.
Modify death counts for Current player: Subtract 1 for **__Rhynadon__**.
Modify resources for Current player: Add 1 Minerals.
Создайте места с чем-нибудь что бы убивать Зерглингов, по одному на каждого игрока плюс место для Хранителя. Разместите на этих местах Protoss Pylon или любой другой маркер для прыгающей локации Update Kill Score. Обведите эти места одной локацией Anywhere. Сделайте так, что бы локация Check покрывала все место для убийств Хранителя. И теперь создайте локацию Update Kills Score под размер территории для убийства каждого игрока.

Keeper - игрок-компьютер, не имеющий возможности убивать юниты.
Enemy - игрок-враг всем игрокам (включая Хранителя).
Rhynadon - любой неиспользуемый юнит так же прекрасно подойдет.
Zerg Zergling - в принципе можно использовать и другой юнит.
Protoss Pylon - маркер места убийств для прыгающей локации Update Kill Score.
Update Kill Score - локация, прыгающая по местам игроков для убийства юнитов.
Anywhere - локация, охватывающая все места игроков для убийств юнитов.
Check - локация над местом для убийств Хранителя.
Propertries* - Зарытый с 1% здоровья (Зерглинг).

Достоинства:
+ Работает правильно даже при одновременных убийствах.

Недостатки:
  • Cкорость срабатывания ограничена скоростью обновления статуса Most Kills, которая может оказаться приличной при большом количестве одновременных смертей.
  • Требуется дополнительный игрок-Хранитель и место под убиство юнитов.
  • Сложность.

Замечания


Видно, что 'Идеальный' метод (как и самый первый) не учитывает типа убитого юнита и дает одну награду для всех типов юнитов. Используя идеи аналогичные методам 2-4 (или используя Most Kills для каждого типа возможных юнитов) можно заставить его распознавать типы убитых юнитов, однако надо заметить, распознавание не будет идеальным.

Список очков за убийство юнитов


Обратите внимание что за убийство Men начисляются Kills Score а за убийство Buildings - Razings Score.

**!!TERRAN!!**
__(Men)__
Marine: 100
Ghost: 350
Vulture: 150
Goliath: 400
Siege Tank: 700
SCV: 100
Firebat: 200
Medic: 250
Wraith: 800
Science Vessel: 1250
Dropship: 600
Battlecruiser: 2400
Valkyrie: 800
Gui Montag: 400
Civilian: 10
Sarah Kerrigan: 700
Alan Schezar: 800
Jim Raynor (Vulture): 300
Jim Raynor (Marine): 200
Tom Kazansky: 1600
Magellan: 2500
Edmund Duke (Tank): 1400
Arcturus Mengsk: 4800
Hyperion: 4800
Norad II: 4800
Samir Duran: 700
Alexei Stukov: 700
Gerard DuGalle: 4800
__(Special)__
Vulture Spider Mine: 25
__(Buildings)__
Command Center: 1200
Supply Depot: 150
Refinery: 150
Barracks: 225
Academy: 300
Factory: 600
Starport: 600
Science Facility: 825
Engineering Bay: 195
Armory: 300
Missile Turret: 150
Bunker: 150
__(Addons)__
Comsat Station: 225
Nuclear Silo: 225
Control Tower: 300
Covert Ops: 225
Physics Lab: 225
Machine Shop: 225
__(Special Buildings)__
Norad II (Crashed): 5000
Ion Cannon: 5000
Psi Disruptor: 3600
Power Generator: 600
__(Independent)__
Independent Starport: 10

**!!ZERG!!**
__(Men)__
Zergling: 50
Hydralisk: 350
Ultralisk: 1300
Broodling: 25
Drone: 100
Defiler: 450
Infested Terran: 400
Lurker: 500
Overlord: 200
Mutalisk: 600
Guardian: 1100
Queen: 800
Scourge: 200
Devourer: 1100
Matriarch: 1600
Infested Kerrigan: 4000
Unclean One: 900
Devouring One: 100
Hunter Killer: 500
Torrasque: 2600
Kukulza (Mutalisk): 1200
Kukulza (Guardian): 2200
Yggdrasill: 400
Infested Duran: 700
__(*)__
Larva: 10
Egg: 25
Cocoon: 10
__(Buildings)__
Infested Command Center: 900
Hatchery: 900
Lair: 1200
Hive: 1500
Nydus Canal: 225
Hydralisk Den: 300
Defiler Mound: 450
Greater Spire: 1350
Queen's Nest: 525
Evolution Chamber: 120
Ultralisk Cavern: 825
Spire: 750
Spawning Pool: 225
Creep Colony: 120
Spore Colony: 195
Sunken Colony: 240
Extractor: 75
__(Special Buildings)__
Overmind (With Shell): 10000
Overmind: 10000
Mature Crysalis: 5000
Cerebrate: 2500
Cerebrate Daggoth: 2500
Overmind Cocoon: 4000

**!!PROTOSS!!**
__(Men)__
Dark Templar: 650
Dark Archon: 1300
Probe: 100
Zealot: 200
Dragoon: 500
High Templar: 700
Archon: 1400
Reaver: 800
Corsair: 700
Shuttle: 400
Scout: 1300
Arbiter: 2050
Carrier: 1900
Observer: 450
Dark Templar (Hero): 400
Zeratul (Dark Templar): 800
Tassadar/Zeratul (Archon): 2800
Fenix (Zealot): 400
Fenix (Dragoon): 1000
Tassadar (Templar): 1400
Mojo (Scout): 2600
Warbringer (Reaver): 1600
Gantrithor (Carrier): 3800
Danimoth (Arbiter): 4100
Aldaris (Templar): 1400
Artanis (Scout): 2400
Raszagal (Corsair): 1300
__(Buildings)__
Nexus: 1200
Robotics Facility: 900
Pylon: 150
Assimilator: 150
Observatory: 525
Gateway: 225
Photon Cannon: 300
Citadel of Adun: 600
Cybernetics Core: 300
Templar Archives: 750
Forge: 300
Stargate: 900
Fleet Beacon: 1050
Arbiter Tribunal: 1350
Robotics Support Bay: 375
Shield Battery: 150
__(Special Buildings)__
Stasis Cell/Prison: 5000
Protoss Temple: 5000
Xel'Naga Temple: 5000
Warp Gate: 2000

**!!NEUTRAL UNITS!!**
__(Critters)__
Rhynadon (Badlands): 10
Bengalaas (Jungle): 10
Scantid (Desert): 10
Kakaru (Twilight): 10
Ragnasaur (Ash World): 10
Ursadon (Ice World): 10

Перевод иностранных источников с моими добавлениями и исправлениями.

Просмотров: 10 681

Reaver #1 - 13 лет назад 1
Спасибо! Очень помог, правда!
nic666 #2 - 13 лет назад 1
[b]Способ 4+ [/b]
вместо
[code]Foes has suffered at least 1 deaths of Arbiter.[/code]
ставите конкретно
[code]Player1 has suffered at least 1 deaths of Arbiter.[/code]
[code]Player2 has suffered at least 1 deaths of Arbiter.[/code]
и т.д. Делаете копию триггера для каждого игрока...
для каждого игрока срабатывает своя копия триггера и счетчик suffered при этом уменьшается только у того игрока который потерял юнита
Недостаток:
  • требуется больше триггеров
Достоинство относительно №4:
  • одновременное убийство не теряет очки
А если не заморачиваться особо с типом юнита, то вообще, думаю, Способ 3 самый ходовой...
Worm #3 - 13 лет назад 1
"Достоинство относительно №4:
  • одновременное убийство не теряет очки"
Это неверно. Одновременное убийство всё ещё может вызвать потерю очков. Например, Игрок1 убивает Арбитера Игрока4, а Игрок2 (одновременно с Игроком1) убивает 15 Гостов Игрока3. Если триггеры расположены в таком порядке как у меня в статье, с тем только отличием, что каждый триггер с условием 'Foes' заменён на группу триггеров с условиями для Игрока1, Игрока2 и т.д. (причем расположенных строго в таком порядке!), то в этом случае Игрок1 получит чужие минералы за 14 Гостов и у него останется 150 (=5050-4900=5050-14*350) очков убийств на счету, а Игрок2 получит минералы лишь за одного госта и останется с 4900 (=5250-350) очками убийств. Помимо того Игрок4 останется со счётчиком смертей Арбитера равным одному.
Этот пример охватывет все те случаи, когда есть две группы игроков: "Жертвы" (Игроки 3 и 4 в моём примере), которые служат лишь мишенью для Хищников, и "Хищники" (Игроки 1 и 2), которые убивают Жертв и не могут убивать друг друга, и для которых мы делаем награду за убийства. Как можно видеть, даже в этом упрощённом случае возможна потеря очков, не говоря уже о тех случаях, когда все игроки убивают всех и все должны получать награду за убийство друг-друга. Даже в частном случае, когда группа игроков Жертвы состоит из одного игрока (Игрок 8 в статье) невозможно во всех случаях однозначно определить кто кого убил. Достаточно рассмотреть пример, когда Игрок1 убивает 15 Гостов, а Игрок2 убивает Арбитера.
Способ 4 будет работать "идеально", лишь когда Хищник и Жертва одни, Способ 4+ работает "идеально" и в случае, когда Жертв много (но Хищник должен быть один!). Если же рассматривать случай без разделения игроков на Хищников и Жертв, то в этом случае оба способа 4 и 4+ равноправны и работают "идеально" только для двух игроков, где один играет против другого.
Прошу прощения, в первом примере я допустил ошибку при разборе: с Игроком1 все в порядке, а вот Игрок2 вместо Госта получит минералы за Арбитера (естественно, ведь сначала проверятся арбитеры всех игроков) и останется при 200 (=5250-5050=15*350-5050) очках убийств. Кроме того, Игрок3 останется со счётчиком смертей Гостов равным одному, а счётчик смертей Арбитера Игрока4 будет равен нулю...
Но, впрочем, это совершенно не важно...
nic666 #4 - 13 лет назад 1
  1. Если опираться на Kills Score, то согласен... вообще не возможно.
Но я когда предлагал свой вариант, я имел ввиду убийство нескольких арбитров, а не убийство разных типов юнитов...
Именно замена FOES на серию конкретных игроков дает только один плюс: когда убито несколько арбитров, то за каждого начислятся очки, а в случае FOES могут потеряться даже очки за одни только арбитры... И ,кстати, а что делать если Kills Score>0, а при том ни одного счетчика shuffered>0 нет???
Явно не хватает триггера на этот случай...
  1. Определить кто кого убил ВОЗМОЖНО, но геморно в самом деле если делать серию триггеров
типа
[quote]
Player 1 Kills 10 Terran Ghost
Actions
Add Player1 50 Minerals
[/quote]
(без Preserve Trigger)
такой способ абсолютно надежен, но требует слишком много триггеров. И если еще и типов юнитов отслеживать много то просто практически нереально... быстро достигается лимит триггеров...
пропустил...
серию типа
[code]
Player 1 kills 10 Terran Marine
Action
Add Player 1 10 Ore
[/code]
[code]
Player 1 kills 20 Terran Marine
Action
Add Player 1 10 Ore
[/code]
и т.д.
Q #5 - 13 лет назад 0
гмм ну и как способ с most kills обойдет ограничение на скорость выполнения триггеров...вроде та же самая херня и получится...
я особо не врубился мож кто пояснит...ну вот случилось за 2 игровые секунды (стариковский тик, 1 реальная) два убийства, и как игра поймет че к чему?
"Когда какой-либо игрок убивает юнита, его счетчик убийств увеличивается на единицу, и как только это случается этот игрок имеет больше всего убийств и засекается условием Most Kills, где мы даем ему награду" бред, вот сделал он 2 или больше убийств за 1 тик (что вполне реально например танком или фотонками) а мы даем ему награду как за одно убийство и щетчег киллзов прибавляем только на единицу, отсюда глюки, ну допустим еще через тик триггер отработает еще раз и снова хоппа единица, кароче в какой-нить тд триггер не сможет догнать реальные килзы если я правильно понял суть описанного тут;) встречал я более извратные способы контроля киллзов но там вообще геморно писать...и кстати отдельный авард за каждого юнита это уж совсем гемор...
Worm #6 - 13 лет назад 1
nic666:
  1. "Если опираться на Kills Score, то согласен... вообще не возможно.
Но я когда предлагал свой вариант, я имел ввиду убийство нескольких арбитров, а не убийство разных типов юнитов..."
Никогда не говори никогда :) Способ 4 различает разные типы юнитов, а если твой работает только с одним типом, то это уже не 4+ :р
"И ,кстати, а что делать если Kills Score>0, а при том ни одного счетчика shuffered>0 нет???
Явно не хватает триггера на этот случай..."
Если такое случилось, значит произошла ошибка, и Бог тебе в помошь, чтобы больше ошибок не было. Да, ты прав, можно обнулить очки, что может повысить стабильность системы в случае сбоев, но здесь я рассказываю об основных приемах награждения игрока, а это, согласись, детали.
  1. "Определить кто кого убил ВОЗМОЖНО, но геморно в самом деле если делать серию триггеров типа..."
Этот способ не решает проблемы. Всегда есть возможность убить юнитов больше чем задумано.
Q:
"я особо не врубился мож кто пояснит...ну вот случилось за 2 игровые секунды (стариковский тик, 1 реальная) два убийства, и как игра поймет че к чему?"
Вопервых, этот способ не различает типов убитых юнитов. Объясняю: пусть с самого начала у тебя было 0 убийств. Тогда Хранитель начинает в состоянии Most Kills с одним убийством. Теперь ты одновременно убил двух юнитов. У тебя стало 2 убийства и ты имеешь статус Most Kills. После чего срабатывает триггер, который дает Хранителю убийство. Теперь у вас с Хранителем поровну - по два убийства и ты все ещё имеешь статус Most Kills. Ты опять засекащься триггером, который даёт тебе минерал, а Хранителю убийство. Теперь у Хранителя больше всего убийств и ничего не происходит.
"вот сделал он 2 или больше убийств за 1 тик (что вполне реально например танком или фотонками) а мы даем ему награду как за одно убийство и щетчег киллзов прибавляем только на единицу, отсюда глюки, ну допустим еще через тик триггер отработает еще раз и снова хоппа единица, кароче в какой-нить тд триггер не сможет догнать реальные килзы если я правильно понял суть описанного тут;)"
Да, ты правильно понял, недаром первым недостатком является:
"- Cкорость срабатывания ограничена скоростью обновления статуса Most Kills, которая может оказаться приличной при большом количестве одновременных смертей."
Естесственно не стоит применять этот способ в Мэднесс картах, где одно мясо, и где +/- несколько неправильно посчитанных убийств мало чего значат, но где нужна скорость набора минералов. Однако в РПГ картах, где надо четко посчитать убитых юнитов, и где важен каждый убитый, этот способ (возможно с добавлением распознавания типов юнитов) может очень даже пригодиться.
И еще одно замечание, можно увеличить скорость срабатывания триггеров в 24 раза, используя Гипер Триггеры, что даст 12 тиков в игровую секунду. Это, безусловно, не снимает проблемы одновременных убийств, т.к. они могут происходить АБСОЛЮТНО одновременно, из-за сплэш ударов Архона, Ривера и т.д.
"встречал я более извратные способы контроля киллзов но там вообще геморно писать..."
Это какие?
Q #7 - 13 лет назад 0
это все замечательно но реально стоит ли с этим париться СЕЙЧАС, если честно не думаю что карты под старик хоть сколько-нибудь актуальны...и помнится когда я писал TD v1.0 обошелся без всяких этих извратов, а зачет убийства нескольких крипов за один стал типа фичей карты - суть в том что если согнать крипов вместе и они всетаки добегут до конца дорожки, игрок потеряет только одну жизнь а не равную количеству крипов...ну херня конечно но мне влом было особо заморачиваться, как собственно тут и написано ну невозможно в старике нормальный учет таких вещей сделать:(
"Это какие?" в карте с названием photon defense или как-то так аффтар не поленился создать 255 триггеров (можт он для этого скрипт написал а можт ручками) с какими-то там условиями на юнитов, в результате контроль происходил более-менее сносно, но что именно там было написано я непомню, сколько лет прошло уж...
Зевс #8 - 13 лет назад 0
UMS: Gosu Rush v0.01
  • 957 триггеров;
)) у меня там учет денег работает как надо с помощью свичей и скоре) просто есть триггерная наработка ускоряющая работу триггеров.
з.ы: кстати вормер) все-таки из всех способов мне были известны не все).. а именно уникальный
Worm #9 - 13 лет назад 1
Зевс, работает как надо? Мне очень интересно, может ты там чего новое придумал? Что ты имеешь в виду под триггерной наработкой, ускоряющей работу триггеров?
Хотя мне всёравно не верится, что всё работает как надо... Я утверждаю, что только с использованием очков убийств, счётчиков смертей, и быть может переключателей нельзя полностью АБСОЛЮТНО точно определить, кто кого убил (в случае если убивают по крайней мере два игрока и убивают не только друг друга) и посчитать правильно очки, хотя возможно достичь очень хороших результатов, дающих сбои крайне редко.
з.ы. Я рад, что хоть кому-то статья оказалось полезной.
Зевс #10 - 13 лет назад 0
а я говорю можно))) как раз очки свитчи и.. терпение это все написать)
хотя может не идеальный, но мне хватило
Worm #11 - 13 лет назад 1
Зевс, я что-то не пойму, твоя система учета убийств - это те четыре триггера для каждого игрока с комментами "Player Color Hydralisk/Zergling Death Trigger X" плюс триггер без коммента, который обнуляет очки при привышении 550? Скажи мне, что я чего-то не понимаю :)
Зевс #12 - 13 лет назад 0
да))))))))))))))))))))))))))))))))))))) вот и говорю неидеальная, зато работает.
Maxymus #13 - 12 лет назад 1
Конечноже всё это круто, когда при убийстве юнита сразу дают к примеру 1 минерал.
Но я зделал всё на много проще, и мозголома НОЛЬ. Работает 100% идеально.
Берёшь к примеру Terran Beacon, Тоже самое Terran Flag Beacon, (круглые площадки, они обычно используются в миссиях, например довести юнита и выйграть.
Теперь переименовать его например 1 минерал за 1000 у.е.
В верхнем меню Scenario - Unit And Hero Settings, там выбрав юнит можно его переименовать в свойставах Custom name. (для чайников)
Обозначить Trigger Kills Score как у.е. (всё приводится к примеру).
|Players|
All players
...............
|Conditions|
Always.
...............
|Actions|
Comment: Leader Board.
Show Leader Board for most Kills. Display label: 'у.е.'
Disable us of computer players in leaderboard calculations.
...............
Теперь поставить этот Terran Flag Beacon гденить и разместить на нём локацию (Location1) и рядом мальенькую вторую локацию (Location2). Также по надобности использовать Properties для наземных и воздушных юнитов, и переименования.
Теперь условие.
|Players|
(выбрать тех для кого используются тригеры. например)
Player 1
Player 2
............
|Conditions|
Current Player brings at least 1 menany unit to 'Location1'.
Current Player Kills Score is at least 1000.
.............
|Action|
Comment: Money
Modify resources forCurrent Player: Add 1 Ore.
Modify Score for Current Player: Subtract 1000 Kills.
Move all any unit for Current Player at 'Location1' to 'Location2'.
Preserve Trigger.
.............
Тригер работает так.
Первый тригер
Включает Kills Score Leader Board кто больше набирёт очков от убийств. В данном варианте нет смысла кто больше набирёт очков.
Второй триггер
Если у вас есть 1000 Kills Score и 1 любой юнит зайдёт на Location1 под которой лежит Terran Flag Beacon
то у вас отнимут 1000 очков и любой юнит с этой локации переместится на локацию Location2 в притык стоящую к Location 1, юнит немного откинет на пару метров.
Триггер с повторами Preserve Trigger.
Также можно и на лечение юнита.
И также можно преукрасить тестами, задержками Wait и т.д. эти тригеры.
Можно использовать не any unit а любой другой men, specific unit и т.д.
Минусов - нет и никогда невстречались
Плюсы - всё работает, 2 тригера (считая Show Leader Board)
Так удобно использовать только в РПГ, где есть города.
Получается набрал опыта, потратил на деньги, купил обновления, пошол дальше биться с врагами.
А если в РПГ учавствуют более 1 Unit у Current Player, то нужно использовать Свитчи или кучу триггеров иногда пару триггеров во избежание других ошибок. Достаточно свитчей или указать Specific Unit.
Нпример 2 юнита лечаться по цене одного.....