Inscrit le: 15 Jan 2010 Messages: 12 Sujets: 4 Spécialité en worldedit: Faire des trucs avec les touches du clavier
Posté le: 29/03/10 22:39 Sujet du message: Pb de random HELP !!!!
Avant tout bonjour, je rencontre un problème de trigger sur ma map HEROES N ARMIES LEAGUE, je remercie par avance les âmes charitables qui voudront me faire partager leurs connaissances, et m' aider à résoudre mon problème.
J' utilise le système de sélection de héros suivant:
- le joueur a le choix de pick en cliquant sur le portrait du héros visé, placé dans une taverne.
- le joueur peut random en cliquant sur le portrait du random héros (un point d' interrogation), placé dans la même taverne.
-les joueurs ne doivent pas pouvoir se retrouver avec plus d' un type de héros (ex: 2 paladins,4 rangers, etc ...).
Voici mes problèmes:
-de temps à autre un joueur ayant random n' obtient pas de héros ( ce qui est plutôt pénalisant quand sur la map on ne contrôle qu' une unité, en l' ocurrence un héros).
-de plus ce système au cours de son exécution provoque du lag.
Mon système s' articule autour de 3 triggers:
1er Trigger: Trigger config
Jass:
function Trig_Hero_Actions takes nothing returns nothing
local integer i =0
set Hero[1]=('Hamg')
set HeroIcon[1]="ReplaceableTextures\\CommandButtons\\BTNHeroArchMage.blp"
//ainsi de suite pour les 11 autres heros hum ...
loop
exitwhen i>12
call UnitPoolAddUnitType(PoolHum,Hero[i],1.0)
set i= i+1
endloop
set Hero[13]=('Oshd')
set HeroIcon[13]="ReplaceableTextures\\CommandButtons\\BTNShadowHunter.blp"
//blablabla listing hero orcs ...
set i = 13
loop
exitwhen i>24
call UnitPoolAddUnitType(PoolOrc,Hero[i],1.0)
set i=i+1
endloop
endfunction
//===========================================================================
function InitTrig_Hero takes nothing returns nothing
local trigger t = CreateTrigger( )
call TriggerAddAction( t, function Trig_Hero_Actions )
endfunction
2ème Trigger: Trigger Hum
Jass:
function PickHum_C takes nothing returns boolean
if (not(GetUnitTypeId(GetBuyingUnit()) == 'e000' ))then
return false
endif
return true
endfunction
function RandomHum takes nothing returns nothing
local unit s = GetSoldUnit()
local unit v = GetBuyingUnit()
local player p = GetOwningPlayer(s)
local real X = -3550.0
local real Y = -300.0
local effect Fx
local integer id = GetPlayerId(p)
integer i =0
call MP(" You will be given a random hero soon, don't panic ! ")
call RemoveUnit(s)
call RemoveUnit(v)
call PolledWait(1.)
set PHero[id]=PlaceRandomUnit(PoolHum,p,X,Y,0.0)
loop
exitwhen i>4
call SetPlayerTechMaxAllowed(p,GetUnitTypeId(PHero[id]),0)
set i = i+1
endloop
call UnitPoolRemoveUnitType(PoolHum,GetUnitTypeId(PHero[id]))
call UnitAddItemByIdSwapped('ankh',PHero[id])
call UnitAddItemByIdSwapped('mcou',PHero[id])
call PanCameraToForPlayer(p,X,Y)
call SelectUnitForPlayerSingle(PHero[id],p)
call MOrc(GetPNC(p) + " has randomed the " + GetUnitName(PHero[id]))
set Fx = (AddSpecialEffectTarget("Abilities\\Spells\\Other\\Awaken\\Awaken.mdl",PHero[id],"origin"))
call DestroyEffect(Fx)
set Fx = null
set s = null
set v = null
set p = null
endfunction
function PickHum_A takes nothing returns nothing
local unit s = GetSoldUnit()
local unit v = GetBuyingUnit()
local player p = GetOwningPlayer(s)
local real X = -3550.0
local real Y = -300.0
local effect Fx
local integer id = GetPlayerId(p)
set PHero[id]=s
if ( not(GetUnitTypeId(s) == 'E004')) then
call UnitPoolRemoveUnitType(PoolHum,GetUnitTypeId(PHero[id]))
call RemoveUnit(v)
call SetUnitPosition(PHero[id],X,Y)
call SetUnitFacing(PHero[id],0.0)
call UnitAddItemById(PHero[id],'ankh')
call PanCameraToForPlayer(p,X,Y)
call SelectUnitForPlayerSingle(PHero[id],p)
call MOrc(GetPNC(p) + " has picked the " + GetUnitName(PHero[id]))
set Fx = (AddSpecialEffectTarget("Abilities\\Spells\\Other\\Awaken\\Awaken.mdl",PHero[id],"origin"))
call DestroyEffect(Fx)
set Fx = null
else
call RandomHum()
endif
set s = null
set v = null
set p = null
endfunction
//===========================================================================
function InitTrig_PickHum takes nothing returns nothing
local trigger t= CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ(t, EVENT_PLAYER_UNIT_SELL)
call TriggerAddCondition(t,Condition(function PickHum_C))
call TriggerAddAction(t, function PickHum_A)
endfunction
3ème Trigger: Trigger Orc
Le même que celui d' en haut en l' adaptant aux héros Orcs.
Note: MAll et MP sont des fonctions customs basées sur DisplayTimedText.
Voila si un gentleman pouvait m' aider ... _________________
Winners never leave, Leavers never win
Dernière édition par MRHEATSEEK le 30/03/10 18:57; édité 1 fois
Inscrit le: 23 Aoû 2007 Messages: 7146 Sujets: 147 Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance Médailles: 2 (En savoir plus...)
Posté le: 30/03/10 11:40 Sujet du message:
Simple, tu détruits tes triggers avant qu'ils ne puissent être utilisés.
Je peux donc t'assurer que le lag ne vient pas de là étant donné que les triggers ne sont jamais déclenchés. _________________
Inscrit le: 15 Jan 2010 Messages: 12 Sujets: 4 Spécialité en worldedit: Faire des trucs avec les touches du clavier
Posté le: 30/03/10 19:22 Sujet du message:
Mmm j' ai fais des changements, mais j' ai toujours les mêmes problemes je comprends toujours pas pourquoi j' obtiens pas de heros par moment. _________________
Inscrit le: 23 Aoû 2007 Messages: 7146 Sujets: 147 Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance Médailles: 2 (En savoir plus...)
Posté le: 30/03/10 19:37 Sujet du message:
Il faudrait que tu apprennes à débugger par toi même, affiche des messages un peu partout dans ton code (BJDebugMsg), pour savoir ce qui se passe, quand ca se passe, ou tout simplement si ca se passe. _________________
Inscrit le: 15 Jan 2010 Messages: 12 Sujets: 4 Spécialité en worldedit: Faire des trucs avec les touches du clavier
Posté le: 31/03/10 22:06 Sujet du message:
C' est bon j' ai trouvé la cause du héros "missing" j' avais dans ma variable à deploiement héros une valeur à 0, donc le trigger me créait bah rien ...
Par contre je trouve le processus d' attribution de heros random toujours aussi laggy.
Est-ce qu' en utilisant une table cela reduirait le temps d' execution? _________________
Inscrit le: 23 Aoû 2007 Messages: 7146 Sujets: 147 Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance Médailles: 2 (En savoir plus...)
Posté le: 01/04/10 00:05 Sujet du message:
C'est plus la création d'unités je pense, as tu un pc en carton ?
Essaye aussi de preload le modèle de ton effet spécial ainsi que les modèles des types unités utilisés (au pire si tu ne sais pas utiliser Preload, tu peux créer/détruire ces unités/effet spécial à l'init de la map)
PS :
Relis toi et cherche l'utilité de la boucle actuelle :
Jass:
loop
exitwhen i>4
call SetPlayerTechMaxAllowed(p,GetUnitTypeId(PHero[id]),0)
set i = i+1
endloop
Inscrit le: 15 Jan 2010 Messages: 12 Sujets: 4 Spécialité en worldedit: Faire des trucs avec les touches du clavier
Posté le: 01/04/10 00:19 Sujet du message:
Citation:
C'est plus la création d'unités je pense, as tu un pc en carton ?
Lawl j' ai un avion de chasse.
Citation:
Essaye aussi de preload le modèle de ton effet spécial ainsi que les modèles des types unités utilisés
Je vais essayer ça.
Le truc c' est que j' ai tester un system random celui de ryoko_sd dans son dota template et ca freezait moins longtemps.Il stockait les heros dans le gamecache, pas moi ,dois-je y voir une relation de cause à effet?Je te remercie par avance pour tes conseils éclairés. _________________
Inscrit le: 23 Aoû 2007 Messages: 7146 Sujets: 147 Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance Médailles: 2 (En savoir plus...)
Posté le: 01/04/10 00:29 Sujet du message:
Jamais utilisé une pool, mais je ne peux pas croire qu'une aussi simple utilisation puisse faire freez une bête de course.
A moins que tu utilises une loop quelque part que je n'aurais pas vu (pas à l'init osef, mais in game pendant le choix)
Je ne comprends pas bien ta phrase, mais quoi qu'il en soit sache que le gamecache ne devrait être plus utilisé que pour son utilisation initiale, transférer des données d'une map à une autre dans le cadre d'une campagne.
On a des hashtable now. _________________
Inscrit le: 15 Jan 2010 Messages: 12 Sujets: 4 Spécialité en worldedit: Faire des trucs avec les touches du clavier
Posté le: 01/04/10 00:40 Sujet du message:
OMAGAD, je viens de tester avec le preload ca fonctionne au poil pas une miette de freeze meme en regardant sous le tapis.Merci pour l' idée je te donne rendez-vous dans un prochain topic "Aide sur les declencheurs" _________________
Page 1 sur 1 La question posée dans ce topic a été résolue !
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