Advertisement
Guest User

Untitled

a guest
May 27th, 2014
151
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 47.87 KB | None | 0 0
  1. #define PLUGIN_VERSION "1.0.0.6"
  2. #define USE_RPG_CODE 1
  3.  
  4. enum Gang
  5. {
  6.     String:Name[32],
  7.     UniqueId,
  8.     HP,
  9.     Stealing,
  10.     Gravity,
  11.     Damage,
  12.     Stamina,
  13.     WeaponDrop
  14. };
  15.  
  16. enum Member
  17. {
  18.     String:SteamId[24],
  19.     UniqueId,
  20.     Points,
  21.     IsLeader
  22. }
  23.  
  24. new g_MemberDatabase[MAXPLAYERS+1][3];
  25.  
  26. #include <sourcemod>
  27. #include <perks>
  28. #include <cstrike>
  29. #include <sdktools>
  30. #include <adminmenu>
  31. #include <sdkhooks>
  32. #include <colors>
  33. #include <smlib>
  34.  
  35. new Handle:gH_Database = INVALID_HANDLE;
  36. new Handle:gH_Cvar_DatabaseDriver = INVALID_HANDLE;
  37.  
  38. new Handle:gH_Cvar_GangsCost = INVALID_HANDLE;
  39. new gShadow_Cvar_GangsCost;
  40.  
  41. new Handle:gH_DArray_Gangs = INVALID_HANDLE;
  42.  
  43. new g_iGangs = 0;
  44.  
  45. #if USE_RPG_CODE==1
  46. new Handle:gH_Cvar_HealthCost = INVALID_HANDLE;
  47. new Handle:gH_Cvar_StealingCost = INVALID_HANDLE;
  48. new Handle:gH_Cvar_GravityCost = INVALID_HANDLE;
  49. new Handle:gH_Cvar_DamageCost = INVALID_HANDLE;
  50. new Handle:gH_Cvar_StaminaCost = INVALID_HANDLE;
  51. new Handle:gH_Cvar_WeaponDropCost = INVALID_HANDLE;
  52.  
  53. new gShadow_Cvar_HealthCost;
  54. new gShadow_Cvar_StealingCost;
  55. new gShadow_Cvar_GravityCost;
  56. new gShadow_Cvar_DamageCost;
  57. new gShadow_Cvar_StaminaCost;
  58. new gShadow_Cvar_WeaponDropCost;
  59.  
  60. new Handle:gH_Cvar_HealthMax = INVALID_HANDLE;
  61. new Handle:gH_Cvar_StealingMax = INVALID_HANDLE;
  62. new Handle:gH_Cvar_GravityMax = INVALID_HANDLE;
  63. new Handle:gH_Cvar_DamageMax = INVALID_HANDLE;
  64. new Handle:gH_Cvar_StaminaMax = INVALID_HANDLE;
  65. new Handle:gH_Cvar_WeaponDropMax = INVALID_HANDLE;
  66.  
  67. new gShadow_Cvar_HealthMax;
  68. new gShadow_Cvar_StealingMax;
  69. new gShadow_Cvar_GravityMax;
  70. new gShadow_Cvar_DamageMax;
  71. new gShadow_Cvar_StaminaMax;
  72. new gShadow_Cvar_WeaponDropMax;
  73.  
  74. new Handle:gH_Cvar_HealthPer = INVALID_HANDLE;
  75. new Handle:gH_Cvar_StealingPer = INVALID_HANDLE;
  76. new Handle:gH_Cvar_GravityPer = INVALID_HANDLE;
  77. new Handle:gH_Cvar_DamagePer = INVALID_HANDLE;
  78. new Handle:gH_Cvar_StaminaPer = INVALID_HANDLE;
  79. new Handle:gH_Cvar_WeaponDropPer = INVALID_HANDLE;
  80.  
  81. new gShadow_Cvar_HealthPer;
  82. new gShadow_Cvar_StealingPer;
  83. new gShadow_Cvar_GravityPer;
  84. new gShadow_Cvar_DamagePer;
  85. new gShadow_Cvar_StaminaPer;
  86. new gShadow_Cvar_WeaponDropPer;
  87.  
  88. #endif
  89.  
  90. new Handle:gH_Cvar_MaxMembers = INVALID_HANDLE;
  91. new gShadow_Cvar_MaxMembers;
  92.  
  93. public OnPluginStart()
  94. {
  95.     CreateConVar("sm_gangs_version", PLUGIN_VERSION, "SM Gangs Version", FCVAR_SPONLY|FCVAR_DONTRECORD|FCVAR_REPLICATED|FCVAR_NOTIFY);
  96.  
  97.     LoadTranslations("common.phrases");
  98.    
  99.     gH_Cvar_DatabaseDriver = CreateConVar("sm_gangs_database_driver", "default", "Defines the database driver to use for the plugin.");
  100.  
  101.     gH_Cvar_GangsCost = CreateConVar("sm_gangs_cost_creation", "5000", "The cost to start a new gang.");
  102.     HookConVarChange(gH_Cvar_GangsCost, UpdateConVar);
  103.     gShadow_Cvar_GangsCost = 5000;
  104.    
  105.     gH_Cvar_MaxMembers = CreateConVar("sm_gangs_max_members", "14", "Max members per gang.");
  106.     gShadow_Cvar_MaxMembers = 14;
  107.     HookConVarChange(gH_Cvar_MaxMembers, UpdateConVar);
  108.    
  109. #if USE_RPG_CODE == 1
  110.     gH_Cvar_HealthCost = CreateConVar("sm_gangs_cost_health", "2000", "The cost to upgrade health.");
  111.     HookConVarChange(gH_Cvar_HealthCost, UpdateConVar);
  112.     gH_Cvar_StealingCost = CreateConVar("sm_gangs_cost_stealing", "2000", "Cost to upgrade money earning.");
  113.     HookConVarChange(gH_Cvar_StealingCost, UpdateConVar);
  114.     gH_Cvar_GravityCost = CreateConVar("sm_gangs_cost_gravity", "2000", "Cost to upgrade gravity.");
  115.     HookConVarChange(gH_Cvar_GravityCost, UpdateConVar);
  116.     gH_Cvar_DamageCost = CreateConVar("sm_gangs_cost_damage", "2000", "Cost to upgrade damage.");
  117.     HookConVarChange(gH_Cvar_DamageCost, UpdateConVar);
  118.     gH_Cvar_StaminaCost = CreateConVar("sm_gangs_cost_stamina", "2000", "Cost to upgrade stamina.");
  119.     HookConVarChange(gH_Cvar_StaminaCost, UpdateConVar);
  120.     gH_Cvar_WeaponDropCost = CreateConVar("sm_gangs_cost_weapondrop", "2000", "Cost to upgrade weapon drop chances.");
  121.     HookConVarChange(gH_Cvar_WeaponDropCost, UpdateConVar);
  122.    
  123.     gShadow_Cvar_HealthCost = 2000;
  124.     gShadow_Cvar_StealingCost = 2000;
  125.     gShadow_Cvar_GravityCost = 2000;
  126.     gShadow_Cvar_DamageCost = 2000;
  127.     gShadow_Cvar_StaminaCost = 2000;
  128.     gShadow_Cvar_WeaponDropCost = 2000;
  129.    
  130.     gH_Cvar_HealthMax = CreateConVar("sm_gangs_max_health", "10", "Max upgrades for health.");
  131.     HookConVarChange(gH_Cvar_HealthMax, UpdateConVar);
  132.     gH_Cvar_StealingMax = CreateConVar("sm_gangs_max_stealing", "10", "Max upgrade money earning.");
  133.     HookConVarChange(gH_Cvar_StealingMax, UpdateConVar);
  134.     gH_Cvar_GravityMax = CreateConVar("sm_gangs_max_gravity", "10", "Max upgrade gravity.");
  135.     HookConVarChange(gH_Cvar_GravityMax, UpdateConVar);
  136.     gH_Cvar_DamageMax = CreateConVar("sm_gangs_max_damage", "10", "Max upgrade damage.");
  137.     HookConVarChange(gH_Cvar_DamageMax, UpdateConVar);
  138.     gH_Cvar_StaminaMax = CreateConVar("sm_gangs_max_stamina", "10", "Max upgrade stamina.");
  139.     HookConVarChange(gH_Cvar_StaminaMax, UpdateConVar);
  140.     gH_Cvar_WeaponDropMax = CreateConVar("sm_gangs_max_weapondrop", "10", "Max upgrade weapon drop chances.");
  141.     HookConVarChange(gH_Cvar_WeaponDropMax, UpdateConVar);
  142.    
  143.     gShadow_Cvar_HealthMax = 10;
  144.     gShadow_Cvar_StealingMax = 10;
  145.     gShadow_Cvar_GravityMax = 10;
  146.     gShadow_Cvar_DamageMax = 10;
  147.     gShadow_Cvar_StaminaMax = 10;
  148.     gShadow_Cvar_WeaponDropMax = 10;
  149.  
  150.     gH_Cvar_HealthPer = CreateConVar("sm_gangs_per_health", "10", "Per upgrade for health.");
  151.     HookConVarChange(gH_Cvar_HealthPer, UpdateConVar);
  152.     gH_Cvar_StealingPer = CreateConVar("sm_gangs_per_stealing", "5", "Per upgrade for money earning.");
  153.     HookConVarChange(gH_Cvar_StealingPer, UpdateConVar);
  154.     gH_Cvar_GravityPer = CreateConVar("sm_gangs_per_gravity", "25", "Per upgrade for gravity.");
  155.     HookConVarChange(gH_Cvar_GravityPer, UpdateConVar);
  156.     gH_Cvar_DamagePer = CreateConVar("sm_gangs_per_damage", "3", "Per upgrade for damage.");
  157.     HookConVarChange(gH_Cvar_DamagePer, UpdateConVar);
  158.     gH_Cvar_StaminaPer = CreateConVar("sm_gangs_per_stamina", "3", "Per upgrade for stamina.");
  159.     HookConVarChange(gH_Cvar_StaminaPer, UpdateConVar);
  160.     gH_Cvar_WeaponDropPer = CreateConVar("sm_gangs_per_weapondrop", "1", "Per upgrade for weapon drop chances.");
  161.     HookConVarChange(gH_Cvar_WeaponDropPer, UpdateConVar);
  162.    
  163.     gShadow_Cvar_HealthPer = 10;
  164.     gShadow_Cvar_StealingPer = 5;
  165.     gShadow_Cvar_GravityPer = 25;
  166.     gShadow_Cvar_DamagePer = 3;
  167.     gShadow_Cvar_StaminaPer = 3;
  168.     gShadow_Cvar_WeaponDropPer = 1;
  169. #endif
  170.  
  171.     gH_DArray_Gangs = CreateArray(40);
  172.    
  173.     RegConsoleCmd("sm_gang", Command_Gangs);
  174.     RegConsoleCmd("sm_gangs", Command_Gangs);
  175.     RegConsoleCmd("sm_GANG", Command_Gangs);
  176.     RegConsoleCmd("sm_GANGS", Command_Gangs);
  177.     RegConsoleCmd("sm_addgang", Command_AddGang);
  178.     RegConsoleCmd("sm_transfer", Command_Transfer);
  179.    
  180.     AutoExecConfig(true, "gangs");
  181.    
  182.     HookEvent("player_spawn", Event_PlayerSpawn);
  183. }
  184.  
  185. public OnConfigsExecuted()
  186. {
  187.     gShadow_Cvar_GangsCost = GetConVarInt(gH_Cvar_GangsCost);
  188.     gShadow_Cvar_MaxMembers = GetConVarInt(gH_Cvar_MaxMembers);
  189.     gShadow_Cvar_HealthCost = GetConVarInt(gH_Cvar_HealthCost);
  190.     gShadow_Cvar_StealingCost = GetConVarInt(gH_Cvar_StealingCost);
  191.     gShadow_Cvar_GravityCost = GetConVarInt(gH_Cvar_GravityCost);
  192.     gShadow_Cvar_DamageCost = GetConVarInt(gH_Cvar_DamageCost);
  193.     gShadow_Cvar_StaminaCost = GetConVarInt(gH_Cvar_StaminaCost);
  194.     gShadow_Cvar_WeaponDropCost = GetConVarInt(gH_Cvar_WeaponDropCost);
  195.     gShadow_Cvar_HealthMax = GetConVarInt(gH_Cvar_HealthMax);
  196.     gShadow_Cvar_StealingMax = GetConVarInt(gH_Cvar_StealingMax);
  197.     gShadow_Cvar_GravityMax = GetConVarInt(gH_Cvar_GravityMax);
  198.     gShadow_Cvar_DamageMax = GetConVarInt(gH_Cvar_DamageMax);
  199.     gShadow_Cvar_StaminaMax = GetConVarInt(gH_Cvar_StaminaMax);
  200.     gShadow_Cvar_WeaponDropMax = GetConVarInt(gH_Cvar_WeaponDropMax);
  201.     gShadow_Cvar_HealthPer = GetConVarInt(gH_Cvar_HealthPer);
  202.     gShadow_Cvar_StealingPer = GetConVarInt(gH_Cvar_StealingPer);
  203.     gShadow_Cvar_GravityPer = GetConVarInt(gH_Cvar_GravityPer);
  204.     gShadow_Cvar_DamagePer = GetConVarInt(gH_Cvar_DamagePer);
  205.     gShadow_Cvar_StaminaPer = GetConVarInt(gH_Cvar_StaminaPer);
  206.     gShadow_Cvar_WeaponDropPer = GetConVarInt(gH_Cvar_WeaponDropPer);
  207.    
  208.     if (gH_Database == INVALID_HANDLE)
  209.     {
  210.         decl String:sDatabase[64];
  211.         GetConVarString(gH_Cvar_DatabaseDriver, sDatabase, sizeof(sDatabase));
  212.         SQL_TConnect(SQL_TConnect_CB, sDatabase);
  213.     }
  214. }
  215.  
  216. public SQL_TConnect_CB(Handle:owner, Handle:hndl, const String:error[], any:data)
  217. {
  218.     ErrorCheck(owner, error);
  219.     ErrorCheck(hndl, error);
  220.  
  221.     gH_Database = hndl;
  222.  
  223.     // Create if tables don't exist
  224.  
  225.     /*  Database Structure
  226.         Table Name: Gang_Members
  227.         SteamId, String 24 chars
  228.         GangUniqueId, Int32
  229.         GangPoints, Int32
  230.         IsLeader, Int32
  231.  
  232.         Table Name: Gangs
  233.  
  234.         GangName, String 32 chars
  235.         GangUniqueId, Int32
  236.         GangHP, Int32
  237.         GangStealing, Int32
  238.         GangGravity, Int32
  239.         GangDamage, Int32
  240.         GangStamina, Int32
  241.         GangWeaponDrop, Int32
  242.  
  243.     */
  244.  
  245.     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))");
  246.     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))");
  247. }
  248.  
  249. public SQL_TCreate_CB(Handle:owner, Handle:hndl, const String:error[], any:data)
  250. {
  251.     ErrorCheck(owner, error);
  252.     ErrorCheck(hndl, error);
  253.  
  254.     SQL_TQuery(gH_Database, SQL_TStart_CB, "SELECT * FROM Gangs");
  255. }
  256.  
  257. public OnMapStart()
  258. {
  259.     if (gH_Database != INVALID_HANDLE)
  260.     {
  261.         SQL_TQuery(gH_Database, SQL_TStart_CB, "SELECT * FROM Gangs");
  262.     }
  263. }
  264.  
  265. public SQL_TStart_CB(Handle:owner, Handle:hndl, const String:error[], any:data)
  266. {
  267.     ErrorCheck(owner, error);
  268.     ErrorCheck(hndl, error);
  269.    
  270.     ClearArray(gH_DArray_Gangs);
  271.     g_iGangs = SQL_GetRowCount(hndl);
  272.    
  273.     for (new rows = 0; rows < g_iGangs; rows++)
  274.     {
  275.         ResizeArray(gH_DArray_Gangs, GetArraySize(gH_DArray_Gangs)+1);
  276.         if (SQL_FetchRow(hndl) == false)
  277.         {
  278.             LogError("not fetching a row");
  279.             break;
  280.         }
  281.         decl String:name[32];
  282.         SQL_FetchString(hndl, 0, name, sizeof(name));
  283.         SetArrayString(gH_DArray_Gangs, rows, name);   
  284.  
  285.         SetArrayCell(gH_DArray_Gangs, rows, SQL_FetchInt(hndl, 1), 32); // id
  286.         SetArrayCell(gH_DArray_Gangs, rows, SQL_FetchInt(hndl, 2), 33); // hp
  287.         SetArrayCell(gH_DArray_Gangs, rows, SQL_FetchInt(hndl, 3), 34); // stealing
  288.         SetArrayCell(gH_DArray_Gangs, rows, SQL_FetchInt(hndl, 4), 35); // gravity
  289.         SetArrayCell(gH_DArray_Gangs, rows, SQL_FetchInt(hndl, 5), 36); // damage
  290.         SetArrayCell(gH_DArray_Gangs, rows, SQL_FetchInt(hndl, 6), 37); // stamina
  291.         SetArrayCell(gH_DArray_Gangs, rows, SQL_FetchInt(hndl, 7), 38); // drop
  292.         SetArrayCell(gH_DArray_Gangs, rows, SQL_FetchInt(hndl, 8), 39); // money
  293.     }
  294. }
  295.  
  296. public UpdateConVar(Handle:cvar, const String:oldValue[], const String:newValue[])
  297. {
  298.     new value = StringToInt(newValue);
  299.  
  300.     if (cvar == gH_Cvar_GangsCost)
  301.     {
  302.         gShadow_Cvar_GangsCost = value;
  303.     }
  304.     else if (cvar == gH_Cvar_MaxMembers)
  305.     {
  306.         gShadow_Cvar_MaxMembers = value;
  307.     }
  308. #if USE_RPG_CODE == 1
  309.     else if (cvar == gH_Cvar_HealthCost)
  310.     {
  311.         gShadow_Cvar_HealthCost = value;
  312.     }
  313.     else if (cvar == gH_Cvar_StealingCost)
  314.     {
  315.         gShadow_Cvar_StealingCost = value;
  316.     }
  317.     else if (cvar == gH_Cvar_GravityCost)
  318.     {
  319.         gShadow_Cvar_GravityCost = value;
  320.     }
  321.     else if (cvar == gH_Cvar_DamageCost)
  322.     {
  323.         gShadow_Cvar_DamageCost = value;
  324.     }
  325.     else if (cvar == gH_Cvar_StaminaCost)
  326.     {
  327.         gShadow_Cvar_StaminaCost = value;
  328.     }
  329.     else if (cvar == gH_Cvar_WeaponDropCost)
  330.     {
  331.         gShadow_Cvar_WeaponDropCost = value;
  332.     }
  333.     else if (cvar == gH_Cvar_HealthMax)
  334.     {
  335.         gShadow_Cvar_HealthMax = value;
  336.     }
  337.     else if (cvar == gH_Cvar_StealingMax)
  338.     {
  339.         gShadow_Cvar_StealingMax = value;
  340.     }
  341.     else if (cvar == gH_Cvar_GravityMax)
  342.     {
  343.         gShadow_Cvar_GravityMax = value;
  344.     }
  345.     else if (cvar == gH_Cvar_DamageMax)
  346.     {
  347.         gShadow_Cvar_DamageMax = value;
  348.     }
  349.     else if (cvar == gH_Cvar_StaminaMax)
  350.     {
  351.         gShadow_Cvar_StaminaMax = value;
  352.     }
  353.     else if (cvar == gH_Cvar_WeaponDropMax)
  354.     {
  355.         gShadow_Cvar_WeaponDropMax = value;
  356.     }
  357.     else if (cvar == gH_Cvar_HealthPer)
  358.     {
  359.         gShadow_Cvar_HealthPer = value;
  360.     }
  361.     else if (cvar == gH_Cvar_StealingPer)
  362.     {
  363.         gShadow_Cvar_StealingPer = value;
  364.     }
  365.     else if (cvar == gH_Cvar_GravityPer)
  366.     {
  367.         gShadow_Cvar_GravityPer = value;
  368.     }
  369.     else if (cvar == gH_Cvar_DamagePer)
  370.     {
  371.         gShadow_Cvar_DamagePer = value;
  372.     }
  373.     else if (cvar == gH_Cvar_StaminaPer)
  374.     {
  375.         gShadow_Cvar_StaminaPer = value;
  376.     }
  377.     else if (cvar == gH_Cvar_WeaponDropPer)
  378.     {
  379.         gShadow_Cvar_WeaponDropPer = value;
  380.     }
  381. #endif
  382. }
  383.  
  384. void:DisplayGangsMenu(client)
  385. {
  386.     new Handle:menu = CreateMenu(MenuHandler_Gangs);
  387.    
  388.     if (g_MemberDatabase[client][0] != -1)
  389.     {
  390.         decl String:gangname[32];
  391.         new gangindex;
  392.         for (new idx2 = 0; idx2 < GetArraySize(gH_DArray_Gangs); idx2++)
  393.         {
  394.             if (GetArrayCell(gH_DArray_Gangs, idx2, 32) == g_MemberDatabase[client][0])
  395.             {
  396.                 gangindex = idx2;
  397.                 GetArrayString(gH_DArray_Gangs, idx2, gangname, sizeof(gangname));
  398.                 break;
  399.             }
  400.         }
  401.        
  402.         SetMenuTitle(menu, "%s ($%d)", gangname, GetArrayCell(gH_DArray_Gangs, gangindex, 39));
  403.         SetMenuExitBackButton(menu, false);
  404.        
  405.         // any leader/admin
  406.         if (g_MemberDatabase[client][2])
  407.         {
  408.             AddMenuItem(menu, "2", "Spieler einladen");
  409.             AddMenuItem(menu, "3", "Skills");
  410.             AddMenuItem(menu, "6", "Mitglied kicken");
  411.         }
  412.        
  413.         AddMenuItem(menu, "4", "Top Gangs");
  414.         AddMenuItem(menu, "5", "Gang verlassen");
  415.        
  416.         // only leader
  417.         if (g_MemberDatabase[client][2] == 1)
  418.         {
  419.             AddMenuItem(menu, "9", "Memberstatus");
  420.         }
  421.         AddMenuItem(menu, "7", "Online Members");
  422.         AddMenuItem(menu, "8", "Geld ueberweisen");
  423.        
  424.         DisplayMenu(menu, client, MENU_TIME_FOREVER);  
  425.     }
  426.     else
  427.     {
  428.         SetMenuTitle(menu, "Gangs");
  429.         SetMenuExitBackButton(menu, false);
  430.  
  431.         AddMenuItem(menu, "1", "Gang erstellen");
  432.         AddMenuItem(menu, "4", "Top Gangs");
  433.        
  434.         DisplayMenu(menu, client, MENU_TIME_FOREVER);
  435.     }
  436. }
  437.  
  438. void:DisplaySkillsMenu(client)
  439. {
  440.     if (g_MemberDatabase[client][0] < 0)
  441.     {
  442.         CPrintToChat(client, "{blue}[Gang]{green}Du bist in keiner Gang.");
  443.         return;
  444.     }
  445.    
  446.     new Handle:menu = CreateMenu(MenuHandler_Skills);
  447.    
  448.     // find gang
  449.     decl String:name[32];
  450.     new gangindex = 0;
  451.     for (new idx2 = 0; idx2 < GetArraySize(gH_DArray_Gangs); idx2++)
  452.     {
  453.         if (GetArrayCell(gH_DArray_Gangs, idx2, 32) == g_MemberDatabase[client][0])
  454.         {
  455.             gangindex = idx2;
  456.             GetArrayString(gH_DArray_Gangs, idx2, name, sizeof(name));
  457.         }                              
  458.     }
  459.     SetMenuTitle(menu, "%s Gang", name);
  460.     SetMenuExitBackButton(menu, false);
  461.    
  462.     decl String:sTitle[32];
  463.     // check for max
  464.     if (gShadow_Cvar_HealthMax > GetArrayCell(gH_DArray_Gangs, gangindex, 33))
  465.     {
  466.         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));
  467.         AddMenuItem(menu, "1", sTitle);
  468.     }
  469.     else
  470.     {
  471.         Format(sTitle, sizeof(sTitle), "HP - Level %d (ausverkauft)", GetArrayCell(gH_DArray_Gangs, gangindex, 33));
  472.         AddMenuItem(menu, "", sTitle);
  473.     }
  474.     if (gShadow_Cvar_StealingMax > GetArrayCell(gH_DArray_Gangs, gangindex, 34))
  475.     {
  476.         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));
  477.         AddMenuItem(menu, "2", sTitle);
  478.     }
  479.     else
  480.     {
  481.         Format(sTitle, sizeof(sTitle), "Stealing - Level %d (ausverkauft)", GetArrayCell(gH_DArray_Gangs, gangindex, 34));
  482.         AddMenuItem(menu, "", sTitle);
  483.     }
  484.     if (gShadow_Cvar_GravityMax > GetArrayCell(gH_DArray_Gangs, gangindex, 35))
  485.     {
  486.         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));
  487.         AddMenuItem(menu, "3", sTitle);
  488.     }
  489.     else
  490.     {
  491.         Format(sTitle, sizeof(sTitle), "Gravity - Level %d (ausverkauft)", GetArrayCell(gH_DArray_Gangs, gangindex, 35));
  492.         AddMenuItem(menu, "", sTitle);
  493.     }
  494.     if (gShadow_Cvar_DamageMax > GetArrayCell(gH_DArray_Gangs, gangindex, 36))
  495.     {
  496.         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));
  497.         AddMenuItem(menu, "4", sTitle);
  498.     }
  499.     else
  500.     {
  501.         Format(sTitle, sizeof(sTitle), "Damage - Level %d (ausverkauft)", GetArrayCell(gH_DArray_Gangs, gangindex, 36));
  502.         AddMenuItem(menu, "", sTitle);
  503.     }
  504.     if (gShadow_Cvar_StaminaMax > GetArrayCell(gH_DArray_Gangs, gangindex, 37))
  505.     {
  506.         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));
  507.         AddMenuItem(menu, "5", sTitle);
  508.     }
  509.     else
  510.     {
  511.         Format(sTitle, sizeof(sTitle), "Speed - Level %d (ausverkauft)", GetArrayCell(gH_DArray_Gangs, gangindex, 37));
  512.         AddMenuItem(menu, "", sTitle);
  513.     }
  514.     if (gShadow_Cvar_WeaponDropMax > GetArrayCell(gH_DArray_Gangs, gangindex, 38))
  515.     {
  516.         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));
  517.         AddMenuItem(menu, "6", sTitle);
  518.     }
  519.     else
  520.     {
  521.         Format(sTitle, sizeof(sTitle), "Weapon Drop - Level %d (ausverkauft)", GetArrayCell(gH_DArray_Gangs, gangindex, 38));
  522.         AddMenuItem(menu, "", sTitle);
  523.     }
  524.    
  525.     DisplayMenu(menu, client, MENU_TIME_FOREVER);
  526. }
  527.  
  528. public MenuHandler_Skills(Handle:menu, MenuAction:action, client, choice)
  529. {
  530.     if (action == MenuAction_End)
  531.     {
  532.         CloseHandle(menu);
  533.     }
  534.     else if (action == MenuAction_Select)
  535.     {
  536.         decl String:sChoice[10];
  537.         GetMenuItem(menu, choice, sChoice, sizeof(sChoice));
  538.         new selection = StringToInt(sChoice);
  539.         decl String:sQuery[350];
  540.         new bool:purchase = false;
  541.         new gangindex = 0;
  542.         for (new idx2 = 0; idx2 < GetArraySize(gH_DArray_Gangs); idx2++)
  543.         {
  544.             if (GetArrayCell(gH_DArray_Gangs, idx2, 32) == g_MemberDatabase[client][0])
  545.             {
  546.                 gangindex = idx2;
  547.             }                              
  548.         }
  549.         new amount;
  550.         switch (selection)
  551.         {
  552.             case 1:
  553.             {
  554.                 amount = DebitGang(gangindex, gShadow_Cvar_HealthCost + gShadow_Cvar_HealthCost*GetArrayCell(gH_DArray_Gangs, gangindex, 33));
  555.                 if (amount != -1)
  556.                 {
  557.                     SetArrayCell(gH_DArray_Gangs, gangindex, GetArrayCell(gH_DArray_Gangs, gangindex, 33)+1, 33);
  558.                     g_MemberDatabase[client][1] += gShadow_Cvar_HealthCost + gShadow_Cvar_HealthCost*GetArrayCell(gH_DArray_Gangs, gangindex, 33);
  559.                     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]);
  560.                     SQL_TQuery(gH_Database, SQL_TErrorCheck_CB, sQuery);
  561.                     purchase = true;
  562.                 }
  563.                 else
  564.                 {
  565.                     CPrintToChat(client, "{blue}[Gang]{green}Das kannst du dir nicht leisten!");
  566.                     return;
  567.                 }
  568.             }
  569.             case 2:
  570.             {
  571.                 amount = DebitGang(gangindex, gShadow_Cvar_StealingCost + gShadow_Cvar_StealingCost*GetArrayCell(gH_DArray_Gangs, gangindex, 34));
  572.                 if (amount != -1)
  573.                 {
  574.                     SetArrayCell(gH_DArray_Gangs, gangindex, GetArrayCell(gH_DArray_Gangs, gangindex, 34)+1, 34);
  575.                     g_MemberDatabase[client][1] += gShadow_Cvar_StealingCost + gShadow_Cvar_StealingCost*GetArrayCell(gH_DArray_Gangs, gangindex, 34);
  576.                     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]);
  577.                     SQL_TQuery(gH_Database, SQL_TErrorCheck_CB, sQuery);
  578.                     purchase = true;
  579.                 }
  580.                 else
  581.                 {
  582.                     CPrintToChat(client, "{blue}[Gang]{green}Das kannst du dir nicht leisten!");
  583.                     return;
  584.                 }
  585.             }
  586.             case 3:
  587.             {
  588.                 amount = DebitGang(gangindex, gShadow_Cvar_GravityCost + gShadow_Cvar_GravityCost*GetArrayCell(gH_DArray_Gangs, gangindex, 35));
  589.                 if (amount != -1)
  590.                 {
  591.                     SetArrayCell(gH_DArray_Gangs, gangindex, GetArrayCell(gH_DArray_Gangs, gangindex, 35)+1, 35);
  592.                     g_MemberDatabase[client][1] += gShadow_Cvar_GravityCost + gShadow_Cvar_GravityCost*GetArrayCell(gH_DArray_Gangs, gangindex, 35);
  593.                     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]);
  594.                     SQL_TQuery(gH_Database, SQL_TErrorCheck_CB, sQuery);
  595.                     purchase = true;
  596.                 }
  597.                 else
  598.                 {
  599.                     CPrintToChat(client, "{blue}[Gang]{green}Das kannst du dir nicht leisten!");
  600.                     return;
  601.                 }
  602.             }
  603.             case 4:
  604.             {
  605.                 amount = DebitGang(gangindex, gShadow_Cvar_DamageCost + gShadow_Cvar_DamageCost*GetArrayCell(gH_DArray_Gangs, gangindex, 36));
  606.                 if (amount != -1)
  607.                 {
  608.                     SetArrayCell(gH_DArray_Gangs, gangindex, GetArrayCell(gH_DArray_Gangs, gangindex, 36)+1, 36);
  609.                     g_MemberDatabase[client][1] += gShadow_Cvar_DamageCost + gShadow_Cvar_DamageCost*GetArrayCell(gH_DArray_Gangs, gangindex, 36);
  610.                     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]);
  611.                     SQL_TQuery(gH_Database, SQL_TErrorCheck_CB, sQuery);
  612.                     purchase = true;
  613.                 }
  614.                 else
  615.                 {
  616.                     CPrintToChat(client, "{blue}[Gang]{green}Das kannst du dir nicht leisten!");
  617.                     return;
  618.                 }
  619.             }
  620.             case 5:
  621.             {
  622.                 amount = DebitGang(gangindex, gShadow_Cvar_StaminaCost + gShadow_Cvar_StaminaCost*GetArrayCell(gH_DArray_Gangs, gangindex, 37));
  623.                 if (amount != -1)
  624.                 {
  625.                     SetArrayCell(gH_DArray_Gangs, gangindex, GetArrayCell(gH_DArray_Gangs, gangindex, 37)+1, 37);
  626.                     g_MemberDatabase[client][1] += gShadow_Cvar_StaminaCost + gShadow_Cvar_StaminaCost*GetArrayCell(gH_DArray_Gangs, gangindex, 37);
  627.                     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]);
  628.                     SQL_TQuery(gH_Database, SQL_TErrorCheck_CB, sQuery);
  629.                     purchase = true;
  630.                 }
  631.                 else
  632.                 {
  633.                     CPrintToChat(client, "{blue}[Gang]{green}Das kannst du dir nicht leisten!");
  634.                     return;
  635.                 }
  636.             }
  637.             case 6:
  638.             {
  639.                 amount = DebitGang(gangindex, gShadow_Cvar_WeaponDropCost + gShadow_Cvar_WeaponDropCost*GetArrayCell(gH_DArray_Gangs, gangindex, 38));
  640.                 if (amount != -1)
  641.                 {
  642.                     SetArrayCell(gH_DArray_Gangs, gangindex, GetArrayCell(gH_DArray_Gangs, gangindex, 38)+1, 38);
  643.                     g_MemberDatabase[client][1] += gShadow_Cvar_WeaponDropCost + gShadow_Cvar_WeaponDropCost*GetArrayCell(gH_DArray_Gangs, gangindex, 38);
  644.                     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]);
  645.                     SQL_TQuery(gH_Database, SQL_TErrorCheck_CB, sQuery);
  646.                     purchase = true;
  647.                 }
  648.                 else
  649.                 {
  650.                     CPrintToChat(client, "{blue}[Gang]{green}Das kannst du dir nicht leisten!");
  651.                     return;
  652.                 }
  653.             }
  654.         }
  655.         if (purchase)
  656.         {
  657.             decl String:steamid[22];
  658.             GetClientAuthString(client, steamid, sizeof(steamid));
  659.             Format(sQuery, sizeof(sQuery), "UPDATE GangMembers SET points=%d WHERE steamid='%s'", g_MemberDatabase[client][1], steamid);
  660.             SQL_TQuery(gH_Database, SQL_TErrorCheck_CB, sQuery);
  661.             CPrintToChat(client, "{blue}[Gang]{green}Einkauf erfolgreich.");
  662.         }
  663.     }
  664. }
  665.  
  666. public MenuHandler_Gangs(Handle:menu, MenuAction:action, client, choice)
  667. {
  668.     if (action == MenuAction_End)
  669.     {
  670.         CloseHandle(menu);
  671.     }
  672.     else if (action == MenuAction_Select)
  673.     {
  674.         decl String:sChoice[10];
  675.         GetMenuItem(menu, choice, sChoice, sizeof(sChoice));
  676.         new selection = StringToInt(sChoice);
  677.         switch (selection)
  678.         {
  679.             case 1:
  680.             {
  681.                 CPrintToChat(client, "{blue}[Gang]{green} Benutze !addgang <name>");
  682.             }
  683.             case 2:
  684.             {
  685.                 if (g_MemberDatabase[client][0] != -1)
  686.                 {
  687.                     if (g_MemberDatabase[client][2] > 0)
  688.                     {
  689.                         // check for max members
  690.                         decl String:sQuery[350];
  691.                         Format(sQuery, sizeof(sQuery), "SELECT * FROM GangMembers WHERE gangid=%d", g_MemberDatabase[client][0]);
  692.                         SQL_TQuery(gH_Database, SQL_TMaxMembers_CB, sQuery, client);
  693.                     }
  694.                     else
  695.                     {
  696.                         CPrintToChat(client, "{blue}[Gang]{green}Du hast dazu keine Rechte");
  697.                     }
  698.                 }
  699.                 else
  700.                 {
  701.                     CPrintToChat(client, "{blue}[Gang]{green}Du bist in keiner Gang.");
  702.                 }
  703.             }
  704.             case 3:
  705.             {
  706.                 // skills menu
  707.                 DisplaySkillsMenu(client);
  708.             }
  709.             case 4:
  710.             {
  711.                 // make menu for ranks
  712.                 new Handle:topgangs = CreateMenu(MenuHandler_TopGangs);
  713.                
  714.                 SetMenuTitle(topgangs, "Top Gangs");
  715.                 SetMenuExitBackButton(topgangs, false);
  716.                
  717.                 new total = 0;
  718.                 decl String:name[32];
  719.                 decl String:sTitle[40];
  720.                 for (new idx2 = 0; idx2 < GetArraySize(gH_DArray_Gangs); idx2++)
  721.                 {
  722.                     total = GetArrayCell(gH_DArray_Gangs, idx2, 32) +
  723.                     GetArrayCell(gH_DArray_Gangs, idx2, 33) +
  724.                     GetArrayCell(gH_DArray_Gangs, idx2, 34) +
  725.                     GetArrayCell(gH_DArray_Gangs, idx2, 35) +
  726.                     GetArrayCell(gH_DArray_Gangs, idx2, 36) +
  727.                     GetArrayCell(gH_DArray_Gangs, idx2, 37) +
  728.                     GetArrayCell(gH_DArray_Gangs, idx2, 38);
  729.                     GetArrayString(gH_DArray_Gangs, idx2, name, sizeof(name));
  730.                     Format(sTitle, sizeof(sTitle), "%s (%d)", name, total);
  731.                     AddMenuItem(topgangs, "", sTitle);
  732.                 }
  733.                
  734.                 DisplayMenu(topgangs, client, MENU_TIME_FOREVER);
  735.             }
  736.             case 5:
  737.             {
  738.                 if (g_MemberDatabase[client][0] != -1)
  739.                 {
  740.                     decl String:steamid[22];
  741.                     GetClientAuthString(client, steamid, sizeof(steamid));
  742.                     decl String:sQuery[350];
  743.                     if (g_MemberDatabase[client][2] == 1)
  744.                     {
  745.                         // force leader re-election
  746.                         CPrintToChatAll("Forcing leader re-election.");
  747.                         Format(sQuery, sizeof(sQuery), "SELECT * FROM GangMembers WHERE gangid=%d AND steamid<>'%s' ORDER BY points DESC", g_MemberDatabase[client][0], steamid);
  748.                         SQL_TQuery(gH_Database, SQL_TElection_CB, sQuery, g_MemberDatabase[client][0]);
  749.                     }
  750.                     Format(sQuery, sizeof(sQuery), "UPDATE GangMembers SET gangid=-1,points=0,isleader=0 WHERE steamid = '%s'", steamid);
  751.                     SQL_TQuery(gH_Database, SQL_TErrorCheck_CB, sQuery);
  752.                    
  753.                     g_MemberDatabase[client][0] = -1;
  754.                     g_MemberDatabase[client][1] = 0;
  755.                     g_MemberDatabase[client][2] = 0;
  756.                    
  757.                     CPrintToChat(client, "{blue}[Gang]{green}Du wurdest von der Gang ausgeschlossen");
  758.                 }
  759.                 else
  760.                 {
  761.                     CPrintToChat(client, "{blue}[Gang]{green}Du bist in keiner Gang.");
  762.                 }
  763.             }
  764.             case 6:
  765.             {
  766.                 new Handle:kickmenu = CreateMenu(MenuHandler_KickMember);
  767.                
  768.                 SetMenuTitle(kickmenu, "Mitlglied kicken:");
  769.                 SetMenuExitBackButton(kickmenu, false);
  770.                
  771.                 // find other gang members
  772.                 decl String:sPlayerTitle[64];
  773.                 decl String:sData[30];
  774.                 if (g_MemberDatabase[client][2] == 1)
  775.                 {
  776.                     for (new idx = 1; idx <= MaxClients; idx++)
  777.                     {
  778.                         if (IsClientInGame(idx))
  779.                         {
  780.                             // check for same gang and not leader
  781.                             if (g_MemberDatabase[client][0] == g_MemberDatabase[idx][0] && (g_MemberDatabase[idx][2] != 1))
  782.                             {
  783.                                 Format(sData, sizeof(sData), "%d", GetClientUserId(idx));
  784.                                
  785.                                 // allow leader to kick admins
  786.                                 if ((g_MemberDatabase[idx][2] == 3) && (g_MemberDatabase[client][2] == 1))
  787.                                 {
  788.                                     Format(sPlayerTitle, sizeof(sPlayerTitle), "(Adm) %N", idx);
  789.                                 }
  790.                                 else if (!g_MemberDatabase[idx][2])
  791.                                 {
  792.                                     Format(sPlayerTitle, sizeof(sPlayerTitle), "%N", idx);
  793.                                 }
  794.                                
  795.                                 AddMenuItem(kickmenu, sData, sPlayerTitle);
  796.                             }
  797.                         }
  798.                     }
  799.                 }
  800.                 else
  801.                 {
  802.                     for (new idx = 1; idx <= MaxClients; idx++)
  803.                     {
  804.                         if (IsClientInGame(idx))
  805.                         {
  806.                             // check for same gang and not leader
  807.                             if (g_MemberDatabase[client][0] == g_MemberDatabase[idx][0] && (g_MemberDatabase[idx][2] == 0))
  808.                             {
  809.                                 Format(sData, sizeof(sData), "%d", GetClientUserId(idx));
  810.                                 Format(sPlayerTitle, sizeof(sPlayerTitle), "%N", idx);
  811.                                
  812.                                 AddMenuItem(kickmenu, sData, sPlayerTitle);
  813.                             }
  814.                         }
  815.                     }                  
  816.                 }
  817.                
  818.                 DisplayMenu(kickmenu, client, MENU_TIME_FOREVER);
  819.             }
  820.             case 7:
  821.             {
  822.                 if (g_MemberDatabase[client][0] != -1)
  823.                 {
  824.                     // find gang name
  825.                     decl String:gangname[32];
  826.                     for (new idx2 = 0; idx2 < GetArraySize(gH_DArray_Gangs); idx2++)
  827.                     {
  828.                         if (GetArrayCell(gH_DArray_Gangs, idx2, 32) == g_MemberDatabase[client][0])
  829.                         {
  830.                             GetArrayString(gH_DArray_Gangs, idx2, gangname, sizeof(gangname));
  831.                             break;
  832.                         }
  833.                     }
  834.                    
  835.                     new Handle:onlinemenu = CreateMenu(MenuHandler_TopGangs);
  836.                    
  837.                     SetMenuTitle(onlinemenu, "%s Members:", gangname);
  838.                     SetMenuExitBackButton(onlinemenu, false);
  839.                    
  840.                     // find other gang members
  841.                     decl String:sPlayerTitle[64];
  842.                     for (new idx = 1; idx <= MaxClients; idx++)
  843.                     {
  844.                         if (IsClientInGame(idx))
  845.                         {
  846.                             // check for same gang
  847.                             if (g_MemberDatabase[client][0] == g_MemberDatabase[idx][0])
  848.                             {
  849.                                 if (g_MemberDatabase[idx][2] == 1)
  850.                                 {
  851.                                     Format(sPlayerTitle, sizeof(sPlayerTitle), "(Ldr) - %N", idx);
  852.                                 }
  853.                                 else if (g_MemberDatabase[idx][2] == 3)
  854.                                 {
  855.                                     Format(sPlayerTitle, sizeof(sPlayerTitle), "(Adm) - %N", idx);
  856.                                 }
  857.                                 else
  858.                                 {
  859.                                     Format(sPlayerTitle, sizeof(sPlayerTitle), "%N", idx);
  860.                                 }
  861.                                 AddMenuItem(onlinemenu, "", sPlayerTitle);
  862.                             }
  863.                         }
  864.                     }
  865.                    
  866.                     DisplayMenu(onlinemenu, client, MENU_TIME_FOREVER);
  867.                 }
  868.                 else
  869.                 {
  870.                     CPrintToChat(client, "{blue}[Gang]{green}Du bist in keiner Gang");
  871.                 }
  872.             }
  873.             case 8:
  874.             {
  875.                 CPrintToChat(client, "{blue}[Gang]{green}Benutze !transfer <Wert> um das  Geld zu uebertragen.");
  876.             }
  877.             case 9:
  878.             {
  879.                 // promote/demote members to admin
  880.                
  881.                 new Handle:gangadminmenu = CreateMenu(MenuHandler_GangAdmin);
  882.                
  883.                 SetMenuTitle(gangadminmenu, "Memberstatus:");
  884.                 SetMenuExitBackButton(gangadminmenu, false);
  885.                
  886.                 // find other gang members
  887.                 decl String:sPlayerTitle[64];
  888.                 decl String:sData[32];
  889.                 if (g_MemberDatabase[client][2] == 1)
  890.                 {
  891.                     for (new idx = 1; idx <= MaxClients; idx++)
  892.                     {
  893.                         if (IsClientInGame(idx))
  894.                         {
  895.                             // check for same gang
  896.                             if (g_MemberDatabase[client][0] == g_MemberDatabase[idx][0])
  897.                             {
  898.                                 Format(sData, sizeof(sData), "%d", GetClientUserId(idx));
  899.                                
  900.                                 if (g_MemberDatabase[idx][2] == 1)
  901.                                 {
  902.                                     Format(sPlayerTitle, sizeof(sPlayerTitle), "(Ldr) - %N", idx);
  903.                                 }
  904.                                 else if (g_MemberDatabase[idx][2] == 3)
  905.                                 {
  906.                                     Format(sPlayerTitle, sizeof(sPlayerTitle), "(Adm) - %N", idx);
  907.                                 }
  908.                                 else
  909.                                 {
  910.                                     Format(sPlayerTitle, sizeof(sPlayerTitle), "%N", idx);
  911.                                 }
  912.                                
  913.                                 AddMenuItem(gangadminmenu, sData, sPlayerTitle);
  914.                             }
  915.                         }
  916.                     }
  917.                 }
  918.                 else
  919.                 {
  920.                     for (new idx = 1; idx <= MaxClients; idx++)
  921.                     {
  922.                         if (IsClientInGame(idx))
  923.                         {
  924.                             // check for same gang
  925.                             if (g_MemberDatabase[client][0] == g_MemberDatabase[idx][0] && (g_MemberDatabase[idx][2] == 0))
  926.                             {
  927.                                 Format(sData, sizeof(sData), "%d", GetClientUserId(idx));
  928.                                 Format(sPlayerTitle, sizeof(sPlayerTitle), "%N", idx);
  929.                                
  930.                                 AddMenuItem(gangadminmenu, sData, sPlayerTitle);
  931.                             }
  932.                         }
  933.                     }
  934.                 }
  935.                
  936.                 DisplayMenu(gangadminmenu, client, MENU_TIME_FOREVER);
  937.             }
  938.         }
  939.     }
  940. }
  941.  
  942. public Action:Command_Gangs(client, args)
  943. {
  944.     DisplayGangsMenu(client);
  945.     return Plugin_Handled;
  946. }
  947.  
  948. public Action:Command_Transfer(client, args)
  949. {
  950.     if (!args)
  951.     {
  952.         CPrintToChat(client, "{blue}[Gang]{green}Du musst einen Wert angeben.");
  953.         return Plugin_Handled;
  954.     }
  955.    
  956.     if (g_MemberDatabase[client][0] == -1)
  957.     {
  958.         CPrintToChat(client, "{blue}[Gang]{green}Du bist in keiner Gang.");
  959.         return Plugin_Handled;
  960.     }
  961.    
  962.     // grab amount
  963.     decl String:buffer[32];
  964.     GetCmdArg(1, buffer, sizeof(buffer));
  965.     new amount = StringToInt(buffer);
  966.    
  967.     if (amount < 0)
  968.     {
  969.         CPrintToChat(client, "{red}Nein!");
  970.         return Plugin_Handled;
  971.     }
  972.    
  973.     // Check for funds
  974.     if (!Debit(client, amount))
  975.     {
  976.         CPrintToChat(client, "{blue}[Gang]{green}Du hast nicht so viel Geld.");
  977.         return Plugin_Handled;
  978.     }
  979.    
  980.     // add points
  981.     decl String:sQuery[350];
  982.     g_MemberDatabase[client][1] += amount;
  983.     decl String:steamid[22];
  984.     GetClientAuthString(client, steamid, sizeof(steamid));
  985.     Format(sQuery, sizeof(sQuery), "UPDATE GangMembers SET points=%d WHERE steamid='%s'", g_MemberDatabase[client][1], steamid);
  986.     SQL_TQuery(gH_Database, SQL_TErrorCheck_CB, sQuery);
  987.    
  988.     new gangsindex;
  989.     for (new idx2 = 0; idx2 < GetArraySize(gH_DArray_Gangs); idx2++)
  990.     {
  991.         if (GetArrayCell(gH_DArray_Gangs, idx2, 32) == g_MemberDatabase[client][0])
  992.         {
  993.             gangsindex = idx2;
  994.             break;
  995.         }
  996.     }
  997.    
  998.     // add gang money
  999.     new currentmoney = GetArrayCell(gH_DArray_Gangs, gangsindex, 39);
  1000.     SetArrayCell(gH_DArray_Gangs, gangsindex, currentmoney + amount, 39);
  1001.     Format(sQuery, sizeof(sQuery), "UPDATE Gangs SET money=%d WHERE id=%d", currentmoney+amount, g_MemberDatabase[client][0]);
  1002.     SQL_TQuery(gH_Database, SQL_TErrorCheck_CB, sQuery);
  1003.    
  1004.     CPrintToChat(client, "{blue}[Gang]{green}Dein Geld (%d) wurde der Gang ueberwiesen. Die Gang hat nun: %d$", amount, currentmoney+amount);
  1005.    
  1006.     return Plugin_Handled;
  1007. }
  1008.  
  1009. public Action:Command_AddGang(client, args)
  1010. {
  1011.     if (!args)
  1012.     {
  1013.         CPrintToChat(client, "{blue}[Gang]{green}Du musst einen Gang Namen angeben.");
  1014.         return Plugin_Handled;
  1015.     }
  1016.    
  1017.     if (g_MemberDatabase[client][0] > 0)
  1018.     {
  1019.         CPrintToChat(client, "{blue}[Gang]{green}Du bist schon in einer Gang.");
  1020.         return Plugin_Handled;
  1021.     }
  1022.  
  1023.     // Check if client has funds to buy a gang
  1024.     if (!Debit(client, gShadow_Cvar_GangsCost))
  1025.     {
  1026.         CPrintToChat(client, "{blue}[Gang]{green}Das Erstellen einer Gang kostet %d", gShadow_Cvar_GangsCost);
  1027.         return Plugin_Handled;
  1028.     }
  1029.  
  1030.     // Grab name and cutoff to 32 bytes
  1031.     decl String:newname[32];
  1032.     GetCmdArgString(newname, sizeof(newname));
  1033.        
  1034.     // Check if name is in use
  1035.     for (new idx = 0; idx < GetArraySize(gH_DArray_Gangs); idx++)
  1036.     {
  1037.         decl String:name[32];
  1038.         GetArrayString(gH_DArray_Gangs, idx, name, sizeof(name));
  1039.         if (!strcmp(name, newname, false))
  1040.         {
  1041.             CPrintToChat(client, "{blue}[Gang]{green}Den Namen %s gibt es schon.", newname);
  1042.             Credit(client, gShadow_Cvar_GangsCost);
  1043.             return Plugin_Handled;
  1044.         }
  1045.     }
  1046.    
  1047.     // Add new gang
  1048.     decl String:sQuery[350];
  1049.     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());
  1050.     SQL_TQuery(gH_Database, SQL_TUpdateGangs_CB, sQuery);
  1051.    
  1052.     new size = GetArraySize(gH_DArray_Gangs);
  1053.     ResizeArray(gH_DArray_Gangs, size+1);
  1054.     SetArrayString(gH_DArray_Gangs, size, newname);
  1055.     SetArrayCell(gH_DArray_Gangs, size, g_iGangs, 32); // id
  1056.     SetArrayCell(gH_DArray_Gangs, size, 0, 33); // hp
  1057.     SetArrayCell(gH_DArray_Gangs, size, 0, 34); // stealing
  1058.     SetArrayCell(gH_DArray_Gangs, size, 0, 35); // gravity
  1059.     SetArrayCell(gH_DArray_Gangs, size, 0, 36); // damage
  1060.     SetArrayCell(gH_DArray_Gangs, size, 0, 37); // stamina
  1061.     SetArrayCell(gH_DArray_Gangs, size, 0, 38); // drop
  1062.     SetArrayCell(gH_DArray_Gangs, size, 0, 39); // money
  1063.    
  1064.     decl String:steamid[22];
  1065.     GetClientAuthString(client, steamid, sizeof(steamid));
  1066.     Format(sQuery, sizeof(sQuery), "UPDATE GangMembers SET gangid=%d, points=%d, isleader=1 WHERE steamid='%s'", g_iGangs, gShadow_Cvar_GangsCost, steamid);
  1067.     SQL_TQuery(gH_Database, SQL_TErrorCheck_CB, sQuery);
  1068.    
  1069.     g_MemberDatabase[client][0] = g_iGangs;
  1070.     g_MemberDatabase[client][1] = gShadow_Cvar_GangsCost;
  1071.     g_MemberDatabase[client][2] = 1;
  1072.    
  1073.     CPrintToChat(client, "{blue}[Gang]{green}Die Gang  <%s> wurde erstellt.", newname);
  1074.     return Plugin_Handled;
  1075. }
  1076.  
  1077. public OnClientPutServer(client)
  1078. {
  1079.     SDKHook(client, SDKHook_OnTakeDamage, OnTakeDamage);
  1080. }
  1081.  
  1082. public Action:OnTakeDamage(victim, &attacker, &inflictor, &Float:damage, &damagetype, &weapon, Float:damageForce[3], Float:damagePosition[3])
  1083. {
  1084.     if ((victim != attacker) && (victim > 0) && (victim <= MaxClients) && (attacker > 0) && (attacker <= MaxClients))
  1085.     {
  1086.         if (g_MemberDatabase[attacker][0] != -1)
  1087.         {
  1088.             new gangsindex;
  1089.             for (new idx2 = 0; idx2 < GetArraySize(gH_DArray_Gangs); idx2++)
  1090.             {
  1091.                 if (GetArrayCell(gH_DArray_Gangs, idx2, 32) == g_MemberDatabase[attacker][0])
  1092.                 {
  1093.                     gangsindex = idx2;     
  1094.                 }
  1095.             }
  1096.            
  1097.             new odds;
  1098.            
  1099.             if (IsClientInGame(attacker))
  1100.             {
  1101.                 decl String:weapon_name[32];
  1102.                 GetClientWeapon(attacker, weapon_name, sizeof(weapon_name));
  1103.                
  1104.                 if (GetClientTeam(victim) == CS_TEAM_CT && StrEqual(weapon_name, "weapon_knife"))
  1105.                 {
  1106.                     // calculate odds
  1107.                     odds = gShadow_Cvar_WeaponDropPer*GetArrayCell(gH_DArray_Gangs, gangsindex, 38);
  1108.                     new random = GetRandomInt(0, 100);
  1109.                     if (random <= odds)
  1110.                     {
  1111.                         // disarm victim
  1112.                         new dropweapon = GetPlayerWeaponSlot(victim, CS_SLOT_PRIMARY);
  1113.                         if (dropweapon != -1)
  1114.                         {
  1115.                             CS_DropWeapon(victim, dropweapon, true);
  1116.                             //damage = 0.0;
  1117.                             decl String:attackername[100];
  1118.                             decl String:victimname[100];
  1119.                             GetClientName(attacker, attackername, sizeof(attackername));
  1120.                             GetClientName(victim, victimname, sizeof(victimname));
  1121.                             CPrintToChatAll("{blue}[Gang]{green}%s: Die waffe von %s wurde fallen gelassen.", attackername, victimname);
  1122.                             return Plugin_Changed;
  1123.                         }
  1124.                     }
  1125.                 }
  1126.             }
  1127.            
  1128.             if (GetArrayCell(gH_DArray_Gangs, gangsindex, 36) > 0)
  1129.             {
  1130.                 new Float:added =  float(gShadow_Cvar_DamagePer*GetArrayCell(gH_DArray_Gangs, gangsindex, 36));
  1131.                 damage += added;
  1132.                
  1133.                 return Plugin_Changed;
  1134.             }
  1135.         }
  1136.     }
  1137.     return Plugin_Continue;
  1138. }
  1139.  
  1140. public OnClientAuthorized(client, const String:sSteamID[])
  1141. {
  1142.     if (gH_Database != INVALID_HANDLE)
  1143.     {
  1144.         g_MemberDatabase[client][0] = -1;
  1145.         decl String:sQuery[350];
  1146.         Format(sQuery, sizeof(sQuery), "SELECT * FROM GangMembers WHERE steamid='%s'", sSteamID);
  1147.         new Handle:pack = CreateDataPack();
  1148.         WritePackCell(pack, client);
  1149.         WritePackString(pack, sSteamID);
  1150.         SQL_TQuery(gH_Database, SQL_MemberJoin_CB, sQuery, pack);
  1151.     }
  1152. }
  1153.  
  1154. public SQL_MemberJoin_CB(Handle:owner, Handle:hndl, const String:error[], any:pack)
  1155. {
  1156.     ErrorCheck(owner, error);
  1157.     // don't check hndl here
  1158.    
  1159.     // grab information
  1160.     decl String:sQuery[350];
  1161.     decl String:sSteamID[22];
  1162.     ResetPack(pack);
  1163.     new client = ReadPackCell(pack);
  1164.     ReadPackString(pack, sSteamID, sizeof(sSteamID));
  1165.     CloseHandle(pack);
  1166.    
  1167.     // check if it's there already
  1168.     if (SQL_FetchRow(hndl) == false)
  1169.     {
  1170.         Format(sQuery, sizeof(sQuery), "INSERT INTO GangMembers (steamid, gangid, points, isleader) VALUES ('%s', -1, 0, 0)", sSteamID);
  1171.         g_MemberDatabase[client][0] = -1; // id
  1172.         g_MemberDatabase[client][1] = 0;
  1173.         g_MemberDatabase[client][2] = 0;
  1174.         SQL_TQuery(gH_Database, SQL_TErrorCheck_CB, sQuery);
  1175.     }
  1176.     else
  1177.     {
  1178.         g_MemberDatabase[client][0] = SQL_FetchInt(hndl, 1); // id
  1179.         g_MemberDatabase[client][1] = SQL_FetchInt(hndl, 2); // points
  1180.         g_MemberDatabase[client][2] = SQL_FetchInt(hndl, 3); // isleader
  1181.     }
  1182. }
  1183.  
  1184. public OnClientDisconnect(client)
  1185. {
  1186.     g_MemberDatabase[client][0] = -1;
  1187.     g_MemberDatabase[client][1] = 0;
  1188.     g_MemberDatabase[client][2] = 0;
  1189. }
  1190.  
  1191. public SQL_TMaxMembers_CB(Handle:owner, Handle:hndl, const String:error[], any:client)
  1192. {
  1193.     ErrorCheck(owner, error);
  1194.     ErrorCheck(hndl, error);
  1195.    
  1196.     if (SQL_GetRowCount(hndl) > gShadow_Cvar_MaxMembers)
  1197.     {
  1198.         CPrintToChat(client, "{blue}[Gang]{green}Es gibt schon zu viele Mitglieder.");
  1199.     }
  1200.     else
  1201.     {
  1202.         // okay to invite
  1203.         new Handle:menu = CreateMenu(MenuHandler_InvitePlayerList);
  1204.        
  1205.         SetMenuTitle(menu, "Spieler einladen");
  1206.         SetMenuExitBackButton(menu, false);
  1207.        
  1208.         decl String:sTitle[32];
  1209.         decl String:sefo[32];
  1210.        
  1211.         for (new idx = 1; idx <= MaxClients; idx++)
  1212.         {
  1213.             if (IsClientInGame(idx) && g_MemberDatabase[idx][0] == -1)
  1214.             {
  1215.                 GetClientName(idx, sTitle, sizeof(sTitle));
  1216.                 Format(sefo, sizeof(sefo), "%d", GetClientUserId(idx));
  1217.                 AddMenuItem(menu, sefo, sTitle);
  1218.             }
  1219.         }
  1220.        
  1221.         DisplayMenu(menu, client, MENU_TIME_FOREVER);
  1222.     }
  1223. }
  1224.  
  1225. public MenuHandler_TopGangs(Handle:menu, MenuAction:action, client, param2)
  1226. {
  1227.     if (action == MenuAction_End)
  1228.     {
  1229.         CloseHandle(menu);
  1230.     }
  1231. }
  1232.  
  1233. public MenuHandler_GangAdmin(Handle:menu, MenuAction:action, client, param2)
  1234. {
  1235.     if (action == MenuAction_End)
  1236.     {
  1237.         CloseHandle(menu);
  1238.     }
  1239.     else if (action == MenuAction_Select)
  1240.     {
  1241.         decl String:info[32];
  1242.         new userid, target;
  1243.        
  1244.         GetMenuItem(menu, param2, info, sizeof(info));
  1245.         userid = StringToInt(info);
  1246.  
  1247.         if ((target = GetClientOfUserId(userid)) == 0)
  1248.         {
  1249.             CPrintToChat(client, "[SM] %t", "{blue}[Gang]{green}Der Spieler ist nicht mehr verfuegbar.");
  1250.         }
  1251.         else
  1252.         {
  1253.             decl String:steamid[22];
  1254.             GetClientAuthString(target, steamid, sizeof(steamid));
  1255.             decl String:sQuery[350];
  1256.            
  1257.             // promote/demote
  1258.             if (g_MemberDatabase[target][2] == 1)
  1259.             {
  1260.                 CPrintToChat(client, "{blue}[Gang]{green}Du kannst deinen eigenen Status nicht aendern!");
  1261.             }
  1262.             else if (g_MemberDatabase[target][2] == 3)
  1263.             {
  1264.                 // demote
  1265.                 Format(sQuery, sizeof(sQuery), "UPDATE GangMembers SET isleader=0 WHERE steamid='%s'", steamid);
  1266.                 SQL_TQuery(gH_Database, SQL_TErrorCheck_CB, sQuery);
  1267.                 g_MemberDatabase[target][2] = 0;
  1268.                 CPrintToChat(target, "{blue}[Gang]{green}Dein Status wurde zu <Mitglieder Status> geaendert!");
  1269.                 CPrintToChat(client, "{blue}[Gang]{green}Du hast den Status von %N geandert!", target);
  1270.             }
  1271.             else
  1272.             {
  1273.                 // promote to admin
  1274.                 Format(sQuery, sizeof(sQuery), "UPDATE GangMembers SET isleader=3 WHERE steamid='%s'", steamid);
  1275.                 SQL_TQuery(gH_Database, SQL_TErrorCheck_CB, sQuery);
  1276.                 g_MemberDatabase[target][2] = 3;
  1277.                 CPrintToChat(target, "{blue}[Gang]{green}Du hast nun den [Adm] Status in der Gang.");
  1278.                 CPrintToChat(client, "{blue}[Gang]{green}Du hast den Status von %N geandert!", target);
  1279.             }
  1280.         }
  1281.     }
  1282. }
  1283.  
  1284. public MenuHandler_KickMember(Handle:menu, MenuAction:action, client, param2)
  1285. {
  1286.     if (action == MenuAction_End)
  1287.     {
  1288.         CloseHandle(menu);
  1289.     }
  1290.     else if (action == MenuAction_Select)
  1291.     {
  1292.         decl String:info[32];
  1293.         new userid, target;
  1294.        
  1295.         GetMenuItem(menu, param2, info, sizeof(info));
  1296.         userid = StringToInt(info);
  1297.  
  1298.         if ((target = GetClientOfUserId(userid)) == 0)
  1299.         {
  1300.             CPrintToChat(client, "[SM] %t", "{blue}[Gang]{green}Spieler nicht mehr auswaehlbar!");
  1301.         }
  1302.         else
  1303.         {
  1304.             // remove from gang
  1305.             decl String:steamid[22];
  1306.             GetClientAuthString(target, steamid, sizeof(steamid));
  1307.             decl String:sQuery[350];
  1308.            
  1309.             Format(sQuery, sizeof(sQuery), "UPDATE GangMembers SET gangid=-1,points=0,isleader=0 WHERE steamid = '%s'", steamid);
  1310.             SQL_TQuery(gH_Database, SQL_TErrorCheck_CB, sQuery);
  1311.            
  1312.             g_MemberDatabase[target][0] = -1;
  1313.             g_MemberDatabase[target][1] = 0;
  1314.             g_MemberDatabase[target][2] = 0;
  1315.            
  1316.             CPrintToChat(client, "{blue}[Gang]{green}%N wurde von der Gang entfernt.", target);
  1317.         }
  1318.     }
  1319. }
  1320.  
  1321. public MenuHandler_InvitePlayerList(Handle:menu, MenuAction:action, client, param2)
  1322. {
  1323.     if (action == MenuAction_End)
  1324.     {
  1325.         CloseHandle(menu);
  1326.     }
  1327.     else if (action == MenuAction_Select)
  1328.     {
  1329.         decl String:info[32];
  1330.         new userid, target;
  1331.        
  1332.         GetMenuItem(menu, param2, info, sizeof(info));
  1333.         userid = StringToInt(info);
  1334.  
  1335.         if ((target = GetClientOfUserId(userid)) == 0)
  1336.         {
  1337.             CPrintToChat(client, "[SM] %t", "{blue}[Gang]{green}Spieler nicht verfuegbar!");
  1338.         }
  1339.         else
  1340.         {
  1341.             // display menu to target
  1342.             new Handle:invitemenu = CreateMenu(MenuHandler_InviteRequest);
  1343.            
  1344.             // get gang text
  1345.             decl String:name[32];
  1346.             for (new idx2 = 0; idx2 < GetArraySize(gH_DArray_Gangs); idx2++)
  1347.             {
  1348.                 if (GetArrayCell(gH_DArray_Gangs, idx2, 32) == g_MemberDatabase[client][0])
  1349.                 {
  1350.                     GetArrayString(gH_DArray_Gangs, idx2, name, sizeof(name));
  1351.                 }                              
  1352.             }
  1353.             CPrintToChat(target, "{blue}[Gang]{green}%N hat dich zu Gang %s eingeladen.", client, name);
  1354.             SetMenuTitle(invitemenu, "Join %s gang?", name);
  1355.             SetMenuExitBackButton(invitemenu, false);
  1356.            
  1357.             // send gang id
  1358.             decl String:sefo[32];
  1359.             IntToString(g_MemberDatabase[client][0], sefo, sizeof(sefo));
  1360.            
  1361.             AddMenuItem(invitemenu, "-1", "Nein");
  1362.             AddMenuItem(invitemenu, sefo, "Ja");
  1363.            
  1364.             DisplayMenu(invitemenu, target, MENU_TIME_FOREVER);
  1365.         }
  1366.     }
  1367. }
  1368.  
  1369. public MenuHandler_InviteRequest(Handle:menu, MenuAction:action, client, choice)
  1370. {
  1371.     if (action == MenuAction_End)
  1372.     {
  1373.         CloseHandle(menu);
  1374.     }
  1375.     else if (action == MenuAction_Select)
  1376.     {
  1377.         decl String:info[32];
  1378.         GetMenuItem(menu, choice, info, sizeof(info));
  1379.         new gangid = StringToInt(info);
  1380.        
  1381.         // check if they made a gang or joineda another gang
  1382.         if (gangid != -1 && g_MemberDatabase[client][0] == -1)
  1383.         {
  1384.             // join gang
  1385.             decl String:sSteamID[22];
  1386.             GetClientAuthString(client, sSteamID, sizeof(sSteamID));
  1387.             decl String:sQuery[350];
  1388.             Format(sQuery, sizeof(sQuery), "UPDATE GangMembers SET gangid=%d,isleader=0,points=0 WHERE steamid='%s'", gangid, sSteamID);
  1389.             SQL_TQuery(gH_Database, SQL_TErrorCheck_CB, sQuery);
  1390.             g_MemberDatabase[client][0] = gangid; // id
  1391.             g_MemberDatabase[client][1] = 0; // points
  1392.             g_MemberDatabase[client][2] = 0; // isleader
  1393.            
  1394.             CPrintToChatAll("%N schloss sich einer Gang an.", client);
  1395.         }
  1396.     }
  1397. }
  1398.  
  1399. public SQL_TElection_CB(Handle:owner, Handle:hndl, const String:error[], any:gangid)
  1400. {
  1401.     ErrorCheck(owner, error);
  1402.     ErrorCheck(hndl, error);
  1403.    
  1404.     decl String:sQuery[350];
  1405.    
  1406.     // check for any rows
  1407.     if (SQL_FetchRow(hndl))
  1408.     {
  1409.         // make top row the new leader
  1410.         decl String:steamid[22];
  1411.         SQL_FetchString(hndl, 0, steamid, sizeof(steamid));
  1412.  
  1413.         // find authid to client (if he's in the game)
  1414.         decl String:tempid[22];
  1415.         new client = 0;
  1416.         for (new idx = 1; idx <= MaxClients; idx++)
  1417.         {
  1418.             if (IsClientInGame(idx))
  1419.             {
  1420.                 GetClientAuthString(idx, tempid, sizeof(tempid));
  1421.                 if (!strcmp(tempid, steamid, false))
  1422.                 {
  1423.                     client = idx;
  1424.                     break;
  1425.                 }
  1426.             }
  1427.         }
  1428.        
  1429.         Format(sQuery, sizeof(sQuery), "UPDATE GangMembers SET isleader=1 WHERE steamid='%s'", steamid);
  1430.         if (client)
  1431.         {
  1432.             g_MemberDatabase[client][2] = 1;
  1433.         }
  1434.         SQL_TQuery(gH_Database, SQL_TErrorCheck_CB, sQuery);
  1435.     }
  1436.     else
  1437.     {
  1438.         Format(sQuery, sizeof(sQuery), "DELETE FROM Gangs WHERE id=%d", gangid);
  1439.        
  1440.         // remove from darray
  1441.         for (new idx2 = 0; idx2 < GetArraySize(gH_DArray_Gangs); idx2++)
  1442.         {
  1443.             if (GetArrayCell(gH_DArray_Gangs, idx2, 32) == gangid)
  1444.             {
  1445.                 RemoveFromArray(gH_DArray_Gangs, idx2);
  1446.                 break;
  1447.             }                              
  1448.         }
  1449.        
  1450.         SQL_TQuery(gH_Database, SQL_TErrorCheck_CB, sQuery);
  1451.     }
  1452. }
  1453.  
  1454. public SQL_TUpdateGangs_CB(Handle:owner, Handle:hndl, const String:error[], any:data)
  1455. {
  1456.     ErrorCheck(owner, error);
  1457.     ErrorCheck(hndl, error);
  1458. }
  1459.  
  1460. public SQL_TErrorCheck_CB(Handle:owner, Handle:hndl, const String:error[], any:data)
  1461. {
  1462.     ErrorCheck(owner, error);
  1463.     ErrorCheck(hndl, error);
  1464. }
  1465.  
  1466. ErrorCheck(Handle:owner, const String:error[])
  1467. {
  1468.        if (owner == INVALID_HANDLE)
  1469.        {
  1470.                SetFailState("GANGS - SQL ERROR: %s", error);
  1471.        }
  1472. }
  1473.  
  1474. public Event_PlayerSpawn(Handle:event, const String:name[], bool:dontBroadcast)
  1475. {
  1476.     if (gH_Database != INVALID_HANDLE && GetArraySize(gH_DArray_Gangs) > 0)
  1477.     {
  1478.         new client = GetClientOfUserId(GetEventInt(event, "userid"));
  1479.        
  1480.         if (g_MemberDatabase[client][0] >= 0)
  1481.         {
  1482.            
  1483.             new gangindex = 0;
  1484.             for (new idx2 = 0; idx2 < GetArraySize(gH_DArray_Gangs); idx2++)
  1485.             {
  1486.                 if (GetArrayCell(gH_DArray_Gangs, idx2, 32) == g_MemberDatabase[client][0])
  1487.                 {
  1488.                     gangindex = idx2;
  1489.                 }                              
  1490.             }
  1491.            
  1492.             // boost HP
  1493.             SetEntityHealth(client, GetClientHealth(client)+gShadow_Cvar_HealthPer*GetArrayCell(gH_DArray_Gangs, gangindex, 33));
  1494.            
  1495.             // boost money
  1496.             new money = gShadow_Cvar_StealingPer*GetArrayCell(gH_DArray_Gangs, gangindex, 34);
  1497.             Credit(client, money);
  1498.            
  1499.             // boost gravity
  1500.             new Float:gravity = 1.0 - float(gShadow_Cvar_GravityPer*GetArrayCell(gH_DArray_Gangs, gangindex, 35))/800.00;
  1501.             SetEntityGravity(client, gravity);
  1502.            
  1503.             // boost stamina
  1504.             new Float:speed = 1.0+0.02*float(gShadow_Cvar_StaminaPer*GetArrayCell(gH_DArray_Gangs, gangindex, 37));
  1505.             SetEntPropFloat(client, Prop_Data, "m_flLaggedMovementValue", speed);
  1506.         }
  1507.     }
  1508. }
  1509.  
  1510. DebitGang(dindex, amount)
  1511. {
  1512.     // check money
  1513.     new money = GetArrayCell(gH_DArray_Gangs, dindex, 39);
  1514.     if (money-amount >= 0)
  1515.     {
  1516.         SetArrayCell(gH_DArray_Gangs, dindex, money-amount, 39);
  1517.         return money-amount;
  1518.     }
  1519.     else
  1520.     {
  1521.         return -1;
  1522.     }
  1523. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement