Respawn crashuje serwer?
naven
02.06.2009
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.
Pozdrawiam
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
Miczu
02.06.2009
*nie czytal wszytkiego*
Po co tyle kodu ci na respawn?
Masz jakies szczegolne wymagania co do respa???
Po co tyle kodu ci na respawn?
Masz jakies szczegolne wymagania co do respa???
naven
02.06.2009
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ę.
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ę.
Miczu
02.06.2009
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 :>
Co do respawna to uzyj:
http://amxx.pl/viewtopic.php?t=3265
Tylko podepnij pod event smierci i komende to bedzie ok :>
naven
02.06.2009
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?
surf_1337maze- nie masz żadnej broni, a ja bez noża grać nie umiem
event śmieci to deathmsg?
Miczu
02.06.2009
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?
Miczu
03.06.2009
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.
naven
03.06.2009
Niby czaje, ale ciągle mi nie działa to:
a tutaj?
Pisaliście, że ! oznacza negację, tak więc, jeśli gracz nie jest połączony, jeśli nie jest żywy to return(anuluj funkcję?)
#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ę?)
Miczu
03.06.2009
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:
mozna rozbic na:
Mowiac w sposob zrozumialy ! neguje tylko wartosc logiczna przy ktorej sie znajduje...
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...
naven
03.06.2009
1. All I can say: wymiatasz + pomógł znów;d(skopiowałem trochę kodu z innego pluga i funguje)
2. aa , myslałem że odnosi się do całości... tak jak if
2. aa , myslałem że odnosi się do całości... tak jak if