Jump to content

Общий мини "HELP ME" топик по скриптингу


Recommended Posts

Цель: Получить кол-во патрон в определенном оружии (Гранатах), далее записать в таблицу в таком виде:

Grenades[source] = int AMMO

Затем получить из таблицы значение AMMO, определенного игрока (thePlayer).

У меня постоянно получает 1 (хотя было 90), как исправить?

Вот мой код: (SERVERSIDE)

local Grenades = {} 
  
function setGrenadesAmmo (thePlayer) --Запись в таблицу 
local thePlayerHeAmmo = tonumber(getPedAmmoInClip ( thePlayer, getSlotFromWeapon ( 16 ))) 
    if thePlayerHeAmmo > 0 then 
        Grenades[thePlayer] = tonumber( thePlayerHeAmmo - 1  ) 
        takeWeapon ( thePlayer, 16 ) 
    end 
end 
  
function getGrenadesAmmo (thePlayer) --Получение значения из таблицы 
local thePlayerHeAmmoGive = tonumber( Grenades[thePlayer] ) 
    giveWeapon ( thePlayer, 16, thePlayerHeAmmoGive, false ) 
    outputChatBox ( "U got "..thePlayerHeAmmoGive.." grenades", thePlayer, 255, 0, 0, true ) 
end 

Link to comment

Суть:Когда игрок наступает на маркер у него меняет дата(setElementData заюзал.Код давать не буду,т.к там всё правильно,ИМХО)

А когда он умирает - сводить его Data на 0.

function test () 
if 
getElementData(source, "tempdata.mission1o4kinaidenu", yes) 
then 
setElementData(source, "tempdata.mission1o4kinaidenu",no) 
  
outputChatBox ( "#FFFFFFМиссия провалена.", source, 255, 0, 0, true ) 
end 
end 
addEventHandler ( "onPlayerWasted", getRootElement(), test ) 

Edited by Guest
Link to comment

Flaker,

local thePlayerHeAmmo = tonumber(getPedAmmoInClip ( thePlayer, getSlotFromWeapon ( 16 ))) 

На вики написано, что в гранатах всего 1 клип. Я думаю, что тебе нужно получить кол-во патронов у оружия.

https://wiki.multitheftauto.com/wiki/Weapon

В данном случае юзай это

getPedTotalAmmo 

Link to comment
Flaker,
local thePlayerHeAmmo = tonumber(getPedAmmoInClip ( thePlayer, getSlotFromWeapon ( 16 ))) 

На вики написано, что в гранатах всего 1 клип. Я думаю, что тебе нужно получить кол-во патронов у оружия.

https://wiki.multitheftauto.com/wiki/Weapon

В данном случае юзай это

getPedTotalAmmo 

Ахх, вот оно что, я был искренне уверен, что проблема в том, что я не знаю как получить значение ключа таблицы)

В очередной раз, Спасибо огромное за помощь)

Link to comment

Подскажите, как определить тип Race мода. (DM, DD, FUN)

Допустим, как сделать проверку в скрипте, на тип запущенного в данный момент Race мода.

Что то типо этого:

if racetype = "DM" then

Link to comment

Итак.

Мой вопрос такой:

У меня в моде действия все на клиенте,и когда ты берешь миссию со своим другом(Например),то создаётся маркер только у того,кто взял эту миссию первый...Как решить проблемку?

Тут не надо выкладывать код.Т.к код неважен.(Скажу только то что Миссия в GUI)

Link to comment

От многих опытных людей слышал, что на клиенте лучше делать все по минимуму, так что твои слова на счет всех действий на клиенте напрягают.

Как ты вообще действия синхронизируешь? Триггеры или что?

Link to comment

Чувак.

Смотри.

Записываешь переменную

потом,когда человек умирает прибавляешь к переменной +1. Потом просто проверяй сколько он убил и др.

К примеру:

[sERVER]

  
[[-----]] 
  
kills  = 0 
  
function uKills (totalAmmo, killer, killerweapon, bodypart, stealth,kills) 
local playerTeam = getPlayerTeam ( killer ) 
    if (killer) and (killer ~= source) and ( kills == 0 ) then 
      kills = 1 
     triggerClientEvent("Music",killer) 
    end 
  end 
addEventHandler ("onPlayerWasted", getRootElement(), killReward) 

CLIENT

  
function Music () 
playSound("Тут путь к папке",false) 
end 
addEvent("Music",true) 
addEventHandler("Music",getRootElement(), Music) 
  

Link to comment
Чувак.

Смотри.

Записываешь переменную

потом,когда человек умирает прибавляешь к переменной +1. Потом просто проверяй сколько он убил и др.

К примеру:

[sERVER]

  
[[-----]] 
  
kills  = 0 
  
function uKills (totalAmmo, killer, killerweapon, bodypart, stealth,kills) 
local playerTeam = getPlayerTeam ( killer ) 
    if (killer) and (killer ~= source) and ( kills == 0 ) then 
      kills = 1 
     triggerClientEvent("Music",killer) 
    end 
  end 
addEventHandler ("onPlayerWasted", getRootElement(), killReward) 

CLIENT

  
function Music () 
playSound("Тут путь к папке",false) 
end 
addEvent("Music",true) 
addEventHandler("Music",getRootElement(), Music) 
  

Несколько ошибок из твоего кода, MacTrekkie.

1) Так как переменная kills создается на серверной стороне, соответственно она едина для всех игроков сервера, а значит, как только она станет 10, то звук воспроизведется у всех игроков сервера...

2) У тебя переменная kill не увеличивается! (9 строка должна быть kills = kills + 1 ), и не должно быть проверки на kills == 0, так как при такой проверке kills увеличится только 1 раз, а все остальные разы kills уже не будет == 0.

3) Зачем вобще получать команду игрока?

4) Небольшая оптимизация:

triggerClientEvent("Music",killer) будет отсылаться всем игрокам сервера, а проигрываться только у killer, в таком случае, зачем отсылать ее всем игрокам? Лучше будет укзать элемент, которому отсылается эвент: triggerClientEvent(killer, "Music", killer)

P.S. Указал на ошибки, только для того, что бы люди потом не копировали неправильный код. Нисколько не хочу задеть тебя этим.

Link to comment
Чувак.

Смотри.

Записываешь переменную

потом,когда человек умирает прибавляешь к переменной +1. Потом просто проверяй сколько он убил и др.

К примеру:

[sERVER]

  
[[-----]] 
  
kills  = 0 
  
function uKills (totalAmmo, killer, killerweapon, bodypart, stealth,kills) 
local playerTeam = getPlayerTeam ( killer ) 
    if (killer) and (killer ~= source) and ( kills == 0 ) then 
      kills = 1 
     triggerClientEvent("Music",killer) 
    end 
  end 
addEventHandler ("onPlayerWasted", getRootElement(), killReward) 

CLIENT

  
function Music () 
playSound("Тут путь к папке",false) 
end 
addEvent("Music",true) 
addEventHandler("Music",getRootElement(), Music) 
  

Несколько ошибок из твоего кода, MacTrekkie.

1) Так как переменная kills создается на серверной стороне, соответственно она едина для всех игроков сервера, а значит, как только она станет 10, то звук воспроизведется у всех игроков сервера...

2) У тебя переменная kill не увеличивается! (9 строка должна быть kills = kills + 1 ), и не должно быть проверки на kills == 0, так как при такой проверке kills увеличится только 1 раз, а все остальные разы kills уже не будет == 0.

3) Зачем вобще получать команду игрока?

4) Небольшая оптимизация:

triggerClientEvent("Music",killer) будет отсылаться всем игрокам сервера, а проигрываться только у killer, в таком случае, зачем отсылать ее всем игрокам? Лучше будет укзать элемент, которому отсылается эвент: triggerClientEvent(killer, "Music", killer)

P.S. Указал на ошибки, только для того, что бы люди потом не копировали неправильный код. Нисколько не хочу задеть тебя этим.

Та да.Спасибо.Я понял сам.Сейчас же Я юзаю setElementData.Вот так вот.

[b]1)[/b] Так как переменная [b]kills[/b] создается на серверной стороне, соответственно она едина для всех игроков сервера, а значит, как только она станет [b]10[/b], то звук воспроизведется у всех игроков сервера... 
[b]2)[/b] У тебя переменная [b]kill[/b] не увеличивается! ([i]9 строка должна быть kills = kills + 1[/i] ), и не должно быть проверки на [b]kills == 0[/b], так как при такой проверке [b]kills[/b] увеличится только [b]1[/b] раз, а все остальные разы [b]kills[/b] уже не будет[b] == 0[/b]. 
3) Зачем вобще получать команду игрока? 

Итак.Это был пример(С Kills == 0 ).Вот .

Link to comment

:|

[[CLIENT]] 
  
kills  = 0 
  
function uKills (totalAmmo, killer, killerweapon, bodypart, stealth,kills) -- Это пример.Проигрывает звук когда  кол-во убийств 2. 
    if (killer) and (killer ~= source)  then 
if( kills == 0 ) then 
      kills = 0 + 1 
  
if( kills == 1 ) then 
kills = 1 + 1 
   local sound = playSound(killer,"sounds/песня/звук.mp3") 
   setSoundVolume(sound, 0.5) 
    end 
  end 
end 
end 
addEventHandler ("onClientPlayerWasted", getRootElement(), uKills) 

Link to comment
kills  = 0 
  
function uKills (totalAmmo, killer, killerweapon, bodypart, stealth,kills) -- Это пример.Проигрывает звук когда  кол-во убийств 2. 
    if (killer) and (killer ~= source)  then 
        kills = kills+1 
        if( kills == 2 ) then 
            local sound = playSound(killer,"sounds/песня/звук.mp3") 
            setSoundVolume(sound, 0.5) 
        end 
    end 
end 
addEventHandler ("onClientPlayerWasted", getRootElement(), uKills) 

Link to comment

Twix, в данном коде переменная kills глобальная, будет ли это влиять на что-то? Возможно при глобальной переменной она будет иметь одно значение для всех игроков, не?

P.S. Это вопрос... Просто я думал, что глобальная переменная видна даже из другого файла, поэтому всегда использовал локальные... Верно не?

Link to comment

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...