Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define PLUGIN_VERSION "1.0.0.6"
- #define USE_RPG_CODE 1
- enum Gang
- {
- String:Name[32],
- UniqueId,
- HP,
- Stealing,
- Gravity,
- Damage,
- Stamina,
- WeaponDrop
- };
- enum Member
- {
- String:SteamId[24],
- UniqueId,
- Points,
- IsLeader
- }
- new g_MemberDatabase[MAXPLAYERS+1][3];
- #include <sourcemod>
- #include <perks>
- #include <cstrike>
- #include <sdktools>
- #include <adminmenu>
- #include <sdkhooks>
- #include <colors>
- #include <smlib>
- new Handle:gH_Database = INVALID_HANDLE;
- new Handle:gH_Cvar_DatabaseDriver = INVALID_HANDLE;
- new Handle:gH_Cvar_GangsCost = INVALID_HANDLE;
- new gShadow_Cvar_GangsCost;
- new Handle:gH_DArray_Gangs = INVALID_HANDLE;
- new g_iGangs = 0;
- #if USE_RPG_CODE==1
- new Handle:gH_Cvar_HealthCost = INVALID_HANDLE;
- new Handle:gH_Cvar_StealingCost = INVALID_HANDLE;
- new Handle:gH_Cvar_GravityCost = INVALID_HANDLE;
- new Handle:gH_Cvar_DamageCost = INVALID_HANDLE;
- new Handle:gH_Cvar_StaminaCost = INVALID_HANDLE;
- new Handle:gH_Cvar_WeaponDropCost = INVALID_HANDLE;
- new gShadow_Cvar_HealthCost;
- new gShadow_Cvar_StealingCost;
- new gShadow_Cvar_GravityCost;
- new gShadow_Cvar_DamageCost;
- new gShadow_Cvar_StaminaCost;
- new gShadow_Cvar_WeaponDropCost;
- new Handle:gH_Cvar_HealthMax = INVALID_HANDLE;
- new Handle:gH_Cvar_StealingMax = INVALID_HANDLE;
- new Handle:gH_Cvar_GravityMax = INVALID_HANDLE;
- new Handle:gH_Cvar_DamageMax = INVALID_HANDLE;
- new Handle:gH_Cvar_StaminaMax = INVALID_HANDLE;
- new Handle:gH_Cvar_WeaponDropMax = INVALID_HANDLE;
- new gShadow_Cvar_HealthMax;
- new gShadow_Cvar_StealingMax;
- new gShadow_Cvar_GravityMax;
- new gShadow_Cvar_DamageMax;
- new gShadow_Cvar_StaminaMax;
- new gShadow_Cvar_WeaponDropMax;
- new Handle:gH_Cvar_HealthPer = INVALID_HANDLE;
- new Handle:gH_Cvar_StealingPer = INVALID_HANDLE;
- new Handle:gH_Cvar_GravityPer = INVALID_HANDLE;
- new Handle:gH_Cvar_DamagePer = INVALID_HANDLE;
- new Handle:gH_Cvar_StaminaPer = INVALID_HANDLE;
- new Handle:gH_Cvar_WeaponDropPer = INVALID_HANDLE;
- new gShadow_Cvar_HealthPer;
- new gShadow_Cvar_StealingPer;
- new gShadow_Cvar_GravityPer;
- new gShadow_Cvar_DamagePer;
- new gShadow_Cvar_StaminaPer;
- new gShadow_Cvar_WeaponDropPer;
- #endif
- new Handle:gH_Cvar_MaxMembers = INVALID_HANDLE;
- new gShadow_Cvar_MaxMembers;
- public OnPluginStart()
- {
- CreateConVar("sm_gangs_version", PLUGIN_VERSION, "SM Gangs Version", FCVAR_SPONLY|FCVAR_DONTRECORD|FCVAR_REPLICATED|FCVAR_NOTIFY);
- LoadTranslations("common.phrases");
- gH_Cvar_DatabaseDriver = CreateConVar("sm_gangs_database_driver", "default", "Defines the database driver to use for the plugin.");
- gH_Cvar_GangsCost = CreateConVar("sm_gangs_cost_creation", "5000", "The cost to start a new gang.");
- HookConVarChange(gH_Cvar_GangsCost, UpdateConVar);
- gShadow_Cvar_GangsCost = 5000;
- gH_Cvar_MaxMembers = CreateConVar("sm_gangs_max_members", "14", "Max members per gang.");
- gShadow_Cvar_MaxMembers = 14;
- HookConVarChange(gH_Cvar_MaxMembers, UpdateConVar);
- #if USE_RPG_CODE == 1
- gH_Cvar_HealthCost = CreateConVar("sm_gangs_cost_health", "2000", "The cost to upgrade health.");
- HookConVarChange(gH_Cvar_HealthCost, UpdateConVar);
- gH_Cvar_StealingCost = CreateConVar("sm_gangs_cost_stealing", "2000", "Cost to upgrade money earning.");
- HookConVarChange(gH_Cvar_StealingCost, UpdateConVar);
- gH_Cvar_GravityCost = CreateConVar("sm_gangs_cost_gravity", "2000", "Cost to upgrade gravity.");
- HookConVarChange(gH_Cvar_GravityCost, UpdateConVar);
- gH_Cvar_DamageCost = CreateConVar("sm_gangs_cost_damage", "2000", "Cost to upgrade damage.");
- HookConVarChange(gH_Cvar_DamageCost, UpdateConVar);
- gH_Cvar_StaminaCost = CreateConVar("sm_gangs_cost_stamina", "2000", "Cost to upgrade stamina.");
- HookConVarChange(gH_Cvar_StaminaCost, UpdateConVar);
- gH_Cvar_WeaponDropCost = CreateConVar("sm_gangs_cost_weapondrop", "2000", "Cost to upgrade weapon drop chances.");
- HookConVarChange(gH_Cvar_WeaponDropCost, UpdateConVar);
- gShadow_Cvar_HealthCost = 2000;
- gShadow_Cvar_StealingCost = 2000;
- gShadow_Cvar_GravityCost = 2000;
- gShadow_Cvar_DamageCost = 2000;
- gShadow_Cvar_StaminaCost = 2000;
- gShadow_Cvar_WeaponDropCost = 2000;
- gH_Cvar_HealthMax = CreateConVar("sm_gangs_max_health", "10", "Max upgrades for health.");
- HookConVarChange(gH_Cvar_HealthMax, UpdateConVar);
- gH_Cvar_StealingMax = CreateConVar("sm_gangs_max_stealing", "10", "Max upgrade money earning.");
- HookConVarChange(gH_Cvar_StealingMax, UpdateConVar);
- gH_Cvar_GravityMax = CreateConVar("sm_gangs_max_gravity", "10", "Max upgrade gravity.");
- HookConVarChange(gH_Cvar_GravityMax, UpdateConVar);
- gH_Cvar_DamageMax = CreateConVar("sm_gangs_max_damage", "10", "Max upgrade damage.");
- HookConVarChange(gH_Cvar_DamageMax, UpdateConVar);
- gH_Cvar_StaminaMax = CreateConVar("sm_gangs_max_stamina", "10", "Max upgrade stamina.");
- HookConVarChange(gH_Cvar_StaminaMax, UpdateConVar);
- gH_Cvar_WeaponDropMax = CreateConVar("sm_gangs_max_weapondrop", "10", "Max upgrade weapon drop chances.");
- HookConVarChange(gH_Cvar_WeaponDropMax, UpdateConVar);
- gShadow_Cvar_HealthMax = 10;
- gShadow_Cvar_StealingMax = 10;
- gShadow_Cvar_GravityMax = 10;
- gShadow_Cvar_DamageMax = 10;
- gShadow_Cvar_StaminaMax = 10;
- gShadow_Cvar_WeaponDropMax = 10;
- gH_Cvar_HealthPer = CreateConVar("sm_gangs_per_health", "10", "Per upgrade for health.");
- HookConVarChange(gH_Cvar_HealthPer, UpdateConVar);
- gH_Cvar_StealingPer = CreateConVar("sm_gangs_per_stealing", "5", "Per upgrade for money earning.");
- HookConVarChange(gH_Cvar_StealingPer, UpdateConVar);
- gH_Cvar_GravityPer = CreateConVar("sm_gangs_per_gravity", "25", "Per upgrade for gravity.");
- HookConVarChange(gH_Cvar_GravityPer, UpdateConVar);
- gH_Cvar_DamagePer = CreateConVar("sm_gangs_per_damage", "3", "Per upgrade for damage.");
- HookConVarChange(gH_Cvar_DamagePer, UpdateConVar);
- gH_Cvar_StaminaPer = CreateConVar("sm_gangs_per_stamina", "3", "Per upgrade for stamina.");
- HookConVarChange(gH_Cvar_StaminaPer, UpdateConVar);
- gH_Cvar_WeaponDropPer = CreateConVar("sm_gangs_per_weapondrop", "1", "Per upgrade for weapon drop chances.");
- HookConVarChange(gH_Cvar_WeaponDropPer, UpdateConVar);
- gShadow_Cvar_HealthPer = 10;
- gShadow_Cvar_StealingPer = 5;
- gShadow_Cvar_GravityPer = 25;
- gShadow_Cvar_DamagePer = 3;
- gShadow_Cvar_StaminaPer = 3;
- gShadow_Cvar_WeaponDropPer = 1;
- #endif
- gH_DArray_Gangs = CreateArray(40);
- RegConsoleCmd("sm_gang", Command_Gangs);
- RegConsoleCmd("sm_gangs", Command_Gangs);
- RegConsoleCmd("sm_GANG", Command_Gangs);
- RegConsoleCmd("sm_GANGS", Command_Gangs);
- RegConsoleCmd("sm_addgang", Command_AddGang);
- RegConsoleCmd("sm_transfer", Command_Transfer);
- AutoExecConfig(true, "gangs");
- HookEvent("player_spawn", Event_PlayerSpawn);
- }
- public OnConfigsExecuted()
- {
- gShadow_Cvar_GangsCost = GetConVarInt(gH_Cvar_GangsCost);
- gShadow_Cvar_MaxMembers = GetConVarInt(gH_Cvar_MaxMembers);
- gShadow_Cvar_HealthCost = GetConVarInt(gH_Cvar_HealthCost);
- gShadow_Cvar_StealingCost = GetConVarInt(gH_Cvar_StealingCost);
- gShadow_Cvar_GravityCost = GetConVarInt(gH_Cvar_GravityCost);
- gShadow_Cvar_DamageCost = GetConVarInt(gH_Cvar_DamageCost);
- gShadow_Cvar_StaminaCost = GetConVarInt(gH_Cvar_StaminaCost);
- gShadow_Cvar_WeaponDropCost = GetConVarInt(gH_Cvar_WeaponDropCost);
- gShadow_Cvar_HealthMax = GetConVarInt(gH_Cvar_HealthMax);
- gShadow_Cvar_StealingMax = GetConVarInt(gH_Cvar_StealingMax);
- gShadow_Cvar_GravityMax = GetConVarInt(gH_Cvar_GravityMax);
- gShadow_Cvar_DamageMax = GetConVarInt(gH_Cvar_DamageMax);
- gShadow_Cvar_StaminaMax = GetConVarInt(gH_Cvar_StaminaMax);
- gShadow_Cvar_WeaponDropMax = GetConVarInt(gH_Cvar_WeaponDropMax);
- gShadow_Cvar_HealthPer = GetConVarInt(gH_Cvar_HealthPer);
- gShadow_Cvar_StealingPer = GetConVarInt(gH_Cvar_StealingPer);
- gShadow_Cvar_GravityPer = GetConVarInt(gH_Cvar_GravityPer);
- gShadow_Cvar_DamagePer = GetConVarInt(gH_Cvar_DamagePer);
- gShadow_Cvar_StaminaPer = GetConVarInt(gH_Cvar_StaminaPer);
- gShadow_Cvar_WeaponDropPer = GetConVarInt(gH_Cvar_WeaponDropPer);
- if (gH_Database == INVALID_HANDLE)
- {
- decl String:sDatabase[64];
- GetConVarString(gH_Cvar_DatabaseDriver, sDatabase, sizeof(sDatabase));
- SQL_TConnect(SQL_TConnect_CB, sDatabase);
- }
- }
- public SQL_TConnect_CB(Handle:owner, Handle:hndl, const String:error[], any:data)
- {
- ErrorCheck(owner, error);
- ErrorCheck(hndl, error);
- gH_Database = hndl;
- // Create if tables don't exist
- /* Database Structure
- Table Name: Gang_Members
- SteamId, String 24 chars
- GangUniqueId, Int32
- GangPoints, Int32
- IsLeader, Int32
- Table Name: Gangs
- GangName, String 32 chars
- GangUniqueId, Int32
- GangHP, Int32
- GangStealing, Int32
- GangGravity, Int32
- GangDamage, Int32
- GangStamina, Int32
- GangWeaponDrop, Int32
- */
- SQL_TQuery(gH_Database, SQL_TCreate_CB, "CREATE TABLE IF NOT EXISTS Gangs (name VARCHAR(32), id INT, hp INT, stealing INT, gravity INT, damage INT, stamina INT, wdrop INT, money INT, created INT, updated INT, PRIMARY KEY (id))");
- SQL_TQuery(gH_Database, SQL_TErrorCheck_CB, "CREATE TABLE IF NOT EXISTS GangMembers (steamid VARCHAR(22), gangid INT, points INT, isleader INT, autotx INT, PRIMARY KEY (steamid))");
- }
- public SQL_TCreate_CB(Handle:owner, Handle:hndl, const String:error[], any:data)
- {
- ErrorCheck(owner, error);
- ErrorCheck(hndl, error);
- SQL_TQuery(gH_Database, SQL_TStart_CB, "SELECT * FROM Gangs");
- }
- public OnMapStart()
- {
- if (gH_Database != INVALID_HANDLE)
- {
- SQL_TQuery(gH_Database, SQL_TStart_CB, "SELECT * FROM Gangs");
- }
- }
- public SQL_TStart_CB(Handle:owner, Handle:hndl, const String:error[], any:data)
- {
- ErrorCheck(owner, error);
- ErrorCheck(hndl, error);
- ClearArray(gH_DArray_Gangs);
- g_iGangs = SQL_GetRowCount(hndl);
- for (new rows = 0; rows < g_iGangs; rows++)
- {
- ResizeArray(gH_DArray_Gangs, GetArraySize(gH_DArray_Gangs)+1);
- if (SQL_FetchRow(hndl) == false)
- {
- LogError("not fetching a row");
- break;
- }
- decl String:name[32];
- SQL_FetchString(hndl, 0, name, sizeof(name));
- SetArrayString(gH_DArray_Gangs, rows, name);
- SetArrayCell(gH_DArray_Gangs, rows, SQL_FetchInt(hndl, 1), 32); // id
- SetArrayCell(gH_DArray_Gangs, rows, SQL_FetchInt(hndl, 2), 33); // hp
- SetArrayCell(gH_DArray_Gangs, rows, SQL_FetchInt(hndl, 3), 34); // stealing
- SetArrayCell(gH_DArray_Gangs, rows, SQL_FetchInt(hndl, 4), 35); // gravity
- SetArrayCell(gH_DArray_Gangs, rows, SQL_FetchInt(hndl, 5), 36); // damage
- SetArrayCell(gH_DArray_Gangs, rows, SQL_FetchInt(hndl, 6), 37); // stamina
- SetArrayCell(gH_DArray_Gangs, rows, SQL_FetchInt(hndl, 7), 38); // drop
- SetArrayCell(gH_DArray_Gangs, rows, SQL_FetchInt(hndl, 8), 39); // money
- }
- }
- public UpdateConVar(Handle:cvar, const String:oldValue[], const String:newValue[])
- {
- new value = StringToInt(newValue);
- if (cvar == gH_Cvar_GangsCost)
- {
- gShadow_Cvar_GangsCost = value;
- }
- else if (cvar == gH_Cvar_MaxMembers)
- {
- gShadow_Cvar_MaxMembers = value;
- }
- #if USE_RPG_CODE == 1
- else if (cvar == gH_Cvar_HealthCost)
- {
- gShadow_Cvar_HealthCost = value;
- }
- else if (cvar == gH_Cvar_StealingCost)
- {
- gShadow_Cvar_StealingCost = value;
- }
- else if (cvar == gH_Cvar_GravityCost)
- {
- gShadow_Cvar_GravityCost = value;
- }
- else if (cvar == gH_Cvar_DamageCost)
- {
- gShadow_Cvar_DamageCost = value;
- }
- else if (cvar == gH_Cvar_StaminaCost)
- {
- gShadow_Cvar_StaminaCost = value;
- }
- else if (cvar == gH_Cvar_WeaponDropCost)
- {
- gShadow_Cvar_WeaponDropCost = value;
- }
- else if (cvar == gH_Cvar_HealthMax)
- {
- gShadow_Cvar_HealthMax = value;
- }
- else if (cvar == gH_Cvar_StealingMax)
- {
- gShadow_Cvar_StealingMax = value;
- }
- else if (cvar == gH_Cvar_GravityMax)
- {
- gShadow_Cvar_GravityMax = value;
- }
- else if (cvar == gH_Cvar_DamageMax)
- {
- gShadow_Cvar_DamageMax = value;
- }
- else if (cvar == gH_Cvar_StaminaMax)
- {
- gShadow_Cvar_StaminaMax = value;
- }
- else if (cvar == gH_Cvar_WeaponDropMax)
- {
- gShadow_Cvar_WeaponDropMax = value;
- }
- else if (cvar == gH_Cvar_HealthPer)
- {
- gShadow_Cvar_HealthPer = value;
- }
- else if (cvar == gH_Cvar_StealingPer)
- {
- gShadow_Cvar_StealingPer = value;
- }
- else if (cvar == gH_Cvar_GravityPer)
- {
- gShadow_Cvar_GravityPer = value;
- }
- else if (cvar == gH_Cvar_DamagePer)
- {
- gShadow_Cvar_DamagePer = value;
- }
- else if (cvar == gH_Cvar_StaminaPer)
- {
- gShadow_Cvar_StaminaPer = value;
- }
- else if (cvar == gH_Cvar_WeaponDropPer)
- {
- gShadow_Cvar_WeaponDropPer = value;
- }
- #endif
- }
- void:DisplayGangsMenu(client)
- {
- new Handle:menu = CreateMenu(MenuHandler_Gangs);
- if (g_MemberDatabase[client][0] != -1)
- {
- decl String:gangname[32];
- new gangindex;
- for (new idx2 = 0; idx2 < GetArraySize(gH_DArray_Gangs); idx2++)
- {
- if (GetArrayCell(gH_DArray_Gangs, idx2, 32) == g_MemberDatabase[client][0])
- {
- gangindex = idx2;
- GetArrayString(gH_DArray_Gangs, idx2, gangname, sizeof(gangname));
- break;
- }
- }
- SetMenuTitle(menu, "%s ($%d)", gangname, GetArrayCell(gH_DArray_Gangs, gangindex, 39));
- SetMenuExitBackButton(menu, false);
- // any leader/admin
- if (g_MemberDatabase[client][2])
- {
- AddMenuItem(menu, "2", "Spieler einladen");
- AddMenuItem(menu, "3", "Skills");
- AddMenuItem(menu, "6", "Mitglied kicken");
- }
- AddMenuItem(menu, "4", "Top Gangs");
- AddMenuItem(menu, "5", "Gang verlassen");
- // only leader
- if (g_MemberDatabase[client][2] == 1)
- {
- AddMenuItem(menu, "9", "Memberstatus");
- }
- AddMenuItem(menu, "7", "Online Members");
- AddMenuItem(menu, "8", "Geld ueberweisen");
- DisplayMenu(menu, client, MENU_TIME_FOREVER);
- }
- else
- {
- SetMenuTitle(menu, "Gangs");
- SetMenuExitBackButton(menu, false);
- AddMenuItem(menu, "1", "Gang erstellen");
- AddMenuItem(menu, "4", "Top Gangs");
- DisplayMenu(menu, client, MENU_TIME_FOREVER);
- }
- }
- void:DisplaySkillsMenu(client)
- {
- if (g_MemberDatabase[client][0] < 0)
- {
- CPrintToChat(client, "{blue}[Gang]{green}Du bist in keiner Gang.");
- return;
- }
- new Handle:menu = CreateMenu(MenuHandler_Skills);
- // find gang
- decl String:name[32];
- new gangindex = 0;
- for (new idx2 = 0; idx2 < GetArraySize(gH_DArray_Gangs); idx2++)
- {
- if (GetArrayCell(gH_DArray_Gangs, idx2, 32) == g_MemberDatabase[client][0])
- {
- gangindex = idx2;
- GetArrayString(gH_DArray_Gangs, idx2, name, sizeof(name));
- }
- }
- SetMenuTitle(menu, "%s Gang", name);
- SetMenuExitBackButton(menu, false);
- decl String:sTitle[32];
- // check for max
- if (gShadow_Cvar_HealthMax > GetArrayCell(gH_DArray_Gangs, gangindex, 33))
- {
- Format(sTitle, sizeof(sTitle), "HP - Level %d ($%d)", GetArrayCell(gH_DArray_Gangs, gangindex, 33)+1, gShadow_Cvar_HealthCost + gShadow_Cvar_HealthCost*GetArrayCell(gH_DArray_Gangs, gangindex, 33));
- AddMenuItem(menu, "1", sTitle);
- }
- else
- {
- Format(sTitle, sizeof(sTitle), "HP - Level %d (ausverkauft)", GetArrayCell(gH_DArray_Gangs, gangindex, 33));
- AddMenuItem(menu, "", sTitle);
- }
- if (gShadow_Cvar_StealingMax > GetArrayCell(gH_DArray_Gangs, gangindex, 34))
- {
- Format(sTitle, sizeof(sTitle), "Stealing - Level %d ($%d)", GetArrayCell(gH_DArray_Gangs, gangindex, 34)+1, gShadow_Cvar_StealingCost + gShadow_Cvar_StealingCost*GetArrayCell(gH_DArray_Gangs, gangindex, 34));
- AddMenuItem(menu, "2", sTitle);
- }
- else
- {
- Format(sTitle, sizeof(sTitle), "Stealing - Level %d (ausverkauft)", GetArrayCell(gH_DArray_Gangs, gangindex, 34));
- AddMenuItem(menu, "", sTitle);
- }
- if (gShadow_Cvar_GravityMax > GetArrayCell(gH_DArray_Gangs, gangindex, 35))
- {
- Format(sTitle, sizeof(sTitle), "Gravity - Level %d ($%d)", GetArrayCell(gH_DArray_Gangs, gangindex, 35)+1, gShadow_Cvar_GravityCost + gShadow_Cvar_GravityCost*GetArrayCell(gH_DArray_Gangs, gangindex, 35));
- AddMenuItem(menu, "3", sTitle);
- }
- else
- {
- Format(sTitle, sizeof(sTitle), "Gravity - Level %d (ausverkauft)", GetArrayCell(gH_DArray_Gangs, gangindex, 35));
- AddMenuItem(menu, "", sTitle);
- }
- if (gShadow_Cvar_DamageMax > GetArrayCell(gH_DArray_Gangs, gangindex, 36))
- {
- Format(sTitle, sizeof(sTitle), "Damage - Level %d ($%d)", GetArrayCell(gH_DArray_Gangs, gangindex, 36)+1, gShadow_Cvar_DamageCost + gShadow_Cvar_DamageCost*GetArrayCell(gH_DArray_Gangs, gangindex, 36));
- AddMenuItem(menu, "4", sTitle);
- }
- else
- {
- Format(sTitle, sizeof(sTitle), "Damage - Level %d (ausverkauft)", GetArrayCell(gH_DArray_Gangs, gangindex, 36));
- AddMenuItem(menu, "", sTitle);
- }
- if (gShadow_Cvar_StaminaMax > GetArrayCell(gH_DArray_Gangs, gangindex, 37))
- {
- Format(sTitle, sizeof(sTitle), "Speed - Level %d ($%d)", GetArrayCell(gH_DArray_Gangs, gangindex, 37)+1, gShadow_Cvar_StaminaCost + gShadow_Cvar_StaminaCost*GetArrayCell(gH_DArray_Gangs, gangindex, 37));
- AddMenuItem(menu, "5", sTitle);
- }
- else
- {
- Format(sTitle, sizeof(sTitle), "Speed - Level %d (ausverkauft)", GetArrayCell(gH_DArray_Gangs, gangindex, 37));
- AddMenuItem(menu, "", sTitle);
- }
- if (gShadow_Cvar_WeaponDropMax > GetArrayCell(gH_DArray_Gangs, gangindex, 38))
- {
- Format(sTitle, sizeof(sTitle), "Weapon Drop - Level %d ($%d)", GetArrayCell(gH_DArray_Gangs, gangindex, 38)+1, gShadow_Cvar_WeaponDropCost + gShadow_Cvar_WeaponDropCost*GetArrayCell(gH_DArray_Gangs, gangindex, 38));
- AddMenuItem(menu, "6", sTitle);
- }
- else
- {
- Format(sTitle, sizeof(sTitle), "Weapon Drop - Level %d (ausverkauft)", GetArrayCell(gH_DArray_Gangs, gangindex, 38));
- AddMenuItem(menu, "", sTitle);
- }
- DisplayMenu(menu, client, MENU_TIME_FOREVER);
- }
- public MenuHandler_Skills(Handle:menu, MenuAction:action, client, choice)
- {
- if (action == MenuAction_End)
- {
- CloseHandle(menu);
- }
- else if (action == MenuAction_Select)
- {
- decl String:sChoice[10];
- GetMenuItem(menu, choice, sChoice, sizeof(sChoice));
- new selection = StringToInt(sChoice);
- decl String:sQuery[350];
- new bool:purchase = false;
- new gangindex = 0;
- for (new idx2 = 0; idx2 < GetArraySize(gH_DArray_Gangs); idx2++)
- {
- if (GetArrayCell(gH_DArray_Gangs, idx2, 32) == g_MemberDatabase[client][0])
- {
- gangindex = idx2;
- }
- }
- new amount;
- switch (selection)
- {
- case 1:
- {
- amount = DebitGang(gangindex, gShadow_Cvar_HealthCost + gShadow_Cvar_HealthCost*GetArrayCell(gH_DArray_Gangs, gangindex, 33));
- if (amount != -1)
- {
- SetArrayCell(gH_DArray_Gangs, gangindex, GetArrayCell(gH_DArray_Gangs, gangindex, 33)+1, 33);
- g_MemberDatabase[client][1] += gShadow_Cvar_HealthCost + gShadow_Cvar_HealthCost*GetArrayCell(gH_DArray_Gangs, gangindex, 33);
- Format(sQuery, sizeof(sQuery), "UPDATE Gangs SET hp=%d,money=%d WHERE id=%d", GetArrayCell(gH_DArray_Gangs, gangindex, 33), amount, g_MemberDatabase[client][0]);
- SQL_TQuery(gH_Database, SQL_TErrorCheck_CB, sQuery);
- purchase = true;
- }
- else
- {
- CPrintToChat(client, "{blue}[Gang]{green}Das kannst du dir nicht leisten!");
- return;
- }
- }
- case 2:
- {
- amount = DebitGang(gangindex, gShadow_Cvar_StealingCost + gShadow_Cvar_StealingCost*GetArrayCell(gH_DArray_Gangs, gangindex, 34));
- if (amount != -1)
- {
- SetArrayCell(gH_DArray_Gangs, gangindex, GetArrayCell(gH_DArray_Gangs, gangindex, 34)+1, 34);
- g_MemberDatabase[client][1] += gShadow_Cvar_StealingCost + gShadow_Cvar_StealingCost*GetArrayCell(gH_DArray_Gangs, gangindex, 34);
- Format(sQuery, sizeof(sQuery), "UPDATE Gangs SET stealing=%d,money=%d WHERE id=%d", GetArrayCell(gH_DArray_Gangs, gangindex, 34), amount, g_MemberDatabase[client][0]);
- SQL_TQuery(gH_Database, SQL_TErrorCheck_CB, sQuery);
- purchase = true;
- }
- else
- {
- CPrintToChat(client, "{blue}[Gang]{green}Das kannst du dir nicht leisten!");
- return;
- }
- }
- case 3:
- {
- amount = DebitGang(gangindex, gShadow_Cvar_GravityCost + gShadow_Cvar_GravityCost*GetArrayCell(gH_DArray_Gangs, gangindex, 35));
- if (amount != -1)
- {
- SetArrayCell(gH_DArray_Gangs, gangindex, GetArrayCell(gH_DArray_Gangs, gangindex, 35)+1, 35);
- g_MemberDatabase[client][1] += gShadow_Cvar_GravityCost + gShadow_Cvar_GravityCost*GetArrayCell(gH_DArray_Gangs, gangindex, 35);
- Format(sQuery, sizeof(sQuery), "UPDATE Gangs SET gravity=%d,money=%d WHERE id=%d", GetArrayCell(gH_DArray_Gangs, gangindex, 35), amount, g_MemberDatabase[client][0]);
- SQL_TQuery(gH_Database, SQL_TErrorCheck_CB, sQuery);
- purchase = true;
- }
- else
- {
- CPrintToChat(client, "{blue}[Gang]{green}Das kannst du dir nicht leisten!");
- return;
- }
- }
- case 4:
- {
- amount = DebitGang(gangindex, gShadow_Cvar_DamageCost + gShadow_Cvar_DamageCost*GetArrayCell(gH_DArray_Gangs, gangindex, 36));
- if (amount != -1)
- {
- SetArrayCell(gH_DArray_Gangs, gangindex, GetArrayCell(gH_DArray_Gangs, gangindex, 36)+1, 36);
- g_MemberDatabase[client][1] += gShadow_Cvar_DamageCost + gShadow_Cvar_DamageCost*GetArrayCell(gH_DArray_Gangs, gangindex, 36);
- Format(sQuery, sizeof(sQuery), "UPDATE Gangs SET damage=%d,money=%d WHERE id=%d", GetArrayCell(gH_DArray_Gangs, gangindex, 36), amount, g_MemberDatabase[client][0]);
- SQL_TQuery(gH_Database, SQL_TErrorCheck_CB, sQuery);
- purchase = true;
- }
- else
- {
- CPrintToChat(client, "{blue}[Gang]{green}Das kannst du dir nicht leisten!");
- return;
- }
- }
- case 5:
- {
- amount = DebitGang(gangindex, gShadow_Cvar_StaminaCost + gShadow_Cvar_StaminaCost*GetArrayCell(gH_DArray_Gangs, gangindex, 37));
- if (amount != -1)
- {
- SetArrayCell(gH_DArray_Gangs, gangindex, GetArrayCell(gH_DArray_Gangs, gangindex, 37)+1, 37);
- g_MemberDatabase[client][1] += gShadow_Cvar_StaminaCost + gShadow_Cvar_StaminaCost*GetArrayCell(gH_DArray_Gangs, gangindex, 37);
- Format(sQuery, sizeof(sQuery), "UPDATE Gangs SET stamina=%d,money=%d WHERE id=%d", GetArrayCell(gH_DArray_Gangs, gangindex, 37), amount, g_MemberDatabase[client][0]);
- SQL_TQuery(gH_Database, SQL_TErrorCheck_CB, sQuery);
- purchase = true;
- }
- else
- {
- CPrintToChat(client, "{blue}[Gang]{green}Das kannst du dir nicht leisten!");
- return;
- }
- }
- case 6:
- {
- amount = DebitGang(gangindex, gShadow_Cvar_WeaponDropCost + gShadow_Cvar_WeaponDropCost*GetArrayCell(gH_DArray_Gangs, gangindex, 38));
- if (amount != -1)
- {
- SetArrayCell(gH_DArray_Gangs, gangindex, GetArrayCell(gH_DArray_Gangs, gangindex, 38)+1, 38);
- g_MemberDatabase[client][1] += gShadow_Cvar_WeaponDropCost + gShadow_Cvar_WeaponDropCost*GetArrayCell(gH_DArray_Gangs, gangindex, 38);
- Format(sQuery, sizeof(sQuery), "UPDATE Gangs SET wdrop=%d,money=%d WHERE id=%d", GetArrayCell(gH_DArray_Gangs, gangindex, 38), amount, g_MemberDatabase[client][0]);
- SQL_TQuery(gH_Database, SQL_TErrorCheck_CB, sQuery);
- purchase = true;
- }
- else
- {
- CPrintToChat(client, "{blue}[Gang]{green}Das kannst du dir nicht leisten!");
- return;
- }
- }
- }
- if (purchase)
- {
- decl String:steamid[22];
- GetClientAuthString(client, steamid, sizeof(steamid));
- Format(sQuery, sizeof(sQuery), "UPDATE GangMembers SET points=%d WHERE steamid='%s'", g_MemberDatabase[client][1], steamid);
- SQL_TQuery(gH_Database, SQL_TErrorCheck_CB, sQuery);
- CPrintToChat(client, "{blue}[Gang]{green}Einkauf erfolgreich.");
- }
- }
- }
- public MenuHandler_Gangs(Handle:menu, MenuAction:action, client, choice)
- {
- if (action == MenuAction_End)
- {
- CloseHandle(menu);
- }
- else if (action == MenuAction_Select)
- {
- decl String:sChoice[10];
- GetMenuItem(menu, choice, sChoice, sizeof(sChoice));
- new selection = StringToInt(sChoice);
- switch (selection)
- {
- case 1:
- {
- CPrintToChat(client, "{blue}[Gang]{green} Benutze !addgang <name>");
- }
- case 2:
- {
- if (g_MemberDatabase[client][0] != -1)
- {
- if (g_MemberDatabase[client][2] > 0)
- {
- // check for max members
- decl String:sQuery[350];
- Format(sQuery, sizeof(sQuery), "SELECT * FROM GangMembers WHERE gangid=%d", g_MemberDatabase[client][0]);
- SQL_TQuery(gH_Database, SQL_TMaxMembers_CB, sQuery, client);
- }
- else
- {
- CPrintToChat(client, "{blue}[Gang]{green}Du hast dazu keine Rechte");
- }
- }
- else
- {
- CPrintToChat(client, "{blue}[Gang]{green}Du bist in keiner Gang.");
- }
- }
- case 3:
- {
- // skills menu
- DisplaySkillsMenu(client);
- }
- case 4:
- {
- // make menu for ranks
- new Handle:topgangs = CreateMenu(MenuHandler_TopGangs);
- SetMenuTitle(topgangs, "Top Gangs");
- SetMenuExitBackButton(topgangs, false);
- new total = 0;
- decl String:name[32];
- decl String:sTitle[40];
- for (new idx2 = 0; idx2 < GetArraySize(gH_DArray_Gangs); idx2++)
- {
- total = GetArrayCell(gH_DArray_Gangs, idx2, 32) +
- GetArrayCell(gH_DArray_Gangs, idx2, 33) +
- GetArrayCell(gH_DArray_Gangs, idx2, 34) +
- GetArrayCell(gH_DArray_Gangs, idx2, 35) +
- GetArrayCell(gH_DArray_Gangs, idx2, 36) +
- GetArrayCell(gH_DArray_Gangs, idx2, 37) +
- GetArrayCell(gH_DArray_Gangs, idx2, 38);
- GetArrayString(gH_DArray_Gangs, idx2, name, sizeof(name));
- Format(sTitle, sizeof(sTitle), "%s (%d)", name, total);
- AddMenuItem(topgangs, "", sTitle);
- }
- DisplayMenu(topgangs, client, MENU_TIME_FOREVER);
- }
- case 5:
- {
- if (g_MemberDatabase[client][0] != -1)
- {
- decl String:steamid[22];
- GetClientAuthString(client, steamid, sizeof(steamid));
- decl String:sQuery[350];
- if (g_MemberDatabase[client][2] == 1)
- {
- // force leader re-election
- CPrintToChatAll("Forcing leader re-election.");
- Format(sQuery, sizeof(sQuery), "SELECT * FROM GangMembers WHERE gangid=%d AND steamid<>'%s' ORDER BY points DESC", g_MemberDatabase[client][0], steamid);
- SQL_TQuery(gH_Database, SQL_TElection_CB, sQuery, g_MemberDatabase[client][0]);
- }
- Format(sQuery, sizeof(sQuery), "UPDATE GangMembers SET gangid=-1,points=0,isleader=0 WHERE steamid = '%s'", steamid);
- SQL_TQuery(gH_Database, SQL_TErrorCheck_CB, sQuery);
- g_MemberDatabase[client][0] = -1;
- g_MemberDatabase[client][1] = 0;
- g_MemberDatabase[client][2] = 0;
- CPrintToChat(client, "{blue}[Gang]{green}Du wurdest von der Gang ausgeschlossen");
- }
- else
- {
- CPrintToChat(client, "{blue}[Gang]{green}Du bist in keiner Gang.");
- }
- }
- case 6:
- {
- new Handle:kickmenu = CreateMenu(MenuHandler_KickMember);
- SetMenuTitle(kickmenu, "Mitlglied kicken:");
- SetMenuExitBackButton(kickmenu, false);
- // find other gang members
- decl String:sPlayerTitle[64];
- decl String:sData[30];
- if (g_MemberDatabase[client][2] == 1)
- {
- for (new idx = 1; idx <= MaxClients; idx++)
- {
- if (IsClientInGame(idx))
- {
- // check for same gang and not leader
- if (g_MemberDatabase[client][0] == g_MemberDatabase[idx][0] && (g_MemberDatabase[idx][2] != 1))
- {
- Format(sData, sizeof(sData), "%d", GetClientUserId(idx));
- // allow leader to kick admins
- if ((g_MemberDatabase[idx][2] == 3) && (g_MemberDatabase[client][2] == 1))
- {
- Format(sPlayerTitle, sizeof(sPlayerTitle), "(Adm) %N", idx);
- }
- else if (!g_MemberDatabase[idx][2])
- {
- Format(sPlayerTitle, sizeof(sPlayerTitle), "%N", idx);
- }
- AddMenuItem(kickmenu, sData, sPlayerTitle);
- }
- }
- }
- }
- else
- {
- for (new idx = 1; idx <= MaxClients; idx++)
- {
- if (IsClientInGame(idx))
- {
- // check for same gang and not leader
- if (g_MemberDatabase[client][0] == g_MemberDatabase[idx][0] && (g_MemberDatabase[idx][2] == 0))
- {
- Format(sData, sizeof(sData), "%d", GetClientUserId(idx));
- Format(sPlayerTitle, sizeof(sPlayerTitle), "%N", idx);
- AddMenuItem(kickmenu, sData, sPlayerTitle);
- }
- }
- }
- }
- DisplayMenu(kickmenu, client, MENU_TIME_FOREVER);
- }
- case 7:
- {
- if (g_MemberDatabase[client][0] != -1)
- {
- // find gang name
- decl String:gangname[32];
- for (new idx2 = 0; idx2 < GetArraySize(gH_DArray_Gangs); idx2++)
- {
- if (GetArrayCell(gH_DArray_Gangs, idx2, 32) == g_MemberDatabase[client][0])
- {
- GetArrayString(gH_DArray_Gangs, idx2, gangname, sizeof(gangname));
- break;
- }
- }
- new Handle:onlinemenu = CreateMenu(MenuHandler_TopGangs);
- SetMenuTitle(onlinemenu, "%s Members:", gangname);
- SetMenuExitBackButton(onlinemenu, false);
- // find other gang members
- decl String:sPlayerTitle[64];
- for (new idx = 1; idx <= MaxClients; idx++)
- {
- if (IsClientInGame(idx))
- {
- // check for same gang
- if (g_MemberDatabase[client][0] == g_MemberDatabase[idx][0])
- {
- if (g_MemberDatabase[idx][2] == 1)
- {
- Format(sPlayerTitle, sizeof(sPlayerTitle), "(Ldr) - %N", idx);
- }
- else if (g_MemberDatabase[idx][2] == 3)
- {
- Format(sPlayerTitle, sizeof(sPlayerTitle), "(Adm) - %N", idx);
- }
- else
- {
- Format(sPlayerTitle, sizeof(sPlayerTitle), "%N", idx);
- }
- AddMenuItem(onlinemenu, "", sPlayerTitle);
- }
- }
- }
- DisplayMenu(onlinemenu, client, MENU_TIME_FOREVER);
- }
- else
- {
- CPrintToChat(client, "{blue}[Gang]{green}Du bist in keiner Gang");
- }
- }
- case 8:
- {
- CPrintToChat(client, "{blue}[Gang]{green}Benutze !transfer <Wert> um das Geld zu uebertragen.");
- }
- case 9:
- {
- // promote/demote members to admin
- new Handle:gangadminmenu = CreateMenu(MenuHandler_GangAdmin);
- SetMenuTitle(gangadminmenu, "Memberstatus:");
- SetMenuExitBackButton(gangadminmenu, false);
- // find other gang members
- decl String:sPlayerTitle[64];
- decl String:sData[32];
- if (g_MemberDatabase[client][2] == 1)
- {
- for (new idx = 1; idx <= MaxClients; idx++)
- {
- if (IsClientInGame(idx))
- {
- // check for same gang
- if (g_MemberDatabase[client][0] == g_MemberDatabase[idx][0])
- {
- Format(sData, sizeof(sData), "%d", GetClientUserId(idx));
- if (g_MemberDatabase[idx][2] == 1)
- {
- Format(sPlayerTitle, sizeof(sPlayerTitle), "(Ldr) - %N", idx);
- }
- else if (g_MemberDatabase[idx][2] == 3)
- {
- Format(sPlayerTitle, sizeof(sPlayerTitle), "(Adm) - %N", idx);
- }
- else
- {
- Format(sPlayerTitle, sizeof(sPlayerTitle), "%N", idx);
- }
- AddMenuItem(gangadminmenu, sData, sPlayerTitle);
- }
- }
- }
- }
- else
- {
- for (new idx = 1; idx <= MaxClients; idx++)
- {
- if (IsClientInGame(idx))
- {
- // check for same gang
- if (g_MemberDatabase[client][0] == g_MemberDatabase[idx][0] && (g_MemberDatabase[idx][2] == 0))
- {
- Format(sData, sizeof(sData), "%d", GetClientUserId(idx));
- Format(sPlayerTitle, sizeof(sPlayerTitle), "%N", idx);
- AddMenuItem(gangadminmenu, sData, sPlayerTitle);
- }
- }
- }
- }
- DisplayMenu(gangadminmenu, client, MENU_TIME_FOREVER);
- }
- }
- }
- }
- public Action:Command_Gangs(client, args)
- {
- DisplayGangsMenu(client);
- return Plugin_Handled;
- }
- public Action:Command_Transfer(client, args)
- {
- if (!args)
- {
- CPrintToChat(client, "{blue}[Gang]{green}Du musst einen Wert angeben.");
- return Plugin_Handled;
- }
- if (g_MemberDatabase[client][0] == -1)
- {
- CPrintToChat(client, "{blue}[Gang]{green}Du bist in keiner Gang.");
- return Plugin_Handled;
- }
- // grab amount
- decl String:buffer[32];
- GetCmdArg(1, buffer, sizeof(buffer));
- new amount = StringToInt(buffer);
- if (amount < 0)
- {
- CPrintToChat(client, "{red}Nein!");
- return Plugin_Handled;
- }
- // Check for funds
- if (!Debit(client, amount))
- {
- CPrintToChat(client, "{blue}[Gang]{green}Du hast nicht so viel Geld.");
- return Plugin_Handled;
- }
- // add points
- decl String:sQuery[350];
- g_MemberDatabase[client][1] += amount;
- decl String:steamid[22];
- GetClientAuthString(client, steamid, sizeof(steamid));
- Format(sQuery, sizeof(sQuery), "UPDATE GangMembers SET points=%d WHERE steamid='%s'", g_MemberDatabase[client][1], steamid);
- SQL_TQuery(gH_Database, SQL_TErrorCheck_CB, sQuery);
- new gangsindex;
- for (new idx2 = 0; idx2 < GetArraySize(gH_DArray_Gangs); idx2++)
- {
- if (GetArrayCell(gH_DArray_Gangs, idx2, 32) == g_MemberDatabase[client][0])
- {
- gangsindex = idx2;
- break;
- }
- }
- // add gang money
- new currentmoney = GetArrayCell(gH_DArray_Gangs, gangsindex, 39);
- SetArrayCell(gH_DArray_Gangs, gangsindex, currentmoney + amount, 39);
- Format(sQuery, sizeof(sQuery), "UPDATE Gangs SET money=%d WHERE id=%d", currentmoney+amount, g_MemberDatabase[client][0]);
- SQL_TQuery(gH_Database, SQL_TErrorCheck_CB, sQuery);
- CPrintToChat(client, "{blue}[Gang]{green}Dein Geld (%d) wurde der Gang ueberwiesen. Die Gang hat nun: %d$", amount, currentmoney+amount);
- return Plugin_Handled;
- }
- public Action:Command_AddGang(client, args)
- {
- if (!args)
- {
- CPrintToChat(client, "{blue}[Gang]{green}Du musst einen Gang Namen angeben.");
- return Plugin_Handled;
- }
- if (g_MemberDatabase[client][0] > 0)
- {
- CPrintToChat(client, "{blue}[Gang]{green}Du bist schon in einer Gang.");
- return Plugin_Handled;
- }
- // Check if client has funds to buy a gang
- if (!Debit(client, gShadow_Cvar_GangsCost))
- {
- CPrintToChat(client, "{blue}[Gang]{green}Das Erstellen einer Gang kostet %d", gShadow_Cvar_GangsCost);
- return Plugin_Handled;
- }
- // Grab name and cutoff to 32 bytes
- decl String:newname[32];
- GetCmdArgString(newname, sizeof(newname));
- // Check if name is in use
- for (new idx = 0; idx < GetArraySize(gH_DArray_Gangs); idx++)
- {
- decl String:name[32];
- GetArrayString(gH_DArray_Gangs, idx, name, sizeof(name));
- if (!strcmp(name, newname, false))
- {
- CPrintToChat(client, "{blue}[Gang]{green}Den Namen %s gibt es schon.", newname);
- Credit(client, gShadow_Cvar_GangsCost);
- return Plugin_Handled;
- }
- }
- // Add new gang
- decl String:sQuery[350];
- Format(sQuery, sizeof(sQuery), "INSERT INTO Gangs (name, id, hp, stealing, gravity, damage, stamina, wdrop, money, created, updated) VALUES ('%s', %d, 0, 0, 0, 0, 0, 0, 0, %d, %d)", newname, ++g_iGangs, GetTime(), GetTime());
- SQL_TQuery(gH_Database, SQL_TUpdateGangs_CB, sQuery);
- new size = GetArraySize(gH_DArray_Gangs);
- ResizeArray(gH_DArray_Gangs, size+1);
- SetArrayString(gH_DArray_Gangs, size, newname);
- SetArrayCell(gH_DArray_Gangs, size, g_iGangs, 32); // id
- SetArrayCell(gH_DArray_Gangs, size, 0, 33); // hp
- SetArrayCell(gH_DArray_Gangs, size, 0, 34); // stealing
- SetArrayCell(gH_DArray_Gangs, size, 0, 35); // gravity
- SetArrayCell(gH_DArray_Gangs, size, 0, 36); // damage
- SetArrayCell(gH_DArray_Gangs, size, 0, 37); // stamina
- SetArrayCell(gH_DArray_Gangs, size, 0, 38); // drop
- SetArrayCell(gH_DArray_Gangs, size, 0, 39); // money
- decl String:steamid[22];
- GetClientAuthString(client, steamid, sizeof(steamid));
- Format(sQuery, sizeof(sQuery), "UPDATE GangMembers SET gangid=%d, points=%d, isleader=1 WHERE steamid='%s'", g_iGangs, gShadow_Cvar_GangsCost, steamid);
- SQL_TQuery(gH_Database, SQL_TErrorCheck_CB, sQuery);
- g_MemberDatabase[client][0] = g_iGangs;
- g_MemberDatabase[client][1] = gShadow_Cvar_GangsCost;
- g_MemberDatabase[client][2] = 1;
- CPrintToChat(client, "{blue}[Gang]{green}Die Gang <%s> wurde erstellt.", newname);
- return Plugin_Handled;
- }
- public OnClientPutServer(client)
- {
- SDKHook(client, SDKHook_OnTakeDamage, OnTakeDamage);
- }
- public Action:OnTakeDamage(victim, &attacker, &inflictor, &Float:damage, &damagetype, &weapon, Float:damageForce[3], Float:damagePosition[3])
- {
- if ((victim != attacker) && (victim > 0) && (victim <= MaxClients) && (attacker > 0) && (attacker <= MaxClients))
- {
- if (g_MemberDatabase[attacker][0] != -1)
- {
- new gangsindex;
- for (new idx2 = 0; idx2 < GetArraySize(gH_DArray_Gangs); idx2++)
- {
- if (GetArrayCell(gH_DArray_Gangs, idx2, 32) == g_MemberDatabase[attacker][0])
- {
- gangsindex = idx2;
- }
- }
- new odds;
- if (IsClientInGame(attacker))
- {
- decl String:weapon_name[32];
- GetClientWeapon(attacker, weapon_name, sizeof(weapon_name));
- if (GetClientTeam(victim) == CS_TEAM_CT && StrEqual(weapon_name, "weapon_knife"))
- {
- // calculate odds
- odds = gShadow_Cvar_WeaponDropPer*GetArrayCell(gH_DArray_Gangs, gangsindex, 38);
- new random = GetRandomInt(0, 100);
- if (random <= odds)
- {
- // disarm victim
- new dropweapon = GetPlayerWeaponSlot(victim, CS_SLOT_PRIMARY);
- if (dropweapon != -1)
- {
- CS_DropWeapon(victim, dropweapon, true);
- //damage = 0.0;
- decl String:attackername[100];
- decl String:victimname[100];
- GetClientName(attacker, attackername, sizeof(attackername));
- GetClientName(victim, victimname, sizeof(victimname));
- CPrintToChatAll("{blue}[Gang]{green}%s: Die waffe von %s wurde fallen gelassen.", attackername, victimname);
- return Plugin_Changed;
- }
- }
- }
- }
- if (GetArrayCell(gH_DArray_Gangs, gangsindex, 36) > 0)
- {
- new Float:added = float(gShadow_Cvar_DamagePer*GetArrayCell(gH_DArray_Gangs, gangsindex, 36));
- damage += added;
- return Plugin_Changed;
- }
- }
- }
- return Plugin_Continue;
- }
- public OnClientAuthorized(client, const String:sSteamID[])
- {
- if (gH_Database != INVALID_HANDLE)
- {
- g_MemberDatabase[client][0] = -1;
- decl String:sQuery[350];
- Format(sQuery, sizeof(sQuery), "SELECT * FROM GangMembers WHERE steamid='%s'", sSteamID);
- new Handle:pack = CreateDataPack();
- WritePackCell(pack, client);
- WritePackString(pack, sSteamID);
- SQL_TQuery(gH_Database, SQL_MemberJoin_CB, sQuery, pack);
- }
- }
- public SQL_MemberJoin_CB(Handle:owner, Handle:hndl, const String:error[], any:pack)
- {
- ErrorCheck(owner, error);
- // don't check hndl here
- // grab information
- decl String:sQuery[350];
- decl String:sSteamID[22];
- ResetPack(pack);
- new client = ReadPackCell(pack);
- ReadPackString(pack, sSteamID, sizeof(sSteamID));
- CloseHandle(pack);
- // check if it's there already
- if (SQL_FetchRow(hndl) == false)
- {
- Format(sQuery, sizeof(sQuery), "INSERT INTO GangMembers (steamid, gangid, points, isleader) VALUES ('%s', -1, 0, 0)", sSteamID);
- g_MemberDatabase[client][0] = -1; // id
- g_MemberDatabase[client][1] = 0;
- g_MemberDatabase[client][2] = 0;
- SQL_TQuery(gH_Database, SQL_TErrorCheck_CB, sQuery);
- }
- else
- {
- g_MemberDatabase[client][0] = SQL_FetchInt(hndl, 1); // id
- g_MemberDatabase[client][1] = SQL_FetchInt(hndl, 2); // points
- g_MemberDatabase[client][2] = SQL_FetchInt(hndl, 3); // isleader
- }
- }
- public OnClientDisconnect(client)
- {
- g_MemberDatabase[client][0] = -1;
- g_MemberDatabase[client][1] = 0;
- g_MemberDatabase[client][2] = 0;
- }
- public SQL_TMaxMembers_CB(Handle:owner, Handle:hndl, const String:error[], any:client)
- {
- ErrorCheck(owner, error);
- ErrorCheck(hndl, error);
- if (SQL_GetRowCount(hndl) > gShadow_Cvar_MaxMembers)
- {
- CPrintToChat(client, "{blue}[Gang]{green}Es gibt schon zu viele Mitglieder.");
- }
- else
- {
- // okay to invite
- new Handle:menu = CreateMenu(MenuHandler_InvitePlayerList);
- SetMenuTitle(menu, "Spieler einladen");
- SetMenuExitBackButton(menu, false);
- decl String:sTitle[32];
- decl String:sefo[32];
- for (new idx = 1; idx <= MaxClients; idx++)
- {
- if (IsClientInGame(idx) && g_MemberDatabase[idx][0] == -1)
- {
- GetClientName(idx, sTitle, sizeof(sTitle));
- Format(sefo, sizeof(sefo), "%d", GetClientUserId(idx));
- AddMenuItem(menu, sefo, sTitle);
- }
- }
- DisplayMenu(menu, client, MENU_TIME_FOREVER);
- }
- }
- public MenuHandler_TopGangs(Handle:menu, MenuAction:action, client, param2)
- {
- if (action == MenuAction_End)
- {
- CloseHandle(menu);
- }
- }
- public MenuHandler_GangAdmin(Handle:menu, MenuAction:action, client, param2)
- {
- if (action == MenuAction_End)
- {
- CloseHandle(menu);
- }
- else if (action == MenuAction_Select)
- {
- decl String:info[32];
- new userid, target;
- GetMenuItem(menu, param2, info, sizeof(info));
- userid = StringToInt(info);
- if ((target = GetClientOfUserId(userid)) == 0)
- {
- CPrintToChat(client, "[SM] %t", "{blue}[Gang]{green}Der Spieler ist nicht mehr verfuegbar.");
- }
- else
- {
- decl String:steamid[22];
- GetClientAuthString(target, steamid, sizeof(steamid));
- decl String:sQuery[350];
- // promote/demote
- if (g_MemberDatabase[target][2] == 1)
- {
- CPrintToChat(client, "{blue}[Gang]{green}Du kannst deinen eigenen Status nicht aendern!");
- }
- else if (g_MemberDatabase[target][2] == 3)
- {
- // demote
- Format(sQuery, sizeof(sQuery), "UPDATE GangMembers SET isleader=0 WHERE steamid='%s'", steamid);
- SQL_TQuery(gH_Database, SQL_TErrorCheck_CB, sQuery);
- g_MemberDatabase[target][2] = 0;
- CPrintToChat(target, "{blue}[Gang]{green}Dein Status wurde zu <Mitglieder Status> geaendert!");
- CPrintToChat(client, "{blue}[Gang]{green}Du hast den Status von %N geandert!", target);
- }
- else
- {
- // promote to admin
- Format(sQuery, sizeof(sQuery), "UPDATE GangMembers SET isleader=3 WHERE steamid='%s'", steamid);
- SQL_TQuery(gH_Database, SQL_TErrorCheck_CB, sQuery);
- g_MemberDatabase[target][2] = 3;
- CPrintToChat(target, "{blue}[Gang]{green}Du hast nun den [Adm] Status in der Gang.");
- CPrintToChat(client, "{blue}[Gang]{green}Du hast den Status von %N geandert!", target);
- }
- }
- }
- }
- public MenuHandler_KickMember(Handle:menu, MenuAction:action, client, param2)
- {
- if (action == MenuAction_End)
- {
- CloseHandle(menu);
- }
- else if (action == MenuAction_Select)
- {
- decl String:info[32];
- new userid, target;
- GetMenuItem(menu, param2, info, sizeof(info));
- userid = StringToInt(info);
- if ((target = GetClientOfUserId(userid)) == 0)
- {
- CPrintToChat(client, "[SM] %t", "{blue}[Gang]{green}Spieler nicht mehr auswaehlbar!");
- }
- else
- {
- // remove from gang
- decl String:steamid[22];
- GetClientAuthString(target, steamid, sizeof(steamid));
- decl String:sQuery[350];
- Format(sQuery, sizeof(sQuery), "UPDATE GangMembers SET gangid=-1,points=0,isleader=0 WHERE steamid = '%s'", steamid);
- SQL_TQuery(gH_Database, SQL_TErrorCheck_CB, sQuery);
- g_MemberDatabase[target][0] = -1;
- g_MemberDatabase[target][1] = 0;
- g_MemberDatabase[target][2] = 0;
- CPrintToChat(client, "{blue}[Gang]{green}%N wurde von der Gang entfernt.", target);
- }
- }
- }
- public MenuHandler_InvitePlayerList(Handle:menu, MenuAction:action, client, param2)
- {
- if (action == MenuAction_End)
- {
- CloseHandle(menu);
- }
- else if (action == MenuAction_Select)
- {
- decl String:info[32];
- new userid, target;
- GetMenuItem(menu, param2, info, sizeof(info));
- userid = StringToInt(info);
- if ((target = GetClientOfUserId(userid)) == 0)
- {
- CPrintToChat(client, "[SM] %t", "{blue}[Gang]{green}Spieler nicht verfuegbar!");
- }
- else
- {
- // display menu to target
- new Handle:invitemenu = CreateMenu(MenuHandler_InviteRequest);
- // get gang text
- decl String:name[32];
- for (new idx2 = 0; idx2 < GetArraySize(gH_DArray_Gangs); idx2++)
- {
- if (GetArrayCell(gH_DArray_Gangs, idx2, 32) == g_MemberDatabase[client][0])
- {
- GetArrayString(gH_DArray_Gangs, idx2, name, sizeof(name));
- }
- }
- CPrintToChat(target, "{blue}[Gang]{green}%N hat dich zu Gang %s eingeladen.", client, name);
- SetMenuTitle(invitemenu, "Join %s gang?", name);
- SetMenuExitBackButton(invitemenu, false);
- // send gang id
- decl String:sefo[32];
- IntToString(g_MemberDatabase[client][0], sefo, sizeof(sefo));
- AddMenuItem(invitemenu, "-1", "Nein");
- AddMenuItem(invitemenu, sefo, "Ja");
- DisplayMenu(invitemenu, target, MENU_TIME_FOREVER);
- }
- }
- }
- public MenuHandler_InviteRequest(Handle:menu, MenuAction:action, client, choice)
- {
- if (action == MenuAction_End)
- {
- CloseHandle(menu);
- }
- else if (action == MenuAction_Select)
- {
- decl String:info[32];
- GetMenuItem(menu, choice, info, sizeof(info));
- new gangid = StringToInt(info);
- // check if they made a gang or joineda another gang
- if (gangid != -1 && g_MemberDatabase[client][0] == -1)
- {
- // join gang
- decl String:sSteamID[22];
- GetClientAuthString(client, sSteamID, sizeof(sSteamID));
- decl String:sQuery[350];
- Format(sQuery, sizeof(sQuery), "UPDATE GangMembers SET gangid=%d,isleader=0,points=0 WHERE steamid='%s'", gangid, sSteamID);
- SQL_TQuery(gH_Database, SQL_TErrorCheck_CB, sQuery);
- g_MemberDatabase[client][0] = gangid; // id
- g_MemberDatabase[client][1] = 0; // points
- g_MemberDatabase[client][2] = 0; // isleader
- CPrintToChatAll("%N schloss sich einer Gang an.", client);
- }
- }
- }
- public SQL_TElection_CB(Handle:owner, Handle:hndl, const String:error[], any:gangid)
- {
- ErrorCheck(owner, error);
- ErrorCheck(hndl, error);
- decl String:sQuery[350];
- // check for any rows
- if (SQL_FetchRow(hndl))
- {
- // make top row the new leader
- decl String:steamid[22];
- SQL_FetchString(hndl, 0, steamid, sizeof(steamid));
- // find authid to client (if he's in the game)
- decl String:tempid[22];
- new client = 0;
- for (new idx = 1; idx <= MaxClients; idx++)
- {
- if (IsClientInGame(idx))
- {
- GetClientAuthString(idx, tempid, sizeof(tempid));
- if (!strcmp(tempid, steamid, false))
- {
- client = idx;
- break;
- }
- }
- }
- Format(sQuery, sizeof(sQuery), "UPDATE GangMembers SET isleader=1 WHERE steamid='%s'", steamid);
- if (client)
- {
- g_MemberDatabase[client][2] = 1;
- }
- SQL_TQuery(gH_Database, SQL_TErrorCheck_CB, sQuery);
- }
- else
- {
- Format(sQuery, sizeof(sQuery), "DELETE FROM Gangs WHERE id=%d", gangid);
- // remove from darray
- for (new idx2 = 0; idx2 < GetArraySize(gH_DArray_Gangs); idx2++)
- {
- if (GetArrayCell(gH_DArray_Gangs, idx2, 32) == gangid)
- {
- RemoveFromArray(gH_DArray_Gangs, idx2);
- break;
- }
- }
- SQL_TQuery(gH_Database, SQL_TErrorCheck_CB, sQuery);
- }
- }
- public SQL_TUpdateGangs_CB(Handle:owner, Handle:hndl, const String:error[], any:data)
- {
- ErrorCheck(owner, error);
- ErrorCheck(hndl, error);
- }
- public SQL_TErrorCheck_CB(Handle:owner, Handle:hndl, const String:error[], any:data)
- {
- ErrorCheck(owner, error);
- ErrorCheck(hndl, error);
- }
- ErrorCheck(Handle:owner, const String:error[])
- {
- if (owner == INVALID_HANDLE)
- {
- SetFailState("GANGS - SQL ERROR: %s", error);
- }
- }
- public Event_PlayerSpawn(Handle:event, const String:name[], bool:dontBroadcast)
- {
- if (gH_Database != INVALID_HANDLE && GetArraySize(gH_DArray_Gangs) > 0)
- {
- new client = GetClientOfUserId(GetEventInt(event, "userid"));
- if (g_MemberDatabase[client][0] >= 0)
- {
- new gangindex = 0;
- for (new idx2 = 0; idx2 < GetArraySize(gH_DArray_Gangs); idx2++)
- {
- if (GetArrayCell(gH_DArray_Gangs, idx2, 32) == g_MemberDatabase[client][0])
- {
- gangindex = idx2;
- }
- }
- // boost HP
- SetEntityHealth(client, GetClientHealth(client)+gShadow_Cvar_HealthPer*GetArrayCell(gH_DArray_Gangs, gangindex, 33));
- // boost money
- new money = gShadow_Cvar_StealingPer*GetArrayCell(gH_DArray_Gangs, gangindex, 34);
- Credit(client, money);
- // boost gravity
- new Float:gravity = 1.0 - float(gShadow_Cvar_GravityPer*GetArrayCell(gH_DArray_Gangs, gangindex, 35))/800.00;
- SetEntityGravity(client, gravity);
- // boost stamina
- new Float:speed = 1.0+0.02*float(gShadow_Cvar_StaminaPer*GetArrayCell(gH_DArray_Gangs, gangindex, 37));
- SetEntPropFloat(client, Prop_Data, "m_flLaggedMovementValue", speed);
- }
- }
- }
- DebitGang(dindex, amount)
- {
- // check money
- new money = GetArrayCell(gH_DArray_Gangs, dindex, 39);
- if (money-amount >= 0)
- {
- SetArrayCell(gH_DArray_Gangs, dindex, money-amount, 39);
- return money-amount;
- }
- else
- {
- return -1;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement