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

run time 10 error


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

#1 wheypro

    Pomocny

  • Zbanowany

Reputacja: -25
Masakra

  • Postów:74
  • Lokalizacja:Zakaz podawania adresów stron w polu "Lokalizacja" itp.
Offline

Napisano 02.02.2013 14:10

Zrobiłem plugin co ma za zadanie zablokować wpisanie na sayu pewnej komendy ktor odpala pewną zabawę, jesli juz 1 z zabaw jest włączona. Niestety wywala mi błąd, dodaje debug i nic to nie pomaga ;/

L 02/07/2013 - 13:49:16: Invalid message id
L 02/07/2013 - 13:49:16: [AMXX] Displaying debug trace (plugin "blokadazabaw.amxx")
L 02/07/2013 - 13:49:16: [AMXX] Run time error 10: native error (native "set_msg_block")
L 02/07/2013 - 13:49:16: [AMXX] [0] blokadazabaw.sma::pre (line 27)
shs : /prezydent

/* Plugin generated by AMXX-Studio */

#include <amxmodx>
#include <amxmisc>
#include <engine>

#define PLUGIN "New Plug-In"
#define VERSION "1.0"
#define AUTHOR "tomek"

new bool:zabawaaktywna


public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
register_clcmd("say /prezydent", "pre")
register_clcmd("say /killday", "kdks")
register_clcmd("say /ganiany", "ganik")
register_clcmd("say /chowany", "chowa")


}
public pre(id){
zabawaaktywna = true

if(zabawaaktywna==true){
set_msg_block( get_user_msgid( "/prezydent" ) , BLOCK_SET );
client_print(id, print_chat, "Jest juz jakas zabawa aktywna")

}
return PLUGIN_HANDLED
}
public kdks(id){
zabawaaktywna = true

if(zabawaaktywna==true){
set_msg_block( get_user_msgid( "/killday" ) , BLOCK_SET );
client_print(id, print_chat, "Jest juz jakas zabawa aktywna")

}
return PLUGIN_HANDLED
}
public ganik(id){
zabawaaktywna = true

if(zabawaaktywna==true){

set_msg_block( get_user_msgid( "/ganiany" ) , BLOCK_SET );
client_print(id, print_chat, "Jest juz jakas zabawa aktywna")

}
return PLUGIN_HANDLED
}
public chowa(id){
zabawaaktywna = true

if(zabawaaktywna==true){

set_msg_block( get_user_msgid( "/chowany" ) , BLOCK_SET );
client_print(id, print_chat, "Jest juz jakas zabawa aktywna")

}
return PLUGIN_HANDLED
}


#2 cherriEE

    Pomocny

  • Użytkownik

Reputacja: 8
Nowy

  • Postów:57
  • Imię:Oskar
  • Lokalizacja:Warszawa
Offline

Napisano 08.02.2013 00:39

#include <amxmodx>
#include <amxmisc>
#include <engine>
#include <core> //zapomniałeś dać tej biblioteki, z której funkcji korzystasz :D set_msg_block jest właśnie z niej
  • +
  • -
  • 0

#3 d0naciak

    Godlike

  • Power User

Reputacja: 1 029
Hero

  • Postów:2 414
  • GG:
  • Steam:steam
  • Imię:Dawid
  • Lokalizacja:Kotlarka
Offline

Napisano 08.02.2013 08:24

core podchodzi pod amxmodx.
Co do tematu to plugin ciezko wyglada
przykładowo ja ci pokaże jak wg mnie powinien wyglądać public pre(id)
public pre(id)
{
    if(zabawaaktywna == true)
    {
        client_print(id, print_chat, "Jest juz jakas zabawa aktywna"); //Informacja
        return PLUGIN_HANDLED; // Pominiecie dalszych dzialan funkcji
    }
    zabawaaktywna = true;
    //KOD ZABAWY NA PRZYKLAD
    return PLUGIN_HANDLED
}
Nie muzesz get_user_msgid uzywac do blokowania komend, to bardziej służy do blokowania pewnego rodzaju działań (eventów), a o to ich lista:
http://wiki.amxmodx....e_1_Game_Events
  • +
  • -
  • 0

#4 wheypro

    Pomocny

  • Autor tematu
  • Zbanowany

Reputacja: -25
Masakra

  • Postów:74
  • Lokalizacja:Zakaz podawania adresów stron w polu "Lokalizacja" itp.
Offline

Napisano 08.02.2013 13:01

o matko, mi chodzi oto by zablokować wiadomość na sayu, te zabawy mam wszytskie oddzielnie. Ze zmienną to i ja umiem, ale co ona da ? wyskoczy jedynie komunikacik na sayu ze zabawa aktywna a plugin i tak się właczy....

#5 Gość_21977_*

  • Gość

Reputacja: 0

Offline

Napisano 10.02.2013 15:39

Funkcją get_user_msgid rejestrujesz zdarzenie, których listę znajdziesz tutaj.
/prezydent
niewątpliwie niewystępuje na tej liście, nie jest zatem eventem HL1, co powoduje błąd.

Nie mam pojęcia, co chciałeś uczynić po tak okrojonym kodzie, który załączyłeś, ale nie możesz chwytać, a tym samym blokować eventu, który nie istnieje.
Z tego, co widzę, /prezydent rejestrujesz jako komendę. Nie jest to event silnika HLDS, więc nie możesz tego traktować jako eventu, lecz jako komendę.
Komendy zablokujesz, zwracając PLUGIN_HANDLED, bądź PLUGIN_HANDLED_MAIN.

O komendach pisałem w moim tutorialu komendy_gracza, o zwracanych wartościach poczytasz zaś w tutaj.
Podejrzewam, że w Twoim przypadku, zamierzasz jednak zablokować jakieś wirtualne zdarzenie przez Ciebie zaimplementowane,
bądź wdrożone poprzez inny plugin AMXX, którego, niestety, nam nie załączyłeś. W takim wypadku należy skorzystać z natywów, o których poczytasz tutaj.

Na koniec dodam, że przypisywanie zmiennej wartości prawdy, a następnie sprawdzanie, czy jest ona prawdziwa, jest irracjonalne i zbędne.
	zabawaaktywna = true

if(zabawaaktywna==true){
set_msg_block( get_user_msgid( "/prezydent" ) , BLOCK_SET );
client_print(id, print_chat, "Jest juz jakas zabawa aktywna")

}


Podejrzewam, że mamy tutaj do czynienia z Problemem XY, dlatego poproszę Ciebie o kod pluginu od zabaw i o dokładną informację, co zamierzasz uzyskać (zablokować) i dokładnie kiedy.
Innymi słowy, podaj nam algorytm, który zamierzasz wdrożyć, a pomożemy Ci go zaimplementować.

Użytkownik benio101 edytował ten post 10.02.2013 15:39
lit.


#6 wheypro

    Pomocny

  • Autor tematu
  • Zbanowany

Reputacja: -25
Masakra

  • Postów:74
  • Lokalizacja:Zakaz podawania adresów stron w polu "Lokalizacja" itp.
Offline

Napisano 10.02.2013 15:57

powiem jeszcze raz, ale wreszcie jakies konkrety. Kolega ma pluginy zabaw, wszytskie odzielnie: Ganiany/chowany/ganiany i prezydent. Teraz założmy że w ct siedzą jakieś dzieci i rajcucje ich zabijanie za nic, właczanie wielu zabaw naraz. Jeden z nich włącza ganianego komendą /ganiany. I wtedy już nie można włączyć innych zabaw, takiemu dziecku wyskoczy ze "Jakas zabawa jest juz aktywna". To co mi dałeś don the proo to niby co to jest?? jedynie wyskoczy komunikacik ze "zabawa jest juz aktywna" a i tak będzie mozna wszytskie zabawy włączyć. Proszę mi też nie dawać porad typu by wszytskie zabawy zrobic w 1 pluginiec i wtedy zmienną to blokować, bo to zadna sztuka gdybym miał .sma ganiaka i chowańca.

#7 Gość_21977_*

  • Gość

Reputacja: 0

Offline

Napisano 10.02.2013 16:03

Nie mam pojęcia, kim są dzieci, zabawy, prezydent, ani ganiany, bo domyślnie tego w CSie nie ma.
Cieszę się, że kolega posiada ten plugin, my (nie)stety go nie posiadamy, a nikt wróżką nie jest i Ci nie wywróży, jak on ma działać.
Napisałem Ci, gdzie popełniłeś błąd i jak go naprawić oraz co zrobić, by zablokować "wiele zabaw naraz".

Jeśli dalej nie zamierzasz podać kodu i upierasz się, że wiesz lepiej, to temat można zamknąć, bo nie jesteśmy w stanie Ci pomóc,
przynajmniej nie na poziomie godnym implementacji, bo teoretycznie można blokować komendy, co jednak jest tragicznym rozwiązaniem,
bo każdorazowo wysyłane są niepotrzebnie informacje poprzez metamoda:P oraz silnik HLDS, czego Ci absolutnie odradzam.

Użytkownik benio101 edytował ten post 10.02.2013 16:04
lit.


#8 wheypro

    Pomocny

  • Autor tematu
  • Zbanowany

Reputacja: -25
Masakra

  • Postów:74
  • Lokalizacja:Zakaz podawania adresów stron w polu "Lokalizacja" itp.
Offline

Napisano 10.02.2013 16:53

chodzi oto by jeśli 1 z nich wpiszemy
/ganiany
/chowany
/prezydent
/killday
To w tej samej rundzie juz jak wpiszemy któreś z nich to silnik gry tak jakby tego nie zauważy

#9 Gość_21977_*

  • Gość

Reputacja: 0

Offline

Napisano 10.02.2013 17:10

#include <amxmodx>

new cmds[][]={
"prezydent",
"killday",
"ganiany",
"chowany"
}, bool:allow;

public plugin_init(){
new cmd[192];
for(new i; i<sizeof cmds; ++i){
copy(cmd, 191, "say /");
add(cmd, 191, cmds[i]);
register_clcmd(cmd, "zabawa");
}

register_logevent("allowPlay", 2, "1=Round_Start");
}

public zabawa(){
if(allow){
allow=false;
return PLUGIN_CONTINUE;
}
return PLUGIN_HANDLED;
}

public allowPlay(){
allow=true;
}


Przy czym, jak już mówiłem, jest to rozwiązanie bardzo nieoptymalne, gdyż informacje niepotrzebnie są przesyłane pomiędzy AMXX, metamodem:P, HLDSem oraz klientem gry.

#10 Kawon

    Godlike

  • Przyjaciel

Reputacja: 887
Czempion

  • Postów:5 165
  • Steam:steam
  • Imię:Paweł
  • Lokalizacja:Dzierzgoń
Offline

Napisano 11.02.2013 23:25

Wiadomość wygenerowana automatycznie


Ten temat został zamknięty przez moderatora.

Powód: Autor tematu zbanowany

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
  • +
  • -
  • 0

DarkGL to mój autorytet.





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

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