Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie

Respawn crashuje serwer?


  • Zamknięty Temat jest zamknięty
10 odpowiedzi w tym temacie

#1 naven

    Hero

  • Power User

Reputacja: 204
Profesjonalista

  • Postów:1 088
  • GG:
  • Imię:Adam
  • Lokalizacja:Cieszyn
Offline

Napisano 02.06.2009 18:22

Witam, jest to część pluginu http://forums.allied...ad.php?p=549903

Więc tak, wkurzyłem się trochę i postanowiłem sam sklecić surf moda, pozbierałem kody z pluginów i połączyłem w całość, wszystkie funkcje działają ok, oprócz respawn(link do oryginału powyżej)
Początkowo nie dawałem respawnu, bo tak jak podejrzewałem to właśnie ta część crashuje serwer, po dodaniu zdarzają się crashe

Jest tego jakieś 200 linii(plus te newy, registery itd, nie załączam ich bo długo by szukać tego znowu)
Oczywiście spełnia swoją funkcję- automatyczny respawn+ say /respawn jednak crashuje serwer.

//////////////////////////////////////////
//	RZECZY ZWIĄZANE Z RESPAWNEM	//
//////////////////////////////////////////

//dodane 27.05 w szkole
public hook_DeathMsg()
{
	//log_amx("AT: hook_DeathMsg");
	
	new victim;
	victim = read_data(2);
	
	// Clipon/off
	//if(g_isClipping[victim])
	{
		remove_task(victim + 2986);
//		g_isClipping[victim] = false;
	}
	
	// Auto respawn
	if(get_pcvar_num(sv_autoresp) && get_pdata_int(victim, 114, 5) != 3)
		set_task(1.8, "task_caughtDeathSpawn", victim + 483);
	
	return FMRES_HANDLED;
}
public hook_UpdateClientData(id, sendweapons, cd_handle)
{
	//log_amx("AT: hook_UpdateClientData");
	
	// oryginał 	if(!is_user_alive(id) || !g_isClipping[id])
	if(!is_user_alive(id))
		return FMRES_IGNORED;
	
	set_cd(cd_handle, CD_ID, 0);
	
	return FMRES_HANDLED;
}
//koniec

public respawnPlayer(id)
{
	//log_amx("AT: respawnPlayer");
	
	new Float:gametime = get_gametime();
	if(nextSpawnTime[id] < gametime)
	{
		//cancelTimer(id);
		dllfunc(DLLFunc_Spawn, id);
		nextSpawnTime[id] = gametime + 3.0;
		return FMRES_IGNORED;
	}
	
	client_print(id, print_chat, "You must wait %i more seconds to respawn.", floatround(nextSpawnTime[id] - gametime, floatround_ceil));
	return FMRES_IGNORED;
}
public task_caughtDeathSpawn(id)
{
	//log_amx("AT: task_caughtDeathSpawn");
	
	id -= 483;
	if(is_user_connected(id))
		dllfunc(DLLFunc_Spawn, id);
}
public hook_TakeDamage(this, idinflictor, idattacker, Float:damage, damagebits)
{
	//log_amx("AT: hook_TakeDamage");
	
	new toggledamage;
	toggledamage = get_pcvar_num(sv_toggledamage);
	if(toggledamage == 1)
	{
		// Remove only fall damage
		if(idattacker == 0)
			return HAM_SUPERCEDE;
		else
			if(checkAutoRespawn(this, damage))
				return HAM_SUPERCEDE;
	}
	else if(toggledamage == 2)
	{
		// Remove only player damage
		if(is_user_connected(idattacker))
			return HAM_SUPERCEDE;
		else
			if(checkAutoRespawn(this, damage))
				return HAM_SUPERCEDE;
	}
	else if(toggledamage == 3)
	{
		// Remove both fall and player damage
		if(idattacker == 0 || is_user_connected(idattacker))
			return HAM_SUPERCEDE;
		else
			if(checkAutoRespawn(this, damage))
				return HAM_SUPERCEDE;
	}
	else
		if(checkAutoRespawn(this, damage))
				return HAM_SUPERCEDE;
	
	return PLUGIN_CONTINUE;
}

stock checkAutoRespawn(this, Float:damage)
{
	//log_amx("AT: checkAutoRespawn");
	
	if(get_pcvar_num(sv_autoresp))
	{
		health[this] -= damage;
		if(health[this] < 1.0)
		{
			set_pev(this, pev_health, 0.0);
			set_pev(this, pev_deadflag, DEAD_RESPAWNABLE);
			
			dllfunc(DLLFunc_Spawn, this);
			//cancelTimer(this);
			return 1;
		}
	}
	return 0;
}
public hook_KeyValue(entId, kvd_id)
{
	//log_amx("AT: hook_KeyValue");
	
	if(!pev_valid(entId))
		return FMRES_HANDLED;
	
	new className[64];
	pev(entId, pev_classname, className, 63);
	
	//if(get_pcvar_num(sv_removet))
	{
		if(containi(className, "info_player_deathmatch") != -1)
			engfunc(EngFunc_RemoveEntity, entId);
	}
	
	//if(!get_pcvar_num(sv_togglebuy))
	{
		if(containi(className, "func_buyzone") != -1)
			engfunc(EngFunc_RemoveEntity, entId);
	}
	
	if(containi(className, "func_bomb_target") != -1)
		engfunc(EngFunc_RemoveEntity, entId);
	
	return FMRES_HANDLED;
}
public task_checkConnectDead(id)
{
	//log_amx("AT: task_checkConnectDead");
	
	id -= 654;
	if(is_user_connected(id))
	{
		new team = get_pdata_int(id, 114, 5);
		if(!is_user_alive(id) && firstSpawn[id] && (team == 1 || team == 2))
		{
			// Spawn them
			set_task(1.8, "task_caughtDeathSpawn", id + 483);
		}
		else if(!is_user_alive(id) && firstSpawn[id] && (team != 1 && team != 2))
		{
			// Check again
			set_task(1.8, "task_checkConnectDead", id + 654);
		}
	}
	else if(is_user_connecting(id))
		set_task(1.8, "task_checkConnectDead", id + 654);
	
	return FMRES_HANDLED;
}

Pozdrawiam
  • +
  • -
  • 0

#2 Miczu

    Godlike

  • Przyjaciel

Reputacja: 657
Wszechmogący

  • Postów:2 862
Offline

Napisano 02.06.2009 18:34

*nie czytal wszytkiego*

Po co tyle kodu ci na respawn?
Masz jakies szczegolne wymagania co do respa???
  • +
  • -
  • 0

#3 naven

    Hero

  • Autor tematu
  • Power User

Reputacja: 204
Profesjonalista

  • Postów:1 088
  • GG:
  • Imię:Adam
  • Lokalizacja:Cieszyn
Offline

Napisano 02.06.2009 19:33

No chodzi mi o to, żeby był automat po śmierci i po wpisaniu /respawn
I niektóre respawny spawnują bez broni czy bez napisów z hp czy coś... ten spawnuje najlepiej dlatego właśnie go chce.
Co prawda mam dalej w kodzie dawanie broni bo nie na każdej mapie są, ale z tymi napisami to tragedia trochę.
  • +
  • -
  • 0

#4 Miczu

    Godlike

  • Przyjaciel

Reputacja: 657
Wszechmogący

  • Postów:2 862
Offline

Napisano 02.06.2009 19:46

naven, jakie bronie sa ci potrzebne na surf moda? :F

Co do respawna to uzyj:

http://amxx.pl/viewtopic.php?t=3265

Tylko podepnij pod event smierci i komende to bedzie ok :>
  • +
  • -
  • 0

#5 naven

    Hero

  • Autor tematu
  • Power User

Reputacja: 204
Profesjonalista

  • Postów:1 088
  • GG:
  • Imię:Adam
  • Lokalizacja:Cieszyn
Offline

Napisano 02.06.2009 19:50

Miczu, surf to nie mod tylko typ mapy;p
surf_1337maze- nie masz żadnej broni, a ja bez noża grać nie umiem

event śmieci to deathmsg?
  • +
  • -
  • 0

#6 Miczu

    Godlike

  • Przyjaciel

Reputacja: 657
Wszechmogący

  • Postów:2 862
Offline

Napisano 02.06.2009 20:48

Więc tak, wkurzyłem się trochę i postanowiłem sam sklecić surf moda


Jestes konsekwentny ^^

http://amxx.pl/viewtopic.php?t=2177
po co robie toturiale ktorych nikt nie czyta a pytaja o to co wnich jest?
  • +
  • -
  • 0

#7 naven

    Hero

  • Autor tematu
  • Power User

Reputacja: 204
Profesjonalista

  • Postów:1 088
  • GG:
  • Imię:Adam
  • Lokalizacja:Cieszyn
Offline

Napisano 03.06.2009 11:43

Ah, tylko dlaczego jest DeathMsg
Wiadomość po śmierci?
  • +
  • -
  • 0

#8 Miczu

    Godlike

  • Przyjaciel

Reputacja: 657
Wszechmogący

  • Postów:2 862
Offline

Napisano 03.06.2009 14:09

Bo w momencie smierci kogos wyswietla w prawym gornym rogu ikonke o typie smierci i to jest przechwytywane. Ale w tym jest tyle informacji i natychmiast po smierci gracza, ze jest to bardziej niz wystarczajace dla nas.
  • +
  • -
  • 0

#9 naven

    Hero

  • Autor tematu
  • Power User

Reputacja: 204
Profesjonalista

  • Postów:1 088
  • GG:
  • Imię:Adam
  • Lokalizacja:Cieszyn
Offline

Napisano 03.06.2009 15:03

Niby czaje, ale ciągle mi nie działa to:
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <cstrike>

public plugin_init() {
    register_event("DeathMsg", "DeathMsg", "a")
}

public DeathMsg()
{
    /*ten kod mi się nie przyda? Nie potrzebuje wiedzieć kto umarl, czemu umarł, ważne że umarł?
    new kid = read_data(1)    //zabujca
   
    new vid = read_data(2)    // ofiara
   
    new hs = read_data(3)    // HeadShot (1 == true)
   
    new weapon[64]       
    read_data(4,weapon,63)    //krotka nazwa broni (bez weapon_ / CSW_ )*/
    set_task(1.0, "respawn_player")

}

public respawn_player(id)
{     
    if (!is_user_connected(id) || is_user_alive(id) || cs_get_user_team(id) == CS_TEAM_SPECTATOR)         return; 

    set_pev(id, pev_deadflag, DEAD_RESPAWNABLE)
    dllfunc(DLLFunc_Think, id)
    if (is_user_bot(id) && pev(id, pev_deadflag) == DEAD_RESPAWNABLE)
     {
         dllfunc(DLLFunc_Spawn, id)
     }
}


a tutaj?
if (!is_user_connected(id) || is_user_alive(id) || cs_get_user_team(id) == CS_TEAM_SPECTATOR)         return;


Pisaliście, że ! oznacza negację, tak więc, jeśli gracz nie jest połączony, jeśli nie jest żywy to return(anuluj funkcję?)
  • +
  • -
  • 0

#10 Miczu

    Godlike

  • Przyjaciel

Reputacja: 657
Wszechmogący

  • Postów:2 862
Offline

Napisano 03.06.2009 15:18

naven:
Uno: funkcja respawn_player(id) potrzebuje parametru id ktorego nie przekazujesz przy tasku i id=0 co wszystko psuje
Duo: ! oznacza negacje, ale wypadalo by czytac poprawinie skadnie warunku:
if (!is_user_connected(id) || is_user_alive(id) || cs_get_user_team(id) == CS_TEAM_SPECTATOR)

mozna rozbic na:
if(!is_user_connected(id)) return
if(is_user_alive(id)) return
if(cs_get_user_team(id) == CS_TEAM_SPECTATOR) return

Mowiac w sposob zrozumialy ! neguje tylko wartosc logiczna przy ktorej sie znajduje...
  • +
  • -
  • 0

#11 naven

    Hero

  • Autor tematu
  • Power User

Reputacja: 204
Profesjonalista

  • Postów:1 088
  • GG:
  • Imię:Adam
  • Lokalizacja:Cieszyn
Offline

Napisano 03.06.2009 15:30

1. All I can say: wymiatasz + pomógł znów;d(skopiowałem trochę kodu z innego pluga i funguje)

2. aa xD, myslałem że odnosi się do całości... tak jak if
  • +
  • -
  • 0




Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych