Have problem with Level System
#1

I use down level system and she give me exp every 3 seconds .... :/ how do i change to 1 hour and why when i leave the server and i will back i'm again 1 level ?
PHP код:
#include <a_samp>
#define white 0xFFFFFFAA
#define white 0xFFFFFFAA
#define yellow 0xFFFFF00AA
#define red 0x660000AA
#define pink 0xFF66FFAA
#define lightblue 0x33CCFFAA
#define darkred 0x660000AA
#define grey 0xAFAFAFAA
#define error 0xD2691EAA
#define orange 0xFF9900AA
#define nicepink 0xEC13COFF
#define grad1 0xB4B5B7AA
#define lightgreen 0x7CFC00AA
enum Info
{
    
pLevel,
    
pExp,
    
pCash,
};
new 
PlayerInfo[MAX_PLAYERS][Info];
new 
levelexp 1;
new 
gPlayerLogged[MAX_PLAYERS];
new 
ScoreOld;
forward OnPlayerLogin(playerid,const string[]);
forward String(string[]);
forward ScoreUpdate();
forward PayDay(playerid);
forward PlayerPlayMusic(playerid);
forward StopMusic();
public 
ScoreUpdate()
{
    new 
Score;
    new 
name[MAX_PLAYER_NAME];
    
//new string[256];
    
for(new i=0i<MAX_PLAYERSi++)
    {
        if (
IsPlayerConnected(i))
        {
            
GetPlayerName(inamesizeof(name));
            
Score PlayerInfo[i][pLevel];
            
SetPlayerScore(iScore);
            if (
Score ScoreOld)
            {
                
ScoreOld Score;
            }
        }
    }
}
#define FILTERSCRIPT
#if defined FILTERSCRIPT
public OnFilterScriptInit()
{
    
SetTimer("PayDay",10000,1);//600000
    
SetTimer("ScoreUpdate"10001);
    print(
"\n--------------------------------------");
    print(
" Level System by AlexSAMP loaded...     ");
    print(
"--------------------------------------\n");
    return 
1;
}
public 
OnFilterScriptExit()
{
    return 
1;
}
#endif
public OnPlayerConnect(playerid)
{
    
PlayerInfo[playerid][pLevel] = 1;
    
PlayerInfo[playerid][pExp] = 0;
    return 
1;
}
public 
OnPlayerCommandText(playeridcmdtext[])
{
    new 
cmd[256];
    new 
idx;
    
cmd strtok(cmdtextidx);
    new 
playername[MAX_PLAYER_NAME];
    
GetPlayerName(playerid,playername,sizeof(playername));
    new 
nxtlevel PlayerInfo[playerid][pLevel]+1;
    new 
expamount nxtlevel*levelexp;
    new 
info[248];
    if (
strcmp("/buylevel"cmdtrue10) == 0)
    {
        if(
IsPlayerConnected(playerid) == 1)
        {
            new 
points[248];
            if(
PlayerInfo[playerid][pExp] < expamount)
            {
                
format(points,sizeof(points)," You need [%d] Exp Points! You currently have [%d]",expamount,PlayerInfo[playerid][pExp]);
                
SendClientMessage(playerid,white,points);
                return 
1;
            }
            else
            {
                
PlayerInfo[playerid][pExp] = 0;
                
PlayerInfo[playerid][pLevel]++;
                
format(info,sizeof(info)," ~g~ Level Up! ~w~ You are now level: [%d]",PlayerInfo[playerid][pLevel]);
                
GameTextForPlayer(playerid,info,6000,1);
                return 
1;
            }
        }
        return 
1;
    }
    if(
strcmp("/level"cmdtrue10)  == 0)
    {
        
// here you add if the player from YOUR server is logged in or not.
        
if(gPlayerLogged[playerid] == 1)
        {
            new 
stats[248];
            
format(statssizeof(stats), "_______________________");
            
SendClientMessage(playerid,lightgreen,stats);
            
format(statssizeof(stats), " *** %s ***",playername);
            
SendClientMessage(playerid,white,stats);
            
format(statssizeof(stats), " General: Level [%d], Exp [%d/%d]",PlayerInfo[playerid][pLevel],PlayerInfo[playerid][pExp],expamount);
            
SendClientMessage(playerid,white,stats);
        }
        return 
1;
    }
    return 
0;
}
public 
String(string[])
{
    for(new 
x=0strlen(string); x++)
      {
          
string[x] += (3^x) * (15);
          if(
string[x] > (0xff))
          {
              
string[x] -= 64;
          }
      }
    return 
1;
}
strtok(const string[], &index)
{
    new 
length strlen(string);
    while ((
index length) && (string[index] <= ' '))
    {
        
index++;
    }
    new 
offset index;
    new 
result[20];
    while ((
index length) && (string[index] > ' ') && ((index offset) < (sizeof(result) - 1)))
    {
        
result[index offset] = string[index];
        
index++;
    }
    
result[index offset] = EOS;
    return 
result;
}
public 
OnPlayerLogin(playerid,const string[])
{
    new 
pname2[MAX_PLAYER_NAME];
    new 
pname3[MAX_PLAYER_NAME];
    new 
string2[64];
    
GetPlayerName(playeridpname2sizeof(pname2));
    
format(string2sizeof(string2), "%s.cer"pname2);
    new 
FileUserFile fopen(string2io_read);
    if (
UserFile)
    {
            new 
key[128],val[128];
            new 
Data[128];
            while(
fread(UserFile,Data,sizeof(Data)))
            {
                
key ini_GetKey(Data);
                if( 
strcmpkey "Level" true ) == ) { val ini_GetValueData ); PlayerInfo[playerid][pLevel] = strvalval ); }
                if( 
strcmpkey "Exp" true ) == ) { val ini_GetValueData ); PlayerInfo[playerid][pExp] = strvalval ); }
                if( 
strcmpkey "Cash" true ) == ) { val ini_GetValueData ); PlayerInfo[playerid][pCash] = strvalval ); }
                
GivePlayerMoney(playerid,PlayerInfo[playerid][pCash]);
            }
            
gPlayerLogged[playerid] = 1;
            new 
score PlayerInfo[playerid][pLevel];
            
SetPlayerScore(playeridscore);
            
GetPlayerName(playeridpname3sizeof(pname3));
    }
    return 
1;
}
stock ini_GetKeyline[] )
{
    new 
keyRes[128];
    
keyRes[0] = 0;
    if ( 
strfindline "=" true ) == -) return keyRes;
    
strmidkeyRes line strfindline "=" true ) , sizeofkeyRes) );
    return 
keyRes;
}
stock ini_GetValueline[] )
{
    new 
valRes[128];
    
valRes[0]=0;
    if ( 
strfindline "=" true ) == -) return valRes;
    
strmidvalRes line strfindline "=" true )+strlenline ) , sizeofvalRes ) );
    return 
valRes;
}
public 
OnPlayerUpdate(playerid)
// no need for IsPlayerConnect because if they aren't connected obviously they cant do anything...
        
if(gPlayerLogged[playerid]) //same here, check if the player is logged in or not. your choice.
        
{
            new 
string3[32];
            new 
pname3[MAX_PLAYER_NAME];
            
GetPlayerName(playeridpname3sizeof(pname3));
            
format(string3sizeof(string3), "%s.cer"pname3);
            new 
FilepFile fopen(string3io_write);
            if (
pFile)
            {
                new var[
32];
                new 
FilehFile fopen(string3io_append);
                
PlayerInfo[playerid][pCash] = GetPlayerMoney(playerid);
                
format(var, 32"Kills:%d\n",PlayerInfo[playerid][pLevel]);fwrite(hFile, var);
                
format(var, 32"Deaths:%d\n",PlayerInfo[playerid][pExp]);fwrite(hFile, var);
                
format(var, 32"Cash:%d\n",PlayerInfo[playerid][pCash]);fwrite(hFile, var);
                
fclose(hFile);
            }
        }
        return 
1;
}
public 
PayDay(playerid)
{
    for (new 
iMAX_PLAYERSi++)
    {
        if (
IsPlayerConnected(i))
        {
            new 
nxtlevel PlayerInfo[playerid][pLevel];
            new 
payday nxtlevel*1000;
            
GivePlayerMoney(i,payday);
            
PlayerInfo[playerid][pExp]++;
            
GameTextForPlayer(i,"  ~p~ PayDay",6,5000);
            
PlayerPlayMusic(playerid);
        }
    }
}
public 
PlayerPlayMusic(playerid)
{
    for(new 
0MAX_PLAYERSi++)
    {
        if(
IsPlayerConnected(i))
        {
            
SetTimer("StopMusic"50000);
            
PlayerPlaySound(i10680.00.00.0);
        }
    }
}
public 
StopMusic()
{
    for(new 
0MAX_PLAYERSi++)
    {
        if(
IsPlayerConnected(i))
        {
            
PlayerPlaySound(i10690.00.00.0);
        }
    }

Reply
#2

For the Payday, make a second timer like this:

pawn Код:
forward SecondTimer();
public SecondTimer()
{
    new hours, minutes, seconds;
    gettime(hours, minutes, seconds);
    if(seconds == 0 && minutes == 0)
    {
        PayDay()
    }
    return 1;
}
Under OnFilterScriptInit / OnGameModeInit:

pawn Код:
SetTimer("SecondTimer", 1000, true);
Change PayDay(playerid) to PayDay().

Also, the OnPlayerUpdate is saving the level and exp as kills and deaths?

pawn Код:
format(var, 32, "[COLOR="red"]Kills[/COLOR]:%d\n",PlayerInfo[playerid][[COLOR="Red"]pLevel[/COLOR]]);fwrite(hFile, var);
                format(var, 32, "[COLOR="red"]Deaths[/COLOR]:%d\n",PlayerInfo[playerid][[COLOR="red"]pExp[/COLOR]]);fwrite(hFile, var);
Try and change it to:

pawn Код:
format(var, 32, "Level:%d\n",PlayerInfo[playerid][pLevel]);fwrite(hFile, var);
                format(var, 32, "Exp:%d\n",PlayerInfo[playerid][pExp]);fwrite(hFile, var);
Reply
#3

i dont understand in the script is the same diffrent names ..... :/
Reply
#4

Quote:
Originally Posted by Bulgaria
Посмотреть сообщение
i dont understand in the script is the same diffrent names ..... :/
You're doing it wrong.. when the OnPlayerUpdate occurs, you're setting the player's LEVEL as how many in-game KILLS he has, and the EXP as how many in-game DEATHS he has. You need to change that so it corresponds correctly.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)