Worldedit
  Worldedit
Le site sur l'éditeur de warcraft 3 !
 
  FAQFAQ   RechercherRechercher   Liste des MembresListe des Membres    Groupes d'utilisateursGroupes d'utilisateurs   medals.php?sid=76638df8c704b34f830ed37a81bdf9a0Mé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

Sort "Balle empoisonné"

 
Poster un nouveau sujet   Répondre au sujet    Worldedit Index du Forum -> Les sorts
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
 LightDragoon
Ptit Nouveau


Inscrit le: 01 Mai 2014
Messages: 35
Sujets: 5
Spécialité en worldedit: France


MessagePosté le: 01/05/14 22:12    Sujet du message: Sort "Balle empoisonné" Citer

Bonjour bonjour alors voilà j'ai un petit problème de déclencheur en faite je n'arrive pas à récupérer des données du gamecache.. Alors voilà mes deux triggers en question, c'est pour un sort, une boucle en l'occurence.

Le premier trigger qui lance la boucle et sauvegarde les variables :
Gui:
Trigger:
Balle empoisonne
Collapse Evénements
Unité - A unit Initie l'effet d'une compétence
Collapse Conditions
(Ability being cast) Egal à  (==) Balle empoisonné
Collapse Actions
Custom script:   local integer i = 0
Custom script:   local unit caster = GetSpellAbilityUnit()
Custom script:   local unit target = GetSpellTargetUnit()
Custom script:   loop
Cache du jeu - Store (caster) as caster of Category in GC
Cache du jeu - Store (target) as target of Category in GC
Custom script:   exitwhen i > 6
Déclencheur - Run Balle empoisonne Boucle <gen> (ignoring conditions)
Wait 1.00 seconds
Custom script:   set i =  i+1
Custom script:   endloop

Et le deuxième trigger qui fait l'action :
Gui:
Trigger:
Balle empoisonne Boucle
Evénements
Conditions
Collapse Actions
Custom script:   local unit caster = GetStoredUnit( udg_GC,  "caster", "caster" )
Custom script:   local unit target = GetStoredUnit( udg_GC,  "target", "target" )
Unité - Cause (caster) to damage (target), dealing ((Real((Agilité of (caster) (Inclure bonuses)))) x 0.50) damage of attack type Héros and damage type Universel
Effet spécial - Create a special effect at (Position of (target)) using AbilitiesSpellsHumanThunderClapThunderClapCaster.mdl
Effet spécial - Destroy (Last created special effect)

_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé Adresse AIM
 florianlenecro
Floodeur prématuré


Inscrit le: 12 Nov 2009
Messages: 711
Sujets: 50
Spécialité en worldedit: Vétéran


MessagePosté le: 02/05/14 09:49    Sujet du message: Citer

Pourquoi ne pas plutot utiliser les Hache table?
_________________
C'est en forgeant que l'on devient forgeron
"Le feu ne peut tuer le dragon"
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: 02/05/14 10:11    Sujet du message: Citer

C'est parce que les gamecache ça a pas pour but de sauvegarder des donner pour une map, mais de map en map (comme dans les campagnes). Faut faire comme l'a dit florianlenecro, avec les hashtables.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 LightDragoon
Ptit Nouveau


Inscrit le: 01 Mai 2014
Messages: 35
Sujets: 5
Spécialité en worldedit: France


MessagePosté le: 02/05/14 10:54    Sujet du message: Citer

D'acc merci ! Je vais essayer


Edit :
Alors voilà j'ai un petit problème en faite quand je veux mettre une donnée dans ma table de hachage je met 0 et l'ID de l'unité pour que le sort soit multi instanciable.. Mais comment met-on l'ID de l'unité ? Quand je mets
"Get Handle ID" je clique sur handle mais là impossible de retrouver l'ID de mon unit' il me dit qu'il n'y a aucune variable du type associé.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé Adresse AIM
 florianlenecro
Floodeur prématuré


Inscrit le: 12 Nov 2009
Messages: 711
Sujets: 50
Spécialité en worldedit: Vétéran


MessagePosté le: 02/05/14 11:08    Sujet du message: Citer

J'ai le même pour le pour Gui donc je t'invite a utiliser les commandes jass en custom script :/

Hashtable JASS
_________________
C'est en forgeant que l'on devient forgeron
"Le feu ne peut tuer le dragon"
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 LightDragoon
Ptit Nouveau


Inscrit le: 01 Mai 2014
Messages: 35
Sujets: 5
Spécialité en worldedit: France


MessagePosté le: 02/05/14 11:11    Sujet du message: Citer

D'acc merci pour le link !


Edit :

Décidement j'y arrive toujours pas.. c'est rageant ! Sad

Re Edit :
Alors voilà j'ai réussis à sauvegarder les données.. Mais maintenant comment les récupérer ?
Gui:
Trigger:
Custom script:   call SaveUnitHandleBJ( caster, 0, GetHandleIdBJ(caster), udg_HashTable )
Custom script:   call SaveUnitHandleBJ( target, 0, GetHandleIdBJ(target), udg_HashTable )

_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé Adresse AIM
 florianlenecro
Floodeur prématuré


Inscrit le: 12 Nov 2009
Messages: 711
Sujets: 50
Spécialité en worldedit: Vétéran


MessagePosté le: 02/05/14 12:07    Sujet du message: Citer

Grace aux commandes load :/, et j te conseille de prendre celle qui n'ont pas BJ.
Exemple
Jass:
LoadReal(udg_htDuel, GetHandleId(udg_Heroes[i]), 0 )
SaveReal(udg_htDuel, GetHandleId(udg_Heroes[i]), 0, x)

_________________
C'est en forgeant que l'on devient forgeron
"Le feu ne peut tuer le dragon"


Dernière édition par florianlenecro le 02/05/14 12:11; édité 1 fois
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 LightDragoon
Ptit Nouveau


Inscrit le: 01 Mai 2014
Messages: 35
Sujets: 5
Spécialité en worldedit: France


MessagePosté le: 02/05/14 12:09    Sujet du message: Citer

Oui mais je comprend pas comment récupérer l'ID d'une unit sur un autre déclencheur sans variable global :/
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé Adresse AIM
 florianlenecro
Floodeur prématuré


Inscrit le: 12 Nov 2009
Messages: 711
Sujets: 50
Spécialité en worldedit: Vétéran


MessagePosté le: 02/05/14 12:15    Sujet du message: Citer

Ben si elle est stocké dans ta hashtable tu fais
Jass:
set TaVar = LoadUnit(udg_TaHash, TaParentKey, et TachildKey ou est stocké ton hero )

_________________
C'est en forgeant que l'on devient forgeron
"Le feu ne peut tuer le dragon"
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 LightDragoon
Ptit Nouveau


Inscrit le: 01 Mai 2014
Messages: 35
Sujets: 5
Spécialité en worldedit: France


MessagePosté le: 02/05/14 12:17    Sujet du message: Citer

Je pense que je me suis mal exprimé en faite c'est que l'handle de l'unité qui est enregistré dans le premier déclencheur on pas réutilisé ça dans le deuxième déclencheur pour récupérer l'ID "GetHandleIdBJ(target)"
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé Adresse AIM
 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: 02/05/14 12:41    Sujet du message: Citer

copies ça dans le map header et appelle-la après le wait

Jass:
function Poisonball takes unit t, unit c, string m returns nothing
    local real x = GetUnitX(t)
    local real y = GetUnitY(t)
    call UnitDamageTarget( c, t, (GetHeroAgi( c, true ) * 0.50), true, false, ATTACK_TYPE_MAGIC, DAMAGE_TYPE_POISON, WEAPON_TYPE_WHOKNOWS )
    call DestroyEffect(AddSpecialEffect( m, x, y))
endfunction


m c'est la chaine de ton effet "blablabla"
t ta cible
c le lanceur

donc tu l'appelle comme une autre fonction, c'est à dire:
call Poisonball( maCible, monLanceurdesort, "Effect/Human/TropCool.mdl")

et elle fait le reste pour toi, pas besoin de store dans une quelconque hashtable.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Tirlititi



Inscrit le: 21 Fév 2010
Messages: 1784
Sujets: 22
Spécialité en worldedit: La modestie
Médailles: 1 (En savoir plus...)
Grand mage créateur de sort (Quantité : 1)

MessagePosté le: 02/05/14 12:54    Sujet du message: Citer

Hum...

Il y a 2 solutions classiques pour faire un sort comme ça :
- Tu gardes la boucle avec un "Wait" dedans et dans ce cas, tu as juste besoin d'utiliser des variables globales :
Gui:
Trigger:
Balle empoisonne
Collapse Evénements
Unité - A unit Initie l'effet d'une compétence
Collapse Conditions
(Ability being cast) Egal à  (==) Balle empoisonné
Collapse Actions
Custom script:   local integer i = 0
Custom script:   local unit caster = GetSpellAbilityUnit()
Custom script:   local unit target = GetSpellTargetUnit()
Custom script:   loop
Custom script:   exitwhen i > 6
Custom script:   set ud_Balle_Empoisonne_Caster = caster
Custom script:   set ud_Balle_Empoisonne_Target = target
Déclencheur - Run Balle empoisonne Boucle <gen> (ignoring conditions)
Wait 1.00 seconds
Custom script:   set i =  i+1
Custom script:   endloop

Et les unités sont récupérées via les variables globales "Balle_Empoisonne_Caster" et "Balle_Empoisonne_Target" dans l'autre déclo.

- Tu utilises un timer à la place du "Wait" et tu as alors besoin d'une hashtable et je te conseille de passer au full-jass ("Convertir en script personnalisé) :

Jass:
function Balle_empoisonne_Boucle takes nothing returns nothing
    local timer t = GetExpiredTimer()
    local unit caster = LoadUnitHandle(udg_TaHash, GetHandleId(t), 0)
    local unit target = LoadUnitHandle(udg_TaHash, GetHandleId(t), 1)
    call UnitDamageTargetBJ(caster, target, GetHeroAgi(caster, true)*0.5, DAMAGE_TYPE_UNIVERSAL, ATTACK_TYPE_HERO
    call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Human\\ThunderClap\\ThunderClapCaster.mdl", GetUnitX(target), GetUnitY(target))
endfunction

function Trig_Balle_empoisonne_Actions takes nothing returns nothing
    local unit caster = GetSpellAbilityUnit()
    local unit target = GetSpellTargetUnit()
    local timer t = CreateTimer()
    call SaveUnitHandle(udg_TaHash, GetHandleId(t), 0, caster)
    call SaveUnitHandle(udg_TaHash, GetHandleId(t), 1, target)
    call TimerStart(t, 1.00, true, function Trig_Balle_empoisonne_Boucle_Actions)
    set t = null
endfunction

function Trig_Balle_empoisonne_Conditions takes nothing returns boolean
    return GetSpellAbilityId()=='Abem'
endfunction

function InitTrig_Balle_empoisonne takes nothing returns nothing
    set gg_trg_Balle_empoisonne = CreateTrigger()
    call TriggerAddAction(gg_trg_Balle_empoisonne, function Trig_Balle_empoisonne_Actions)
    call TriggerAddCondition(gg_trg_Balle_empoisonne, Condition(function Trig_Balle_empoisonne_Conditions))
endfunction


'Abem' est l'ID de ton sort (pour la voir, il faut aller dans l'éditeur d'objets et activer l'option "Afficher les valeurs comme données brutes").
L'intérêt d'utiliser un timer à la place d'un wait, c'est que c'est plus précis et que c'est indépendant du lag des joueurs (alors qu'un wait dépend du lag).

Grillé par Lord ^^ Sa solution est bonne aussi pour remplacer ma 1ère méthode.
_________________
Warcraft III, c'était mieux avant. Y'avait des purs chefs-d'oeuvres du mapping !
Road Of Glory (par moi)
Casse-briques (par moi)
Temple de Glace (par moi)
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 LightDragoon
Ptit Nouveau


Inscrit le: 01 Mai 2014
Messages: 35
Sujets: 5
Spécialité en worldedit: France


MessagePosté le: 02/05/14 13:13    Sujet du message: Citer

Je vais prendre la solution de Lord j'avais pas pensé à faire ça.. Mais c'est plus intelligent :p ! En tous cas merci pour votre aide Very Happy
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé Adresse AIM
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    Worldedit Index du Forum -> Les sorts Toutes les heures sont au format GMT + 1 Heure
Page 1 sur 1
La question posée dans ce topic a été résolue !

 
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