Bullyn Posted March 9, 2021 Share Posted March 9, 2021 Alguém sabe como eu posso fazer para um player morrer sem matar o outro na troca de tiro, no script de HS os dois conseguem morrer se os mesmos acertarem tiro um ao outro. eu queria que nessa ocasião apenas um morresse. Link to comment
Administrators Tut Posted March 9, 2021 Administrators Share Posted March 9, 2021 Thread's been moved into the scripting section, as it's not a client/support question. 1 Link to comment
Other Languages Moderators androksi Posted March 9, 2021 Other Languages Moderators Share Posted March 9, 2021 Olá. Se você deseja realmente fazer isso, será necessário criar um sistema de dano/headshot totalmente do zero, sincronizando o cliente (jogador) ao servidor, pois apenas dessa forma seria possível. Eu já fiz algo assim, não é difícil, mas precisa ter certo conhecimento com a linguagem. Client-side: necessário apenas o evento onClientPlayerDamage, e a função dele seria enviar as informações de dano ao servidor, usando triggerServerEvent (pode usar triggerLatentServerEvent também, caso queira deixar ainda mais otimizado). As informações que devem ser enviadas, são: o source do evento (quem levou o dano), a weapon (arma), bodypart (parte do corpo) e o loss (dano dado). Server-side: no evento acionado pelo client-side, aquelas informações enviadas agora estarão presentes lá, no server-side. Uma vez com elas, basta trabalhar com algumas checagens e lógica para remover colete e vida, e também headshot. Para aquele problema não acontecer mais, você deve usar isPedDead no client (pessoa atacando), ou seja, se o jogador que estiver atacando morrer, não executará mais nada a partir disso, nenhum dano será aplicado ao alvo. Spoiler -- Client-side addEventHandler("onClientPlayerDamage", root, function(attacker, weapon, bodypart, loss) cancelEvent() if attacker == localPlayer then triggerServerEvent("onPlayerDamageSync", localPlayer, source, weapon, bodypart, loss) end end) -- Server-side local function doHeadshot(...) end local function doRemoveArmor(...) end local function doRemoveHealth(...) end addEvent("onPlayerDamageSync", true) addEventHandler("onPlayerDamageSync", root, function(target, weapon, bodypart, loss) -- O `client` aqui seria o jogador que está atacando o `target` (alvo) if isPedDead(client) then return outputChatBox(getPlayerName(client) .. " #fffffftentou te atacar estando morto!", target, 255, 255, 255, true) end local targetHealth = getElementHealth(target) local targetArmor = getPedArmor(target) -- Lógica para aplicar o headshot, remover colete e depois vida if bodypart == 9 then return doHeadshot(...) end if targetArmor > 0 then return doRemoveArmor(...) end if targetHealth > 0 then return doRemoveHealth(...) end end) Te dei um exemplo de como seria as coisas por trás, pois acredito que você está começando agora. O resto, você deve fazer. Peça ajuda aqui caso tenha dúvidas. Link to comment
Bullyn Posted March 9, 2021 Author Share Posted March 9, 2021 1 hour ago, andr0xy said: Olá. Se você deseja realmente fazer isso, será necessário criar um sistema de dano/headshot totalmente do zero, sincronizando o cliente (jogador) ao servidor, pois apenas dessa forma seria possível. Eu já fiz algo assim, não é difícil, mas precisa ter certo conhecimento com a linguagem. Client-side: necessário apenas o evento onClientPlayerDamage, e a função dele seria enviar as informações de dano ao servidor, usando triggerServerEvent (pode usar triggerLatentServerEvent também, caso queira deixar ainda mais otimizado). As informações que devem ser enviadas, são: o source do evento (quem levou o dano), a weapon (arma), bodypart (parte do corpo) e o loss (dano dado). Server-side: no evento acionado pelo client-side, aquelas informações enviadas agora estarão presentes lá, no server-side. Uma vez com elas, basta trabalhar com algumas checagens e lógica para remover colete e vida, e também headshot. Para aquele problema não acontecer mais, você deve usar isPedDead no client (pessoa atacando), ou seja, se o jogador que estiver atacando morrer, não executará mais nada a partir disso, nenhum dano será aplicado ao alvo. Reveal hidden contents -- Client-side addEventHandler("onClientPlayerDamage", root, function(attacker, weapon, bodypart, loss) cancelEvent() if attacker == localPlayer then triggerServerEvent("onPlayerDamageSync", localPlayer, source, weapon, bodypart, loss) end end) -- Server-side local function doHeadshot(...) end local function doRemoveArmor(...) end local function doRemoveHealth(...) end addEvent("onPlayerDamageSync", true) addEventHandler("onPlayerDamageSync", root, function(target, weapon, bodypart, loss) -- O `client` aqui seria o jogador que está atacando o `target` (alvo) if isPedDead(client) then return outputChatBox(getPlayerName(client) .. " #fffffftentou te atacar estando morto!", target, 255, 255, 255, true) end local targetHealth = getElementHealth(target) local targetArmor = getPedArmor(target) -- Lógica para aplicar o headshot, remover colete e depois vida if bodypart == 9 then return doHeadshot(...) end if targetArmor > 0 then return doRemoveArmor(...) end if targetHealth > 0 then return doRemoveHealth(...) end end) Te dei um exemplo de como seria as coisas por trás, pois acredito que você está começando agora. O resto, você deve fazer. Peça ajuda aqui caso tenha dúvidas. Eu não tenho muita experiência com LUA, sei o básico. Link to comment
Other Languages Moderators androksi Posted March 9, 2021 Other Languages Moderators Share Posted March 9, 2021 Você pode aprender e tentar. - quaisquer dúvidas, pode mandar aqui mesmo, sobre o seu problema deste tópico. Nós não damos códigos totalmente prontos aos usuários, pois isso não iria incentivá-los a criar seus próprios scripts. Link to comment
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now