new Handle:g_hTracers = INVALID_HANDLE;
new Handle:g_hEquippedTracer = INVALID_HANDLE;
enum Tracer
{
String:ItemName[64],
String:Colours[11],
String:Flag[2],
Price,
Time
}
LoadTracers(&Handle:kv)
{
g_hTracers = CreateArray(79);
new i=0;
new ItemTracer[Tracer];
KvJumpToKey(kv, "Tracers");
if(KvGotoFirstSubKey(kv))
{
do
{
ResizeArray(g_hTracers, i+1);
KvGetSectionName(kv, ItemTracer[ItemName], sizeof(ItemTracer[ItemName]));
KvGetString(kv, "colour", ItemTracer[Colours], sizeof(ItemTracer[Colours]));
KvGetString(kv, "flag", ItemTracer[Flag], sizeof(ItemTracer[Flag]));
//ItemTracer[Price] = KvGetNum(kv, "price");
//ItemTracer[Time] = KvGetNum(kv, "time");
SetArrayArray(g_hTracers, i, ItemTracer[0]);
if(KvJumpToKey(kv, "Plans"))
{
if(KvGotoFirstSubKey(kv))
{
new ItemPlan[Plan];
Format(ItemPlan[Category], sizeof(ItemPlan[Category]), "tracer");
ItemPlan[ItemId] = i;
do
{
ResizeArray(g_hPlans, GetArraySize(g_hPlans)+1);
KvGetSectionName(kv, ItemPlan[PlanName], sizeof(ItemPlan[PlanName]));
ItemPlan[Time]=KvGetNum(kv, "time");
ItemPlan[Price]=KvGetNum(kv, "price");
SetArrayArray(g_hPlans, GetArraySize(g_hPlans)-1, ItemPlan[0]);
} while (KvGotoNextKey(kv));
}
}
++i;
KvGoBack(kv);
KvGoBack(kv);
} while (KvGotoNextKey(kv));
}
KvRewind(kv);
}
public Handle:CreateTracersMenu(client)
{
new Handle:hMenu = CreateMenu(Handler_Tracers);
SetMenuTitle(hMenu, "Tracers Menu\nCredits: %d", g_iCredits[client]);
new ItemTracer[Tracer];
new String:id[11];
new String:item[64];
new price = -1;
for(new i=0;i<GetArraySize(g_hTracers);++i)
{
IntToString(i, id, sizeof(id));
GetArrayArray(g_hTracers, i, ItemTracer[0]);
if(GetNumOfPlans(i, "tracer") > 1)
Format(item, sizeof(item), "%s", ItemTracer[ItemName]);
else
{
new Plan:ItemPlan[Plan];
ItemPlan = GetDefaultPlan(i, "tracer");
price = ItemPlan[Price];
Format(item, sizeof(item), "%s (%d)", ItemTracer[ItemName], price);
}
if(!StrEqual(ItemTracer[Flag], "") && !(GetUserFlagBits(client) & ReadFlagString(ItemTracer[Flag])) && !(GetUserFlagBits(client) & ADMFLAG_ROOT))
continue;
AddMenuItem(hMenu, id, item, (CanPlayerBuy(client, "tracer", ItemTracer[Colours], price)?ITEMDRAW_DEFAULT:ITEMDRAW_DISABLED));
}
SetMenuExitBackButton(hMenu, true);
return hMenu;
}
public Handler_Tracers(Handle:menu, MenuAction:action, client, param2)
{
if (action == MenuAction_Select)
{
new String:id[11];
GetMenuItem(menu, param2, id, sizeof(id));
if(GetNumOfPlans(StringToInt(id), "tracer") > 1)
{
g_iCurrentItem[client] = StringToInt(id);
CreatePlanMenu(client, "tracer");
}
else
{
new Tracer:ItemTracer[Tracer];
GetArrayArray(g_hTracers, StringToInt(id), ItemTracer[0]);
new Plan:ItemPlan[Plan];
ItemPlan = GetDefaultPlan(StringToInt(id), "tracer");
if(GetConVarBool(g_hConfirm))
{
g_bReturnPlan[client] = false;
g_sPushToReturn[client] = "tracer";
g_fnSelectedCallback[client] = GetFunctionByName(GetMyHandle(), "BuyTracer");
g_fnReturnCallback[client] = GetFunctionByName(GetMyHandle(), "CreateTracersMenu");
copy(g_aSelectedItem[client], 512, ItemTracer, 79);
copy(g_aSelectedPlan[client], 36, ItemPlan, 35);
CreateConfirmMenu(client);
}
else
BuyTracer(client, ItemTracer, ItemPlan);
}
}
else if ((action == MenuAction_Cancel) && (param2 == MenuCancel_ExitBack))
DisplayMenu(CreateStoreMenu(client), client, 0);
else if(action ==MenuAction_End)
CloseHandle(menu);
}
public Handler_PlansTracer(Handle:menu, MenuAction:action, client, param2)
{
if (action == MenuAction_Select)
{
new String:id[11];
GetMenuItem(menu, param2, id, sizeof(id));
new Plan:ItemPlan[Plan];
GetArrayArray(g_hPlans, StringToInt(id), ItemPlan[0]);
new Tracer:ItemTracer[Tracer];
GetArrayArray(g_hTracers, g_iCurrentItem[client], ItemTracer[0]);
if(GetConVarBool(g_hConfirm))
{
g_bReturnPlan[client] = true;
g_sPushToReturn[client] = "tracer";
g_fnSelectedCallback[client] = GetFunctionByName(GetMyHandle(), "BuyTracer");
g_fnReturnCallback[client] = GetFunctionByName(GetMyHandle(), "CreatePlanMenu");
copy(g_aSelectedItem[client], 512, ItemTracer, 79);
copy(g_aSelectedPlan[client], 36, ItemPlan, 35);
CreateConfirmMenu(client);
}
else
BuyTracer(client, ItemTracer, ItemPlan);
}
else if ((action == MenuAction_Cancel) && (param2 == MenuCancel_ExitBack))
DisplayMenu(CreateTracersMenu(client), client, 0);
else if(action ==MenuAction_End)
CloseHandle(menu);
}
public BuyTracer(client, Tracer:ItemTracer[Tracer], Plan:ItemPlan[Plan])
{
BuyItem(client, "tracer", ItemTracer[Colours], ItemPlan[Price], ItemPlan[Time]);
SetClientCookie(client, g_hEquippedTracer, ItemTracer[Colours]);
if(IsPlayerAlive(client))
{
if(g_iTrails[client]!=0)
RemoveTrail(client);
CreateTrail(client);
}
PrintToChat(client, "%sYou have successfully bought the \x04%s\x03 tracer.", MESS, ItemTracer[ItemName]);
}
public Handle:CreateTracersInvMenu(client)
{
new Handle:hMenu = CreateMenu(Handler_TracersInv);
SetMenuTitle(hMenu, "Inventory - Tracers\nCredits: %d", g_iCredits[client]);
new aItem[Item];
new ItemTracer[Tracer];
new String:id[11];
new String:colour[11];
GetClientCookie(client, g_hEquippedTracer, colour, sizeof(colour));
AddMenuItem(hMenu, "-1", "No tracer");
for(new i=0;i<GetArraySize(g_hItems[client]);++i)
{
GetArrayArray(g_hItems[client], i, aItem[0]);
if(StrEqual(aItem[Category], "tracer"))
{
for(new a=0;a<GetArraySize(g_hTracers);++a)
{
GetArrayArray(g_hTracers, a, ItemTracer[0]);
if(StrEqual(ItemTracer[Colours], aItem[Data]))
{
IntToString(a, id, sizeof(id));
break;
}
}
AddMenuItem(hMenu, id, ItemTracer[ItemName], (StrEqual(ItemTracer[Colours], colour)?ITEMDRAW_DISABLED:ITEMDRAW_DEFAULT));
}
}
SetMenuExitBackButton(hMenu, true);
return hMenu;
}
public Handler_TracersInv(Handle:menu, MenuAction:action, client, param2)
{
if (action == MenuAction_Select)
{
new String:id[11];
GetMenuItem(menu, param2, id, sizeof(id));
if(g_iTrails[client]!=0)
RemoveTrail(client);
if(StrEqual(id, "-1"))
SetClientCookie(client, g_hEquippedTracer, "");
else
{
new ItemTracer[Tracer];
GetArrayArray(g_hTracers, StringToInt(id), ItemTracer[0]);
SetClientCookie(client, g_hEquippedTracer, ItemTracer[Colours]);
}
if(IsPlayerAlive(client))
CreateTrail(client);
DisplayMenu(CreateTracersInvMenu(client), client, 0);
}
else if ((action == MenuAction_Cancel) && (param2 == MenuCancel_ExitBack))
DisplayMenu(CreateInventoryMenu(client), client, 0);
else if(action ==MenuAction_End)
CloseHandle(menu);
}
public Action:Event_BulletImpact(Handle:event,const String:name[],bool:dontBroadcast)
{
new client = GetClientOfUserId(GetEventInt(event, "userid"));
new String:colour[12];
new String:exploded[4][12];
GetClientCookie(client, g_hEquippedTracer, colour, sizeof(colour));
ExplodeString(colour, " ", exploded, sizeof(exploded), sizeof(exploded[]));
new iColours[4];
iColours[0] = StringToInt(exploded[0]);
iColours[1] = StringToInt(exploded[1]);
iColours[2] = StringToInt(exploded[2]);
iColours[3] = 255;
if(!StrEqual(colour, ""))
{
decl Float:fOrigin[3], Float:fImpact[3], Float:fDifference[3];
SDKCall(g_hShootPosition, client, fOrigin);
fImpact[0] = GetEventFloat(event, "x");
fImpact[1] = GetEventFloat(event, "y");
fImpact[2] = GetEventFloat(event, "z");
new Float:fDistance = GetVectorDistance(fOrigin, fImpact);
new Float:fPercent = (0.4 / (fDistance / 100.0));
fDifference[0] = fOrigin[0] + ((fImpact[0] - fOrigin[0]) * fPercent);
fDifference[1] = fOrigin[1] + ((fImpact[1] - fOrigin[1]) * fPercent) - 0.08;
fDifference[2] = fOrigin[2] + ((fImpact[2] - fOrigin[2]) * fPercent);
TE_SetupBeamPoints(fOrigin, fImpact, g_iTrail, 0, 0, 0, 0.5, 1.0, 1.0, 1, 0.0, iColours, 0);
TE_SendToAll();
}
return Plugin_Continue;
}
public bool:ItemExists_Tracer(const String:data[])
{
new ItemTracer[Tracer];
for(new i=0;i<GetArraySize(g_hTracers);++i)
{
GetArrayArray(g_hTracers, i, ItemTracer[0]);
if(strcmp(ItemTracer[Colours], data)==0)
return true;
}
return false;
}