Jump to content
  • 0
Sign in to follow this  
Yashiro

Ajudinha

Question

bom estou usando esse npc Radio e funciona perfeitamente, só que queria que quando alguém colocasse uma musica ele só deixasse outra pessoa pedir outra musica pro mesmo mapa apos 2min 

quem poder ajudar agradeço 

prontera,138,172,5    script    Hercules Radio::radio    4_F_05,{

    OnRequest:
        // Check voucher amount
        if (countitem(.voucher) < .amount) {
            message strcharinfo(0), "You must have "+ .amount +" "+ getitemname(.voucher) +" to play a song.";
            end;
        }
        
        // Create menu
        for (.@i = 0; .@i < getarraysize(.song$); .@i++) {
            .@choice$ += "'"+ .song$[.@i] +"' by "+ .artist$[.@i] +":";
        }
        
        // Display menu
        message strcharinfo(0), "Please select a song to play (cost: "+ .amount +" "+ getitemname(.voucher) +").";
        .@option = select(.@choice$) - 1;
        
        // Check lock time
        if (.lock > gettimetick(2)) {
            // Calculate time left
            .@minutes_left = (.lock - gettimetick(2)) / 60;
            .@seconds_left = (.lock - gettimetick(2)) % 60;
            
            // Display time left
            message strcharinfo(0), strnpcinfo(1) +" is not accepting requests at this time.";
            if (.@minutes_left < 1) {
                message strcharinfo(0), "Please try again in "+ .@seconds_left +" seconds.";
            } else {
                message strcharinfo(0), "Please try again in "+ .@minutes_left +" minute"+ (.@minutes_left > 1 ? "s" : "") +" and "+ .@seconds_left +" seconds.";
            }

            close;
        }
        
        // Delete required vouchers
        delitem .voucher, .amount;
        
        // Play and announce choice on the player's current map
        playbgmall .file$[.@option], strcharinfo(3);
        announce strnpcinfo(1) +": Now playing '"+ .song$[.@option] +"' by "+ .artist$[.@option] +".", bc_map;
        
        // Lock NPC for preset amount
        .lock = .minutes * 60;
        .lock += gettimetick(2);
        close;
        
        
    OnInit:
        // Configuration
        .voucher =607;    // Voucher item ID
        .amount    = 5;            // Usage cost, in vouchers
        .minutes = 2;            // Lock time, in minutes
        
        // Create @radio command
        bindatcmd "radio", strnpcinfo(3) +"::OnRequest", 0, 40;
        
        // Songs
        // The song names for each track
        setarray .song$[0],        "Hunter X Hunter",
                                "Chicksilog",
                                "Bahay Kubo",
                                "Magkabilang Mundo",
                                "Iisa lang",
                                "I Love You Girl";
                                
        // Artists
        // The artist name for each track
        setarray .artist$[0],    "Ohayou",
                                "Kamikazee",
                                "Hale",
                                "Jireh Lim",
                                "Parokya Ni Edgar",
                                "Ekulo";
                                
        // Files
        // The file name for each track (no extension)
        setarray .file$[0],    "170",
                            "150",
                            "151",
                            "152",
                            "153",
                            "154";
        
        // Waitingroom display
        // Configured to show the NPC's display name
        waitingroom strnpcinfo(1), 0;
    
    end;
        
}

Share this post


Link to post
Share on other sites

6 answers to this question

Recommended Posts

  • 2
Posted (edited)

Beleza, me fizeram ligar meu emulador para ver isto, tenho muita preguiça de subir o banco e rodar o run-server. Testei colocando Pabllo Vittar para tocar em Prontera, segue a solução testada:

prontera,138,172,5	script	Hercules Radio::radio	4_F_05,{

    OnRequest:
        // Check voucher amount
        if (countitem(.voucher) < .amount) {
            message strcharinfo(0), "You must have "+ .amount +" "+ getitemname(.voucher) +" to play a song.";
            end;
        }
        
        // Create menu
        for (.@i = 0; .@i < getarraysize(.song$); .@i++) {
            .@choice$ += "'"+ .song$[.@i] +"' by "+ .artist$[.@i] +":";
        }
        
        // Display menu
        message strcharinfo(0), "Please select a song to play (cost: "+ .amount +" "+ getitemname(.voucher) +").";
        .@option = select(.@choice$) - 1;
        
        // Check lock time
        if (.lock > gettimetick(2)) {
            // Calculate time left
            .@minutes_left = (.lock - gettimetick(2)) / 60;
            .@seconds_left = (.lock - gettimetick(2)) % 60;
            
            // Display time left
            message strcharinfo(0), strnpcinfo(1) +" is not accepting requests at this time.";
            if (.@minutes_left < 1) {
                message strcharinfo(0), "Please try again in "+ .@seconds_left +" seconds.";
            } else {
                message strcharinfo(0), "Please try again in "+ .@minutes_left +" minute"+ (.@minutes_left > 1 ? "s" : "") +" and "+ .@seconds_left +" seconds.";
            }

            close;
        }
        
        // Delete required vouchers
        delitem .voucher, .amount;
        
        // Play and announce choice on the player's current map
        set .bgm$, .file$[.@option]; 
        set .map$, strcharinfo(3);
        announce strnpcinfo(1) +": Now playing '"+ .song$[.@option] +"' by "+ .artist$[.@option] +".", bc_map;
        
        // Lock NPC for preset amount
        .lock = .minutes * 60;
        .lock += gettimetick(2);
        close;
        
        
    OnInit:
        // Configuration
        .voucher =607;    // Voucher item ID
        .amount    = 5;            // Usage cost, in vouchers
        .minutes = 2;            // Lock time, in minutes
        
        // Create @radio command
        bindatcmd "radio", strnpcinfo(3) +"::OnRequest", 0, 40;
        
        // Songs
        // The song names for each track
        setarray .song$[0],        "Hunter X Hunter",
                                "Chicksilog",
                                "Bahay Kubo",
                                "Magkabilang Mundo",
                                "Iisa lang",
                                "I Love You Girl";
                                
        // Artists
        // The artist name for each track
        setarray .artist$[0],    "Ohayou",
                                "Kamikazee",
                                "Hale",
                                "Jireh Lim",
                                "Parokya Ni Edgar",
                                "Ekulo";
                                
        // Files
        // The file name for each track (no extension)
        setarray .file$[0],    "170",
                            "150",
                            "151",
                            "152",
                            "153",
                            "154";
        
        // Waitingroom display
        // Configured to show the NPC's display name
        waitingroom strnpcinfo(1), 0;
		
		// Mantendo a música tocando permanentemente no mapa. [Fou-lu]
        set .bgm$, "";
        set .map$, "";
        while(1) {
                if (.bgm$ != "")
                        playbgmall .bgm$, .map$;
                sleep 1000;
        }
    
    end;
        
}

 

O erro foi o "while(1=1)" que deveria ser "while(1)", e também percebi ao copiar e colar alguns códigos daqui do post eles aparecem com alguns caracteres extras de "?", não sei pq.

E como previsto por mim, o tempo de bloqueio para a troca de musica está funcionando, o que faz o objetivo principal do tópico não ter sentido.

Edited by Fou lu Yorae Dragon
  • Like 1

Share this post


Link to post
Share on other sites
  • 0

Analisando o script ele já deveria não permitir que outra musica seja escolhida em menos de 2 minutos devido a estes trechos:

Citar

OnInit:
        // Configuration
        .voucher =607;    // Voucher item ID
        .amount    = 5;            // Usage cost, in vouchers
        .minutes = 2;            // Lock time, in minutes

Citar

 // Check lock time
        if (.lock > gettimetick(2)) {
            // Calculate time left
            .@minutes_left = (.lock - gettimetick(2)) / 60;
            .@seconds_left = (.lock - gettimetick(2)) % 60;
            
            // Display time left
            message strcharinfo(0), strnpcinfo(1) +" is not accepting requests at this time.";
            if (.@minutes_left < 1) {
                message strcharinfo(0), "Please try again in "+ .@seconds_left +" seconds.";
            } else {
                message strcharinfo(0), "Please try again in "+ .@minutes_left +" minute"+ (.@minutes_left > 1 ? "s" : "") +" and "+ .@seconds_left +" seconds.";
            }

            close;
        }

Citar

// Lock NPC for preset amount
        .lock = .minutes * 60;
        .lock += gettimetick(2);

        close;

 

Eu tenho uma observação a ser feita sobre o comando "playbgmall" que é utilizado para tocar as musicas nos mapas. Ele não é permanente e nem sincronizado, e o que isto quer dizer? O fato de não ser permanente quer dizer que após o comando ser executado ele tocará a bgm (musica) somente para os jogadores presentes no mapa naquele momento, caso algum outro jogador entre no mapa posteriormente ele não escutará a bgm (musica). E a sincronização é devido ao fato de você colocar o comando para tocar a mesma bgm novamente para os jogadores no mapa, onde os jogadores que ainda estiverem ouvindo a mesma bgm não terão o som de sua bgm resetada para o inicio, enquanto os que não estão com a bgm tocando irão ouvi-la do inicio.

Sabendo disto digamos que teu mapa seja uma boate ao qual os jogadores possuem hora certa para entrar e após passar está hora ninguém mais possa entrar, você não terá os dois problemas citados aqui. Agora digamos que o mapa fica livre para os jogadores entrarem quando quiserem, você terá os dois problemas aqui apresentados. Eu possuo uma solução para o problema de não ser permanente, porem para a sincronização não tenho solução.

Segue minha solução abaixo:

Alterar está parte:

// Play and announce choice on the player's current map
        playbgmall .file$[.@option], strcharinfo(3);
        announce strnpcinfo(1) +": Now playing '"+ .song$[.@option] +"' by "+ .artist$[.@option] +".", bc_map;

Para:

// Play and announce choice on the player's current map
        set .bgm$, .file$[.@option]; 
        set .map$, strcharinfo(3);
        announce strnpcinfo(1) +": Now playing '"+ .song$[.@option] +"' by "+ .artist$[.@option] +".", bc_map;

E está parte:

// Waitingroom display
        // Configured to show the NPC's display name
        waitingroom strnpcinfo(1), 0;
    
    end;

Para:

// Waitingroom display
        // Configured to show the NPC's display name
        waitingroom strnpcinfo(1), 0;
    
        // Mantendo a música tocando permanentemente no mapa. [Fou-lu]
        set .bgm$, "";
        set .map$, "";
        while(1=1) {
                if (.bgm$ != "")
                        playbgmall .bgm$, .map$;
                sleep 1000;
        }

    end;

 

Share this post


Link to post
Share on other sites
  • 0
5 horas atrás, Fou lu Yorae Dragon disse:

 


// Waitingroom display
        // Configured to show the NPC's display name
        waitingroom strnpcinfo(1), 0;
    
        // Mantendo a música tocando permanentemente no mapa. [Fou-lu]
        set .bgm$, "";
        set .map$, "";
        while(1=1) {
                if (.bgm$ != "")
                        playbgmall .bgm$, .map$;
                sleep 1000;
        }

    end;

 

Essas alterações utilizando o Cronus deu erro no servidor, seria bom o @Yashiro testar no emulador dele.

Share this post


Link to post
Share on other sites
  • 0
Posted (edited)

cara valeu mesmo so uma pergunta com essas edições que vc fez a musica que o npc colocar vai ficar pra sempre no mapa?

@Fou lu Yorae Dragon

Edited by Yashiro

Share this post


Link to post
Share on other sites
  • 0
Em 02/05/2019 at 16:50, Yashiro disse:

se alguem poder dar uma luz aqui agradeço

não de mais 'up' nem responda duplamente por gentileza.

Share this post


Link to post
Share on other sites
  • 0
Em 02/05/2019 at 16:50, Yashiro disse:

cara valeu mesmo so uma pergunta com essas edições que vc fez a musica que o npc colocar vai ficar pra sempre no mapa?

@Fou lu Yorae Dragon

Sim, se o jogador sair e voltar ao mapa ela continuará tocando. Para outros jogadores que entrarem no mapa também vão ouvi-la.

Share this post


Link to post
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.

Sign in to follow this  

Seja bem vindo ao Cronus-Emulator.
É sempre um prazer te-lo conosco.
Você pode visualizar nossas áreas de suporte para encontrar suas soluções sem a necessidade de se registrar!
Registrando em nossa comunidade, você poderá conhecer mais sobre nosso projeto, criar tópicos, responder tópicos existentes, baixar milhares de recursos em nosso sistema de downloads, participar de nossa comunidade, customizar seu perfil e muito mais... Se você já possui uma conta, faça seu login - ou crie uma conta. Também temos integração com Google+ e Facebook.

×
×
  • Create New...