hi guys ...i decompiled this plugin..but i cant compile again..someone can help?
PHP Code:
public PlVers:__version =
{
version = 5,
filevers = "1.6.3",
date = "05/02/2018",
time = "14:32:56"
};
new Float:NULL_VECTOR[3];
new String:NULL_STRING[4];
public Extension:__ext_core =
{
name = "Core",
file = "core",
autoload = 0,
required = 0,
};
new MaxClients;
public Extension:__ext_sdktools =
{
name = "SDKTools",
file = "sdktools.ext",
autoload = 1,
required = 1,
};
public Extension:__ext_sdkhooks =
{
name = "SDKHooks",
file = "sdkhooks.ext",
autoload = 1,
required = 1,
};
new String:g_szModelExts[7][16] =
{
".phy",
".sw.vtx",
".dx80.vtx",
".dx90.vtx",
".vtx",
".xbox.vtx",
".vvd"
};
new String:g_szMaterialKeys[3][64] =
{
"$baseTexture",
"$bumpmap",
"$lightwarptexture"
};
new Handle:g_hCachedFiles;
new Handle:g_hCachedNums;
new Handle:g_hC4Sprite;
new String:g_sC4Sprite[256];
new Handle:g_hC4SpriteScale;
new Float:g_fC4SpriteScale;
new Handle:g_hC4SpriteHeight;
new Float:g_fC4SpriteHeight;
new Handle:g_hC4SpriteRemoveOnDefuse;
new bool:g_bC4SpriteRemoveOnDefuse;
new Handle:g_hC4SpriteRemoveOnExplode;
new bool:g_bC4SpriteRemoveOnExplode;
new g_iSpriteIndex = -1;
public __ext_core_SetNTVOptional()
{
MarkNativeAsOptional("GetFeatureStatus");
MarkNativeAsOptional("RequireFeature");
MarkNativeAsOptional("AddCommandListener");
MarkNativeAsOptional("RemoveCommandListener");
MarkNativeAsOptional("BfWriteBool");
MarkNativeAsOptional("BfWriteByte");
MarkNativeAsOptional("BfWriteChar");
MarkNativeAsOptional("BfWriteShort");
MarkNativeAsOptional("BfWriteWord");
MarkNativeAsOptional("BfWriteNum");
MarkNativeAsOptional("BfWriteFloat");
MarkNativeAsOptional("BfWriteString");
MarkNativeAsOptional("BfWriteEntity");
MarkNativeAsOptional("BfWriteAngle");
MarkNativeAsOptional("BfWriteCoord");
MarkNativeAsOptional("BfWriteVecCoord");
MarkNativeAsOptional("BfWriteVecNormal");
MarkNativeAsOptional("BfWriteAngles");
MarkNativeAsOptional("BfReadBool");
MarkNativeAsOptional("BfReadByte");
MarkNativeAsOptional("BfReadChar");
MarkNativeAsOptional("BfReadShort");
MarkNativeAsOptional("BfReadWord");
MarkNativeAsOptional("BfReadNum");
MarkNativeAsOptional("BfReadFloat");
MarkNativeAsOptional("BfReadString");
MarkNativeAsOptional("BfReadEntity");
MarkNativeAsOptional("BfReadAngle");
MarkNativeAsOptional("BfReadCoord");
MarkNativeAsOptional("BfReadVecCoord");
MarkNativeAsOptional("BfReadVecNormal");
MarkNativeAsOptional("BfReadAngles");
MarkNativeAsOptional("BfGetNumBytesLeft");
MarkNativeAsOptional("PbReadInt");
MarkNativeAsOptional("PbReadFloat");
MarkNativeAsOptional("PbReadBool");
MarkNativeAsOptional("PbReadString");
MarkNativeAsOptional("PbReadColor");
MarkNativeAsOptional("PbReadAngle");
MarkNativeAsOptional("PbReadVector");
MarkNativeAsOptional("PbReadVector2D");
MarkNativeAsOptional("PbGetRepeatedFieldCount");
MarkNativeAsOptional("PbSetInt");
MarkNativeAsOptional("PbSetFloat");
MarkNativeAsOptional("PbSetBool");
MarkNativeAsOptional("PbSetString");
MarkNativeAsOptional("PbSetColor");
MarkNativeAsOptional("PbSetAngle");
MarkNativeAsOptional("PbSetVector");
MarkNativeAsOptional("PbSetVector2D");
MarkNativeAsOptional("PbAddInt");
MarkNativeAsOptional("PbAddFloat");
MarkNativeAsOptional("PbAddBool");
MarkNativeAsOptional("PbAddString");
MarkNativeAsOptional("PbAddColor");
MarkNativeAsOptional("PbAddAngle");
MarkNativeAsOptional("PbAddVector");
MarkNativeAsOptional("PbAddVector2D");
MarkNativeAsOptional("PbRemoveRepeatedFieldValue");
MarkNativeAsOptional("PbReadMessage");
MarkNativeAsOptional("PbReadRepeatedMessage");
MarkNativeAsOptional("PbAddMessage");
VerifyCoreVersion();
return 0;
}
bool:StrEqual(String:str1[], String:str2[], bool:caseSensitive)
{
return strcmp(str1, str2, caseSensitive) == 0;
}
FindCharInString(String:str[], c, bool:reverse)
{
new i;
new len = strlen(str);
if (!reverse)
{
i = 0;
while (i < len)
{
if (c == str[i])
{
return i;
}
i++;
}
}
else
{
i = len + -1;
while (0 <= i)
{
if (c == str[i])
{
return i;
}
i--;
}
}
return -1;
}
ReadFileCell(Handle:hndl, &data, size)
{
new array[1];
new ret;
if ((ret = ReadFile(hndl, array, 1, size)) == 1)
{
data = array[0];
}
return ret;
}
AddFileToDownloadsTable(String:filename[])
{
static table = -1;
if (table == -1)
{
table = FindStringTable("downloadables");
}
new bool:save = LockStringTables(false);
AddToStringTable(table, filename, "", -1);
LockStringTables(save);
return 0;
}
Downloader_GetMaterialsFromMDL(String:model[], String:files[][], maxsize, maxlen)
{
if (!FileExists(model, false))
{
return 0;
}
new m_iNum;
new Handle:m_hFile = OpenFile(model, "rb");
FileSeek(m_hFile, 204, 0);
ReadFileCell(m_hFile, m_iNum, 4);
FileSeek(m_hFile, 0, 2);
decl m_cChar;
decl m_iPos;
do {
FileSeek(m_hFile, -2, 1);
ReadFileCell(m_hFile, m_cChar, 1);
} while (m_cChar);
FileSeek(m_hFile, 1, 1);
decl String:m_szPath[256];
do {
FileSeek(m_hFile, -2, 1);
ReadFileCell(m_hFile, m_cChar, 1);
} while (m_cChar);
m_iPos = FilePosition(m_hFile);
ReadFileString(m_hFile, m_szPath, 256, -1);
FileSeek(m_hFile, m_iPos, 0);
decl m_iRet;
decl String:m_szFile[256];
m_iRet = 0;
while (m_iRet < m_iNum)
{
if (!(maxsize == m_iNum))
{
FileSeek(m_hFile, -1, 1);
do {
FileSeek(m_hFile, -2, 1);
ReadFileCell(m_hFile, m_cChar, 1);
} while (m_cChar);
m_iPos = FilePosition(m_hFile);
ReadFileString(m_hFile, m_szFile, 256, -1);
Format(files[m_iRet], maxlen, "materials\%s%s.vmt", m_szPath, m_szFile);
FileSeek(m_hFile, m_iPos, 0);
m_iRet++;
}
return m_iRet;
}
return m_iRet;
}
Downloader_GetModelFiles(String:model[], String:files[][], maxsize, maxlen)
{
decl String:m_szRawPath[256];
strcopy(m_szRawPath, 256, model);
new m_iDot = FindCharInString(m_szRawPath, 46, true);
if (m_iDot == -1)
{
return 0;
}
m_szRawPath[m_iDot] = MissingTAG:0;
new m_iNum;
new i;
while (i < 7)
{
if (!(maxsize == m_iNum))
{
Format(files[m_iNum], maxlen, "%s%s", m_szRawPath, g_szModelExts[i]);
if (FileExists(files[m_iNum], false))
{
m_iNum++;
}
i++;
}
return m_iNum;
}
return m_iNum;
}
Downloader_GetMaterialsFromVMT(String:vmt[], String:materials[][], maxsize, maxlen)
{
if (!FileExists(vmt, false))
{
return 0;
}
decl String:m_szLine[512];
new Handle:m_hFile = OpenFile(vmt, "r");
new bool:m_bFound[3];
decl m_iPos;
decl m_iLast;
new m_iNum;
while (ReadFileLine(m_hFile, m_szLine, 512))
{
new var1;
if (!(m_iNum == 3 || m_iNum != maxsize))
{
new i;
while (i < 3)
{
if (!m_bFound[i])
{
if (0 < (m_iPos = StrContains(m_szLine, g_szMaterialKeys[i], false)))
{
m_bFound[i] = true;
while (m_szLine[m_iPos] != '"' && m_szLine[m_iPos] != ' ' && m_szLine[m_iPos] != '\x09')
{
m_iPos++;
}
while (m_szLine[m_iPos] == ' ' || m_szLine[m_iPos] == '\x09' || m_szLine[m_iPos] == '"')
{
m_iPos++;
}
m_iLast = m_iPos;
while (m_szLine[m_iLast] != '"' && m_szLine[m_iLast] != '
' && m_szLine[m_iLast] != '
' && m_szLine[m_iLast] != ' ' && m_szLine[m_iLast] != '\x09' && m_szLine[m_iLast])
{
m_iLast++;
}
m_szLine[m_iLast] = MissingTAG:0;
strcopy(materials[m_iNum], maxlen, m_szLine[m_iPos]);
m_iNum++;
}
}
i++;
}
}
CloseHandle(m_hFile);
return m_iNum;
}
CloseHandle(m_hFile);
return m_iNum;
}
Downloader_AddFileToDownloadsTable(String:filename[])
{
if (!FileExists(filename, false))
{
return 0;
}
if (!g_hCachedNums)
{
g_hCachedNums = CreateTrie();
g_hCachedFiles = CreateArray(256, 0);
}
AddFileToDownloadsTable(filename);
new var1;
if (GetTrieValue(g_hCachedNums, filename, var1))
{
new m_iStart = FindStringInArray(g_hCachedFiles, filename) + 1;
decl String:m_szFile[256];
new i = m_iStart - var1 + -1;
while (m_iStart + -1 > i)
{
GetArrayString(g_hCachedFiles, i, m_szFile, 256);
AddFileToDownloadsTable(m_szFile);
i++;
}
return 1;
}
new var2;
new var3;
var3 = FindCharInString(filename, 46, true);
if (var3 == -1)
{
return 1;
}
new var4 = 0;
strcopy(var2, 16, filename[var3]);
new var5;
decl m_iNum;
if (strcmp(var2, ".mdl", true))
{
if (!(strcmp(var2, ".vmt", true)))
{
m_iNum = Downloader_GetMaterialsFromVMT(filename, var5, 16, 256);
decl String:m_szMaterial[256];
new i;
while (i < m_iNum)
{
Format(m_szMaterial, 256, "materials\%s.vtf", var5[i]);
if (FileExists(m_szMaterial, false))
{
var4 = Downloader_AddFileToDownloadsTable(m_szMaterial) + 1 + var4;
}
i++;
}
}
}
else
{
new var6;
m_iNum = Downloader_GetModelFiles(filename, var6, 7, 256);
new i;
while (i < m_iNum)
{
var4 = Downloader_AddFileToDownloadsTable(var6[i]) + 1 + var4;
i++;
}
m_iNum = Downloader_GetMaterialsFromMDL(filename, var5, 16, 256);
new i;
while (i < m_iNum)
{
if (FileExists(var5[i], false))
{
var4 = Downloader_AddFileToDownloadsTable(var5[i]) + 1 + var4;
}
i++;
}
}
PushArrayString(g_hCachedFiles, filename);
SetTrieValue(g_hCachedNums, filename, var4, true);
return var4;
}
public OnPluginStart()
{
g_hC4Sprite = CreateConVar("sm_c4_sprite", "", "Path to the VMT file of sprite", 0, false, 0.0, false, 0.0);
GetConVarString(g_hC4Sprite, g_sC4Sprite, 256);
HookConVarChange(g_hC4Sprite, Cvars_OnCvarChanged);
g_hC4SpriteScale = CreateConVar("sm_c4_sprite_scale", "0.2", "Scale of the sprite", 0, false, 0.0, false, 0.0);
g_fC4SpriteScale = GetConVarFloat(g_hC4SpriteScale);
HookConVarChange(g_hC4SpriteScale, Cvars_OnCvarChanged);
g_hC4SpriteHeight = CreateConVar("sm_c4_sprite_height", "100", "Height of sprite from the position", 0, false, 0.0, false, 0.0);
g_fC4SpriteHeight = GetConVarFloat(g_hC4SpriteHeight);
HookConVarChange(g_hC4SpriteHeight, Cvars_OnCvarChanged);
g_hC4SpriteRemoveOnDefuse = CreateConVar("sm_c4_sprite_remove_on_defuse", "1", "Remove sprite on defuse", 0, true, 0.0, true, 1.0);
g_bC4SpriteRemoveOnDefuse = GetConVarBool(g_hC4SpriteRemoveOnDefuse);
HookConVarChange(g_hC4SpriteRemoveOnDefuse, Cvars_OnCvarChanged);
g_hC4SpriteRemoveOnExplode = CreateConVar("sm_c4_sprite_remove_on_explode", "1", "Remove sprite on explode", 0, true, 0.0, true, 1.0);
g_bC4SpriteRemoveOnExplode = GetConVarBool(g_hC4SpriteRemoveOnExplode);
HookConVarChange(g_hC4SpriteRemoveOnExplode, Cvars_OnCvarChanged);
HookEvent("round_start", Event_RoundStart, EventHookMode:2);
HookEvent("bomb_defused", Event_BombDefused, EventHookMode:2);
HookEvent("bomb_exploded", Event_BombExploded, EventHookMode:2);
HookEvent("bomb_planted", Event_Planted, EventHookMode:2);
AutoExecConfig(true, "c4_sprite", "sourcemod");
return 0;
}
public Cvars_OnCvarChanged(Handle:cvar, String:oldValue[], String:newValue[])
{
if (g_hC4Sprite == cvar)
{
strcopy(g_sC4Sprite, 256, newValue);
new var1;
if (g_sC4Sprite[0] && IsVMTFile(g_sC4Sprite))
{
PrecacheModel(g_sC4Sprite, true);
decl String:buffer[256];
if (StrContains(g_sC4Sprite, "materials/", false))
{
PrecacheModel(g_sC4Sprite, true);
FormatEx(buffer, 256, "materials/%s", g_sC4Sprite);
}
else
{
strcopy(buffer, 256, g_sC4Sprite);
PrecacheModel(1748 + 10, true);
}
Downloader_AddFileToDownloadsTable(buffer);
}
else
{
g_sC4Sprite[0] = 0;
}
}
else
{
if (g_hC4SpriteScale == cvar)
{
g_fC4SpriteScale = StringToFloat(newValue);
}
if (g_hC4SpriteHeight == cvar)
{
g_fC4SpriteHeight = StringToFloat(newValue);
}
if (g_hC4SpriteRemoveOnDefuse == cvar)
{
g_bC4SpriteRemoveOnDefuse = StringToInt(newValue, 10);
}
if (g_hC4SpriteRemoveOnExplode == cvar)
{
g_bC4SpriteRemoveOnExplode = StringToInt(newValue, 10);
}
}
return 0;
}
public OnMapStart()
{
g_iSpriteIndex = -1;
new var1;
if (g_sC4Sprite[0] && IsVMTFile(g_sC4Sprite))
{
PrecacheModel(g_sC4Sprite, true);
decl String:buffer[256];
if (StrContains(g_sC4Sprite, "materials/", false))
{
PrecacheModel(g_sC4Sprite, true);
FormatEx(buffer, 256, "materials/%s", g_sC4Sprite);
}
else
{
strcopy(buffer, 256, g_sC4Sprite);
PrecacheModel(1748 + 10, true);
}
Downloader_AddFileToDownloadsTable(buffer);
}
else
{
g_sC4Sprite[0] = 0;
}
return 0;
}
public Event_RoundStart(Handle:event, String:name[], bool:dontBroadcast)
{
g_iSpriteIndex = -1;
return 0;
}
public Event_Planted(Handle:event, String:name[], bool:dontBroadcast)
{
CreateTimer(0.0, Timer_Delay, any:0, 2);
return 0;
}
public Event_BombDefused(Handle:event, String:name[], bool:dontBroadcast)
{
if (g_bC4SpriteRemoveOnDefuse)
{
KillSprite();
}
return 0;
}
public Event_BombExploded(Handle:event, String:name[], bool:dontBroadcast)
{
if (g_bC4SpriteRemoveOnExplode)
{
KillSprite();
}
return 0;
}
public Action:Timer_Delay(Handle:timer)
{
new planted_c4 = FindEntityByClassname(MaxClients + 1, "planted_c4");
if (planted_c4 != -1)
{
Hook_SpawnPost(planted_c4);
}
return Action:0;
}
public OnEntityDestroyed(entity)
{
if (IsValidEdict(entity))
{
decl String:classname[64];
GetEdictClassname(entity, classname, 64);
if (StrEqual(classname, "planted_c4", false))
{
KillSprite();
}
}
return 0;
}
public Hook_SpawnPost(planted_c4)
{
if (!g_sC4Sprite[0])
{
return 0;
}
decl Float:fOrigin[3];
GetEntPropVector(planted_c4, PropType:0, "m_vecOrigin", fOrigin, 0);
g_iSpriteIndex = CreateEntityByName("env_sprite", -1);
if (g_iSpriteIndex != -1)
{
DispatchKeyValue(g_iSpriteIndex, "model", g_sC4Sprite);
DispatchKeyValue(g_iSpriteIndex, "rendermode", "1");
DispatchKeyValue(g_iSpriteIndex, "renderfx", "14");
DispatchKeyValue(g_iSpriteIndex, "renderamt", "255");
DispatchKeyValue(g_iSpriteIndex, "rendercolor", "255 255 255");
DispatchKeyValueFloat(g_iSpriteIndex, "scale", g_fC4SpriteScale);
if (DispatchSpawn(g_iSpriteIndex))
{
fOrigin[2] += g_fC4SpriteHeight;
TeleportEntity(g_iSpriteIndex, fOrigin, NULL_VECTOR, NULL_VECTOR);
AcceptEntityInput(g_iSpriteIndex, "ShowSprite", -1, -1, 0);
}
else
{
LogError("Could not spawn entity \"env_sprite_oriented\"");
g_iSpriteIndex = -1;
}
}
else
{
LogError("Could not create entity \"env_sprite_oriented\"");
g_iSpriteIndex = -1;
}
return 0;
}
KillSprite()
{
if (g_iSpriteIndex != -1)
{
AcceptEntityInput(g_iSpriteIndex, "kill", -1, -1, 0);
}
g_iSpriteIndex = -1;
return 0;
}
bool:IsVMTFile(String:vmt[])
{
decl String:buf[4];
GetExtension(vmt, buf, 4);
return !strcmp(buf, "vmt", false);
}
GetExtension(String:path[], String:buffer[], size)
{
new extpos = FindCharInString(path, 46, true);
if (extpos == -1)
{
buffer[0] = MissingTAG:0;
return 0;
}
extpos++;
strcopy(buffer, size, path[extpos]);
return 0;
}