←  Problemy

AMXX.pl: Support AMX Mod X i SourceMod

»

Operacje bitowe

Zablokowany

  • +
  • -
DarkGL - zdjęcie 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
Odpowiedz

  • +
  • -
R3X - zdjęcie 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?
Odpowiedz

  • +
  • -
DarkGL - zdjęcie DarkGL 05.08.2010

jak się nakrywają przecież g_isalive[%1] to nie to samo co g_isalive[%1]=1
Odpowiedz

  • +
  • -
R3X - zdjęcie 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
Odpowiedz

  • +
  • -
DarkGL - zdjęcie 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.
#define asd 1

new tab[asd]

a kompilator dostanie taki kod
new tab[1]
Odpowiedz

  • +
  • -
G[o]Q - zdjęcie G[o]Q 06.08.2010

bo tak jest
Odpowiedz

  • +
  • -
R3X - zdjęcie R3X 06.08.2010

przy definiowaniu z '=' jest widocznie inaczej, zrobiłem mały dumping (dodałem -l do linii kompilatora)
#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ą
Odpowiedz

  • +
  • -
DarkGL - zdjęcie 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
Odpowiedz

  • +
  • -
R3X - zdjęcie R3X 06.08.2010

Na to wygląda, z początku myślałem że chodzi o parametryczność, ale się poprawiłem szybko :)
Odpowiedz
Zablokowany