SA-MP Forums Archive
#define + Strings | Compiler do what it wants ... - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: SA-MP Scripting and Plugins (https://sampforum.blast.hk/forumdisplay.php?fid=8)
+--- Forum: Scripting Help (https://sampforum.blast.hk/forumdisplay.php?fid=12)
+--- Thread: #define + Strings | Compiler do what it wants ... (/showthread.php?tid=398848)



#define + Strings | Compiler do what it wants ... [SOLVED] - Kevin54321 - 11.12.2012

.:: SOLVED (see my last post) ::.

Hello people
I have a big problem with the following code:
Code:
Acc("Level","47");

#define Acc("%0","%1"); \
	EditAccount(playerid,"%0","%1", 0); \
	Account[playerid][%0] = %1;

forward EditAccount(playerid,fieldname[],value[MAX_PLAYER_NAME], finished);
THIS is working:
Code:
EditAccount(playerid,"Level","47", 0);
I dont know why it fails ...
Do not wonder about the string "47", it will be converted to an integer under EditAccount!

Here is the result, the "failing" query:
Code:
UPDATE spieler SET %0=0 WHERE SpielerID = 1
"EditAccount(playerid,"Level","47", 0);" will bring:
Code:
UPDATE spieler SET Level=47 WHERE SpielerID = 1
I Hope anyone can help me with this!
If more details are needed -> Say it here.

Greetz Kevin


AW: #define + Strings | Compiler do what it wants ... - Kevin54321 - 11.12.2012

Thank you for your answer!
I changed this two things:
-> define Acc(%0,%1);
-> EditAccount(playerid,%0,%1, 0);

Now there are these Errors:
error 001: expected token: "-string end-", but found "-identifier-"
error 006: must be assigned to an array
On the Line "Acc("Level","47");"

Don`t know what i should do next ...


AW: Re: #define + Strings | Compiler do what it wants ... - Kevin54321 - 11.12.2012

Southclaw,
Thank you for your great post!
It helped me a lot!

Quote:
Originally Posted by [HLF]Southclaw
View Post
Okay definitions are EXACT replacements, so to debug one simply put the code in the place of the definition:
Therefore, after the compiler replaces that code you end up with:
pawn Code:
Account[playerid]["Level"] = "47";
The first line is fine, it's the second line that doesn't look like you've anticipated!
I was only concentrated on the first EditAccount-stuff ....
I already got it ... but i didn`t know how to work without the "`s and with the #-character (saw it in pawn-lang.pdf).
I didn`t know what i do.

Its working:
pawn Code:
Acc(Level,"47");

#define Acc(%0,%1);
    EditAccount(playerid, #%0, #%1, 0);
    Account[playerid][%0] = %1;
My "edited" version:
pawn Code:
Acc("Level",47);

#define Acc("%0",%1); \
    EditAccount(playerid,#%0,#%1, 0); \
    Account[playerid][%0] = %1;
There isn`t a big difference, but maybe it helps me (and others) to understand it!


.:: SOLVED ::.


~ Kevin