[FilterScript] Simple Sistema de HeadShot Mediante OnPlayerTakeDamage
#1

Simple Sistema de HeadShot Mediante OnPlayerTakeDamage
Nombre del autor: Otacon.
Tipo de script: filterscripts.
Descripciуn: Un Simple Sistema de HeadShot Mediante OnPlayerTakeDamage.
їHeadShot ?: Un Disparo Directo hacia la cabeza, Muerte directa.

pawn Код:
/*
    CREDITOS: OTACON
*/

#include <a_samp>
#include <zcmd>
#include <sscanf2>

#define ArmaHeadShot (34) //Sniper Rifle
#define COLOR_PURPLE 0xC2A2DAAA
new bool:ActivarHeadShot[MAX_PLAYERS]=false;
new bool:PlayerHeadShot[MAX_PLAYERS]=false;

COMMAND:headshot(playerid, params[]) {
    new string[128], name[MAX_PLAYER_NAME+1];
    GetPlayerName(playerid, name, sizeof(name));
    if(GetPlayerWeapon(issuerid) != ArmaHeadShot) return SendClientMessage(playerid, -1, "[!] Usted no Tiene el Arma con sistema headshot!");
    switch(ActivarHeadShot[playerid]) {
        case false: {
            ActivarHeadShot[playerid] = true;
            format(string, sizeof(string), "* %s activa el sistema headshot.", name);
            ProxDetector(30.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE);
        }
        case true: {
            ActivarHeadShot[playerid] = false;
            format(string, sizeof(string), "* %s desactiva el sistema headshot.", name);
            ProxDetector(30.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE);
        }
    }
    return 1;
}

public OnPlayerTakeDamage(playerid, issuerid, Float: amount, weaponid)
{
    if(issuerid != INVALID_PLAYER_ID) {
        if(ActivarHeadShot[issuerid] == true && GetPlayerWeapon(issuerid) == ArmaHeadShot && PlayerHeadShot[playerid] == false) {
            SetPlayerHealth(playerid, (0.0));
            PlayerHeadShot[playerid] = true;
            GameTextForPlayer(playerid, "HeadShot Realizado.", 3000, 1);
        }
    }
    return 1;
}

public OnPlayerDeath(playerid, killerid, reason)
{
    if(PlayerHeadShot[playerid] == true) {
        PlayerHeadShot[playerid] = false;
    }
    return 1;
}

forward ProxDetector(Float:radi, playerid, string[],col1,col2,col3,col4,col5);
public ProxDetector(Float:radi, playerid, string[],col1,col2,col3,col4,col5)
{
    if(IsPlayerConnected(playerid))
    {
        new Float:posx, Float:posy, Float:posz;
        new Float:oldposx, Float:oldposy, Float:oldposz;
        new Float:tempposx, Float:tempposy, Float:tempposz;
        GetPlayerPos(playerid, oldposx, oldposy, oldposz);
        for(new i = 0; i < MAX_PLAYERS; i++)
        {
            if(IsPlayerConnected(i) && (GetPlayerVirtualWorld(playerid) == GetPlayerVirtualWorld(i)))
            {
                GetPlayerPos(i, posx, posy, posz);
                tempposx = (oldposx -posx);
                tempposy = (oldposy -posy);
                tempposz = (oldposz -posz);
                if (((tempposx < radi/16) && (tempposx > -radi/16)) && ((tempposy < radi/16) && (tempposy > -radi/16)) && ((tempposz < radi/16) && (tempposz > -radi/16))) // If the player is within 16 meters
                {
                    SendClientMessage(i, col1, string);
                }
                else if (((tempposx < radi/8) && (tempposx > -radi/8)) && ((tempposy < radi/8) && (tempposy > -radi/8)) && ((tempposz < radi/8) && (tempposz > -radi/8))) // within 8 meters
                {
                    SendClientMessage(i, col2, string);
                }
                else if (((tempposx < radi/4) && (tempposx > -radi/4)) && ((tempposy < radi/4) && (tempposy > -radi/4)) && ((tempposz < radi/4) && (tempposz > -radi/4))) //4 meters
                {
                    SendClientMessage(i, col3, string);
                }
                else if (((tempposx < radi/2) && (tempposx > -radi/2)) && ((tempposy < radi/2) && (tempposy > -radi/2)) && ((tempposz < radi/2) && (tempposz > -radi/2))) //2 meters
                {
                    SendClientMessage(i, col4, string);
                }
                else if (((tempposx < radi) && (tempposx > -radi)) && ((tempposy < radi) && (tempposy > -radi)) && ((tempposz < radi) && (tempposz > -radi))) //1 meter
                {
                    SendClientMessage(i, col5, string);
                }
            }
            else
            {
                SendClientMessage(i, col1, string);
            }
        }
    }
    return 1;
}
/*
    CREDITOS: OTACON
*/
Reply
#2

Me fijй en el cуdigo y no entendн de quй manera detectas el headshot. Al menos yo, no vi vectores de cбmara ni algo que detecta la animaciуn de headshot.
Reply
#3

Quote:
Originally Posted by DeadSkyTkb
Посмотреть сообщение
Me fijй en el cуdigo y no entendн de quй manera detectas el headshot. Al menos yo, no vi vectores de cбmara ni algo que detecta la animaciуn de headshot.
Lo mismo opino, solo vi una variable que al estar activada y tener un sniper te mata al instante. Pero no es necesario que te disparen en la cabeza .__.
Reply
#4

Simple Sistema de HeadShot
Reply
#5

Quote:
Originally Posted by bytytus
Посмотреть сообщение
Simple Sistema de HeadShot
Si es simple, pero no un sistema de head shot.
Reply
#6

Quote:
Originally Posted by GROVE22
Посмотреть сообщение
Si es simple, pero no un sistema de head shot.
si lo es, si es simple LOL.
muere de una o no ? :P XD
Reply
#7

A lo que me refiero es que tu FS no detectarб el headshot, no lo bajй ni lo testeй IG, pero con ver el cуdigo me doy cuenta que cuando uno tome una sniper y le dispare a otro en cualquier parte del cuerpo, harб que le quede 0 de vida.

Al usar OnPlayerTakeDamage, es preferible que la vida no se le fije en 0, aprovechando que se usa esa callback, podrнas hacer que la vida le reste en 100, y sй porque lo digo, porque la sniper quita por defecto algo de 40, entonces quitarб 40 (la vida bajarб) y un segundo despuйs se le fijarб en 0.

Prбcticamente, en lugar de ser un sistema de headshot es un sistema de sniper "asesina". Sistema de headshot serб si le quita toda la vida al darle en la cabeza, no en otras partes.
Reply
#8

Quote:
Originally Posted by bytytus
Посмотреть сообщение
si lo es, si es simple LOL.
muere de una o no ? :P XD
Si muere de una, pero no es un sistema de head shot.
Head shot no significa que muere de una, significa que muere por un tiro en la cabeza.
Reply
#9

Coincidiendo con los demбs, esto es como un sistema de asesinato con 1 bala.
Reply
#10

Ajam, ok gracias.
Reply


Forum Jump:


Users browsing this thread: 3 Guest(s)