h4x7o0r Posted April 23, 2012 Share Posted April 23, 2012 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
Castillo Posted April 23, 2012 Share Posted April 23, 2012 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
h4x7o0r Posted April 23, 2012 Author Share Posted April 23, 2012 Thank you for reply. I've tried the code but same result / no update after reconnect. Link to comment
Castillo Posted April 23, 2012 Share Posted April 23, 2012 I guess after quitting it'll save the money again, so maybe there's the problem. Link to comment
h4x7o0r Posted April 23, 2012 Author Share Posted April 23, 2012 I don't know , probably. Anyway thanks for reply. Link to comment
Al3grab Posted April 23, 2012 Share Posted April 23, 2012 i don't know much in SQL , but i think 'serial' is not defined executeSQLUpdate ( "MoneyB", "Money = '".. getPlayerMoney ( player ) .."'","serial = '" .. serial.. "'" Link to comment
Kenix Posted April 23, 2012 Share Posted April 23, 2012 h4x7o0r Use /debugscript 3 please. Link to comment
Bssol Posted April 23, 2012 Share Posted April 23, 2012 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. Link to comment
Castillo Posted April 23, 2012 Share Posted April 23, 2012 i don't know much in SQL , but i think 'serial' is not definedexecuteSQLUpdate ( "MoneyB", "Money = '".. getPlayerMoney ( player ) .."'","serial = '" .. serial.. "'" Oh, how I didn't see that Link to comment
Moderators IIYAMA Posted April 23, 2012 Moderators Share Posted April 23, 2012 Where will SQL be saved? At wiki they say it will be saved at a "database". But do you need other software to create a database or will this database be created at the mta server? Link to comment
Castillo Posted April 23, 2012 Share Posted April 23, 2012 SQLite is saved at: "server\mods\deathmatch\registry.db". Link to comment
Al3grab Posted April 24, 2012 Share Posted April 24, 2012 Oh, how I didn't see that i thought its pre-defined in 'executeSQLUpdate' function , Since you did not defined it. Link to comment
h4x7o0r Posted April 24, 2012 Author Share Posted April 24, 2012 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
Castillo Posted April 25, 2012 Share Posted April 25, 2012 --***********************************-- --***********************************-- -- 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
h4x7o0r Posted April 25, 2012 Author Share Posted April 25, 2012 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
qaisjp Posted April 26, 2012 Share Posted April 26, 2012 h4x7o0r Use /debugscript 3 please. *offtopic* leetspeek is considered inferiority on the internet, volk. http://www.urbandictionary.com/define.p ... =leetspeak Link to comment
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now