[Include] Extended Actor Functions
#1

Since Emmet_ has left SA-MP i will maintain this include by releasing new updates and fixing bugs.

I don't want to take any credit for his work.

Actor functions


Here are some useful functions related to actors. The purpose of this library is to extend the functionality of actors.

Function list
pawn Code:
// Resynchronize an actor.
forward ResyncActor(actorid);
// Respawns an actor.
forward RespawnActor(actorid);
// Checks if the actor is dead.
forward IsActorDead(actorid);
// Sets an actor's respawn time (after death).
forward SetActorRespawnTime(actorid, time);
// Checks if a player is in range of an actor.
forward IsPlayerInRangeOfActor(playerid, actorid, Float:radius = 5.0);
// Attaches a 3D text label to an actor.
forward Text3D:Attach3DTextLabelToActor(actorid, text[], color, Float:fOffsetX, Float:fOffsetY, Float:fOffsetZ, Float:distance = 10.0, worldid = 0, testlos = 0);
// Sets an actor's name(3D text label)
forward SetActorName(actorid, name[]);
// Gets an actor's name
forward GetActorName(actorid);
// Toggle an actor's name(Show/Hide 3D text label. Only works when the actor's name is already set(SetActorName)
forward ToggleActorName(actorid,bool:toggle);
// Sets an actor's color(Colors 3D text label only)
forward SetActorColor(actorid, color);
// Sets an actor's chat bubble
forward SetActorChatBubble(actorid, text[], color, Float:drawdistance, expiretime);
Callback list
pawn Code:
// Called when an actor dies.
forward OnActorDeath(actorid, killerid, reason);
// Called when an actor spawns.
forward OnActorSpawn(actorid);
// Called when a player aims at an actor.
forward OnPlayerTargetActor(playerid, newtarget, oldtarget);


Other benefits:
  • Animations are automatically preloaded for an actor, so you don't need to preload them yourself!
  • Actor damage is automatically deducted so you don't need to worry about doing that also.
  • This also fixes a bug where animations aren't cleared when an actor dies.
Usage

Here's some useful code to respawn a dead actor after 5 seconds:

pawn Code:
public OnActorDeath(actorid, killerid, reason)
{
    SetActorRespawnTime(actorid, 5000);
}


Attach a 3D text label to a certain actor:

pawn Code:
gActor = CreateActor(255, 0.0, 0.0, 10.0, 90.0);

gAttachedLabel = Attach3DTextLabelToActor(gActor, "I am an actor!\nPress {FFFF00}'Y'{FFFFFF} to interact with me!", 0xFFFFFFFF, 0.0, 0.0, 0.3, 10.0, 0);


Make the targeted actor put their hands up.

pawn Code:
public OnPlayerTargetActor(playerid, newtarget, oldtarget)
{
    if (newtarget != INVALID_ACTOR_ID)
    {
        ApplyActorAnimation(newtarget, "PED", "handsup", 4.1, 0, 0, 0, 0, 0);
    }
    if (oldtarget != INVALID_ACTOR_ID)
    {
        ClearActorAnimations(oldtarget);
    }
}
Updates
Update 08.04.2016
pawn Code:
- Added native SetActorName(actorid,name[])
- Added native GetActorName(actorid)
- Added native ToggleActorName(actorid,bool:toggle)
- Added native SetActorColor(actorid, color)
- Added native SetActorChatBubble(actorid, text[], color, Float:drawdistance, expiretime)
Downloads
Updated
http://pastebin.com/A9U2suFK

Old
http://pastebin.com/TGKx2EyD

Suggestions

If you have any suggestions to improve this include you can pm me or leave a comment here.


Admigo
Reply
#2

Code:
SetActorName(actorid, name[]);
GetActorName(actorid, const name[], len);
ToggleActorName(actorid, toggle);
SetActorChatBubble(actorid, text[], color, Float:drawdistance, expiretime);
It must be easy for you.
Reply
#3

Quote:
Originally Posted by aoEXE
View Post
Code:
SetActorName(actorid, name[]);
GetActorName(actorid, const name[], len);
ToggleActorName(actorid, toggle);
SetActorChatBubble(actorid, text[], color, Float:drawdistance, expiretime);
It must be easy for you.
Thanks for your suggestions. I just added them in an update.
Update 08.04.2016
pawn Code:
- Added native SetActorName(actorid,name[])
- Added native GetActorName(actorid)
- Added native ToggleActorName(actorid,bool:toggle)
- Added native SetActorColor(actorid, color)
- Added native SetActorChatBubble(actorid, text[], color, Float:drawdistance, expiretime)
Download
http://pastebin.com/A9U2suFK
Reply
#4

Am glad someone with more experience has taken the task to keep this include maintained/updated, keep it up!
Reply
#5

Quote:
Originally Posted by -CaRRoT
View Post
Am glad someone with more experience has taken the task to keep this include maintained/updated, keep it up!
I won't say i have more experience then Emmet. Just want to keep this include updated. If you have any suggestions to improve this include tell me.
Reply
#6

I don't know why but none of those functions are working with me...
Reply
#7

Quote:
Originally Posted by bruxo00
View Post
I don't know why but none of those functions are working with me...
Any errors? Can you show me the code you are using?
Reply
#8

I was just testing this... But the functions are simply not working. No errors tho.


Like:
Attach3DTextLabelToActor does not create the label.
SetActorName the same.
RespawnActor destroys the actor but the actor don't respawn.


I just tested these 3 functions.
Reply
#9

I have a request for you.

Can you create a callback "OnPlayerShootActor"? Is it possible?
Reply
#10

You can use the callback OnPlayerGiveDamageActor for that.
Reply
#11

Quote:
Originally Posted by Admigo
Посмотреть сообщение
You can use the callback OnPlayerGiveDamageActor for that.
I'm having some troubles with this callback, but i'll try to resolve it.
Reply
#12

If you put the actor name SetActorName(myActor, "Test"); under OnActorRespawn it doesnt add it. When the Actor dies it removes the name.
Reply
#13

Thanks for the comments.

Quote:
Originally Posted by bruxo00
Посмотреть сообщение
I was just testing this... But the functions are simply not working. No errors tho.

Like:
Attach3DTextLabelToActor does not create the label.
SetActorName the same.
RespawnActor destroys the actor but the actor don't respawn.

I just tested these 3 functions.
I will have some further tests in my gamemode.

Quote:
Originally Posted by Doritoss
Посмотреть сообщение
If you put the actor name SetActorName(myActor, "Test"); under OnActorRespawn it doesnt add it. When the Actor dies it removes the name.
I will look into this.
Reply
#14

(82) : error 037: invalid string (possibly non-terminated string)

Quote:

static s_AnimationLibraries[][] = {
!"AIRPORT", !"ATTRACTORS", !"BAR", !"BASEBALL",
!"BD_FIRE", !"BEACH", !"BENCHPRESS", !"BF_INJECTION",
!"BIKED", !"BIKEH", !"BIKELEAP", !"BIKES",
!"BIKEV", !"BIKE_DBZ", !"BMX", !"BOMBER",
!"BOX", !"BSKTBALL", !"BUDDY", !"BUS",
!"CAMERA", !"CAR", !"CARRY", !"CAR_CHAT",
!"CASINO", !"CHAINSAW", !"CHOPPA", !"CLOTHES",
!"COACH", !"COLT45", !"COP_AMBIENT", !"COP_DVBYZ",
!"CRACK", !"CRIB", !"DAM_JUMP", !"DANCING",
!"DEALER", !"DILDO", !"DODGE", !"DOZER",
!"DRIVEBYS", !"FAT", !"FIGHT_B", !"FIGHT_C",
!"FIGHT_D", !"FIGHT_E", !"FINALE", !"FINALE2",
!"FLAME", !"FLOWERS", !"FOOD", !"FREEWEIGHTS",
!"GANGS", !"GHANDS", !"GHETTO_DB", !"GOGGLES",
!"GRAFFITI", !"GRAVEYARD", !"GRENADE", !"GYMNASIUM",
!"HAIRCUTS", !"HEIST9", !"INT_HOUSE", !"INT_OFFICE",
!"INT_SHOP", !"JST_BUISNESS", !"KART", !"KISSING",
!"KNIFE", !"LAPDAN1", !"LAPDAN2", !"LAPDAN3",
!"LOWRIDER", !"MD_CHASE", !"MD_END", !"MEDIC",
!"MISC", !"MTB", !"MUSCULAR", !"NEVADA",
!"ON_LOOKERS", !"OTB", !"PARACHUTE", !"PARK",
!"PAULNMAC", !"PED", !"PLAYER_DVBYS", !"PLAYIDLES",
!"POLICE", !"POOL", !"POOR", !"PYTHON",
!"QUAD", !"QUAD_DBZ", !"RAPPING", !"RIFLE",
!"RIOT", !"ROB_BANK", !"ROCKET", !"RUSTLER",
!"RYDER", !"SCRATCHING", !"SHAMAL", !"SHOP",
!"SHOTGUN", !"SILENCED", !"SKATE", !"SMOKING",
!"SNIPER", !"SPRAYCAN", !"STRIP", !"SUNBATHE",
!"SWAT", !"SWEET", !"SWIM", !"SWORD",
!"TANK", !"TATTOOS", !"TEC", !"TRAIN",
!"TRUCK", !"UZI", !"VAN", !"VENDING",
!"VORTEX", !"WAYFARER", !"WEAPONS", !"WUZI",
!"WOP", !"GFUNK", !"RUNNINGMAN"
};

Reply
#15

@Romero837: Do you use Zeex's compiler patch? If yes, you need to wrap each one of them with curly braces such:
pawn Код:
static s_AnimationLibraries[][] = {
{!"AIRPORT"}, {!"ATTRACTORS"}, {!"BAR"}, {!"BASEBALL"},
...
Reply
#16

I have the normal compiler

Reply
#17

The code of the include is fine so the problem is either with your compiler or with the include you have saved. You may try to update the include one more time and if the problem persists, try as I told you: curly braces around the packed strings.
Reply


Forum Jump:


Users browsing this thread: 4 Guest(s)