Help needed for little script.

Talk about creating Grimrock 1 levels and mods here. Warning: forum contains spoilers!
YannBastian
Posts: 8
Joined: Fri Oct 11, 2013 2:22 pm

Re: Help needed for little script.

Post by YannBastian »

It's that i did. I cloned an ogre for the hook.
User avatar
Diarmuid
Posts: 807
Joined: Thu Nov 22, 2012 6:59 am
Location: Montreal, Canada
Contact:

Re: Help needed for little script.

Post by Diarmuid »

Salut!

Je suis sur que je peux t'aider. Alors en gros tu veux spawer une porte et une serrure lorsqu'un monstre meurt?

D'abord, cloneObject l'ogre en lui donnant un "name" unique et lui ajoutant un onDie hook. Un truc pour éviter de faire Ctrl-R toutes les deux secondes pour reloader le .lua: dans le hook, tu peux caller une fonction dans un autre script.

Mettons que dans le editor, tu crées un script_entity nommé par exemple puzzlePorte2 (id). Dedans, tu peux mettre une fonction, par exemple:

Code: Select all

function mortDeLOgre()
 [...] bla bla bla
end
Alors, dans le cloneObject, le onDie peut être simplement:

Code: Select all

onDie = function(monster)
     puzzlePorte2.mortDeLOgre()
end
La syntaxe est id du script entity - point - nom de la fonction. Comme ça, ensuite, tu peux éditer et tester tranquillement ta fonction dans le editor.

Alors pour ce qui est de la porte et de la serrure:

Code: Select all

function mortDeLOgre()

	-- Spawn la porte, remplace "door" par le modèle voulu. Le id doit être unique.
	spawn("door", level, x, y, facing, "maPorte")
	-- Spawn la serrure et le connecteur. La serrure a pas besoin de id unique. 
	-- remplace "lock" par ton modèle et "key" par le modele de clé pour ouvrir.
	spawn("lock", level, x, y, facing)
		:setOpenedBy("key")
		:addConnector("activate", "maPorte", "open")
		
end
Pour le monstre qui laisser tomber la clé, tu pourrais la spawner via script, mais le plus simple est juste de la mettre sur le monstre dans l'éditeur.

J'espère que ça t'aide, hésite pas pour d'autre questions.
User avatar
Eleven Warrior
Posts: 745
Joined: Thu Apr 18, 2013 2:32 pm
Location: Australia

Re: Help needed for little script.

Post by Eleven Warrior »

Hi Diramuid..

Culd I get that coding in English please It looks good thxs..

EDIT: NVM thxs..
User avatar
Eleven Warrior
Posts: 745
Joined: Thu Apr 18, 2013 2:32 pm
Location: Australia

Re: Help needed for little script.

Post by Eleven Warrior »

Wow Diarmuid c'est codage génial, je dois essayer moi-même. Je vois maintenant avec l'ogre. Je viens de l'ajouter au monstre cloné:

onDie = function (monstre)
puzzlePorte2.mortDeLOgre ()
fin

Puis-je faire une entité de script dans l'éditeur appelé:

fonction fonction mortDeLOgre ()
[...] Blah blah blah
fin

Qui appelle le script Ogre dans le fichier (monters.lua).

Puis je me trompe, c'est la partie que je ne suis pas sûr .. Est ce code dans le script de l'éditeur ou partie du monstre cloné dans le fichier lua?

fonction mortDeLOgre ()
frayer (niveau de la "porte", x, y, face, "maPorte")
spawn ("lock", niveau, x, y, exposition)
setOpenedBy ("clé")
addConnector ("activate", "maPorte", "ouvert")

fin

PS: A woud démo serait bien si vous avez les thxs de temps .. J'ai tapé cela en utilisant Google Translator espérons son OK ..
YannBastian
Posts: 8
Joined: Fri Oct 11, 2013 2:22 pm

Re: Help needed for little script.

Post by YannBastian »

Mon sauveur français. Pas facile de s'exprimer dans une langue qu'on maîtrise pas. J'ai quelques notion à force de regarder scrubs en vostfr, mais bon.
Merci j'vais tester ça quand ma fille daignera faire sa sieste ^^.

Elvenwarrior, google translator is evil :roll: But speak french is most evil . i hate this language grr.
Forgives me i continue in french with diarmuid, it's easiest for me.

Sinon diarmuid y a un truc que je comprends pas sur le lua. J'essais de chopper des idées à droite à gauche. Je suis pas complêtement un imbécile, donc je me dis qu'avec le temps j'arriverais à me demerder. Bref, je vois dans des codes des lignes décallée en vertical, est obligatoire ou c'est juste pour s'y retrouver? Et surtout à la fin les "end" ou "return true", je comprends pas bien quand et pourquoi. D'autant plus que quand j'essais de modifier un code qui en contient plusieurs, je me retrouve avec des erreur du type "end near blabla <eof> blabla". Là je rame un peu.
User avatar
Diarmuid
Posts: 807
Joined: Thu Nov 22, 2012 6:59 am
Location: Montreal, Canada
Contact:

Re: Help needed for little script.

Post by Diarmuid »

@Elven warrior, I was just helping with his specific questions.

@Yann, ah attendre qu le petit dorme, de bons souvenirs. Là à trois ans et demi mon garçon ne fait plus de sieste, mais il y a un an les weekends c'était vite sur Grimrock l'après-midi :).

Les end, c'est pour montrer la fin d'un "bloc" en Lua. À chaque fois que tu commences une function, un if, un for, un while, tu dois dire au script où ça finit.
function [...] end
if [...] end
if [...] elseif [...] else [...] end
for i = 1, 4 do [...] end

si chaque mot clé en Lua n'a pas son end correspondant, ça marche pas.

pour les retraits verticaux, effectivement c'est juste pour rendre ça plus lisible.

Pour ce qui est du return, c'est la valeur que retourne une fonction. Pour certains hooks, par exemple, comme onMove, si tu retournes false, ça empêche le mouvement. Pour onDie par contre, le monstre est déjà mort, donc retourner quoi que ce soit ne change rien.
YannBastian
Posts: 8
Joined: Fri Oct 11, 2013 2:22 pm

Re: Help needed for little script.

Post by YannBastian »

7 mois et demi. Un vrai trésor mais quand elle râle avant sa sieste c'est pas drôle tous les jours. Encore moins que sa sieste dure pas plus de25 minutes deux fois par jours. Ca fait pas beaucoup de temps sur grimrock.
Merci pour les eclaircissement en tout cas. Ca m'aide beaucoup.

Edit: Euh arrêtes moi si je me trompe, mais un script simple ça peut se résumer à "si l'objet X est en l'état Y alors l'évènement Z défini se produit"?
Post Reply