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

precache_model tylko gdy plugin jest w stanie 'running'


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

#1 siC

    Życzliwy

  • Użytkownik

Reputacja: 1
Nowy

  • Postów:24
Offline

Napisano 23.11.2008 18:00

Witam. Udało nam się z Waszą pomocą napisać ten plugin, który zmienia modele naszych graczy na serwerze. Teraz mamy taki problem, że chcielibyśmy, aby te modele się nie pobierały ludziom wchodzącym na serwer jeśli plugin jest w stanie "paused". Przyznam szczerze, że trochę kombinowałem na tyle ile umiałem i napisałem taki plugin na test jednak wykorzystanie go przy funkcji plugin_precache() nie daje rezultatu. Czytałem, że precache_model(), precache_sound() można użyć tylko w funkcji plugin_precache(), czyli analogicznie w plugin_precache musiałbym sprawdzić jaki plugin ma status i jeśli ma "running", to precache_model. Tak też zrobiłem, jednak za każdym razem ten model się pobiera.

Kod nie działa
#include <amxmodx>
#include <amxmisc>
#include <cstrike>

public plugin_init()
{
    register_plugin("Test", "1.0", "siC")
}

public plugin_precache()
{
	new filename[32]
	new name[32]
	new version[32]
	new author[32]
	new status[32]
	
	// Nasz plugin ma id 39, przypisałem na stałe, żeby nie pobierać wszystkich
	get_plugin ( 39, filename, 31, name, 31, version, 31, author, 31, status, 31 ) 

	new fstatus[16]
	format (fstatus, 15, status, 31)
	
	if (equali(fstatus, "running"))
	{
		// Tu powinny się pobierać modele
		precache_model("models/player/lars_ct/lars_ct.mdl")
		precache_model("models/player/lars_te/lars_te.mdl")
	}

	else if (equali(fstatus, "paused"))
	{
		// Nic
	}
	
	return PLUGIN_CONTINUE
}
W innej funkcji ten if działa, jednak gdy przeniosę go do funkcji plugin_precache, to już nie działa.

Reasumując. Chcemy, żeby modele się nie pobierały gdy plugin jest zapauzowany. Czy znajdzie się jakaś łaskawa, doświadczona dusza i pomoże rozwiązać problem?? Oczywiście podkreślam, że chcemy to pobieranie modeli zastosować w tym pluginie. Za pomoc oczywiście ++

Z góry dzięki i pozdrawiam
  • +
  • -
  • 0

#2 Seba

    Wszechobecny

  • Zbanowany

Reputacja: 198
Profesjonalista

  • Postów:424
  • Lokalizacja:Internet
Offline

Napisano 23.11.2008 20:14

Zdaje mi się że nie da sie bezproblemowo. plugin_precache jest wykonywane jako pierwsze w całym pluginie, Twój plugin musiałby być ostatni na liście i jakiś wcześniej wpisany musiałby go zatrzymywać.

Anyway, to
if (equali(fstatus, "running"))
    {
        // Tu powinny się pobierać modele
        precache_model("models/player/lars_ct/lars_ct.mdl")
        precache_model("models/player/lars_te/lars_te.mdl")
    }

    else if (equali(fstatus, "paused"))
    {
        // Nic
    }
powinno być po prostu tak
if (equali(fstatus, "running"))
    {
        // Tu powinny się pobierać modele
        precache_model("models/player/lars_ct/lars_ct.mdl")
        precache_model("models/player/lars_te/lars_te.mdl")
    }
Napisz więcej kiedy plugin ma być zapauzowany. Może na pojedynczych mapach? Jak tak, to wtedy można skorzystać z wbudowanego mechanizmu do AMXMODX do wyłączania pluginów na danych mapkach.

#3 siC

    Życzliwy

  • Autor tematu
  • Użytkownik

Reputacja: 1
Nowy

  • Postów:24
Offline

Napisano 23.11.2008 20:24

Seba, Owszem można napisać inny plugin, który sprawdza stan konkretnie tego z modelami, tylko nie wiem jak go właśnie zatrzymać. Wiem są funkcje plugin_pause, plugin_unpause, ale nawet wtedy ten model się pobiera, bo próbowałem.

Chodzi dokładnie o to, że jeśli gramy mixy to ładujemy sobie cfg, gdzie pauzują się inne pluginy i ten też. Jednak nawet jeśli plugin lars_model.amxx (bo tak się nazywa) jest zapauzowany, to modele się pobierają. Myślę, że trzeba by było go unloadować, żeby się nie pobierały. Potem po mixach, czy restarcie serwa jest ładowany server.cfg, gdzie odpauzowują się pluginy. Zapauzowanie lars_model.amxx nic nie daje, bo modele się pobierają. Teraz pomyśleć, że każdy wchodzący musi ściągać te modele, to większość płacze, a niestety cl_allowdownload 0 też nic nie daje, bo modele się pobierają. Sam już nie wiem co zrobić. Próbowałem kilku sposobów jednak nie znalazłem skutecznego rozwiązania.

PS. 1. A jak można za pomocą pluginu zrobić unload innego pluginu? może to by zadziałało?
PS. 2. Apropos kodu to wiem, że wystarczy tylko pierwszy if. Napisałem to tylko kontrolnie.
  • +
  • -
  • 0

#4 Miczu

    Godlike

  • Przyjaciel

Reputacja: 657
Wszechmogący

  • Postów:2 862
Offline

Napisano 23.11.2008 20:31

Nie wiem czy to zrobi roznice, ale moze zrob cvara on/off a potem stawdzac i to dac wlasnie do if'a
  • +
  • -
  • 0

#5 siC

    Życzliwy

  • Autor tematu
  • Użytkownik

Reputacja: 1
Nowy

  • Postów:24
Offline

Napisano 23.11.2008 20:50

Miczu, yyyym coś takiego??
#include <amxmodx>
#include <amxmisc>
#include <cstrike>

new larsmodel

public plugin_init()
{
	register_plugin("Test", "1.0", "siC")
	larsmodel = register_cvar("amx_larsmodel", "1")
}

public plugin_precache()
{
	if(get_pcvar_num(larsmodel) == 1)
	{
		// Tu powinny się pobierać modele
		precache_model("models/player/lars_ct/lars_ct.mdl")
		precache_model("models/player/lars_te/lars_te.mdl")
	}

	return PLUGIN_CONTINUE
}

  • +
  • -
  • 0

#6 Miczu

    Godlike

  • Przyjaciel

Reputacja: 657
Wszechmogący

  • Postów:2 862
Offline

Napisano 23.11.2008 21:21

Tak, jakby stawial opory, to radze tez sprawdzic dla domyslnie ustawionego na 0 ;-)
  • +
  • -
  • 0

#7 siC

    Życzliwy

  • Autor tematu
  • Użytkownik

Reputacja: 1
Nowy

  • Postów:24
Offline

Napisano 23.11.2008 21:29

Miczu, Ogólnie zrobiłem na próbę wyświetlanie. Jednak teraz wcale nie pobiera modelu ani na 1 ani na 0 :|

#include <amxmodx>
#include <amxmisc>
#include <cstrike>

#define SETHUDMSG	set_hudmessage(000, 100, 255, -1.0, 0.25, 0, 6.0, 1.0, 0.1, 0.2, 4);

new larsmodel

public plugin_init()
{
	register_plugin("Test", "1.0", "siC")
	larsmodel = register_cvar("amx_larsmodel", "1")
	pokaz()
}

public plugin_precache()
{
	if(get_pcvar_num(larsmodel) == 1)
	{
		// Tu powinny się pobierać modele
		precache_model("models/player/test/test.mdl")
	}

	else if(get_pcvar_num(larsmodel) == 0)
	{
		// Plugin zatrzymany
	}
	
	return PLUGIN_CONTINUE
}

public pokaz() 
{
	if(get_pcvar_num(larsmodel) == 1)
	{
		SETHUDMSG 
		show_hudmessage(0, "Uruchomiony")
	}
	
	else if(get_pcvar_num(larsmodel) == 0)
	{
		SETHUDMSG 
		show_hudmessage(0, "Zatrzymany")
	}
	
	set_task(2.0,"pokaz")
	
	return PLUGIN_CONTINUE
}

O.o

[ Dodano: 23-11-2008, 21:37 ]
Miczu Nie trybi cholera weź sie zlituj :P
  • +
  • -
  • 0

#8 Miczu

    Godlike

  • Przyjaciel

Reputacja: 657
Wszechmogący

  • Postów:2 862
Offline

Napisano 23.11.2008 22:21

siC, po prostu plug wyswietla zanim wbijasz na serwa - zmien wyswietlanie na komende
  • +
  • -
  • 0

#9 wizu

    Godlike

  • Przyjaciel

Reputacja: 224
Profesjonalista

  • Postów:1 217
  • GG:
  • Lokalizacja:Sanok
Offline

Napisano 23.11.2008 22:24

Nie wiem, czy robi różnicę ale spróbuj tak:
#include <amxmodx>

public plugin_init()
{
	register_plugin("Test", "1.0", "siC")
	register_cvar("amx_larsmodel", "1")
	pokaz()
}

public plugin_precache()
{
if(get_cvar_num("amx_larsmodel"))
        precache_model("models/player/test/test.mdl")
}

public pokaz()
{
if(get_cvar_num("amx_larsmodel"))
	client_print(0, print_chat, "smiga")
else
	client_print(0, print_chat, "zatrzymany")
	
set_task(2.0,"pokaz")
}

Plug wyświetla co 2 sekundy na czacie Miczu :P
  • +
  • -
  • 0

#10 siC

    Życzliwy

  • Autor tematu
  • Użytkownik

Reputacja: 1
Nowy

  • Postów:24
Offline

Napisano 23.11.2008 22:55

Miczu, funkcja pokaz() co 2 sekundy pokazuje tylko na hud stan spluga
wizu, Nic to nie zmieniło. Model za każdym razem się pobiera, nie zależnie od stanu pluga.

Spróbowałem dodać { }

public plugin_precache()
public plugin_precache()
{
	if(get_cvar_num("amx_larsmodel")) 
	{
		precache_model("models/player/test/test.mdl")
	}
	
	return PLUGIN_CONTINUE
}
I wtedy nastała światłość - zadziałało, jakiś chory ten pawn :?
  • +
  • -
  • 0

#11 Miczu

    Godlike

  • Przyjaciel

Reputacja: 657
Wszechmogący

  • Postów:2 862
Offline

Napisano 23.11.2008 23:04

#include <amxmodx> 

public plugin_init() 
{ 
    register_plugin("Test", "1.0", "siC") 
    register_cvar("amx_larsmodel", "1") 
    pokaz() 
} 

public pokaz() 
{ 
	if(get_cvar_num("amx_larsmodel")) 
		client_print(0, print_chat, "smiga") 
	else 
		client_print(0, print_chat, "zatrzymany") 
	    
	set_task(2.0,"pokaz") 
}
To mi "smiga". A co do set_task to sorki, ale nie zauwazylem ze sie odwoluje sam do siebie.
  • +
  • -
  • 0

#12 siC

    Życzliwy

  • Autor tematu
  • Użytkownik

Reputacja: 1
Nowy

  • Postów:24
Offline

Napisano 23.11.2008 23:10

Miczu, No tak to działa, ale tu chodzi o to żeby pobierał lub nie pobierał modeli kiedy jest zatrzymany/włączony plugin. Rozwiązanie znalazłem dzięki wizu.

#include <amxmodx>
#include <amxmisc>
#include <cstrike>

public plugin_init()
{
    register_plugin("Test", "1.0", "siC")
    register_cvar("amx_larsmodel", "1")
    pokaz()
}

public plugin_precache()
{
	if(get_cvar_num("amx_larsmodel")) 
	{
		precache_model("models/player/test/test.mdl")
	}
	
	return PLUGIN_CONTINUE
}

public pokaz()
{
	if(get_cvar_num("amx_larsmodel"))
	{
		client_print(0, print_chat, "uruchomiony")
	}
	
	else
	{
		client_print(0, print_chat, "zatrzymany")
	}
	
	set_task(2.0,"pokaz")
}

Tak napisany kod działa. Oczywiście można teraz usunąć funkcje pokaz(), która tylko była kontrolna. Teraz jak cvar amx_larsmodel 1 to pobiera, jak na 0 to nie pobiera.

Temat do zamknięcia, rozdam + i do domu :P
Dzięki wszystkim za sugestie i pomoc
  • +
  • -
  • 0

#13 Miczu

    Godlike

  • Przyjaciel

Reputacja: 657
Wszechmogący

  • Postów:2 862
Offline

Napisano 23.11.2008 23:13

Ciesze sie ze doceniles pomysl wiza od zrobienia cvara do wylanczania ;>
  • +
  • -
  • 0

#14 siC

    Życzliwy

  • Autor tematu
  • Użytkownik

Reputacja: 1
Nowy

  • Postów:24
Offline

Napisano 23.11.2008 23:16

wylanczania

No oczywiście cvar to Twoja zasługa, jednak on rozwiązał jego sprawdzanie :)
  • +
  • -
  • 0

#15 Miczu

    Godlike

  • Przyjaciel

Reputacja: 657
Wszechmogący

  • Postów:2 862
Offline

Napisano 23.11.2008 23:21

cvar czy pcvar nie robilo moim zdaniem zbyt wielkier roznicy (pcvar ponoc dziala szybciej), wiec nic nie mowilem, ale jesli plugin_precache() dziala przed plugin_init() to pcvar nie zostanie umieszczony w zmiennej i ona bedzie miala wartosc 0 (zmienne sa zerowane przy deklaracji).
  • +
  • -
  • 0

#16 siC

    Życzliwy

  • Autor tematu
  • Użytkownik

Reputacja: 1
Nowy

  • Postów:24
Offline

Napisano 23.11.2008 23:31

Widocznie skryptowi robiło różnicę. Znalazłem także rozwiązanie dla naszego lars_model.amxx tym samym. Tylko, że tam i tak pobierało model, bo jak mi się wydaje to event go wymagał. Dostawiłem ifa i teraz działa :)
  • +
  • -
  • 0

#17 wizu

    Godlike

  • Przyjaciel

Reputacja: 224
Profesjonalista

  • Postów:1 217
  • GG:
  • Lokalizacja:Sanok
Offline

Napisano 24.11.2008 09:19

Ja tam tylko poprawiłem kod wyżej. Podaj końcowy działający kod. Może się komuś przyda.
  • +
  • -
  • 0

#18 siC

    Życzliwy

  • Autor tematu
  • Użytkownik

Reputacja: 1
Nowy

  • Postów:24
Offline

Napisano 24.11.2008 17:15

Ok. Nie ma sprawy. Dodam go potem jak go potestuje jeszcze, ale jak na razie działa bez zarzutów
  • +
  • -
  • 0

#19 Seba

    Wszechobecny

  • Zbanowany

Reputacja: 198
Profesjonalista

  • Postów:424
  • Lokalizacja:Internet
Offline

Napisano 27.11.2008 16:23

Miczu, No tak to działa, ale tu chodzi o to żeby pobierał lub nie pobierał modeli kiedy jest zatrzymany/włączony plugin. Rozwiązanie znalazłem dzięki wizu.

#include <amxmodx>
#include <amxmisc>
#include <cstrike>

public plugin_init()
{
    register_plugin("Test", "1.0", "siC")
    register_cvar("amx_larsmodel", "1")
    pokaz()
}

public plugin_precache()
{
	if(get_cvar_num("amx_larsmodel")) 
	{
		precache_model("models/player/test/test.mdl")
	}
	
	return PLUGIN_CONTINUE
}

public pokaz()
{
	if(get_cvar_num("amx_larsmodel"))
	{
		client_print(0, print_chat, "uruchomiony")
	}
	
	else
	{
		client_print(0, print_chat, "zatrzymany")
	}
	
	set_task(2.0,"pokaz")
}

Tak napisany kod działa. Oczywiście można teraz usunąć funkcje pokaz(), która tylko była kontrolna. Teraz jak cvar amx_larsmodel 1 to pobiera, jak na 0 to nie pobiera.

Temat do zamknięcia, rozdam + i do domu :P
Dzięki wszystkim za sugestie i pomoc

To nie może działać. Powód? Jak chcesz sprawdzić wartość CVAR'a, przed tym jak go utworzysz ?

#20 wizu

    Godlike

  • Przyjaciel

Reputacja: 224
Profesjonalista

  • Postów:1 217
  • GG:
  • Lokalizacja:Sanok
Offline

Napisano 27.11.2008 16:45

Jak nie może działać?
Cvar jest tworzony w plugin_init, który jest wykonywany jeden raz na mapę na samym jej początku.
A plugin_precache przy połączeniu gracza. A połączenie musi być po rozpoczęciu mapy. Więc cvar jest już utworzony. Chyba, że źle rozumują, to wyprowadźcie mnie z błędu ;)
@EDIT
Tym powyżej proszę się nie sugerować. Zostawiam tylko dla zachowania ciągłości tematu.


Dodatkowo jeśli by nie tworzyło cvaru, to jego wartość byłą by równa flase, czyli funkcja if by się nie wykonał i w rezultacie nic by się nie ściągało.
  • +
  • -
  • 0




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

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