AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Scripting Help (https://forums.alliedmods.net/forumdisplay.php?f=11)
-   -   Dynamic Array Fun (https://forums.alliedmods.net/showthread.php?t=167704)

Doc-Holiday 09-19-2011 00:17

Dynamic Array Fun
 
So im trying to create a plugin that will read from a text file add the info to an array then to a menu. From that menu i choose a weapon and it should give me that weapon.. Any ideas on ArrayCreate(#) blank only does 1 char but the weapon names arenot all the same there fore ArrayCreate(5) on USP would be USP_ _ (_ are blank spaces).

PHP Code:

#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <hamsandwich>
#include <cstrike>
#include <fun>

enum _:CHOICES
{
    
OPTION_NEW,
    
OPTION_OLD,
    
OPTION_SAVE
}

new const 
g_szOptions[][] =
{
    
"New Guns",
    
"Previous Guns",
    
"Previous + Save"
}

new 
g_WeaponBPAmmo[] =
{
    
052090132110090112010010090909010012030,
    
12020032901209023590900100
};

new 
g_szPWepFile[256], g_szSwepFile[256];
new 
g_pFilePointerg_sFilePointer;
new 
g_pWeaponMenug_sWeaponMenug_SpawnMenu;

new Array:
g_PrimaryWeapons, Array:g_SecondaryWeapons;

public 
plugin_init()
{
    
register_plugin("Weapon Menu""0.0.1""SavSin");
    
    
RegisterHam(Ham_Spawn"player""fwdPlayerSpawn"1);
    
    
CreatePrimaryArray();
    
CreateSecondaryArray();
    
    new 
szNum[3];
    
g_SpawnMenu menu_create("Spawn Menu""HandleSpawnMenu");
    
    for(new 
0sizeof(g_szOptions); i++)
    {
        
num_to_str(iszNumcharsmax(szNum));
        
menu_additem(g_SpawnMenug_szOptions[i], szNum0);
    }    
}

public 
fwdPlayerSpawn(id)
{
    if(
is_user_alive(id))
    {
        
menu_display(idg_SpawnMenu);
    }
}

public 
HandleSpawnMenu(idiMenuiItem)
{
    new 
szKey[3], Dummy;
    
menu_item_getinfo(iMenuiItemDummyszKey2""0Dummy);
    
    switch(
str_to_num(szKey))
    {
        case 
OPTION_NEWmenu_display(idg_pWeaponMenu);
        case 
OPTION_OLDmenu_display(idg_pWeaponMenu);
        case 
OPTION_SAVEmenu_display(idg_pWeaponMenu);
    }
}

public 
CreatePrimaryArray()
{
    
get_configsdir(g_szPWepFilecharsmax(g_szPWepFile));
    
format(g_szPWepFilecharsmax(g_szPWepFile), "%s/DM_PrimaryWeapons.txt"g_szPWepFile);
    
g_pFilePointer fopen(g_szPWepFile"r");
    
g_PrimaryWeapons ArrayCreate(0);
    if(
g_pFilePointer)
    {
        new 
szPrimaryData[32];
        while(!
feof(g_pFilePointer))
        {
            
fgets(g_pFilePointerszPrimaryDatacharsmax(szPrimaryData));
            
ArrayPushArray(g_PrimaryWeaponsszPrimaryData);
        }
    }
    
    
g_pWeaponMenu menu_create("Primary Weapon Menu""HandlePrimaryWeapons");
    new 
iSize ArraySize(g_PrimaryWeapons), szNum[3], szData[32];
    for(new 
0iSizei++)
    {
        
ArrayGetArray(g_PrimaryWeaponsiszData);
        
num_to_str(iszNumcharsmax(szNum));
        
menu_additem(g_pWeaponMenuszDataszNum0);
    }
    
    
fclose(g_pFilePointer);
}

public 
HandlePrimaryWeapons(idiMenuiItem)
{
    new 
szKey[3], iSelectedWeaponDummy;
    
menu_item_getinfo(iMenuiItemDummyszKey2""0Dummy);
    
    
iSelectedWeapon str_to_num(szKey);
    
    new 
WeaponName[32], szArrayData[32];
    
ArrayGetArray(g_PrimaryWeaponsiSelectedWeaponszArrayData);
    
    
format(WeaponNamecharsmax(WeaponName), "weapon_%s"szArrayData);
    
GiveWeapons(idWeaponName);
    
    
menu_display(idg_sWeaponMenu);
}

public 
CreateSecondaryArray()
{
    
get_configsdir(g_szSwepFilecharsmax(g_szSwepFile));
    
format(g_szSwepFilecharsmax(g_szSwepFile), "%s/DM_SecondaryWeapons.txt"g_szSwepFile);
    
g_sFilePointer fopen(g_szSwepFile"r");
    
g_SecondaryWeapons ArrayCreate(0);
    if(
g_sFilePointer)
    {
        new 
szSecondaryData[32];
        while(!
feof(g_sFilePointer))
        {
            
fgets(g_sFilePointerszSecondaryDatacharsmax(szSecondaryData));
            
ArrayPushArray(g_SecondaryWeaponsszSecondaryData);
        }
    }
    
    
g_sWeaponMenu menu_create("Secondary Weapon Menu""HandleSecondaryWeapons");
    new 
iSize ArraySize(g_SecondaryWeapons), szNum[3], szData[32];
    for(new 
0iSizei++)
    {
        
ArrayGetArray(g_SecondaryWeaponsiszData);
        
num_to_str(iszNumcharsmax(szNum));
        
menu_additem(g_sWeaponMenuszDataszNum0);
    }
    
    
fclose(g_pFilePointer);
}

public 
HandleSecondaryWeapons(idiMenuiItem)
{
    new 
szKey[3], iSelectedWeaponDummy;
    
menu_item_getinfo(iMenuiItemDummyszKey2""0Dummy);
    
    
iSelectedWeapon str_to_num(szKey);
    
    new 
WeaponName[32], szArrayData[32];
    
ArrayGetArray(g_SecondaryWeaponsiSelectedWeaponszArrayData);
    
    
format(WeaponNamecharsmax(WeaponName), "weapon_%s"szArrayData);
    
GiveWeapons(idWeaponName);
}

stock GiveWeapons(idszWeapon[])
{
    new 
iWeaponId get_weaponid(szWeapon);
    
give_item(idszWeapon);
    
cs_set_user_bpammo(idiWeaponIdg_WeaponBPAmmo[iWeaponId]);


Edit:: I needed to use trim(lineitem); and has been fixed.

Fixed Code below: Its a work in progress :)
PHP Code:

#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <hamsandwich>
#include <cstrike>
#include <fun>

enum _:CHOICES
{
    
OPTION_NEW,
    
OPTION_OLD,
    
OPTION_SAVE
}

new const 
g_szOptions[][] =
{
    
"New Guns",
    
"Previous Guns",
    
"Previous + Save"
}

new 
g_WeaponBPAmmo[] =
{
    
052090132110090112010010090909010012030,
    
12020032901209023590900100
};

new 
g_szPWepFile[256], g_szSwepFile[256];
new 
g_pFilePointerg_sFilePointer;
new 
g_pWeaponMenug_sWeaponMenug_SpawnMenu;

new Array:
g_PrimaryWeapons, Array:g_SecondaryWeapons;

public 
plugin_init()
{
    
register_plugin("Weapon Menu""0.0.1""SavSin");
    
    
RegisterHam(Ham_Spawn"player""fwdPlayerSpawn"1);
    
    
CreatePrimaryArray();
    
CreateSecondaryArray();
    
    new 
szNum[3];
    
g_SpawnMenu menu_create("Weapon Menu""HandleSpawnMenu");
    
    for(new 
0sizeof(g_szOptions); i++)
    {
        
num_to_str(iszNumcharsmax(szNum));
        
menu_additem(g_SpawnMenug_szOptions[i], szNum0);
    }    
}

public 
fwdPlayerSpawn(id)
{
    if(
is_user_alive(id))
    {
        
menu_display(idg_SpawnMenu);
    }
}

public 
HandleSpawnMenu(idiMenuiItem)
{
    new 
szKey[3], Dummy;
    
menu_item_getinfo(iMenuiItemDummyszKey2""0Dummy);
    
    switch(
str_to_num(szKey))
    {
        case 
OPTION_NEWmenu_display(idg_pWeaponMenu);
        case 
OPTION_OLDmenu_display(idg_pWeaponMenu);
        case 
OPTION_SAVEmenu_display(idg_pWeaponMenu);
    }
}

public 
CreatePrimaryArray()
{
    
get_configsdir(g_szPWepFilecharsmax(g_szPWepFile));
    
format(g_szPWepFilecharsmax(g_szPWepFile), "%s/DM_PrimaryWeapons.txt"g_szPWepFile);
    
g_pFilePointer fopen(g_szPWepFile"r");
    
g_PrimaryWeapons ArrayCreate(15);
    new 
szPrimaryData[32];
    if(
g_pFilePointer)
    {
        while(!
feof(g_pFilePointer))
        {
            
fgets(g_pFilePointerszPrimaryDatacharsmax(szPrimaryData));
            
trim(szPrimaryData);
            
ArrayPushArray(g_PrimaryWeaponsszPrimaryData);
        }
    }
    
    
g_pWeaponMenu menu_create("Primary Weapon Menu""HandlePrimaryWeapons");
    new 
iSize ArraySize(g_PrimaryWeapons), szNum[3];
    for(new 
0iSizei++)
    {
        
ArrayGetArray(g_PrimaryWeaponsiszPrimaryData);
        
num_to_str(iszNumcharsmax(szNum));
        
menu_additem(g_pWeaponMenuszPrimaryDataszNum0);
    }
    
    
fclose(g_pFilePointer);
}

public 
HandlePrimaryWeapons(idiMenuiItem)
{
    new 
szKey[3], iSelectedWeaponDummy;
    
menu_item_getinfo(iMenuiItemDummyszKey2""0Dummy);
    
    
iSelectedWeapon str_to_num(szKey);
    
    new 
WeaponName[32], szArrayData[32];
    
ArrayGetArray(g_PrimaryWeaponsiSelectedWeaponszArrayData);
    
replace_all_fixed(szArrayDatacharsmax(szArrayData), " """);
    
format(WeaponNamecharsmax(WeaponName), "weapon_%s"szArrayData);
    
strtolower(WeaponName);
    
GiveWeapons(idWeaponName);
    
    
menu_display(idg_sWeaponMenu);
}

public 
CreateSecondaryArray()
{
    
get_configsdir(g_szSwepFilecharsmax(g_szSwepFile));
    
format(g_szSwepFilecharsmax(g_szSwepFile), "%s/DM_SecondaryWeapons.txt"g_szSwepFile);
    
g_sFilePointer fopen(g_szSwepFile"r");
    
g_SecondaryWeapons ArrayCreate(15);
    new 
szSecondaryData[32];
    if(
g_sFilePointer)
    {
        while(!
feof(g_sFilePointer))
        {
            
fgets(g_sFilePointerszSecondaryDatacharsmax(szSecondaryData));
            
trim(szSecondaryData);
            
ArrayPushArray(g_SecondaryWeaponsszSecondaryData);
        }
    }
    
    
g_sWeaponMenu menu_create("Secondary Weapon Menu""HandleSecondaryWeapons");
    new 
iSize ArraySize(g_SecondaryWeapons), szNum[3];
    for(new 
0iSizei++)
    {
        
ArrayGetArray(g_SecondaryWeaponsiszSecondaryData);
        
num_to_str(iszNumcharsmax(szNum));
        
menu_additem(g_sWeaponMenuszSecondaryDataszNum0);
    }
    
    
fclose(g_pFilePointer);
}

public 
HandleSecondaryWeapons(idiMenuiItem)
{
    new 
szKey[3], iSelectedWeaponDummy;
    
menu_item_getinfo(iMenuiItemDummyszKey2""0Dummy);
    
    
iSelectedWeapon str_to_num(szKey);
    
    new 
WeaponName[32], szArrayData[32];
    
ArrayGetArray(g_SecondaryWeaponsiSelectedWeaponszArrayData);
    
replace_all_fixed(szArrayDatacharsmax(szArrayData), " """);
    
strtolower(szArrayData);
    
format(WeaponNamecharsmax(WeaponName), "weapon_%s"szArrayData);
    
GiveWeapons(idWeaponName);
}

stock GiveWeapons(idszWeapon[])
{
    new 
iWeaponId get_weaponid(szWeapon);
    
give_item(idszWeapon);
    
cs_set_user_bpammo(idiWeaponIdg_WeaponBPAmmo[iWeaponId]);
}

stock replace_all_fixed(string[], len, const what[], const with[])
{
    new 
pos 0;
    
    if ((
pos contain(stringwhat)) == -1)
    {
        return 
0;
    }
    
    new 
total 0;
    new 
with_len strlen(with);
    new 
diff strlen(what) - with_len;
    new 
total_len strlen(string);
    new 
temp_pos 0;
    
    while (
replace(string[pos], len poswhatwith) != 0)
    {
        
total++;
        
/* jump to position after replacement */
        
pos += with_len;
        
        
/* update cached length of string */
        
total_len -= diff;
        
        
/* will the next call be operating on the last character? */
        
if (pos >= total_len)
        {
            break;
        }
        
        
/* find the next position from our offset */
        
temp_pos contain(string[pos], what);
        
        
/* if it's invalid, we're done */
        
if (temp_pos == -1)
        {
            break;
        }
        
        
/* otherwise, reposition and update counters */
        
pos += temp_pos;
    }
    
    return 
total;



Emp` 09-19-2011 02:03

Re: Dynamic Array Fun
 
Instead of Array*Array, you should use Array*String because you are dealing with strings.

Doc-Holiday 09-19-2011 02:56

Re: Dynamic Array Fun
 
Quote:

Originally Posted by Emp` (Post 1558536)
Instead of Array*Array, you should use Array*String because you are dealing with strings.

Thanks for the Tip. Switched over.


All times are GMT -4. The time now is 19:40.

Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.