AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Scripting (https://forums.alliedmods.net/forumdisplay.php?f=107)
-   -   Team switch using database (https://forums.alliedmods.net/showthread.php?t=308290)

Ahimel 06-14-2018 14:52

Team switch using database
 
Hello guys, I am begginer at scripting so I have problem for few weeks and I just give up :(
Code just doesn't work. I don't know.
The thing is that if in database User with steamid have player6-player10 he have to go to CT else to T
Code:

void SQL_CheckSPOT(client)
{
        char[] Query = new char[150];
        decl String:steamID64[18];
        GetClientAuthId(client, AuthId_SteamID64, steamID64, sizeof(steamID64));       
       
        FormatEx(Query, 150, "SELECT `player_spot` FROM `users` WHERE `steamid_64` = '%s'",steamID64);
        DBResultSet sQuery = SQL_Query(DB, Query);
       
        SQL_CheckSPOT_Callback(DB,sQuery,client);
       
}

public void SQL_CheckSPOT_Callback(Database db, DBResultSet results,  client)
{
        char res[12];
        while (results.FetchRow())
        {
                SQL_FetchString(results, 0, res, sizeof(res));
        }
       
    decl String:buffer[32];
    Format(buffer, sizeof(buffer), "%d", GetSteamAccountID(client));

    // Force the player on a team 1-5T
    if (StrContains("player1", res) <= 0 || StrContains("player2", res) <= 0 || StrContains("player3", res) <= 0 || StrContains("player4", res) <= 0 || StrContains("player5", res) <= 0) {
        LogMessage("Putting on TEAMA");
        CS_SwitchTeam(client, 1);
    } else {
        LogMessage("Putting on TEAMB");
        CS_SwitchTeam(client, 2);
    }
    return Plugin_Continue;       
}

Thanks for help

ThatKidWhoGames 06-14-2018 20:04

Re: Team switch using database
 
You need to change each of the <= 0 to != 1. You could also simply use one StrContains and check if the string player exists. You also can't return Plugin_Continue to a void function.

DarkDeviL 06-15-2018 14:22

Re: Team switch using database
 
Quote:

Originally Posted by Ahimel (Post 2596989)
Code:

void SQL_CheckSPOT(client)
{
        char[] Query = new char[150];
        decl String:steamID64[18];
        GetClientAuthId(client, AuthId_SteamID64, steamID64, sizeof(steamID64));


This one is seriously bad, -

Do the SteamID checking properly, as explained in this post.

Doing otherwise will produce unexpected results...


Quote:

Originally Posted by ThatKidWhoGames (Post 2597027)
You need to change each of the <= 0 to != 1. You could also simply use one StrContains and check if the string player exists. You also can't return Plugin_Continue to a void function.

I believe you mean to do "!= -1", with your advice:

Quote:

Originally Posted by https://sm.alliedmods.net/new-api/string/StrContains
Return Value

-1 on failure (no match found). Any other value indicates a position in the string where the match starts.


ThatKidWhoGames 06-15-2018 21:31

Re: Team switch using database
 
That's what I meant, thanks!

Ahimel 07-08-2018 17:42

Hello guys, I am beginner at scripting so I need your help. I need plugin which checks in database if steamid64 'player_spot' = 'player5 to player10' connect to CT , else to T


Thanks for help.

Hello guys, I am dealing with this problem for long long time and no one fixed it. So please help me guys.
Code:
Code:

void SQL_CheckSPOT(client)
{
        char[] Query = new char[150];
        decl String:steamID64[18];
        GetClientAuthId(client, AuthId_SteamID64, steamID64, sizeof(steamID64));       
       
        FormatEx(Query, 150, "SELECT `player_spot` FROM `users` WHERE `steamid_64` = '%s'",steamID64);
        DBResultSet sQuery = SQL_Query(DB, Query);
       
        SQL_CheckSPOT_Callback(DB,sQuery,client);
       
}

public void SQL_CheckSPOT_Callback(Database db, DBResultSet results,  client)
{
        char res[12];
        while (results.FetchRow())
        {
                SQL_FetchString(results, 0, res, sizeof(res));
        }
       
    decl String:buffer[32];
    Format(buffer, sizeof(buffer), "%d", GetSteamAccountID(client));
        PrintToServer("RES: %s      Id: %s",res,client);
    // Force the player on a team 1-5T
    if (strcmp("player1", res) != 0 || strcmp("player2", res) != 0 || strcmp("player3", res) != 0 || strcmp("player4", res) != 0 || strcmp("player5", res) != 0){
            CS_SwitchTeam(client, CS_TEAM_CT);
            PrintToServer("RES: %s      Id: %s",res,client);
    }else{
          CS_SwitchTeam(client, CS_TEAM_T);       
    }       
}



public Action Join_Team(client, const char[] command, args)
{
        SQL_CheckSPOT(client);

        decl String:steamID64[18];
        GetClientAuthId(client, AuthId_SteamID64, steamID64, sizeof(steamID64));
        char team[5];
        GetCmdArg(1, team, sizeof(team));
       
        if (CurrentRound == WARMUP)
        {
                PrintHintText(client, "<font color='#0087af'><b><u>%N</u></b></font><font color='#87ff87'>%d/%d Players Ready</font><br><font color='#af5fff'>Type !ready to ready up.</font>", client, ReadyPlayers, GetConVarInt(RequiredReadyPlayers));
                }
        return Plugin_Stop;
}

Thanks for help

DarkDeviL 07-08-2018 18:31

Re: Need plugin which uses Database for force join
 
Quote:

Originally Posted by Ahimel (Post 2602126)
Hello guys, I am beginner at scripting so I need your help. I need plugin which checks in database if steamid64 'player_spot' = 'player5 to player10' connect to CT , else to T


Thanks for help.

It sounds like a request, where you want the full code to be made by somenoe else and provided in a working state to you, as such, I have moved your post into Plugin/Gameplay Ideas and Requests .


People tend to be active on the forums that they are interested in, so if they are interested in assisting you with your code when you have issues (Scripting section), they may not necessarily be interested in providing full code (which would belong to "Plugin/Gameplay Ideas and Requests "), and the other way around.

I therefore suggest you pay more attention in the future, and post them only in the most relevant section of the board, and not just the first section you see. This way will bring the best and most useful responses..


Edit 2018-07-10 14:31 CEST: I have now merged all your threads (cross posts about the same issue), do NOT cross post the same thing towards multiple threads, and do not bump. If no one responds, there are usually things you can do better in your explanation, such as explaining how the code reacts when you use it, including all error output it produces, etc.

mug1wara 07-11-2018 06:06

Re: Team switch using database
 
"char[] Query = new char[150];"

Is it only me, why index a query string?

Neuro Toxin 07-12-2018 06:20

Re: Team switch using database
 
Quote:

Originally Posted by mug1wara (Post 2602881)
"char[] Query = new char[150];"

Is it only me, why index a query string?

Serious?

Arrays need a length, which includes char arrays.

mug1wara 07-12-2018 08:05

Re: Team switch using database
 
It was kinda new to me though, never done it and works the way I want it to work.

Atleast I understand why ^^

EDIT:

@Neuro Toxin

"char[] Query[150];"

Query is an array.
150 is a size...

Only difference is that "char[] Query = new char[150];"'s size may be dynamic.

It wouldn't matter that much in querying.


All times are GMT -4. The time now is 18:50.

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