À propos de ce fichier
actor_plus
v4.1.2
Hey.
Je vous présente une petite include qui vous donne quelques fonctions pour manipuler les acteurs et interagir avec eux plus facilement.
Il est à noter qu'il faut différencier les acteurs dynamiques des acteurs statiques. Vous devez le spécifier lorsque vous utilisez les fonctions disponibles. Si vous utilisez le streamer ; l'include que vous utilisez que des acteurs dynamiques et dans le cas où vous n'utilisez pas de streamer, elle considère que ce ne sont que des acteurs statiques. Malgré ça, vous pouvez utiliser les fonctions pour les deux types d'acteurs. Vous avez juste à le spécifier lors de l'utilisation, aussi simple que ça (la variable est isdynamic)
Je recommande d'avoir la bibliothèque YSI (de Y_Less) pour de meilleures performances (l'include peut utiliser y_iterate et y_timers si possible). L'utilisation de streamer et d'acteurs dynamiques peut également améliorer les performances.
Je vais copier / coller la «documentation» qui se trouve déjà sur GitHub. Je recommande de la lire directement sur GitHub, la présentation est plus claire mais elle
est en anglais.
https://github.com/Dayrion/actor_plus/blob/master/README.md
Constante
Ne peut pas être redéfini
-
MULTIPLE_TARGET_FOUND: Retourné parGetNearestActorForPlayerouGetNearestActorByCoordquand plusieurs acteurs sont trouvés et quandreturn_multiple_targetest sur 'true' -
DEFAULT_ACTOR_VALUE: Utilisez cette constante à la place de toute autre valeur prendra automatiquement la valeur de l'acteur -
DEFAULT_CHECKING_TIME: Utilisé pour détecterOnPlayerTargetActor -
ALL_VALUES_INCLUDED: SiALL_VALUES_INCLUDEDest retourné par une fonction, cela signifie que la chose apparaîtra à toutes les étapes (comme les intérieurs ou les mondes virtuels) -
DEFAULT_ACTOR_REPLACEMENT: Temps (en ms) avant qu'un acteur soit replacé à son ancienne position -
AP_DEBUG_ENABLED: Si le débug de l'include a besoin d'être lieu, définissezAP_DEBUG_ENABLED avant l'include -
MAX_ANIMATION_LIBRARY_LENGTH: Longueur maximum du nom d'une librairie d'animations -
MAX_ANIMATION_NAME_LENGTH: Longueur maximum du nom d'une animation -
DEFAULT_IS_DYNAMIC_PARAMETER: Mis automatiquement surtruesi vous utilisez le streamer, sinon mis surfalse
Peut être redéfini
-
DEFAULT_ACTOR_DRAW_DISTANCE: Distance maximum laquelle les labels sont affichés | (type:float) -
MAX_ACTOR_LABEL_LENGTH: Taille maximum qu'un texte peut contenir pour les labels | (type:integer) -
DEFAULT_ACTOR_COLOR: Couleur par défaut pour le texte des acteurs | (type:hexadecimal) -
DEFAULT_ACTOR_COLOR_NAME: Couleur par défaut pour le nom des acteurs | (type:
hexadecimal) -
DONT_DETECT_OPTA: Vous pouvez le définir avant l'include pour désactiver la détection deOnPlayerTargetActor(qui utilise des timers) | (type:N/A) -
DEFAULT_TEXT_RANGE_DETECTION: Ça vous permet de changer la distance à laquelle les acteurs sont détectés (pourOnPlayerTextNearActorseulement) | (type:float)
Fonctions générales
native RespawnActor(actorid, bool:isdynamic = DEFAULT_IS_DYNAMIC_PARAMETER); native SetActorSkin(actorid, skinid, bool:isdynamic = DEFAULT_IS_DYNAMIC_PARAMETER); native IsActorDead(actorid, bool:isdynamic = DEFAULT_IS_DYNAMIC_PARAMETER); native GetActorSkin(actorid, bool:isdynamic = DEFAULT_IS_DYNAMIC_PARAMETER); native ActorPlaySound(actorid, soundid, Float:x, Float:y, Float:z, Float:max_range, bool:isdynamic = DEFAULT_IS_DYNAMIC_PARAMETER); native SetActorName(actorid, actor_name[], bool:display, bool:contain_id = false, bool:reformat_label = false, bool:isdynamic = DEFAULT_IS_DYNAMIC_PARAMETER); native GetActorName(actorid, actor_name[], length = sizeof(actor_name), bool:isdynamic = DEFAULT_IS_DYNAMIC_PARAMETER); native ToggleActorName(actorid, bool:toggle, bool:isdynamic = DEFAULT_IS_DYNAMIC_PARAMETER); native GetActorTextLabel(actorid, text[], length = sizeof(text), bool:isdynamic = DEFAULT_IS_DYNAMIC_PARAMETER); native GetActorLabelColor(actorid, bool:ToRGB = false, bool:isdynamic = DEFAULT_IS_DYNAMIC_PARAMETER); // output -> RGBA native GetActorNameColor(actorid, bool:ToRGB = false, bool:isdynamic = DEFAULT_IS_DYNAMIC_PARAMETER); // output -> RGBA native ActorHasAttachedLabel(actorid, &bool:name_displayed = false, &bool:text_displayed = false, bool:isdynamic = DEFAULT_IS_DYNAMIC_PARAMETER); native UpdateAttachedActor3DTextLabel(actorid, text[], color, bool:isdynamic = DEFAULT_IS_DYNAMIC_PARAMETER); native DestroyActor3DTextLabel(actorid, bool:isdynamic = DEFAULT_IS_DYNAMIC_PARAMETER); native SetActorChatBubble(actorid, text[], color, Float:drawdistance, expiretime, bool:isdynamic = DEFAULT_IS_DYNAMIC_PARAMETER);
Fonctions - Dépendantes du streamer
native Attach3DTextLabelToActor(actorid, const text[], bool:isdynamic, color, Float:OffsetX, Float:OffsetY, Float:OffsetZ, Float:drawdistance, testlos = 0, worldid = DEFAULT_ACTOR_VALUE, interiorid = DEFAULT_ACTOR_VALUE, playerid = DEFAULT_ACTOR_VALUE, Float:streamdistance = STREAMER_3D_TEXT_LABEL_SD, areaid = DEFAULT_ACTOR_VALUE, priority = 0, bool:store_string = true); // Used to get the real internal actor id used by SA-MP native GetInternalActorIDForPlayer(forplayerid, actorid); // In addition to the streamer native GetDynamicActorInterior(actorid); native SetDynamicActorInterior(actorid, interiorid); native DestroyAllDynamicActors(serverwide); native CountDynamicActors(serverwide); native UpdateDynamicActorForPlayer(playerid); native CountStreamedActorForPlayer(playerid, serverwide); native GetDynamicActorArea(actorid); native SetDynamicActorArea(actorid, STREAMER_TAG_AREA areaid); native STREAMER_TAG_AREA GetDynamicActorPriority(actorid); native SetDynamicActorPriority(actorid, priority); native GetInternalActorIdForPlayer(forplayerid, actorid);
Fonctions - Ne dépendes pas du streamer
native Attach3DTextLabelToActor(actorid, text[], color, Float:OffsetX, Float:OffsetY, Float:OffsetZ, Float:drawdistance, virtualworld = DEFAULT_ACTOR_VALUE, testlos = 0, bool:store_string = true); native SetActorInvulnerable(actorid, invulnerable = true); // Force actor re-stream native SetActorVirtualWorld(actorid, vworld); // Force actor re-stream
Fonctions utiles (aucune include nécessaire)
native GetNearestActorForPlayer(playerid, &bool:isdynamic = false, type = SEARCH_TYPE_ALL, bool:return_multiple_target = false); native GetNearestActorByCoord(Float:x, Float:y, Float:z, &bool:isdynamic = false, type = SEARCH_TYPE_ALL, bool:return_multiple_target = false); native Float:GetActorDistanceFromPoint(actorid, Float:x, Float:y, Float:z, bool:isdynamic = DEFAULT_IS_DYNAMIC_PARAMETER); native IsPlayerInRangeOfActor(playerid, actorid, Float:range = 2.0, bool:isdynamic = DEFAULT_IS_DYNAMIC_PARAMETER); native IsPlayerAimingActor(playerid, actorid); // Return 0 tout le temps si `DONT_DETECT_OPTA` est défini native IsActorInPlayerFacingAngle(playerid, actorid, Float:max_angle = 90.0, bool:isdynamic = DEFAULT_IS_DYNAMIC_PARAMETER);
Type de recherche:
-
SEARCH_TYPE_DYNAMIC: Rechercher seulement les acteurs dynamiques -
SEARCH_TYPE_STATIC: Rechercher seulement les acteurs statiques -
SEARCH_TYPE_ALL: Rechercher seulement les acteurs dynamiques et statiques
Fonctions «par joueur» (dépends de Pawn RakNet)
native HideActorForPlayer(forplayerid, actorid, hide_type, bool:isdynamic = DEFAULT_IS_DYNAMIC_PARAMETER); native BringBackActorForPlayer(forplayerid, actorid, bool:isdynamic = DEFAULT_IS_DYNAMIC_PARAMETER); native SetActorHideTypeForPlayer(forplayerid, actorid, hide_type, bool:isdynamic = DEFAULT_IS_DYNAMIC_PARAMETER); native RemoveAllHiddenActorForPlayer(playerid); native ApplyActorAnimationForPlayer(forplayerid, actorid, repeated_animation, animlib[], animname[], Float:fDelta, loop, lockx, locky, freeze, time, bool:isdynamic = DEFAULT_IS_DYNAMIC_PARAMETER); native ClearActorAnimationsForPlayer(forplayerid, actorid, bool:isdynamic = DEFAULT_IS_DYNAMIC_PARAMETER); native SetActorPosForPlayer(forplayerid, actorid, fake_position_type, Float:x, Float:y, Float:z, bool:isdynamic = DEFAULT_IS_DYNAMIC_PARAMETER); native BringBackActorPosForPlayer(forplayerid, actorid, bool:isdynamic = DEFAULT_IS_DYNAMIC_PARAMETER);
Flags pour les acteurs
Fréquence de dissimulation
-
HIDE_TYPE_NONE: Valeur par défaut -
HIDE_TYPE_ONE_TIME: L'acteur est «caché» une fois et réapparaît lorsqu'il est re-stream par le joueur -
HIDE_TYPE_PERMANENT: L'acteur est caché jusqu'à que le script le fait revenir pour le joueur. Re-stream l'acteur n'y change rien.
Type de répétition d'animation
-
ANIMATION_PLAY_NONE: Valeur par défaut -
ANIMATION_PLAY_ONE_TIME: L'acteur va jouer une animation une fois et l'arrête une fois que le joueur re-stream l'acteur -
ANIMATION_PLAY_PERMANENT: L'acteur joue la même animation à chaque fois que le joueur re-stream ce dernier
Position des acteurs par joueur
-
FAKE_POSITION_NONE: Valeur par défaut -
FAKE_POSITION_ONE_TIME: L'acteur est placé, une fois, à des coordonnées spécifiques. Re-stream l'acteur le place aux coordonnées enregistrées par le serveur. -
FAKE_POSITION_PERMANENT: L'acteur est placé à des coordonnées spécifiques. Re-stream l'acteur ne change pas ses coordonnées.
Callbacks
forward OnPlayerShotActor(playerid, actorid, weaponid, bool:IsDynamicActor); forward OnPlayerTargetActor(playerid, actorid, weaponid); forward OnPlayerStopTargetActor(playerid, actorid, weaponid); forward OnPlayerMakeDamageToActor(playerid, damaged_actorid, Float:amount, weaponid, bodypart, bool:death, bool:IsDynamicActor); forward OnActorDeath(actorid, killerid, reason, bool:IsDynamicActor); forward OnActorSpawn(actorid, bool:IsDynamicActor); forward OnPlayerStreamForActor(forplayerid, actorid, actor_flags, bool:IsDynamicActor); // Pawn RakNet dependency forward OnActorVirtualWorldChange(actorid, oldvw, newvw, bool:IsDynamicActor); forward OnPlayerTextNearActor(playerid, actorid, text[], bool:IsDynamicActor); forward OnDynamicActorInteriorChange(actorid, oldinterior, newinteriorid);
Explications
-
OnPlayerShotActor: Appelé quand un joueur tir sur un acteur même si celui-ci est invulnérable -
OnPlayerTargetActor: Lorsqu'un joueur vise un acteur - OnPlayerStopTargetActor: Lorsqu'un joueur ne vise plus un acteur
-
OnPlayerMakeDamageToActor: Appelé lorsqu'un joueur applique des dégâts à un acteur avec une arme à feu.bool:deathest mis surtruequand l'acteur va mourir après application des dégâts. Retourner 0 à cette callback empêche l'application des dégâts (et la mort éventuelle). -
OnActorDeath: Appelé quand un acteur meurt. Mettre les HPs à 0 d'un acteur appel également cette callback. -
OnActorSpawn: Appelé quand un acteur spawn (lorsqu'il est créé en outre) -
OnPlayerStreamForActor: Appelé lorsqu'un joueur Stream IN (il voit apparaître l'acteur et non disparaître) un acteur même si celui-ci est caché pour le joueur. Important: actor_flags DEVRAIT être utilisé avec les différents flags présentés ci-dessus. -
OnActorVirtualWorldChange: Appelé quand le script change le monde virtuel d'un acteur -
OnPlayerTextNearActor: Appelé quand un joueur parle près d'un acteur -
OnDynamicActorInteriorChange: Appelé quand un intérieur est mis à un acteur dynamique
HUGE thank you to Jelly23 for his precious help and time to help me by answering hundred and hundred of my questions about PawnRakNet and other stuffs. Thanks also to Y_Less for fixing issues about hooking callbacks. <- Flemme de traduire tout ça.
Quoi de neuf dans la version 4.1.2 ? Voir le journal des modifications
Publiée
Mise à jour 4.1.2
Beaucoup de changement ont été fait depuis la 3.4.0. Voici une liste non-exhaustive concernant la mise à jour de la 3.5.0 à la 4.1.2.
- Vous pouvez utiliser l'itérateur Dynamic_Actor pour les acteurs dynamiques (nécessite y_iterate)
- Mise à jour importante sur les labels (et ce qui est associé) + La couleur pour le nom est désormais des de la couleur du texte (voir les fonctions ci-dessous)
- ID Interne des acteurs dynamiques ont été retirés
- Résolution du bug sur les players flags
- Beaucoup d'autre résolutions de bugs (majeurs et mineurs)
- Ajout de la callback OnPlayerStopTargetActor
- Nouvelles fonctions
native DestroyAllDynamicActors(serverwide); native CountDynamicActors(serverwide); native UpdateDynamicActorForPlayer(playerid); native CountStreamedActorForPlayer(playerid, serverwide); native STREAMER_TAG_AREA GetDynamicActorArea(actorid); native SetDynamicActorArea(actorid, STREAMER_TAG_AREA areaid); native GetDynamicActorPriority(actorid); native SetDynamicActorPriority(actorid, priority); native GetInternalActorIdForPlayer(forplayerid, actorid); // renamed from GetRealActorID native ActorPlaySound(actorid, soundid, Float:x, Float:y, Float:z, Float:max_range, bool:isdynamic = DEFAULT_IS_DYNAMIC_PARAMETER); native IsPlayerAimingActor(playerid, actorid);
Code source: https://github.com/Dayrion/actor_plus/blob/master/actor_plus.inc
Documentation (en anglais): https://github.com/Dayrion/actor_plus/blob/master/README.md