Grabgun Script Problem
#1

Код:
#include <a_samp>
#include <streamer>
#include <zcmd>
#include <foreach>

#define MAX_DROP_ITEMS 50

#define COLOR_PURPLE 0xC2A2DAAA
#define COLOR_WHITE 0xFFFFFFAA

new string[128], 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
};

public OnFilterScriptInit()
{
	print("\n--------------------------------------");
	print("Leavegun and grabgun");
	print("--------------------------------------\n");
	return 1;
}

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;
}

stock RemovePlayerWeapon(playerid, weaponid)
{
    if(!IsPlayerConnected(playerid) || weaponid < 0 || weaponid > 50)
        return;
    new saveweapon[13], saveammo[13];
    for(new slot = 0; slot < 13; slot++)
        GetPlayerWeaponData(playerid, slot, saveweapon[slot], saveammo[slot]);
    ResetPlayerWeapons(playerid);
    for(new slot; slot < 13; slot++)
    {
        if(saveweapon[slot] == weaponid || saveammo[slot] == 0)
            continue;
        GivePlayerWeapon(playerid, saveweapon[slot], saveammo[slot]);
    }

    GivePlayerWeapon(playerid, 0, 1);

}

public OnFilterScriptExit()
{
	print("Leavegun and grabgun");
	return 1;
}

command(leavegun, playerid, params[])
{
	new Float:X,Float:Y,Float:Z;
 	new GunID = GetPlayerWeapon(playerid);
    new GunAmmo = GetPlayerAmmo(playerid);
 	GetPlayerName(playerid, sendername, sizeof(sendername));
    GetPlayerPos(playerid, X, Y, Z);
    RemovePlayerWeapon(playerid, GunID);
 	DropGun(playerid, GunID,GunAmmo,X,Y,Z,GetPlayerVirtualWorld(playerid),GetPlayerInterior(playerid));
 	format(string, sizeof(string), "* %s left their weapon on the ground.", sendername);
   	SendLocalMessage(playerid, string, 10.0, COLOR_PURPLE, COLOR_PURPLE);
   	SendClientMessage(playerid, COLOR_WHITE, "/grabgun to get it back.");
 	return 1;
}   
	
command(grabgun, playerid, params[])
{
	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])
			{
   				GetPlayerName(playerid, sendername, sizeof(sendername));
         		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;
				GetPlayerName(playerid, sendername, sizeof(sendername));
				DestroyDynamicObject(DropObject[i]);
				GivePlayerWeapon(playerid,DropInfo[i][DropGunAmmount][0],DropInfo[i][DropGunAmmount][1]);
				format(string, sizeof(string), "* %s picks up the weapon from the ground.", sendername);
				SendLocalMessage(playerid, string, 10.0, COLOR_PURPLE, COLOR_PURPLE);
		    	return 1;
			}
		}
	}
	return 1;
}

stock SendLocalMessage(playerid, msg[], Float:MessageRange, Range1color, Range2color)
{
	new Float: PlayerX, Float: PlayerY, Float: PlayerZ;
	GetPlayerPos(playerid, PlayerX, PlayerY, PlayerZ);
	foreach (Player, i)
	{
		if(IsPlayerInRangeOfPoint(i, MessageRange, PlayerX, PlayerY,PlayerZ))
		{
		    SendClientMessage(i, Range1color, msg);
		}
		else if(IsPlayerInRangeOfPoint(i, MessageRange/2.0, PlayerX, PlayerY,PlayerZ))
		{
		    SendClientMessage(i, Range2color, msg);
		}
	}
}
This is a FS and here is the codes and my problem is I can drop my gun on the ground and also I can write /grabgun to get it back but I can't get it. When I wrote command the weapon is gone but not in my hands.
Reply
#2

Код:
command(grabgun, playerid, params[])
{
	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])
			{
   				GetPlayerName(playerid, sendername, sizeof(sendername));
         		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;
				GetPlayerName(playerid, sendername, sizeof(sendername));
				//DestroyDynamicObject(DropObject[i]);
				GivePlayerWeapon(playerid,DropInfo[i][DropGunAmmount][0],DropInfo[i][DropGunAmmount][1]);
				format(string, sizeof(string), "* %s picks up the weapon from the ground.", sendername);
				SendLocalMessage(playerid, string, 10.0, COLOR_PURPLE, COLOR_PURPLE);
		    	return 1;
			}
		}
	}
	return 1;
}
Since it resets the Weapon Id and Weapon Armour to 0 before the player grabs the gun, it doesn't give the player the weapon.
Reply
#3

Quote:
Originally Posted by UFF
Посмотреть сообщение
Код:
command(grabgun, playerid, params[])
{
	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])
			{
   				GetPlayerName(playerid, sendername, sizeof(sendername));
         		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;
				GetPlayerName(playerid, sendername, sizeof(sendername));
				//DestroyDynamicObject(DropObject[i]);
				GivePlayerWeapon(playerid,DropInfo[i][DropGunAmmount][0],DropInfo[i][DropGunAmmount][1]);
				format(string, sizeof(string), "* %s picks up the weapon from the ground.", sendername);
				SendLocalMessage(playerid, string, 10.0, COLOR_PURPLE, COLOR_PURPLE);
		    	return 1;
			}
		}
	}
	return 1;
}
Since it resets the Weapon Id and Weapon Armour to 0 before the player grabs the gun, it doesn't give the player the weapon.
Thank you for your reply. Can you fix it for me please?
Reply
#4

Quote:
Originally Posted by RudeWorld
Посмотреть сообщение
Thank you for your reply. Can you fix it for me please?
Try the command i gave you above.
Reply
#5

Quote:
Originally Posted by UFF
Посмотреть сообщение
Try the command i gave you above.
Thank you so much.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)