Counter Attack - On evasion

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Counter Attack - On evasion

    Ich habe bis jetzt einen Skill A auf Ausweichen des Nachtelfen Helden.
    Einen Skill B der (Schaden macht) mit der Range von 650 (war mal Stormbold)

    Nun wollt ich fragen über was geh ich am besten wen für jedes Evasion btw Fehlschlag des Gegner durch Skill A und andere (Item etz pp) Skill B auf den der Verfehlt hat auslöse.
  • Du kannst theoretisch machen :

    Ereignis
    A unit gets attacked
    Bedingung
    Unit learned skill xxx
    +Damage which unit got >5
    Aktion
    create dummy unit
    order dummy unit to xxx attacking unit.
    destroy dummy unit


    so müsste es eig funzen
  • Das kannst du so nicht machen.
    Jomons trigger ist schon einmal nicht möglich, da das Ereignis "Unit gets attacked" nicht mit der "Get Damage"-Funktion funktioniert. Desweiteren zählt ein Fehlschlag nicht einmal als versuchter Angriff, weshalb das Event erst garnicht auslöst.

    Wie Manwe_Sulimo sagte, kannst du dir eine Eigene Art von Evasion triggern (Ala Backtrack und Dispersion)

    Dazu benötigst du ein das Event "Spezific Unit takes Damage"
    Wie du hier schon erkennen solltest, bezieht sich das Event aber nur auf eine einzige Einheit. Ein "Any Unit takes Damage" Event gibt es nicht. Um die Fähigkeit nun auch für mehrere Einheit zugänglich zu machen, musst du beim erstmaligen lernen der Fähigkeit einen Dynamischen Trigger erstelle, oder zumindest ein Dynamisches Event zu einem schon existierenden Trigger erstellen. Dies dürfte für dich einfacher sein, da dafür kein JASS nötog ist.

    Wichtig!!!
    Als erstes erstellst du eine Variable mit dem Namen "GameCache", vom Typ Spiel-Cache. Bitte Groß und Kleinschreibung beachten. Wenn du das nicht tust, dann stürzt der Editor beim folgnden Script ab.
    Als nächstes Kopierst du folgenden Script in deinen Header (das ist das große Textfeld, welches erscheint, wenn du im Triggereditor auf keine Kategorie im baum, sondern auf den Stamm (ganz oben - trägt deinen Kartennamen) klickst)

    Quellcode

    1. function H2I takes handle h returns integer
    2. return h
    3. return 0
    4. endfunction
    5. function LocalVars takes nothing returns gamecache
    6. if (udg_GameCache==null) then
    7. set udg_GameCache=InitGameCache("jasslocalvars.w3v")
    8. endif
    9. return udg_GameCache
    10. endfunction
    11. function SetHandleHandle takes handle subject, string name, handle value returns nothing
    12. if value==null then
    13. call FlushStoredInteger(LocalVars(),I2S(H2I(subject)),name)
    14. else
    15. call StoreInteger(LocalVars(), I2S(H2I(subject)), name, H2I(value))
    16. endif
    17. endfunction
    18. function SetHandleInt takes handle subject, string name, integer value returns nothing
    19. if value==0 then
    20. call FlushStoredInteger(LocalVars(),I2S(H2I(subject)),name)
    21. else
    22. call StoreInteger(LocalVars(), I2S(H2I(subject)), name, value)
    23. endif
    24. endfunction
    25. function SetHandleReal takes handle subject, string name, real value returns nothing
    26. if value==0 then
    27. call FlushStoredReal(LocalVars(), I2S(H2I(subject)), name)
    28. else
    29. call StoreReal(LocalVars(), I2S(H2I(subject)), name, value)
    30. endif
    31. endfunction
    32. function SetHandleString takes handle subject, string name, string value returns nothing
    33. if value==null then
    34. call FlushStoredString(LocalVars(), I2S(H2I(subject)), name)
    35. else
    36. call StoreString(LocalVars(), I2S(H2I(subject)), name, value)
    37. endif
    38. endfunction
    39. function SetHandleBoolean takes handle subject, string name, boolean value returns nothing
    40. if value==false then
    41. call FlushStoredBoolean(LocalVars(), I2S(H2I(subject)), name)
    42. else
    43. call StoreBoolean(LocalVars(), I2S(H2I(subject)), name, value)
    44. endif
    45. endfunction
    46. function GetHandleHandle takes handle subject, string name returns handle
    47. return GetStoredInteger(LocalVars(), I2S(H2I(subject)), name)
    48. return null
    49. endfunction
    50. function GetHandleInt takes handle subject, string name returns integer
    51. return GetStoredInteger(LocalVars(), I2S(H2I(subject)), name)
    52. endfunction
    53. function GetHandleReal takes handle subject, string name returns real
    54. return GetStoredReal(LocalVars(), I2S(H2I(subject)), name)
    55. endfunction
    56. function GetHandleString takes handle subject, string name returns string
    57. return GetStoredString(LocalVars(), I2S(H2I(subject)), name)
    58. endfunction
    59. function GetHandleBoolean takes handle subject, string name returns boolean
    60. return GetStoredBoolean(LocalVars(), I2S(H2I(subject)), name)
    61. endfunction
    62. function GetHandleUnit takes handle subject, string name returns unit
    63. return GetStoredInteger(LocalVars(), I2S(H2I(subject)), name)
    64. return null
    65. endfunction
    66. function GetHandleTimer takes handle subject, string name returns timer
    67. return GetStoredInteger(LocalVars(), I2S(H2I(subject)), name)
    68. return null
    69. endfunction
    70. function GetHandleTrigger takes handle subject, string name returns trigger
    71. return GetStoredInteger(LocalVars(), I2S(H2I(subject)), name)
    72. return null
    73. endfunction
    74. function GetHandleEffect takes handle subject, string name returns effect
    75. return GetStoredInteger(LocalVars(), I2S(H2I(subject)), name)
    76. return null
    77. endfunction
    78. function GetHandleLightning takes handle subject, string name returns lightning
    79. return GetStoredInteger(LocalVars(), I2S(H2I(subject)), name)
    80. return null
    81. endfunction
    82. function GetHandleGroup takes handle subject, string name returns group
    83. return GetStoredInteger(LocalVars(), I2S(H2I(subject)), name)
    84. return null
    85. endfunction
    86. function GetHandleWidget takes handle subject, string name returns widget
    87. return GetStoredInteger(LocalVars(), I2S(H2I(subject)), name)
    88. return null
    89. endfunction
    90. function GetHandleCondition takes handle subject, string name returns triggercondition
    91. return GetStoredInteger(LocalVars(), I2S(H2I(subject)), name)
    92. return null
    93. endfunction
    94. function GetHandleAction takes handle subject, string name returns triggeraction
    95. return GetStoredInteger(LocalVars(), I2S(H2I(subject)), name)
    96. return null
    97. endfunction
    98. function GetHandlePlayer takes handle subject, string name returns player
    99. return GetStoredInteger(LocalVars(), I2S(H2I(subject)), name)
    100. return null
    101. endfunction
    102. function GetHandleLoc takes handle subject, string name returns location
    103. return GetStoredInteger(LocalVars(), I2S(H2I(subject)), name)
    104. return null
    105. endfunction
    106. function FlushHandleLocals takes handle subject returns nothing
    107. call FlushStoredMission(LocalVars(), I2S(H2I(subject)) )
    108. endfunction
    109. //========================================================================================
    110. function DamageBlockChild takes nothing returns nothing
    111. local timer t = GetExpiredTimer()
    112. local unit u = GetHandleUnit(t, "damaged")
    113. call SetUnitState(u, UNIT_STATE_LIFE, GetUnitState(u, UNIT_STATE_LIFE) + GetHandleReal(t, "damageadd"))
    114. call FlushHandleLocals(t)
    115. call DestroyTimer(t)
    116. set u = null
    117. set t = null
    118. endfunction
    119. function DamageBlock takes unit u, real percent returns nothing
    120. local timer t
    121. if GetUnitState(u, UNIT_STATE_LIFE) + (GetEventDamage() / 100.00 * percent) > GetUnitState(u, UNIT_STATE_MAX_LIFE) then
    122. set t = CreateTimer()
    123. call SetHandleReal(t, "damageadd", (GetEventDamage() / 100.00 * percent) - (GetUnitState(u, UNIT_STATE_MAX_LIFE) - GetUnitState(u, UNIT_STATE_LIFE)))
    124. call SetHandleHandle(t, "damaged", u)
    125. call SetUnitState(u, UNIT_STATE_LIFE, GetUnitState(u, UNIT_STATE_MAX_LIFE))
    126. call TimerStart(t, 0.00, false, function DamageBlockChild)
    127. endif
    128. call SetUnitState(u, UNIT_STATE_LIFE, GetUnitState(u, UNIT_STATE_LIFE) + (GetEventDamage() / 100.00 * percent))
    129. set t = null
    130. endfunction
    Alles anzeigen

    Das ist der Script für eine DamageBlock Funktion. Du könntest auch eine einfachere Variante nehmen, welche allerdings zur Folge hätte, dass du bei einem Schlag, welcher mehr Schaden machen würde, als du schon Leben verloren hast, nicht funktionieren würde.

    Wenn du die Variable erstellt und den Script in den Header kopiert hast, speicherst du. Wenn der WE abstürzt, hast du die Variable falsch benannt oder nicht erstellt.

    Nun erstellst du einen Trigger ohne Ereingnis mit dem Namen "EvationAct". Als Bedingung musst du nun die Chancen für das Triggern der Evasion eintragen. Dies machst du auf folgende Art und Weise:

    Du guckst bei Bedingungen nach Integer Comparision und stellst folgendes ein:

    Quellcode

    1. Bedingungen
    2. (Random integer number between 0 and 100) Kleiner gleich <Chance in % (0-100)>


    Als Aktion stellst du einfach folgendes ein:
    Custim Script - call DamageBlock(GetTriggerUnit(),100)
    Die Aktion Custom Script findest du beinahe als erstes in der gesamten Liste. Dort kopierst du einfach das Rot-Makierte rein.
    Als Folgeatkionen stellst du ein, dass an der Stelle der Triggering Unit eine DummyUnit erstellt wird, welche deine Fähigkeit auf die Damage Source castet und anschließend verschwindet.

    Jetzt hast du einen Teil deines Triggers fertig.

    Du erstellst einen weiteren Trigger, den du EvasionLearn nennst. In diesem gibst du als Aktion "Einheit erlernt eine Fähigkeit" und als Bedingung "Heroskill - Learned Hero Skill = Dein Skill" und "integer Comparision - Unit Ability Level - Level deines Skills ist für die Triggering Unit = 1"
    Als Aktion stellst du ein:
    Auslöser - Add New Event - EvasionAct das Event Triggering Unit Takes Damage.

    Das Wort "Würde" kennen manche Menschen nur noch als Konjunktiv II in dem Satz: "Für Geld würde ich alles machen."