SA-MP Forums Archive
player spectate killer - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: SA-MP Scripting and Plugins (https://sampforum.blast.hk/forumdisplay.php?fid=8)
+--- Forum: Scripting Help (https://sampforum.blast.hk/forumdisplay.php?fid=12)
+--- Thread: player spectate killer (/showthread.php?tid=424087)



player spectate killer - Squirrel - 20.03.2013

I got this and I dont get it why isnt it working.

Basically if you get killed you should spectate the player that killed you (10 sec), but it wont work.


Код:
//Top of the script.
new Died[MAX_PLAYERS], KilledBy[MAX_PLAYERS];
forward EndDeathCam(playerid);

//OnPlayerConnect
Died[playerid] = -1;
KilledBy[playerid] = -1;

//OnPlayerDisconnect
Died[playerid] = 0;
KilledBy[playerid] = 0;

public OnPlayerDeath(playerid, killerid, reason)
{
    pInfo[killerid][Kills]++;
    pInfo[playerid][Deaths]++;
    
    Died[playerid] = 1;
    if(Died[playerid] == 1)
    {
        Died[playerid] = 0;
        if(KilledBy[playerid] != INVALID_PLAYER_ID)
        TogglePlayerSpectating(playerid, 1);
        PlayerSpectatePlayer(playerid, killerid);
        SendClientMessage(playerid, WHITE, "You have been killed, you are now spectating your killer.");
        SetTimerEx("EndDeathCam", 10000, 1, "i", playerid); // 10 seconds
    }
    else
    {
        TogglePlayerSpectating(playerid, 0);
    }
    return 1;
}

public EndDeathCam(playerid)
{
    TogglePlayerSpectating(playerid, 0);
    Died[playerid] = 0;
}



Re: player spectate killer - Misiur - 20.03.2013

pawn Код:
Died[playerid] = 1;
if(Died[playerid] == 1)
{
//(...)
}
else
{
//(...)
}
Question: does the else ever gets called?

pawn Код:
if(KilledBy[playerid] != INVALID_PLAYER_ID)
You have to use brackets to specify how many lines are affected by the condition.

pawn Код:
public OnPlayerDeath(playerid, killerid, reason)
{
    pInfo[killerid][Kills]++;
    pInfo[playerid][Deaths]++;
   
    Died[playerid] = 1;
    KilledBy[playerid] = killerid;
    TogglePlayerSpectating(playerid, 1);
    PlayerSpectatePlayer(playerid, killerid);
    SendClientMessage(playerid, WHITE, "You have been killed, you are now spectating your killer.");
    SetTimerEx("EndDeathCam", 10000, 1, "i", playerid); // 10 seconds
    return 1;
}



Re : player spectate killer - thegreathom - 20.03.2013

pawn Код:
#define FILTERSCRIPT
#include <a_samp>

forward spectateend(playerid);

public OnPlayerDeath(playerid,killerid,reason)
{
    if ( killerid != INVALID_PLAYER_ID )
    {
        new szGameTextStr[128], killerName[24];
       
        GetPlayerName(killerid,killerName,24);
        TogglePlayerSpectating( playerid, 1 );
        if (IsPlayerInAnyVehicle(killerid))
        {
        PlayerSpectateVehicle( playerid, GetPlayerVehicleID( killerid ) );
        }
        else
        {
        PlayerSpectatePlayer( playerid, killerid );
        }
        format( szGameTextStr, 128, "~w~~n~killCamera~n~~>~Killer: %s ( ID: %i )~<~", killerName, killerid );
        GameTextForPlayer( playerid, szGameTextStr, 10000, 5 );
        SetTimerEx( "spectateend", true, 10000, "i", playerid );
    }
    return 1;
}

public spectateend(playerid)
return TogglePlayerSpectating(playerid,0), SpawnPlayer(playerid);
// end.
Now, edit it like you want for your register system..


Re: player spectate killer - Squirrel - 20.03.2013

Oh thanks guys, I'll test it.


Re: player spectate killer - Squirrel - 20.03.2013

I tested it and the issue is that it spectates the player but constantly bugs the camera and you crash. It's like teleporting the camera like crazy.


It just teleports the camera like crazy. FOr example

Teleports Camera to KillerID
Teleports Camera to PlayerID
Teleports Camera to KillerID
Teleports Camera to PlayerID

every sec


This is my OnPlayerSpawn
Код:
public OnPlayerSpawn(playerid)
{
	
	TextDrawHideForPlayer(playerid, Textdraw0);
	TextDrawHideForPlayer(playerid, Textdraw1);
	
	new Random = random(sizeof(RandomSpawns));
    SetPlayerPos(playerid, RandomSpawns[Random][0], RandomSpawns[Random][1], RandomSpawns[Random][2]);
    SetPlayerFacingAngle(playerid, RandomSpawns[Random][3]);
    
	return 1;
}
I use this
Код:
#define FILTERSCRIPT
#include <a_samp>

forward spectateend(playerid);

public OnPlayerDeath(playerid,killerid,reason)
{
    if ( killerid != INVALID_PLAYER_ID )
    {
        new szGameTextStr[128], killerName[24];
        
        GetPlayerName(killerid,killerName,24);
        TogglePlayerSpectating( playerid, 1 );
        if (IsPlayerInAnyVehicle(killerid))
        {
        PlayerSpectateVehicle( playerid, GetPlayerVehicleID( killerid ) );
        }
        else
        {
        PlayerSpectatePlayer( playerid, killerid );
        }
        format( szGameTextStr, 128, "~w~~n~killCamera~n~~>~Killer: %s ( ID: %i )~<~", killerName, killerid );
        GameTextForPlayer( playerid, szGameTextStr, 10000, 5 );
        SetTimerEx( "spectateend", true, 10000, "i", playerid );
    }
    return 1;
}

public spectateend(playerid)
return TogglePlayerSpectating(playerid,0), SpawnPlayer(playerid);
// end.



Re : player spectate killer - thegreathom - 20.03.2013

It's work fine for me?


Re: player spectate killer - Squirrel - 20.03.2013

Hmmm...

It doesnt work for me normaly. It just switches the camera as crazy and at the end you crash :/

Can it be related to something else maybe?
Here is my full code
http://pastebin.com/1Z79zv7q


Re: player spectate killer - Patrick - 20.03.2013

Try this? just edited some code. give it a try if it works.

also im not sure if this caused the problem
as when the timer get called it repeats every 10 seconds. so i change the true --> false on code below. give it a try!
pawn Код:
SetTimerEx( "spectateend", true, 10000, "i", playerid );//means it repeats every 10 seconds
pawn Код:
public OnPlayerDeath(playerid,killerid,reason)
{
    if(killerid != INVALID_PLAYER_ID)
    {
        new szGameTextStr[128];
        new kvehicle =  GetPlayerVehicleID(killerid);
        new killerName[24]; GetPlayerName(killerid, killerName, sizeof killerName);
        //
        if(IsPlayerInAnyVehicle(killerid)) // = player is in vehicle
            return PlayerSpectateVehicle( playerid, kvehicle);
       
        if(!IsPlayerInAnyVehicle(killerid)) // = player is not in vehicle
            return PlayerSpectatePlayer( playerid, killerid );

        format( szGameTextStr, sizeof szGameTextStr, "~w~~n~killCamera~n~~>~Killer: %s ( ID: %i )~<~", killerName, killerid );
        GameTextForPlayer( playerid, szGameTextStr, 10000, 5);
        //
        TogglePlayerSpectating(playerid, 1);
        SetTimerEx( "spectateend", false, 10000, "i", playerid );
    }
    return 1;
}

forward spectateend(playerid);
public spectateend(playerid)
{
    TogglePlayerSpectating(playerid, 0)
    SpawnPlayer(playerid);
    return 1;
}



Re: player spectate killer - Squirrel - 20.03.2013

Actually I tried with changing the timer but didnt help at all