Jump to content

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


Recommended Posts

Синтаксис - "оформление" алгоритма. Если понимаешь, как строить алгоритмы, то после чтения пары манов, наверное, поймешь и как спроецировать их на конкретный язык?..

А насчет функций - наверное, название с set "кошерней". Дескать, вписывается в общую концепцию и сразу понятно из этого set какого рода эта функция. А ту мб со временем объявят устаревшей. Но это все, опять же, ИМХО.

Link to comment

Ну как то так) Не знаю будет ли работать addeventhandlier("OnPlayerWasted",root,"CreatePed") первый евент после каникул. А так лень лень и лень. И тупые игры. Буду заниматся программированием и статейками с я люблю луа. Получше сайтов не знаю.

Link to comment

Конечно не будет работать, все события в мта начинаются с малой буквы, а не с большой. Третий аргумент у функции addEventHandler это функция-обработчик, а не строка. Читай вики перед тем как писать код. Сама функция у тебя написана неверно.

https://wiki.multitheftauto.com/

Link to comment

Как говорится своими руками) Не знал про это.

Я так понял евент вызывается после функции?

Вот как то так не судите 1 раз своей рукой пишу.

  
function CreatePed 
ped1=createPed(45,x,y,z) 
setPedAnimation(ped1,"ped","KILL_PARTIAL") 
end 
addEventHandlier("OnPlayerWasted",root,CreatePed) 

Я не знаю только как вычислять координаты игрока который умер. Сейчас у меня бот не будет создаватся. Так как координат у него нету.

Прошлый вопрос с регистрацией остался в силе. Наконец то на компьютере

--[[ 
    Basic Roleplay Gamemode
    ~ Server-side functions for login
   
    Created by Socialz
]]--
 
-- Miniatures
local cRoot = getRootElement()
local cThis = getThisResource()
local cThisRoot = getResourceRootElement(cThis)
 
-- Configurations (modifyable)
local cx1, cy1, cz1 = 1262, -1154, 96 -- Camera slider part 1 position
local cpx1, cpy1, cpz1 = 1190, -1195, 58 -- Camera slider part 1 point
 
local cx2, cy2, cz2 = 512.2, -1263.57, 32.53 -- Camera slider part 2 position
local cpx2, cpy2, cpz2 = 542.16, -1287.07, 17.24 -- Camera slider part 2 point
 
local cx3, cy3, cz3 = 1818.96, -1678.42, 17.77 -- Camera slider part 3 position
local cpx3, cpy3, cpz3 = 1831.63, -1679.9, 13.54 -- Camera slider part 3 point
 
local cx4, cy4, cz4 = 1517.72, -1724.66, 38.05 -- Camera slider part 4 position
local cpx4, cpy4, cpz4 = 1471.68, -1750.05, 15.44 -- Camera slider part 4 point
 
local cx5, cy5, cz5 = 951.71, -1122.66, 44.24 -- Camera slider part 5 position
local cpx5, cpy5, cpz5 = 890.43, -1092.08, 24.3 -- Camera slider part 5 point
 
local cx6, cy6, cz6 = 1051.84, -1157.98, 35.98 -- Camera slider part 6 position
local cpx6, cpy6, cpz6 = 1028.54, -1121.54, 28.4 -- Camera slider part 6 point
 
local cx7, cy7, cz7 = 1924.13, -1767.91, 88.08 -- Camera slider part 7 position
local cpx7, cpy7, cpz7 = 1765.62, -1864.89, 13.57 -- Camera slider part 7 point
 
local sx, sy, sz = 1743, -1861, 14 -- Original spawnpoint
local rx, ry, rz = 1183, -1323, 14 -- Respawnpoint
local rp_startcash = 500 -- Starting wallet cash
local rp_startbankcash = 1000 -- Starting bank cash
local regR, regG, regB = 255, 255, 255 -- Regular nametag color
local admR, admG, admB = 255, 255, 0 -- Admin nametag color
 
local notification_welcome = "Добро пожаловать на Playground Roleplay." -- Notification: welcometext
local notification_regular = "Удачно залогинились." -- Notification: ACL group note on log in, regular account
local notification_trialadmin = "Вы залогинились как модератор." -- Notification: ACL group note on log in, trial administrator
local notification_gameadmin = "Вы залогинились как игровой администратор." -- Notification: ACL group note on log in, game administrator
local notification_leadadmin = "Вы залогинились как супермодератор." -- Notification: ACL group note on log in, lead administrator
local notification_owner = "Вы залогинились как главный администратор." -- Notification: ACL group note on log in, server owner
local notification_password = "Если вы хотите сменить свой пароль нажмите /changepass" -- Notification: how to change password
local notification_loggedout = "Вы вышли. Пожалуйста зайдите снова." -- Notification: forced logged out
 
local warning_password_notloggedin = "Вы должны войти прежде чем менять свой пароль." -- Warning: not logged in when changing password
local warning_password_invalidlenght = "Ваш новый пароль должен быть больше 5 символов!" -- Warning: invalid lenght when changing password
local warning_password_invalid = "Пароль неверен." -- Warning: invalid password
local warning_logout = "Выйти сейчас невозможно." -- Warning: logging out disabled
 
local rp_hospitalMoney = 75 -- Hospital treatment's payment
local rp_notification_hospital_01 = "Вас спасли медики.." -- Treatment info after respawn
local rp_notification_hospital_02 = "Вы заплатили $" .. rp_hospitalMoney .. " за лечение." -- Treatment info after respawn
 
local releasepoint_x = 0
local releasepoint_y = 0
local releasepoint_z = 0
local releasepoint_interior = 0
local releasepoint_dimension = 0
 
-- Functions
addEventHandler("onPlayerJoin", cRoot,
    function()
        for i=1,50 do
            outputChatBox(" ", source)
        end
       
        outputChatBox(notification_welcome, source, 255, 255, 0, true)
        outputChatBox("Что бы продолжить зайдите.", source, 255, 255, 255, true)
        outputChatBox(" ", source, 255, 255, 255, true)
        showPlayerHudComponent(source, "radar", false)
        showPlayerHudComponent(source, "area_name", false)
        setElementData(source, "slider", 0)
        firstSlider(source)
    end
)
 
function firstSlider(source)
    if getElementData(source, "slider") ~= 1 then
        fadeCamera(source, false, 1.0)
        setTimer(function()
            setCameraMatrix(source, cx1, cy1, cz1, cpx1, cpy1, cpz1)
            fadeCamera(source, true, 1.0)
        end, 1000, 1)
        setTimer(secondSlider, 4000, 1, source)
    end
end
 
function secondSlider(source)
    if getElementData(source, "slider") ~= 1 then
        fadeCamera(source, false, 1.0)
        setTimer(function()
            setCameraMatrix(source, cx2, cy2, cz2, cpx2, cpy2, cpz2)
            fadeCamera(source, true, 1.0)
        end, 1000, 1)
        setTimer(thirdSlider, 4000, 1, source)
    end
end
 
function thirdSlider(source)
    if getElementData(source, "slider") ~= 1 then
        fadeCamera(source, false, 1.0)
        setTimer(function()
            setCameraMatrix(source, cx3, cy3, cz3, cpx3, cpy3, cpz3)
            fadeCamera(source, true, 1.0)
        end, 1000, 1)
        setTimer(fourthSlider, 4000, 1, source)
    end
end
 
function fourthSlider(source)
    if getElementData(source, "slider") ~= 1 then
        fadeCamera(source, false, 1.0)
        setTimer(function()
            setCameraMatrix(source, cx4, cy4, cz4, cpx4, cpy4, cpz4)
            fadeCamera(source, true, 1.0)
        end, 1000, 1)
        setTimer(fifthSlider, 4000, 1, source)
    end
end
 
function fifthSlider(source)
    if getElementData(source, "slider") ~= 1 then
        fadeCamera(source, false, 1.0)
        setTimer(function()
            setCameraMatrix(source, cx5, cy5, cz5, cpx5, cpy5, cpz5)
            fadeCamera(source, true, 1.0)
        end, 1000, 1)
        setTimer(sixthSlider, 4000, 1, source)
    end
end
 
function sixthSlider(source)
    if getElementData(source, "slider") ~= 1 then
        fadeCamera(source, false, 1.0)
        setTimer(function()
            setCameraMatrix(source, cx6, cy6, cz6, cpx6, cpy6, cpz6)
            fadeCamera(source, true, 1.0)
        end, 1000, 1)
        setTimer(seventhSlider, 4000, 1, source)
    end
end
 
function seventhSlider(source)
    if getElementData(source, "slider") ~= 1 then
        fadeCamera(source, false, 1.0)
        setTimer(function()
            setCameraMatrix(source, cx7, cy7, cz7, cpx7, cpy7, cpz7)
            fadeCamera(source, true, 1.0)
        end, 1000, 1)
        setTimer(firstSlider, 4000, 1, source)
    end
end
 
function brpLogin(player, username, password)
    local account = getAccount(username, password)
    if account ~= false then
        if logIn(player, account, password) == true then
            local acc = getPlayerAccount(player)
           
            if isObjectInACLGroup("user." .. getAccountName(acc), aclGetGroup("Trial Administrator")) then
                outputChatBox(notification_trialadmin, player, 200, 200, 0, false)
                setElementData(player, "admin.level", 1)
                setPlayerNametagColor(player, admR, admG, admB)
            elseif isObjectInACLGroup("user." .. getAccountName(acc), aclGetGroup("Game Administrator")) then
                outputChatBox(notification_gameadmin, player, 200, 200, 0, false)
                setElementData(player, "admin.level", 2)
                setPlayerNametagColor(player, admR, admG, admB)
            elseif isObjectInACLGroup("user." .. getAccountName(acc), aclGetGroup("Lead Administrator")) then
                outputChatBox(notification_leadadmin, player, 200, 200, 0, false)
                setElementData(player, "admin.level", 3)
                setPlayerNametagColor(player, admR, admG, admB)
            elseif isObjectInACLGroup("user." .. getAccountName(acc), aclGetGroup("Server Owner")) then
                outputChatBox(notification_owner, player, 200, 200, 0, false)
                setElementData(player, "admin.level", 4)
                setPlayerNametagColor(player, admR, admG, admB)
            else
                outputChatBox(notification_regular, player, 220, 220, 0, false)
                setElementData(player, "admin.level", 0)
                setPlayerNametagColor(player, regR, regG, regB)
            end
           
            setElementData(player, "accountname", getAccountName(acc))
            setElementData(player, "player.loggedin", 1)
            outputChatBox(notification_password, player, 255, 255, 255, false)
            triggerClientEvent(player, "hideLoginWindow", cRoot)
            setElementData(player, "slider", 1)
            fadeCamera(player, false, 2.0)
           
            if isElementFrozen(player) then
                setElementFrozen(player, false)
            end
       
            setTimer(function()
                local money = getAccountData(acc, "money")
                local bank = getAccountData(acc, "bank")
                local faction = getAccountData(acc, "faction")
                local fname = getAccountData(acc, "fname")
                local factionleader = getAccountData(acc, "factionleader")
                local health = getAccountData(acc, "health")
                local armor = getAccountData(acc, "armor")
                local model = getAccountData(acc, "model")
                local points = getAccountData(acc, "points")
                local interior = getAccountData(acc, "interior")
                local dimension = getAccountData(acc, "dimension")
                local x = getAccountData(acc, "posx")
                local y = getAccountData(acc, "posy")
                local z = getAccountData(acc, "posz")
                local rx = getAccountData(acc, "rotx")
                local ry = getAccountData(acc, "roty")
                local rz = getAccountData(acc, "rotz")
                local cuffed = getAccountData(acc, "cuffed")
                local arrested = getAccountData(acc, "arrested")
                local arrestedtime = getAccountData(acc, "arrested-remainingtime")
                local materials = getAccountData(acc, "materials")
                if cuffed == true then
                    setElementData(player, "police.cuffed", true)
                    toggleControl(player, "fire", false)
                    toggleControl(player, "next_weapon", false)
                    toggleControl(player, "previous_weapon", false)
                    toggleControl(player, "sprint", false)
                    toggleControl(player, "aim_weapon", false)
                    toggleControl(player, "handbrake", false)
                    toggleControl(player, "vehicle_fire", false)
                    toggleControl(player, "vehicle_secondary_fire", false)
                    toggleControl(player, "vehicle_left", false)
                    toggleControl(player, "vehicle_right", false)
                    toggleControl(player, "steer_forward", false)
                    toggleControl(player, "steer_back", false)
                end
               
                if arrested == true then
                    setElementData(player, "police.arrested", true)
                    outputChatBox("Твой аррест ещё не окончен.", player, 120, 120, 255, false)
                    setTimer(function(player)
                        if getElementData(player, "police.arrested") then
                            setElementPosition(player, releasepoint_x, releasepoint_y, releasepoint_z)
                            setElementInterior(player, releasepoint_interior)
                            setElementDimension(player, releasepoint_dimension)
                            outputChatBox("Вас отпустили - пожалуйста не нарушайте закон.", player, 120, 120, 255, false)
                            outputServerLog("[FACTIONS] [AUTO/RELEASE]: " .. getPlayerName(player) .. " был отпущен из тюрьмы автоматически.")
                            removeElementData(player, "police.arrested")
                            setAccountData(acc, "arrested", false)
                            setAccountData(acc, "arrested-remainingtime", 0)
                        end
                    end, arrestedtime, 1,
Edited by Guest
Link to comment
function CreatePed () 
local x , y , z = getElementPosition(source) --  ведь нужны координаты источника, кто умер. 
local skin = getElementModel ( source ) -- я подумал будет лучше если бот, будет с тем же скином, что и убитый ? 
local ped = createPed( skin , x , y , z ) 
setPedAnimation(ped ,"ped","KILL_PARTIAL") 
end 
addEventHandlier("onPlayerWasted",root,CreatePed) 

советую к прочтению https://wiki.multitheftauto.com/wiki/OnPlayerWasted

Edited by Guest
Link to comment

Тут кто-нибудь знает как создать свой edf с колшейпами и радарареной. Они нужны только для визуального представления зоны. В мане на вики есть их упоминания, но как это реализовать хз. Если что-то и получалось сделать, то только чтобы все это прописывать в редакторе самим. Хотелось бы, чтобы хотя бы позиция ставилась корректно, с минимальными затратами времени.

Link to comment

Привет всем. Что я должен использовать для DM - зоны?

Человек убивает другого - 2 player, первый получает деньги, у второго отнимаются.

function onPlayerWastedDM ( attacker ) 
            if ( attacker ) then 
            if ( getElementType ( attacker ) == "player" ) then 
                givePlayerMoney( attacker, 7500 ) 
            end 
            end 
end 
  
addEventHandler( "onPlayerWastedDM", getRootElement( ), 
    function() 
        setTimer( spawnPlayer, 2000, 1, player, 1607, 1826.6, 10.8 ) 
        takePlayerMoney ( player, 7500 ) 
    end 
) 
  

Не работает.

Link to comment
Привет всем. Что я должен использовать для DM - зоны?

Человек убивает другого - 2 player, первый получает деньги, у второго отнимаются.

function onPlayerWastedDM ( attacker ) 
            if ( attacker ) then 
            if ( getElementType ( attacker ) == "player" ) then 
                givePlayerMoney( attacker, 7500 ) 
            end 
            end 
end 
  
addEventHandler( "onPlayerWastedDM", getRootElement( ), 
    function() 
        setTimer( spawnPlayer, 2000, 1, player, 1607, 1826.6, 10.8 ) 
        takePlayerMoney ( player, 7500 ) 
    end 
) 
  

Не работает.

Делай колшейп в дм зоне

createColCuboid 

И при убийстве/смерти проверяй, был ли тот игрок в колшейпе

isElementWithinColShape 

Link to comment
Привет всем. Что я должен использовать для DM - зоны?

Человек убивает другого - 2 player, первый получает деньги, у второго отнимаются.

function onPlayerWastedDM ( attacker ) 
            if ( attacker ) then 
            if ( getElementType ( attacker ) == "player" ) then 
                givePlayerMoney( attacker, 7500 ) 
            end 
            end 
end 
  
addEventHandler( "onPlayerWastedDM", getRootElement( ), 
    function() 
        setTimer( spawnPlayer, 2000, 1, player, 1607, 1826.6, 10.8 ) 
        takePlayerMoney ( player, 7500 ) 
    end 
) 
  

Не работает.

Делай колшейп в дм зоне

createColCuboid 

И при убийстве/смерти проверяй, был ли тот игрок в колшейпе

isElementWithinColShape 

С колшейпами я не разобрался до конца.

Link to comment

С колшейпами я не разобрался до конца.

А что с ими разбиратся ? Почитай на вики про функцию, там все есть. Я бы помог, но извини, я не ванга, и не знаю где тебе нужна дм зона

Link to comment

С колшейпами я не разобрался до конца.

А что с ими разбиратся ? Почитай на вики про функцию, там все есть. Я бы помог, но извини, я не ванга, и не знаю где тебе нужна дм зона

Мне нужно интуитивно выставлять ширину, высону и длину? Или же найти центр и ее стороны, затем найти их разницу?

Как быть с onPlayerWasted? Мне нужно как-то выдрать игрока, который был убит.

Проверьте меня, если что:

        local DMzone = createColCuboid ( 2617.9, 2746.5, 10.8, 52, 80, 252 ) 
        local prove = isElementWithinColShape ( player, DMzone ) 
    function shapeHit ( player ) 
            outputChatBox ( getPlayerName ( player ) .. " вошел в зону DM. (/dm)" ) 
    end 
  
    addEventHandler ( "onColShapeHit", DMzone, shapeHit ) 
     
        function onPlayerWasted ( attacker ) 
            if ( attacker ) then 
            if ( getElementType ( attacker ) == "player" ) then 
            prove = prove and getElementDimension ( attacker ) == getElementDimension( DMzone ) 
            if prove then 
                givePlayerMoney( attacker, 7500 ) 
            end 
            end 
            end 
    end 
  
    addEventHandler( "onPlayerWasted", getRootElement( ), 
    function( ) 
        setTimer( spawnPlayer, 2000, 1, player, 1607, 1826.6, 10.8 ) 
        takePlayerMoney ( player, 7500 ) 
    end 
    ) 

Link to comment

Вставляешь в клиентский скрипт setDevelopmentMode ( true ) или используй ресурс runcode /crun setDevelopmentMode ( true )

После любого из этих действий введи showcol 1 тогда ты увидишь все свои колшейпы.

Колшейп кубоид создается по трем точкам координатами начала, это нижняя юго-западная точка, и шириной, длинной, высотой.

Если по моему вопросу никто ничего не знает, то дайте знать, тогда я сам сделаю свой редактор для этого, или создам скрипт в редакторе.

Link to comment

Спасибо, но это не то. Как я писал, мне это надо для визуального представления информации, наравне с радарареной. Вот например костылями сгенерированая строка в карту:

<monsterspawn id="monsterspawn (1)" interior="0" levelmin="3"posX="-86.74609375" posY="1636.9365234375" sizeX="489.08984375" sizeY="489.7216796875"></monsterspawn> 

Я думаю, тому, кто с этим будет работать не понравится все делать вручную или через костыли ))

Link to comment

Спасибо, всё очень сильно помогло, осталось последнее - получение денег. Не совсем понимаю, что творится ниже в 'onKillDM', но тем не менее. Вроде все ОК, дэбаг молчит. Иногда ругается на 3 строку, что она должна быть 'boolean'. Но деньги после убийства не передаются. Наверняка легко будет выследить данную ошибку, я пока что-то не могу.

    local DMzone = createColCuboid ( 2495, 2616, 9.5, 255, 243, 80 ) -- создаю кубойд 
    function shapeHit ( player ) -- типа счетчика 
            outputChatBox ( getPlayerName ( player ) .. " вошел в зону DM. (/dm)" ) 
    end 
    addEventHandler ( "onColShapeHit", DMzone, shapeHit ) 
     
    function onKillDM ( ammo, source, weapon, bodypart ) -- имитация onPlayerWasted, чтобы определить кто кого убил и что делается 
    local prove = isElementWithinColShape ( source, DMzone ) -- элемент внутри формы 
            if ( source ) then -- если это тот элемент, то 
            if ( getElementType ( source ) == "player" ) then -- Если элемент найден как игрок, то 
            prove = prove and getElementDimension ( source ) == getElementDimension( DMzone ) -- проверка - элемент внутри формы и они находится на территории друг друга (Не в разных местах) 
            if prove then -- если все ОК, то - вывод сообщения и дать игроку деньги 
                outputChatBox ( "Все ОК." ) 
                givePlayerMoney( source, 7500 ) 
            end 
            end 
            end 
    end 
addEventHandler("onPlayerWasted", getRootElement(), onKillDM) -- при убийстве игрока (В этой части рулит 'killer') 

Edited by Guest
Link to comment
  • Other Languages Moderators
Спасибо, всё очень сильно помогло, осталось последнее - получение денег. Не совсем понимаю, что творится ниже в 'onKillDM', но тем не менее. Вроде все ОК, дэбаг молчит. Иногда ругается на 3 строку, что она должна быть 'boolean'. Но деньги после убийства не передаются. Наверняка легко будет выследить данную ошибку, я пока что-то не могу.
    local DMzone = createColCuboid ( 2495, 2616, 9.5, 255, 243, 80 ) 
    function shapeHit ( player ) 
            outputChatBox ( getPlayerName ( player ) .. " вошел в зону DM. (/dm)" ) 
    end 
    addEventHandler ( "onColShapeHit", DMzone, shapeHit ) 
     
    function onKillDM ( ammo, source, weapon, bodypart ) 
    local prove = isElementWithinColShape ( source, DMzone ) 
            if ( source ) then 
            if ( getElementType ( source ) == "player" ) then 
            prove = prove and getElementDimension ( source ) == getElementDimension( DMzone ) 
            if prove then 
                outputChatBox ( "Все ОК." ) 
                givePlayerMoney( source, 7500 ) 
            end 
            end 
            end 
    end 
addEventHandler("onPlayerWasted", getRootElement(), onKillDM) 

viewtopic.php?f=141&t=40703

Link to comment
Спасибо, всё очень сильно помогло, осталось последнее - получение денег. Не совсем понимаю, что творится ниже в 'onKillDM', но тем не менее. Вроде все ОК, дэбаг молчит. Иногда ругается на 3 строку, что она должна быть 'boolean'. Но деньги после убийства не передаются. Наверняка легко будет выследить данную ошибку, я пока что-то не могу.
    local DMzone = createColCuboid ( 2495, 2616, 9.5, 255, 243, 80 ) 
    function shapeHit ( player ) 
            outputChatBox ( getPlayerName ( player ) .. " вошел в зону DM. (/dm)" ) 
    end 
    addEventHandler ( "onColShapeHit", DMzone, shapeHit ) 
     
    function onKillDM ( ammo, source, weapon, bodypart ) 
    local prove = isElementWithinColShape ( source, DMzone ) 
            if ( source ) then 
            if ( getElementType ( source ) == "player" ) then 
            prove = prove and getElementDimension ( source ) == getElementDimension( DMzone ) 
            if prove then 
                outputChatBox ( "Все ОК." ) 
                givePlayerMoney( source, 7500 ) 
            end 
            end 
            end 
    end 
addEventHandler("onPlayerWasted", getRootElement(), onKillDM) 

viewtopic.php?f=141&t=40703

Извиняюсь, исправлено.

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