Random Animation OnPlayerRequestClass
#1

By looking at a thread, I managed to create a code, consisting of an array, that stores the animation data, ex: "DANCING" and "dnce_M_b".

Then I added a random function that picks a random position of the array.

Finally I added this code under OnPlayerRequestClass and everything compiled properly.


The problem is that when I get to the skin selection screen, no animations will play and I can't quite figure out why.

Can you advise me on what I should do?

Код:
new RandomAnims[][] =
{
    {"DANCING", "dnce_M_b"}, // RandomAnime
    {"PAULNMAC", "wank_in"}, // RandomAnime
    {"KISSING", "Grlfrd_Kiss_01"}, // RandomAnime
    {"FIGHT_E", "FightKick"}, // RandomAnime
    {"FIGHT_B", "FightB_1"} // RandomAnime
};

public OnPlayerRequestClass(playerid, classid)
{

    new Random = random(sizeof(RandomAnims));
    ApplyAnimation(playerid, RandomAnims[Random][0], RandomAnims[Random][1], 4.0, 1, 1, 1, 0, -1);
Reply
#2

If you look at the filterscript gl_actions there is a function called PreLoadAnimLib i beleive this is what you need to use. If you do not pre-load the anim libs, a lot of anims will need to be applied twice.

EDIT: gl_actions.pwn comes with the server package in the filterscript folder.
Reply
#3

I have added the following code from gl_actions, it compiled properly, but still doesn't work:

Код:
new gPlayerAnimLibsPreloaded[MAX_PLAYERS];

PreloadAnimLib(playerid, animlib[])
{
    ApplyAnimation(playerid,animlib,"null",0.0,0,0,0,0,0);
}

public OnPlayerRequestClass(playerid, classid)
{

    if(!gPlayerAnimLibsPreloaded[playerid]) {
   		PreloadAnimLib(playerid,"BOMBER");
   		PreloadAnimLib(playerid,"RAPPING");
    	        PreloadAnimLib(playerid,"SHOP");
   		PreloadAnimLib(playerid,"BEACH");
   		PreloadAnimLib(playerid,"SMOKING");
    	        PreloadAnimLib(playerid,"FOOD");
    	        PreloadAnimLib(playerid,"ON_LOOKERS");
    	        PreloadAnimLib(playerid,"DEALER");
	 	PreloadAnimLib(playerid,"CRACK");
		PreloadAnimLib(playerid,"CARRY");
		PreloadAnimLib(playerid,"COP_AMBIENT");
		PreloadAnimLib(playerid,"PARK");
		PreloadAnimLib(playerid,"INT_HOUSE");
		PreloadAnimLib(playerid,"FOOD");
		PreloadAnimLib(playerid,"PAULNMAC");
		PreloadAnimLib(playerid,"KISSING");
		PreloadAnimLib(playerid,"FIGHT_E");
		PreloadAnimLib(playerid,"FIGHT_B");
		PreloadAnimLib(playerid,"DANCING");
		
		gPlayerAnimLibsPreloaded[playerid] = 1;
	}
Am I supposed to add :

Код:
PreloadAnimLib(playerid, "PED");
Because it would not really make sense putting this after the player has picked his skin/class.
Reply
#4

You only need to preload the anim libraries you are using.

pawn Код:
PreloadAnimLib(playerid,"DANCING");
PreloadAnimLib(playerid,"PAULNMAC");
PreloadAnimLib(playerid,"KISSING");
PreloadAnimLib(playerid,"FIGHT_E");
PreloadAnimLib(playerid,"FIGHT_B");
If it still does not work try putting it under OnPlayerConnect
Reply
#5

I did as you said but it still did not work.

Could it be that there is something wrong with my array?

Also, you said something about adding the animation twice, can you explain?
Reply
#6

Your code:
pawn Код:
new RandomAnims[][] =
{
    {"DANCING", "dnce_M_b"}, // RandomAnime
    {"PAULNMAC", "wank_in"}, // RandomAnime
    {"KISSING", "Grlfrd_Kiss_01"}, // RandomAnime
    {"FIGHT_E", "FightKick"}, // RandomAnime
    {"FIGHT_B", "FightB_1"} // RandomAnime
};
I think this should be three dimension array, no?
pawn Код:
String[]="DANCING";
^ one dimenison
pawn Код:
TwoStrings[][]={"DANCING", "dnce_M_b"};
^two dimensions
pawn Код:
ALotOfStrings[][][]={
    {"DANCING", "dnce_M_b"}, // RandomAnime
    {"PAULNMAC", "wank_in"}, // RandomAnime
    {"KISSING", "Grlfrd_Kiss_01"}, // RandomAnime
    {"FIGHT_E", "FightKick"}, // RandomAnime
    {"FIGHT_B", "FightB_1"}
}
^three dimensions
But, actually, I am not sure.
Reply
#7

I changed the code to the following:
Код:
new RandomAnims[][][] =
{
    {"DANCING", "dnce_M_b"}, // RandomAnime
    {"PAULNMAC", "wank_in"}, // RandomAnime
    {"KISSING", "Grlfrd_Kiss_01"}, // RandomAnime
    {"FIGHT_E", "FightKick"}, // RandomAnime
    {"FIGHT_B", "FightB_1"} // RandomAnime
};
Which gave me: error 048: array dimensions do not match

I also tried the two dimensional array

Код:
TwoStrings[][]={"DANCING", "dnce_M_b"};
but it also did not work...I even tried removing the random and simply reading from the array position, ie: 0, 1 but that also did not fix the problem.
Reply
#8

pawn Код:
new RandomAnims[][][] =
{
    {{"DANCING"}, {"dnce_M_b"}}, // RandomAnime
    {{"PAULNMAC"}, {"wank_in"}}, // RandomAnime
    {{"KISSING"}, {"Grlfrd_Kiss_01"}}, // RandomAnime
    {{"FIGHT_E"}, {"FightKick"}}, // RandomAnime
    {{"FIGHT_B"}, {"FightB_1"}} // RandomAnime
};
This will be good I think.
Reply
#9

I got an error. Perhaps there's an extra bracket?

error 048: array dimensions do not match
Reply
#10

That works fine for me.
Код:
This forum requires that you wait 120 seconds between posts. Please try again in 67 seconds.
-.-
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)