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
|
Posté le: 01/05/14 22:12 Sujet du message: Sort "Balle empoisonné" |
|
|
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 :
Et le deuxième trigger qui fait l'action :
_________________
|
|
Revenir en haut |
|
|
florianlenecro Floodeur prématuré
Inscrit le: 12 Nov 2009 Messages: 711 Sujets: 50 Spécialité en worldedit: Vétéran
|
Posté le: 02/05/14 09:49 Sujet du message: |
|
|
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 |
|
|
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...)
|
Posté le: 02/05/14 10:11 Sujet du message: |
|
|
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 |
|
|
LightDragoon Ptit Nouveau
Inscrit le: 01 Mai 2014 Messages: 35 Sujets: 5 Spécialité en worldedit: France
|
Posté le: 02/05/14 10:54 Sujet du message: |
|
|
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 |
|
|
florianlenecro Floodeur prématuré
Inscrit le: 12 Nov 2009 Messages: 711 Sujets: 50 Spécialité en worldedit: Vétéran
|
Posté le: 02/05/14 11:08 Sujet du message: |
|
|
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 |
|
|
LightDragoon Ptit Nouveau
Inscrit le: 01 Mai 2014 Messages: 35 Sujets: 5 Spécialité en worldedit: France
|
Posté le: 02/05/14 11:11 Sujet du message: |
|
|
D'acc merci pour le link !
Edit :
Décidement j'y arrive toujours pas.. c'est rageant !
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 |
|
|
florianlenecro Floodeur prématuré
Inscrit le: 12 Nov 2009 Messages: 711 Sujets: 50 Spécialité en worldedit: Vétéran
|
Posté le: 02/05/14 12:07 Sujet du message: |
|
|
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 |
|
|
LightDragoon Ptit Nouveau
Inscrit le: 01 Mai 2014 Messages: 35 Sujets: 5 Spécialité en worldedit: France
|
Posté le: 02/05/14 12:09 Sujet du message: |
|
|
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 |
|
|
florianlenecro Floodeur prématuré
Inscrit le: 12 Nov 2009 Messages: 711 Sujets: 50 Spécialité en worldedit: Vétéran
|
Posté le: 02/05/14 12:15 Sujet du message: |
|
|
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 |
|
|
LightDragoon Ptit Nouveau
Inscrit le: 01 Mai 2014 Messages: 35 Sujets: 5 Spécialité en worldedit: France
|
Posté le: 02/05/14 12:17 Sujet du message: |
|
|
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 |
|
|
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...)
|
Posté le: 02/05/14 12:41 Sujet du message: |
|
|
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 |
|
|
Tirlititi
Inscrit le: 21 Fév 2010 Messages: 1785 Sujets: 22 Spécialité en worldedit: La modestie Médailles: 1 (En savoir plus...)
|
Posté le: 02/05/14 12:54 Sujet du message: |
|
|
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 :
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. _________________
|
|
Revenir en haut |
|
|
LightDragoon Ptit Nouveau
Inscrit le: 01 Mai 2014 Messages: 35 Sujets: 5 Spécialité en worldedit: France
|
|
Revenir en haut |
|
|
|