SA-MP Forums Archive
[Ajuda] Bug Remover arma - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Português/Portuguese (https://sampforum.blast.hk/forumdisplay.php?fid=34)
+---- Thread: [Ajuda] Bug Remover arma (/showthread.php?tid=610232)



Bug Remover arma - LosLipe - 21.06.2016

fiz essa funзгo abaixo, que remove determinada arma do player caso ele nгo tenha nivel suficiente para obtк-lб. Sу que nгo estб funcionando.. jб tentei varias coisas e nada. (acho que й acho no verificador do looping).

PHP код:
if(PlayerInfo[playerid][Level] == 2)
        {
            for(new 
weapon2=23weapon2<34weapon2++)
            {
                if(
GetPlayerWeapon(playerid) == weapon2)
                {
                    
SetPlayerArmedWeapon(playerid0);
                    
GivePlayerWeapon(playeridweapon20);
                }
            }
        } 



Re: Bug Remover arma - Whoo - 21.06.2016

PHP код:
if(PlayerInfo[playerid][Level] == 2)
{
    new 
WeaponID GetPlayerWeaponplayerid );
    switch( 
WeaponID )
    {
        case 
1234567..24// aqui vocк coloca os ids das armas...
        
{
            
SetPlayerArmedWeapon(playerid0);
            
GivePlayerWeapon(playeridweapon20);
            
//ResetPlayerWeapons(playerid);
        
}
    }




Re: Bug Remover arma - Bruno13 - 21.06.2016

Para remover a arma й incorreto vocк dar a arma com muniзгo 0, isso nгo vai removк-la do player...use essa funзгo que criei um tempo atrбs!

Uso:
RemovePlayerWeapon(playerid, ID_DA_ARMA_A_SER_REMOVIDA);
PHP код:
RemovePlayerWeapon(playeridweaponid)
{
    new 
weaponData[13][2], i;
    for(
013i++)
    {
        
GetPlayerWeaponData(playeridiweaponData[i][0], weaponData[i][1]);
    }
    
ResetPlayerWeapons(playerid);
    for(
013i++)
    {
        if(
weaponData[i][0] != && weaponData[i][0] != weaponid)
        {
            
GivePlayerWeapon(playeridweaponData[i][0], weaponData[i][1]);
        }
    }




Re: Bug Remover arma - zSuYaNw - 21.06.2016

Quote:
Originally Posted by Bruno13
Посмотреть сообщение
Para remover a arma й incorreto vocк dar a arma com muniзгo 0, isso nгo vai removк-la do player...use essa funзгo que criei um tempo atrбs!

Uso:
RemovePlayerWeapon(playerid, ID_DA_ARMA_A_SER_REMOVIDA);
PHP код:
RemovePlayerWeapon(playeridweaponid)
{
    new 
weaponData[13][2], i;
    for(
013i++)
    {
        
GetPlayerWeaponData(playeridiweaponData[i][0], weaponData[i][1]);
    }
    
ResetPlayerWeapons(playerid);
    for(
013i++)
    {
        if(
weaponData[i][0] != && weaponData[i][0] != weaponid)
        {
            
GivePlayerWeapon(playeridweaponData[i][0], weaponData[i][1]);
        }
    }

Creio que uma nova funзгo nгo seria necessбrio. O correto й aprender a utilizar a funзгo GetPlayerWeaponData:

A funзгo GetPlayerWeaponData pega a arma e a quantidade de balas de acordo com o slot do jogador, Atualmente temos disponнveis 13 slots e no exemplo abaixo irei mostrar um pequeno exemplo:
PHP код:
new weapons[13][2];
 
for (new 
0<= 12i++)
{
    
GetPlayerWeaponData(playeridiweapons[i][0], weapons[i][1]);

Este cуdigo pega todas as armas e as balas de cada armas e armazena na variбvel "weapons". Depois que este loop й executado, ele salvarб todas as armas e balas na variбvel weapons. agora nossa variбvel "weapons" contйm as armas e as balas de cada jogador!



Como temos as armas e as balas, й sу remover todas as armas do jogador utilizando a funзгo ResetPlayerWeapons.
PHP код:
ResetPlayerWeapons(playerid); 
Agora o jogador nгo contem nenhuma arma! Vamos dar as armas para o jogador com a funзгo GivePlayerWeapons:
PHP код:
for(new i!= 13; ++i){
    
GivePlayerWeapon(playeridweapons[i][0], weapons[i][1]);

Este cуdigo, apenas devolve as armas que o jogador estava, para vocк remover alguma arma ou a quantidade de balas й sу adicionar uma condicional(vocк pode as armas clicando aqui).
PHP код:
for(new i!= 13; ++i){
    if(
weapon[i][0] == WEAPON_MINIGUN){
        
GivePlayerWeapon(playeridweapons[i][0], weapons[i][1]);
    }

Neste cуdigo ele devolve apenas a arma minigun para o jogador.



Referкncias:
https://sampwiki.blast.hk/wiki/GetPlayerWeaponData
https://sampwiki.blast.hk/wiki/GivePlayerWeapon
https://sampwiki.blast.hk/wiki/Weapons


Re: Bug Remover arma - LosLipe - 21.06.2016

eu sу queria entender uma coisa (referente ao code abaixo que vocк postou). O porque o "i" й "!=" de "13" e se tem algo haver o "i++" do "++i".

Quote:

for(new i; i != 13; ++i){

if(weapon[i][0] == WEAPON_MINIGUN){

GivePlayerWeapon(playerid, weapons[i][0], weapons[i][1]);
}
}




Re: Bug Remover arma - zSuYaNw - 21.06.2016

Quote:
Originally Posted by LosLipe
Посмотреть сообщение
eu sу queria entender uma coisa (referente ao code abaixo que vocк postou). O porque o "i" й "!=" de "13" e se tem algo haver o "i++" do "++i".
Й apenas um loop qualquer com uma pequena otimizaзгo, sendo que ++i e i++ й a mesma coisa.
PHP код:
for(new i!= 13; ++i){ 
Tutorais:
- https://sampforum.blast.hk/showthread.php?tid=195529
- https://sampforum.blast.hk/showthread.php?tid=290735


Re: Bug Remover arma - LosLipe - 22.06.2016

Ata, entendi, sу que houve alguma coisa que agr fica tirando a arma do player e devolvendo.. (cada segundo)


Re: Bug Remover arma - F1N4L - 22.06.2016

GetPlayerWeaponData = Pega as armas do player
ResetPlayerWeapons = Remove as armas do player
GivePlayerWeapon = Dб armas para o player

Olha a ordem em que se encontram em seu script...


Re: Bug Remover arma - LosLipe - 22.06.2016

Tб nessa ordem..
й porque tб no onplayerupdate, e a cada segundo й atualizado, ai ele salva a arma do player (GetPlayerWeaponData) reseta ela (ResetPlayerWeapons) e devolve (GivePlayerWeapon), ai ele tira a arma do playe e devolve e isso a cada segundo.


Re: Bug Remover arma - Bruno13 - 04.07.2016

Quote:
Originally Posted by zSuYaNw
Посмотреть сообщение
Creio que uma nova funзгo nгo seria necessбrio. O correto й aprender a utilizar a funзгo GetPlayerWeaponData:

A funзгo GetPlayerWeaponData pega a arma e a quantidade de balas de acordo com o slot do jogador, Atualmente temos disponнveis 13 slots e no exemplo abaixo irei mostrar um pequeno exemplo:

...
Agradeзo teres explicado ao usuбrio como cada funзгo trabalha. Todavia meu intuito era trazer ao mesmo o que a funзгo promete, remover uma arma desejada, e nгo identificar se o player estб com uma Minigun, que no caso pela sua explicaзгo o usuбrio em questгo jб poderб estar aplicando essa lуgica, validando se o player estб com a arma em questгo, e entгo aplicar a funзгo que apresentei.

Quote:
Originally Posted by LosLipe
Посмотреть сообщение
Tб nessa ordem..
й porque tб no onplayerupdate, e a cada segundo й atualizado, ai ele salva a arma do player (GetPlayerWeaponData) reseta ela (ResetPlayerWeapons) e devolve (GivePlayerWeapon), ai ele tira a arma do playe e devolve e isso a cada segundo.
Afirmo oq os usuбrios disseram, й tiro no pй utilizar OnPlayerUpdate para aplicaзхes do tipo...correto seria como disse F1N4L, ou entгo alguma das opзхes que colocarei abaixo. Porйm, utilize de forma consciente, nгo use a funзгo diretamente antes de fazer uma validaзгo.


Vou lhe apresentar 3 soluзхes para o problema:
- Utilizar um timer. Nesse timer vocк pode aplicar dois tipos de validaзхes com intervalos diferentes:
> Identificar se o player estб com uma Minigun em mгos, fazendo o uso da funзгo GetPlayerWeapon. Nesse caso, quanto menor for o intervalo do timer(a partir de 4 seg) maior serб a chance de nгo houver falhas como o player conseguir pegar, atirar e guardar a arma enquanto o timer nгo coincidiu com o momento.

> Utilizar da funзгo GetPlayerWeaponData, pegando a arma que estiver no slot da Minigun, que no caso й o 7, como podes ver nessa tabela, e validar se a arma do slot й o ID da Minigun, e caso for vбlido utilizar da funзгo que disponibilizei para remover a arma. Caso aplique isso, o timer pode contar com um intervalo maior, pois identificarб mesmo com a arma guardada ou em mгos...algo como > 15 seg jб estaria suficiente.
- Utilizar a funзгo OnPlayerWeaponSlotChange ou OnPlayerCurrentWeaponChange(faz uso da callback OnPlayerUpdate!!) onde identifica quando uma arma й trocada pelo player(em mгos ou no slot), logo, bastaria identificar se o ID da mesma й o da Minigun, e entгo fazer o uso da funзгo que lhe passei para remover a arma.
As duas funзхes que citei acima sгo da include iBranch.inc do ipsLeon, encontre elas aqui.