Jump to content

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


Recommended Posts

Все равно не догоняю.

Код теперь должен быть такой?

  
 function getlvl (player, cmd, account) 
 local player = getPlayerAccount( player ) 
 local myLevel = getAccountData (player, "lvl.value" ) 
 outputChatBox ( "Your account level is: ".. myLevel .. "лол", player) 
end 
addCommandHandler ( "mylevel", getlvl) 
  

Если база такая:

http://prntscr.com/2r0x94

Link to comment
Все равно не догоняю.

Код теперь должен быть такой?

  
 function getlvl (player, cmd, account) 
 local player = getPlayerAccount( player ) 
 local myLevel = getAccountData (player, "lvl.value" ) 
 outputChatBox ( "Your account level is: ".. myLevel .. "лол", player) 
end 
addCommandHandler ( "mylevel", getlvl) 
  

Если база такая:

http://prntscr.com/2r0x94

Вот так нужно

local myLevel = getAccountData (player, "lvl" ) 

Link to comment
Все равно не догоняю.

Код теперь должен быть такой?

  
 function getlvl (player, cmd, account) 
 local player = getPlayerAccount( player ) 
 local myLevel = getAccountData (player, "lvl.value" ) 
 outputChatBox ( "Your account level is: ".. myLevel .. "лол", player) 
end 
addCommandHandler ( "mylevel", getlvl) 
  

Если база такая:

http://prntscr.com/2r0x94

Вот так нужно

local myLevel = getAccountData (player, "lvl" ) 

Первый аргумент у функции getAccountData это указатель на аккаунт, а не на игрока.

Link to comment
  • Other Languages Moderators

Первый аргумент у функции getAccountData это указатель на аккаунт, а не на игрока.

Круче совета дать не мог?

local player = getPlayerAccount( player ) 
 local myLevel = getAccountData (player, "lvl.value" ) 

Link to comment

Первый аргумент у функции getAccountData это указатель на аккаунт, а не на игрока.

Круче совета дать не мог?

local player = getPlayerAccount( player ) 
 local myLevel = getAccountData (player, "lvl.value" ) 

Про эту строку не забывай, выведет ошибку

outputChatBox ( "Your account level is: ".. myLevel .. "лол", player) 

т.к там должен быть элемент, а не указатель на аккаунт.

Вот вам готовый код

      
function PrintAccountLevel( player ) 
    local account = getPlayerAccount( player ); 
    local lvl = getAccountData( account, "lvl" ) or 0; 
    outputChatBox( "Your account level is: " .. lvl, player ); 
end 
addCommandHandler ( "mylevel", PrintAccountLevel ); 

Link to comment

И все же я получаю:

getlevel.lua:4: attempt to concatenate local 'lvl' (a boolean value) 

Хотя в юзердате есть строчка "lvl".

И вообще есть ли документация насчет баз данных в MTA?

А то я хер пойми куда записывается все.

Link to comment
  • Other Languages Moderators
И все же я получаю:

getlevel.lua:4: attempt to concatenate local 'lvl' (a boolean value) 

Хотя в юзердате есть строчка "lvl".

И вообще есть ли документация насчет баз данных в MTA?

А то я хер пойми куда записывается все.

Хранится все в SQLite бд в файле internal.db

Link to comment
  • Other Languages Moderators
Я знаю.

Строчка lvl есть,в ней есть цифры "123"

При вывыоде он строчку lvl не видит.

Чую пока придется юзать .xml файлы для акка.

Скриншот дайте.

P.S xml вообще не нужен.

Link to comment
  • Other Languages Moderators
Тогда вопрос:

Откуда таксказать скрипт поймет с какого аккаунта брать lvl?

Там же не написан акк или ид акка,даже после регистрации.

getAccountData ( account TheAcc, string key )

Link to comment

Можно делать, как было в коде Kenix: ставить "or 'defaultValue" после getAccountData. После выхода игрока заносить данные в таблицу. Таким образом решится проблема с начальным значением и упростится работа с добавлением новых ключей.

Link to comment

Вот, держи, это сначала тебе занесет введеное в коменде значение в базу, тебе потом легче понимать будет, что там и как.

function getlvl (player, cmd, lvl) 
 local player = getPlayerAccount( player ) 
 setAccountData (player, "lvl",lvl ) 
 --outputChatBox ( "Your account level is: ".. myLevel .. "лол", player) 
end 
addCommandHandler ( "mylevel", getlvl) 

Оффтоп:

Можно делать, как было в коде Kenix: ставить "or 'defaultValue" после getAccountData. После выхода игрока заносить данные в таблицу. Таким образом решится проблема с начальным значением и упростится работа с добавлением новых ключей.

Я так понял он не хочет сейчас ничего туда заносить, а хотит поковырятся с бд вручную. И начальных у него значений не было, он хотел считать 123 из базы.

Link to comment

Возможно ли полностью отключить "смерть" в моде? То есть, чтобы события PlayerWasted не существовало в принципе. Но при этом, чтобы ХП всё же отнималось вплоть до 1. (то есть максимум ХП 100, минимум 1)

Я пытался сделать что-то подобное через onPlayerDamage, восстанавливать ХП от полученного урона, но это совсем не то. Это событие, насколько я понял, срабатывает только от урона, причиняемого другими игроками, а если например упадешь с крыши, не срабатывает.

Надо как-то отключить PlayerWasted.

Link to comment

client

function restrictDamage ( attacker, attackerWeapon, bodypart, loss ) 
    local theHealth = getElementHealth ( localPlayer ) 
    if ( loss >= theHealth ) then 
       triggerServerEvent ( "healthPlayer", localPlayer, 1) 
     else 
       triggerServerEvent ( "healthPlayer", localPlayer, loss) 
    end 
    cancelEvent ( ) 
end 
addEventHandler ( "onClientPlayerDamage", root, restrictDamage ) 

server

function restrictDamageServer ( loss ) 
   if ( loss == 1 ) then 
      setElementHealth ( source, loss ) 
    else 
      local theHealth = getElementHealth ( source ) 
      setElementHealth ( source, theHealth - loss ) 
   end 
end 
addEvent ( "healthPlayer", true ) 
addEventHandler ( "healthPlayer", getRootElement(), restrictDamageServer ) 

Link to comment

Memory, блин, это просто супер круто!! Спасибо огромное! Действительно работает: пробовал взорваться гранатой, прыгать с крыш, тонуть в воде!

Kernell, а что, было бы довольно неплохо :)

Link to comment
  • Other Languages Moderators
Memory, блин, это просто супер круто!! Спасибо огромное! Действительно работает: пробовал взорваться гранатой, прыгать с крыш, тонуть в воде!

Kernell, а что, было бы довольно неплохо :)

его код сработает.

Link to comment
Memory, блин, это просто супер круто!! Спасибо огромное! Действительно работает: пробовал взорваться гранатой, прыгать с крыш, тонуть в воде!

Kernell, а что, было бы довольно неплохо :)

его код сработает.

Попробовал на всякий случай, потонул :)

Кстати, на счет кода Memory, я въехал в заправку на машине, всё-таки умер. Но думаю можно сделать так, чтобы в таком случае игрок появлялся рядом с машиной с 1 хп, используя onClientVehicleDamage, немного позже обязательно займусь этим.

Link to comment
Вот, держи, это сначала тебе занесет введеное в коменде значение в базу, тебе потом легче понимать будет, что там и как.
function getlvl (player, cmd, lvl) 
 local player = getPlayerAccount( player ) 
 setAccountData (player, "lvl",lvl ) 
 --outputChatBox ( "Your account level is: ".. myLevel .. "лол", player) 
end 
addCommandHandler ( "mylevel", getlvl) 

Оффтоп:

Можно делать, как было в коде Kenix: ставить "or 'defaultValue" после getAccountData. После выхода игрока заносить данные в таблицу. Таким образом решится проблема с начальным значением и упростится работа с добавлением новых ключей.

Я так понял он не хочет сейчас ничего туда заносить, а хотит поковырятся с бд вручную. И начальных у него значений не было, он хотел считать 123 из базы.

Очень странно но это помогло.

У меня есть фун-ция в регистрации которая устанавливает уровень.

Спасибо вообщем.

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