Raised This Month: $51 Target: $400
 12% 

[ES][TUT] Como respawnear a un jugador.


  
 
 
Thread Tools Display Modes
Author Message
fezh
Veteran Member
Join Date: Dec 2008
Location: BANNED
Old 07-03-2010 , 13:30   [ES][TUT] Como respawnear a un jugador.
#1

Bien, ahora vamos a analizar todas las natives y los métodos disponibles para respawnear a un jugador.

Fun y Fakemeta:
PHP Code:
set_pevindexpev_deadflagDEAD_RESPAWNABLE );
spawnindex ); 
Fueron la mejor opción antes de la aparición del módulo Hamsandwich. Para saber como usar esto correctamente les recomiendo este "tutorial" de GHW_Chronic: http://forums.alliedmods.net/showthread.php?t=76179

Hamsandwich:
Es la mejor forma conocida hasta ahora. Consiste en el uso de las natives ExecuteHam o ExecuteHamB con los siguientes parámetros:
PHP Code:
ExecuteHamBHam_CS_RoundRespawnid ); 
Lo único que tienen que tener en cuenta es que pueden haber problemas con esto si la ejecutan justo después de que el jugador muera, por lo que deberían agregar un delay (con un set_task o lo que sea) mayor o igual a 0.1.

Orpheu, Hamsandwich y Fakemeta:
Con la aparición de Orpheu tenemos otra posibilidad para respawnear un jugador. Lo primero es hookear la función FPlayerCanRespawn de la clase CHalfLifeMultiplay, de esta forma:
PHP Code:
OrpheuRegisterHookOrpheuGetFunction"FPlayerCanRespawn""CHalfLifeMultiplay" ), "Hook_FPlayerCanRespawn_Pre"OrpheuHookPre ); 
Y en la función (en Pawn) debe estar lo siguiente:
PHP Code:
public OrpheuHookReturn:Hook_FPlayerCanRespawn_Pre( const iObject, const id )
{
    
OrpheuSetReturntrue ); // Esto, como en Fakemeta, hace que el módulo obligue al forward a returnear 1 o true.
    
return OrpheuSupercede// Siempre tiene que venir acompañado de un supercede.

Pero eso no queda ahí, por que se pueden llegar a producir errores ya que el módulo respawnea a los jugadores demasiado rápido (la función PlayerDeathThink de la clase CBasePlayer es llamada a menudo), por lo que debemos agregar un delay. En este caso la utilización de tasks o técnicas similares no son tan efectivas como hookear Ham_Killed (post) y establecer la flag DEAD_RESPAWNEABLE para que haya un delay suficiente para que el jugador respawnee sin problemas. En este caso, el código nos quedaría de la siguiente manera:
PHP Code:
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
#include <orpheu>

public plugin_init( )
{
    
register_plugin"Respawn""1.0.0""Orpheu" );
    
    
RegisterHamHam_Killed"player""Ham_Killed_Post");
    
    
OrpheuRegisterHookOrpheuGetFunction"FPlayerCanRespawn""CHalfLifeMultiplay" ), "Hook_FPlayerCanRespawn_Pre"OrpheuHookPre );
}

public 
Ham_Killed_Post( const id )
{
    
set_pevidpev_flagsDEAD_RESPAWNABLE );
}

public 
OrpheuHookReturn:Hook_FPlayerCanRespawn_Pre( const iObject, const id )
{
    
OrpheuSetReturntrue );
    return 
OrpheuSupercede;

Posts originales de Arkshine y ConnorMcLeod:
http://forums.alliedmods.net/showpost.php?p=1082001
http://forums.alliedmods.net/showpos...&postcount=508

Signature (para Orpheu):
Attached Files
File Type: zip [signature]FPlayerCanRespawn.zip (846 Bytes, 188 views)
__________________
"There is no knowledge, that is not power"

Last edited by fezh; 07-04-2010 at 12:03.
fezh is offline
Alucard^
AMXX Moderator: Others
Join Date: Sep 2007
Location: Street
Old 07-03-2010 , 14:34   Re: [ES][TUT] Como respawnear a un jugador.
#2

Copado fezh, me quedo una duda... no se supone que con ponerle el flag de DEAD_RESPAWNABLE ya lo respawnea? o eso para que es? (mas alla de lo del delay).
__________________
Approved Plugins - Steam Profile

Public non-terminated projects:
All Admins Menu, HLTV parameters, Subnick,
Second Password (cool style), InfoZone,
Binary C4 plant/defuse, and more...

Private projects:
NoSpec (+menu), NV Surf Management,
PM Adanved System, KZ longjump2, and more...
Alucard^ is offline
Send a message via Skype™ to Alucard^
fezh
Veteran Member
Join Date: Dec 2008
Location: BANNED
Old 07-04-2010 , 12:02   Re: [ES][TUT] Como respawnear a un jugador.
#3

Quote:
Originally Posted by Alucard^ View Post
Copado fezh, me quedo una duda... no se supone que con ponerle el flag de DEAD_RESPAWNABLE ya lo respawnea? o eso para que es? (mas alla de lo del delay).
No, eso es para evitar bugs con las natives para respawnear.
En este caso, la función FPlayerCanRespawn no es llamada al menos de que el player esté muerto y pueda ser respawneado, lo cual pasa en dos situaciones:
  1. Cuando elegís el team y entrás a jugar.
  2. Cuando estableces la flag manualmente usando:
    Engine:
    PHP Code:
    entity_set_intidEV_INT_flagsDEAD_RESPAWNABLE ); 
    Fakemeta:
    PHP Code:
    set_pevidpev_flagsDEAD_RESPAWNABLE ); 
__________________
"There is no knowledge, that is not power"
fezh is offline
Alucard^
AMXX Moderator: Others
Join Date: Sep 2007
Location: Street
Old 07-04-2010 , 19:06   Re: [ES][TUT] Como respawnear a un jugador.
#4

A ver si entendi... al setearle la flag DEAD_RESPAWNABLE... lo que hace es que cuando el jugador elige team y entra a jugar, sea respawneado... pero cuando el jugador muere ahi la flag DEAD_RESPAWNABLE no tiene nada que ver, por eso se usa el otro metodo de orpheu, o en su defecto el metodo de Ham, estoy en lo correcto?
__________________
Approved Plugins - Steam Profile

Public non-terminated projects:
All Admins Menu, HLTV parameters, Subnick,
Second Password (cool style), InfoZone,
Binary C4 plant/defuse, and more...

Private projects:
NoSpec (+menu), NV Surf Management,
PM Adanved System, KZ longjump2, and more...
Alucard^ is offline
Send a message via Skype™ to Alucard^
fezh
Veteran Member
Join Date: Dec 2008
Location: BANNED
Old 07-04-2010 , 19:41   Re: [ES][TUT] Como respawnear a un jugador.
#5

Lee de nuevo lo que puse, no entendiste nada.
__________________
"There is no knowledge, that is not power"
fezh is offline
Alucard^
AMXX Moderator: Others
Join Date: Sep 2007
Location: Street
Old 07-04-2010 , 19:45   Re: [ES][TUT] Como respawnear a un jugador.
#6

Ahhhh...

Quote:
la función FPlayerCanRespawn no es llamada al menos de que el player esté muerto y pueda ser respawneado
Ahora si lo cacho, pero para sacar todas las dudas... una preg, o sea que si yo no seteo la flag esa, el player solo sera respawneado cuando entra y elige el team... pero cuando muera no, ya que no fue seteada la flag, no es asi?
__________________
Approved Plugins - Steam Profile

Public non-terminated projects:
All Admins Menu, HLTV parameters, Subnick,
Second Password (cool style), InfoZone,
Binary C4 plant/defuse, and more...

Private projects:
NoSpec (+menu), NV Surf Management,
PM Adanved System, KZ longjump2, and more...
Alucard^ is offline
Send a message via Skype™ to Alucard^
fezh
Veteran Member
Join Date: Dec 2008
Location: BANNED
Old 07-04-2010 , 20:04   Re: [ES][TUT] Como respawnear a un jugador.
#7

Quote:
Originally Posted by Alucard^ View Post
Ahora si lo cacho, pero para sacar todas las dudas... una preg, o sea que si yo no seteo la flag esa, el player solo sera respawneado cuando entra y elige el team... pero cuando muera no, ya que no fue seteada la flag, no es asi?
c
__________________
"There is no knowledge, that is not power"
fezh is offline
Alucard^
AMXX Moderator: Others
Join Date: Sep 2007
Location: Street
Old 07-04-2010 , 20:12   Re: [ES][TUT] Como respawnear a un jugador.
#8

Joya... la unica duda que me queda es, cual rinde mas? Ham o Fakemeta+Orpheu?
__________________
Approved Plugins - Steam Profile

Public non-terminated projects:
All Admins Menu, HLTV parameters, Subnick,
Second Password (cool style), InfoZone,
Binary C4 plant/defuse, and more...

Private projects:
NoSpec (+menu), NV Surf Management,
PM Adanved System, KZ longjump2, and more...
Alucard^ is offline
Send a message via Skype™ to Alucard^
PattyBiena
BANNED
Join Date: Jul 2010
Location: Argentina
Old 07-04-2010 , 20:23   Re: [ES][TUT] Como respawnear a un jugador.
#9

Hamsandwich:
Es la mejor forma conocida hasta ahora. Consiste en el uso de las natives ExecuteHam
PattyBiena is offline
fezh
Veteran Member
Join Date: Dec 2008
Location: BANNED
Old 07-04-2010 , 20:29   Re: [ES][TUT] Como respawnear a un jugador.
#10

Quote:
Originally Posted by Alucard^ View Post
Joya... la unica duda que me queda es, cual rinde mas? Ham o Fakemeta+Orpheu?
Con Ham tenés que agregar un delay si lo querés respawnear justo después de la muerte. Con Orpheu le estableces la flag DEAD_RESPAWNABLE y nnv.

@PattyBiena: ¿?
¿Me das un choripan?
__________________
"There is no knowledge, that is not power"
fezh is offline
 



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 09:19.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode