13.01.2013, 19:09
I have a weapon saving system, all works perfectly except one thing, when I die and spawn back an object spawns next to me in the air, either a cigar or an empty bottle. I can't seem to find out why, here is the script:
pawn Код:
#include <a_samp>
#include <dini> // Programmed with Dini.inc version 1.5.1
/*
Weapons Saving System by Phyro - 2009
Searching some technical SA-MP Tools ? visit : http://www.phyro.co.nr
Email : mottiokla@gmail.com
*/
#define PATH "Weapons" // Folder where players data saved
#define COLOR_GREEN 0x33AA33AA
forward Health();
new bool:AlreadyGiveWeapons[MAX_PLAYERS];
new Death[MAX_PLAYERS];
public OnFilterScriptInit()
{
return 1;
}
public OnFilterScriptExit()
{
return 1;
}
public OnPlayerConnect(playerid)
{
AlreadyGiveWeapons[playerid] = false;
Death[playerid] = 0;
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
SaveWeaponsToFile(playerid);
return 1;
}
public Health()
{
for(new i; i<MAX_PLAYERS; i++)
{
{
new Float:health;
GetPlayerHealth(i, health);
if(health < 20)
{
SaveWeaponsToFile(i);
}
}
}
return 1;
}
SaveWeaponsToFile(playerid)
{
new i, path[50], string[128], weaponid, ammo;
path = GetPlayerFormattedName(playerid);
if (!dini_Exists(path)) dini_Create(path);
for (i=0; i<13; i++)
{
GetPlayerWeaponData(playerid,i,weaponid,ammo);
format(string,sizeof(string),"Weapon: %d",i);
dini_IntSet(path,string,weaponid);
format(string,sizeof(string),"AmmoID: %d",i);
dini_IntSet(path,string,ammo == 65535 ? 0 : ammo);
}
}
forward LoadWeaponsToFile(playerid);
public LoadWeaponsToFile(playerid)
{
new i, path[50], string[128], weaponid, ammo;
path = GetPlayerFormattedName(playerid);
ResetPlayerWeapons(playerid);
for (i=0; i<13; i++)
{
GetPlayerWeaponData(playerid,i,weaponid,ammo);
format(string,sizeof(string),"Weapon: %d",i);
weaponid = dini_Int(path,string);
format(string,sizeof(string),"AmmoID: %d",i);
ammo = dini_Int(path,string);
GivePlayerWeapon(playerid,weaponid,ammo);
AlreadyGiveWeapons[playerid] = true;
}
}
GetPlayerFormattedName(playerid)
{
new name[24], full[50];
GetPlayerName(playerid,name,sizeof(name));
format(full,sizeof(full),"%s/%s.txt",PATH,name);
return full;
}
public OnPlayerSpawn(playerid)
{
if(Death[playerid] == 0)
{
if(!AlreadyGiveWeapons[playerid])
{
SetTimerEx("LoadWeaponsToFile",250,false,"i",playerid);
return 1;
}
}
return 1;
}
public OnPlayerDeath(playerid, killerid, reason)
{
Death[playerid] = 1;
ResetPlayerWeapons(playerid);
}