Portal SAMP
[Ajuda] Criar algumas funções de OnPlayerTakeDamage de outra forma - Versão de Impressão

+- Portal SAMP (https://portalsamp.com)
+-- Fórum: SA-MP (https://portalsamp.com/forumdisplay.php?fid=5)
+--- Fórum: Área de suporte (https://portalsamp.com/forumdisplay.php?fid=6)
+--- Tópico: [Ajuda] Criar algumas funções de OnPlayerTakeDamage de outra forma (/showthread.php?tid=704)



Criar algumas funções de OnPlayerTakeDamage de outra forma - robertjwx - 29/01/2021

To fazendo o meu servidor com foco nos jogadores de mobile e os clients mobile não suportam atualmente OnPlayerTakeDamage

Eu consegui fazer todas as coisas que tinham lá de outro jeito menos isso aqui:
Código:
    // modificando danos dos carros
    if(GetPlayerState(issuerid) == PLAYER_STATE_DRIVER) { // dirigindo
        new danocarro;
        new speed = GetVehicleSpeed(GetPlayerVehicleID(issuerid));
        if(speed >= 0 && speed <= 10) { danocarro = 5; }
        else if(speed >= 11 && speed <= 30) { danocarro = 10; }
        else if(speed >= 31 && speed <= 50) { danocarro = 25; }
        else if(speed >= 51 && speed <= 70) { danocarro = 60; }
        else if(speed >= 71 && speed <= 90) { danocarro = 80; }
        else if(speed >= 91 && speed <= 120) { danocarro = 90; }
        else if(speed >= 121 && speed <= 140) { danocarro = 100; }
        else if(speed >= 141 && speed <= 160) { danocarro = 125; }
        else if(speed >= 161 && speed <= 180) { danocarro = 150; }
        else if(speed >= 181 && speed <= 199) { danocarro = 175; }
        else if(speed >= 200) { danocarro = 200; }
        OnPlayerReciveDamage(playerid, issuerid, weaponid, danocarro);
    }
    else if(weaponid == 54) { // danoqueda
        new speed = GetPlayerSpeedGambiarra(playerid);
        new danoqueda = (floatround(amount) + floatround(speed)) / 2;
        // quebrando a perna
        new quebrarRand = rand(1, 100);
        // dano da queda vira porcentagem de chance pra quebrar perna, quanto maior, maior a chance
        if(danoqueda >= quebrarRand) {
            PernaQuebrada[playerid] = true;
        }
        OnPlayerReciveDamage(playerid, issuerid, weaponid, danoqueda);
    }
    else if(weaponid == 51) { // explosão
        new dano;
        dano = floatround(amount);
        dano = dano * 3;
        OnPlayerReciveDamage(playerid, issuerid, weaponid, dano);
    }
    else if(weaponid == 37) { // ta pegando fogo bixo
        new dano;
        dano = 1;
        OnPlayerReciveDamage(playerid, issuerid, weaponid, dano);
    }

4 sistemas
- dano server side de carros (atropeladão)
- dano server side queda (caiu de casa,predio)
- dano server side explosão
- dano server side pegando fogo


Se vocês souberem ao menos como fazer um desses funcionar já seria ótimo
Alguém sabe fazer esses 4 sistemas (ou um deles) de outra forma que não seja com o OnPlayerTakeDamage


RE: Criar algumas funções de OnPlayerTakeDamage de outra forma - xbruno1000x - 29/01/2021

Código:
os clients mobile não suportam atualmente OnPlayerTakeDamage

Não creio que não seja suportado por APK's, acredito que o seu Source do APK é que não tenha. Creio ser possível substituí-la na OnPlayerUpdate, mas não sei se compensa.


RE: Criar algumas funções de OnPlayerTakeDamage de outra forma - robertjwx - 29/01/2021

(29/01/2021 14:07)xbruno1000x Escreveu:
Código:
os clients mobile não suportam atualmente OnPlayerTakeDamage

Não creio que não seja suportado por APK's, acredito que o seu Source do APK é que não tenha. Creio ser possível substituí-la na OnPlayerUpdate, mas não sei se compensa.

Nenhum APK atual da suporte, testei todos que conheço...
Todas essas funções daria pra fazer no update lá?
Como?
Pra mim seria mais jogo, só uso essa função pra isso agora, meu foco é no mobile msm...


RE: Criar algumas funções de OnPlayerTakeDamage de outra forma - xbruno1000x - 29/01/2021

Exemplo:
Código:
new
        Float: vehicleHealth,
        OldVehicleHealth,
        playerVehicleId = GetPlayerVehicleID(playerid);

    OldVehicleHealth = GetVehicleHealth(playerVehicleId, vehicleHealth); // Fica armazenando na váriavel a vida do veículo para comparar posteriormente.

    if(OldVehicleHealth != GetVehicleHealth(playervehicleid, vehiclehealth)) //Verifica se o veículo levou dano
    {
       SetVehicleHealth(playervehicleid, 1000);
    }

Todas as suas funções são possíveis serem adaptadas na OnPlayerUpdate, mas vai dar trabalho. Esse foi só um exemplo de verificar dano em veículos na OnPlayerUpdate. Você pode usar isso para diminuir a vida do player como na OnPlayerTakeDamage.


RE: Criar algumas funções de OnPlayerTakeDamage de outra forma - robertjwx - 31/01/2021

verificar dano em veiculo não é bem assim, não é detectar se um veiculo sofreu dano, é detectar se alguém foi atropelado por um veiculo, me expressei mal eu acho...
ou vc tá dizendo pra ao abaixar a lataria verificar se tem algum player perto e tirar dano dele?

---

msm os outros eu não faço ideia de como fazer
tipo como detectar se tá pegando fogo? se tomou dano de explosão? se caiu de algum lugar?


RE: Criar algumas funções de OnPlayerTakeDamage de outra forma - xbruno1000x - 01/02/2021

(31/01/2021 12:39)robertjwx Escreveu: verificar dano em veiculo não é bem assim, não é detectar se um veiculo sofreu dano, é detectar se alguém foi atropelado por um veiculo, me expressei mal eu acho...
ou vc tá dizendo pra ao abaixar a lataria verificar se tem algum player perto e tirar dano dele?

---

msm os outros eu não faço ideia de como fazer
tipo como detectar se tá pegando fogo? se tomou dano de explosão? se caiu de algum lugar?

O que eu quis fazer, foi apenas exemplificar. Nesse caso em que eu fiz, caso a lataria abaixe, você poderá tentar detectar se o player atropelou, se ele bateu o carro em uma parede e dar dano no mesmo, recolocar a lataria do veículo, etc. Minha intenção foi apenas demonstrar a possibilidade de detecção. Detectar se algum player caiu, basta verificar a variável de altura do GetPlayerPos(Acho que X é a Latitude, Y Longitude e Z Altura). Aí você define que se o Z diminuir um valor X, será uma queda de grande altura.

Outra hipótese é você usar a OnPlayerGiveDamage, se o playerid jogar um coquetel molotov no damagedid, você saberá que é dano de fogo. Existem muitas hipóteses de fazer as detecções que você deseja, mas é um processo chato e que provavelmente não terá códigos de ajuda na internet, afinal de contas a maioria utiliza a public própria para isso.


RE: Criar algumas funções de OnPlayerTakeDamage de outra forma - robertjwx - 02/02/2021

(01/02/2021 00:07)xbruno1000x Escreveu:
(31/01/2021 12:39)robertjwx Escreveu: verificar dano em veiculo não é bem assim, não é detectar se um veiculo sofreu dano, é detectar se alguém foi atropelado por um veiculo, me expressei mal eu acho...
ou vc tá dizendo pra ao abaixar a lataria verificar se tem algum player perto e tirar dano dele?

---

msm os outros eu não faço ideia de como fazer
tipo como detectar se tá pegando fogo? se tomou dano de explosão? se caiu de algum lugar?

O que eu quis fazer, foi apenas exemplificar. Nesse caso em que eu fiz, caso a lataria abaixe, você poderá tentar detectar se o player atropelou, se ele bateu o carro em uma parede e dar dano no mesmo, recolocar a lataria do veículo, etc. Minha intenção foi apenas demonstrar a possibilidade de detecção. Detectar se algum player caiu, basta verificar a variável de altura do GetPlayerPos(Acho que X é a Latitude, Y Longitude e Z Altura). Aí você define que se o Z diminuir um valor X, será uma queda de grande altura.

Outra hipótese é você usar a OnPlayerGiveDamage, se o playerid jogar um coquetel molotov no damagedid, você saberá que é dano de fogo. Existem muitas hipóteses de fazer as detecções que você deseja, mas é um processo chato e que provavelmente não terá códigos de ajuda na internet, afinal de contas a maioria utiliza a public própria para isso.

Será que vale a pena eu esperar as APKs suportarem essa função?
Vc acha que elas irão suportar?


RE: Criar algumas funções de OnPlayerTakeDamage de outra forma - xbruno1000x - 02/02/2021

(02/02/2021 00:59)robertjwx Escreveu:
(01/02/2021 00:07)xbruno1000x Escreveu:
(31/01/2021 12:39)robertjwx Escreveu: verificar dano em veiculo não é bem assim, não é detectar se um veiculo sofreu dano, é detectar se alguém foi atropelado por um veiculo, me expressei mal eu acho...
ou vc tá dizendo pra ao abaixar a lataria verificar se tem algum player perto e tirar dano dele?

---

msm os outros eu não faço ideia de como fazer
tipo como detectar se tá pegando fogo? se tomou dano de explosão? se caiu de algum lugar?

O que eu quis fazer, foi apenas exemplificar. Nesse caso em que eu fiz, caso a lataria abaixe, você poderá tentar detectar se o player atropelou, se ele bateu o carro em uma parede e dar dano no mesmo, recolocar a lataria do veículo, etc. Minha intenção foi apenas demonstrar a possibilidade de detecção. Detectar se algum player caiu, basta verificar a variável de altura do GetPlayerPos(Acho que X é a Latitude, Y Longitude e Z Altura). Aí você define que se o Z diminuir um valor X, será uma queda de grande altura.

Outra hipótese é você usar a OnPlayerGiveDamage, se o playerid jogar um coquetel molotov no damagedid, você saberá que é dano de fogo. Existem muitas hipóteses de fazer as detecções que você deseja, mas é um processo chato e que provavelmente não terá códigos de ajuda na internet, afinal de contas a maioria utiliza a public própria para isso.

Será que vale a pena eu esperar as APKs suportarem essa função?
Vc acha que elas irão suportar?

Manda uma mensagem privada pro ChainkSain e tire essa dúvida com ele. Creio que ele saberá te informar melhor a respeito dessa função nos APK's.