[Aporte] Sistema de muerte(Básico)

Aprende lo que no sabes de este lenguaje y encuentra herramientas y códigos útiles.

Moderador: Ayudantes

Reglas del Foro
  • Si tu código es corto, no crees un tema nuevo para liberarlo, publica un mensaje en el tema [Funciones] ¡Publica tu código aquí!.
  • Si creas una guía, debes explicar el código claramente. Evita poner la explicación en forma de comentarios dentro del mismo y no olvides utilizar el BBCode correspondiente: [Pawn]Código aquí[/Pawn].
  • No postear códigos sin probar. Publicar códigos con errores (que impidan compilar el script para el cual está destinado) en este apartado es motivo de sanción.
  • Si tu código necesita plugins, includes u otros códigos adicionales para funcionar, debes mencionarlo en el mensaje.
  • Si has utilizado códigos de otros autores, recuerda colocar los créditos correspondientes. (El plagio es motivo de sanción).
  • Si tu aporte es para un GameMode en específico, debes publicar el tema en el apartado "Guías y Aportes para GameModes específicos".
Responder
Avatar de Usuario
MattHudson
Moderador Global
Moderador Global
Mensajes: 1668
Registrado: 31 Oct 2015 18:16
Ubicación: Argentina, Buenos Aires, San Miguel.
Contactar:
Reputación: 89

14 Ene 2017 15:44

Aporte: Sistema de muerte de jugadores.
Código de nivel: Básico.
Tiempo de realización: Me confié y no me alcanzaron los dedos para contar, así que perdí la cuenta, habrán sido 10 o 15 minutos.
Notas: No esta testeado el comando de /reanimar ya que no tengo amigos :(. Se puede optimizar mucho mas. Tiene adjuntado el sistema de cadaveres realizado por EdinsonWalker.
Errores/Bugs: El GameText mostrado por la función ejecutada por un timer, denominada "TimerMuerte", no se borra tras haber revivido usando /reanimar o /reaparecer, se puede arreglar borrando el timer que muestra el gametext y poniendo un mensaje o algo cuando el jugador spawnea muerto.
¿Que fue lo que mas tiempo me tomo?: Subir el video... maldita Telefónica("""Compania""" de Internet)´

Vídeo

Includes usados:
Spoiler:
 Codigo Pawno:
1
2
3
4

#include <a_samp>
#include <a_actor>
#include <zcmd> //Creditos: Zeex.
#include <sscanf2> //Creditos: Y_Less, Emmet_, y todos los que trabajaron en esto...
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 4
Codigo:
Spoiler:
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213

#include <a_samp>
#include <a_actor>
#include <zcmd> //Creditos: Zeex.
#include <sscanf2> //Creditos: Y_Less, Emmet_, y todos los que trabajaron en esto...

enum MuerteP
{
    ActorMuerto,//Edinson Walker.
    Float: MuertoX,//Edinson Walker.
    Float: MuertoY,//Edinson Walker.
    Float: MuertoZ,//Edinson Walker.
    Float: MuertoR,//Edinson Walker.
    Muertoint,//Edinson Walker.
    Muertovw,//Edinson Walker.
    Muertoskin,//Edinson Walker.
    TimerMuriendo,
    Float: CoorMuertoX,
    Float: CoorMuertoY,
    Float: CoorMuertoZ,
    bool: YaPuedoRevivir,
    bool: Muerto,
    EstoyMuriendo
}
new InfoDeath[MAX_PLAYERS][MuerteP];

public OnPlayerConnect(playerid)
{
    InfoDeath[playerid][YaPuedoRevivir] = false;
    InfoDeath[playerid][ActorMuerto] = -1;
    InfoDeath[playerid][Muerto] = false;
    return 1;
}

public OnPlayerSpawn(playerid)
{
    if(InfoDeath[playerid][Muerto] == true)
    {
        SetPlayerPos(playerid, InfoDeath[playerid][CoorMuertoX], InfoDeath[playerid][CoorMuertoY], InfoDeath[playerid][CoorMuertoZ]);
        InfoDeath[playerid][TimerMuriendo] = SetTimerEx("TimerMuerte", 1000, true, "i", playerid);
        InfoDeath[playerid][EstoyMuriendo] = SetTimerEx("EstoyVivo", 60000, false,"i",playerid);
        SetTimerEx("NoTeMoristeAun", 900000, false,"i",playerid);
        ApplyAnimation(playerid, "CRACK", "crckdeth2", 4.0, 1, 0, 0, 0, 0, 1);
        GameTextForPlayer(playerid, "~y~Estas herido~n~~w~Utiliza ~r~/reaparecer", 5000, 3);
        SetPlayerSkin(playerid, InfoDeath[playerid][MuertoSkin]);
    }
    return 1;
}

public OnPlayerDisconnect(playerid)
{
    if(InfoDeath[playerid][ActorMuerto] != -1)
    {
        BorrarActor(playerid);
    }
    return 1;
}

public OnPlayerDeath(playerid, killerid, reason)
{
    GetPlayerPos(playerid, InfoDeath[playerid][CoorMuertoX], InfoDeath[playerid][CoorMuertoY], InfoDeath[playerid][CoorMuertoZ]);
    InfoDeath[playerid][Muerto] = true;
    return 1;
}

CMD:reaparecer(playerid,params[])
{
    if(InfoDeath[playerid][Muerto] == true)
    {
        if(InfoDeath[playerid][YaPuedoRevivir] == true)
        {
            ResetPlayerWeapons(playerid);
            SendClientMessage(playerid, 0xFF0000FF, "Perdiste la esperanza y caiste inconsciente, se te envió de inmediato al hospital.");
            SetPlayerPos(playerid, 2032.3669, -1416.0138, 16.9922);
            SetPlayerFacingAngle(playerid, 135.8277);
            InfoDeath[playerid][Muerto] = false;
            InfoDeath[playerid][ActorMuerto] = playerid;
            GetPlayerPos(playerid, InfoDeath[playerid][MuertoX], InfoDeath[playerid][MuertoY], InfoDeath[playerid][MuertoZ]);
            GetPlayerFacingAngle(playerid, InfoDeath[playerid][MuertoR]);
            InfoDeath[playerid][Muertoint] = GetPlayerInterior(playerid);
            InfoDeath[playerid][Muertovw] = GetPlayerVirtualWorld(playerid);
            InfoDeath[playerid][Muertoskin] = GetPlayerSkin(playerid);
            InfoDeath[playerid][ActorMuerto] = CreateActor(InfoDeath[playerid][Muertoskin], InfoDeath[playerid][MuertoX], InfoDeath[playerid][MuertoY], InfoDeath[playerid][MuertoZ], InfoDeath[playerid][MuertoR]);
            ApplyActorAnimation(InfoDeath[playerid][ActorMuerto], "PED", "FLOOR_hit_f", 4.1, 0, 1, 1, 1, 1); //
            SetTimerEx("BorrarActor", 60000, false, "i", playerid);
            return 1;
        }
        else SendClientMessage(playerid, -1, "Debes esperar 60 segundos para poder usar este comando luego de morir.");
    }
    else SendClientMessage(playerid, -1, "* No estás apunto de morir, no puedes hacer esto ahora!");
    return 1;
}

CMD:borrarcadaver(playerid, params[]) {
    new id;
    if(IsPlayerAdmin(playerid)) return SendClientMessage(playerid, 0xFF0000FF, "No eres administrador");
    if (sscanf(params, "d", id)) return SendClientMessage(playerid, -1, "CMD: /borrarcadaver [id jugador]");
    if (InfoDeath[id][ActorMuerto] == -1) return SendClientMessage(playerid, -1, "* Ese jugador no tiene ningún cadaver.");
    DestroyActor(InfoDeath[id][ActorMuerto]);
    InfoDeath[id][ActorMuerto] = -1;
    return 1;
}

CMD:reanimar(playerid, params[])
{
    if(sscanf(params, "u", params[0]))  return SendClientMessage(playerid, -1, "USO: /reanimar [ID]");
    if(!IsPlayerConnected(params[0]))    return SendClientMessage(playerid, 0xFF0000FF,"* ID inválida.");
    if(playerid == params[0])    return SendClientMessage(playerid, 0xFF0000FF,"* No te puedes reanimar a tí mismo.");
    if(!ProxDetectorS(3.0, playerid, params[0]))    return SendClientMessage(playerid, 0xFF0000FF,"* Debes estar más cerca de él.");
    if(IsPlayerInAnyVehicle(playerid))    return SendClientMessage(playerid, 0xFF0000FF, "* No puedes reanimar a alguien desde un vehículo.");
    if(InfoDeath[params[0]][Muerto] == false)    return SendClientMessage(playerid, 0xFF0000FF, "* Esta persona no necesita ser reanimada.");
    InfoDeath[params[0]][Muerto] = false;
    SetPlayerHealth(params[0], 50);
    ApplyAnimation(playerid,"MEDIC","CPR",4.1,0,0,0,0,0,0);
    ApplyAnimation(params[0],"CRACK","crckidle2",4.1,0,0,0,0,0,0);
    new string1[50+(MAX_PLAYER_NAME*2)];
    new Nombre[MAX_PLAYER_NAME], Nombre2[MAX_PLAYER_NAME];
    GetPlayerName(playerid, Nombre, sizeof(Nombre));
    GetPlayerName(params[0], Nombre2, sizeof(Nombre2));
    format(string1, sizeof(string1), "* %s ha reanimado a %s mediante primeros auxilios.", Nombre, Nombre2);
    ProxDetector(20.0, playerid, string1, 0xC2A2DAAA, 0xC2A2DAAA, 0xC2A2DAAA, 0xC2A2DAAA, 0xC2A2DAAA);
    new string2[18+MAX_PLAYER_NAME];
    format(string2, sizeof(string1), "* Has reanimado a %s.", Nombre2);
    SendClientMessage(playerid, -1, string2);
    SendClientMessage(params[0], -1, "Te han reanimado.");
    return 1;
}

forward TimerMuerte(playerid);
public TimerMuerte(playerid)
{
    if(InfoDeath[playerid][Muerto] == true)
    {
        GameTextForPlayer(playerid, "~y~Estas herido~n~~w~Utiliza ~r~/reaparecer", 5000, 3);
    }
    else
    {
        KillTimer(InfoDeath[playerid][TimerMuriendo]);
    }
}

forward EstoyVivo(playerid);
public EstoyVivo(playerid)
{
    InfoDeath[playerid][YaPuedoRevivir] = true;
}

forward NoTeMoristeAun(playerid);
public NoTeMoristeAun(playerid)
{
    ResetPlayerWeapons(playerid);
    SendClientMessage(playerid, 0xFF0000FF, "Perdiste la esperanza y caiste inconsciente, se te envió de inmediato al hospital.");
    SetPlayerPos(playerid, 2032.3669, -1416.0138, 16.9922);
    SetPlayerFacingAngle(playerid, 135.8277);
    InfoDeath[playerid][Muerto] = false;
    InfoDeath[playerid][ActorMuerto] = playerid;
    GetPlayerPos(playerid, InfoDeath[playerid][MuertoX], InfoDeath[playerid][MuertoY], InfoDeath[playerid][MuertoZ]);
    GetPlayerFacingAngle(playerid, InfoDeath[playerid][MuertoR]);
    InfoDeath[playerid][Muertoint] = GetPlayerInterior(playerid);
    InfoDeath[playerid][Muertovw] = GetPlayerVirtualWorld(playerid);
    InfoDeath[playerid][Muertoskin] = GetPlayerSkin(playerid);
    InfoDeath[playerid][ActorMuerto] = CreateActor(InfoDeath[playerid][Muertoskin], InfoDeath[playerid][MuertoX], InfoDeath[playerid][MuertoY], InfoDeath[playerid][MuertoZ], InfoDeath[playerid][MuertoR]);
    ApplyActorAnimation(InfoDeath[playerid][ActorMuerto], "PED", "FLOOR_hit_f", 4.1, 0, 1, 1, 1, 1); //
    SetTimerEx("BorrarActor", 60000, false, "i", playerid);
}

forward BorrarActor(playerid);
public BorrarActor(playerid) {
    DestroyActor(InfoDeath[playerid][ActorMuerto]);
    InfoDeath[playerid][ActorMuerto] = -1;
    return 1;
}

ProxDetectorS(Float:radi, playerid, targetid)//Ni idea de quien lo creo... Hace unos meses creo haber leido que era de la GameMode de GodFather... Creditos al creador.
{
    new
        Float: fp_playerPos[3];
    GetPlayerPos(targetid, fp_playerPos[0], fp_playerPos[1], fp_playerPos[2]);
    if(IsPlayerInRangeOfPoint(playerid, radi, fp_playerPos[0], fp_playerPos[1], fp_playerPos[2]) && GetPlayerVirtualWorld(playerid) == GetPlayerVirtualWorld(targetid))
    {
        return 1;
    }
    return 0;
}

ProxDetector(Float: f_Radius, playerid, string[],col1,col2,col3,col4,col5) //Ni idea de quien lo creo... Hace unos meses creo haber leido que era de la GameMode de GodFather... Creditos al creador.
{
    new
        Float: f_playerPos[3];
    GetPlayerPos(playerid, f_playerPos[0], f_playerPos[1], f_playerPos[2]);
    for(new i = 0, j = GetPlayerPoolSize(); i <= j; i++)
    {
        if(GetPlayerVirtualWorld(i) == GetPlayerVirtualWorld(playerid))
        {
            if(IsPlayerInRangeOfPoint(i, f_Radius / 16, f_playerPos[0], f_playerPos[1], f_playerPos[2])) {
                SendClientMessage(i, col1, string);
            }
            else if(IsPlayerInRangeOfPoint(i, f_Radius / 8, f_playerPos[0], f_playerPos[1], f_playerPos[2])) {
                SendClientMessage(i, col2, string);
            }
            else if(IsPlayerInRangeOfPoint(i, f_Radius / 4, f_playerPos[0], f_playerPos[1], f_playerPos[2])) {
                SendClientMessage(i, col3, string);
            }
            else if(IsPlayerInRangeOfPoint(i, f_Radius / 2, f_playerPos[0], f_playerPos[1], f_playerPos[2])) {
                SendClientMessage(i, col4, string);
            }
            else if(IsPlayerInRangeOfPoint(i, f_Radius, f_playerPos[0], f_playerPos[1], f_playerPos[2])) {
                SendClientMessage(i, col5, string);
            }
        }
        else SendClientMessage(i, col1, string);
    }
    return 1;
}
  Cantidad de llaves: Abiertas(28)-Cerradas(28) | Lineas Totales: 213

Después de 1 año me decidí a aportar algo -mfr_lol.
Me dan igual los créditos... esto lo hace un niño de 6 años si se lo propone.
No, no dejes +1. Deja +2 :3 .




EDIT 12-04-2017
-Repare un error que cambiaba el skin del usuario al skin ID 0(me olvide de colocarle la función que lo cambie al spawnear). Gracias #Koblic por notificarlo.
Última edición por MattHudson el 03 Feb 2017 00:11, editado 9 veces en total.
Avatar de Usuario
FailLout
Avanzado
Avanzado
Mensajes: 1385
Registrado: 10 Abr 2014 14:09
Ubicación: Estados Unidos
Contactar:
Reputación: 40

14 Ene 2017 17:19

Buenisimo Mat gran aporte!

-hi
[img]http://i.imgur.com/ewTFkYP.jpg[/img]

[url=http://pawnscript.com/foro/viewtopic.php?f=41&t=7263&p=42268#p42268]Roleplay Base v0.2 Beta[/url]

Innovando, Imaginando y creando así nacen los mejores sistemas
Luego vienen los bugs
Nacion Zombie RPG
Battlerine Royale SA-MP

DiegoelPro
Aprendiz
Aprendiz
Mensajes: 89
Registrado: 21 Oct 2016 16:30
Reputación: 0

14 Ene 2017 17:22

Esta Bonito man, me gusto, no se si usarlo, ando pensado -mfr_lol

-hi -hi
Avatar de Usuario
MattHudson
Moderador Global
Moderador Global
Mensajes: 1668
Registrado: 31 Oct 2015 18:16
Ubicación: Argentina, Buenos Aires, San Miguel.
Contactar:
Reputación: 89

15 Ene 2017 01:20

DiegoElPro: El sistema es basico, ya que algunos gamemoses tienen uno muy complejo, asi que trate de hacerlo amigable al scripter, para mayor facilidad.
SrLox
Aprendiz
Aprendiz
Mensajes: 71
Registrado: 12 Mar 2016 18:36
Reputación: 2

15 Ene 2017 16:41

Muy Bueno :D
Avatar de Usuario
EdinsonWalker
Senior
Senior
Mensajes: 1125
Registrado: 21 Feb 2014 10:34
Ubicación: dios no existe
Contactar:
Reputación: 92

18 Ene 2017 04:24

un enum!!!!
Consumido
Avatar de Usuario
MattHudson
Moderador Global
Moderador Global
Mensajes: 1668
Registrado: 31 Oct 2015 18:16
Ubicación: Argentina, Buenos Aires, San Miguel.
Contactar:
Reputación: 89

18 Ene 2017 06:30

EdinsonWalker escribió:un enum!!!!
Lo iba a hacer con un enum, pero me dio flojera cuando pensé que iba a tener que escribir tantas letras para una variable -mfr_lol

Pero a fin y acabo lo termino haciendo igual -shock
Ahí lo edite.
Avatar de Usuario
BenjaScript
Senior
Senior
Mensajes: 520
Registrado: 07 Oct 2015 08:34
Reputación: 52

20 Ene 2017 23:43

Muy buen aporto matt, te felicito man! -mfr_lol
potencia in progress
Avatar de Usuario
MattHudson
Moderador Global
Moderador Global
Mensajes: 1668
Registrado: 31 Oct 2015 18:16
Ubicación: Argentina, Buenos Aires, San Miguel.
Contactar:
Reputación: 89

21 Ene 2017 02:55

Majub_Zaraya escribió:Muy buen aporto matt, te felicito man! -mfr_lol
No hace tanta falta una alegría así por un simple uso de condicionales y variables sencillas -mfr_lol
Gracias de todas formas.
Michaell
Baneado
Baneado
Mensajes: 361
Registrado: 27 Oct 2016 09:58
Ubicación: Republica Dominicana - Santo Domingo
Contactar:
Reputación: 4

21 Ene 2017 12:05

Buen Aporte!! "Matt" Me Gusto, aunque no lo usare pero me gusto xd , si lo hubiese usado te daría +1 pero no lo usare ya que no me baso en esos sistemas, Ojala sigas aportando cosas así, un saludo! -hi
¡Hola! ¿Te Gustaría Entrar?
Michaell_Gomez
HostName: | DarkGaming Roleplay | [Stats Registro]
Address: cloud1.hostingsamp.com:9006
Players: 63 / 105 -mu
Ping: 118 -fisch
Mode: DG:RP - [Versión 1.20]
Language: Español - Spanish
Maathy
Aprendiz
Aprendiz
Mensajes: 100
Registrado: 22 Ago 2015 00:16
Reputación: 0

12 Nov 2017 18:19

 Codigo Pawno:
1
2

pawno\include\sscanf2.inc(258) : warning 202: number of arguments does not match definition
pawno\include\sscanf2.inc(271) : error 025: function heading differs from prototype
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 2
Me tira esos errores, ya actualice el sscanf pero nada.
Avatar de Usuario
Kalexer
Baneado
Baneado
Mensajes: 156
Registrado: 12 Feb 2018 16:47
Ubicación: Venezuela
Contactar:
Reputación: 0

11 May 2018 22:27

Oye me tira estos errores, si me ayudas te doy 1+

Código: Seleccionar todo

 C:\Users\guevara\Desktop\GM\gamemodes\grandlarc.pwn(201) : error 017: undefined symbol "MuertoSkin"
Pawn compiler 3.2.3664	 	 	Copyright (c) 1997-2006, ITB CompuPhase


1 Error.
Kalexer Ayudando a la comunidad.

Avatar de Usuario
MattHudson
Moderador Global
Moderador Global
Mensajes: 1668
Registrado: 31 Oct 2015 18:16
Ubicación: Argentina, Buenos Aires, San Miguel.
Contactar:
Reputación: 89

11 May 2018 22:56

Hola, -hi

Kalexer escribió:
11 May 2018 22:27
Oye me tira estos errores, si me ayudas te doy 1+

Código: Seleccionar todo

 C:\Users\guevara\Desktop\GM\gamemodes\grandlarc.pwn(201) : error 017: undefined symbol "MuertoSkin"
Pawn compiler 3.2.3664	 	 	Copyright (c) 1997-2006, ITB CompuPhase


1 Error.
Reemplaza esa linea "SetPlayerSkin(playerid, InfoDeath[playerid][MuertoSkin]);" por "SetPlayerSkin(playerid, InfoDeath[playerid][Muertoskin]);". Edito el tema, no me di cuenta.



Maathy escribió:
 Codigo Pawno:
1
2

pawno\include\sscanf2.inc(258) : warning 202: number of arguments does not match definition
pawno\include\sscanf2.inc(271) : error 025: function heading differs from prototype
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 2
Me tira esos errores, ya actualice el sscanf pero nada.
Yo utilizo la versión 2.8.2 del plugin y me compila sin problemas.


Saludos, -bye
Su amigo y vecino, MattHudson.
Responder