This is an example of easy player tracking with SHVector.
Code:
#pragma semicolon 1
#include <sourcemod>
#include <shvector>
// Vector Handles
new Handle:vecPlayers;
public Plugin:myinfo =
{
name = "Example Player Tracking",
author = "PimpinJuice",
description = "An example of easy player tracking using SHVector.",
version = "1.0.0",
url = "http://pimpinjuice.net/"
};
public OnPluginStart()
{
vecPlayers=SHVectorCreate(TYPE_CELL);
HookEvent("player_death",Event_PlayerDeath);
}
public GetClientVectorPosition(client)
{
for(new x=0;x<SHVectorSize_Cell(vecPlayers);x++)
{
new Handle:ply=SHVectorAt_Cell(vecPlayers,x);
new curClient=SHVectorAt_Cell(ply,0);
if(client==curClient)
return x;
}
return -1;
}
public Event_PlayerDeath(Handle:event, const String:name[], bool:dontBroadcast)
{
// This will give the killer 25 xp and if they get to 100 xp they level and their XP goes back to 0
if(GetEventInt(event,"userid")!=GetEventInt(event,"attacker")&&GetEventInt(event,"attacker")>0)
{
new attackerIndex=GetClientOfUserId(GetEventInt(event,"attacker"));
new vecPos=GetClientVectorPosition(attackerIndex);
if(vecPos!=-1)
{
new Handle:clientVecData=SHVectorAt_Cell(vecPlayers,vecPos);
new newXP=SHVectorAt_Cell(clientVecData,1)+25;
SHVectorSetAt_Cell(clientVecData,1,newXP);
if(newXP>=100)
{
SHVectorSetAt_Cell(clientVecData,1,0);
new newLevel=SHVectorAt_Cell(clientVecData,2)+1;
SHVectorSetAt_Cell(clientVecData,2,newLevel);
}
SHVectorSetAt_Cell(vecPlayers,vecPos,clientVecData);
}
}
}
public OnClientPutInServer(client)
{
if(client>0)
{
new Handle:newPlayer=SHVectorCreate(TYPE_CELL);
SHVectorInsert_Cell(newPlayer,ITER_BACK,client); // The first thing is client index
SHVectorInsert_Cell(newPlayer,ITER_BACK,0); // Place-holder for XP points
SHVectorInsert_Cell(newPlayer,ITER_BACK,0); // Place-holder for current level
SHVectorInsert_Cell(vecPlayers,ITER_BACK,newPlayer); // Put our new player at the end of the vecPlayers vector
}
}
public OnPluginEnd()
{
for(new x=0;x<SHVectorSize_Cell(vecPlayers);x++)
SHVectorFree_Cell(SHVectorAt_Cell(vecPlayers,x));
SHVectorFree_Cell(vecPlayers);
}
Basically, it is an example of an XP system for a plugin.
Hope you guys get good use out of it.
__________________