AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Scripting Help (https://forums.alliedmods.net/forumdisplay.php?f=11)
-   -   Problem with for-loops (https://forums.alliedmods.net/showthread.php?t=154145)

reetry 04-03-2011 12:37

Problem with for-loops
 
hey guys.
I have a problem concerning the for-loops in my plugin.
the for-loop does only work for 2 persons. Maybee you can find the error.

Code:

/* Mod Template generated by Pawn Studio */

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

#define PLUGIN    "Day-Menu"
#define VERSION    "1.0"
#define AUTHOR    "SmoKeY><"

#define OFFSET_PRIMARYWEAPON        116
#define IsPlayer(%1) (1<=%1<=g_max_clients)

/*================================================================================
Booleans
=================================================================================*/

new bool: day_active = false;
new bool: can_have_gun[33]
new bool: day_scout = false;
new bool: got_name = false;

/*================================================================================
New's
=================================================================================*/

new name[33]
new g_max_clients
new timer
new g_ct;
new g_t;

/*================================================================================
Constants
=================================================================================*/

new const PREFIX[] = "[H.S.C]:"

/*================================================================================
Stocks
=================================================================================*/

stock strip_weapons(index)
{
   
    strip_user_weapons(index)
    set_pdata_int(index, OFFSET_PRIMARYWEAPON, 0)
    give_item(index, "weapon_knife")
}

/*================================================================================
Init
=================================================================================*/

public plugin_init()
{
    register_plugin(PLUGIN, VERSION, AUTHOR)
   
    register_clcmd("say /day", "check_team")
    register_clcmd("/day", "check_team")
   
    register_event("CurWeapon", "Event_CurWeapon", "be","1=1")
    RegisterHam(Ham_Spawn, "player", "Event_Playerspawn", 1)
    register_logevent("Event_Roundstart", 2, "1=Round_Start")
   
    g_max_clients=get_maxplayers()
}

/*================================================================================
Events: Event_CurWeapon(id)
=================================================================================*/

public Event_CurWeapon(id)
{   
    new weaponID = read_data(2)
   
    if(can_have_gun[id])
        return PLUGIN_CONTINUE
   
    if(weaponID != CSW_KNIFE)
        client_cmd(id, "weapon_knife")
   
    return PLUGIN_CONTINUE
}

/*================================================================================
Events: Event_Playerspawn(id)
=================================================================================*/

public Event_Playerspawn(id)
{
    can_have_gun[id]=true   
}

/*================================================================================
Events: Event_Roundstart()
=================================================================================*/

public Event_Roundstart()
{
    day_active = false
    server_cmd("mp_friendlyfire 0")
    if (day_scout == true)
    {
        server_cmd("sv_gravity 800")
    }
}

/*================================================================================
Team-Abfrage
=================================================================================*/

public check_team(id)
{
    if (IsPlayer(id) && cs_get_user_team(id) == CS_TEAM_CT)
    {
        daymenu(id)
    }
}

/*================================================================================
Counter
=================================================================================*/

public Counter()
{
    for (new i = 1; i <= g_max_clients; i++)
    {
        if (!is_user_alive(i))
        {
            continue;
        }
        switch (cs_get_user_team(i))
        {
            case CS_TEAM_T:
            {
                g_t++;
            }
            case CS_TEAM_CT:
            {
                g_ct++;
            }
        }
    }
}

/*================================================================================
Daymenu
=================================================================================*/

public daymenu(id)
{   
    if(!IsPlayer(id))
        return PLUGIN_HANDLED
   
    new specialmenu = menu_create("[H.S.C]: Waehle das Spiel fuer heute:", "sub_day_menu")
   
    menu_additem(specialmenu, "Spartaday", "1", 0);
    menu_additem(specialmenu, "Zombieday", "2", 0);
    menu_additem(specialmenu, "Scoutday", "3", 0);
    menu_additem(specialmenu, "Awp-Masaker", "4", 0);
    menu_additem(specialmenu, "Masakerday", "5", 0);
    menu_additem(specialmenu, "Hide n' Seek", "6", 0);
   
    menu_setprop(specialmenu, MPROP_EXIT, MEXIT_ALL);
    menu_display(id, specialmenu, 0);
    return PLUGIN_HANDLED
}   

public sub_day_menu(id, specialmenu, item)
{
   
    if (item == MENU_EXIT)
    {
        menu_destroy(specialmenu);
        return PLUGIN_HANDLED;
    }
   
    new Data[7], Name[64];
    new Access, Callback;
    menu_item_getinfo(specialmenu, item, Access, Data,5, Name, 63, Callback);
   
    new Key = str_to_num(Data);
   
    switch (Key)
    {
        case 1:
        {
            if (day_active == true)
            {
                client_print(id, print_chat, " %s Es wurde bereits ein Spiel aktiviert", PREFIX)
            }
            else
            {
                day_active = true
                set_hudmessage(0, 255, 0, -1.0, -1.0, 0, 6.0, 12.0)
                show_hudmessage(0, "Heute ist Spartaday!")
                spartaday(id)
            }
        }
        case 2:
        {
            if (day_active == true)
            {
                client_print(id, print_chat, " %s Es wurde bereits ein Spiel aktiviert", PREFIX)
            }
            else
            {
                day_active = true
                set_hudmessage(0, 255, 0, -1.0, -1.0, 0, 6.0, 12.0)
                show_hudmessage(0, "Heute ist Zombieday!")
                zombieday(id)
            }
        }
        case 3:
        {
            if (day_active == true)
            {
                client_print(id, print_chat, " %s Es wurde bereits ein Spiel aktiviert", PREFIX)
            }
            else
            {
                day_active = true
                day_scout = true
                set_hudmessage(0, 255, 0, -1.0, -1.0, 0, 6.0, 12.0)
                show_hudmessage(0, "Heute ist Scoutday!")
                scoutday(id)
            }
        }
        case 4:
        {
            if (day_active == true)
            {
                client_print(id, print_chat, " %s Es wurde bereits ein Spiel aktiviert", PREFIX)
            }
            else
            {
                day_active = true
                set_hudmessage(0, 255, 0, -1.0, -1.0, 0, 6.0, 12.0)
                show_hudmessage(0, "Heute ist Awp-Massaker!")
                awpmasaker(id)
            }
        }
        case 5:
        {
            if (day_active == true)
            {
                client_print(id, print_chat, " %s Es wurde bereits ein Spiel aktiviert", PREFIX)
            }
            else
            {
                day_active = true
                set_hudmessage(0, 255, 0, -1.0, -1.0, 0, 6.0, 12.0)
                show_hudmessage(id, "Heute ist Massakerday!")
                justmasaker(id)
            }
        }
        case 6:
        {
            if (day_active == true)
            {
                client_print(id, print_chat, " %s Es wurde bereits ein Spiel aktiviert", PREFIX)
            }
            else
            {
                day_active = true
                countdown(id)
            }
        }
    }
   
    menu_destroy(specialmenu);
    return PLUGIN_HANDLED;
}

/*================================================================================
Daymenu: Spartaday
=================================================================================*/

public spartaday(id)
{
    for(new i = 0; i < g_max_clients; i++)
    {
        if(IsPlayer(i) && is_user_alive(i))
        {
            switch(cs_get_user_team(i))
            {
                case CS_TEAM_T:
                {
                    strip_weapons(i)
                    give_item(i, "weapon_shield")
                    give_item(i, "weapon_knife")
                    set_user_health(i, 400)   
                }
               
                case CS_TEAM_CT:
                {
                    give_item(i, "weapon_deagle")
                    give_item(i, "weapon_m4a1")   
                    cs_set_user_bpammo(i, CSW_DEAGLE, 35)
                    cs_set_user_bpammo(i, CSW_M4A1, 120)
                }
            }
        }
    }
}

/*================================================================================
Daymenu: Zombieday
=================================================================================*/

public zombieday(id)
{
    for(new i = 0; i < g_max_clients; i++)
    {
        switch(cs_get_user_team(i))
        {
            case CS_TEAM_T:
            {
                strip_user_weapons(i)
                give_item((i), "weapon_knife")
                give_item((i), "weapon_m249")
                cs_set_user_bpammo((i), CSW_M249, 200)
            }
            case CS_TEAM_CT:
            {
                g_ct = 0
                g_t = 0
                Counter()
                new a = g_t * 100
                new b = g_ct
                new health_1 = a / b               
                new health = health_1 * 20
                set_user_health(i, health)
                strip_user_weapons(i)
                give_item((i), "weapon_knife")
                can_have_gun[i] = false
            }
        }
    }
}

/*================================================================================
Daymenu: Scoutday
=================================================================================*/

public scoutday(id)
{
    server_cmd("sv_gravity 200")
   
    for(new i = 0; i < g_max_clients; i++)
    {
        switch(cs_get_user_team(i))
        {
            case CS_TEAM_T:
            {
                strip_user_weapons(i)
                give_item(i, "weapon_knife")
                give_item(i, "weapon_scout")
                cs_set_user_bpammo(i, CSW_SCOUT, 90)
            }
           
            case CS_TEAM_CT:
            {
                set_user_health(i, 200)
                strip_user_weapons(i)
                give_item(i, "weapon_knife")
                give_item(i, "weapon_scout")
                cs_set_user_bpammo(i, CSW_SCOUT, 90)
            }
        }
    }
    return PLUGIN_HANDLED
}

/*================================================================================
Daymenu: Awp-Masakerday
=================================================================================*/

public awpmasaker(id)
{   
    for(new i = 0; i < g_max_clients; i++)
    {
        switch(cs_get_user_team(i))
        {
            case CS_TEAM_T:
            {
                strip_user_weapons(i)
                give_item(i, "weapon_knife")
                give_item(i, "weapon_awp")
                cs_set_user_bpammo(i, CSW_AWP, 90)
            }
           
            case CS_TEAM_CT:
            {
                g_ct = 0
                g_t = 0
                Counter()
                new a = g_t * 100
                new b = g_ct
                new health_1 = a / b
                new healt = health_1 * 10
                set_user_health(i, healt)
               
                strip_user_weapons(i)
                give_item(i, "weapon_knife")
                give_item(i, "weapon_awp")
                cs_set_user_bpammo(i, CSW_AWP, 90)
            }
        }
    }
    return PLUGIN_HANDLED
}

/*================================================================================
Daymenu: Masakerday
=================================================================================*/

public justmasaker(id)
{
    server_cmd("mp_friendlyfire 1")
   
    for(new i = 0; i < g_max_clients; i++)
    {
        switch(cs_get_user_team(i))
        {
            case CS_TEAM_T:
            {
                can_have_gun[i] = false
            }
        }
    }
}

/*================================================================================
Daymenu: Hide n' Seek
=================================================================================*/

public countdown(id)
{
    new countdowne = menu_create("Countdown:", "menu_handler")
   
    menu_additem(countdowne, "30 Sekunden", "1", 0)
    menu_additem(countdowne, "60 Sekunden", "2", 0)
    menu_additem(countdowne, "100 Sekunden", "3", 0)
   
    menu_setprop(countdowne, MPROP_EXIT, MEXIT_ALL)
    menu_display(id, countdowne, 0)
   
    return PLUGIN_HANDLED
}

public menu_handler(id, countdowne, item)
{
    if(item == MENU_EXIT)
    {
        menu_destroy(countdowne)
        return PLUGIN_HANDLED
    }
    new Data[7], Name[64]
    new Access, Callback
    menu_item_getinfo(countdowne, item, Access, Data,5, Name, 63, Callback)
    new Key = str_to_num(Data)
    switch(Key)
    {
        case 1:
        {
            timer = 30
            set_hudmessage(255, 255, 255, -1.0, 0.86, 0, 6.0, 10.0)
            show_hudmessage(0, "Heute spielen wir verstecken!")
        }
        case 2:
        {
            timer = 60
            set_hudmessage(255, 255, 255, -1.0, 0.86, 0, 6.0, 10.0)
            show_hudmessage(0, "Heute spielen wir verstecken!")
        }
        case 3:
        {
            timer = 100
            set_hudmessage(255, 255, 255, -1.0, 0.86, 0, 6.0, 10.0)
            show_hudmessage(0, "Heute spielen wir verstecken!")
        }
    }
    got_name = false
    countdownv(id)
    menu_destroy(countdowne)
    return PLUGIN_HANDLED
}

public countdownv(id)
{
    if(!got_name)
        get_user_name(id, name, 32)
   
    switch(timer)
    {
        case 0:
        {
            set_hudmessage( 0, 255, 0, -1.0, 0.50, 2, 5.0, 8.0, 0.0, 0.0, 10)
            show_hudmessage(0, "Wir hoffen, ihr habt euch gut versteckt!")
            stop_t_from_moving(id)
        }
        case 1:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 2:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 3:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 4:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 5:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 6:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 7:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 8:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 9:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 10:
        {       
            set_task(1.0, "countdownv", 0)
        }
        case 11:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 12:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 13:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 14:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 15:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 16:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 17:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 18:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 19:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 20:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 21:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 22:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 23:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 24:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 25:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 26:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 27:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 28:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 29:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 30:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 31:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 32:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 33:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 34:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 35:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 36:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 37:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 38:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 39:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 40:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 41:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 42:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 43:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 44:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 45:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 46:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 47:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 48:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 49:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 50:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 51:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 52:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 53:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 54:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 55:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 56:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 57:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 58:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 59:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 60:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 61:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 62:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 63:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 64:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 65:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 66:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 67:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 68:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 69:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 70:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 71:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 72:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 73:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 74:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 75:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 76:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 77:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 78:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 79:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 80:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 81:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 82:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 83:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 84:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 85:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 86:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 87:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 88:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 89:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 90:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 91:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 92:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 93:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 94:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 95:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 96:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 97:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 98:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 99:
        {
            set_task(1.0, "countdownv", 0)
        }
        case 100:
        {
            set_task(1.0, "countdownv", 0)
        }
    }
    if(timer != 0)
    {
        set_hudmessage( 0, 255, 0, -1.0, 0.40, 2, 5.0, 8.0, 0.0, 0.0, 10)
        show_hudmessage(0, "%s startete einen Countdown.^nZeit bis die CT's kommen: %i", name, timer)
        timer--
    }
    got_name = true
}

public stop_t_from_moving(id)
{
    for(new i = 0; i < g_max_clients; i++)
    {
        switch(cs_get_user_team(i))
        {
            case CS_TEAM_T:
            {
                set_user_maxspeed(i, 0.1)
            }
        }
    }
}

The following functions have this problem:

justmasaker(id)
scoutday(id)
zombieday(id)
spartaday(id)
awpmasaker(id)

hope you can help me =)

Arkshine 04-03-2011 13:23

Re: Problem with for-loops
 
And the problem is ?

DjOptimuS 04-03-2011 14:34

Re: Problem with for-loops
 
i don't have time to verify all the code, but, if the FOR loop finds that a players doesn't exists, it will stop, for example

online are the id 1, 2 and 4

the for loop like this

for(new i=1;i<=MAX_PLAYERS;i++)
{
instruction
}

will stop at 3. you must do
for(new i=1;i<=MAX_PLAYERS;i++)
{
if(!is_user_connected(i)) continue
instruction
}

fysiks 04-03-2011 15:04

Re: Problem with for-loops
 
DjOptimus is correct. You must check if the player is connected before you use functions on that player everywhere you use a for loop with g_max_clients. You should be seeing errors in your logs. Also remember to enable debug when testing your plugins.

Tip: Any time you see code that repeats more than a few times, you need to optimize:

PHP Code:

public menu_handler(idcountdowneitem)
{
    if(
item == MENU_EXIT)
    {
        
menu_destroy(countdowne)
        return 
PLUGIN_HANDLED
    
}
    new 
Data[7], Name[64]
    new 
AccessCallback
    menu_item_getinfo
(countdowneitemAccessData,5Name63Callback)
    new 
Key str_to_num(Data)
    switch(
Key)
    {
        case 
1timer 30
        
case 2timer 60
        
case 3timer 100
    
}
    
menu_destroy(countdowne)

    
set_hudmessage(255255255, -1.00.8606.010.0)
    
show_hudmessage(0"Heute spielen wir verstecken!")

    
get_user_name(idname32)
    
set_task(1.0"countdownv"6875)
    return 
PLUGIN_HANDLED
}

public 
countdownv(id)
{
    if( 
timer <= )
    {
        
set_hudmessage02550, -1.00.5025.08.00.00.010)
        
show_hudmessage(0"Wir hoffen, ihr habt euch gut versteckt!")
        
stop_t_from_moving(id)
    }
    else
    {
        
set_hudmessage02550, -1.00.4025.08.00.00.010)
        
show_hudmessage(0"%s startete einen Countdown.^nZeit bis die CT's kommen: %i"nametimer)
        
timer--
        
set_task(1.0"countdownv"6875)
    }


This will save you about 300 lines of code.

reetry 04-03-2011 17:43

Re: Problem with for-loops
 
Thank you very much :P

reetry 04-03-2011 17:46

Re: Problem with for-loops
 
Quote:

Originally Posted by Arkshine (Post 1443860)
And the problem is ?

The problem was that the for-loops in this plugin didn't work properly and i didn't know why. Now they do and thank you all


All times are GMT -4. The time now is 14:30.

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