TouchAttackRanged

Répondre
Partager Rechercher
Je me souviens que jadis on reprochait à cette fonction Bioware de simplement effectuer un d20() sans autre forme de calcul.
Depuis je ne sais pas ce qu'il en est devenu, il faut dire que le code de cette fonction n'est pas accessible.
Me méfiant justement de ce que je ne connais pas, j'ai préféré écrire ma propre fonction pour les attaques de contact à distance utiles à certains sorts.

Code PHP:

//CA de la cible d'une attaque de contact a distance
int GetTouchAttackAC(object oTarget);

//Effectue une attaque de contact a distance de oAttacker sur oTarget
//2 = Critique, 1 = Touche, 0 = rate
int TouchRangedAttack(object oAttackerobject oTarget);

int GetTouchAttackAC(object oTarget)
{
 
int nDodge;
 if(
GetHasFeatEffect(FEAT_DODGEoTarget)) nDodge 1;
 
int nDex GetAbilityModifier(ABILITY_DEXTERITYoTarget);
 
int nAC nDex nDodge;
 
effect eParal GetFirstEffect(oTarget);
 while(
GetIsEffectValid(eParal))
 {
  if(
GetEffectType(eParal) == (EFFECT_TYPE_ENTANGLE || EFFECT_TYPE_PARALYZE 
   
|| EFFECT_TYPE_PETRIFY || EFFECT_TYPE_SLEEP || EFFECT_TYPE_STUNNED))
  {
   
nAC 0;
  }
  
eParal GetNextEffect(oTarget);
 }
 return 
nAC;
}

//BAB + Dex + Taille
int TouchRangedAttack(object oAttackerobject oTarget)
{
 
int nBAB GetBaseAttackBonus(oAttacker);
 
int nDex GetAbilityModifier(ABILITY_DEXTERITYoAttacker);
 
int nTaille GetCreatureSize(oTarget);
 
int nBTaille;
 switch(
nTaille)
 {
  case 
CREATURE_SIZE_TINY:
   
nBTaille = -4;
   break;
  case 
CREATURE_SIZE_SMALL:
   
nBTaille = -2;
   break;
  case 
CREATURE_SIZE_MEDIUM:
   
nBTaille 0;
   break;
  case 
CREATURE_SIZE_LARGE:
   
nBTaille 2;
   break;
  case 
CREATURE_SIZE_HUGE:
   
nBTaille 4;
   break;
  default:
   
nBTaille 0;
   break;
 }
 
int nD20 d20(1);
 if(
nD20 20)
  return 
2;
 else
 {
  
int nTouch nD20 nBAB nDex nBTaille;
  
int nAC GetTouchAttackAC(oTarget);
  if(
nTouch nAC)
   return 
1;
  else
   return 
0;
 }

[Edit pour lisibilité]
Quelque petit probleme au niveau des regles :


_ tu oublie de rajouter 10 a la CA de la cible

_ c ___nTouch >= nAC___ et pas ___nTouch > nAC___

_ la taille ainsi que la race de la creature compte aussi bien dans la CA que dans les jet d attaque

_ le feat dodge ne fonctionne que sur un adversaire, normalement au choix sur papier que l on choisi a n importe quel moment dans le tour de jeu, et dans NWN marche sur la cible actuelle ou le dernier attaquant, mais donc pas sur tout les adversaires en meme temps. Mais comment testé si oTarget a mis dodge sur oAttacker ...
Dolanor l'avait refait quand il a rescripte le sort rayon de givre. Faut regarder dans le persistants sur les scripts et la reecriture des sorts en particulier (y'avais meme une gestion du miss avec le rayon qui touchait a cote )
Citation :
le feat dodge ne fonctionne que sur un adversaire, normalement au choix sur papier que l on choisi a n importe quel moment dans le tour de jeu, et dans NWN marche sur la cible actuelle ou le dernier attaquant, mais donc pas sur tout les adversaires en meme temps. Mais comment testé si oTarget a mis dodge sur oAttacker ...
Justement GetHasFeatEffect fait ça (cette fonction est différente de GetHasFeat)

** Les 10 de la CA et le >= c'est corrigé, merci de l'info.

** Pour la taille, des spécialistes de D&D me disent que ça ne s'applique que pour l'attaquant, et les livres de règles semblent leur donner raison.

Script corrigé:

Code PHP:

//CA de la cible d'une attaque de contact a distance
int GetTouchAttackAC(object oTarget);

//Effectue une attaque de contact a distance de oAttacker sur oTarget
//2 = Critique, 1 = Touche, 0 = rate
int TouchRangedAttack(object oAttackerobject oTarget);

int GetTouchAttackAC(object oTarget)
{
 
int nDodge;
 if(
GetHasFeatEffect(FEAT_DODGEoTarget)) nDodge 1;
 
int nDex GetAbilityModifier(ABILITY_DEXTERITYoTarget);
 
int nAC 10 nDex nDodge;
 
effect eParal GetFirstEffect(oTarget);
 while(
GetIsEffectValid(eParal))
 {
  if(
GetEffectType(eParal) == (EFFECT_TYPE_ENTANGLE || EFFECT_TYPE_PARALYZE 
  
|| EFFECT_TYPE_PETRIFY || EFFECT_TYPE_SLEEP || EFFECT_TYPE_STUNNED))
  {
   
nAC 10;
  }
  
eParal GetNextEffect(oTarget);
 }
 return 
nAC;
}

//BAB + Dex + Taille + Portee
int TouchRangedAttack(object oAttackerobject oTarget)
{
 
int nBAB GetBaseAttackBonus(oAttacker);
 
int nDex GetAbilityModifier(ABILITY_DEXTERITYoAttacker);
 
int nTaille GetCreatureSize(oTarget);
 
int nBTaille;
 switch(
nTaille)
 {
  case 
CREATURE_SIZE_TINY:
   
nBTaille = -4;
   break;
  case 
CREATURE_SIZE_SMALL:
   
nBTaille = -2;
   break;
  case 
CREATURE_SIZE_MEDIUM:
   
nBTaille 0;
   break;
  case 
CREATURE_SIZE_LARGE:
   
nBTaille 2;
   break;
  case 
CREATURE_SIZE_HUGE:
   
nBTaille 4;
   break;
  default:
   
nBTaille 0;
   break;
 }
 
int nD20 d20(1);
 if(
nD20 20)
  return 
2;
 else
 {
  
int nTouch nD20 nBAB nDex nBTaille;
  
int nAC GetTouchAttackAC(oTarget);
  if(
nTouch >= nAC)
   return 
1;
  else
   return 
0;
 }

Je rajouterai un break dans le calcul de la CA :
Code PHP:

while(GetIsEffectValid(eParal))
 {
  if(
GetEffectType(eParal) == (EFFECT_TYPE_ENTANGLE || EFFECT_TYPE_PARALYZE 
  
|| EFFECT_TYPE_PETRIFY || EFFECT_TYPE_SLEEP || EFFECT_TYPE_STUNNED))
  {
   
nAC 10;
   break;
  }
  
eParal GetNextEffect(oTarget);
 } 
Afin de pouvoir economiser un minimum de temps processeur (c'est sans doute pas beaucoup mais pas beaucoup sur chaque script ca commence a faire pas mal )
Tant qu'on y est sur l'optimisation, y a t'il une difference entre le while et le for ? (autre que le nombre de lignes ?)
On pourrait aussi bien ecrire :
Code PHP:

for (effect eParal GetFirstEffect(oTarget); GetIsEffectValid(eParal); eParal GetNextEffect(oTarget))
{
  [...]

Sinon c'est juste une question de comprehension.

edit: je veux faire le malin et je merde mon for (corrige)
Le for agit sur un compteur, le while sur la valeur d'une comparaison, ce n'est pas du tout la même chose.

Dans l'exemple que tu donnes, la 2e expression des paramètres de la boucle for est le "break statement", donc la condition pour quitter la boucle.
Dans ton exemple, si l'effet n'est pas valide, on quitte. Ce qui n'est pas faux en soi, mais ça reviendrait alors à utiliser le while sans le break
Nan, j'ai rien change. Ce qu'il y a dans le while est aussi dans le for. J'ai juste mis l'initialisation et l'incrementation sur la meme ligne que la condition. En gros, on a :
Code PHP:

for (effect eParal GetFirstEffect(oTarget); GetIsEffectValid(eParal); eParal GetNextEffect(oTarget))
{
 if(
GetEffectType(eParal) == (EFFECT_TYPE_ENTANGLE || EFFECT_TYPE_PARALYZE 
  
|| EFFECT_TYPE_PETRIFY || EFFECT_TYPE_SLEEP || EFFECT_TYPE_STUNNED))
  {
   
nAC 10;
   break;
  }

Comme ça ok, je pensais que tu voulais remplacer le while et le if en une seule fois

Le "break statement" du for n'est pas nécessaire dans ce cas-ci, car GetFirstEffect renvoit EffectInvalid si la cible ne possède pas d'effet actif.
Citation :
Provient du message de gaeriel/nekresh
Dolanor l'avait refait quand il a rescripte le sort rayon de givre. Faut regarder dans le persistants sur les scripts et la reecriture des sorts en particulier (y'avais meme une gestion du miss avec le rayon qui touchait a cote )
Vi en effet, j'ai retrouvé le lien


https://forums.jeuxonline.info/showthread.php?t=194426

En fait mon touchrange gere la ca des moines qui evolue selon leur nivo et aussi leur bonus de sagesse a la CA
Par contre je ne gerais pas le 10 de ca face a des etats comme entangle ou autre petrification ou stun.

Enfin bon, ca reste de la bidouille tant que l'on ne peut pas obtenir le type de CA dans la CA totale d'un personnage.
C moins chiant d'enlever de la CA totale tous les bonus de CA d'armure naturelle, armure et bouclier plutot que de partir de 10 puis de rajouter au bonheur la chance (ce qui ne comprends pas les bonus de CA grace aux sorts ( un + 2 grace a une protection contre le mal, c pas a negliger pour un nivo 1) Mais cela revient a repertorier chaque sort de bonus de CA selon leur type de bonus et de mettre un enorme switch case pour verifier la presence d'un effet de CA sur un personnage pouvant servir contre l'attaque de toucher.

Moi je veux juste un : GetAcValue(object Target, int BonusType)
Apres on fait un GetACValue(oTarget, NATURAL_ARMOR) et on le déduit d'un GetACValue(oTarget, ALL_BONUS)

Enfin bon. C'est a bioware de bouger
Citation :
Provient du message de Nissus/Nek/Delph
** Pour la taille, des spécialistes de D&D me disent que ça ne s'applique que pour l'attaquant, et les livres de règles semblent leur donner raison.
ATTACK BONUS
Your attack bonus with a melee weapon is:
Base attack bonus + Strength modifier + size modifier
With a ranged weapon, your attack bonus is:
Base attack bonus + Dexterity modifier + size modifier + range penalty

.....

ARMOR CLASS
Your Armor Class (AC) represents how hard it is for opponents to land a solid, damaging blow on you. It’s the attack roll result that an opponent needs to achieve to hit you. Your AC is equal to the following: 10 + armor bonus + shield bonus + Dexterity modifier + size modifier
Touch Attacks: Some attacks disregard armor, including shields and natural armor. In these cases, the attacker makes a touch attack roll (either ranged or melee). When you are the target of a touch attack, your AC doesn’t include any armor bonus, shield bonus, or natural armor bonus. All other modifiers, such as your size modifier, Dexterity modifier, and deflection bonus (if any) apply normally.

......

size modifier
Colossal -8
Gargantuan -4
Huge -2
Large -1
Medium 0
Small +1
Tiny +2
Diminutive +4
Fine +8

.......

En bref, le modificateur de taille influence le bonus d attaque de l attaqueur en fonction de sa taille, mais aussi la CA de la cible

Donc tes valeurs de modificateur en fonction de la taille de la cible sont deja le double de ce quil devrait etre, et tu ne prends pas en comptes la taille de l attaquant.


C'est qui tes specialiste ???

edit : oups, j ai pas dis que ca venait du SRD v3.5
Ouais bon, faut p'tet penser à prendre les mêmes références si on veut comparer.

Entre le bouquin 3e Edition VF et un texte 3.5 VO....
Citation :
Provient du message de Nissus/Nek/Delph
Ouais bon, faut p'tet penser à prendre les mêmes références si on veut comparer.

Entre le bouquin 3e Edition VF et un texte 3.5 VO....
vi c vrai mais je peux pas emporter mes bouquin au boulot mon patron veut pas.

Mais le bouquin DD 3eme edition contient les meme regle, quasiment sur :
humain attaquant un halfling avec un jet de toucher a distance ( ) :
humain : d20 + bab + modif de dex + 0 ( taille moyenne)
halfling : 10 + modif de dex + 1 ( petite taille, description de l halfling dans les bouquins)

l inverse :
halfling : d20 + bab + modif de dex + 1 ( de meme, halfling +1 car petit )
humain : 10 + modif de dex + 0

pour verifier, ya la page des races sur nwn.jol

sinon, meme si je me base sur les regles 3.5 car elles sont pas loin de moi, sur papier avec la 3.0, c'est pareil en ce qui concerne c regle de combat la, j ai pas fait que les lire les regle, je les ai appliqué aussi et bien avant la 3.5. Les regles francaise ou anglaise restent les meme de toutes facon, ya juste des fois ou c tres tes mal traduit en francais.

edit : a vi, et pour le moine, il garde son bonus de sagesse a la CA et son bonus de niveau de moine, si il est concient de l attaque et n'est pas flatfooted (arf, j ai du mal avec les traducs )
Donc en prenant le dernier exemple, l'humain appliquerait son modificateur de taille à son jet de toucher ?

Donc Si je suis Gargantuesque et que je tape sur un truc Infime, je tape à -16.

Bah, je vais faire une race de PJ de taille Infime, rôdeur tueur de créatures titanesques, force 18 et arme à deux mains (même un cure dent à deux mains c'est bon) et je tapperais avec minimum 1+6 (vu qu'une arme doit faire au minimum un point) tout en ayant + 16 au toucher, sans compter les bonus d'ennemi mortel du rôdeur.... et une CA de 26 tout nu, sans compter ma dex ni aucun don. Tout ça au niveau 1.....

Je roxxe tout le monde sans jamais me faire toucher avec un tel système....
Dans un système basé sur le D20, donner 80% du résultat en bonus de situation, c'est débile, j'en reviens pas....

C'est comme si on te proposait de faire une course avec comme but d'être le premier à 200Km/h; ton adversaire démarre à 160 et toi, départ arrêté

Franchement ils ont fumé WoTC sur ce coup là, rendez nous la première édition
Vi , c vrai , j aurai plutot donner un bonus/malus en fonction de la difference de taille, ce qui est le cas actuellement par 2 modificateur de taille, 1 pour l attaquant et l autre pour la cible. Ca eviterai de cumuler des bonus/malus en attaque permanent ainsi que en defence.

A priori, il n y a pas de limite de force pour les creature de petite ou grande taille, ni de dex d ailleurs.

mais si tu prend un monstre generique avec 16 en force et de taille moyenne, qd tu lui baisse sa taille, il pred de la force et gagne en dex en plus de gagner en bonus de CA. Et inversement qd tu l agrandi ( de memoire, c +8 en force par taille au dessus de grand et -2 en dex ).

Imagine une mouche et un geant. le geant va galerer pour choper la mouche mais si il y arrive ...... scroutchhhhhhh, c logique

Apres, pour un truc tout piti, les armes de cette taille la font des degat de 1 ou du moins plus petit, cf manuel 3.5 pour arme en fonction de la taille du porteur ( c nouveau mais super et plus realiste )

ps : dsl si des fois je dis les choses d une facon ..... peu acceptable
Oui c'est vrai que de cumuler ET le malus en defense ET le bonus de toucher tout ca a cause de la taille, ca fait gros.

Je vois bien un gros truc pas difficile a manquer, meme si les dommages seront ridicules, a l'inverse, un dragon attaquant une mouche, je veux voir ca, avec les turbulences crée par ses mouvement, la mouche va, meme sans le vouloir, glisser autour du membre etc (et ouais, c pas top en aerodynamisme un dragon ). Mais bon, un drgon pas con (donc un dragon quoi...Enfin pas NWN ... ) ben il balancera un chtit souffle dans le tas, et je parie que la mouche meurt
Citation :
Provient du message de Dolanor
Oui c'est vrai que de cumuler ET le malus en defense ET le bonus de toucher tout ca a cause de la taille, ca fait gros.

Je vois bien un gros truc pas difficile a manquer, meme si les dommages seront ridicules, a l'inverse, un dragon attaquant une mouche, je veux voir ca, avec les turbulences crée par ses mouvement, la mouche va, meme sans le vouloir, glisser autour du membre etc (et ouais, c pas top en aerodynamisme un dragon ). Mais bon, un drgon pas con (donc un dragon quoi...Enfin pas NWN ... ) ben il balancera un chtit souffle dans le tas, et je parie que la mouche meurt
LOL

Sinon, c clair que le souffle c efficace, pas de jet opposé a la CA mais que aux reflexes. Apres si la mouche a beaucoup de dex et est tres rapide (comme une mouche qoa ), bah ca fait comme le moine qui se sort des sorts de zones en faisant une pirouette, ils font un dwa au drak et se marre
En cadeau bonux, les tables de modification de taille

Table: Changes to Statistics by Size
Code PHP:

Old Size*    New Size    Str   Dex   Con   Natural Armor   ACAttack    
Fine         Diminutive  Same  
-2    Same  Same            -4    
Diminutive   Tiny        
+2    -2    Same  Same            -2    
Tiny         Small       
+4    -2    Same  Same            -1    
Small        Medium      
+4    -2    +2    Same            -1    
Medium       Large       
+8    -2    +4    +2              -1    
Large        Huge        
+8    -2    +4    +3              -1    
Huge         Gargantuan  
+8    Same  +4    +4              -2    
Gargantuan   Colossal    
+8    Same  +4    +5              -4    
*Repeat the adjustment if the creature moves up more than one size
Table: Increased Damage By Size
Code PHP:

Old Damage (Each)*    New Damage    
1d2    1d3    
1d3    1d4    
1d4    1d6    
1d6    1d8    
1d8    2d6    
1d10    2d8    
2d6    3d6    
2d8    3d8    
Repeat the adjustment if the creature moves up more than one size category

Imagine un truc de la taille d une mouche. a la base, en taille normal, ca a 16 en force, dext et constit. Tu le passe en tout piti et ca donne 6 en force, 24 en dex et 14 en constit donc tu perd un peu au niveau des carac ( 4 point en moins ) mais tu gagne +8 en CA et bonus d attaque, donc un gain de +3 en melee, +12 a distance et +12 en CA

en contre parti, les domages d une epee a 2 mains taille cure dent pour fourmi, donnent 2D6(pour perso moyen)->1D8(perso petit)->1D6 (perso tiny)-> 1D4 ( perso diminutive)->1D3 ( perso piti piti).

Trop baleze ^^
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés