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

[ROZWIĄZANE] get_mapname, set_task


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

#1 MasterOfGames

    Zaawansowany

  • Zbanowany

Reputacja: 33
Życzliwy

  • Postów:125
  • Lokalizacja:Wierzchucin
Offline

Napisano 09.08.2012 17:53

1. get_mapname
Spoiler

2.set_task
Spoiler


@edit

Co do 2 pytania to chodzi o to że np. mamy:

public ABC(id)
{
set_task(5.0, "AD")
}

to wykona tego taska AD na graczu o indexie == id czy na wszystkich?

Co do 1. to skoro w pawnie tego w ten sposób nie da się zrobić to proszę o przykład jak można to zrobić :)

Użytkownik MasterOfGames edytował ten post 09.08.2012 18:15


#2 G[o]Q

    I'm G[o]Q

  • Przyjaciel

Reputacja: 1 344
Godlike

  • Postów:3 563
  • Steam:steam
  • Imię:Krzysiek
  • Lokalizacja:C: / program Files / Valve / Cstrike / G[o]Q.dem
Offline

Napisano 09.08.2012 18:11

2 pytania nie rozumiem a co do 1 to niestety w pawnie operator == nie zostal przeladowany do takich porównań ale są funkcje equal/equali które własnie do tego służą :D
  • +
  • -
  • 1
Manual ponad wszystko, konsola ponad manual :D :&

Chcesz wysłać do mnie PW ? użyj nazwy GoQ zamiast G[o]Q
Chcesz Kupić moduł płatności via Pukawka,Tserwery, Gamesol, Zabijaka do mojego sklepu? napisz PW cena to tylko 10 zł/sztuka

GG:6022845 (nie pomagam za free osobom ponizej rangi MoD) :D

#3 Klakier

    Volenti non fit iniuria

  • Power User

Reputacja: 391
Wszechpomocny

  • Postów:878
  • GG:
  • Imię:Sebastian
  • Lokalizacja:Mogilno
Offline

Napisano 09.08.2012 18:29


public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_clcmd("say mapa", "Nazwa")
}
public Nazwa(id)
{
new MapName[32] get_mapname(MapName, 31)

if(equali(MapName, "de_dust2"))
{
//dzialania
}
}

G[o]Q (10.08.2012 12:59):
jak ci sie udalo nabić 500 postów i mieć reputacje na + skoro takie glupoty piszesz ??
(10.08.2012 14:18):
Bo nie minusujemy za niepoprawny kod.
Ale to dobrze, bo mało byłoby osób z zieloną reputacją :)

  • +
  • -
  • 0

Sell - System Klanów (wojny, top15 etc)

 

Kontakt GG: 7285018


#4 dasiek

    Nie wiem, nie znam się, nie orientuję się, zarobiony jestem.

  • Junior Admin

Reputacja: 2 077
Godlike

  • Postów:5 706
  • Imię:Adaś
  • Lokalizacja:No teraz trochę dalej od WWy
Offline

Napisano 09.08.2012 18:32

public ABC(id)
{
	    set_task(5.0, "AD")
}

Jak chcesz tego taska wykonać dla jednego musisz wysłać z num parametr id

public ABC(id)
{
	    set_task(5.0, "AD",id)
}

Ale takiego taska można raz wykonać (tzn w tym czasie 5 s nie moze być innych tasków z tym samym ID bo Ci głupoty wyjdą :wstyd: )

jak chcesz dla wszystkich żeby ten task się wykonał zostaw to a w funkcji AD zrób fora ze wszystkimi graczami
G[o]Q (10.08.2012 13:01):
moze tez nie dawać 3 parametru i wtedy funkcja wykona sie z parametrem 0, i np jeśli bedzie chcial wyswietlić w tej funkcji jakieś info to wyswietli sie ono wszystkim ;D

  • +
  • -
  • 1

#5 Gość_21977_*

  • Gość

Reputacja: 0

Offline

Napisano 10.08.2012 03:20

Ad.2. Funkcja task, poza nazwą funkcji do wykonania, wartością czasu i flagami, może przyjąć numer zadania.
Należy uważać, żeby nie stworzyć zadania o numerze innego, już istniejącego.

Numer zadania(opcjonalny 3. parametr funkcji) musi być unikalny ze względów technicznych pawna.
Wiele osób korzystało z tworzenia taska z identyfikatorem równym id gracza.
Szybko odeszli od tego fatalnego pomysłu, tworząc równie złe rozwiązanie, do numeru gracza dodawali pewną, unikalną liczbę,
następnie odejmując ją w momencie wykonywania zadania. Niestety, liczby te, o ile nie są oddalone o minimum maksymalną możliwą liczbę graczy na serwerze,
to mogą prowadzić do nieprzewidzianych skutków, ingerując w taski z innej funkcji, a następnie próbując dwukrotnie dodać, bądź odjąć zadanie,
co powoduje w nieprzewidzianych momentach, co nieokreślony i trudny do przewidzenia czas, losowe crashe serwera bez error logów.
Wystarczy popatrzeć na dział "Problemy z AMXX / Problemy z HLDS". Wiele z tych nierozwiązanych problemów polega na nieudolnym używaniu kodu typu:
#include <amxmodx>
#include <hamsandwich>
#include <fun>

#define TASK_YEAR 2012

#define TASK_FB 1337
#define TASK_HE 1991
#define TASK_SG 1111

public plugin_init(){
register_plugin("Bad task example", "0.1", "benio101");
RegisterHam(Ham_Spawn, "player", "ham_spawn", 1);
set_task(100.0,"gracz_roku",TASK_YEAR);
}
public ham_spawn(id){
if(is_user_alive(id)){
set_task(5.0,"fb",id+TASK_FB,_,_,"b");
set_task(10.0,"he",id+TASK_HE,_,_,"b");
set_task(20.0,"sg",id+TASK_SG,_,_,"b");
}
}

public gracz_roku(){
client_print(0,print_chat,"Graczem roku zostal Haxi0r! Gratulacje!");
}

public fb(id){
id-=TASK_FB;
if(is_user_alive(id)){
give_item(id,"item_flashbang");
} else {
remove_task(id+TASK_FB);
}
}

public he(id){
id-=TASK_HE;
if(is_user_alive(id)){
give_item(id,"item_hegrenade");
} else {
remove_task(id+TASK_HE);
}
}

public sg(id){
id-=TASK_SG;
if(is_user_alive(id)){
give_item(id,"item_smokegrenade");
} else {
remove_task(id+TASK_SG);
}
}
Stąd zalecam wysyłać parametry jako tablicę, wraz z podaniem jej wielkości, by zapobiec niespodziewanym crashom serwera bez errorlogów.
Dokładne informacje, jak przesyłać parametry znajdują się m.in. w tym dziale.

Jeśli w kodzie powyżej, poza oczywistym brakiem usunięcia tasku w przypadku końca rundy, nie widzisz innych błędów, to oznacza, że jesteś podatny na wyżej opisany przypadek.

Ad.1. Do porównania służy funkcja equal
if(equal(nazwa_mapy,"de_dust2"))


#6 MasterOfGames

    Zaawansowany

  • Autor tematu
  • Zbanowany

Reputacja: 33
Życzliwy

  • Postów:125
  • Lokalizacja:Wierzchucin
Offline

Napisano 10.08.2012 08:29

Wielkie dzięki, te pytania już mnie nie męczą, ale przypomniałem sobie o czym innym jeszcze :)
Pytania dotyczą zmiennych.
1. Jak zapisać do zmiennej co gracz wpisał w konsoli?
2.
Jeśli się nie myle to można utworzyć zmienną o kilku różnych wartościach w ten sposób
new zmienna = { 1, 2 }

Ale jak w pluginie w jakiejś funkcji dodać do niej tak żeby była równa 3 wartościom czyli:
[sma]zmienna = { 1, 2, 3 }
Tylko chodzi mi żeby dodać do niej coś a nie zmieniać wartość na podaną

#7 speedkill

    Godlike

  • Przyjaciel

Reputacja: 1 592
Godlike

  • Postów:2 733
  • GG:
  • Steam:steam
  • Imię:Michał
  • Lokalizacja:Prudnik
Offline

Napisano 10.08.2012 08:34

1.Nie da się pobrać co gracz pisze w konsoli.
2.
new zmienna[3] = {1, 2, 3}
zmienna[0] = 1 | zmienna[1] = 2 | zmienna[2] = 3

  • +
  • -
  • 1

If you can dream it, you can do it.


#8 dasiek

    Nie wiem, nie znam się, nie orientuję się, zarobiony jestem.

  • Junior Admin

Reputacja: 2 077
Godlike

  • Postów:5 706
  • Imię:Adaś
  • Lokalizacja:No teraz trochę dalej od WWy
Offline

Napisano 10.08.2012 08:35

2 - musisz zrobić tablicę

new zmienna[3] = {1,2,3};

w tym [] jest liczba która oznacza ile ma być elementów w tablicy
  • +
  • -
  • 1

#9 MasterOfGames

    Zaawansowany

  • Autor tematu
  • Zbanowany

Reputacja: 33
Życzliwy

  • Postów:125
  • Lokalizacja:Wierzchucin
Offline

Napisano 10.08.2012 09:00

Dzięki, a co do 1. pytam bo widziałem plugin który zwraca PLUGIN_HANDLED gdy gracz wpisze /cokolwiek, i chciałem samemu to spróbować

#10 dasiek

    Nie wiem, nie znam się, nie orientuję się, zarobiony jestem.

  • Junior Admin

Reputacja: 2 077
Godlike

  • Postów:5 706
  • Imię:Adaś
  • Lokalizacja:No teraz trochę dalej od WWy
Offline

Napisano 10.08.2012 09:27

#include <amxmodx>
#include <amxmisc>
#define PLUGIN "New Plug-In"
#define VERSION "1.0"
#define AUTHOR "author"
new teksty[][] =
{
"say /cokolwiek"
}
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)

for(new i = 0; i< sizeof teksty;i++)
  register_clcmd(teksty[i],"Blokada")
}
public Blokada(id)
return PLUGIN_HANDLED;


Wystarczy że zarejestrujesz komende i dodasz do jej "Handla" return PLUGIN_HANDLED
  • +
  • -
  • 1

#11 MasterOfGames

    Zaawansowany

  • Autor tematu
  • Zbanowany

Reputacja: 33
Życzliwy

  • Postów:125
  • Lokalizacja:Wierzchucin
Offline

Napisano 10.08.2012 11:12

Tyle to i sam wiem, ale był plugin który blokował zawsze jak wpisałeś / np. piszesz /cos, /item, /abc, /linka, /siemka, to żadno z tych się nie wyświetli, a skoro nie ma możliwości pobrania do zmiennej tego co gracz napisał w konsoli, to jak działa u@ ???

#12 Gość_21977_*

  • Gość

Reputacja: 0

Offline

Napisano 10.08.2012 11:20

#include <amxmodx>

public plugin_init() {
register_plugin("Slash commands ignore", "1.0", "benio101");
register_clcmd("say", "HandleSay");
}

public HandleSay(id){
new Speech[192];
read_args(Speech,192);
remove_quotes(Speech);

if(equal(Speech, "/",1)){
return PLUGIN_HANDLED;
}

return PLUGIN_CONTINUE;
}
Funkcja nie wyświetli żadnych napisów, które zaczynają się slashem
/


#13 Klakier

    Volenti non fit iniuria

  • Power User

Reputacja: 391
Wszechpomocny

  • Postów:878
  • GG:
  • Imię:Sebastian
  • Lokalizacja:Mogilno
Offline

Napisano 10.08.2012 11:31

Ad.1. Do porównania służy funkcja equal

if(equal(nazwa_mapy,"de_dust2"))


może być też equali, ponieważ equali nie zwraca uwagi na wielkość liter ;]
  • +
  • -
  • 1

Sell - System Klanów (wojny, top15 etc)

 

Kontakt GG: 7285018


#14 MasterOfGames

    Zaawansowany

  • Autor tematu
  • Zbanowany

Reputacja: 33
Życzliwy

  • Postów:125
  • Lokalizacja:Wierzchucin
Offline

Napisano 10.08.2012 11:33

thx za pomoc, tera wszystko czaje

#15 Gość_21977_*

  • Gość

Reputacja: 0

Offline

Napisano 10.08.2012 11:43

Wiadomość wygenerowana automatycznie


Ten temat został zamknięty przez moderatora.

Powód: Pomoc udzielona

Jeśli się z tym nie zgadzasz, Dołączona grafika raportuj ten post, a moderator lub administrator rozpatrzy go ponownie.


Z pozdrowieniami,
Zespół AMXX.PL

#16 DarkGL

    Nie oddam ciasteczka !

  • Administrator

Reputacja: 6 555
Godlike

  • Postów:11 981
  • GG:
  • Steam:steam
  • Imię:Rafał
  • Lokalizacja:Warszawa
Offline

Napisano 10.08.2012 15:05

A ja otworzę i ustunkuje się do postu benia ;)

Rozwiązaniem problemu który podałeś czyli zbyt mały offset możemy rozwiązać poprzez

enum ( += 50 ){
TASK_DEATH,
TASK_KILL
}



G[o]Q (10.08.2012 17:03):
a widzisz tam jeszcze jakis błąd oprócz nieusuwania taska ??
speedkill (10.08.2012 18:22):
Tak, zobacz co się stanie z graczem o id równym 21 ;)
(10.08.2012 19:34):
@G[o]Q: naprawdę szykuje się nieprzespana noc?
sebul (10.08.2012 22:14):
Ja zawsze tworzę taski w taki sposób, jak benio odradza, oczywiście robię to tak, że każdy task zawsze ma swóje unikalne ID, czyli chociażby robię tak jak tutaj dark napisał.
G[o]Q (11.08.2012 13:18):
speedkill no co sie stanie ? bedzie co x sekund dostawal granaty

//dark enuma dobrze by zacząć nie od 0 a od np 40 :D
sebul (11.08.2012 13:45):
Spójrz na task
set_task(100.0,"gracz_roku",TASK_YEAR);


A co do enuma, to ja zawsze zaczynam od przynajmniej 1k.
G[o]Q (11.08.2012 14:36):
no i co z tego ?? odpal sobie plugin mozesz sobie zmniejszyć tą róznice i zobaczysz że nic sie nie stanie
(12.08.2012 02:14):
tia ^_- najlepiej do 1 :nuke:
(12.08.2012 02:19):
Jak się zachowa odpowiedni odstęp, jak sebul mówi, to nie ma problemu. Gorzej, jak niektórzy instalują setki pluginów, gdzie połowa ma taski z liczbami typu 8899 czy 8888 i w końcu trafią na ten sam przedział i rozpacz, bo ja mam błędy na serwerze.
(12.08.2012 06:33):
@GOQ: IDEALNY przykład (i na czasie), pokazujący dlaczego OFFSET < maxplayers jest ZŁYM rozwiązaniem.
G[o]Q (12.08.2012 13:56):
taski z różnych pluginów się nie "widzą" bo są to pojednyncze forwardy kiedys o tym pisal R3X i Miczu xD dodatkowo jesli task nie ma flagi "b" lub "a" to nie ma potrzeby jego usuwania bo przestaje on istnieć zaraz po wykonaniu/zarejestrowaniu więc id jest zbędne
(13.08.2012 03:58):
Tam są flagi "b", a wszystko odbywa się w jednym pluginie :o
G[o]Q (13.08.2012 13:25):
ale gracz roku nie ma flagi "b"
sebul (13.08.2012 13:39):
Gracz roku nie ma flagi b, ale inny task jeśli zostanie usunięty, to i task z graczem roku zostanie usunięty. Nie jest to jakiś duży błąd, ale jednak jest i o to chyba tutaj chodzi.
G[o]Q (13.08.2012 14:25):
to ze taski zostaną usunięte to normalne ale błędów nie będzie
G[o]Q (13.08.2012 14:25):
to ze taski zostaną usunięte to normalne ale błędów nie będzie

  • +
  • -
  • 0

#17 Gość_21977_*

  • Gość

Reputacja: 0

Offline

Napisano 12.08.2012 06:38

@G[o]Q: W temacie Errory w pluginie questy cod mod skończyło się jedynie na wysypisku errorów,
bo nie było remove_entity, ale to i tak poważny błąd, na który zwróciłem uwagę, lecz Ty go bagatelizujesz.

Właśnie widzisz aktualny problem spowodowany nieracjonalnym odstępem w offsetach:

#define ZADANIE_POKAZ_HUD 666
#define ZADANIE_POKAZ_DOLARY 672


Gdyby różmnica między tymi offsetami była większa, niż 10 i wynosiła np. 50, to problemu by nie było,
mam nadzieję, że ten przykład wystarczy, aby Cię przekonać, że zbyt mały offset często winny jest błędom.




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

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