Forum > Serverside Modding
Code Redeemer Script problem
(1/1)
Kobiesan:
I'm using this code redeemer script but it has some issues. When I enter my passphrases it does not work unless I copy paste them. However, if the code is under 3 characters long I can manually enter it without copy pasting it and it will work. Does anyone know what's wrong?
--- Code: -----[[ - Redeemer script: This script allows players to redeem predetermined passphrases given out during events etc. Passphrases are stored in its own table in the database, as well as the rewards that are tied to the said passphrase. Once a passphrase is redeemed, it will be marked as redeemed in the database, as well as what player redeemed it and date/time it was redeemed. The passphrase will then be unavailable for future use.' - Table structure query: DROP TABLE IF EXISTS `redemption`; CREATE TABLE `redemption` ( `passphrase` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, `type` int(32) NOT NULL DEFAULT '0', `entry` int(32) NOT NULL DEFAULT '0', `count` int(32) NOT NULL DEFAULT '0', `redeemed` int(32) NOT NULL DEFAULT '0', `player_guid` int(32) DEFAULT NULL, `date` varchar(32) DEFAULT NULL, PRIMARY KEY (`passphrase`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; - Available types of code redemptions: 1: Item -- entry = item entry, count = item count 2: Title -- entry = title id, count = 0 3: Money -- entry = 0, count = copper amount ]] local Redeemer = { Entry = 44005 } function Redeemer.LoadCache(event) Redeemer["Cache"] = {} local Query = CharDBQuery("SELECT * FROM redemption;"); if(Query)then repeat if(Query:GetUInt32(4) ~= 1) then Redeemer["Cache"][Query:GetString(0)] = { -- passphrase rtype = Query:GetUInt32(1), entry = Query:GetUInt32(2), count = Query:GetUInt32(3) -- redeemed -- player_guid -- date }; end until not Query:NextRow() end end function Redeemer.OnGossipHello(event, player, unit) player:GossipMenuAddItem(0, "I would like to redeem my secret code.", 0, 1, true, "Once a code is used it cannot be used anymore. Do you accept?") if(player:IsGM()) then player:GossipMenuAddItem(0, "Refresh passphrases.", 0, 2) end player:GossipSendMenu(1, unit) end function Redeemer.OnGossipSelect(event, player, object, sender, intid, code) if (intid == 1) then local sCode = tostring(code) if(Redeemer["Cache"][sCode]) then local rtype, entry, count = Redeemer["Cache"][sCode]["rtype"], Redeemer["Cache"][sCode]["entry"], Redeemer["Cache"][sCode]["count"] if(rtype == 1) then player:AddItem(entry, count) elseif(rtype == 2) then player:SetKnownTitle(entry) elseif(rtype == 3) then player:ModifyMoney(count) else player:SendAreaTriggerMessage("ERROR: Redemption failed, wrong redemption type. Please report to developers.") return; end player:SendAreaTriggerMessage("Congratulations! Your code has been successfully redeemed!.") CharDBExecute("UPDATE redemption SET redeemed=1, player_guid="..player:GetGUIDLow()..", date='"..os.date("%x, %X", os.time()).."' WHERE BINARY passphrase='"..sCode.."';"); Redeemer["Cache"][sCode] = nil; else player:SendAreaTriggerMessage("You have entered an invalid code, or code has already been redeemed.") end elseif(intid == 2) then Redeemer.LoadCache() player:SendAreaTriggerMessage("Available passphrases have been refreshed.") end player:GossipComplete() end RegisterServerEvent(14, Redeemer.LoadCache) RegisterCreatureGossipEvent(Redeemer.Entry, 1, Redeemer.OnGossipHello) RegisterCreatureGossipEvent(Redeemer.Entry, 2, Redeemer.OnGossipSelect) --- End code ---
Navigation
[0] Message Index
|