Operacje bitowe
DarkGL
05.08.2010
#define g_isalive[%1] g_isalive & (1<<%1) #define g_isalive[%1]=1 g_isalive |= (1<<%1) #define g_isalive[%1]=0 g_isalive &= ~(1<<%1) new g_isalive; #include "mt2/events.inl" public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR) RegisterHam(Ham_Spawn,"player","spawned") RegisterHam(Ham_Killed,"player","killed") }
#if defined _events_included #endinput #endif #define _events_included public spawned(id){ g_isalive[id]=1 } public killed(id,idattacker, shouldgib){ g_isalive[id]=0 }
Welcome to the AMX Mod X 1.76-300 Compiler. Copyright (c) 1997-2006 ITB CompuPhase, AMX Mod X Team F:\dropbox\My Dropbox\Metin2 Mod\addons\amxmodx\scripting\metin2mod.sma(92) : warning 201: redefinition of constant/macro (symbol "g_isalive[%1]=1") F:\dropbox\My Dropbox\Metin2 Mod\addons\amxmodx\scripting\metin2mod.sma(93) : warning 201: redefinition of constant/macro (symbol "g_isalive[%1]=0") C:\Documents and Settings\Home\Desktop\compiler\compiler\include\mt2/events.inl(7) : error 028: invalid subscript (not an array or too many subscripts): "g_isalive" C:\Documents and Settings\Home\Desktop\compiler\compiler\include\mt2/events.inl(7) : warning 215: expression has no effect C:\Documents and Settings\Home\Desktop\compiler\compiler\include\mt2/events.inl(7) : error 001: expected token: ";", but found "]" C:\Documents and Settings\Home\Desktop\compiler\compiler\include\mt2/events.inl(7) : error 029: invalid expression, assumed zero C:\Documents and Settings\Home\Desktop\compiler\compiler\include\mt2/events.inl(7) : fatal error 107: too many error messages on one line Compilation aborted. 4 Errors. Could not locate output file C:\Documents and Settings\Home\Desktop\compiler\compiler\compiled\metin2mod.amx (compile failed). Compilation Time: 0,42 sec
pomóżcie bo zaraz mnie coś strzeli
Użytkownik DarkGL edytował ten post 05.08.2010 19:09
R3X
05.08.2010
#define g_isalive[%1] g_isalive & (1<<%1) #define g_isalive[%1]=1 g_isalive |= (1<<%1) #define g_isalive[%1]=0 g_isalive &= ~(1<<%1)te makra się nakrywają tak, że definiując drugie nie masz już pierwszego, a trzecie anuluje drugie,
możesz zrobić
#define g_isalive[%1] g_isalive & (1<<%1) #define g_isalive2[%1]=1 g_isalive |= (1<<%1) #define g_isalive3[%1]=0 g_isalive &= ~(1<<%1)ale to głupie; jak chcesz sobie ułatwić zapis możesz przeładować operatory + - == !
dlaczego nie użyjesz tablicy?
DarkGL
05.08.2010
jak się nakrywają przecież g_isalive[%1] to nie to samo co g_isalive[%1]=1
R3X
05.08.2010
F:\dropbox\My Dropbox\Metin2 Mod\addons\amxmodx\scripting\metin2mod.sma(92) : warning 201: redefinition of constant/macro (symbol "g_isalive[%1]=1") F:\dropbox\My Dropbox\Metin2 Mod\addons\amxmodx\scripting\metin2mod.sma(93) : warning 201: redefinition of constant/macro (symbol "g_isalive[%1]=0")komunikat jes wyraźny, nie znam dokładnego zachowania kompilatora w takim przypadku, ale na pewno nie są to 3 niezależne makra
DarkGL
06.08.2010
no właśnie myślałem że #define ustala co jest podmieniane w kodzie przez preprocesor czyli tak naprawdę kompilator dostaje inny kod niż widzi go programista
np.
a kompilator dostanie taki kod
np.
#define asd 1 new tab[asd]
a kompilator dostanie taki kod
new tab[1]
R3X
06.08.2010
przy definiowaniu z '=' jest widocznie inaczej, zrobiłem mały dumping (dodałem -l do linii kompilatora)
Zamiana makr kolejnością
Widać, że tak zbudowane makra ze sobą kolidują
#define g[%1]=1 (%1) #define g[%1] (%1) public temp(){ g[1]; }
public temp(){ (1); }
#define g[%1]=1 (%1) #define g[%1] (%1) public temp(){ g[1]=1; }
public temp(){ (1)=1; }
Zamiana makr kolejnością
#define g[%1] (%1) #define g[%1]=1 (%1) public temp(){ g[1]; }
public temp(){ g[1]; }
#define g[%1] (%1) #define g[%1]=1 (%1) public temp(){ g[1]=1; }
public temp(){ (1) }
Widać, że tak zbudowane makra ze sobą kolidują
DarkGL
06.08.2010
post do usunięcia skupiłem się na kodzie nie na reszcie postu r3x ;F
Użytkownik DarkGL edytował ten post 06.08.2010 21:16
Użytkownik DarkGL edytował ten post 06.08.2010 21:16
R3X
06.08.2010
Na to wygląda, z początku myślałem że chodzi o parametryczność, ale się poprawiłem szybko