Author Topic: triggerteam  (Read 483 times)

luluthefirst4

  • Poseur de brushs
  • Posts: 138
    • http://
triggerteam
« on: June 30, 2011, 12:34:27 AM »
Voilà, j'aimerais savoir si c'est possible à faire en sorte que le trigger_multiple soit seulement activé par l'autre équipe (non c'est seulement par les dégâts, spawnflags 128)

merci d'avance.

P.S: dans le g_allclasses.html j'ai vu ça:

Code: [Select]
team( String moveTeam )

    used to make multiple entities move together.

C'est pour les entités (général) mais je sais pas du tout à quoi cela signifie
« Last Edit: June 30, 2011, 12:37:43 AM by luluthefirst4 »

snaky

  • Squatteur de forum
  • ****
  • Posts: 3332
    • http://profparty.forumpro.fr
triggerteam
« Reply #1 on: June 30, 2011, 11:02:47 PM »
'pas sûr que "team" soit entendu en ce sens là dans cette description, ca ressemblerait plus à du "groupage" d'entité...

Toujours est-il que pour qu'un trigger soit activé par une seule équipe, le plus simple est surement de conditionner le thread lancé par ton trigger, en testant l'équipe de l'entité activante, type:

Code: [Select]
trigger_thread:
local.active_entity = parm.other // local.active entity désigne alors l'entité ayant activé le trigger qui a lancé trigger_thread
if (local.active_entity.dmteam == "allies"/"axis")
{
// Instructions à executer si le joueur est dans telle ou telle équipe
}
end

A moins que la phrase initiale consistait à faire qu'une trigger qui s'active pas les dégâts ne le soit que si l'auteur des dégâts est dans l'une ou l'autre des équipes?!

luluthefirst4

  • Poseur de brushs
  • Posts: 138
    • http://
triggerteam
« Reply #2 on: July 02, 2011, 01:11:30 AM »
Ben si par exemple la team allié tire sur le trigger "allié", le trigger n'a pas de dégâts.

snaky

  • Squatteur de forum
  • ****
  • Posts: 3332
    • http://profparty.forumpro.fr
triggerteam
« Reply #3 on: July 02, 2011, 05:32:17 PM »
Tu peux toujours essayer d'appliquer un dmteam au trigger ($trigger dmteam "allies" ou $trigger.dmteam = "allies").

Sinon, vas-y au bluff:

Quand le trigger est activé par n'importe qui, tu teste chaque joueur:
* si l'un des joueurs appuie sur "tir",
* s'il est tourné vers le trigger (produit vectoriel entre les vecteurs normés <joueur vers trigger>
* si <joueur vers face à lui-même (utilise angles_toforward)> et s'il peut viser le trigger (sighttrace <point d'origine> <trigger> == TRUE)

alors on peut supposer que le joueur est celui qui a tiré, tu n'as alors plus qu'à tester le $player[].dmteam.

luluthefirst4

  • Poseur de brushs
  • Posts: 138
    • http://
triggerteam
« Reply #4 on: July 03, 2011, 04:14:23 AM »
Quand le trigger est activé par n'importe qui: le problème c'est que c'est un trigger qui ne s'active qu'une fois, en faite si tu veux tout savoir j'essaye de faire des func_crate via du script, mais comme je ne peux pas, je dois utiliser un script_object avec un trigger_multiple ^^

dmteam est invalide pour la classe trigger

pour savoir si un joueur appuie sur tir faut surement modifier mike_torso.st ou placer un trigger_multiple sur le joueur en tant que "détecteur de tir", mais c'est assez complexe

snaky

  • Squatteur de forum
  • ****
  • Posts: 3332
    • http://profparty.forumpro.fr
triggerteam
« Reply #5 on: July 04, 2011, 12:25:07 AM »
Quote
Quand le trigger est activé par n'importe qui: le problème c'est que c'est un trigger qui ne s'active qu'une fois, en faite si tu veux tout savoir j'essaye de faire des func_crate via du script, mais comme je ne peux pas, je dois utiliser un script_object avec un trigger_multiple ^^

dmteam est invalide pour la classe trigger

pour savoir si un joueur appuie sur tir faut surement modifier mike_torso.st ou placer un trigger_multiple sur le joueur en tant que "détecteur de tir", mais c'est assez complexe
$player[].fireheld est un booléen indiquant si je joueur $player[] appuie, en ce moment, sur la touche de tir. $player[].useheld fonctionne de même pour la touche "utiliser".

Cette histoire "d'unicité" d'execution est un faux problème.
Utilises un trigger qui peut s'activer plusieurs fois; à chaque activation, teste si il existe un joueur:
* de la bonne équipe ($player[].dmteam == "allies"/"axis"),
* en vie (isalive($player[]))
* qui tire ($player[].fireheld == 1)
* dans la direction du trigger (vector_normalize(self.origin-$player gettagposition "eyes bone")*angles_toforward($player[].viewangles)) > 0.9, si les deux vecteurs sont presque colinéaires de même sens, alors le produit scalaire sera proche de 1, et je joueur regardera dans la direction du trigger; ($player[] cansee self) peut éventuer marcher aussi, mais je ne suis pas certain)

Si un tel joueur existe, désactive le trigger (voir supprime le avec un bon self remove), puis lance les lignes de CoDes à executer pour ta func_crate.
Si un tel joueur n'existe pas, le trigger sera encore là pour la suite des évènements, et sera toujours activable.

Après, pour ce qui est de la destruction par projectile ou pas roquette, essaie de voir si lesdits projectiles ont un .dmteam ou similaire. Si non, il te faudra enregistrer cette variable dans le projectile lors de son lancer (dès l'apparition d'un model de projectile sur la map, cherche le joueur le plus proche de ce projectile: c'est surement le lanceur).

luluthefirst4

  • Poseur de brushs
  • Posts: 138
    • http://
triggerteam
« Reply #6 on: July 15, 2011, 05:11:50 PM »
Ah oui d'accord, mais je pense avoir trouvé la solution, si le trigger est activé par un joueur, tester si le joueur est dans la team des alliés comme t'as dit, si oui, on spawn le même trigger avec le même setsize et la même origin, c'est pas con, mais les autres solutions me servent à rien, mais ça risque de faire une erreur "AlloFree Edict" ou un truc dans le genre hummm mais merci de ton aide.

$player[] cansee self <fov> <vision_distance> ça peut marcher aussi, mais faut faire un coup de sighttrace et calculer la vision_distance en fonction de l'origin du joueur et de l'origin du trigger ^^
« Last Edit: July 15, 2011, 07:54:23 PM by luluthefirst4 »

snaky

  • Squatteur de forum
  • ****
  • Posts: 3332
    • http://profparty.forumpro.fr
triggerteam
« Reply #7 on: July 16, 2011, 01:00:22 PM »
Pourquoi "Allow free edict" te tomberait dessus? Y'a pas de raison de dépasser les 800 entités...
fov et vision_distance (surtout vision_distance) sont facultatifs pour la commande cansee (il me semble).
Si tu tiens à le calculer, c'est juste la norme vectorielle:

Code: [Select]
vector_length($player[].origin-self.origin)*1.1
*1.1 pour se laisser une marge de manoeuvre; on peut aussi tabler sur un +128 ou +256 pour avoir une marge de manoeuvre fixée à 128 ou 256 unités

En place de .origin, on peu aussi tabler sur
Code: [Select]
$player[] gettagposition "eyes bone"Pour faire le calcul non pas entre la position des pieds du joueur et l'origine trigger, mais entre la position approxiative de la vue du joueur et de l'origine trigger.


Quote
mais je pense avoir trouvé la solution, si le trigger est activé par un joueur, tester si le joueur est dans la team des alliés
Mais je croyais que déterminer quel joueur a activé le trigger était ton problème...?!

luluthefirst4

  • Poseur de brushs
  • Posts: 138
    • http://
triggerteam
« Reply #8 on: July 16, 2011, 04:21:45 PM »
Quote
Mais je croyais que déterminer quel joueur a activé le trigger était ton problème...?!

ça l'est, je teste si le joueur est bien dans la team allié, si oui alors on refait le trigger

pour les AlloFree: Edict, ça m'arrive trop souvent sur mon serveur quand il y a > 17 joueurs, ça plante donc je suis obligé de redémarrer manuellement, je pensais pas que spawner 8 triggers d'un coup (pour l'autre équipe) pouvait en faire autant lol