Page 1 sur 1

[SCRIPT] Voler un PNJ

Posté : dim. 29 nov. 2020, 11:38
par Cocrane
Un PNJ possède sur lui un objet que le Charname désire et il peut décider de le voler. Le PNJ le sait aussi. Ce qui doit rendre l'action beaucoup plus difficile.

J'ai testé la situation de vol et je surpris par la facilité du vol de jour.

Mis à part le % de picpoket du player en tant que voleur, savez-vous comment est géré la réussite du vol dans le jeu?

Je pensais rendre quasi impossible la vol de jour contrairement à la nuit pendant que le PNJ dort.

Cocrane

Posté : mar. 01 déc. 2020, 12:20
par rivvers
Bonjour Cocrane,

tu as toujours des questions intéressantes.

Il y a deux paramètres influant fortement dans le vol à la tire (en plus du score personnel du voleur).
Le premier étant le score de vol à la tire du volé. Il est soustrait à celui du voleur et réduit donc d'autant la probabilité de réussite du vol.
Le second est la position de l'objet dans l'inventaire du volé. En effet, voler une armure est plus complexe qu'une bague.
L'heure de la journée n'a aucune influence.

Dans le premier cas, cela peut être intéressant de modifier la valeur de la compétence du volé selon l'heure de la journée.
Dans le second cas, il te faudra modifier la position de l'objet dans l'inventaire du volé (le détail des valeurs est présent dans le fichier sltsteal.2DA).

La subtilité du second cas est que le vol de l'objet est rendu impossible même en cas de vol à la tire réussi, comme si l'objet n'était pas présent dans l'inventaire.
Tu peux évidemment jouer avec les deux.

Posté : mar. 01 déc. 2020, 21:49
par Cocrane
Salut Rivvers,

j'ai bien ri à ta 1ière phrase. Ne sachant pas comment le prendre, je l'ai pris du bon côté. :-p

J'ai souvent des idées chiantes à mettre en oeuvre dans le jeu. (en tout cas pour moi) "Pourquoi faire simple quand tu peux faire compliqué!". Je crois que j'en suis la 1ière victime (toi en 2nd bien sur :-))

Merci beaucoup pour tes infos, j'ai passé un temps fou à traiter cette étape du jeu. Si le Charname vole l'objet en 2 secondes, ça serait dommage de passer à côté des situations de jeu que j'ai prévu. :-)

Posté : mar. 01 déc. 2020, 22:46
par rivvers
A prendre du bon côté, bien sûr.

Et en espérant que la réponse te permette de faire simplement des choses compliquées.

Posté : jeu. 10 déc. 2020, 22:12
par Cocrane
Retour de test.

En version BGT je n'ai pas trouvé le fihier sltSTEAL.2DA . Je suppose que c'est un fichier lié à la version EE.

J'ai passé à 200% la stat pickpocket de mon PNJ volé et effectivement, j'ai constaté avec plaisir des échecs au vol.

J'ai testé un vol pendant que ce PNJ dormait et j'ai eu aussi des échecs mais sans réaction agressive du volé.

[HTML]Dans le premier cas, cela peut être intéressant de modifier la valeur de la compétence du volé selon l'heure de la journée.[/HTML]
Je suppose que tu penses à un effet pour rendre la chose possible. Vu que j'utilise objet pour faire dormir mon PNJ, je peux effectivement ajouter une modification de la stat. :-)

Je viens de faire le test et ça fonctionne bien.

Merci pour tes précieux conseils.

Lorsqu'un vol est en échec, le PNJ peut devenir agressif. Il existe une commande pour tester l'échec d'un vol et décider du comportement du PNJ?

Posté : ven. 11 déc. 2020, 13:42
par rivvers
Bonjour Cocrane, j'en suis ravi.
Cocrane a écrit :Lorsqu'un vol est en échec, le PNJ peut devenir agressif. Il existe une commande pour tester l'échec d'un vol et décider du comportement du PNJ?
Evidemment que non. Elle aurait été bien trop utile ;)
J'ai donc farfouillé mes notes. Voilà ce que je sais :
Comme tu l'as remarqué, un vol à la tire raté ne provoque pas nécessairement une réaction de la victime.
Cela s'explique en partie par le fait qu'en cas d'échec, un vol à la tire déclenche AttackedBy, qui lui, très souvent, actionne Enemy.

[HTML]IF
AttackedBy([GOODCUTOFF], DEFAULT)
THEN
RESPONSE #100
Enemy()
END[/HTML]

Tout est là.
Il y a donc une possibilité du côté des scripts en changeant la réaction du personnage après le AttackedBy.
Comme ce trigger est extrêmement utile, notamment en combat, il est peu conseillé de le conditionner.
En revanche, si cela concerne un pnj qui n'a strictement aucune chance de survie face à une attaque, il est possible de ruser un peu.
Mais le résultat est loin d'être parfait.

[HTML]IF
HitBy([GOODCUTOFF], CRUSHING)
Allegiance(Myself, NEUTRAL)
THEN
RESPONSE #100
DisplayStringHead(Myself,"Ciel, mon sang !")
END

IF
AttackedBy([GOODCUTOFF], DEFAULT)
Allegiance(Myself, NEUTRAL)
THEN
RESPONSE #100
DisplayStringHead(Myself,"Pourquoi me tripotez-vous ?")
END[/HTML]

Si la victime reçoit des dégâts, la première partie du script se déclenche. (on ne sait jamais, elle pourrait survivre...)

Si le vol est un échec, c'est la seconde qui s'opère. (puisque qu'un vol est une 'attaque' qui n'inflige aucun dégât)

En revanche, si le membre du groupe fait un échec critique sur sa première attaque, c'est également la seconde partie qui se déclenchera (contrairement à ce qui se fait habituellement).

Peut-être que cela conviendra à ton pnj.