Jump to content

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


Recommended Posts

Ну допустим у объекта может быть динамическое имя?

Тоесть допустим с помощью команды /lo игрок создает объект какой-то.

А имя объекта будет object[playername], playername это типа текст ника игрока, ну строковая переменная вобщем.

Ну вот можно же вроде таким образом имена переменным задавать?

зачем тебе этот геморой?

Link to comment

Этот геморой мне для того, что бы значение какой либо переменной для каждого игрока было разным.

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

В ниже указанном топике, Castillo исправил эту проблемму, с помощью использования в названии переменной, элемент игрока. ( iv [ thePlayer ] = 1)

https://forum.multitheftauto.com/viewtopic.php?f=91&t=43217&p=435847&hilit=invisible#p435847 (2 пост)

Link to comment

Вы вообще с Lua знакомы? Такое ощущение что нет. iv - это таблица. в качестве ключа он использовал игроков (thePlayer), операторы [ и ] используются для доступа к индексам таблиц.

Конечно в качестве ключа вы можете использовать всё что угодно (кроме nil).

TwiX!,

ответ прямо в стиле мх мастера, где вместо того чтобы помочь он задаёт странные вопросы и/или пытается отговорить от идеи своими советами.

Link to comment

Понял, спасибо)

С Lua вот знакомлюсь понемногу.

Вобще дело в том, что Lua, по сути, мой первый язык програмирования. Раньше только в школе на информатике Visual Basic немного изучал.

Link to comment

Как добавить в конец таблицы, строку из нескольких значений.

Что бы таблица получалась примерно такого вида:

local t =  
{ 
    {1, "lol"};  
} 

Link to comment

Уже был там, и не только...

Я просто не понял как с помощью

table.insert (table, [pos,] value)

Вставить несколько значений именно в одну строку, причем в самый конец таблицы.

Link to comment

Ну короче, как мне вставить несколько значений, в одну строку таблицы?

Если я пишу так: table.insert (my_table, 1, 1)

то таблица будет такая:

local my_table =  
{ 
    {1};  
} 

Правильно?

A если я напишу так: table.insert (my_table, 1, 1, "one")

то будет ли таблица такая?:

local my_table =  
{ 
    {1, "one"};  --Вобщем в эту строчку добавлять колонки я незнаю как с помощью table.insert 
  
} 

Link to comment

В воо, может вот так?:

            table.insert ( table,  
                {  
                    1, 
                    "Valera", 
                    "Trololo", 
                } 
            ) 

Link to comment

1) Как узнать какой игрок стреляет по машине?

2) Eсли с помощью table.remove удалить первую строку в таблице, то вторая сдвинется на место первой, да?

Link to comment

Написал мини ресурс, который делает перезарядку если не полный магазин. При перезарядки в консоли пишет следующее:

WARNING: [gameplay]\reload\reload.lua:22: Bad argument @ 'getPedStat' 

Server Side

function forceReload(p) 
    reloadPedWeapon (p) 
end 
addCommandHandler("Reload weapon",forceReload) 
  
function bindPlayerReloadKey(p) 
    bindKey(p,"r","down","Reload weapon") 
end 
  
function bindReloadForAllPlayers() 
    for k,v in ipairs(getElementsByType("player")) do 
        bindPlayerReloadKey(v) 
    end 
end 
--addEventHandler("onResourceStart",getResourceRootElement(),bindReloadForAllPlayers) -- Enable when issue 4532 is fixed 
  
--Please remove the following when issue 4532 is fixt: 
  
addEvent("onPlayerReload",true) 
addEventHandler("onPlayerReload",getRootElement(), 
    function() 
        if getPedStat(source)==1000 then 
            lvl="pro" 
        else 
            lvl="std" 
        end 
        if getWeaponProperty(getPedWeapon(source),lvl,"maximum_clip_ammo")>getPedAmmoInClip(source) then 
            reloadPedWeapon (source) 
        end 
    end 
) 

Client Side

addCommandHandler("Reload weapon", 
    function() 
        triggerServerEvent("onPlayerReload",getLocalPlayer()) 
    end 
) 
  
bindKey("r","down","Reload weapon") 

Вопросы следующие:

1) сильная будет ли нагрузка на сервер?

2) какая команда для писания в чат?

3) важная ли это ошибка или нет?

Link to comment

У тебя не указанно какой Ped Stat ты хочешь получить.

у getPedStat есть 2 аргумента: стат и ped (у которого ты хочешь получить стат)

На wiki вобщем глянь...

float getPedStat ( ped thePed, int stat ) 

Кстати, если я не ошибаюсь, скрипт на перезарядку есть в стандартных ресурсах

Link to comment
Кстати, если я не ошибаюсь, скрипт на перезарядку есть в стандартных ресурсах

Да, но мне свой подойдет. Еще вопрос: как поменять скорость времени? т.е. чтобы 1 минута на часах бежала не 1 секунду , а n секунд?

Link to comment

Всем привет ! явот хочу сделать спавн менеджер и хочу узнать если я сделаю в гридлисте вкладку админ то как сделать так чтоб спавнились только админы а другие игроки не могли

Link to comment
Всем привет ! явот хочу сделать спавн менеджер и хочу узнать если я сделаю в гридлисте вкладку админ то как сделать так чтоб спавнились только админы а другие игроки не могли

Либо так:

bool hasObjectPermissionTo ( string / element theObject, string theAction [, bool defaultPermission = true ] ) 

Link to comment

Вот что хотел спросить у меня чтото не пашет что я нитак делаю ???

addEventHandler("onPlayerLogin", 
function()  
         spawnPlayer ( thePlayer, 1000, 1000, 1000, 90, 650 ) ) then 
 local accName = getAccountName ( getPlayerAccount ( thePlayer ) ) -- get his account name 
     if isObjectInACLGroup ("user."..accName, aclGetGroup ( "Admin" ) ) then 
          outputChatBox( "Admin", 255, 255, 0) 
             local serverDisplay = textCreateDisplay()                             -- create a text display 
   textDisplayAddObserver ( serverDisplay, player )                      -- make it visible to a player 
   local serverText = textCreateTextItem ( "Вы админ и будите телепортированы на админ базу втечении 3-х секунд", 0.5, 0.5 )    -- create a text item for the display 
   textDisplayAddText ( serverDisplay, serverText ) 
    
   setTimer ( spawnPlayer, 3000, 1, source, 0, -1572.01, 662.46, 7.18 ) 
 end 
)  
  

Link to comment
   spawnPlayer ( thePlayer, 1000, 1000, 1000, 90, 650 ) ) then 

где if?

if isObjectInACLGroup ("user."..accName, aclGetGroup ( "Admin" ) ) then 

вижу 1 end, хотя должно быть 3. И зачем таймер кидать в функцию?

И /debugscript 3 в помощь

Link to comment

Прошу прощения! Я перепутал скрипты ! Подскажите пожалуйста как сделать так чтоб все игроки спавнились в одном месте но после того как игрок спавнился ( если он админ то его варпает на другое место)

Link to comment

Попробуй:

AdminSpawnTimer = {} 
  
addEventHandler("onPlayerLogin", root, 
function()  
local posX = -1572.01 
local posY = 662.46 
local posZ = 7.18  
local rotation = 0 
local skin = 11 
spawnPlayer ( source, posX, posY, posZ, rotation, skin ) 
  
local accName = getAccountName ( getPlayerAccount ( source ) ) 
    if isObjectInACLGroup ("user."..accName, aclGetGroup ( "Admin" ) ) then 
        local serverDisplay = textCreateDisplay() 
        textDisplayAddObserver ( serverDisplay, source ) 
        local serverText = textCreateTextItem ( "Вы являетесь админом и поэтому будете телепортированы на админ базу в течение 3-х секунд", 0.5, 0.5 ) 
        textDisplayAddText ( serverDisplay, serverText ) 
        local nick = getPlayerName (source) 
        adminTimer[nick] = setTimer ( setAdminPos, 3000, 1, source) 
  
    end  
end 
)  
  
function setAdminPos( thePlayer ) 
local posX = -1572.01 
local posY = 662.46 
local posZ = 7.18  
  
setElementPosition ( thePlayer, posX, posY, posZ ,true) 
  
killTimer ( adminTimer[nick] ) 
  
end 

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