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

Pytanie do return PLUGIN_


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

#1 Filip1512

    Wszechmogący

  • Power User

Reputacja: 136
Zaawansowany

  • Postów:641
  • Steam:steam
  • Imię:Filip
  • Lokalizacja:Poland
Offline

Napisano 06.12.2012 18:54

Cześć :)
Mam pytanie dotyczące funkcji return. W moim pluginie użyłem go w taki sposób, że

public BlockCmd(id){
if(get_cvar_num("nazwa_cvaru") == 1)

return PLUGIN_HANDLED;
}


Lecz przy kompilacji wyskakuje błąd:

Warning: Function "BlockCmd" should return a value on line 45


(linijka 45 jest ostatnią linijką, klamrą)

return PLUGIN_HANDLED; jest użyte na końcu przed ostatnią klamrą zamykającą, więc o co tu może chodzić? Nawet, jeśli zrobię takie coś (to była początkowa wersja):

public BlockCmd(id){
if(get_cvar_num("nazwa_cvaru") == 1)
return PLUGIN_HANDLED;
else if(get_cvar_num("nazwa_cvaru") != 1)
return PLUGIN_CONTINUE;
}


To rezultat jest taki sam.

Użytkownik `NN edytował ten post 06.12.2012 19:01

  • +
  • -
  • 0
Filip / `NN
Wymuszanie rate'ów co spawna - update v2.1!

#2 K!113r

    Czempion

  • Power User

Reputacja: 385
Wszechpomocny

  • Postów:865
  • GG:
  • Steam:steam
  • Imię:Mateusz
  • Lokalizacja:Piotrków Tryb.
Offline

Napisano 06.12.2012 18:59

Jeżeli w warunku coś zwracasz to na końcu tej funkcji też musisz coś zwracać (aby nie blokować użyj return PLUGIN_CONTINUE).
  • +
  • -
  • 2

DarkGL to mój autorytet.

skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować


#3 Filip1512

    Wszechmogący

  • Autor tematu
  • Power User

Reputacja: 136
Zaawansowany

  • Postów:641
  • Steam:steam
  • Imię:Filip
  • Lokalizacja:Poland
Offline

Napisano 06.12.2012 19:02

Można jaśniej?
Mam poprostu dopisać na końcu return PLUGIN_CONTINUE;, czyli coś takiego?


public BlockCmd(id){
if(get_cvar_num("nazwa_cvaru") == 1)
return PLUGIN_HANDLED;
else if(get_cvar_num("nazwa_cvaru") != 1)
return PLUGIN_CONTINUE;

return PLUGIN_CONTINUE;
}


Jeśli tak, to nie działa (to samo).


//edit

A jednak już nie ma błędu, nie spojrzałem na błąd, a to już był akurat odstęp (tab) :P
Dzięki.

Użytkownik `NN edytował ten post 06.12.2012 19:05

  • +
  • -
  • 0
Filip / `NN
Wymuszanie rate'ów co spawna - update v2.1!

#4 speedkill

    Godlike

  • Przyjaciel

Reputacja: 1570
Godlike

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

Napisano 06.12.2012 19:05

Na przykład tak:

public BlockCmd(id){
	if(get_cvar_num("nazwa_cvaru") == 1){
		//Kod
	}
	else{
		//Kod
	}
	return PLUGIN_CONTINUE;
}

  • +
  • -
  • 2

If you can dream it, you can do it.


#5 Filip1512

    Wszechmogący

  • Autor tematu
  • Power User

Reputacja: 136
Zaawansowany

  • Postów:641
  • Steam:steam
  • Imię:Filip
  • Lokalizacja:Poland
Offline

Napisano 06.12.2012 19:59

Dzięki :)
Teraz mam tak:

public BlockCmd(id){
if(get_cvar_num("nazwa_cvaru") == 1){
ColorChat(id, BLUE, "Ta komenda jest zablokowana")
console_print(id, "Ta komenda jest zablokowana")
return PLUGIN_HANDLED;
}

else if(get_cvar_num("nazwa_cvaru") != 1)
return PLUGIN_CONTINUE;

return PLUGIN_CONTINUE;
}


Czemu pisząc w konsoli komendę podaną do blokady nie wypisuje mi się informacja o tym ani w konsoli ani na czacie?
  • +
  • -
  • 0
Filip / `NN
Wymuszanie rate'ów co spawna - update v2.1!

#6 speedkill

    Godlike

  • Przyjaciel

Reputacja: 1570
Godlike

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

Napisano 06.12.2012 20:02

Daj cały kod, oraz sprawdź czy wartość cvara 'nazwa_cvaru' wynosi 1 ;)
  • +
  • -
  • 0

If you can dream it, you can do it.


#7 CheQ

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

  • Junior Admin

Reputacja: 1984
Godlike

  • Postów:5534
  • Imię:Adaś
  • Lokalizacja:Glinianka
Offline

Napisano 06.12.2012 20:13

Jak się mam czepiać to się czepnę optymalnosci kodu :P
public BlockCmd(id){
	    if(get_cvar_num("nazwa_cvaru") == 1)
	    {
			    ColorChat(id, BLUE, "Ta komenda jest zablokowana")
			    console_print(id, "Ta komenda jest zablokowana")
			    return PLUGIN_HANDLED;
	    }

	    return PLUGIN_CONTINUE;
}

to w zupełności wystarczy. ;)
Twój kod wykona Jeśli "coś" to "coś" i zwróć jeśli nie to jeśli "coś" to zwróć to co zwracasz na końcu i zwróć na końcu. Nie łątwiej zrobić Jeśli coś to "coś i zwróć" i na końcu dodać zwracanie (taki jakby inny else) ;)
  • +
  • -
  • 2

b_560_95_1.png


#8 Filip1512

    Wszechmogący

  • Autor tematu
  • Power User

Reputacja: 136
Zaawansowany

  • Postów:641
  • Steam:steam
  • Imię:Filip
  • Lokalizacja:Poland
Offline

Napisano 06.12.2012 22:23

CheQ, właśnie to też chciałem zrobić, ale pomyślałem sobie, że będzie mniej optymalne, ale jednak się myliłem widzę :P

#include <amxmodx>
#include <hamsandwich>
#include <ColorChat>

#define PLUGIN "Rate'y + HUDMSG"
#define VERSION "2.0"
#define AUTHOR "Filip / `NN"

new gSyncHudMsg1

public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
RegisterHam(Ham_Spawn, "player", "raty", 1);
set_task(120.0, "hudmsg", _, _, _, "b")

register_cvar("rate_block", "1")

register_clcmd("rate", "BlockCmd")
register_clcmd("cl_cmdbackup", "BlockCmd")
register_clcmd("cl_cmdrate", "BlockCmd")
register_clcmd("cl_updaterate", "BlockCmd")
register_clcmd("ex_interp", "BlockCmd")

gSyncHudMsg1 = CreateHudSyncObj();
}

public raty (id)
{
client_cmd( id , "rate 25000" )
client_cmd( id , "cl_cmdbackup 2" )
client_cmd( id , "cl_cmdrate 101" )
client_cmd( id , "cl_updaterate 101" )
client_cmd( id , "ex_interp 0.01" )
}

public hudmsg()
{
set_hudmessage(255, 100, 10, 0.1, 0.7, 0, 6.0, 9.0, 0.0, 0.0, 2)
ShowSyncHudMsg(0, gSyncHudMsg1, "Twoj interp zostal ustawiony na 0.01")
}

public BlockCmd(id){
if(get_cvar_num("rate_block") == 1){
ColorChat(id, BLUE, "[rate] ^x01Zmiana ustawien RATE jest ZABLOKOWANA!")
console_print(id, "[rate] Zmiana ustawien RATE jest ZABLOKOWANA!")
return PLUGIN_HANDLED;
}

return PLUGIN_CONTINUE;
}



Takie coś ma prawo działać?

I jeszcze jedno - czy istnieje możliwość zrobienia tego w tablicy? Chodzi mi o dodanie takiego czegoś:

new komendy[][] = {"rate", "cl_cmdbackuo", "cl_cmdrate", "cl_updaterate", "ex_interp"}

Użytkownik `NN edytował ten post 06.12.2012 22:33

  • +
  • -
  • 0
Filip / `NN
Wymuszanie rate'ów co spawna - update v2.1!

#9 K!113r

    Czempion

  • Power User

Reputacja: 385
Wszechpomocny

  • Postów:865
  • GG:
  • Steam:steam
  • Imię:Mateusz
  • Lokalizacja:Piotrków Tryb.
Offline

Napisano 06.12.2012 23:01

Twoja tablica + pętla (np. for) i do rejestracji jak znalazł, kod będzie krótszy. Natomiast musiałbyś gdzieś jeszcze mieć wartości tych komend, np. w osobnej tablicy i sklejać w funkcji raty() (oczywiście pętla też będzie tutaj potrzebna).
  • +
  • -
  • 0

DarkGL to mój autorytet.

skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować


#10 Filip1512

    Wszechmogący

  • Autor tematu
  • Power User

Reputacja: 136
Zaawansowany

  • Postów:641
  • Steam:steam
  • Imię:Filip
  • Lokalizacja:Poland
Offline

Napisano 06.12.2012 23:16

Pętla by wyglądała np. tak ?

for(i=0 ; i < sizeOf(komendy) ; i++)


I co z nią w dalszym ciągu zrobić? Dodać do public raty(id)?
  • +
  • -
  • 0
Filip / `NN
Wymuszanie rate'ów co spawna - update v2.1!

#11 AztekHQS

    Banned

  • Zbanowany

Reputacja: 98
Zaawansowany

  • Postów:279
  • Lokalizacja:Polska
Offline

Napisano 07.12.2012 02:31

I jeszcze jedno - czy istnieje możliwość zrobienia tego w tablicy? Chodzi mi o dodanie takiego czegoś:

new komendy[][] = {"rate", "cl_cmdbackuo", "cl_cmdrate", "cl_updaterate", "ex_interp"}


new static komendy[][] = { "rate", "cl_cmdbackuo", "cl_cmdrate", "cl_updaterate", "ex_interp" }


public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)

RegisterHam(Ham_Spawn, "player", "raty", 1)
set_task(120.0, "hudmsg", .flags="b")

register_cvar("rate_block", "1")

gSyncHudMsg1 = CreateHudSyncObj()

for(new i = 0; i < sizeof komendy; i++)
register_clcmd(komendy[i], "BlockCmd")
}

?

Użytkownik AztekHQS edytował ten post 07.12.2012 02:32

Najlepszy serwer JailBreak!
IP: 31.186.83.208:27043
Dołączona grafika

#12 Filip1512

    Wszechmogący

  • Autor tematu
  • Power User

Reputacja: 136
Zaawansowany

  • Postów:641
  • Steam:steam
  • Imię:Filip
  • Lokalizacja:Poland
Offline

Napisano 07.12.2012 15:20

Jaka jest różnica między static a const? (zapomniałem tam const dopisać w sma)

Użytkownik `NN edytował ten post 07.12.2012 15:22

  • +
  • -
  • 0
Filip / `NN
Wymuszanie rate'ów co spawna - update v2.1!

#13 speedkill

    Godlike

  • Przyjaciel

Reputacja: 1570
Godlike

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

Napisano 07.12.2012 15:32

http://pl.wikipedia....ienna_statyczna
http://pl.wikibooks....enne#Sta.C5.82e
  • +
  • -
  • 0

If you can dream it, you can do it.


#14 Filip1512

    Wszechmogący

  • Autor tematu
  • Power User

Reputacja: 136
Zaawansowany

  • Postów:641
  • Steam:steam
  • Imię:Filip
  • Lokalizacja:Poland
Offline

Napisano 07.12.2012 15:43

Czyli jak użyję const to mogę danej tablicy(w tym przypadku) użyć tylko w 1 funkcji, a static w wielu, tak ?

Jak można to prosiłbym o przykład, bo ja jestem wzrokowcem (inny niż na wiki) :P

Użytkownik `NN edytował ten post 07.12.2012 15:44

  • +
  • -
  • 0
Filip / `NN
Wymuszanie rate'ów co spawna - update v2.1!

#15 Droso

    Dawniej HubertTM

  • Support Team

Reputacja: 1279
Godlike

  • Postów:2371
  • Steam:steam
  • Imię:Hubert
  • Lokalizacja:Tomaszów Mazowiecki
Offline

Napisano 07.12.2012 16:04

static tworzy się w funkcji czym się różni od const i innych?
No tym, że tworzy się go w funkcji oraz gdy funkcja się zakończy to ten static dalej istnieje! Można powiedzieć, że jest to jak zmienna globalna dla jednej funkcji przechowuje poprzedni wynik.

const to zależy czy tworzysz jako globalna czy nie.
Ciężko to wytłumaczyć, ale static i const to w ogóle inne zmienne.
W const najczęściej się tekst przechowuje, a w static to co zadeklarujesz.
Popatrz sobie na const np. w cod modzie tam są nazwy klas
new const klasy_gracza[][] = { "klasa1", "klasa2" }
Właśnie w const robi się opisy itemów etc.
Jak widzisz są takie nawiasy [][]
Pierwsze nawiasy [] - to tutaj wpisujesz, którą klasę wybierasz. (numer), jak wpiszę 0 to klasa1 jak 1 to klasa2 :D lub jak tworzysz tą zmienną dopiero to tutaj wpisujesz ile const ma klas w sobie, jak zostawisz puste nie masz ograniczenia i możesz tworzyć ile chcesz, w drugim jest tak samo.
Drugie nawiasy [] - tutaj raczej jak tworzysz to piszesz ile maxymalnie ma znaków klasa, takto dalej się tego nie używa ;)
Jak zostawiasz puste

Użytkownik HubertTM edytował ten post 07.12.2012 16:06

  • +
  • -
  • 1

Piszę pluginy pod: AMX MOD X oraz SOURCE MOD!

Na zlecenie i bez zlecenia zresztą też!


#16 CheQ

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

  • Junior Admin

Reputacja: 1984
Godlike

  • Postów:5534
  • Imię:Adaś
  • Lokalizacja:Glinianka
Offline

Napisano 07.12.2012 16:14

new const zmienna = 1;
zmiena = 10;

Wywali błąd.

co do static to bardzo łatwo to przekazać jak operujesz na klasach - Tworząc kilka klas zmienna z przedroskiem static będzi taka sama w każdej. Jak w każdej klasie będziesz dodawał jeden wyjdzie Ci ile masz Klas tak dla przykładu.
  • +
  • -
  • 2

b_560_95_1.png


#17 DarkGL

    Nie oddam ciasteczka !

  • Administrator

Reputacja: 6033
Godlike

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

Napisano 07.12.2012 16:23

static i const w takim zastosowaniu są to właściwości zmiennej
const oznacza że wartość zmiennej nie może być zmieniana w programie / pluginie
warto pamiętać że jest to realizowane tylko przez kompilator w czasie kompilacji , wartość takiej zmiennej można zmienić poprzez np. operacje bezpośrednio na pamięci

static umieszcza zmienną w specjalnym obszarze pamięci http://en.wikipedia.org/wiki/.bss
dzięki temu zmienna po zakończeniu działania kodu w którym jest umieszczona ( funkcji etc. ) nie jest niszczona i usuwana z pamięci ale jej wartość zostaje zapamiętana i możemy się do niej odwołać w kolejnych instancjach kodu
  • +
  • -
  • 2

#18 Filip1512

    Wszechmogący

  • Autor tematu
  • Power User

Reputacja: 136
Zaawansowany

  • Postów:641
  • Steam:steam
  • Imię:Filip
  • Lokalizacja:Poland
Offline

Napisano 07.12.2012 18:35

Czyli takie coś ma prawo już działać ?

#include <amxmodx>
#include <hamsandwich>
#include <ColorChat>

#define PLUGIN "Rate'y + HUDMSG"
#define VERSION "2.0"
#define AUTHOR "Filip / `NN"

new static komendy[][] = {"rate", "cl_cmdbackup", "cl_cmdrate", "cl_updaterate", "ex_interp"}

new gSyncHudMsg1

public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
RegisterHam(Ham_Spawn, "player", "raty", 1);
set_task(120.0, "hudmsg", _, _, _, "b")

register_cvar("rate_block", "1")

for(id=0 ; id < sizeof komendy ; id++)
register_clcmd(komendy[id], "BlockCmd")

gSyncHudMsg1 = CreateHudSyncObj();
}

public raty (id)
{
client_cmd( id , "rate 25000" )
client_cmd( id , "cl_cmdbackup 2" )
client_cmd( id , "cl_cmdrate 101" )
client_cmd( id , "cl_updaterate 101" )
client_cmd( id , "ex_interp 0.01" )
}

public hudmsg()
{
set_hudmessage(255, 100, 10, 0.1, 0.7, 0, 6.0, 9.0, 0.0, 0.0, 2)
ShowSyncHudMsg(0, gSyncHudMsg1, "Twoj interp zostal ustawiony na 0.01")
}

public BlockCmd(id){
if(get_cvar_num("rate_block") == 1){
ColorChat(id, BLUE, "[rate] ^x01Zmiana ustawien RATE jest ZABLOKOWANA!")
console_print(id, "[rate] Zmiana ustawien RATE jest ZABLOKOWANA!")
return PLUGIN_HANDLED;
}

return PLUGIN_CONTINUE;
}


Nie będzie się to gryzło z wymuszanymi ustawieniami przez plugin?
CheQ (07.12.2012 18:49):
Nie powinno aczkolwiek proponowałbym użycie const zamiast static

Użytkownik `NN edytował ten post 07.12.2012 18:35

  • +
  • -
  • 0
Filip / `NN
Wymuszanie rate'ów co spawna - update v2.1!

#19 AztekHQS

    Banned

  • Zbanowany

Reputacja: 98
Zaawansowany

  • Postów:279
  • Lokalizacja:Polska
Offline

Napisano 08.12.2012 05:11

Ja bym zamiast Ham_Spawn użył CmdStart :)
#include <amxmodx>
#include <fakemeta>

#define PLUGIN "Rate'y + HUDMSG"
#define VERSION "2.0"
#define AUTHOR "Filip / `NN" // + AztekHQS :)

new static komendy[][] = { "rate", "cl_cmdbackup", "cl_cmdrate", "cl_updaterate", "ex_interp" }
new hud

public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)

register_forward(FM_CmdStart, "RealStartCMD")

set_task(120.0, "hudmsg", .flags="b")

hud = CreateHudSyncObj()
}

public RealStartCMD(id, uc_handle) {
if(is_user_connected(id)) client_cmd(id, "%s; %s; %s; %s; %s", komendy[0], komendy[1], komendy[2], komendy[3], komendy[4])

return 2
}

public hudmsg() {
set_hudmessage(255, 100, 10, 0.1, 0.7, 0, 6.0, 9.0, 0.0, 0.0, 2)
ShowSyncHudMsg(0, hud, "Twoj interp zostal ustawiony na 0.01")
}

Komendy ze zmiennej ustawione są cały czas u klienta, jeśli klient zmieni wartość tych komend to i tak nic nie da :)
Więc blokada komend jest już zbędna :D

Użytkownik AztekHQS edytował ten post 08.12.2012 05:16

Najlepszy serwer JailBreak!
IP: 31.186.83.208:27043
Dołączona grafika

#20 GwynBleidD

    Godlike

  • Administrator

Reputacja: 1849
Godlike

  • Postów:3066
  • Steam:steam
  • Lokalizacja:Przemyśl
Offline

Napisano 08.12.2012 09:17

Static używamy dla zmiennych lokalnych, a nie globalnych i działa tak:
public client_disconnect(id) {
static i=0; // Tworzymy zmienną statyczną, z początkową wartością równą zero. Wartość ta zostanie wpisana przy pierwszym tworzeniu tej zmiennej, a nie przy każdym wejściu w tą funkcję!
i++; // Inkrementacja zmiennej;
client_print(0, print_chat, "Serwer opuscilo już %d osob", i);
}

Przy każdym wyjściu gracza z serwera będzie nam się pokazywać większa wartość :)

W tym przypadku prawidłowo jest użyć const. Const powoduje, że zmiennej nie możemy później edytować, nie możemy wykonać operacji na niej żadnej. Jest to wtedy tzw stała, tak jak w matematyce. Liczba Pi ma wartość 3,14.... i tego nie zmienisz, tak samo tutaj jeśli użyjesz const i=10; to i będzie 10 i tego już nie zmienisz (znaczy jak benio napisał, da się ale na tym etapie nauki programowania możesz przyjąć, że nie). Const przydaje się jeśli chcemy mieć pewność, że gdzieś w programie przez przypadek sobie zmiennej nie edytujemy :)
  • +
  • -
  • 3
NIE pomagam na PW. Nie trudź się, na zlecenia nie odpiszę... Od pomagania jest forum.
NIE zaglądam w tematy wysłane na PW. Jeśli są na forum to prędzej czy później je przeczytam. Jeśli mam co w nich odpisać, to odpiszę.
 
1988650.png?theme=dark




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

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