Jump to content

Randomword executeSQLUpdate


h4x7o0r

Recommended Posts

Hey there . I've tried to change a lil bit this script : https://community.multitheftauto.com/index.php?p= ... ls&id=4472 (done by Al3grab) to work on with race_starter_pack. This resource keeps the money in elementdata so to make it work it needs some changes.

I've done the part to add the prize to player's money but i don't know how can i save this to the database. The money is updated as long as i'm online. When i reconnect, it shows me the money that i've had before winning the prize.

So i don;t know how to update the database table when someone's winning.

Here's what i've done changed :

  
function onPlayerWin(player) 
local money1 = tonumber(getElementData(player,"Money")) 
    outputChatBox("* "..getPlayerName(player).." #FFFF00Has won the Prize #00FF00$"..thePrize,root,255,255,0,true) 
    setElementData(player, "Money", money1+thePrize) 
    givePlayerMoney(player,thePrize) 
    executeSQLUpdate ( "MoneyB", "Money = '"..Money.."'","serial = '" .. serial .. "'") 
    removeCode() 
end 

I think my problem is at executeSQLUpdate.

Thanks in advance guys.

Link to comment
function onPlayerWin ( player ) 
    local money1 = tonumber ( getElementData ( player, "Money" ) ) 
    outputChatBox("* ".. getPlayerName ( player ).." #FFFF00Has won the Prize #00FF00$".. thePrize, root, 255, 255, 0, true ) 
    setElementData ( player, "Money", money1 + thePrize ) 
    givePlayerMoney ( player, thePrize ) 
    executeSQLUpdate ( "MoneyB", "Money = '".. getPlayerMoney ( player ) .."'","serial = '" .. serial .. "'" ) 
    removeCode ( ) 
end 

Try that.

Link to comment
function onPlayerWin(player) 
    local money1 = tonumber(getElementData(player,"Money")) 
    outputChatBox("* "..getPlayerName(player).." #FFFF00Has won the Prize #00FF00$"..thePrize,root,255,255,0,true) 
    setElementData(player, "Money", money1+thePrize) 
    givePlayerMoney(player,thePrize) 
    local serial = getPlayerSerial ( player ) 
    executeSQLUpdate ( "MoneyB", "Money = '"..tostring(getPlayerMoney ( player )).."'","serial = '" .. serial .. "'") 
    removeCode() 
end 

try this.

if there is any problem, you must put all your code here.

another thing, i don't thing that using serial is a good idea, because maybe the player wana join the server from diffrent computer. :mrgreen:

Link to comment

Sorry guys that i haven't checked the topic. First, thank you everyone for the answers.

2nd : I've tried Bssol's modified code and it says :

attempt to concatenate global 'serial' (a nil value)

3nd : Kenix, i haven't posted all the code because it's inside the resource

--***********************************-- 
--***********************************-- 
--           Random Words            -- 
--            By Al3grab             -- 
--***********************************-- 
--***********************************-- 
  
---- Changeable 
captchaNums = 5 -- captcha letters length 
wordTimeInSec = 25 --- the time before the word disappear in seconds [ default 11 seconds ] 
prizefrom,prizeto = 500,800 -- the prize random num 
timerfrom,timerto = 1.5,5.5 -- the random timer that shows the word [ default from 3 to 15 minutes ] 
---- unChangeable 
wordOn = false 
theWord = nil 
thePrize = nil 
wordTime = wordTimeInSec * 1000 
  
-- 
outputDebugString("Random Words By Al3grab | Started") 
-- 
function createCode(code,prize) 
    for k,v in ipairs( getElementsByType("player") ) do 
        exports.easytext:displayMessageForPlayer(v,1, "=========", wordTime, 0.07, 0.5, 0, 255, 0, 255, 1.6) 
        exports.easytext:displayMessageForPlayer(v,2, "Word : "..code.."", wordTime, 0.07, 0.533, 255, 255, 0, 255, 1.6) 
        exports.easytext:displayMessageForPlayer(v,3, "Prize : "..prize.."$", wordTime, 0.07, 0.563, 255, 255, 0, 255, 1.6) 
        exports.easytext:displayMessageForPlayer(v,4, "=========", wordTime, 0.07, 0.593, 0, 255, 0, 255, 1.6) 
    end 
outputChatBox("- Random Words : #FFFF00Enter the word shown below to win the prize.",root,0,255,0,true) 
outputChatBox("=========",root,0,255,0,true) 
outputChatBox("Word : "..code.."",root,255,255,0,true) 
outputChatBox("Prize : "..prize.."$",root,255,255,0,true) 
outputChatBox("=========",root,0,255,0,true) 
outputChatBox("- #FFFF00You can see the word down on your screen.",root,0,255,0,true) 
-- 
startCodeTimer() 
wordOn = true 
end 
  
function makeRandomCode(Word,Prize) 
    if ( Word and Prize ) then 
        theWord = Word 
        thePrize = Prize 
    else 
        theWord =  makeCaptcha(captchaNums) 
        thePrize = math.random(prizefrom,prizeto) 
    end 
    if ( tostring(theWord) and tonumber(thePrize) ) then 
        createCode(theWord,thePrize) 
    end 
end 
  
function startCodeTimer() 
    codeTimer = setTimer( function () 
        removeCode() 
        outputChatBox("- #FFFF00No one won the prize",root,0,255,0,true) 
    end , wordTime , 1 ) 
end 
  
function removeCode() 
    for k,v in ipairs( getElementsByType("player") ) do 
        exports.easytext:clearMessageForPlayer(v,1) 
        exports.easytext:clearMessageForPlayer(v,2) 
        exports.easytext:clearMessageForPlayer(v,3) 
        exports.easytext:clearMessageForPlayer(v,4) 
    end 
    if isTimer ( codeTimer ) then 
        killTimer(codeTimer) 
    end 
    theWord = nil 
    thePrize = nil 
    wordOn = false 
end 
  
function makeCaptcha(capNumz) 
 theC = "" 
  tCode = { "a","A", "b","B", "c","C", "d","D", "e","E", "f","F", "g","G", "h","H", "j","J", "k","K", "l","L", "m","L", "n","N", "o","O", "p","P", "q","Q", "r","R", "s","S", "t","T", "u","U", "v","V", "x","X", "y","Y", "z","Z", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "!", "@", "#", "?" } 
for k=1,capNumz or 5 do 
  randomCode = math.random (#tCode ) 
  theC = ""..theC..""..tCode[randomCode].."" 
end 
            return theC 
end 
  
    function onPlayerWin ( player ) 
        local money1 = tonumber ( getElementData ( player, "Money" ) ) 
        outputChatBox("* ".. getPlayerName ( player ).." #FFFF00Has won the Prize #00FF00$".. thePrize, root, 255, 255, 0, true ) 
        setElementData ( player, "Money", money1 + thePrize ) 
        givePlayerMoney ( player, thePrize ) 
        executeSQLUpdate ( "MoneyB", "Money = '".. getPlayerMoney ( player ) .."'","serial = '" .. serial .. "'" ) 
        removeCode ( ) 
    end 
  
function detcetChatMessage(msg,msgtype) 
    if ( wordOn == true and msg and msgtype == 0 ) then 
        if msg == theWord then 
            onPlayerWin(source) 
        end 
    end 
end 
addEventHandler("onPlayerChat",root,detcetChatMessage) 
  
addEventHandler("onResourceStop",resourceRoot,function() 
    removeCode() 
end ) 
  
function setRandomTimer() 
    setTimer(function() 
        if not wordOn then 
            makeRandomCode() 
        end 
            setRandomTimer() 
    end , math.random(timerfrom,timerto) * 60 * 1000 , 1 ) 
end 
  
addEventHandler("onResourceStart",resourceRoot,function() setRandomTimer() 
    easytext = getResourceFromName("easytext") 
    if ( easytext  ) then 
        if getResourceState(easytext) == "loaded" then 
        startResource(easytext) 
        end 
    else 
        outputChatBox("* Error , need for easytext resource to start") 
        cancelEvent() 
    end 
end ) 
  
for k,v in ipairs ( {"randomcode","randomword","rw","rd"} ) do 
addCommandHandler(v,function(plr,cmd,prize,...) 
    if plr and hasObjectPermissionTo(plr,"function.kickPlayer") then 
        if ( not prize ) then 
            makeRandomCode() 
        else 
            word = table.concat({...}, " ") 
            if ( word ) then 
                makeRandomCode(word,prize) 
            end 
        end 
    end 
end ) 
end  

Link to comment
--***********************************-- 
--***********************************-- 
--           Random Words            -- 
--            By Al3grab             -- 
--***********************************-- 
--***********************************-- 
  
---- Changeable 
captchaNums = 5 -- captcha letters length 
wordTimeInSec = 25 --- the time before the word disappear in seconds [ default 11 seconds ] 
prizefrom,prizeto = 500,800 -- the prize random num 
timerfrom,timerto = 1.5,5.5 -- the random timer that shows the word [ default from 3 to 15 minutes ] 
---- unChangeable 
wordOn = false 
theWord = nil 
thePrize = nil 
wordTime = wordTimeInSec * 1000 
  
-- 
outputDebugString("Random Words By Al3grab | Started") 
-- 
function createCode(code,prize) 
    for k,v in ipairs( getElementsByType("player") ) do 
        exports.easytext:displayMessageForPlayer(v,1, "=========", wordTime, 0.07, 0.5, 0, 255, 0, 255, 1.6) 
        exports.easytext:displayMessageForPlayer(v,2, "Word : "..code.."", wordTime, 0.07, 0.533, 255, 255, 0, 255, 1.6) 
        exports.easytext:displayMessageForPlayer(v,3, "Prize : "..prize.."$", wordTime, 0.07, 0.563, 255, 255, 0, 255, 1.6) 
        exports.easytext:displayMessageForPlayer(v,4, "=========", wordTime, 0.07, 0.593, 0, 255, 0, 255, 1.6) 
    end 
outputChatBox("- Random Words : #FFFF00Enter the word shown below to win the prize.",root,0,255,0,true) 
outputChatBox("=========",root,0,255,0,true) 
outputChatBox("Word : "..code.."",root,255,255,0,true) 
outputChatBox("Prize : "..prize.."$",root,255,255,0,true) 
outputChatBox("=========",root,0,255,0,true) 
outputChatBox("- #FFFF00You can see the word down on your screen.",root,0,255,0,true) 
-- 
startCodeTimer() 
wordOn = true 
end 
  
function makeRandomCode(Word,Prize) 
    if ( Word and Prize ) then 
        theWord = Word 
        thePrize = Prize 
    else 
        theWord =  makeCaptcha(captchaNums) 
        thePrize = math.random(prizefrom,prizeto) 
    end 
    if ( tostring(theWord) and tonumber(thePrize) ) then 
        createCode(theWord,thePrize) 
    end 
end 
  
function startCodeTimer() 
    codeTimer = setTimer( function () 
        removeCode() 
        outputChatBox("- #FFFF00No one won the prize",root,0,255,0,true) 
    end , wordTime , 1 ) 
end 
  
function removeCode() 
    for k,v in ipairs( getElementsByType("player") ) do 
        exports.easytext:clearMessageForPlayer(v,1) 
        exports.easytext:clearMessageForPlayer(v,2) 
        exports.easytext:clearMessageForPlayer(v,3) 
        exports.easytext:clearMessageForPlayer(v,4) 
    end 
    if isTimer ( codeTimer ) then 
        killTimer(codeTimer) 
    end 
    theWord = nil 
    thePrize = nil 
    wordOn = false 
end 
  
function makeCaptcha(capNumz) 
    theC = "" 
    tCode = { "a","A", "b","B", "c","C", "d","D", "e","E", "f","F", "g","G", "h","H", "j","J", "k","K", "l","L", "m","L", "n","N", "o","O", "p","P", "q","Q", "r","R", "s","S", "t","T", "u","U", "v","V", "x","X", "y","Y", "z","Z", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "!", "@", "#", "?" } 
    for k=1,capNumz or 5 do 
        randomCode = math.random (#tCode ) 
        theC = ""..theC..""..tCode[randomCode].."" 
    end 
  
    return theC 
end 
  
function onPlayerWin ( player ) 
    local money1 = tonumber ( getElementData ( player, "Money" ) ) 
    local serial = getPlayerSerial ( player ) 
    outputChatBox("* ".. getPlayerName ( player ).." #FFFF00Has won the Prize #00FF00$".. thePrize, root, 255, 255, 0, true ) 
    setElementData ( player, "Money", money1 + thePrize ) 
    givePlayerMoney ( player, thePrize ) 
    executeSQLUpdate ( "MoneyB", "Money = '".. getPlayerMoney ( player ) .."'","serial = '" .. serial .. "'" ) 
    removeCode ( ) 
end 
  
function detectChatMessage(msg,msgtype) 
    if ( wordOn == true and msg and msgtype == 0 ) then 
        if msg == theWord then 
            onPlayerWin(source) 
        end 
    end 
end 
addEventHandler("onPlayerChat",root,detectChatMessage) 
  
addEventHandler("onResourceStop",resourceRoot,function() 
    removeCode() 
end ) 
  
function setRandomTimer() 
    setTimer(function() 
        if not wordOn then 
            makeRandomCode() 
        end 
            setRandomTimer() 
    end , math.random(timerfrom,timerto) * 60 * 1000 , 1 ) 
end 
  
addEventHandler("onResourceStart",resourceRoot,function() setRandomTimer() 
    easytext = getResourceFromName("easytext") 
    if ( easytext  ) then 
        if getResourceState(easytext) == "loaded" then 
        startResource(easytext) 
        end 
    else 
        outputChatBox("* Error , need for easytext resource to start") 
        cancelEvent() 
    end 
end ) 
  
for k,v in ipairs ( {"randomcode","randomword","rw","rd"} ) do 
addCommandHandler(v,function(plr,cmd,prize,...) 
    if plr and hasObjectPermissionTo(plr,"function.kickPlayer") then 
        if ( not prize ) then 
            makeRandomCode() 
        else 
            word = table.concat({...}, " ") 
            if ( word ) then 
                makeRandomCode(word,prize) 
            end 
        end 
    end 
end ) 
end 

Link to comment

Thank you for reply. I've just tested the code and it looks like now it's updating the database but in a wrong matter. For example now if before code type u have : 1000 money and the prize is 511 after u win the prize it erase all the money that u have before and keeps only the prize for global money. This is applicable just after reconnecting.

LE: So now i've it's working very well

i've changed this :

        executeSQLUpdate ( "MoneyB", "Money = '".. getPlayerMoney ( player ) + thePrize .."'","serial = '" .. serial .. "'" )  

with this :

         executeSQLUpdate ( "MoneyB", "Money = '".. money1 + thePrize .."'","serial = '" .. serial .. "'" )  

Thanks a lot for your help solidsnake14 !

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