Scofield Posted October 7, 2019 Posted October 7, 2019 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 Quote
1 sader1992 Posted October 7, 2019 Posted October 7, 2019 (edited) 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 October 7, 2019 by sader1992 <tab> 2 Quote
0 Mael Posted October 7, 2019 Posted October 7, 2019 3 hours ago, sader1992 said: mac ? I think he meant "unique_id". Quote
0 Scofield Posted October 7, 2019 Author Posted October 7, 2019 Nice I would like to give 4 awards Quote
0 Starfoxcat Posted October 8, 2019 Posted October 8, 2019 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. 1 Quote
0 Scofield Posted October 8, 2019 Author Posted October 8, 2019 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; Quote
0 sader1992 Posted October 11, 2019 Posted October 11, 2019 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 ? Quote
0 Scofield Posted October 11, 2019 Author Posted October 11, 2019 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; } } Quote
0 sader1992 Posted October 13, 2019 Posted October 13, 2019 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 Quote
0 Scofield Posted October 13, 2019 Author Posted October 13, 2019 (edited) 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 October 14, 2019 by cumbe11 Quote
0 sader1992 Posted October 14, 2019 Posted October 14, 2019 (edited) 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 October 14, 2019 by sader1992 Quote
0 Scofield Posted October 14, 2019 Author Posted October 14, 2019 Thank you, I don't even know how to thank Quote
0 Emistry Posted October 14, 2019 Posted October 14, 2019 (edited) // 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 October 14, 2019 by Emistry 1 Quote
0 Geralt Posted April 29, 2020 Posted April 29, 2020 (edited) 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 April 29, 2020 by Geralt Quote
0 AinsLord Posted April 24, 2021 Posted April 24, 2021 @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 Quote
Question
Scofield
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
14 answers to this question
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.