Aller au contenu

Vicolaships

MacreaCitizen
  • Compteur de contenus

    2 422
  • Inscription

  • Dernière visite

Messages posté(e)s par Vicolaships

  1. Il y à des choses que je t'ai déjà dit, tu fais pas attention du tout à ce que je te raconte !

     

    01B8: set_player $PLAYER_CHAR armed_weapon_to 1

    C'est pas une condition ca, ca veut dire que ca CHOISIT l'arme 1, donc ca n'a rien à faire dans le IF AND; je pense que tu voulais vérifier que le joueur à l'arme 1; l'opcode qui fait ca c'est:

    02D8: actor $PLAYER_ACTOR current_weapon == 1

     

    Pour une question de logique j'ai ajouté une condition, imagine que ton mec est dans le maverick et qu'il appuie sur la touche, les conditions sont réunis, le jeu va recréer un hélico ... Donc il faut bloquer si le joueur est dans un maverick :

    80DD: not actor $PLAYER_ACTOR driving_car_with_model #MAVERICK

     

    0819: $distance = actor $PLAYER_ACTOR distance_from_ground

    Celui là tu as besoin de le renouveler, en fait la valeur $distance ne pas varie pas tant que tu ne l'actualises pas. (on la laisse donc ou elle est !)

     

    00A0: store_actor $PLAYER_ACTOR position_to $x $y $z

    Je t'ai déjà dit de le mettre juste après le JF, pas besoin de faire enregistrer au jeu ta position à chaque fois qu'il vérifie la condition, il y à besoin de l'enregistrer uniquement quand la condition est vérifiée, tu le mets donc après le JF.

     

    Sauf que, le petit problème de ton script c'est qu'il marche sous l'eau, alors si tu veux qu'il marche sous l'eau fais pas la correction dans la suite, mais si tu veux pas que ca marche dans l'eau, il faut que la coordonnée z soit supérieure à 0 (niveau de la mer = 0). Donc il faut que la valeur s'actualise, donc il faut mettre le store entre le label et le IF cette fois ! De cette façon les coordonnées sont actualisés à chaque boucle (mais cette fois c'est justifié).

     

    :para_0

    thread 'para_0'

    model.Load(#MAVERICK)

    038B: load_requested_models

    wait 10

    jump @para

    end_thread

     

    :para

    thread 'para'

    wait 100

    0819: $distance = actor $PLAYER_ACTOR distance_from_ground

    00A0: store_actor $PLAYER_ACTOR position_to $x $y $z

    if and

    0020: $distance > 1.0

    0020: $z > 0.5

    00E1: key_pressed 0 17

    02D8: actor $PLAYER_ACTOR current_weapon == 1

    80DD: not actor $PLAYER_ACTOR driving_car_with_model #MAVERICK

    jf @para

    0009: $z += 0.5

    wait 10

    00A5: $parachute = create_car #MAVERICK at $x $y $z

    wait 10

    036A: put_actor $PLAYER_ACTOR in_car $parachute

    jump @para

    end_thread

    Sous GTA SA ca marche parfaitement :)

     

    Si tu comprends pas quelque chose que j'ai fait, n'hésites pas.

  2. Ton erreur est malheureusement un peu bête ! En fait dans ta condition :

     

    Tu n'as oublié qu'une petite ligne, mais qui est fatale, le jeu vérifie la condition suivant un cycle, il vérifie tous les 10 ms, les 100ms, enfin ce que tu veux ! Encore faut-il lui préciser, sinon il est perdu, ne sait pas tous les combien de temps vérifier et bug.

    Si on ne fait que rajouter le WAIT il va répéter tout ce qui est après (le wait) et avant le JF tous les X temps (X étant le temps indiqué dans le wait, ici 200 ms). Or a ce que je sache tu ne veux pas créé une infinité de marqueurs et de parachutes, juste un seul !

     

    :Test

    Model.Load(#BRASSKNUCKLE)

    038B: load_requested_models

    wait 100

    $PARACHUTE = Pickup.Create(#BRASSKNUCKLE, 1, 76.7232, -810.1667, 90.464)

    03BC: $SPHERE1 = create_sphere 99.89 -798.84 28.0 radius 1.0

     

    :TEST_0

    wait 100

    if and

    00E1: key_pressed 0 19

    00FE: actor $PLAYER_ACTOR sphere 0 in_sphere 99.89 -798.84 28.0 radius 1.0 1.0 10.0

    jf @TEST_0

    fade 0 500

    wait 500

    00A1: put_actor $PLAYER_ACTOR at 76.7232 -810.1667 90.464

    wait 100

    fade 1 400

    wait 1000

    jump @TEST_0

     

    Si j'ai bien comprit, tu veux que quand le joueur marche dans un marqueur, ca lui fasse un saut en parachute, déjà ta technique pour donner le parachute est loin d'être la meilleur, mieux vaut faire un GIVE WEAPON (le parachute est considéré par le jeu comme une arme), je te renvoie à mon joli tutoriel: Créer un saut en parachute

     

    Pour la beauté de la chose, je t'ai rajouté des FONDUS (fade en anglais), le principe du fade est simple:

    fade A X

    A = 0 ou 1, 0 passe du jeu vers le noir, 1 du noir vers le jeu.

    X = Durée, plus la durée est longue, plus ca mettra de temps à devenir noir/transparent.

    On mets un petit fade avant la téléportation pour pas voir qu'on téléporte (mais pas long), et un petit après pour revenir en douceur. C'est plus agréable visuellement !

     

    Et pour finir, j'ai modifié ton opcode PUT PLAYER par un PUT ACTOR (put player ca marche pas, put actor ca marche !)

     

    PS: A l'avenir, soit un peu plus patient, laisse moi une semaine pour répondre.

  3. Dans ce cas la condition est:

     

    00FE: actor $PLAYER_ACTOR sphere 0 in_sphere X Y Z radius A B X

     

    X Y Z, coordonnées du centre de la sphère

    A rayon suivant X

    B suivant Y

    C suivant Z (suivant Z mets 10 ca suffit la plupart du temps)

  4. Un peu de logique voyons, tu essaies d'ajouter 1 à une coordonnée qui n'existe pas encore. Donc première chose j'ai inversé le store et le +1.

    Ensuite j'ai mit le store et le 2e opcode dans la 2e partie.

     

    Le jeu lis de cette manière: il lit le nom du label, jusqu'au IF, il vérifie la condition, si elle est fausse il repart du nom du label et recommence jusqu'à ce que la condition soit remplie.

    Donc toi à chaque fois il store les coordonnées du joueurs, qui servent pas forcément, en les mettant après je JF (jump if false), il ne fera un Store des coordonnées que si la condition est vérifiée (et donc que tu auras besoin de ces coordonnées)

     

    J'ai aussi remplacé le store player pos par un store actor pos qui marche beaucoup mieux.

     

    :test_0

    Model.Load(#AD_FLATDOOR)

    038B: load_requested_models

    wait 100

     

    :test_1

    wait 100

    if

    00E1: key_pressed 0 14 // TOUCHER SAUTER

    jf @test_1

    00A0: store_actor $PLAYER_ACTOR position_to $x $y $z

    0172: $zA = actor $PLAYER_ACTOR Z_angle

    wait 10

    0009: $x += 1.0

    0009: $zA += 90.0

    wait 10

    0107: $portail = create_object #AD_FLATDOOR at $x $y $z

    0177: set_object $portail Z_angle_to $zA

    wait 100

    jump @test_1

     

    A titre indicatif, le jeu créé un objet par défaut à l'angle 0.0. Si tu veux que l'angle de l'objet soit le même que l'acteur, suffit de faire un store angle et un set objet angle (évidement tu définis pas l'angle de l'objet avant de l'avoir créé!)

  5. Déjà vire moi le Model.load et le load req de la boucle ;) Sinon à chaque fois qu'il vérifie la condition, il recharge ton model, étant donné qu'il le fait toutes les millisecondes, c'est pas terrible côté optimisation.

    Tu le mets juste avant dans un autre label ca règle le problème.

     

    Ensuite je sais pas pourquoi ca tombe, essaie avec un autre model voir ce que ca donne. La avec ton script, une porte apparait quand t'appuies sur une touche.

    Accessoirement l'opcode : 0054: store_player $PLAYER_CHAR position_to $899 $900 $901 est pas très judicieux seul, tu spawn un objet sur le player, le jeu aime pas trop. Pour décaller l'objet utilises un truc du genre:

    0009: $899 += 1.0

  6. #XXXXXX

    C'est un identifiant (généralement le nom du fichier DFF) qui permet de dire que c'est tel objet et non un autre, après faut que tu choisisses l'objet et que tu le mettes.

    L'identifiant de l'objet (comme tu appelles l'objet dans le SCM) c'est $portail dans l'exemple

  7. Mais si, attends un peu une réponse ;)

     

    :Objet

    $X = 0.0

    $Y = 0.0

    Model.Load(#AD_FLATDOOR)

    038B: load_requested_models

    wait 1

    0107: $portail = create_object #AD_FLATDOOR at $X $Y 4.0

    0177: set_object $portail Z_angle_to 0.0

    wait 2000

     

    :Near_door

    wait 1

    if and

    00ED: actor $PLAYER_ACTOR 0 near_point $X $Y radius 5.0 5.0 on_foot

    not $X >= 5.0

    jf @NOT_near_door

    $X += 0.03

    01BC: put_object $portail at $X $Y 4.0

    jump @Near_door

     

    :Not_near_door

    wait 1

    if and

    80ED: not actor $PLAYER_ACTOR 0 near_point $X $Y radius 5.0 5.0 on_foot

    $X >= 0.0

    jf @Near_door

    $X += -0.05

    01BC: put_object $portail at $X $Y 4.0

    jump @Near_door

     

    http://www.macreacity.com/topic/33804-les-opcodes-de-sanny-builder/

  8. Il faut changer l'objet et les coordonnées, seules les coordonnées en rouge sont à changer

     

    DEFINE OBJECTS 1

    DEFINE OBJECT RCBOMB // Object number -1

     

    DEFINE MISSIONS 0

    DEFINE EXTERNAL_SCRIPTS -1

    DEFINE UNKNOWN_EMPTY_SEGMENT 0

    DEFINE UNKNOWN_THREADS_MEMORY 0

     

    //-------------MAIN---------------

    03A4: name_thread 'MAIN'

    042C: set_total_missions_to 0

    030D: set_total_mission_points_to 187

    0997: (unknown) 1339

    01F0: set_max_wanted_level_to 0

    0111: set_wasted_busted_check_to 0

    00C0: set_current_time 7 00

    016A: fade 0 10 ms

    01B6: set_weather 0

    04BB: select_interior 0

    04E4: unknown_refresh_game_renderer_at 0.0 0.0

    03CB: set_camera 0.0 0.0 0.0

    0053: $PLAYER_CHAR = create_player #NULL at 5.0 0.0 6.0

     

    :MAIN_117

    07AF: $PLAYER_GROUP = player $PLAYER_CHAR group

    01F5: $PLAYER_ACTOR = create_emulated_actor_from_player $PLAYER_CHAR

    0373: set_camera_directly_behind_player

    0173: set_actor $PLAYER_ACTOR z_angle_to 0.0

    0001: wait 0

    Player.SetClothes($PLAYER_CHAR, "VEST", "VEST", Torso)

    Player.SetClothes($PLAYER_CHAR, "JEANSDENIM", "JEANS", Legs)

    Player.SetClothes($PLAYER_CHAR, "foot", "feet", Shoes)

    Player.SetClothes($PLAYER_CHAR, "PLAYER_FACE", "HEAD", Head)

    070D: build_player $PLAYER_CHAR

    016C: restart_if_wasted at 2027.77 -1420.52 15.99 angle 137.0 unknown 0

    016D: restart_if_busted at 1550.6801 -1675.49 14.51 angle 90.0 unknown 0

    055E: set_player $PLAYER_CHAR max_health += 100

    055F: set_player $PLAYER_CHAR max_armour += 100

    0109: player $PLAYER_CHAR money = 1000

    fade 1 1

    wait 1000

     

    :Objet

    $X = 0.0

    $Y = 0.0

    Model.Load(#AD_FLATDOOR)

    038B: load_requested_models

    wait 1

    0107: $portail = create_object #AD_FLATDOOR at $X $Y 4.0

    0177: set_object $portail Z_angle_to 0.0

    wait 2000

     

    :Near_door

    wait 0

    if and

    00ED: actor $PLAYER_ACTOR 0 near_point $X $Y radius 5.0 5.0 on_foot

    not $X >= 5.0

    jf @NOT_near_door

    $X += 0.3

    01BC: put_object $portail at $X $Y 4.0

    jump @Near_door

     

    :Not_near_door

    wait 0

    if and

    80ED: not actor $PLAYER_ACTOR 0 near_point $X $Y radius 5.0 5.0 on_foot

    $X >= 0.0

    jf @Near_door

    $X += -0.3

    01BC: put_object $portail at $X $Y 4.0

    jump @Near_door

    end_thread

  9. Salut, j'arrive à rien avec ta barrière, sous le SCM on fait facilement pivoter une barrière suivant son axe Z, sauf que là l'axe Z est pas le bon, si tu veux je peux te faire un script avec une barrière translation.

     

    Genre une grille qui s'ouvre, ou deux grilles qui s'ouvrent de chaque côté ca c'est facile à faire mais faire pivoter une barrière c'est facilement faisable que si l'axe Z est le bon, la c'est pas le cas !

    En fait avec l'opcode la barrière pivote selon son axe longitudinal (elle fait un quart de tour sur elle même):

    034D: rotate_object $OBJECT_POLICE_BARRIER from_angle 0.0 to_angle 90.0 flag 0

     

    Si tu veux un script pour la translation je te ferais ca tu n'as qu'a le demander ;)

×
×
  • Créer...