Jump to content

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


Recommended Posts

~Gangsta~ попробуй dimension's ( https://wiki.multitheftauto.com/wiki/Ge ... tDimension )

Привет всем, делаю небольшую afk системку для race, подскажите как можно запустить timer (afktimerCheck) после countdown. Пока сделал, чтобы после запуска карты через 15 сек запускался, но это не вариант.

local afkTimeWarning = 10000 
local afkTimeBlow = 20000 
  
function checkAFKPlayers() 
    for index, thePlayer in ipairs(getElementsByType("player"))do 
          if (getElementData(thePlayer, "state") == "alive") then 
               if (getPlayerIdleTime(thePlayer) > afkTimeWarning-1000) and (getPlayerIdleTime(thePlayer) < afkTimeBlow-1000)then 
                    triggerClientEvent ( "warning", thePlayer) 
                 
               end 
               if (getPlayerIdleTime(thePlayer) > afkTimeBlow-1000) then 
                    setElementHealth(thePlayer, 0) 
                    local afkCount = getElementData (thePlayer, "afk") or 0 
                             if (afkCount == 4) then 
                                  kickPlayer ( thePlayer, "You were kicked by AFK System [5/5]" ) 
                             else  
                                  setElementData(thePlayer, "afk", afkCount+1) 
                             end 
                    triggerClientEvent ( "blow", thePlayer) 
              end 
          end 
    end 
end 
afktimerCheck = setTimer(checkAFKPlayers, afkTimeWarning, 0) 
  
addEvent("onMapStarting") 
addEventHandler("onMapStarting", getRootElement(),  
function () 
      if isTimer ( afktimerCheck ) then killTimer ( afktimerCheck ) end 
      setTimer(function() afktimerCheck = setTimer(checkAFKPlayers, afkTimeWarning, 0) end, 
      15000, 1) 
end) 

Link to comment
делаю небольшую afk системку для race, подскажите как можно запустить timer (afktimerCheck) после countdown

Race имеет несколько полезных событий в своем наборе (почитайте документацию к ресурсу, там много полезной информации). Обратите внимание на onRaceStateChanging.

Link to comment

Помогите настроить правельно

local nonOpenables = { --this is easier 
    [290]=true,  
    [291]=true,  
    [292]=true 
} 
  
addEvent "onPlayerHeadshot" 
  
addEventHandler("onPlayerDamage", getRootElement(), 
    function (attacker, weapon, bodypart, loss, hitPlayer,thePlayer) 
        local skin = getElementModel (thePlayer) 
        if bodypart == 9 then 
        if nonOpenables[skin] then 
            local result = triggerEvent("onPlayerHeadshot", source, attacker, weapon, loss) 
            if result == true then 
                killPed(source, attacker, weapon, bodypart) 
            end 
        end 
    end 
end 
) 

Link to comment

Атрибут "download" для файлов в версии 1.4 можно выставить, если вы хотите самостоятельно (то бишь, вручную), загрузить их с помощью функции downloadFile в любое момент времени, а не при заходе на сервер. А вот полностью исключить кэширование файлов на клиенте, похоже, не выйдет.

Link to comment

нет, для чего удалять файлы? их просто нужно прогрузить после конекта в определенное время. но меня огорчает что я ничего найти не могу и придумать как существенно повлиять на закачку.

Link to comment
нет, для чего удалять файлы? их просто нужно прогрузить после конекта в определенное время. но меня огорчает что я ничего найти не могу и придумать как существенно повлиять на закачку.

А, вот как. Ну в таком случае либо ждете 1.4, либо можно порыться на комьюнити (или форуме) и найти что-нибудь подобное.

Link to comment

Помогите мне, у меня не работает:

local nonOpenables = { --this is easier 
    [290]=true,  
    [291]=true,  
    [292]=true 
} 
  
addEvent "onPlayerHeadshot" 
  
addEventHandler("onPlayerDamage", getRootElement(), 
    function (attacker, weapon, bodypart, loss, hitPlayer,thePlayer) 
        local skin = getElementModel (thePlayer) 
        if bodypart == 9 then 
        if nonOpenables[skin] then 
            local result = triggerEvent("onPlayerHeadshot", source, attacker, weapon, loss) 
            if result == true then 
                killPed(source, attacker, weapon, bodypart) 
            end 
        end 
    end 
end 
) 

Link to comment

DakiLLa, спасибо гляну вроде бы то что надо))

Korish0074 , 7 строка во первых не закрыта и не аргументирована вторым аргументом, во вторых к чему вы вешаете этот обработчик? кода к нему не вижу тут. почитайте https://wiki.multitheftauto.com/wiki/AddEvent

addEvent( "onPlayerHeadshot",true) 

p.s. зачем постить вопрос несколько раз?)) все и так все увидят и помогут по мере возможности

Link to comment

Korish0074, событие "onPlayerDamage" передает в функцию лишь 4 первых параметра, а у вас откуда-то там взялись еще hitPlayer и thePlayer. Объясните, что вы хотите сделать? Может проще по другому написать код.

Link to comment
Korish0074, событие "onPlayerDamage" передает в функцию лишь 4 первых параметра, а у вас откуда-то там взялись еще hitPlayer и thePlayer. Объясните, что вы хотите сделать? Может проще по другому написать код.

Я хочу создать обычный headshot но чтоб он работал только у тех у кого есть указаные скины в скрипте

Link to comment

Korish0074, попробуйте вот так:

local nonOpenables = { 
  [290]=true, 
  [291]=true, 
  [292]=true 
} 
  
addEventHandler( "onPlayerDamage", root, function ( attacker, weapon, bodypart ) 
  if bodypart == 9 and nonOpenables[ getElementModel( source ) ] then 
    killPed( source, attacker, weapon, bodypart ) 
  end 
end ) 

Link to comment
Korish0074, попробуйте вот так:
local nonOpenables = { 
  [290]=true, 
  [291]=true, 
  [292]=true 
} 
  
addEventHandler( "onPlayerDamage", root, function ( attacker, weapon, bodypart ) 
  if bodypart == 9 and nonOpenables[ getElementModel( source ) ] then 
    killPed( source, attacker, weapon, bodypart ) 
  end 
end ) 

Debug ничего не пишет, но и человека не убивает выстрелом в голову

Link to comment

Если я вас правильно понял, вам нужно чтобы игрок со скином 290, 291 и 292 мог убивать одним выстрелом в голову, верно? Тогда измените source на attacker в 8-й строчке:

if bodypart == 9 and nonOpenables[ getElementModel( attacker ) ] then 

Link to comment

Подскажите пожалуйста как исправить вот эти ошибки

Ошибки

[2013-06-06 00:45:30] WARNING: vehiclesystemcarshops\start.lua:22 Bad argument @ 'giveWeapon' [Expected weapon-type at argument 2, got boolean]

[2013-06-06 00:45:32] WARNING: vehiclesystemcarshops\server.lua:55: Bad argument @ 'setElementID' [Expected element at argument 1, got boolean]

[2013-06-06 00:45:32] ERROR: unzipped\vehiclesystemcarshops\server.lua:62: bad argument #1 to 'ipairs' (table expected, got number)

[2013-06-06 00:45:38] ERROR: unzipped\vehiclesystemcarshops\server.lua:25: attempt to concatenate local 'id' (a boolean value)

Код Server.lua

carShopMarker = createMarker (2133.59,-1149.29, 23.3, "cylinder", 3, 255, 0, 0, 127)

carShopMarker2 = createMarker (562, -1270, 16, "cylinder", 2, 255, 0, 0, 127)

carShopMarker3 = createMarker (-1954,299,34,"cylinder",2,255,0,0,127)

carShopMarker4 = createMarker (-1663,1208,6,"cylinder",2,255,0,0,127)

carShopMarker5 = createMarker (1946,2068,10,"cylinder",2,255,0,0,127)

createBlipAttachedTo(carShopMarker,55,2,0,255,0,0,0,200)

createBlipAttachedTo(carShopMarker2,55,2,0,255,0,0,0,200)

createBlipAttachedTo(carShopMarker3,55,2,0,255,0,0,0,200)

createBlipAttachedTo(carShopMarker4,55,2,0,255,0,0,0,200)

createBlipAttachedTo(carShopMarker5,55,2,0,255,0,0,0,200)

addEvent ("viewGUI", true)

function markerHit (hitPlayer, matchingDimension)

if (source == carShopMarker) or (source == carShopMarker2) or (source == carShopMarker3) or (source == carShopMarker4) or (source == carShopMarker5) then

triggerClientEvent ("viewGUI", hitPlayer)

end

end

addEventHandler ("onMarkerHit", getRootElement(), markerHit)

addEvent ("carShopCarBuy", true)

addEventHandler ("carShopCarBuy", getRootElement(),

function(id, cost, name)

if (getPlayerMoney (source) >= tonumber(cost)) then

outputChatBox ("Bought a " .. name, source, 255, 0, 0, false)

outputChatBox ("ID: " .. id, source, 255, 0, 0, false)

outputChatBox ("Cost: " .. cost, source, 255, 0, 0, false)

takePlayerMoney (source, tonumber (cost))

setAccountData (getPlayerAccount (source), "funmodev2-car", tonumber(id))

setAccountData (getPlayerAccount (source), "funmodev2-paintjob", 3)

setAccountData (getPlayerAccount (source), "funmodev2-carupg", 0)

else

outputChatBox ("You are too poor!", source, 255, 0, 0, false)

end

end)

addEvent ("carSpawn", true)

addEvent ("carDestroy", true)

function carSpawn ()

if not (isGuestAccount (getPlayerAccount (source))) and not (isPedInVehicle(source)) then

if (getElementData (source, "hisCar")) and (getElementData (source, "hisCar") ~= nil) and (getElementType(getElementData (source, "hisCar")) == "vehicle") then

setElementVelocity (getElementData (source, "hisCar"), 0,0,0)

local x,y,z = getElementPosition (source)

setVehicleRotation (getElementData (source, "hisCar"), 0, 0, 0)

setElementPosition (getElementData (source, "hisCar"), x+2,y,z +1)

outputChatBox ("Car spawned.", source, 255, 0, 0)

elseif not (getElementData (source, "hisCar")) then

local accountData = getAccountData (getPlayerAccount (source), "funmodev2-car")

if (accountData) then

carID = getAccountData (getPlayerAccount (source), "funmodev2-car")

x,y,z = getElementPosition (source)

vehicle = createVehicle (carID, x +2, y, z +1)

setElementID (vehicle, getAccountName (getPlayerAccount(source)))

setElementData (source, "hisCar", vehicle)

outputChatBox ("Машина стоит рядом с вами!", source, 255, 0, 0)

if (getAccountData (getPlayerAccount(source), "funmodev2-carupg")) then

local upgrades = nil

local upgrades = {}

local upgrades = getAccountData (getPlayerAccount(source), "funmodev2-carupg")

for i,v in ipairs (upgrades) do

addVehicleUpgrade (vehicle, v)

end

end

if (getAccountData (getPlayerAccount(source), "funmodev2-paintjob")) then

local paintjob = getAccountData (getPlayerAccount(source), "funmodev2-paintjob")

setVehiclePaintjob (vehicle, paintjob)

end

if (getAccountData (getPlayerAccount(source), "funmodev2-carcolor1")) and (getAccountData (getPlayerAccount(source), "funmodev2-carcolor2")) then

local c1 = getAccountData (getPlayerAccount(source), "funmodev2-carcolor1")

local c2 = getAccountData (getPlayerAccount(source), "funmodev2-carcolor2")

setVehicleColor (vehicle, c1,c2,0,0)

end

else

outputChatBox ("You haven't got a car.", source, 255, 0, 0)

end

else

outputChatBox ("You're already in a car!", source, 255, 0, 0)

end

end

end

addEventHandler ("carSpawn", getRootElement(), carSpawn)

function carDestroy ()

if not (isGuestAccount (getPlayerAccount (source))) then

if (isPedInVehicle (source)) then

if (getElementID(getPedOccupiedVehicle(source)) == getAccountName (getPlayerAccount(source))) then

setElementHealth (getElementData (source, "hisCar"), 0)

destroyElement (getPedOccupiedVehicle (source))

removeElementData (source, "hisCar")

outputChatBox ("Машина Убрана.", source, 255, 0, 0)

else

outputChatBox ("Это не ваш автомобиль!", source, 255, 0, 0)

end

elseif (not (isPedInVehicle (source))) and (getElementData (source, "hisCar")) and (getElementData (source, "hisCar") ~= nil) then

car=getElementData(source, "hisCar")

destroyElement(car)

outputChatBox ("Car Destroyed.", source, 255, 0, 0)

removeElementData (source, "hisCar")

end

end

end

addEventHandler ("carDestroy", getRootElement(), carDestroy)

function engineSwitch ()

if (isPedInVehicle (source)) then

local veh = getPedOccupiedVehicle (source)

if (getVehicleEngineState (veh) == true) then

setVehicleEngineState (veh, false)

outputChatBox ("Двигатель заглушен.", source, 255, 0, 0)

elseif (getVehicleEngineState (veh) == false) then

setVehicleEngineState (veh, true)

outputChatBox ("Двигатель заведен.", source, 255, 0, 0)

end

else

outputChatBox ("Это не ваш автомобиль!", source, 255, 0, 0)

end

end

addEvent("engenieSwitch",true)

addEventHandler("engenieSwitch",getRootElement(),engineSwitch)

function lightsSwitch ()

if (isPedInVehicle (source)) then

local veh = getPedOccupiedVehicle (source)

if (getVehicleOverrideLights(veh) ~= 2) then

setVehicleOverrideLights(veh, 2)

outputChatBox ("Фары включены.", source, 255, 0, 0)

elseif (getVehicleOverrideLights(veh) ~= 1) then

setVehicleOverrideLights(veh, 1)

outputChatBox ("Фары выключены.", source, 255, 0, 0)

end

else

outputChatBox ("Это не ваш автомобиль!", source, 255, 0, 0)

end

end

addEvent("lightsSwitch",true)

addEventHandler("lightsSwitch",getRootElement(),lightsSwitch)

function lockSwitch ()

if (isPedInVehicle (source)) then

local veh = getPedOccupiedVehicle (source)

if not (isVehicleLocked (veh)) then

setVehicleLocked (veh, true)

setVehicleDoorsUndamageable (veh, true)

setVehicleDoorState (veh, 0, 0)

setVehicleDoorState (veh, 1, 0)

setVehicleDoorState (veh, 2, 0)

setVehicleDoorState (veh, 3, 0)

outputChatBox ("Автомобиль закрыт.", source, 255, 0, 0)

elseif (isVehicleLocked (veh)) then

setVehicleLocked (veh, false)

setVehicleDoorsUndamageable (veh, false)

outputChatBox ("Автомобиль открыт.", source, 255, 0, 0)

end

else

outputChatBox ("Это не ваш автомобиль!", source, 255, 0, 0)

end

end

addEvent("lockSwitch",true)

addEventHandler("lockSwitch",getRootElement(),lockSwitch )

addEventHandler ("onVehicleStartEnter", getRootElement(),

function(player, seat, jacked, door)

if (isVehicleLocked (source) == true) then

local mannetjeNaam = getAccountName (getPlayerAccount (player))

local autoNaam = getElementID (source)

if (mannetjeNaam == autoNaam) then

setVehicleLocked (source, false)

outputChatBox ("Автомобиль Открыт!", player, 255, 0, 0, false)

end

end

end)

addEventHandler ("onVehicleExplode", getRootElement(),

function()

local theOwner = getAccountName (getPlayerAccount(getPlayerFromName (getElementID (source))))

if (theOwner) then

removeElementData (theOwner, "hisCar")

end

end)

addEventHandler ("onPlayerQuit", getRootElement(),

function(quitType, reason, responsibleElement)

if (getElementData (source, "hisCar")) then

blowVehicle (getElementData (source, "hisCar"))

removeElementData (source, "hisCar")

end

end)

addEventHandler( "onResourceStop", getResourceRootElement( getThisResource() ),

function ()

for i,v in ipairs (getElementsByType ("player")) do

if (getElementData (v, "hisCar")) then

setElementHealth (getElementData (v, "hisCar"), 0)

removeElementData (v, "hisCar")

end

end

end

)

function destroyOnExplode ()

setTimer (destroyElement, 2500, 1, source)

end

addEventHandler ("onVehicleExplode", getRootElement(), destroyOnExplode)

Код Start.lua

node = xmlLoadFile ("players.xml")

function playerLogin (thePreviousAccount, theCurrentAccount, autoLogin)

if not (isGuestAccount (getPlayerAccount (source))) then

local accountData = getAccountData (theCurrentAccount, "funmodev2-money")

if (accountData) then

local playerMoney = getAccountData (theCurrentAccount, "funmodev2-money")

local playerSkin = getAccountData (theCurrentAccount, "funmodev2-skin")

local playerX = getAccountData (theCurrentAccount, "funmodev2-x")

local playerY = getAccountData (theCurrentAccount, "funmodev2-y")

local playerZ = getAccountData (theCurrentAccount, "funmodev2-z")

local playerInt = getAccountData (theCurrentAccount, "funmodev2-int")

local playerDim = getAccountData (theCurrentAccount, "funmodev2-dim")

local playerWanted = getAccountData (theCurrentAccount, "funmodev2-wantedlevel")

local playerWeaponID = getAccountData (theCurrentAccount, "funmodev2-weaponID")

local playerWeaponAmmo = getAccountData (theCurrentAccount, "funmodev2-weaponAmmo")

spawnPlayer (source, playerX, playerY, playerZ +1, 0, playerSkin, playerInt, playerDim, spawnTeam)

setTimer (setPlayerTeam, 500, 1, source, spawnTeam)

setPlayerMoney (source, playerMoney)

setTimer (setPlayerWantedLevel, 500, 1, source, playerWanted)

setTimer (giveWeapon, 500, 1, source, playerWeaponID, playerWeaponAmmo, true)

setCameraTarget (source, source)

fadeCamera(source, true, 2.0)

else

spawnPlayer (source, 2000.55, 1526.25, 14.6171875, 0, math.random (0, 288), 0, 0, spawnTeam)

setTimer (setPlayerTeam, 500, 1, source, spawnTeam)

setPlayerMoney (source, 5000)

setCameraTarget (source, source)

fadeCamera(source, true, 2.0)

end

end

end

addEventHandler ("onPlayerLogin", getRootElement(), playerLogin)

function onQuit (quitType, reason, responsibleElement)

if not (isGuestAccount (getPlayerAccount (source))) then

account = getPlayerAccount (source)

if (account) then

local x,y,z = getElementPosition (source)

setAccountData (account, "funmodev2-money", tostring (getPlayerMoney (source)))

setAccountData (account, "funmodev2-skin", tostring (getPedSkin (source)))

setAccountData (account, "funmodev2-x", x)

setAccountData (account, "funmodev2-y", y)

setAccountData (account, "funmodev2-z", z)

setAccountData (account, "funmodev2-int", getElementInterior (source))

setAccountData (account, "funmodev2-dim", getElementDimension (source))

setAccountData (account, "funmodev2-wantedlevel", getPlayerWantedLevel (source))

setAccountData (account, "funmodev2-wantedID", getPedWeapon (source))

setAccountData (account, "funmodev2-wantedAmmo", getPedTotalAmmo (source))

end

end

end

addEventHandler ("onPlayerQuit", getRootElement(), onQuit)

function onWasted(totalAmmo, killer, killerWeapon, bodypart, stealth)

if not( isGuestAccount (getPlayerAccount(source)) ) then

local theWeapon = getPedWeapon (source)

local weaponAmmo = getPedTotalAmmo (source)

fadeCamera (source, false)

setTimer (spawnPlayer, 1000, 1, source, 1607.35, 1816.54, 10.82, 0, getPedSkin (source), 0, 0, spawnTeam)

setTimer (setPlayerTeam, 1500, 1, source, spawnTeam)

setTimer (setCameraTarget, 1250, 1, source, source)

setTimer (fadeCamera, 2000, 1, source, true)

setTimer (giveWeapon, 2000, 1, source, theWeapon, weaponAmmo, true)

end

end

addEventHandler ("onPlayerWasted", getRootElement(), onWasted)

Link to comment

Привет всем, скажите как можно сделать следущее: вот допустим есть функция

function checkMoney() 
if getPlayerMoney(source) == 1000 then  
      triggerClientEvent(source, "UnlockAchievement") 
end 
if getPlayerMoney(source) == 10000 then  
... 
end 
end 

Логично, что проверку на ровно 1000 глупо ставить, потому что было у игрока 990 заработал ещё 50 и всё он "пролетел". Если сделать > 1000 and < 10000, то trigger будет срабатывать много раз, а не один. Так как можно решить эту задачу?

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