Showing with 378 additions and 126 deletions.
  1. +10 −6 README.md
  2. +2 −1 src/karyuu.inc
  3. +107 −35 src/karyuu/client.inc
  4. +1 −1 src/karyuu/menu.inc
  5. +15 −2 src/karyuu/plugin/chatprocessor.inc
  6. +27 −0 src/karyuu/plugin/cookie.inc
  7. +32 −0 src/karyuu/plugin/database.inc
  8. +17 −0 src/karyuu/variable/strings.inc
  9. +167 −81 src/karyuu/weapon.inc
16 changes: 10 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,17 +1,21 @@
<font face = "Trebuchet MS">
<div align="center">
<h2 align="center">Karyuu-Library</h2>
<p align="center">A collection of the most used stock functions of mine. I try to keep it up-to-date as I can.
There are tons of ideas and plans to create into this library, but I have low amount of time.</p>
<h2 align="center">Karyuu Library | Community Collection
</h2>
<p align="center">Essentially, I have created a collection of useful stocks and functions into one massive library, to fasten the developments.
I want to upgrade the collection with the AlliedModders community, so if you can improve this library or attach other files or new stocks,
hit throw me with a pull request and let's build/enhance it together! Every contributor and also people whose functions are used other than
mine own ones, gets credited.</p>
<b>
<a href="https://github.com/K4ryuu/Karyuu-Library/releases">Download</a>
·
<a href="https://github.com/K4ryuu/Karyuu-Library/issues">Report Bug</a>
·
<a href="https://github.com/K4ryuu/Karyuu-Library/issues">Request Feature</a>
</b>
<br/> <br/>
Love the project? Please consider donating to help it improve!<br/>
</b>
<br/>
<b>Do not forget to give a ⭐ on the projects!</b><br/><br/>
<b>Love the project? Please consider donating to help it improve!</b><br/>
PayPal: paypal@kitsune-lab.dev<br/>
Patreon: https://www.patreon.com/kitsunelab
</div>
Expand Down
3 changes: 2 additions & 1 deletion src/karyuu.inc
Original file line number Diff line number Diff line change
Expand Up @@ -69,4 +69,5 @@
#include <karyuu/plugin/database>
#include <karyuu/plugin/filesystem>
#include <karyuu/plugin/function>
#include <karyuu/plugin/chatprocessor>
#include <karyuu/plugin/chatprocessor>
#include <karyuu/plugin/cookie>
142 changes: 107 additions & 35 deletions src/karyuu/client.inc
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,26 @@ stock int Karyuu_GetClientArmor(int iClient)
return GetEntProp(iClient, Prop_Data, "m_ArmorValue");
}

stock int Karyuu_GetArmor(int iClient)
{
return GetEntProp(iClient, Prop_Data, "m_ArmorValue");
}

stock void Karyuu_ResetArmor(int iClient)
{
if (Karyuu_IsValidClient(iClient))
{
SetEntProp(iClient, Prop_Send, "m_bHasHelmet", 0);
SetEntProp(iClient, Prop_Send, "m_ArmorValue", 0, 0);

if (GetEngineVersion() == Engine_CSGO)
{
SetEntProp(iClient, Prop_Send, "m_bHasHeavyArmor", 0);
SetEntProp(iClient, Prop_Send, "m_bWearingSuit", 0);
}
}
}

stock void Karyuu_SetClientArmor(int iClient, int value)
{
SetEntProp(iClient, Prop_Data, "m_ArmorValue", value);
Expand Down Expand Up @@ -211,42 +231,52 @@ stock bool Karyuu_ChangeClientTeamAlive(int iClient, int iTeam)

stock void Karyuu_SetClientFrags(int iClient, int iValue)
{
SetEntProp(iClient, Prop_Data, "m_iFrags", iValue);
SetEntProp(iClient, Prop_Data, "m_iFrags", iValue);
}

stock void Karyuu_SetClientDeaths(int iClient, int iValue)
{
SetEntProp(iClient, Prop_Data, "m_iDeaths", iValue);
SetEntProp(iClient, Prop_Data, "m_iDeaths", iValue);
}

stock void Karyuu_SetClientMoney(int iClient, int iValue)
stock int Karyuu_GetClientDeaths(int iClient)
{
SetEntProp(iClient, Prop_Send, "m_iAccount", iValue);
return GetEntProp(iClient, Prop_Data, "m_iDeaths");
}

stock void Karyuu_GiveClientMoney(int iClient, int iValue)
stock void Karyuu_SetClientMoney(int iClient, int iValue)
{
SetEntProp(iClient, Prop_Send, "m_iAccount", GetEntProp(client, Prop_Send, "m_iAccount") + iValue);
SetEntProp(iClient, Prop_Send, "m_iAccount", iValue);
}

stock void Karyuu_SetClientKevlar(int iClient, int iValue)
stock void Karyuu_GiveClientMoney(int iClient, int iValue)
{
SetEntProp(iClient, Prop_Send, "m_ArmorValue", iValue);
SetEntProp(iClient, Prop_Send, "m_iAccount", GetEntProp(client, Prop_Send, "m_iAccount") + iValue);
}

stock void Karyuu_SetClientHelmet(int iClient, bool bHasHelmet)
{
SetEntProp(iClient, Prop_Send, "m_bHasHelmet", bHasHelmet);
SetEntProp(iClient, Prop_Send, "m_bHasHelmet", bHasHelmet);
}

stock void Karyuu_SetClientHud(int iClient, int iValue)
{
SetEntProp(iClient, Prop_Send, "m_iHideHUD", iValue);
SetEntProp(iClient, Prop_Send, "m_iHideHUD", iValue);
}

stock int Karyuu_GetVehicle(int iClient)
{
return GetEntPropEnt(iClient, Prop_Send, "m_hVehicle");
}

stock bool Karyuu_IsInVehicle(int iClient)
{
return !(Karyuu_GetVehicle(iClient) == -1);
}

stock bool Karyuu_ExitVehicle(int iClient)
{
int iVehicle = Client_GetVehicle(iClient);
int iVehicle = Karyuu_GetVehicle(iClient);
return iVehicle != -1 && AcceptEntityInput(iVehicle, "ExitVehicle");
}

Expand Down Expand Up @@ -291,20 +321,7 @@ stock void Karyuu_MutePlayer(int iClient)
stock void Karyuu_UnmutePlayer(int iClient)
{
if (Karyuu_IsValidPlayer(iClient))
{
static int iDeadTalk = GetConVarInt(FindConVar("sm_deadtalk"));

if (iDeadTalk == 1 && !IsPlayerAlive(iClient))
{
SetClientListeningFlags(iClient, VOICE_LISTENALL);
}
else if (iDeadTalk == 2 && !IsPlayerAlive(iClient))
{
SetClientListeningFlags(iClient, VOICE_TEAM);
}
else
SetClientListeningFlags(iClient, VOICE_NORMAL);
}
SetClientListeningFlags(iClient, VOICE_NORMAL);
}

stock void Karyuu_SetThirdPerson(int iClient)
Expand All @@ -329,19 +346,14 @@ stock void Karyuu_SetFirstPerson(int client)
}
}

stock void Karyuu_ResetArmor(int iClient)
stock void Karyuu_ToggleThirdPerson(int iClient)
{
if (Karyuu_IsValidClient(iClient))
if (Karyuu_IsInThirdPerson(iClient))
{
SetEntProp(iClient, Prop_Send, "m_bHasHelmet", 0);
SetEntProp(iClient, Prop_Send, "m_ArmorValue", 0, 0);

if (GetEngineVersion() == Engine_CSGO)
{
SetEntProp(iClient, Prop_Send, "m_bHasHeavyArmor", 0);
SetEntProp(iClient, Prop_Send, "m_bWearingSuit", 0);
}
Karyuu_SetFirstPerson(iClient);
}
else
Karyuu_SetThirdPerson(iClient);
}

stock void Karyuu_RadarVisibilityToggle(int iClient, bool bStatus)
Expand Down Expand Up @@ -445,4 +457,64 @@ stock bool Karyuu_ClientHasFlag(int iClient, int iFlags)

int iUserFlags = GetAdminFlags(aiAdmin, Access_Effective);
return Karyuu_ContainsBits(iUserFlags, iFlags) || Karyuu_ContainsBits(iUserFlags, ADMFLAG_ROOT);
}

stock int Karyuu_GetObserverTarget(int iClient)
{
return GetEntPropEnt(iClient, Prop_Send, "m_hObserverTarget");
}

stock int Karyuu_SetObserverTarget(int iClient, int iEntity)
{
SetEntPropEnt(iClient, Prop_Send, "m_hObserverTarget", iEntity);
}

stock int Karyuu_GetFOV(int iClient)
{
return GetEntProp(iClient, Prop_Send, "m_iFOV");
}

stock int Karyuu_SetFOV(int iClient, int iValue)
{
SetEntProp(iClient, Prop_Send, "m_iFOV", iValue);
}

stock bool Karyuu_IsInThirdPerson(int iClient)
{
return view_as<bool>(GetEntProp(iClient, Prop_Data, "m_iObserverMode"));
}

stock void Karyuu_LastLocation(int iClient, const char[] sBuffer, int iLength)
{
GetEntPropString(iClient, Prop_Send, "m_szLastPlaceName", sBuffer, iLength);
}

stock int Karyuu_GetScore(int iClient)
{
return GetClientFrags(client);
}

stock void Karyuu_SetScore(int iClient, int iValue)
{
SetEntProp(iClient, Prop_Data, "m_iFrags", iValue);
}

stock void Karyuu_RemoveAllDecals(int iClient)
{
ClientCommand(iClient, "r_cleardecals");
}

stock void Karyuu_Impulse(int iClient, int iValue)
{
SetEntProp(iClient, Prop_Data, "m_nImpulse", iValue);
}

stock bool Karyuu_IsClientReloading(int iClient)
{
int iWeapon = Karyuu_GetActiveWeapon(iClient);

if (iWeapon == INVALID_ENT_REFERENCE)
return false;

return Karyuu_IsWeaponReloading(iWeapon);
}
2 changes: 1 addition & 1 deletion src/karyuu/menu.inc
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

stock bool Karyuu_ClearClientMenu(int iClient)
{
if (!Karyuu_IsClientIndex(iClient) || IsFakeClient(client) || !IsClientInGame(client))
if (!Karyuu_IsClientIndex(iClient) || IsFakeClient(iClient) || !IsClientInGame(iClient))
return false;

CancelClientMenu(iClient);
Expand Down
17 changes: 15 additions & 2 deletions src/karyuu/plugin/chatprocessor.inc
Original file line number Diff line number Diff line change
Expand Up @@ -715,8 +715,21 @@ stock void _CL_SendChatMessage(int client, int author, char[] message)
PrintToChat(client, message);
}

/* BADNESS BELOW THIS LINE DO NOT EDIT */
/* I have added this, because some versions of
the compiler reports that, the last line
define is undefined.
Use this function OnPluginStart, if you have error with this message:
error 017: undefined symbol "_CL_OnPluginStart"
and comment out the part below that stock. */
stock void C_Initialize()
{
_CL_proto_buff_support = (GetFeatureStatus(FeatureType_Native, "GetUserMessageType") == FeatureStatus_Available) && (GetUserMessageType() == UM_Protobuf);
_CL_buffer_index = CPreFormat(_CL_buffer);
_CL_buffer_size = sizeof(_CL_buffer) - _CL_buffer_index;
}

/* BADNESS BELOW THIS LINE DO NOT EDIT
public void OnPluginStart()
{
_CL_proto_buff_support = (GetFeatureStatus(FeatureType_Native, "GetUserMessageType") == FeatureStatus_Available) && (GetUserMessageType() == UM_Protobuf);
Expand All @@ -725,4 +738,4 @@ public void OnPluginStart()
_CL_OnPluginStart();
}
#define OnPluginStart _CL_OnPluginStart
#define OnPluginStart _CL_OnPluginStart*/
27 changes: 27 additions & 0 deletions src/karyuu/plugin/cookie.inc
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
#if defined _KARYUU_COOKIE_INCLUDED_
#endinput
#endif
#define _KARYUU_COOKIE_INCLUDED_

#include <clientprefs>

stock int Karyuu_GetCookieInt(Cookie cookieHandle, int iClient)
{
char sBuffer[MAX_INTEGER_LENGTH + 1];
cookieHandle.Get(iClient, STRING(sBuffer));
return StringToInt(sBuffer);
}

stock bool Karyuu_GetCookieBool(Cookie cookieHandle, int iClient)
{
char sBuffer[8];
cookieHandle.Get(iClient, STRING(sBuffer));
return view_as<bool>(StringToInt(sBuffer[0]));
}

stock char Karyuu_GetCookieString(Cookie cookieHandle, int iClient)
{
char sBuffer[MAX_INTEGER_LENGTH + 1];
cookieHandle.Get(iClient, STRING(sBuffer));
return sBuffer;
}
32 changes: 32 additions & 0 deletions src/karyuu/plugin/database.inc
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,35 @@
#define _KARYUU_DATABASE_INCLUDED_

#define MAX_QUERY_SIZE 2048

stock int Karyuu_FetchIntByFieldName(Database hDatabase, DBResultSet hResult, const char[] sFieldName)
{
int iFieldNum;
hResult.FieldNameToNum(sFieldName, iFieldNum);

return hResult.FetchInt(iFieldNum);
}

stock int Karyuu_FetchSringByFieldName(Database hDatabase, DBResultSet hResult, const char[] sFieldName, char[] sBuffer, int iLength)
{
int iFieldNum;
hResult.FieldNameToNum(sFieldName, iFieldNum);

return hResult.FetchString(iFieldNum, sBuffer, iLength);
}

stock float Karyuu_FetchFloatByFieldName(Database hDatabase, DBResultSet hResult, const char[] sFieldName)
{
int iFieldNum;
hResult.FieldNameToNum(sFieldName, iFieldNum);

return hResult.FetchFloat(iFieldNum);
}

stock bool Karyuu_FetchBoolByFieldName(Database hDatabase, DBResultSet hResult, const char[] sFieldName)
{
int iFieldNum;
hResult.FieldNameToNum(sFieldName, iFieldNum);

return !!hResult.FetchInt(iFieldNum);
}
17 changes: 17 additions & 0 deletions src/karyuu/variable/strings.inc
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,23 @@ stock bool Karyuu_StartsWith(const char[] cBuffer, const char[] cSubString)
return true;
}

stock bool Karyuu_EndsWith(const char[] cBuffer, const char[] cSubString)
{
int n_str = strlen(cBuffer) - 1;
int n_subString = strlen(cSubString) - 1;

if(n_str < n_subString)
return false;

while (n_str != 0 && n_subString != 0)
{
if (cBuffer[n_str--] != cSubString[n_subString--])
return false;
}

return true;
}

/*
* Count the characters in a string
*
Expand Down