[Ajuda] Bug Remover arma
#1

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);
                }
            }
        } 
Reply
#2

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);
        
}
    }

Reply
#3

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]);
        }
    }

Reply
#4

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
Reply
#5

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]);
}
}

Reply
#6

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
Reply
#7

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

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...
Reply
#9

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.
Reply
#10

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.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)