Skocz do zawartości

  • Zaloguj korzystając z Facebooka Zaloguj korzystając z Twittera Zaloguj przez Steam Zaloguj poprzez Google      Logowanie »   
  • Rejestracja

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

set_task crashuje


  • Nie możesz napisać tematu
  • Zaloguj się, aby dodać odpowiedź
9 odpowiedzi w tym temacie

#1 Willson

    Pomocny

  • Użytkownik

Reputacja: 1
Nowy

  • Postów:74
  • Lokalizacja:Białystok
Offline

Napisano 06.05.2013 20:26

 

public item_mine(id)
{
if (player_b_mine[id] >0 && is_user_alive(id) || c_mine[id] >0 && is_user_alive(id))
{
new count = 0
new ents = -1
ents = find_ent_by_owner(ents,"Mine",id)
while (ents > 0)
{
count++
ents = find_ent_by_owner(ents,"Mine",id)
}
if (count > 2)
{
hudmsg(id,2.0,"Mozesz polozyc maksymalnie 3 miny na runde")
return PLUGIN_CONTINUE
}
new origin[3]
pev(id,pev_origin,origin)
new ent = Spawn_Ent("info_target")
set_pev(ent,pev_classname,"Mine")
set_pev(ent,pev_owner,id)
set_pev(ent,pev_movetype,MOVETYPE_TOSS)
set_pev(ent,pev_origin,origin)
set_pev(ent,pev_solid,SOLID_BBOX)
engfunc(EngFunc_SetModel, ent, "addons/amxmodx/diablo/mine.mdl")  
engfunc(EngFunc_SetSize,ent,Float:{-16.0,-16.0,0.0},Float:{16.0,16.0,2.0})
drop_to_floor(ent)
entity_set_float(ent,EV_FL_nextthink,halflife_time() + 0.01) 
set_rendering(ent,kRenderFxNone, 0,0,0, kRenderTransTexture,50)
use_addtofullpack = true
set_task(6.0,"wywal",id)
}
return PLUGIN_CONTINUE
}
 
public wywal(id)
{
if(is_user_connected(id))
{
new ent = find_ent_by_class(0, "Mine");
while(ent > 0)
{
if(entity_get_edict(ent, EV_ENT_owner) == id)
{
remove_entity(ent);
}
}
}
}

Po postawieniu byta czasami crashuje serwer,wlasnie przez task.Jak to rozwiązać?


  • +
  • -
  • 0

#2 GT Team

    Ten lepszy xD

  • Zbanowany

Reputacja: 321
Wszechpomocny

  • Postów:1435
  • GG:
  • Imię:Tomasz i Grzegorz
  • Lokalizacja:Wojkowice
Offline

Napisano 06.05.2013 20:35

if(entity_get_edict(ent, EV_ENT_owner) == id)

{

remove_entity(ent);

}
Może chce usunąć enta, lecz on nie istnieje ?

Nowa wersja Tower Defense 0.2 Alpha | Inne Mody -> Nowości

 


#3 Willson

    Pomocny

  • Autor tematu
  • Użytkownik

Reputacja: 1
Nowy

  • Postów:74
  • Lokalizacja:Białystok
Offline

Napisano 06.05.2013 21:08

public wywal(id)
{
if(is_user_connected(id))
{
new ent = find_ent_by_class(0, "Mine");
while(ent > 0)
{
if(is_valid_ent(ent))

{

if(entity_get_edict(ent, EV_ENT_owner) == id)
{
remove_entity(ent);
}
}
}
}
}
 
Teraz od razu crashuje po postawieniu bytu.

Użytkownik Willson edytował ten post 06.05.2013 21:08

  • +
  • -
  • 0

#4 sebul

    Godlike

  • Junior Admin

Reputacja: 2016
Godlike

  • Postów:5411
  • Steam:steam
  • Imię:Sebastian
  • Lokalizacja:Ostrołęka
Offline

Napisano 06.05.2013 23:54

Nie ma to jak wykonywać nieskończoną pętlę...
  • +
  • -
  • 1
Posiadam TBM (inaczej PTB), które działa dużo lepiej niż zwykłe PTB, nawet na modach z lvlami. Zainteresowany? Proszę bardzo
Generator tabeli expa - aż do 103600 poziomu

#5 GT Team

    Ten lepszy xD

  • Zbanowany

Reputacja: 321
Wszechpomocny

  • Postów:1435
  • GG:
  • Imię:Tomasz i Grzegorz
  • Lokalizacja:Wojkowice
Offline

Napisano 07.05.2013 07:29

ma być taka pentla:
new ent = find_ent_by_class(-1, "Mine");
while(ent > 0)
{
     if(is_valid_ent(ent))
     {
          if(entity_get_edict(ent, EV_ENT_owner) == id)
          {
               remove_entity(ent);
          }
     }
     ent = find_ent_by_class(-1, "Mine");
}
To jest przerobiony kod.

Nowa wersja Tower Defense 0.2 Alpha | Inne Mody -> Nowości

 


#6 Andrzejek

    Ucze się :]

  • Power User

Reputacja: 131
Zaawansowany

  • Postów:1300
  • GG:
  • Steam:steam
  • Imię:Andrzej
  • Lokalizacja:Wadowice
Offline

Napisano 07.05.2013 07:55

Ja bym jeszcze po remove_entity(ent); dodał return PLUGIN_CONTINUE
  • +
  • -
  • -1

Mam do sprzedania pluginy AMXX pod serwery typu, JB, ONLY DD2, ZOMBIE, COD MOD, DR i inne...

 

Jeżeli jesteś zainteresowany(a), napisz na PW lub GG 42384104


#7 GT Team

    Ten lepszy xD

  • Zbanowany

Reputacja: 321
Wszechpomocny

  • Postów:1435
  • GG:
  • Imię:Tomasz i Grzegorz
  • Lokalizacja:Wojkowice
Offline

Napisano 07.05.2013 10:09

Nie możesz dać, bo ma wyszukać wszystkie klasy "Mine" i jeżeli są gracza, to jest usunąc, a nie jak znajdzie 1 to ją usuwa. W sumie to zależy jak autor chce, ale w takim przypadku daj się return

Nowa wersja Tower Defense 0.2 Alpha | Inne Mody -> Nowości

 


#8 sebul

    Godlike

  • Junior Admin

Reputacja: 2016
Godlike

  • Postów:5411
  • Steam:steam
  • Imię:Sebastian
  • Lokalizacja:Ostrołęka
Offline

Napisano 07.05.2013 10:59

ma być taka pentla:

new ent = find_ent_by_class(-1, "Mine");
while(ent > 0)
{
     if(is_valid_ent(ent))
     {
          if(entity_get_edict(ent, EV_ENT_owner) == id)
          {
               remove_entity(ent);
          }
     }
     ent = find_ent_by_class(-1, "Mine");
}
To jest przerobiony kod.

Jak już to
new ent = find_ent_by_class(-1, "Mine");
while(ent > 0)
{
if(is_valid_ent(ent))
{
if(entity_get_edict(ent, EV_ENT_owner) == id)
{
remove_entity(ent);
}
}
ent = find_ent_by_class(ent, "Mine");
}

ale ja bym dał po prostu
new ent = -1;
while((ent = find_ent_by_class(ent, "Mine")))
{
if(is_valid_ent(ent))
{
if(entity_get_edict(ent, EV_ENT_owner) == id)
{
remove_entity(ent);
}
}
}

lub nawet
new ent = -1;
while((ent = find_ent_by_owner(ent, "Mine", id)))
if(is_valid_ent(ent))
remove_entity(ent);

ale wtedy gdy gracza nie będzie już na serwerze (czyli nawet jeśli wykona się to w forwardzie rozłączania gracza z serwerem), to wtedy będzie wywalać błędy w logach, że gracz nie istnieje.
  • +
  • -
  • 0
Posiadam TBM (inaczej PTB), które działa dużo lepiej niż zwykłe PTB, nawet na modach z lvlami. Zainteresowany? Proszę bardzo
Generator tabeli expa - aż do 103600 poziomu

#9 GT Team

    Ten lepszy xD

  • Zbanowany

Reputacja: 321
Wszechpomocny

  • Postów:1435
  • GG:
  • Imię:Tomasz i Grzegorz
  • Lokalizacja:Wojkowice
Offline

Napisano 07.05.2013 12:09

if(is_user_connected(id))

Nowa wersja Tower Defense 0.2 Alpha | Inne Mody -> Nowości

 


#10 sebul

    Godlike

  • Junior Admin

Reputacja: 2016
Godlike

  • Postów:5411
  • Steam:steam
  • Imię:Sebastian
  • Lokalizacja:Ostrołęka
Offline

Napisano 07.05.2013 14:55

if(is_user_connected(id))

Wtedy i tak nie usunie bytów, skoro find_ent_by_owner wywala, że gracza nie ma na serwerze, a nawet jeśli, to i tak wywali taki błąd, zresztą to nie jest coś poważnego, jedynie zaśmieca plik z logami. W każdym razie, lepszym rozwiązaniem jest "find_ent_by_class", jeśli coś ma się usuwać gdy gracz wychodzi z serwera.
  • +
  • -
  • 0
Posiadam TBM (inaczej PTB), które działa dużo lepiej niż zwykłe PTB, nawet na modach z lvlami. Zainteresowany? Proszę bardzo
Generator tabeli expa - aż do 103600 poziomu




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

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