Help me with weapon drop [+Rep]
#1

Hi there!!
i am using Dropgun system by PeteShag in my gamemode
i edited it a little to my needs

but i dont know how to drop all the weapon that player has on death
help me with droping all the guns player had on death

please help me

if u find any wrongs in the code please help me with them

Thanks in advance




Код:
#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;
}
Reply
#2

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.
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)