Код:
#include <a_samp>
#include <streamer>
#include <foreach>
#define MAX_DROP_ITEMS 500
#define COLOR_ACTION 0xFFC0CBFF
new sendername[MAX_PLAYER_NAME], DropObject[MAX_DROP_ITEMS];
enum dData
{
DropGunAmmount[2],
Float:DropGunPosX,
Float:DropGunPosY,
Float:DropGunPosZ,
DropGunVWorld,
DropGunInterior,
};
new DropInfo[MAX_DROP_ITEMS][dData];
new GunObjectIDs[200] ={
1575, 331, 333, 334, 335, 336, 337, 338, 339, 341, 321, 322, 323, 324, 325, 326, 342, 343, 344, -1, -1 , -1 ,
346, 347, 348, 349, 350, 351, 352, 353, 355, 356, 372, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367,
368, 369, 1575
};
stock GetGunObjectID(WeaponID)
{
if (WeaponID < 0 || WeaponID > 64)
{
return 1575;
}
return GunObjectIDs[WeaponID];
}
stock DropGun(playerid, GunID, GunAmmo, Float:X, Float:Y, Float:Z, world, interior)
{
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid,name,sizeof(name));
if(GunID != 0 && GunAmmo != 0)
{
for(new i = 0; i < sizeof(DropInfo); i++)
{
if(DropInfo[i][DropGunPosX] == 0.0 && DropInfo[i][DropGunPosY] == 0.0 && DropInfo[i][DropGunPosZ] == 0.0)
{
DropInfo[i][DropGunAmmount][0] = GunID;
DropInfo[i][DropGunAmmount][1] = GunAmmo;
DropInfo[i][DropGunPosX] = X;
DropInfo[i][DropGunPosY] = Y;
DropInfo[i][DropGunPosZ] = Z;
DropInfo[i][DropGunVWorld] = world;
DropInfo[i][DropGunInterior] = interior;
DropObject[i] = CreateDynamicObject(GetGunObjectID(GunID), X, Y, Z-1, 80.0, 0.0, 0.0, world);
return 1;
}
}
return 1;
}
return 1;
}
public OnPlayerDeath(playerid, killerid, reason)
{
new Float:X,Float:Y,Float:Z;
GetPlayerPos(playerid, X, Y, Z);
DropGun(playerid, GetPlayerWeapon(playerid),GetPlayerAmmo(playerid),X,Y,Z,GetPlayerVirtualWorld(playerid), GetPlayerInterior(playerid));
return 1;
}
public OnPlayerUpdate(playerid)
{
for(new i = 0; i < sizeof(DropInfo); i++)
{
if (IsPlayerInRangeOfPoint(playerid, 2.0,DropInfo[i][DropGunPosX],DropInfo[i][DropGunPosY],DropInfo[i][DropGunPosZ]))
{
if(GetPlayerVirtualWorld(playerid) == DropInfo[i][DropGunVWorld] && GetPlayerInterior(playerid) == DropInfo[i][DropGunVWorld])
{
new gunname[32], str[126];
GetPlayerName(playerid, sendername, sizeof(sendername));
GetWeaponName(DropInfo[i][DropGunAmmount][0],gunname,sizeof(gunname));
format(str,sizeof(str),"~b~Press Y to pick up the %s",gunname);
GameTextForPlayer(playerid,str,3000,3);
return 1;
}
}
}
return 1;
}
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
if(newkeys == KEY_YES)
{
for(new i = 0; i < sizeof(DropInfo); i++)
{
if (IsPlayerInRangeOfPoint(playerid, 2.0,DropInfo[i][DropGunPosX],DropInfo[i][DropGunPosY],DropInfo[i][DropGunPosZ]))
{
if(GetPlayerVirtualWorld(playerid) == DropInfo[i][DropGunVWorld] && GetPlayerInterior(playerid) == DropInfo[i][DropGunVWorld])
{
new string[256];
DestroyDynamicObject(DropObject[i]);
DropInfo[i][DropGunPosX] = 0.0;
DropInfo[i][DropGunPosY] = 0.0;
DropInfo[i][DropGunPosZ] = 0.0;
DropInfo[i][DropGunAmmount][0] = 0;
DropInfo[i][DropGunAmmount][1] = 0;
GivePlayerWeapon(playerid,DropInfo[i][DropGunAmmount][0],DropInfo[i][DropGunAmmount][1]);
format(string, sizeof(string), "{FFFFFF}* You have picked up an {FF0000}%s {FFFFFF}Ammo:{FF0000} %u.", DropInfo[i][DropGunAmmount][0], DropInfo[i][DropGunAmmount][1]);
SendClientMessage(playerid, -1, string);
return 1;
}
}
}
}
return 1;
}
A rather badly written script. Array with gun models with an arbitrary size even though you need at most 47 models, variables that are never used, OnPlayerUpdate range of point checking that kills performance, ... Why not pickups?
But to answer your original question: GetPlayerWeaponData in OnPlayerDeath. There is an example with a loop on the wiki.