Raised This Month: $51 Target: $400
 12% 

autoresponder edit


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
tedaimlocks
Member
Join Date: Jan 2024
Old 03-17-2024 , 12:15   autoresponder edit
Reply With Quote #1

can anyone edit this https://forums.alliedmods.net/showthread.php?t=27814 autoresponder and create something like the default advertise messages but add some conditions for online players and current map?

something like this

PHP Code:
[SPK ZMZOMBIE.LEAGUECS.RO Players: %onlineplayers/32 Map: %map 

Last edited by tedaimlocks; 03-17-2024 at 13:34.
tedaimlocks is offline
Uzviseni Bog
Senior Member
Join Date: Jun 2020
Old 03-17-2024 , 14:08   Re: autoresponder edit
Reply With Quote #3

https://forums.alliedmods.net/showth...09#post2815909
Uzviseni Bog is offline
tedaimlocks
Member
Join Date: Jan 2024
Old 03-17-2024 , 14:18   Re: autoresponder edit
Reply With Quote #4

yea.. something like that, i dont know how to do it tho, since i have to do it in advertisements file
tedaimlocks is offline
bigdaddy424
Senior Member
Join Date: Oct 2021
Location: Jupiter
Old 03-17-2024 , 15:58   Re: autoresponder edit
Reply With Quote #5

something like this should work
PHP Code:
new mapname[32];
public 
plugin_init() get_mapname(mapname31);
stock setColor(string[], len)
{
    if (
contain(string"!t") != -|| contain(string"!g") != -|| contain(string,"!n") != -1)
    {
        
//Some nice shiny colors ^^
        
replace_all(stringlen"!t""^x03");
        
replace_all(stringlen"!n""^x01");
        
replace_all(stringlen"!g""^x04");
        
        
//Work away a stupid bug
        
format(stringlen"^x01%s"string);
    }

    if (
contain(string"%online%") != -1)
    {
        
replace_all(stringlen"%online%"fmt("%d"get_playersnum()));
    }

    if (
contain(string"%mapname%") != -1)
    {
        
replace_all(stringlen"%mapname%"mapname);
    }

__________________
bigdaddy424 is offline
tedaimlocks
Member
Join Date: Jan 2024
Old 03-18-2024 , 09:43   Re: autoresponder edit
Reply With Quote #6

so uh how should i do it? i have no idea

PHP Code:
#include <amxmodx>
#include <amxmisc>

#pragma semicolon 1

new const PLUGIN[] = "Autoresponder/Advertiser";
new const 
VERSION[] = "0.5";
new const 
AUTHOR[] = "MaximusBrood";

#define NORM_AD 0
#define SAY_AD 1

#define COND 0
#define STORE 1

#define COND_TKN '%'
#define SAY_TKN '@'

#define COND_STKN "%"
#define DEVIDE_STKN "~"
#define SAY_STKN "@"

//-.-.-.-.-.-.-.-.DEFINES.-.-.-.-.-.-.-.-.-.-.

//Maximum amount of ads
#define MAXADS 64

//Minimum difference between two different ads (float)
new const Float:RAND_MIN 60.0;

//Maximum difference between two different ads (float)
new const Float:RAND_MAX 80.0;

//-.-.-.-.-.-.-.-.END DEFINES..-.-.-.-.-.-.-.

//Stores
new sayConditions[MAXADS][3][32];
new 
normConditions[MAXADS][3][32];
new 
normStore[MAXADS][128];
new 
sayStore[MAXADS][2][128];

new 
gmsgSayText;

//Counters
new adCount[2] = {00};

public 
plugin_init() {
    
register_plugin(PLUGINVERSIONAUTHOR);
    
register_cvar("admanager_version""0.5"FCVAR_SERVER);
    
    
register_cvar("ad_react_all""1");
    
    
gmsgSayText get_user_msgid("SayText");
    
    
register_clcmd("say","eventSay");
    
register_clcmd("say_team","eventSay");
    
    
//Delay the load proces by 10 sec because we don't want to get more load
    //on the already high-load mapchange.
    //Too soon to affect players while playing, too late to create time-out @ mapchange
    
set_task(10.0"load");
}

public 
load()
{
    
//Load the data
    
new filepath[64];
    
get_configsdir(filepath63);
    
format(filepath63"%s/advertisements.ini"filepath);
    
    if(
file_exists(filepath))
    {
        new 
output[512], conditions[128], temp[64], type;
        
        
//Open file
        
new fHandle fopen(filepath"rt");
        
        
//Checks for failure
        
if(!fHandle)
            return;
        
        
//Loop through all lines
        
for(new 0MAXADS && !feof(fHandle); a++)
        {
            
//Get line
            
fgets(fHandleoutput511);
            
            
            
//Work away comments
            
if(output[0] == ';' || !output[0] || output[0] == ' ' || output[0] == 10
            {
                
//Line is not counted
                
a--;
                continue;
            }
            
            
//Reset type
            
type 0;
            
            
//Check if it contains conditions
            
if(output[0] == COND_TKN)
            {
                
//Cut the conditions off the string
                
split(outputconditions127output511DEVIDE_STKN);
                
                
//Determine if its say check or normal ad
                
type output[0] == SAY_TKN 0;
                
                
//Put the conditions in own space
                
for(new 03b++)
                {
                    new 
sort[16], cond[32], numb;
                    
                    
//Remove the % from line 
                    
conditions[0] = ' ';
                    
trim(conditions);
                    
                    
//Get one condition from the line
                    
split(conditionstemp64conditions127COND_STKN);
                    
                    
split(tempsort15cond31" ");
                    
                    if(
equali(sort"map"))
                    {
                        
numb 0;
                    } else if(
equali(sort"min_players"))
                    {
                        
numb 1;
                    } else if(
equali(sort"max_players"))
                    {
                        
numb 2;
                    } else
                    {
                        continue;
                    }
                    
                    
//Copy it to its final resting place ^^
                    
setString(CONDtypecondadCount[type], numb);
                    
                    
//Exit if it hasn't got more conditions
                    
if(!conditions[0])
                        break;
                }
            }
            
            if(
type == 0)
                
type output[0] == SAY_TKN 0;
            
            if(
type == SAY_AD)
            {
                new 
said[32], answer[128];
                
                
//Remove the @ from line
                
output[0] = ' ';
                
trim(output);
                
                
split(outputsaid31answer127DEVIDE_STKN);
                
                
//Apply color
                
setColor(answer127);
                
                
//Save it
                
setString(STORESAY_ADsaidadCount[SAY_AD], 0);
                
setString(STORESAY_ADansweradCount[SAY_AD], 1);
            } else
//if(type == NORM_AD)
            
{
                
//Apply color
                
setColor(output511);
                
                
//Save it
                
setString(STORENORM_ADoutputadCount[NORM_AD]);
            }
            
            
//Increment the right counter
            
adCount[NORM_AD] += type == NORM_AD 0;
            
adCount[SAY_AD]  += type == SAY_AD  0;
        }
        
        
//Set a first task, if there are any normal ads
        
if(adCount[NORM_AD] != 0)
            
set_task(random_float(RAND_MINRAND_MAX), "eventTask");
        
        
//Close file to prevent lockup
        
fclose(fHandle);    
    }
}

new 
currAd = -1;

public 
eventTask()
{
    
//Go past all ads and check conditions
    
for(new 0adCount[NORM_AD]; a++)
    {
        
//Put current ad to the next one
        
currAd currAd == adCount[NORM_AD] - currAd 1;
        
        if(
checkConditions(currAdNORM_AD))
        {
            
//Display the ad
            
new data[3];
            
data[0] = currAd;
            
data[1] = NORM_AD;
            
data[2] = 0;
            
displayAd(data);
            
            break;
        }
    }
        
    
//Set a new task
    
set_task(random_float(RAND_MINRAND_MAX), "eventTask");
    
    return 
PLUGIN_CONTINUE;
}

public 
eventSay(id)
{
    
//If nothing is said, don't check
    
if(adCount[SAY_AD] == 0)
        return 
PLUGIN_CONTINUE;
    
    new 
talk[64], keyword[16];
    
read_args(talk63) ;
        
    
//En nu rennen voor jullie zakgeld klootzjakken!
    
for(new 0adCount[SAY_AD]; a++)
    {
        
//Get the string
        
getString(STORESAY_ADkeyword15a0);
        
        if(
containi(talkkeyword) != -1)
        {
            
//Check the rest if it fails to conditions
            
if(!checkConditions(aSAY_AD))
                continue;
            
            new 
data[3];
            
data[0] = a;
            
data[1] = SAY_AD;
            
data[2] = id;
            
            
//Set the task
            
set_task(0.3"displayAd"0data3);
            
            
//Don't execute more of them
            
break;
        }
    }
    
    return 
PLUGIN_CONTINUE;
}

public 
displayAd(params[])
{
    
//Get the string that is going to be displayed
    
new message[128];
    
getString(STOREparams[1], message127params[0], params[1]);
    
    
//If its enabled by cvar and id is set, display to person who triggered message only
    
if(get_cvar_num("ad_react_all") == && params[2] != 0)
    {
        
message_begin(MSG_ONEgmsgSayText, {0,0,0}, params[2]);
        
write_byte(params[2]);
        
write_string(message);
        
message_end();
    
    } else
    {
        
//Display the message to everyone
        
new plist[32], playernumplayer;
        
        
get_players(plistplayernum"c");
    
        for(new 
0playernumi++)
        {
            
player plist[i];
            
            
message_begin(MSG_ONEgmsgSayText, {0,0,0}, player);
            
write_byte(player);
            
write_string(message);
            
message_end();
        }
    }
    
    return 
PLUGIN_HANDLED;
}

//---------------------------------------------------------------------------
//                                STOCKS
//---------------------------------------------------------------------------

stock checkConditions(atype)
{
    
//Mapname
    
if((type == NORM_AD && normConditions[a][0][0]) || (type == SAY_AD && sayConditions[a][0][0]))
    {
        new 
mapname[32];
        
get_mapname(mapname31);
        
        if(! (
type == NORM_AD && equali(mapnamenormConditions[a][0]) ) || (type == SAY_AD && equali(mapnamesayConditions[a][0]) ) )
            return 
false;
    }
    
    
//Min Players
    
if((type == NORM_AD && normConditions[a][1][0]) || (type == SAY_AD && sayConditions[a][1][0]))
    {
        new 
playersnum get_playersnum();
        
        if( (
type == NORM_AD && playersnum str_to_num(normConditions[a][1]) ) || (type == SAY_AD && playersnum str_to_num(sayConditions[a][1]) ) )
            return 
false;
    }
    
    
//Max Players
    
if((type == NORM_AD && normConditions[a][2][0]) || (type == SAY_AD && sayConditions[a][2][0]))
    {
        new 
playersnum get_playersnum();
        
        if( (
type == NORM_AD && playersnum str_to_num(normConditions[a][2]) ) || (type == SAY_AD && playersnum str_to_num(sayConditions[a][2]) ) )
            return 
false;
    }
    
    
//If everything went fine, return true
    
return true;
}    

stock setColor(string[], len)
{
    if (
contain(string"!t") != -|| contain(string"!g") != -|| contain(string,"!n") != -1)
    {
        
//Some nice shiny colors ^^
        
replace_all(stringlen"!t""^x03");
        
replace_all(stringlen"!n""^x01");
        
replace_all(stringlen"!g""^x04");
        
        
//Work away a stupid bug
        
format(stringlen"^x01%s"string);
    }
}

stock getString(modetypestring[], lenonetwo 0)
{
    
//server_print("mode: %d type: %d len: %d one: %d two %d", mode, type, len, one, two);
    
    //Uses the fact that a string is passed by reference
    
if(mode == COND)
    {
        if(
type == NORM_AD)
        {
            
copy(stringlennormConditions[one][two]);
        } else
//if(type = SAY_AD)
        
{
            
copy(stringlensayConditions[one][two]);
        }
    } else
//if(mode == STORE)
    
{
        if(
type == NORM_AD)
        {
            
copy(stringlennormStore[one]);
        } else
//if(type == SAY_AD)
        
{
            
copy(stringlensayStore[one][two]);
        }
    }
}

stock setString(modetypestring[], onetwo 0)
{
    if(
mode == COND)
    {
        if(
type == NORM_AD)
        {
            
copy(normConditions[one][two], 31string);
        } else
//if(type = SAY_AD)
        
{
            
copy(sayConditions[one][two], 31string);
        }
    } else
//if(mode == STORE)
    
{
        if(
type == NORM_AD)
        {
            
copy(normStore[one], 127string);
        } else
//if(type == SAY_AD)
        
{
            
copy(sayStore[one][two], 127string);
        }
    }

tedaimlocks is offline
Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 17:51.


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