Worldedit
  Worldedit
Le site sur l'éditeur de warcraft 3 !
 
  FAQFAQ   RechercherRechercher   Liste des MembresListe des Membres    Groupes d'utilisateursGroupes d'utilisateurs   medals.phpMédailles   S'enregistrerS'enregistrer 
 ProfilProfil   Se connecter pour vérifier ses messages privésSe connecter pour vérifier ses messages privés   ConnexionConnexion 
  FAQFAQ World Editor   UploadUploader une map ou une image    UploadAjouter sa map à l'annuaire   UploadConsulter l'annuaire

Gros problème avec : JNGP ou mon trigger ?

 
Poster un nouveau sujet   Répondre au sujet    Worldedit Index du Forum -> Aide sur les déclencheurs
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
 Ectelion
Membre reconnu


Inscrit le: 12 Nov 2011
Messages: 1062
Sujets: 107
Spécialité en worldedit: Inactif(Enfin presque)
Médailles: 1 (En savoir plus...)
Créateur d'unité (Quantité : 1)

MessagePosté le: 26/06/12 11:14    Sujet du message: Gros problème avec : JNGP ou mon trigger ? Citer

Voilà j'ai essayé de réaliser un sort(mon premier) en jass mais j'ai un petit problème, lorsque je veux sauvegarder le JNGP me dit qu'il manque un "endblock" en ligne 217 alors que le script total de la map fait 216 lignes, et ça ne le fait que pour mon trigger car lorsque je le copie sur une autre map il me remet le problème avec le endblock.

Mon trigger: il fait un peu tout: le spawn periodique des mobs, le sort

-les functions t2_Group_1, t2_Group_2 et T2_Condtions sont utilisées pour les dégâts et mobs respawning pour un spawn des mobs, seuls t_Conditions et t_Actions font partie de la "base du sort"

En quoi consiste le dit sort: il crée un cercle de feu qui inflige des dégâts à tout unité ennemie en contact avec lui

il reste des BJ, car je m'y connais pas trop en jass(manque de pratique) et j'ai donc convertie mes actions GUI en jass.

Jass:
function t_Conditions takes nothing returns boolean
   if ( not ( GetSpellAbilityId() == 'A000' ) ) then
       return false
      endif
   return true
endfunction

function t_Actions takes nothing returns nothing
local group circle
local location Tmp_Point
local integer I
local real R
//Le déclencheur
set Tmp_Point = GetSpellTargetLoc()
set R = 4.5
loop
 if I < 90 then
 call CreateNUnitsAtLoc( 1, 'h000', GetOwningPlayer(GetSpellAbilityUnit(), PolarProjectionBJ( Tmp_Point, 500, 4.00 * I ), 270 )
 call UnitApplyTimedLifeBJ( 3.00 + R, 'BTLF', GetLastCreatedUnit() )
 call SleepAction(0.05)
 set I = I + 1
 set R = R - 0.05
endloop
endfunction

function t2_Condtitions takes nothing returns boolean
    return ( IsUnitEnemy(GetFilterUnit(), GetOwningPlayer(GetEnumUnit())) == true )
endfunction

function t2_Group_1 takes nothing returns nothing
call ForGroupBJ( GetUnitsOfTypeIdAll('h000'), function t2_Actions )
endfunction

function t2_Grouip_2 takes nothing returns nothing
    call ForGroupBJ( GetUnitsInRangeOfLocMatching(60.00, GetUnitLoc(GetEnumUnit()), Condition(function t2_Condtions)), function t2_Group_2 )
endfunction

function t2_Actions takes nothing returns nothing
call DestroyEffectBJ(call AddSpecialEffectLocBJ( GetUnitLoc(GetFilterUnit()), "Abilities\\Weapons\\PhoenixMissile\\Phoenix_Missile.mdl" ))
 call UnitDamageTargetBJ( GetEnumUnit(), GetFilterUnit(), 3.00, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL )
endfunction

function Mobs_respawning_Actions takes nothing returns nothing
call CreateNUnitsAtLoc( 1, 'hpea', Player(11), PolarProjectionBJ(GetUnitLoc(gg_unit_Hblm_0007), GetRandomReal(270.00, 540.00), GetRandomReal(0, 359.00)), GetRandomReal(0, 359.00) )
endfunction
//===========================================================================
function InitTrig_Init takes nothing returns nothing
    local trigger t = CreateTrigger(  )
    local trigger t2 = CreateTrigger(  )
    local trigger Mobs_respawning = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( t, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerRegisterTimerEventPeriodic( Mobs_respawning, 10.00 )
    call TriggerRegisterTimerEventPeriodic( t2, 0.25 )
    call TriggerAddAction( t, function t_Actions )
    call TriggerAddAction( Mobs_respawning, function Mobs_respawning_Actions )
    call TriggerAddAction( t2, function t2_Actions )
    call TriggerAddCondition( t, function t_Conditions )
endfunction

_________________
Inactif(Enfn presque)
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Sapeur-Goblin
Floodeur prématuré


Inscrit le: 14 Oct 2009
Messages: 719
Sujets: 40
Spécialité en worldedit: Les bugs
Médailles: 1 (En savoir plus...)
Créateur d'unité (Quantité : 1)

MessagePosté le: 26/06/12 12:24    Sujet du message: Citer

Tu as oublié de mettre un endif dans ta fonction t_Actions (dans la boucle).
Pour supprimer les BJs, va dans la liste des fonctions et regarde comment elles sont construites.
Quelques petites choses que tu pourrais faire pour que le code soit plus lisible :
- Utilise une tabulation pour indenter le code, et évite d'écrire les appels de fonctions au même niveau que la déclaration de ta fonction.
-
Jass:
function t_Conditions takes nothing returns boolean
   if ( not ( GetSpellAbilityId() == 'A000' ) ) then
       return false
      endif
   return true
endfunction

Peut être remplacé par :
Jass:
function t_Conditions takes nothing returns boolean
   return GetSpellAbilityId() == 'A000'
endfunction

Cela renverra en effet true si le sort est égal à 'A000' et false sinon.
- A la place d'utiliser ForGroup pour énumérer un groupe, il est préférable d'utiliser cette méthode :
Jass:
local unit u = null
local group g = CreateGroup()
call GroupEnumUnitsInRange(g, x, y, radius, null)
loop
    set u = FirstOfGroup(g)
    exitwhen u == null
    call GroupRemoveUnit(g, u)
    // Tes actions que tu peux appliquer sur l'unité u
endloop

Par contre le groupe sera vide à la fin de la boucle, je te laisse comprendre pourquoi. Mais la plupart du temps, ça ne pose aucun problème, c'est plus rapide, et en plus, on ne doit pas créer une autre fonction pour les actions. Au lieu de créer un groupe à chaque fois, on peut aussi en utiliser qu'un seul pour toute la map : warcraft ne gère qu'une fonction à la fois, et le tout restera multi-instanciable.
- Je te conseil de tout mettre dans une scope pour pouvoir utiliser des noms de fonctions plus simples. Il suffit de les privatiser, et c'est bon Smile.
- Ah oui, aussi, évite d'utiliser les points. Les fonctions BJs en utilisent souvent, mais les natives se servent des coordonnées. C'est beaucoup plus propre et évite toute création de leak. Donc à la place de GetSpellTargetLoc, tu pourras te servir de GetSpellTargetX et Y (elles n'apparaissent pas en couleur mais existent bel et bien).
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Ectelion
Membre reconnu


Inscrit le: 12 Nov 2011
Messages: 1062
Sujets: 107
Spécialité en worldedit: Inactif(Enfin presque)
Médailles: 1 (En savoir plus...)
Créateur d'unité (Quantité : 1)

MessagePosté le: 26/06/12 14:59    Sujet du message: Citer

Jass:
scope Myscope

function t_Conditions takes nothing returns boolean
    return GetSpellAbilityId() == 'A000'
endfunction

function t_Actions takes nothing returns nothing
   local location Tmp_Point
   local integer I
   local real R
   local real x
   local real y
   local unit c
   local group g
   local unit u
//Le déclencheur
    set c = GetSpellAbilityUnit()
    set x = GetSpellTargetX()
    set y = GetSpellTargetY()
    set Tmp_Point = Location( x, y)
    set R = 9
    set I = 0
  loop
    if I < 90 then
    call CreateNUnitsAtLoc( 1, 'h000', GetOwningPlayer(c) , PolarProjectionBJ( Tmp_Point, 500.00, ( 4.00 * I2R(I) )), 270.00 )
    call UnitApplyTimedLifeBJ( ( 3.00 + R ), 'BTLF', GetLastCreatedUnit() )
    call TriggerSleepAction(0.01)
    set I = I + 1
    set R = R - 0.01
    endif
  endloop
    set u = null
    set g = CreateGroup()
    call GroupEnumUnitsInRange(g, x, y, 500, null )
        loop
        exitwhen u == null
        set u = FirstOfGroup(g)
        call GroupRemoveUnit(g, u)
        call UnitDamageTargetBJ( c, u, 60.00, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL )
        call DestroyEffect(AddSpecialEffectLocBJ( GetUnitLoc(u), "Abilities\\Weapons\\PhoenixMissile\\Phoenix_Missile.mdl" ))
        endloop
endfunction
endscope

function Mobs_respawning_Actions takes nothing returns nothing
    call CreateNUnitsAtLoc( 1, 'hpea', Player(11), PolarProjectionBJ(GetUnitLoc(Heros), GetRandomReal(270.00, 540.00), GetRandomReal(0, 359.00)), GetRandomReal(0, 359.00) )
endfunction

function Just_Initializing_Actions takes nothing returns nothing
    globals
       unit Heros
    endglobals
    call CreateNUnitsAtLoc( 1, 'Hblm', Player(0), GetRectCenter(GetPlayableMapRect()), bj_UNIT_FACING )
    set Heros = GetLastCreatedUnit()
endfunction

//===========================================================================
function InitTrig_Tout takes nothing returns nothing
    local trigger t = CreateTrigger(  )
    local trigger Mobs_respawning = CreateTrigger(  )
    local trigger Just_Initializing = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( t, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerRegisterTimerEventPeriodic( Mobs_respawning, 10.00 )
    call TriggerRegisterTimerEventSingle( Just_Initializing, 0.00 )
    call TriggerAddAction( t, function t_Actions )
    call TriggerAddAction( Mobs_respawning, function Mobs_respawning_Actions )
    call TriggerAddAction( Just_Initializing, function Just_Initializing_Actions )
    call TriggerAddCondition( t, function t_Conditions )
endfunction


J'ai modifié le code et j'y ai rajouté quelques trucs pour l'exemple(globale pour le spawn des mobs) mais je peux pas privaiser mes functions, le JassHelper m'indiquant qu'il ne les trouve pas, De plus les unités qui sont dans le cercle ne subissent pas de dégâts.
_________________
Inactif(Enfn presque)
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Sapeur-Goblin
Floodeur prématuré


Inscrit le: 14 Oct 2009
Messages: 719
Sujets: 40
Spécialité en worldedit: Les bugs
Médailles: 1 (En savoir plus...)
Créateur d'unité (Quantité : 1)

MessagePosté le: 26/06/12 15:04    Sujet du message: Citer

Citation:
mais je peux pas privaiser mes functions, le JassHelper m'indiquant qu'il ne les trouve pas

Euh, tu les privatises bien à l'intérieur d'un bloc?

Citation:
De plus les unités qui sont dans le cercle ne subissent pas de dégâts.

Tu ne sors jamais de cette boucle :
Jass:
loop
    if I < 90 then
    call CreateNUnitsAtLoc( 1, 'h000', GetOwningPlayer(c) , PolarProjectionBJ( Tmp_Point, 500.00, ( 4.00 * I2R(I) )), 270.00 )
    call UnitApplyTimedLifeBJ( ( 3.00 + R ), 'BTLF', GetLastCreatedUnit() )
    call TriggerSleepAction(0.01)
    set I = I + 1
    set R = R - 0.01
    endif
  endloop

Les actions suivantes ne seront donc jamais exécutées. A la place du if, mets plutôt un exitwhen I >= 90.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    Worldedit Index du Forum -> Aide sur les déclencheurs Toutes les heures sont au format GMT + 1 Heure
Page 1 sur 1

 
Sauter vers:  
Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum


Powered by phpBB © 2001, 2005 phpBB Group
Traduction par : phpBB-fr.com