Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*======================================================================================================*
- * This /sendweapon Filterscript is made by Jeffry! *
- * *
- * *
- * Made in April 2010. *
- * *
- * Your Rights: *
- * *
- * -You are allowed to modify this Filterscript, aslong as you DO NOT remove credits or re-upload it. *
- * *
- * -You are NOT allowed to re-upload this Filterscript. *
- * -You are NOT allowed to claim this as your own. *
- * -You are NOT allowed to remove any credits. *
- * *
- * Thank you. *
- * Have fun. I would be happy if you give me /credits. :D *
- * *
- *=======================================================================================================*/
- //========================================================================================================================
- //-------------------------Definitions that you may change----------------------------------------------------------------
- //------------------------------------------------------------------------------------------------------------------------
- #define WEAPON_TAX_BILL 10000 //Thats the amount you have to pay, when you send a weapon.
- #define MAX_REFUSE_TIME 30 // Thats the time in seconds, which allows the receiver to do /weaponsback.
- #define WAIT_TIME 30 // Thats the time in seconds the sender needs to wait to send another weapon.
- new ForbiddenWeapons[]= { 44, 45, 38 }; // Here you add the weapon IDs that you do not want to be sent.
- //------------------------------------------------------------------------------------------------------------------------
- //-------------------------End of the Definitions-------------------------------------------------------------------------
- //========================================================================================================================
- #include <a_samp>
- //DCMD: Credits to DracoBlue.
- #define dcmd(%1,%2,%3) if ((strcmp((%3)[1], #%1, true, (%2)) == 0) && ((((%3)[(%2) + 1] == 0) && (dcmd_%1(playerid, "")))||(((%3)[(%2) + 1] == 32) && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1
- // The colors.
- #define red 0xFF0000AA
- #define green 0x33FF33AA
- #define dgreen 0x009000FF
- new savedweapon[MAX_PLAYERS][13];
- new savedammo[MAX_PLAYERS][13];
- new Receiver[MAX_PLAYERS];
- new Sender[MAX_PLAYERS];
- new ReceivedWeapon[MAX_PLAYERS][2];
- new Sended[MAX_PLAYERS];
- public OnFilterScriptInit()
- {
- print("\n--------------------------------------");
- print(" [FS] /sendweapon FilterScript by Jeffry");
- print("--------------------------------------\n");
- return 1;
- }
- public OnPlayerConnect(playerid)
- {
- Receiver[playerid]=0;
- Sender[playerid]=-1;
- ReceivedWeapon[playerid][0]=0;
- ReceivedWeapon[playerid][1]=0;
- Sended[playerid]=0;
- return 1;
- }
- public OnPlayerDisconnect(playerid, reason)
- {
- if(Receiver[playerid]!=0) KillTimer(Receiver[playerid]);
- for(new i=0; i<MAX_PLAYERS; i++) if(Sender[i]==playerid) Sender[i]=-1;
- return 1;
- }
- public OnPlayerCommandText(playerid, cmdtext[])
- {
- dcmd(sendweapon, 10, cmdtext);
- dcmd(weaponsback, 11, cmdtext);
- return 0;
- }
- dcmd_sendweapon(playerid,params[])
- {
- if(GetPlayerMoney(playerid) < WEAPON_TAX_BILL)
- {
- new msg[128];
- format(msg, 128, "ERROR: You need $%d to send a weapon!", WEAPON_TAX_BILL);
- return SendClientMessage(playerid, red, msg);
- }
- if(Sended[playerid] != 0)
- {
- new msg[128];
- format(msg, 128, "ERROR: You can only send a weapon every %d seconds!", WAIT_TIME);
- return SendClientMessage(playerid, red, msg);
- }
- new string[156], tmp[256], tmp2[256], weaponname[50], Index; tmp = strtok(params,Index); tmp2 = strtok(params,Index);
- if(!strlen(tmp) || !strlen(tmp2)) return SendClientMessage(playerid,red,"USAGE: /sendweapon [PlayerID] [Ammo]");
- new player1, ammo, weapon, weapon1, slot; player1=strval(tmp); ammo=strval(tmp2);
- if(!IsPlayerConnected(player1)) return SendClientMessage(playerid,red,"ERROR: This player is not connected!");
- if(playerid==player1) return SendClientMessage(playerid,red,"ERROR: You can't give yourself a weapon!");
- if(ammo<1) return SendClientMessage(playerid,red,"ERROR: Invalid ammo amount!");
- weapon=GetPlayerWeapon(playerid); weapon1=GetPlayerWeapon(player1);
- if(weapon==0) return SendClientMessage(playerid,red,"ERROR: You don't have a weapon!");
- for(new i=0; i<sizeof(ForbiddenWeapons); i++) if(weapon==ForbiddenWeapons[i]) return SendClientMessage(playerid,red,"ERROR: You are not allowed to send this weapon!");
- SaveWeapons(playerid); SaveWeapons(player1);
- slot=GetWeaponSlot(weapon);
- if(savedammo[playerid][slot]<ammo) return SendClientMessage(playerid,red,"ERROR: You don't have this amount of ammo!");
- savedammo[playerid][slot]-=ammo;
- ResetPlayerWeapons(playerid); ResetPlayerWeapons(player1);
- GetWeaponName(weapon, weaponname, 50);
- format(string, 156, "[Weapon] %s (ID:%d) has sent you a %s (ID:%d) with %d ammo. Type /weaponsback if you don't want it.", pName(playerid), playerid, weaponname, weapon, ammo);
- SendClientMessage(player1, green, string);
- format(string, 156, "[Weapon] You have sent %s (ID:%d) a %s (ID:%d) with %d ammo.", pName(player1), player1, weaponname, weapon, ammo);
- SendClientMessage(playerid, green, string);
- GivePlayerMoney(playerid, -WEAPON_TAX_BILL);
- GiveWeapons(playerid); GiveWeapons(player1);
- GivePlayerWeapon(player1, weapon, ammo);
- GivePlayerWeapon(player1, weapon1, 0);
- GivePlayerWeapon(playerid, weapon, 0);
- Sender[player1]=playerid; ReceivedWeapon[player1][0]=weapon; ReceivedWeapon[player1][1]=ammo;
- if(Receiver[playerid]!=0) KillTimer(Receiver[playerid]);
- Receiver[player1]=SetTimerEx("OldWeaponsBack", MAX_REFUSE_TIME*1000, 0, "d", player1);
- new time=WAIT_TIME;
- if(time!=0) Sended[playerid]=SetTimerEx("CanSendAgain", time*1000, 0, "d", playerid);
- return 1;
- }
- dcmd_weaponsback(playerid,params[])
- {
- #pragma unused params
- if(Receiver[playerid]!=0)
- {
- new weapon;
- weapon=GetPlayerWeapon(playerid);
- ResetPlayerWeapons(playerid);
- GiveWeapons(playerid);
- GivePlayerWeapon(playerid, weapon, 0);
- if(Sender[playerid]!=-1)
- {
- new weap, wname[50], string[128]; weap=GetPlayerWeapon(Sender[playerid]);
- GetWeaponName(ReceivedWeapon[playerid][0], wname, 50);
- ResetPlayerWeapons(Sender[playerid]);
- GiveWeapons(Sender[playerid]);
- GivePlayerWeapon(Sender[playerid], ReceivedWeapon[playerid][0], ReceivedWeapon[playerid][1]);
- GivePlayerWeapon(Sender[playerid], weap, 0);
- format(string, 128, "[Weapon] %s (ID:%d) has refused your weapon and you got it back (%s (ID:%d) with %d ammo) .", pName(playerid), playerid, wname, ReceivedWeapon[playerid][0], ReceivedWeapon[playerid][1]);
- SendClientMessage(Sender[playerid], dgreen, string);
- }
- Receiver[playerid]=0; KillTimer(Receiver[playerid]);
- SendClientMessage(playerid, dgreen, "[Weapon] You have you old weapons back!");
- }
- else
- {
- new string[128];
- format(string, 128, "ERROR: You don't have received any weapons in the last %d seconds!", MAX_REFUSE_TIME);
- SendClientMessage(playerid,red,string);
- }
- return 1;
- }
- forward SaveWeapons(playerid);
- public SaveWeapons(playerid)
- {
- for(new i=0; i<13; i++)
- {
- savedweapon[playerid][i]=0; savedammo[playerid][i]=0;
- }
- for(new i=0; i<13; i++) GetPlayerWeaponData(playerid, i, savedweapon[playerid][i], savedammo[playerid][i]);
- return 1;
- }
- forward GiveWeapons(playerid);
- public GiveWeapons(playerid)
- {
- for(new i=0; i<13; i++) GivePlayerWeapon(playerid, savedweapon[playerid][i], savedammo[playerid][i]);
- return 1;
- }
- forward OldWeaponsBack(playerid);
- public OldWeaponsBack(playerid)
- {
- Receiver[playerid]=0;
- return 1;
- }
- forward CanSendAgain(playerid);
- public CanSendAgain(playerid)
- {
- Sended[playerid]=0;
- return 1;
- }
- stock pName(playerid)
- {
- new name[MAX_PLAYER_NAME];
- GetPlayerName(playerid, name, sizeof(name));
- return name;
- }
- stock GetWeaponSlot(weapon)
- {
- switch(weapon)
- {
- case 0,1: return 0;
- case 2..9: return 1;
- case 22..24: return 2;
- case 25..27: return 3;
- case 28,29,32: return 4;
- case 30,31: return 5;
- case 33,34: return 6;
- case 35..38: return 7;
- case 16..18,39: return 8;
- case 41..43: return 9;
- case 10..15: return 10;
- case 44..46: return 11;
- case 40: return 12;
- default: return -1;
- }
- return -1;
- }
- //strtok
- strtok(const string[], &index)
- {
- new length = strlen(string);
- while ((index < length) && (string[index] <= ' '))
- {
- index++;
- }
- new offset = index;
- new result[20];
- while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
- {
- result[index - offset] = string[index];
- index++;
- }
- result[index - offset] = EOS;
- return result;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement