Jump to content
  • 0

Prize for the first 50


Scofield

Question


  • Group:  Members
  • Topic Count:  107
  • Topics Per Day:  0.03
  • Content Count:  265
  • Reputation:   11
  • Joined:  01/11/13
  • Last Seen:  

Hi, I would like a script that would give the first 50 players a login to the server, each player can win only once, I would like the script to check for ip, and mac

Link to comment
Share on other sites

14 answers to this question

Recommended Posts

  • 1

  • Group:  Content Moderator
  • Topic Count:  55
  • Topics Per Day:  0.02
  • Content Count:  1676
  • Reputation:   702
  • Joined:  12/21/14
  • Last Seen:  

mac ?

if you have GePard

this should work

prontera,0,0,0	script	qqqqqq	444,{
	if(inarray($UNIQUEIDLIST_REWARDS1$,get_unique_id()) == -1 && inarray($IPLIST_REWARDS1$,getcharip()) == -1 ){
		if($REWARDS1 < 50){
			//the rewards here!
			//------------
			getitem 502,1;
			//------------
			$UNIQUEIDLIST_REWARDS1$[getarraysize($UNIQUEIDLIST_REWARDS1$)] = get_unique_id();
			$IPLIST_REWARDS1$[getarraysize($IPLIST_REWARDS1$)] = getcharip();
			$REWARDS1++;
			mes "you got the reward";
			end;
		}
		mes "you missed the reward";//50 player already got the reward
		end;
	}
	mes "you already got the reward";
	end;
}

 

Edited by sader1992
<tab>
  • Upvote 2
Link to comment
Share on other sites

  • 0

  • Group:  Forum Moderator
  • Topic Count:  25
  • Topics Per Day:  0.01
  • Content Count:  830
  • Reputation:   316
  • Joined:  02/11/19
  • Last Seen:  

3 hours ago, sader1992 said:

mac ?

I think he meant "unique_id".

Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  107
  • Topics Per Day:  0.03
  • Content Count:  265
  • Reputation:   11
  • Joined:  01/11/13
  • Last Seen:  

Nice

I would like to give 4 awards

Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  0
  • Topics Per Day:  0
  • Content Count:  23
  • Reputation:   2
  • Joined:  08/15/19
  • Last Seen:  

5 hours ago, cumbe11 said:

Nice

I would like to give 4 awards

Did you mean 4 rewards?

Just change or add this line:

getitem 502,1;

To

getitem 502,1;
getitem <ITEM ID>,<QUANTITY>;
getitem <ITEM ID>,<QUANTITY>;
getitem <ITEM ID>,<QUANTITY>;

The <ITEM ID> is the first value of the structure in the each line: https://raw.githubusercontent.com/rathena/rathena/master/db/re/item_db.txt

502 is indeed the Orange Potion.

  • Upvote 1
Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  107
  • Topics Per Day:  0.03
  • Content Count:  265
  • Reputation:   11
  • Joined:  01/11/13
  • Last Seen:  

nice

I went to test the npc more calmly, the more I click on the npc and nothing happens

  parse_simpleexpr: unmatch ')'
     1 : {
*    2 :        if(inarray'('$UNIQUEIDLIST_REWARDS1$,get_unique_id()) == -1 && i                                                                   narray($IPLIST_REWARDS1$,getcharip()) == -1 ){
     3 :                if($REWARDS1 < 50){
     4 :                        //the rewards here!
     5 :                        //------------
     6 :                        getitem 29006,1;
     7 :                        getitem 7608,1;


 

Link to comment
Share on other sites

  • 0

  • Group:  Content Moderator
  • Topic Count:  55
  • Topics Per Day:  0.02
  • Content Count:  1676
  • Reputation:   702
  • Joined:  12/21/14
  • Last Seen:  

3 hours ago, cumbe11 said:

I went to test the npc more calmly, the more I click on the npc and nothing happens

 

  parse_simpleexpr: unmatch ')'
     1 : {
*    2 :        if(inarray'('$UNIQUEIDLIST_REWARDS1$,get_unique_id()) == -1 && i                                                                   narray($IPLIST_REWARDS1$,getcharip()) == -1 ){
     3 :                if($REWARDS1 < 50){
     4 :                        //the rewards here!
     5 :                        //------------
     6 :                        getitem 29006,1;
     7 :                        getitem 7608,1;
 

how old is your server ?

Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  107
  • Topics Per Day:  0.03
  • Content Count:  265
  • Reputation:   11
  • Joined:  01/11/13
  • Last Seen:  

Emulator 2012

i have this script it works great i wanted to leave it checking the uniqueid and ip

	prontera,155,172,3    script    Comece com o pé direito    880,{
	    set .@n$, "[ ^cc0000 Comece com o pé direito ^000000 ]";
    
    mes .@n$;
    mes "Olá, "+strcharinfo(0)+"!";
	    if(##premioscomece < 50){
        set ##premioscomece, 100;
    }
	    if(##premioscomece > 50){
        if(#permissaocomece == 2){
            mes "Infelizmente cada jogador só pode participar uma vez do evento, lamento!";
            close;
        }
        set @restam, ##premioscomece-50;
        mes "Vejo que você é um dos primeiros jogadores...";
        mes "[^FF0000 Ainda restam "+@restam+" prêmios ^000000]";
        mes "O Evento [Comece com o pé direito] foi criado para nossos jogadores, como forma de fidelização, ao qual os 50 primeiros jogadores à marcarem presença, receberão ao completar 3 horas online, um pacote para começarem no servidor!";
        next;
	        switch(select("Me explique:Marcar Presença:Ver Meus Pontos:Receber Prêmio:Sair")){
            mes .@n$;
            if(BaseLevel < 1){
                mes "Desculpe, mas você precisa ter nível de base maior ou igual à 1 para participar.";
                close;
            }
	            case 1:
                mes "É bem simples, as regras são claras, você precisa de ^CC00003 pontos^000000 para ganhar o prêmio, que é [^CC0000 10 dias VIP + 5 Ovos Surpesa e um Visual Esclusivo^000000]. Para ganhar os pontos é fácil, eu irei contar 1 (um) ponto se você permanecer 1 (uma) hora logado em nosso servidor, para ganhar mais pontos, basta vir falar comigo novamente. Quando juntar os 3 pontos, eu troco pelo prêmio.";
                next;
                mes .@n$;
                mes "Lembrando: Não será contado pontos para lojas com comando @at, loja aberta normalmente ou pessoas AFK.";
                mes "Outro detalhe, cada jogador só poderá participar uma vez deste evento.";
                close;
        
            case 2:
                if(#permissaocomece != 2 && #pontoscomece == 0 && #comece != 1){
                    set ##premioscomece, ##premioscomece-1;
                }
	                if(#comece != 1){
                    set #TempoOn, gettimetick(2) + 3600;
                    set #comece, 1;
                    mes "Seu tempo foi marcado!";
                    close;
                }
	                if(#TempoOn >= gettimetick(2)){
                    mes "Você ainda não pode pegar o ponto.";
                    mes "Espere ^FF0000"+((#TempoOn-gettimetick(2))/60)+"^000000 minutos.";
                    close;
                }
	                mes "Parabéns, você acaba de receber seu ponto. Por favor marque presença novamente para iniciar a contagem de um novo ponto!";
                set #pontoscomece, #pontoscomece+1;
                set #comece, 0;
                close;
        
            case 3:
                mes "Você tem ^FF0000"+#pontoscomece+"^000000 pontos!";
                close;
	            case 4:
                if(#pontoscomece < 3){
                    mes "Você só tem ^FF0000"+#pontoscomece+"^000000 pontos, para ganhar os prêmios são necessários ^CC00003 pontos^000000!";
                    close;
                }
	                mes "Parabéns, você acaba de receber seus prêmios! Obrigado pela confiança empregada!";
	                set #permissaocomece, 2;
                set #pontoscomece, 0;
	                if(getgmlevel() < 2){
                    query_sql "UPDATE `login` SET `level`='1',`diasvip`=`diasvip`+10 WHERE `account_id`='"+getcharid(3)+"'";
                }
                getitem 12925, 5; // Ovos Surpresa
                getitem 29006, 1; // Visual
	                close2;
                atcommand "@kick "+strcharinfo(0);
                end;
	            case 5:
                mes "Volte quando quiser ganhar pontos e concorrer no evento!";
                close;
        }
    } else {
        mes "Desculpe mas só foram liberados 50 prêmios, e todos eles já foram usados.";
    }
    close;
	    OnWhisperGlobal:
        if(#comece == 0){
            dispbottom "Você ainda não marcou presença!";
        end;
        }
        dispbottom "Faltam apenas "+((#TempoOn-gettimetick(2))/60)+" minutos.";
    end;
    
    OnPCLogoutEvent:
        if(#comece == 1){
            if(checkvending(strcharinfo(0))){
                set #comece, 0;
                end;
            }
            set #TempoOff, #TempoOn - gettimetick(2);
            end;
        }
    
    OnPCLoginEvent:
        if(#comece == 1){
            set #TempoOn, gettimetick(2) + #TempoOff;
            end;
        }
	}
	

 

I have this script, it works very well, I wanted it to do gepard's ip and Uniqueid verification, and there is another problem that the prize number is not decreasing, I want it to give only 50 awards

	prontera,155,172,3    script    Comece com o pé direito    880,{
	    set .@n$, "[ ^cc0000 Comece com o pé direito ^000000 ]";
    
    mes .@n$;
    mes "Olá, "+strcharinfo(0)+"!";
	    if(##premioscomece < 50){
        set ##premioscomece, 100;
    }
	    if(##premioscomece > 50){
        if(#permissaocomece == 2){
            mes "Infelizmente cada jogador só pode participar uma vez do evento, lamento!";
            close;
        }
        set @restam, ##premioscomece-50;
        mes "Vejo que você é um dos primeiros jogadores...";
        mes "[^FF0000 Ainda restam "+@restam+" prêmios ^000000]";
        mes "O Evento [Comece com o pé direito] foi criado para nossos jogadores, como forma de fidelização, ao qual os 50 primeiros jogadores à marcarem presença, receberão ao completar 3 horas online, um pacote para começarem no servidor!";
        next;
	        switch(select("Me explique:Marcar Presença:Ver Meus Pontos:Receber Prêmio:Sair")){
            mes .@n$;
            if(BaseLevel < 1){
                mes "Desculpe, mas você precisa ter nível de base maior ou igual à 1 para participar.";
                close;
            }
	            case 1:
                mes "É bem simples, as regras são claras, você precisa de ^CC00003 pontos^000000 para ganhar o prêmio, que é [^CC0000 10 dias VIP + 5 Ovos Surpesa e um Visual Esclusivo^000000]. Para ganhar os pontos é fácil, eu irei contar 1 (um) ponto se você permanecer 1 (uma) hora logado em nosso servidor, para ganhar mais pontos, basta vir falar comigo novamente. Quando juntar os 3 pontos, eu troco pelo prêmio.";
                next;
                mes .@n$;
                mes "Lembrando: Não será contado pontos para lojas com comando @at, loja aberta normalmente ou pessoas AFK.";
                mes "Outro detalhe, cada jogador só poderá participar uma vez deste evento.";
                close;
        
            case 2:
                if(#permissaocomece != 2 && #pontoscomece == 0 && #comece != 1){
                    set ##premioscomece, ##premioscomece-1;
                }
	                if(#comece != 1){
                    set #TempoOn, gettimetick(2) + 3600;
                    set #comece, 1;
                    mes "Seu tempo foi marcado!";
                    close;
                }
	                if(#TempoOn >= gettimetick(2)){
                    mes "Você ainda não pode pegar o ponto.";
                    mes "Espere ^FF0000"+((#TempoOn-gettimetick(2))/60)+"^000000 minutos.";
                    close;
                }
	                mes "Parabéns, você acaba de receber seu ponto. Por favor marque presença novamente para iniciar a contagem de um novo ponto!";
                set #pontoscomece, #pontoscomece+1;
                set #comece, 0;
                close;
        
            case 3:
                mes "Você tem ^FF0000"+#pontoscomece+"^000000 pontos!";
                close;
	            case 4:
                if(#pontoscomece < 3){
                    mes "Você só tem ^FF0000"+#pontoscomece+"^000000 pontos, para ganhar os prêmios são necessários ^CC00003 pontos^000000!";
                    close;
                }
	                mes "Parabéns, você acaba de receber seus prêmios! Obrigado pela confiança!";
	                set #permissaocomece, 2;
                set #pontoscomece, 0;
	                if(getgmlevel() < 2){
                    query_sql "UPDATE `login` SET `level`='1',`diasvip`=`diasvip`+10 WHERE `account_id`='"+getcharid(3)+"'";
                }
                getitem 12925, 5; // Ovos Surpresa
                getitem 29006, 1; // Visual
	                close2;
                atcommand "@kick "+strcharinfo(0);
                end;
	            case 5:
                mes "Volte quando quiser ganhar pontos e concorrer no evento!";
                close;
        }
    } else {
        mes "Desculpe mas só foram liberados 50 prêmios, e todos eles já foram usados.";
    }
    close;
	    OnWhisperGlobal:
        if(#comece == 0){
            dispbottom "Você ainda não marcou presença!";
        end;
        }
        dispbottom "Faltam apenas "+((#TempoOn-gettimetick(2))/60)+" minutos.";
    end;
    
    OnPCLogoutEvent:
        if(#comece == 1){
            if(checkvending(strcharinfo(0))){
                set #comece, 0;
                end;
            }
            set #TempoOff, #TempoOn - gettimetick(2);
            end;
        }
    
    OnPCLoginEvent:
        if(#comece == 1){
            set #TempoOn, gettimetick(2) + #TempoOff;
            end;
        }
	}
	
Link to comment
Share on other sites

  • 0

  • Group:  Content Moderator
  • Topic Count:  55
  • Topics Per Day:  0.02
  • Content Count:  1676
  • Reputation:   702
  • Joined:  12/21/14
  • Last Seen:  

2 hours ago, cumbe11 said:

I have this script it works great I wanted to leave it checking the UniqueID and IP

 

 


	prontera,155,172,3    script    Comece com o pé direito    880,{
	    set .@n$, "[ ^cc0000 Comece com o pé direito ^000000 ]";
    
    mes .@n$;
    mes "Olá, "+strcharinfo(0)+"!";
	    if(##premioscomece < 50){
        set ##premioscomece, 100;
    }
	    if(##premioscomece > 50){
        if(#permissaocomece == 2){
            mes "Infelizmente cada jogador só pode participar uma vez do evento, lamento!";
            close;
        }
        set @restam, ##premioscomece-50;
        mes "Vejo que você é um dos primeiros jogadores...";
        mes "[^FF0000 Ainda restam "+@restam+" prêmios ^000000]";
        mes "O Evento [Comece com o pé direito] foi criado para nossos jogadores, como forma de fidelização, ao qual os 50 primeiros jogadores à marcarem presença, receberão ao completar 3 horas online, um pacote para começarem no servidor!";
        next;
	        switch(select("Me explique:Marcar Presença:Ver Meus Pontos:Receber Prêmio:Sair")){
            mes .@n$;
            if(BaseLevel < 1){
                mes "Desculpe, mas você precisa ter nível de base maior ou igual à 1 para participar.";
                close;
            }
	            case 1:
                mes "É bem simples, as regras são claras, você precisa de ^CC00003 pontos^000000 para ganhar o prêmio, que é [^CC0000 10 dias VIP + 5 Ovos Surpesa e um Visual Esclusivo^000000]. Para ganhar os pontos é fácil, eu irei contar 1 (um) ponto se você permanecer 1 (uma) hora logado em nosso servidor, para ganhar mais pontos, basta vir falar comigo novamente. Quando juntar os 3 pontos, eu troco pelo prêmio.";
                next;
                mes .@n$;
                mes "Lembrando: Não será contado pontos para lojas com comando @at, loja aberta normalmente ou pessoas AFK.";
                mes "Outro detalhe, cada jogador só poderá participar uma vez deste evento.";
                close;
        
            case 2:
                if(#permissaocomece != 2 && #pontoscomece == 0 && #comece != 1){
                    set ##premioscomece, ##premioscomece-1;
                }
	                if(#comece != 1){
                    set #TempoOn, gettimetick(2) + 3600;
                    set #comece, 1;
                    mes "Seu tempo foi marcado!";
                    close;
                }
	                if(#TempoOn >= gettimetick(2)){
                    mes "Você ainda não pode pegar o ponto.";
                    mes "Espere ^FF0000"+((#TempoOn-gettimetick(2))/60)+"^000000 minutos.";
                    close;
                }
	                mes "Parabéns, você acaba de receber seu ponto. Por favor marque presença novamente para iniciar a contagem de um novo ponto!";
                set #pontoscomece, #pontoscomece+1;
                set #comece, 0;
                close;
        
            case 3:
                mes "Você tem ^FF0000"+#pontoscomece+"^000000 pontos!";
                close;
	            case 4:
                if(#pontoscomece < 3){
                    mes "Você só tem ^FF0000"+#pontoscomece+"^000000 pontos, para ganhar os prêmios são necessários ^CC00003 pontos^000000!";
                    close;
                }
	                mes "Parabéns, você acaba de receber seus prêmios! Obrigado pela confiança empregada!";
	                set #permissaocomece, 2;
                set #pontoscomece, 0;
	                if(getgmlevel() < 2){
                    query_sql "UPDATE `login` SET `level`='1',`diasvip`=`diasvip`+10 WHERE `account_id`='"+getcharid(3)+"'";
                }
                getitem 12925, 5; // Ovos Surpresa
                getitem 29006, 1; // Visual
	                close2;
                atcommand "@kick "+strcharinfo(0);
                end;
	            case 5:
                mes "Volte quando quiser ganhar pontos e concorrer no evento!";
                close;
        }
    } else {
        mes "Desculpe mas só foram liberados 50 prêmios, e todos eles já foram usados.";
    }
    close;
	    OnWhisperGlobal:
        if(#comece == 0){
            dispbottom "Você ainda não marcou presença!";
        end;
        }
        dispbottom "Faltam apenas "+((#TempoOn-gettimetick(2))/60)+" minutos.";
    end;
    
    OnPCLogoutEvent:
        if(#comece == 1){
            if(checkvending(strcharinfo(0))){
                set #comece, 0;
                end;
            }
            set #TempoOff, #TempoOn - gettimetick(2);
            end;
        }
    
    OnPCLoginEvent:
        if(#comece == 1){
            set #TempoOn, gettimetick(2) + #TempoOff;
            end;
        }
	}
	

 

if you want an easy and fast way , you can use this functions i made a while ago

 

Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  107
  • Topics Per Day:  0.03
  • Content Count:  265
  • Reputation:   11
  • Joined:  01/11/13
  • Last Seen:  

Thanks so much, I don't have much experience in scripting, could you give me an example of how I would apply this to my npc?

 

this script that I made to give free vip was correct?

	-    script    VIP GRATIS    -1,{
OnTouch:
    if(!gepard_int_get("newbie_reward")){ end; }
        gepard_int_set("newbie_reward",true);
        query_sql "UPDATE `login` SET `diasvip` = `diasvip`+'1', `level` = '1' WHERE `account_id` = '"+getcharid(3)+"'";
        dispbottom "Você acaba de ganhar vip grátis.";
    }
end;
}
	

Edited by cumbe11
Link to comment
Share on other sites

  • 0

  • Group:  Content Moderator
  • Topic Count:  55
  • Topics Per Day:  0.02
  • Content Count:  1676
  • Reputation:   702
  • Joined:  12/21/14
  • Last Seen:  

2 hours ago, cumbe11 said:

Thanks so much, I don't have much experience in scripting, could you give me an example of how I would apply this to my NPC?

unfortunately , i can't understand the script above

try this , no need for the functions i linked above

prontera,0,0,0	script	qqqqqq	444,{

	//to prevent spamming sql requests >>>>
	//this will reset on the user login, but no problem with that
	if(!@reward_for_first_50)
		@reward_for_first_50 = true;
	else{
		mes "didn't you talk to me like a moment ago ?";
		end;
	}
	//<<<<<<<<<<<<<<<<<<<<<<<<<<<<

	query_logsql("SELECT `ip`,`unique_id` FROM `reward_for_first_50` ", .@ip$, .@unique_id$);
	for(.@i=0;.@i<getarraysize(.@ip$);.@i++){
		if(getcharip() == .@ip$[.@i])
			.@got = true;
	}
	for(.@i=0;.@i<getarraysize(.@unique_id$);.@i++){
		if(get_unique_id() == .@unique_id$[.@i])
			.@got = true;
	}
	if(!.@got){
		if($REWARDS1 < 50){
			//the rewards here!
			//------------
			getitem 502,1;
			//------------
			query_logsql("INSERT INTO `reward_for_first_50` (`ip`,`unique_id`) VALUES ('" + getcharip() + "','" + get_unique_id() + "')");
			$REWARDS1++;
			mes "you got the reward";
			end;
		}
		mes "you missed the reward";//50 player already got the reward
		end;
	}
	mes "you already got the reward";
end;


OnInit:
	query_logsql("CREATE TABLE IF NOT EXISTS `reward_for_first_50` (`ip` varchar(100) NOT NULL default '',`unique_id` INT( 11 ) UNSIGNED NOT NULL DEFAULT  '0') ENGINE=MyISAM");
end;
}

 

but i would suggest that you remove the npc when you are done with it.

2 hours ago, cumbe11 said:

this script that I made to give free vip was correct?
 


	-    script    VIP GRATIS    -1,{
OnTouch:
    if(!gepard_int_get("newbie_reward")){ end; }
        gepard_int_set("newbie_reward",true);
        query_sql "UPDATE `login` SET `diasvip` = `diasvip`+'1', `level` = '1' WHERE `account_id` = '"+getcharid(3)+"'";
        dispbottom "Você acaba de ganhar vip grátis.";
    }
end;
}
	

 

i am not sure what this npc does

but at least the first 2 lines are like this

-	script	VIP GRATIS	-1,{
OnTouch:
	if(gepard_int_get("newbie_reward")) end;	//the player already have newbie_reward true , so end the script here.
	gepard_int_set("newbie_reward",true);	//the player does not have newbie_reward true , so set it to true and move on with the script.
	query_sql "UPDATE `login` SET `diasvip` = `diasvip`+'1', `level` = '1' WHERE `account_id` = '"+getcharid(3)+"'";
	dispbottom "Você acaba de ganhar vip grátis.";
end;
}

 

Edited by sader1992
Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  107
  • Topics Per Day:  0.03
  • Content Count:  265
  • Reputation:   11
  • Joined:  01/11/13
  • Last Seen:  

Thank you, I don't even know how to thank

Link to comment
Share on other sites

  • 0

  • Group:  Forum Moderator
  • Topic Count:  93
  • Topics Per Day:  0.02
  • Content Count:  10013
  • Reputation:   2345
  • Joined:  10/28/11
  • Last Seen:  

// https://rathena.org/board/topic/121239-prize-for-the-first-50/

/* 
CREATE TABLE IF NOT EXISTS `reward_for_first_50` (
	`id` int(11) unsigned NOT NULL auto_increment,
	`aid` int(11) unsigned NOT NULL default '0',
	`cid` int(11) unsigned NOT NULL default '0',
	`last_ip` varchar(100) NOT NULL default '',
	`last_unique_id` varchar(100) NOT NULL default '',
	`time` datetime NOT NULL,
) ENGINE=MyISAM;
*/

prontera,0,0,0	script	Sample	444,{
	.@aid = getcharid(3);
	.@cid = getcharid(0);
	.@ip$ = getcharip();
	.@unique_id$ = get_unique_id();
	
	query_logsql("SELECT `id`,`time` FROM `reward_for_first_50` WHERE `aid` = "+.@aid+" OR `last_ip` = '"+escape_sql(.@ip$)+"' OR `last_unique_id` = '"+escape_sql(.@unique_id$)+"' LIMIT 1", .@id, .@time$);
	query_logsql("SELECT COUNT(`id`) FROM `reward_for_first_50`", .@size);
	if (.@size >= .max_redeem) {
		mes "you missed the reward, only "+.max_redeem+" players got the reward.";
	}
	else if (.@id) {
		mes "You've already claimed the rewards on "+.@time$+".";
	}
	else {
		query_logsql("INSERT INTO `reward_for_first_50` (`aid`,`cid`,`last_ip`,`last_unique_id`,`time`) VALUES ("+.@aid+","+.@cid+",'"+escape_sql(.@ip$)+"','"+escape_sql(.@unique_id$)+"', NOW())");
		getitem 501,1;
		getitem 502,1;
		getitem 503,1;
		mes "you are the "+(.@size+1)+"/"+.max_redeem+" players who got the reward";
	}
	close;
	
	OnInit:
		.max_redeem = 50;
		end;
}

you can try this, less variables used or to keep track or conflicts with others. and should be compatible to all new/old emulators.

- old emulator may have issue with the limitation of 128 array size, not sure which years it was lifted already.

Edited by Emistry
  • Upvote 1
Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  61
  • Topics Per Day:  0.01
  • Content Count:  108
  • Reputation:   0
  • Joined:  12/26/12
  • Last Seen:  

On 10/13/2019 at 11:46 PM, Emistry said:

// https://rathena.org/board/topic/121239-prize-for-the-first-50/

/* 
CREATE TABLE IF NOT EXISTS `reward_for_first_50` (
	`id` int(11) unsigned NOT NULL auto_increment,
	`aid` int(11) unsigned NOT NULL default '0',
	`cid` int(11) unsigned NOT NULL default '0',
	`last_ip` varchar(100) NOT NULL default '',
	`last_unique_id` varchar(100) NOT NULL default '',
	`time` datetime NOT NULL,
) ENGINE=MyISAM;
*/

prontera,0,0,0	script	Sample	444,{
	.@aid = getcharid(3);
	.@cid = getcharid(0);
	.@ip$ = getcharip();
	.@unique_id$ = get_unique_id();
	
	query_logsql("SELECT `id`,`time` FROM `reward_for_first_50` WHERE `aid` = "+.@aid+" OR `last_ip` = '"+escape_sql(.@ip$)+"' OR `last_unique_id` = '"+escape_sql(.@unique_id$)+"' LIMIT 1", .@id, .@time$);
	query_logsql("SELECT COUNT(`id`) FROM `reward_for_first_50`", .@size);
	if (.@size >= .max_redeem) {
		mes "you missed the reward, only "+.max_redeem+" players got the reward.";
	}
	else if (.@id) {
		mes "You've already claimed the rewards on "+.@time$+".";
	}
	else {
		query_logsql("INSERT INTO `reward_for_first_50` (`aid`,`cid`,`last_ip`,`last_unique_id`,`time`) VALUES ("+.@aid+","+.@cid+",'"+escape_sql(.@ip$)+"','"+escape_sql(.@unique_id$)+"', NOW())");
		getitem 501,1;
		getitem 502,1;
		getitem 503,1;
		mes "you are the "+(.@size+1)+"/"+.max_redeem+" players who got the reward";
	}
	close;
	
	OnInit:
		.max_redeem = 50;
		end;
}

você pode tentar isso, menos variáveis usadas ou para manter o controle ou conflitos com outros. e deve ser compatível com todos os emuladores novos/antigos.

- o antigo emulador pode ter problemas com a limitação do tamanho da matriz de 128, sem ter certeza de quais anos já foi levantado.

@Emistry

I'll take this topic to ask I'm having this error when inserting the sql table (1064)

) ENGINE = MyISAM;

Edited by Geralt
Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  257
  • Topics Per Day:  0.08
  • Content Count:  737
  • Reputation:   18
  • Joined:  11/21/15
  • Last Seen:  

@sader1992

On 10/7/2019 at 9:51 PM, sader1992 said:

mac ?

if you have GePard

this should work


prontera,0,0,0	script	qqqqqq	444,{
	if(inarray($UNIQUEIDLIST_REWARDS1$,get_unique_id()) == -1 && inarray($IPLIST_REWARDS1$,getcharip()) == -1 ){
		if($REWARDS1 < 50){
			//the rewards here!
			//------------
			getitem 502,1;
			//------------
			$UNIQUEIDLIST_REWARDS1$[getarraysize($UNIQUEIDLIST_REWARDS1$)] = get_unique_id();
			$IPLIST_REWARDS1$[getarraysize($IPLIST_REWARDS1$)] = getcharip();
			$REWARDS1++;
			mes "you got the reward";
			end;
		}
		mes "you missed the reward";//50 player already got the reward
		end;
	}
	mes "you already got the reward";
	end;
}

 

what should i set here if they are on the same IP so they both still get the reward?

i think this one gets the unique ID and IP of account to prevent abuse of claiming

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...