CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Forum
  • Accueil
  • Actus
  • Tests
  • Vidéos
  • Images
  • Soluces
  • Forum
Liste des sujets

Script fonction non appelé

News jeu

Expeditions: Samurai veut révolutionner le RPG tactique avec une aventure entièrement jouable en coop

Voir
unitedelite29
unitedelite29
Niveau 10
17 octobre 2013 à 19:35:45

salut a tous,

j'ai un problème avec les fonctions dans mes scripts, j'ai 2 fichiers dans ma mission qui sont : SurrendingScript.sqf et Surrender.sqf, voici leurs contenus (très épuré a cause du problème)

SurrendingScript :

hint "surrending script";
_entity = _this;
_entity spawn Pixel_Surrender;

Surrender :

Pixel_Surrender =
{
hint "surrender";
};

j'initialise un bot avec " null = this execVM "SurrendingScript.sqf"; ",il m'affiche bien le message "surrending script" mais je n'ai pas le message "surrender" qui s'affiche donc il n'appel pas ma fonction global Pixel_Surrender (je l'appel avec un Spawn car elle contiendra un While )

j'en viens donc a demander votre aide pour me permettre de continuer mon apprentissage, merci d'avance ^^

papyrabbit08
papyrabbit08
Niveau 6
17 octobre 2013 à 20:23:10

Je suis pas sûr, mais je pense qu'il te faut une valeur de retour pour ton spawn dans le 1er script. Non? NULL= p.ex

darkiron_2012
darkiron_2012
Niveau 10
17 octobre 2013 à 20:36:44

as tu regarder ma tuto sur le scripting ?
http://blog.darkiron.fr/ttutoscripting-sous-arma-3.html

ou ici :
https://www.jeuxvideo.com/forums/1-26453-105816-1-0-1-0-tuto-base-de-scripting.htm

:ok:

puis ta syntax est foireuse :ok:
lit surtout le chapitre 3 :ok:
http://blog.darkiron.fr/tutoscripting-sous-arma-3-partie-3-les-fonctions.html

unitedelite29
unitedelite29
Niveau 10
17 octobre 2013 à 20:54:07

ma syntaxe n'a rien de foireuse du tout, j'ai suivi ce guide : https://dl.dropboxusercontent.com/u/17725328/BIS_forum/Fockers%20Tutorials/Fockers%20Arma%20Scripting%20-%20Chapter%202.pdf

d'ailleurs tu a fait un guide sur les fonction et tu ne parle ni des fonction global ni des privé (_fonction et Fonction_fonction)

darkiron_2012
darkiron_2012
Niveau 10
17 octobre 2013 à 22:23:30

une fonction global ou privé ça n'existe pas :ok:

darkiron_2012
darkiron_2012
Niveau 10
17 octobre 2013 à 22:31:04

la tuto d'apprend de mauvaise choses.
:d) tu ne la comprend pas bien et nécessite un travail de recherche en plus pour bien comprendre l'ensemble.

Apprend a utilisé une simple variable et une fonction normalement et pas en ligne.
Surtout si tu ne comprend pas le principe en plus ton code sera plus claire :ok:

:d) c'est valable aussi pour ma tuto : c'est pour cela que je ne traite pas des variable global. Apprend déjà ça.

unitedelite29
unitedelite29
Niveau 10
17 octobre 2013 à 23:07:20

Je sait très bien ce que sont des variables et des fonctions, ça fait des années que je dev en c++ ( par exemple ma participation au concours one week a game avec le jeu dig'n'build ) j'ai aussi refait le script de patrouille d'ia avec ma fonction qui fonctionnais très bien c'est justement pour ça que je ne comprend pas d'ou viens le probleme.

Ensuite le tuto Focker est la chose qu'ont t'envoi en premier lorsque tu demande un guide sur le scripting donc je ne pense pas qui aprend mal

Je ne dit pas ça pour dire que ton tuto c'est de la merde, bien au contraire et je te felicite d'en avoir fait un, mais j'ai trouvé celui de focker plus comprehensible

darkiron_2012
darkiron_2012
Niveau 10
17 octobre 2013 à 23:17:57

arrêté de raconté des histoires.

Moi je te le dis tu n'a pas compris. Parce que ton problème est évidant.

et pourquoi utilise execVM ? en a tus l'utilité ?
https://community.bistudio.com/wiki/execVM

de fait même ton code est un on sens.

Erreur de débutant donc de logique (si tu as fait du C/C++ sa ne devrait pas être un problème.

"Ensuite le tuto Focker est la chose qu'ont t'envoi en premier lorsque tu demande un guide sur le scripting donc je ne pense pas qui aprend mal "
Bien sure mais si tu ne cernes pas la logique dernier ou les principe fondamentaux des commande ou du scripting sans avoir la doc 'officiel' tu avancera mal.

Je ne veux pas être méchant mais commence simple et en français...
Mon exemple dans ma tuto correspond à ce que tu veux faire :ok: ce qui n'est pas très optimisé :ok:
Tu aurais compris très vite vite si tu avais intégrer la tuto de focker :ok:

:d) je vais considérer que c'est la fatigue :ok:

Tom_48_97
Tom_48_97
Niveau 4
17 octobre 2013 à 23:58:38

Il utilise execVM car exec est obsolète et que execVM convient au parsing des SQF.

Pour revenir au sujet, quelque chose que je ne comprends pas :
- SurrendingScript.sqf
execVM, aucun souci

- Surrender.sqf
contient une fonction "Pixel_Surrender", ok, mais à quelle moment tu viens parser Surrender.sqf (en execVM). Car si Surrender.sqf n'est pas parser, le jeu ne peut pas savoir que la fonction Pixel_Surrender existe. D'aileurs, il devrait y avoir un retour undefined variable dans le crystal report.

darkiron_2012
darkiron_2012
Niveau 10
18 octobre 2013 à 09:17:30

@Tom on devais le laisser réfléchir ...
normale que tu ne comprends pas, l'auteur est passé au dessus de comment créer une fonction (ce que je dis dans mon poste précèdent).

ah :ok: effectivement. Je suis pas scripteur de fou.
:d) pour une fonction devrai suffire comme dans mon exemple zombie :ok:
PS : c'est dans le sujet aussi je ne savais pas exec étais obsolète.

unitedelite29
unitedelite29
Niveau 10
18 octobre 2013 à 09:29:20

sauf que dans ton exemple zombie tu ne fait en aucun cas une fonction mais juste un nouveau fichier script.

ensuite le tuto indique clairement que pour mettre en mémoire la fonction il suffit de faire lire le fichier de la fonction dans l'init ou dans un autre fichier qui contiendra des execVM sur les fichiers fonction, ce que j'avais déjà fait mais oublié de poster :

mon init.sqf :

execVM "Surrender.sqf";

mon code est un non sens ? je pense que je suis au courant vu que je ne peut pas le travailler a cause d'un problème et c'est pourquoi il est est basique car pour savoir d’où proviens le problème il faut réduire au maximum sont code.

par contre la ou ont m'a été utile c'est tom, déjà parce qu'il m'apprend l’existence du crystal report (ce dont le tuto ne parle pas) et qui essaye de m'aider et je l'en remercie.

voici les lignes du crystal report :

_entity = _this;
_entity spawn Pixel_Surrender;>
Error position: <Pixel_Surrender;>
Error Variable indéfinie dans une expression: pixel_surrender
File C:\Users\Adam\Documents\Arma 3 - Other Profiles\Pixel\missions\testScript.Stratis\Surrend
ingScript.sqf,
line 2

darkiron_2012
darkiron_2012
Niveau 10
18 octobre 2013 à 10:10:31

j'espère que ta lue la réponse de Tom avant de me répondre.

as tu compris ce que je t'ai dis ?

donc je fais reprendre:

Tu as deux script (donc deux fichier) l'un deux est une fonction(sous arma tu fais une fonction dans script séparée pour une meilleur lisibilité, par convention...) tu as des tonnes d'exemple dans l'éditeur.
:d) là je pars sur le principe que tu n'as pas lue les tutos :(
Donc pour pouvoir utilisé ta fonction comme ton script tu dois la charger en mémoire pour dire au jeux là voilà ma fonction :
Mafonction = compile preprocessFile "maFonction.sqf";

tu n'est pas obliger de le foutre dans l'init. Mais si c'est un script récurant tu peux. Mais tu dois bien créer une variable global dans ce cas Mafonction sera toujours accessible :ok:

ensuite ta fonction doit se présenté ainsi (c'est schéma regarde les exemple de BIS):
comment "Zombifie all unit, return boolean";
private ["_a"];
// le reste de mon code.
true; //la valeur de retour ici vrai car on a exécuté notre fonction.

http://blog.darkiron.fr/tutoscripting-sous-arma-3-partie-3-les-fonctions.html

:d) prend ton temps réfléchie bien.

https://community.bistudio.com/wiki/function
ma tuto c'est la doc officiel.

Ta de grosse lacune. J'espère que tu as compris maintenant :ok:

unitedelite29
unitedelite29
Niveau 10
18 octobre 2013 à 11:13:11

sauf que tu te doute bien que si je viens ici c'est que j'avais deja essayé la methode de ton tuto non ?

j'ai déjà essayé les 3 méthodes:

Pixel_Surrender = compile loadFile "Surrender.sqf";
Pixel_Surrender= compile preprocessFile "Surrender.sqf";
ExecVM "Surrender.sqf";

Bon après quelques test j'ai reglé une partie de mon problème et j'ignore pourquoi, j'ai créer un nouveau fichier, mis mon script dedans et la il veut bien le lancer ...

sauf que je peut le lancer que via un déclencheur (radio alpha) avec " null = [this] execVM "SurrendingScript.sqf"; " mais que le bot qui a exactement le même dans son init ne le déclenche pas même après avoir changé "execVM "FunctionsOnLoad.sqf" par " Pixel_Surrender = compile loadFile "FunctionsOnLoad.sqf"; " qui donne tout deux la même chose :
déclenchable via un déclencheur mais pas vie l'init du bot

darkiron_2012
darkiron_2012
Niveau 10
18 octobre 2013 à 11:30:14

utilisé pas exec mais call ou spawn. regarde la doc.
c est normal que sa marche :hap:

tu me fait peur. si d ici ce soir tu n y arrive pas je te donnerai mon exemple. :ok:

Tom_48_97
Tom_48_97
Niveau 4
18 octobre 2013 à 11:31:23

Concernant ou placer les exécutions de scripts au démarrage, je t'invite à regarder ça :
http://www.arma3.fr/forum/viewtopic.php?f=120&amp;t=4603&amp;p=26688#p26688
(Ordre d'initialisation des éléments)

Pour la différence entre exec et execVM, elle se trouve dans le fonctionnement du parser. exec, c'est shot & forget, généralement en syntaxe monoligne, par convention, utilisé exclusivement pour les SQS (ancienne syntaxe). L'execVM, lui, est plus poussé, il dispose d'un handler, donc, d'un soft thread qui lui est propre (gain de perfs), ainsi qu'un contrôle d'erreur fonctionnement comme suit :
- Lecture du fichier
- Compilation du fichier
-- Si erreur de compile, abandon
-- Si pas d'erreur, exécution
- retourne un bool quand c'est fini (handler := bool)
(c'est pour cette raison (call compile implicite) qu'un script erroné ne sera jamais exécuté et complètement ignoré).

Pour la question, nous sommes d'accord que tu exec Surrender.sqf avant tout appel de la fonction Pixel_Surrender (btw, weird naming chart).

- Init.sqf
_myFunctions = execVM "Surrender.sqf";
waitUntil {scriptDone _myFunctions}; // On attend qu'il en ait fini avec surrender
execVM "SurrendingScript.sqf";

QUOTE: darkiron_2012
|> @Tom on devais le laisser réfléchir ...
Je ne suis pas d'accord, il est préférable de donner la solution en expliquant le pourquoi du comment. A mon sens, c'est comme ça qu'on avance plus facilement.

unitedelite29
unitedelite29
Niveau 10
18 octobre 2013 à 12:00:02

je pense donc savoir pourquoi j'arrive a le lancer via un declencheur et non via l'init de l'ia "

Champs d'init des objects (exécutés dans l'ordre de définition du mission.sqm)
Exécution de: init.sqs (singleplayer)
Exécution de: init.sqf (singleplayer) "

donc lorsque l'ia est créer ma fonction Pixel_Surrender (j'ai suivi la charte du tuto Focker " Firstly making the _hinting function global .We added ‘FNC’ to the front of‘_hinting’, this instantly ,makes it global. " ) n'existe pas encore

voici l'erreur du crystal report :

_ia = _this;
_ia spawn Pixel_Surrender;>
Error position: <_this;
_ia spawn Pixel_Surrender;>
Error Variable indéfinie dans une expression: _this

qui n'interviens que lorsque le bot est créer et non quand j’exécute mon script ou la il fonctionne parfaitement, n'y a t'il pas un moyen qu'il ne s'exécute uniquement après que l'init soit passé ?

je viens de faire un test, un sleep(10) au début du "SurrendingScript.sqf" et la le bot exécute bien la fonction, donc c'est bien l'ordre d’exécution qui pose problème.

darkiron_2012
darkiron_2012
Niveau 10
18 octobre 2013 à 12:39:25

fait pas un execvm créer une vrai fonction. ton marchera.

chal00
chal00
Niveau 10
18 octobre 2013 à 14:41:58

unitedelite29 Voir le profil de unitedelite29
Posté le 18 octobre 2013 à 11:13:11 Avertir un administrateur

Pixel_Surrender = compile loadFile "Surrender.sqf";
Pixel_Surrender= compile preprocessFile "Surrender.sqf";

Il manque pas un "call" :question:

Ex : [] call Pixel_Surrender

darkiron_2012
darkiron_2012
Niveau 10
18 octobre 2013 à 16:06:14

:d) http://blog.darkiron.fr/uploads/Zombie.Stratis.7z

Voici ma fonction + script de ma tutos :ok:

Sous forums
  • Les modes Life
  • Configurations PC et ses problèmes
  • Teams et Serveurs
  • Teams et Serveurs MilSim