/*------------------------------------------------------------------------/*
======================================================
Sistema realista de reacciуn - Forum.SA-MP.com
======================================================
Sistema ъnicamente hecho por ediciуn del sistema de Fat Guy, el cual Right
editу para de ese sistema crear otro. Sistema ъnicamente hecho para Forum
SA-MP. Se prohibe el posteo del mismo en otras comunidades tales como:
Pawnoscripting, Espaсol Pawno donde robar crйditos estб de moda, Samp Script,
йtc. Solamente se postearбn por el autor del mismo, yo.
Agradecimientos especiales para Zume-Zero, EnzoMetlc, Shura, DesingMyCry,
Onfroi y especialmente a Fat Guy por el sistema de armas en el suelo,
por ideas, ayudas o funciones que ellos postearon en el foro oficial
de SA-MP, Forum SA-MP, no exactamente hay que contactar personalmente para
ayudar en la creaciуn de sistemas, con un aporte, duda o pedido todo vale.
El sistema consta en hacer detecciones mediante condiciones, llбmese If,
llбmese restricciуn, del cuerpo del usuario, lo cual aсade mбs restricciones
para el funcionamiento del mismo. Las detecciones son bбsicamente: Disparos
de balas que tratan de interactuar con las mismas para hacer un
sistema semi realista, ya que no todo puede ser totalmente real.
/*------------------------------------------------------------------------*/
//=================//
#include <a_samp>// by SA-MP
#include <streamer>// by Incognito
#include <zcmd>// by Zeex
#include <foreach>// by ******
//=================//
#define MAX_DROP_ITEMS 1000//Cambiar para modificar el nъmero de armas tiradas
#define COLOR_ACTION 0xFFC0CBFF//Color gay, rosa
//=================//
new string[128], sendername[MAX_PLAYER_NAME], DropObject[MAX_DROP_ITEMS];
//=================//
enum dData
{
DropGunAmmount[2],//ModelID & balas
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(" Sistema de reacciуn - Forum SA:MP - Right");
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)//Crйditos a Xalphox
{
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(" Sistema de reacciуn - Forum SA:MP Right");
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;
}
//=================//
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);
}
}
}
public OnPlayerTakeDamage(playerid, issuerid, Float: amount, weaponid, bodypart)
{
if(IsPlayerConnected(issuerid) && (bodypart == 5)) // Lee si le han dispara en el brazo izquierdo
{
SendClientMessage(playerid, COLOR_ACTION, "Estбs sangrando, te han disparado en tu brazo izquierdo y la reacciуn te hizo soltar tu arma");
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 tira su arma de golpe y esta cae en el suelo.", sendername);
SendLocalMessage(playerid, string, 10.0, COLOR_ACTION, COLOR_ACTION);
}
else
{
if(IsPlayerConnected(issuerid) && (bodypart == 6)) // Lee si le han disparado en el brazo derecho
{
new Float:X,Float:Y,Float:Z;
new GunID = GetPlayerWeapon(playerid);
new GunAmmo = GetPlayerAmmo(playerid);
SendClientMessage(playerid, COLOR_ACTION, "Estбs sangrando, te han disparado en tu brazo derecho y la reacciуn te hizo soltar tu arma");
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 tira su arma de golpe y esta cae en el suelo.", sendername);
SendLocalMessage(playerid, string, 10.0, COLOR_ACTION, COLOR_ACTION);
}
}
return 1;
}
static 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)
{
return (WeaponID < 0 || WeaponID > 64) ? (1575) : (GunObjectIDs[WeaponID]);
}
if(IsPlayerConnected(issuerid) && (bodypart == 5)) // Lee si le han dispara en el brazo izquierdo
{
SendClientMessage(playerid, COLOR_ACTION, "Estбs sangrando, te han disparado en tu brazo izquierdo y la reacciуn te hizo soltar tu arma");
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 tira su arma de golpe y esta cae en el suelo.", sendername);
SendLocalMessage(playerid, string, 10.0, COLOR_ACTION, COLOR_ACTION);
}
else
{
if(IsPlayerConnected(issuerid) && (bodypart == 6)) // Lee si le han disparado en el brazo derecho
{
new Float:X,Float:Y,Float:Z;
new GunID = GetPlayerWeapon(playerid);
new GunAmmo = GetPlayerAmmo(playerid);
SendClientMessage(playerid, COLOR_ACTION, "Estбs sangrando, te han disparado en tu brazo derecho y la reacciуn te hizo soltar tu arma");
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 tira su arma de golpe y esta cae en el suelo.", sendername);
SendLocalMessage(playerid, string, 10.0, COLOR_ACTION, COLOR_ACTION);
}
}
if(IsPlayerConnected(issuerid) && (bodypart == 5 || bodypart == 6))
{
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 tira su arma de golpe y esta cae en el suelo.", sendername);
SendLocalMessage(playerid, string, 10.0, COLOR_ACTION, COLOR_ACTION);
format(string, sizeof(string), "Estбs sangrando, te han disparado en tu brazo %s y la reacciуn te hizo soltar tu arma", (bodypart == 5)?("izquierdo"):("derecho"));
SendClientMessage(playerid, COLOR_ACTION, string);
}
Estб bien, una vez lo hice pero mбs optimizado.
Una cosa, por mбs que digas que es para FS no faltarбn los que empiecen a publicarlos en varios lugares, hasta en lugares donde a los administradores les da igual esto de los derechos con tal de que ingresen nuevos aportes en ese tipo de comunidades. Y, bueno, no creo que esto sea penalizado (refiriйndome a lo de publicar trabajos en los cuales, el creador de йste prohiba su publicaciуn), por mбs de que estй mal, pero bueno, es asн. |