SteveStage
26.12.2019, 19:17
Вот функция:
stock TextForPlayer(playerid, str[], time, type, color = COLOR_ORANGE)
{
switch(type)
{
case 0:
{
new
Text:textdraw = TextDrawCreate(323.748016, 214.666656, str);
TextDrawLetterSize(textdraw, 0.782181, 2.924167);
TextDrawAlignment(textdraw, 2);
TextDrawColor(textdraw, color);
TextDrawSetShadow(textdraw, 0);
TextDrawSetOutline(textdraw, 1);
TextDrawBackgroundColor(textdraw, 255);
TextDrawFont(textdraw, 3);
TextDrawSetProportional(textdraw, 1);
TextDrawShowForPlayer(playerid, textdraw);
SetTimerEx("@_TextForPlayerTD", time, false, "dd", playerid, _:textdraw);
}
case 1:
{
new
Text:textdraw = TextDrawCreate(630.286926, 320.916778, str);
TextDrawLetterSize(textdraw, 0.600394, 2.194999);
TextDrawAlignment(textdraw, 3);
TextDrawColor(textdraw, color);
TextDrawSetShadow(textdraw, 0);
TextDrawSetOutline(textdraw, 1);
TextDrawBackgroundColor(textdraw, 255);
TextDrawFont(textdraw, 3);
TextDrawSetProportional(textdraw, 1);
TextDrawShowForPlayer(playerid, textdraw);
SetTimerEx("@_TextForPlayerTD", time, false, "dd", playerid, _:textdraw);
}
}
}
и, например при использовании в этой команде:
cmd:time(playerid)
{
new
hour,
minute;
gettime(hour, minute);
static
fmt_str[] = "%02d:%02d";
new
string[sizeof(fmt_str)-8+4+1];
format(string, sizeof(string), fmt_str, hour, minute);
TextForPlayer(playerid, string, 4000, 1, COLOR_ORANGE);
}
все нормально и работает, как должно работать.
А при использовании таким образом:
public OnPlayerDeath(playerid, killerid, reason)
{
TextForPlayer(playerid, "WASTED", 4000, 0, COLOR_RED);
return true;
}
от компилятора прилетает предупреждение:
C:\Users\HP\Desktop\Äîêóìåíòû\2) Pawn\Ìîè ìîäû\Junction RP\gamemodes\JunctionMode.pwn(1508) : warning 239: literal array/string passed to a non-const parameter
и ясно почему - const-корректность.
Но вот как сделать поддержку и массивов, и строковых литералов?
stock TextForPlayer(playerid, str[], time, type, color = COLOR_ORANGE)
{
switch(type)
{
case 0:
{
new
Text:textdraw = TextDrawCreate(323.748016, 214.666656, str);
TextDrawLetterSize(textdraw, 0.782181, 2.924167);
TextDrawAlignment(textdraw, 2);
TextDrawColor(textdraw, color);
TextDrawSetShadow(textdraw, 0);
TextDrawSetOutline(textdraw, 1);
TextDrawBackgroundColor(textdraw, 255);
TextDrawFont(textdraw, 3);
TextDrawSetProportional(textdraw, 1);
TextDrawShowForPlayer(playerid, textdraw);
SetTimerEx("@_TextForPlayerTD", time, false, "dd", playerid, _:textdraw);
}
case 1:
{
new
Text:textdraw = TextDrawCreate(630.286926, 320.916778, str);
TextDrawLetterSize(textdraw, 0.600394, 2.194999);
TextDrawAlignment(textdraw, 3);
TextDrawColor(textdraw, color);
TextDrawSetShadow(textdraw, 0);
TextDrawSetOutline(textdraw, 1);
TextDrawBackgroundColor(textdraw, 255);
TextDrawFont(textdraw, 3);
TextDrawSetProportional(textdraw, 1);
TextDrawShowForPlayer(playerid, textdraw);
SetTimerEx("@_TextForPlayerTD", time, false, "dd", playerid, _:textdraw);
}
}
}
и, например при использовании в этой команде:
cmd:time(playerid)
{
new
hour,
minute;
gettime(hour, minute);
static
fmt_str[] = "%02d:%02d";
new
string[sizeof(fmt_str)-8+4+1];
format(string, sizeof(string), fmt_str, hour, minute);
TextForPlayer(playerid, string, 4000, 1, COLOR_ORANGE);
}
все нормально и работает, как должно работать.
А при использовании таким образом:
public OnPlayerDeath(playerid, killerid, reason)
{
TextForPlayer(playerid, "WASTED", 4000, 0, COLOR_RED);
return true;
}
от компилятора прилетает предупреждение:
C:\Users\HP\Desktop\Äîêóìåíòû\2) Pawn\Ìîè ìîäû\Junction RP\gamemodes\JunctionMode.pwn(1508) : warning 239: literal array/string passed to a non-const parameter
и ясно почему - const-корректность.
Но вот как сделать поддержку и массивов, и строковых литералов?