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

#define - o co chodzi?


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

#1 Sniper Elite

    Master

  • Power User

Reputacja: 168
Profesjonalista

  • Postów:981
  • GG:
  • Imię:Konrad
  • Lokalizacja:Skryptolandia
Offline

Napisano 23.05.2011 16:08

Witam. Wiem, że pytanie trochę głupie może, ale za co odpowiadają te cyferki 736 w tym define:

#define ZADANIE_WYSZKOLENIE_SANITARNE 736

potrzebne mi to bo Cod'a modyfikuje.

Dzięki za pomoc.
  • +
  • -
  • 0

Kontakt:

Steam: CSnajper

GG: 4394855

 

Na steam i GG pomagam wyłącznie odpłatnie.


#2 R3X

    Godlike

  • Przyjaciel

Reputacja: 2960
Godlike

  • Postów:4247
  • Lokalizacja:Nie
Offline

Napisano 23.05.2011 16:15

pytasz o samego define`a czy liczbę co się pod nim ukrywa?

define tworzy stałe (lub pseudofunkcje) na czas kompilacji, w każde miejsce gdzie użyto ZADANIE_WYSZKOLENIE_SANITARNE wstawi liczbę 736 zanim zabierze się za właściwą kompilację

liczba 736 to prawdopodobnie identyfikator dla funkcji set_task() (taskid), ponieważ powinien on być unikatowy dla każdego zadania; gdyby każdy plugin używał zadań z zakresu 0-33 to zaczęłyby się nakładać i żaden z nich by nie działał; jak ustalisz sobie liczbę o którą zwiększysz id gracza to jest w stanie określić index gracza na postawie taskid

set_task(1.0, "test", id+736)

public test(id){
    id -= 736;

}
w ten sposób zadania się nie nakładają i wiesz o jakiego gracza chodzi
  • +
  • -
  • 1

#3 Sniper Elite

    Master

  • Autor tematu
  • Power User

Reputacja: 168
Profesjonalista

  • Postów:981
  • GG:
  • Imię:Konrad
  • Lokalizacja:Skryptolandia
Offline

Napisano 23.05.2011 16:21

A co się stanie jeżeli z tej funkcji będzie korzystać 2 lub więcej graczy? Set taski bęą się na nich nakładać, bo mam taką sytuacje czasami, a nie wiem czemu.

Chodzi o tę funkcję:

public Mocpulkownika(id)
{
	id -= ZADANIE_MOC_PULKOWNIKA;
	if(klasa_gracza[id] != Pulkownik)
		return PLUGIN_CONTINUE;
	if(!is_user_alive(id))
		return PLUGIN_CONTINUE;
	new health = get_user_health(id);
	new new_health = (health+10<maksymalne_zdrowie_gracza[id])?health+10:maksymalne_zdrowie_gracza[id];
	set_user_health(id, new_health);
	return PLUGIN_CONTINUE;
}

w public Odrodzenie mam:

case Pulkownik:
		{
			give_item(id, "weapon_ak47");
			set_task(5.0, "Mocpulkownika", id+ZADANIE_MOC_PULKOWNIKA, _, _,"b");
		}

w public death, client_disconnect client_connect i Odrodzenie mam:

remove_task(id+ZADANIE_MOC_PULKOWNIKA);

  • +
  • -
  • 0

Kontakt:

Steam: CSnajper

GG: 4394855

 

Na steam i GG pomagam wyłącznie odpłatnie.


#4 R3X

    Godlike

  • Przyjaciel

Reputacja: 2960
Godlike

  • Postów:4247
  • Lokalizacja:Nie
Offline

Napisano 23.05.2011 16:27

tak jest w porządku, ZADANIE_MOC_PULKOWNIKA wyznacza pulę zarezewowanych taskid dla 32 graczy; będzie się nakładać jak dodasz inne zadanie na tę samą pulę
  • +
  • -
  • 1

#5 Sniper Elite

    Master

  • Autor tematu
  • Power User

Reputacja: 168
Profesjonalista

  • Postów:981
  • GG:
  • Imię:Konrad
  • Lokalizacja:Skryptolandia
Offline

Napisano 23.05.2011 16:39

Trochę mi to rozjaśniłeś.
Dzięki

Dodano 23 maj 2011 - 16:44:
Jupi, już mi wszystko działa.
  • +
  • -
  • 0

Kontakt:

Steam: CSnajper

GG: 4394855

 

Na steam i GG pomagam wyłącznie odpłatnie.


#6 JLB. Leo

    Profesjonalista

  • Zbanowany

Reputacja: 59
Pomocny

  • Postów:180
  • Imię:Paweł
  • Lokalizacja:Bielawa
Offline

Napisano 23.05.2011 19:06

define tworzy stałe (lub pseudofunkcje) na czas kompilacji, w każde miejsce gdzie użyto ZADANIE_WYSZKOLENIE_SANITARNE wstawi liczbę 736 zanim zabierze się za właściwą kompilację


PS: jest to makrodefinicja (instrukcja prepocesora) uzywana w C, a w bardziej znanym programistom C++ zastąpiona zmiennymi globalnymi.

Taki mały OT, ale może się komuś przydać

PS2: Dla newbie dodam że wszystkie instrukcje preprocesora są wykonywane przed procesem kompilacji (oraz linkowania)


@EDIT: jeszcze jedna ważna uwaga - dlaczego jest to "funkcja" praktycznie wymarła i gorsza od zmiennej stałej stałej const (jej wartość się nie zmienia) w programach? Gdyż powoduje ona po prostu zamianę wszystkich nazw "ZADANIE_MOC_PULKOWNIKA" na wartość (poza stringami) i nie gwarantuje ona zgodności typu danych (w przypadku AMX'a int, Float itp.)

Użytkownik JLB. Leo edytował ten post 23.05.2011 19:33


#7 R3X

    Godlike

  • Przyjaciel

Reputacja: 2960
Godlike

  • Postów:4247
  • Lokalizacja:Nie
Offline

Napisano 23.05.2011 19:22

PS nie może być całością wypowiedzi, wcale nie zmiennymi globalnymi, a stałymi const; nie ma mowy o wymieraniu, bo jest dość często stosowana dla skrócenia wywołań lub wyliczeń
  • +
  • -
  • 1

#8 JLB. Leo

    Profesjonalista

  • Zbanowany

Reputacja: 59
Pomocny

  • Postów:180
  • Imię:Paweł
  • Lokalizacja:Bielawa
Offline

Napisano 23.05.2011 19:32

wcale nie zmiennymi globalnymi, a stałymi const;


sory wlk, myślałem o czymś zupełnie innym i bezmyślnie napisałem (już poprawiam)

nie ma mowy o wymieraniu, bo jest dość często stosowana dla skrócenia wywołań lub wyliczeń


e tam dla mnie to jest przeżytek :) przynajmniej wobec możliwości jakie daje Cpp

#9 R3X

    Godlike

  • Przyjaciel

Reputacja: 2960
Godlike

  • Postów:4247
  • Lokalizacja:Nie
Offline

Napisano 23.05.2011 19:41

no w nowoczesnych językach już się tego nie używa, źle Cię zrozumiałem; C ciągle jest popularny, a tam niewiele jest miejsca na kombinowanie to się chociaż definami można pobawić :)
tak czy inaczej odbiegamy ostro od tematu, bo chodziło tu głównie od id tasków, a nie samo #define;

trochę się doczepiłem, ale zdarza mi się perfekcjonizm i jak ktoś chce po mnie poprawiać to się musi być ostrożny :P
  • +
  • -
  • 0

#10 Adminek AMXX.PL

    Admin :)

  • Bot

Reputacja: 156
Profesjonalista

  • Postów:7174
  • Lokalizacja:AMXX.PL
Offline

Napisano 23.05.2011 19:42

Wiadomość wygenerowana automatycznie


Ten temat został zamknięty przez moderatora.

Powód: Jupi, już mi wszystko działa.

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




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

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