/**
* Progress Bar Creator
* Copyright 2007-2010 Infernus\' Group,
* Flávio Toribio ([email protected])
*
* This is an add-on for the include Progress Bar
* http://forum.sa-mp.com/index.php?topic=138556
*/
#include <a_samp>
#include <progress>
#if !defined SetPVarInt
#error Version 0.3 R7 or higher of SA:MP Server requiered
#endif
#if _progress_version < 0x1310
#error Version 1.3.1 or higher of progress.inc required
#endif
#define DIALOG_BAR 1834
#define DIALOG_COLOR 1835
#define DIALOG_DONE 1836
#define ITEM_MOVE 0
#define ITEM_RESIZE 1
#define ITEM_COLOR 2
#define ITEM_DONE 3
#define MOVE_NONE 0
#define MOVE_POSITION 1
#define MOVE_SIZE 2
static Bars[MAX_BARS][e_bar];
public OnFilterScriptInit()
{
for(new i = 0; i < MAX_PLAYERS; ++i) if(IsPlayerConnected(i))
{
OnPlayerSpawn(i);
}
print(\"Progress Bar Creator by Flavio Toribio loaded\");
return 1;
}
public OnFilterScriptExit()
{
for(new i = 0; i < MAX_PLAYERS; ++i) if(IsPlayerConnected(i))
{
OnPlayerDisconnect(i, 0);
if(GetPVarInt(i, \"MovingBar\"))
{
TogglePlayerControllable(i, true);
}
if(GetPVarInt(i, \"CreatingBar\"))
{
DeletePVar(i, \"BarID\");
DeletePVar(i, \"MovingBar\");
DeletePVar(i, \"CreatingBar\");
}
}
print(\"Progress Bar Creator by Flavio Toribio unloaded\");
return 1;
}
public OnPlayerSpawn(playerid)
{
SendClientMessage(playerid, 0xFFF000AA, \"Use /bar to start making a progress bar!\");
return 1;
}
GetVars(index, &Float:x, &Float:y, &Float:w, &Float:h, &color)
{
x = Bars[index][pb_x];
y = Bars[index][pb_y];
w = Bars[index][pb_w];
h = Bars[index][pb_h];
color = Bars[index][pb_color];
}
UpdateVars(index, Float:x, Float:y, Float:w, Float:h, color)
{
Bars[index][pb_x] = x;
Bars[index][pb_y] = y;
Bars[index][pb_w] = w;
Bars[index][pb_h] = h;
Bars[index][pb_color] = color;
}
DeleteVars(index)
{
Bars[index][pb_x] = 0.0;
Bars[index][pb_y] = 0.0;
Bars[index][pb_w] = 0.0;
Bars[index][pb_h] = 0.0;
Bars[index][pb_color] = 0;
}
public OnPlayerUpdate(playerid)
{
if(GetPVarInt(playerid, \"MovingBar\"))
{
new keys, ud, lr;
GetPlayerKeys(playerid, keys, ud, lr);
new Bar:barid = Bar:GetPVarInt(playerid, \"BarID\");
new Float:x, Float:y, Float:w, Float:h, color;
if(ud || lr)
{
DestroyProgressBar(barid);
GetVars(_:barid, x, y, w, h, color);
DeleteVars(_:barid);
if(ud == KEY_UP)
{
if(GetPVarInt(playerid, \"MovingBar\") == MOVE_POSITION)
{
y -= keys & KEY_SPRINT ? 2.0 : 1.0;
if(y < 0.0) y = 0.0;
}
else if(GetPVarInt(playerid, \"MovingBar\") == MOVE_SIZE)
{
h -= keys & KEY_SPRINT ? 2.0 : 1.0;
if(h < 1.5) h = 1.5;
}
}
else if(ud == KEY_DOWN)
{
if(GetPVarInt(playerid, \"MovingBar\") == MOVE_POSITION)
{
y += keys & KEY_SPRINT ? 2.0 : 1.0;
if(y > 480.0) y = 480.0;
}
else if(GetPVarInt(playerid, \"MovingBar\") == MOVE_SIZE)
{
h += keys & KEY_SPRINT ? 2.0 : 1.0;
if(h > 480.0) h = 480.0;
}
}
if(lr == KEY_LEFT)
{
if(GetPVarInt(playerid, \"MovingBar\") == MOVE_POSITION)
{
x -= keys & KEY_SPRINT ? 2.0 : 1.0;
if(x < 0.0) x = 0.0;
}
else if(GetPVarInt(playerid, \"MovingBar\") == MOVE_SIZE)
{
w -= keys & KEY_SPRINT ? 2.0 : 1.0;
if(w < 1.5) w = 1.5;
}
}
else if(lr == KEY_RIGHT)
{
if(GetPVarInt(playerid, \"MovingBar\") == MOVE_POSITION)
{
x += keys & KEY_SPRINT ? 2.0 : 1.0;
if(x > 640.0) x = 640.0;
}
else if(GetPVarInt(playerid, \"MovingBar\") == MOVE_SIZE)
{
w += keys & KEY_SPRINT ? 2.0 : 1.0;
if(w > 640.0) w = 640.0;
}
}
barid = CreateProgressBar(x, y, w, h, color, 100.0);
SetProgressBarValue(barid, 50.0);
ShowProgressBarForPlayer(playerid, barid);
UpdateVars(_:barid, x, y, w, h, color);
SetPVarInt(playerid, \"BarID\", _:barid);
}
}
return 1;
}
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
if(newkeys & KEY_SECONDARY_ATTACK)
{
if(GetPVarInt(playerid, \"MovingBar\"))
{
TogglePlayerControllable(playerid, true);
SetPVarInt(playerid, \"MovingBar\", MOVE_NONE);
SendClientMessage(playerid, 0xFFF000AA, \"Now you can use /bar again to modify or finalize it.\");
}
}
return 1;
}
public OnPlayerDeath(playerid, killerid, reason)
{
if(GetPVarInt(playerid, \"MovingBar\"))
{
TogglePlayerControllable(playerid, true);
SetPVarInt(playerid, \"MovingBar\", MOVE_NONE);
}
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
if(GetPVarInt(playerid, \"CreatingBar\") == 1)
{
DestroyProgressBar(Bar:GetPVarInt(playerid, \"BarID\"));
DeleteVars(GetPVarInt(playerid, \"BarID\"));
}
return 1;
}
public OnPlayerCommandText(playerid, cmdtext[])
{
if(!strcmp(cmdtext, \"/bar\", true))
{
if(GetPVarInt(playerid, \"CreatingBar\") == 0)
{
new Bar:barid;
if((barid = CreateProgressBar(320.0, 240.0, 56.50, 3.39, 0xFF0000FF, 100.0)) == INVALID_BAR_ID)
{
SendClientMessage(playerid, 0xFF0000AA, \"Internal error occurred when creating progress bar.\");
return 1;
}
SetProgressBarValue(barid, 50.0);
ShowProgressBarForPlayer(playerid, barid);
TogglePlayerControllable(playerid, false);
UpdateVars(_:barid, 320.0, 240.0, 55.5, 3.2, 0xFF0000FF);
SetPVarInt(playerid, \"MovingBar\", MOVE_POSITION);
SetPVarInt(playerid, \"CreatingBar\", 1);
SetPVarInt(playerid, \"BarID\", _:barid);
SendClientMessage(playerid, 0xFFF000AA, \"Use the arrow keys to move the bar arround the screen.\");
SendClientMessage(playerid, 0xFFF000AA, \"Keep pressing \'Sprint\' key to move faster.\");
SendClientMessage(playerid, 0xFFF000AA, \"Press the \'Enter car\' key when done.\");
}
else
{
ShowPlayerDialog(playerid, DIALOG_BAR, DIALOG_STYLE_LIST, \"Progress Bar\", \"Change Position\\nChange Size\\nChange Color\\nI\'m done, save bar!\", \"OK\", \"Cancel\");
}
return 1;
}
return 0;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid == DIALOG_BAR)
{
if(response)
{
if(listitem == ITEM_MOVE)
{
SetPVarInt(playerid, \"MovingBar\", MOVE_POSITION);
TogglePlayerControllable(playerid, false);
SendClientMessage(playerid, 0xFFF000AA, \"Use the arrow keys to move the bar arround the screen.\");
SendClientMessage(playerid, 0xFFF000AA, \"Keep pressing \'Sprint\' key to move faster.\");
SendClientMessage(playerid, 0xFFF000AA, \"Press the \'Enter car\' key when done.\");
}
else if(listitem == ITEM_RESIZE)
{
SetPVarInt(playerid, \"MovingBar\", MOVE_SIZE);
TogglePlayerControllable(playerid, false);
SendClientMessage(playerid, 0xFFF000AA, \"Use the arrow keys to resize the bar.\");
SendClientMessage(playerid, 0xFFF000AA, \"Keep pressing \'Sprint\' key to resize faster.\");
SendClientMessage(playerid, 0xFFF000AA, \"Press the \'Enter car\' key when done.\");
}
else if(listitem == ITEM_COLOR)
{
ShowPlayerDialog(playerid, DIALOG_COLOR, DIALOG_STYLE_INPUT, \"Change Color\", \"Type the color in hexadecimal format.\\nExample: 0xFFF000FF\\nRemember the alpha parameter (the last 2 numbers),\\nthey define the transparency.\\nIf you have doubts, use an external Color Picker.\", \"OK\", \"Cancel\");
}
else if(listitem == ITEM_DONE)
{
ShowPlayerDialog(playerid, DIALOG_DONE, DIALOG_STYLE_INPUT, \"Saving Bar\", \"Type the file name which you want to save the bar;\\nYou don\'t need to specify the extension;\\nThe default one is .txt;\\nThe file will be created in the scriptfiles folder;\\nAny file with the same name will be replaced automatically.\", \"Save\", \"Cancel\");
}
}
}
else if(dialogid == DIALOG_COLOR)
{
SetProgressBarColor(Bar:GetPVarInt(playerid, \"BarID\"), hexstr(inputtext));
UpdateProgressBar(Bar:GetPVarInt(playerid, \"BarID\"), playerid);
Bars[GetPVarInt(playerid, \"BarID\")][pb_color] = hexstr(inputtext);
}
else if(dialogid == DIALOG_DONE)
{
new File:file, name[32], line[128], barid;
if(strlen(inputtext) > 32 - 4)
{
strdel(inputtext, 32 - 4, strlen(inputtext));
}
format(name, sizeof name, \"%s.txt\", inputtext);
if(!(file = fopen(name, io_write)))
{
SendClientMessage(playerid, 0xFF0000AA, \"There was an error on file writing, try again.\");
ShowPlayerDialog(playerid, DIALOG_DONE, DIALOG_STYLE_INPUT, \"Saving Bar\", \"Type the file name which you want to save the bar;\\nYou don\'t need to specify the extension;\\nThe default one is .txt;\\nThe file will be created in the scriptfiles folder;\\nAny file with the same name will be replaced automatically.\", \"Save\", \"Cancel\");
return 1;
}
barid = GetPVarInt(playerid, \"BarID\");
format(line, sizeof line, \"new Bar:bar = CreateProgressBar(%.2f, %.2f, %.2f, %.2f, %d, 100.0);\\r\\n\",
Bars[barid][pb_x], Bars[barid][pb_y], Bars[barid][pb_w], Bars[barid][pb_h], Bars[barid][pb_color]);
fwrite(file, line);
fwrite(file, \"ShowProgressBarForAll(bar);\\r\\n\");
fwrite(file, \"\\r\\nNow, take a look at the official SA:MP forum topic to know how to use this:\\r\\n\\r\\nhttp://forum.sa-mp.com/index.php?topic=138556\\r\\n\");
fclose(file);
DeleteVars(barid);
DestroyProgressBar(Bar:barid);
DeletePVar(playerid, \"BarID\");
DeletePVar(playerid, \"MovingBar\");
DeletePVar(playerid, \"CreatingBar\");
SendClientMessage(playerid, 0xFFFF00AA, \"All done! Now take a look at your file to see the result!\");
SendClientMessage(playerid, 0xFFFFFFAA, \"You can create another progress bar now.\");
}
return 1;
}
stock hexstr(string[])
{
new ret, val, i;
if(string[0] == \'0\' && (string[1] == \'x\' || string[1] == \'X\')) i = 2;
while(string)
{
ret <<= 4;
val = string[i++] - \'0\';
if(val > 0x09) val -= 0x07;
if(val > 0x0F) val -= 0x20;
if(val < 0x01) continue;
if(val < 0x10) ret += val;
}
return ret;
}
D:\\rpszerver\\filterscripts\\pc.pwn(17) : error 017: undefined symbol \"_progress_version\"
D:\\rpszerver\\filterscripts\\pc.pwn(34) : error 017: undefined symbol \"MAX_BARS\"
D:\\rpszerver\\filterscripts\\pc.pwn(34) : error 009: invalid array size (negative, zero or out of bounds)
D:\\rpszerver\\filterscripts\\pc.pwn(74) : error 017: undefined symbol \"pb_x\"
D:\\rpszerver\\filterscripts\\pc.pwn(75) : error 017: undefined symbol \"pb_y\"
D:\\rpszerver\\filterscripts\\pc.pwn(76) : error 017: undefined symbol \"pb_w\"
D:\\rpszerver\\filterscripts\\pc.pwn(77) : error 017: undefined symbol \"pb_h\"
D:\\rpszerver\\filterscripts\\pc.pwn(78) : error 017: undefined symbol \"pb_color\"
D:\\rpszerver\\filterscripts\\pc.pwn(83) : error 017: undefined symbol \"pb_x\"
D:\\rpszerver\\filterscripts\\pc.pwn(83) : warning 213: tag mismatch
D:\\rpszerver\\filterscripts\\pc.pwn(84) : error 017: undefined symbol \"pb_y\"
D:\\rpszerver\\filterscripts\\pc.pwn(84) : warning 213: tag mismatch
D:\\rpszerver\\filterscripts\\pc.pwn(85) : error 017: undefined symbol \"pb_w\"
D:\\rpszerver\\filterscripts\\pc.pwn(85) : warning 213: tag mismatch
D:\\rpszerver\\filterscripts\\pc.pwn(86) : error 017: undefined symbol \"pb_h\"
D:\\rpszerver\\filterscripts\\pc.pwn(86) : warning 213: tag mismatch
D:\\rpszerver\\filterscripts\\pc.pwn(87) : error 017: undefined symbol \"pb_color\"
D:\\rpszerver\\filterscripts\\pc.pwn(92) : error 017: undefined symbol \"pb_x\"
D:\\rpszerver\\filterscripts\\pc.pwn(92) : warning 213: tag mismatch
D:\\rpszerver\\filterscripts\\pc.pwn(93) : error 017: undefined symbol \"pb_y\"
D:\\rpszerver\\filterscripts\\pc.pwn(93) : warning 213: tag mismatch
D:\\rpszerver\\filterscripts\\pc.pwn(94) : error 017: undefined symbol \"pb_w\"
D:\\rpszerver\\filterscripts\\pc.pwn(94) : warning 213: tag mismatch
D:\\rpszerver\\filterscripts\\pc.pwn(95) : error 017: undefined symbol \"pb_h\"
D:\\rpszerver\\filterscripts\\pc.pwn(95) : warning 213: tag mismatch
D:\\rpszerver\\filterscripts\\pc.pwn(96) : error 017: undefined symbol \"pb_color\"
D:\\rpszerver\\filterscripts\\pc.pwn(111) : error 017: undefined symbol \"DestroyProgressBar\"
D:\\rpszerver\\filterscripts\\pc.pwn(166) : error 017: undefined symbol \"CreateProgressBar\"
D:\\rpszerver\\filterscripts\\pc.pwn(166) : warning 213: tag mismatch
D:\\rpszerver\\filterscripts\\pc.pwn(167) : error 017: undefined symbol \"SetProgressBarValue\"
D:\\rpszerver\\filterscripts\\pc.pwn(168) : error 017: undefined symbol \"ShowProgressBarForPlayer\"
D:\\rpszerver\\filterscripts\\pc.pwn(204) : error 017: undefined symbol \"DestroyProgressBar\"
D:\\rpszerver\\filterscripts\\pc.pwn(217) : error 017: undefined symbol \"CreateProgressBar\"
D:\\rpszerver\\filterscripts\\pc.pwn(222) : error 017: undefined symbol \"SetProgressBarValue\"
D:\\rpszerver\\filterscripts\\pc.pwn(223) : error 017: undefined symbol \"ShowProgressBarForPlayer\"
Compilation aborted.Pawn compiler 3.2.3664 Copyright © 1997-2006, ITB CompuPhase
26 Errors.