Noticias:

Debes de estar registrado para poder ver el contenido indicado. Registrate o Conectate

Menú Principal

Weapon Drop (By Mabako)

Iniciado por Swarlog, Ene 30, 2023, 04:34 PM

Tema anterior - Siguiente tema

Swarlog

Información Adicional:

Como siempre, investigando encontre este script que me llamo mucho la atención. Se trata de un sistema de drop del arma cuando mueres. Va por tiempo y es configurable. Recomendado para servidores RP.

Código:

#include <a_samp>

#define MAX_DROP_AMOUNT -1 // special drop-limits like 500 ammo are possible; -1 = all ammo is dropped
#define MAX_DROP_LIFETIME 30 // after 30 seconds the pickup gets destroyed. Note: old pickups will be destroyed anyway.

#define WEAPON_SLOTS 13
#define INVALID_PICKUP -1
#define PICKUP_TYPE 19

forward DestroyPickupEx( p );

enum pickup
{
creation_time,
weapon,
ammo,
timer
}
new pickups [ MAX_PICKUPS ][ pickup ];
// Set any of those to -1 to disable dropping of that weapon
new weapons[] =
{
-1, // no fists
331, // - Brass Knuckles
333, // Golf Club
334, // Night Stick
335, // Knife
336, // baseball bat
337, // shovel
338, // pool cue
339, // katama
341, // chainsaw
321, // regular dildo
322, // white dildo
323, // Medium, white vibrator
324, // smaill, silver vibrator
325, // flowers
326, // cane
342, // grendade
343, // tear gas
344, // molotov
-1, // RPG rocket - we can't pick up those, do we oO
-1, // Heat-Seeking Rocket
-1, // Hydra rocket
346, // colt 45
347, // colt 45 + silencer
348, // deagle
349, // shotgun
350, // sawn-off
351, // spaz
352, // micro-uzi
353, // mp5
355, // ak47
356, // m4
372, // tec9
357, // country rifle
358, // sniper rifle
359, // rocket launcher
360, // heat-seeking rocket launcher
361, // flamethrower
362, // minigun
363, // sachtel charges
-1, // detonator
365, // spray can
366, // fire extinguisher
367, // camera
-1, // night-vision goggles
-1, // heat-vision goggles
371 // parachute
};

public OnFilterScriptInit( )
{
print(" ");
print("    Weapon Drop Script v1.0");
print("    by mabako - http://mabako.net/samp/");
print(" ");
}

public OnFilterScriptExit( )
{
print(" ");
print("    Weapon Drop Script unloaded!");
print(" ");
}

/*
public OnPlayerCommandText( playerid, cmdtext[] )
{
if( !strcmp(cmdtext,"/drop", true) )
{
    DropWeapons( playerid );
    ResetPlayerWeapons( playerid );
    return 1;
}
return 0;
}*/

public OnPlayerDeath( playerid, killerid, reason )
{
DropWeapons( playerid );
return 1;
}

DropWeapons( playerid )
{
new Float: px, Float: py, Float: pz;
new hour,minute,second;
new year, month,day;
gettime(hour, minute, second);
getdate(year, month, day);

GetPlayerPos( playerid, px, py, pz );

new weapon_slots[WEAPON_SLOTS + 1][2];
new used_weapon_slots;

for( new i = 0; i < WEAPON_SLOTS; i ++ )
{
GetPlayerWeaponData( playerid, i, weapon_slots[ i ][ 0 ], weapon_slots[ i ][ 1 ]);
if( i == 0 && weapon_slots[ i ][ 0 ] == 0 ) weapon_slots[ i ][ 1 ] = 0; // no fist...

if( weapon_slots[ i ][ 1 ] > 0 && weapon_slots[ i ][ 0 ] < sizeof( weapons ) && weapons[ weapon_slots[ i ][ 0 ] ] != -1 )
{
used_weapon_slots ++;
}
else
{
    weapon_slots[ i ][ 0 ] = 0;
    weapon_slots[ i ][ 1 ] = 0;
}
}
// Create the pickups
new used_weapon_slots2 = used_weapon_slots;
for( new i = 0; i < WEAPON_SLOTS; i ++ )
{
    if( weapon_slots[ i ][ 1 ] > 0 )
    {
new Float:angle = 360.0 - float(used_weapon_slots--) * ( 360.0 / float(used_weapon_slots2) );
// see... if there's a pickup we create by any chance

new p = CreatePickup( weapons[ weapon_slots[ i ][ 0 ] ], PICKUP_TYPE, px + floatsin(angle,degrees) * (used_weapon_slots2/2 + 1.0), py + floatcos(angle,degrees) * (used_weapon_slots2/2 + 1.0), pz );
if( p == INVALID_PICKUP )
{
new lowest_time;
new _id;
for( new j = 0; j < MAX_PICKUPS; j ++ )
{
if( pickups[ j ][ creation_time ] < lowest_time )
{
    lowest_time = pickups[ j ][ creation_time ];
    _id = j;
}
}

DestroyPickupEx( _id );
KillTimer( pickups[ _id ][ timer ] );

p = CreatePickup( weapons[ weapon_slots[ i ][ 0 ] ], PICKUP_TYPE, px + floatsin(angle,degrees) * (used_weapon_slots2/2 + 1.0), py + floatcos(angle,degrees) * (used_weapon_slots2/2 + 1.0), pz );
}
pickups[ p ][ creation_time ] = mktime(hour,minute,second,day,month,year);
pickups[ p ][ weapon ] = weapon_slots[ i ][ 0 ];
pickups[ p ][ ammo ] = weapon_slots[ i ][ 1 ];
#if MAX_DROP_AMOUNT != -1
    if( pickups[ p ][ ammo ] > MAX_DROP_AMOUNT )
    {
        pickups[ p ][ ammo ] = MAX_DROP_AMOUNT;
    }
    #endif
pickups[ p ][ timer ] = SetTimerEx("DestroyPickupEx", MAX_DROP_LIFETIME * 1000, 0, "i", p);
}
}
}


// by mabako :D
mktime(hour,minute,second,day,month,year) {
new timestamp;
timestamp = second;
timestamp += minute * 60;
timestamp += hour * 3600;

new days_of_month[12];
if(((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) {
days_of_month = {31,29,31,30,31,30,31,31,30,31,30,31}; // Schaltjahr
} else {
days_of_month = {31,28,31,30,31,30,31,31,30,31,30,31}; // keins
}
new days_this_year = 0;
days_this_year = day;
if(month > 1) { // No January Calculation, because its always the 0 past months
for(new i=0; i<month-1;i++) {
days_this_year += days_of_month[i];
}
}
timestamp += days_this_year * 86400;

for(new j=1970;j<year;j++) {
timestamp += 31536000;
if(((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) timestamp += 86400; // Schaltjahr + 1 Tag
}
return timestamp;
}

public DestroyPickupEx( p )
{
DestroyPickup( p );
pickups[ p ][ creation_time ] = 0;
pickups[ p ][ weapon ] = 0;
pickups[ p ][ ammo ] = 0;
}




public OnPlayerPickUpPickup( playerid, pickupid )
{
if( pickups[ pickupid ][ creation_time ] != 0 )
{
GivePlayerWeapon( playerid, pickups[ pickupid ][ weapon ], pickups[ pickupid ][ ammo ] );
}
return 1;
}