Jump to content
×
×
  • Create New...
  • 0

problème avec ma quête


thomasx3

Question

Domaine (Base de données, Client, Core...) : Base de donnée/Core

Votre niveau (Débutant, Intermédiaire, Avancé..) : Intermédiaire

 

Bonjour, Bonsoir,

 

J'ai un petit soucis auquel je ne trouve aucune réponse malgré de nombreuses recherches.
Lors de l'execution d'une quête utilisant MYSQL, j'ai une erreur qui s'affiche sur putty

 

Citation

Syntax error: ")" unexpected


Et la quête ne s’exécute pas du tout, savez vous d'ou cela peut t'il provenir ?

Voici la quête en question !
 

-- Quest File written by Kilroy.
-- Function: AnyShop Lua/Python/Sql
-- Questpart: 1/1
quest AnyShop begin
	state start begin
		when login begin
			cmdchat(string.format("AnyShop index/%d", q.getcurrentquestindex()))
		end
		when button begin
			cmdchat("getinputbegin")
			local INPUT = AnyShop.stringSplit(input(cmdchat("AnyShop input/")), "/")
			cmdchat("getinputend")
			if INPUT[1]=="open" then
				if not AnyShop.AntiFlood_(1, 3) then return end

				local stringTable, tableItems = {}, mysql_query("SELECT shopitems.vnum, shops.shop_id, categories.name as category, shopitems.preis, shopitems.rabatt, IFNULL(TIMESTAMPDIFF(second, NOW(), shopitems.angebot),0) as seconds, shops.suffix, categories.cat_id FROM anyshop.shopitems JOIN anyshop.shops ON shops.shop_id = shopitems.shop_id JOIN anyshop.categories ON categories.cat_id = shopitems.cat_id ORDER BY verkauft DESC;")
				if (tableItems==nil or tableItems[1]==nil) then syschat("Erreur. Configuration incorrecte dans la table 1") return end
				local tableCount = table.getn(tableItems)
				cmdchat("AnyShop ClearBoard/")


				local moneyQuery, cashs = "", mysql_query("SELECT coin_column, suffix, name, shop_id FROM anyshop.shops;")
				if (cashs==nil or cashs[1]==nil) then syschat("Erreur. Configuration incorrecte dans la table 2") return end 
				for i=1, table.getn(cashs), 1 do moneyQuery = moneyQuery..(i==1 and "" or ",")..cashs[i][1] end
				local money = mysql_query("SELECT "..moneyQuery.." FROM account.account WHERE id = "..pc.get_account_id()..";")
				if (money==nil or money[1]==nil) then syschat("Erreur. Configuration incorrecte dans la table 3") return end 
				local moneyCMD = "AnyShop config/"
				for i=1, table.getn(money[1]), 1 do moneyCMD = moneyCMD..(i==1 and "" or "|")..money[1][i]..","..cashs[i][2]..","..cashs[i][3]..","..cashs[i][4] end
				cmdchat(moneyCMD)
				item.select_cell(204)
				money = item.get_socket(0)
				cmdchat("AnyShop setmoney/3/"..money)


				if tableCount==0 then return end
				for i=1, tableCount, 1 do table.insert(stringTable, string.format("%d,%d,%s,%d,%d,%d,%s,%d", unpack(tableItems[i]))) end
				local AddToListCMD = "AnyShop AddToList/"..stringTable[1]
				for i=2, tableCount, 1 do
					if string.len(AddToListCMD)+string.len(stringTable[i])>=490 then
						cmdchat(AddToListCMD)
						AddToListCMD = "AnyShop AddToList/"..stringTable[i]
					else
						AddToListCMD = AddToListCMD.."|"..stringTable[i]
					end
					if i==tableCount then
						cmdchat(AddToListCMD)
						break
					end
				end
				cmdchat("AnyShop FinishSending/")

			elseif INPUT[1]=="buy" then
				if not AnyShop.AntiFlood_(2, 3) then return end

				local itemVnum = tonumber(INPUT[2])
				local itemCount = tonumber(INPUT[3])
				local shopId = tonumber(INPUT[4])
				
				if (itemVnum==nil or itemVnum<10) or (itemCount==nil or itemCount<1) then return end

				local choosenItem = mysql_query("SELECT shopitems.vnum, shopitems.preis, shopitems.rabatt, IFNULL(TIMESTAMPDIFF(second, NOW(), shopitems.angebot),0) as seconds, shops.coin_column, shops.suffix, shops.shop_id FROM anyshop.shopitems JOIN anyshop.shops ON shops.shop_id = shopitems.shop_id WHERE shopitems.vnum="..itemVnum.." and shopitems.shop_id="..shopId..";")
				if (choosenItem[1]~=nil or table.getn(choosenItem[1]))==0 then syschat("L'article n'est plus disponible !") return end
				local sqlVnum, itemPrice, itemRabatt, itemAngebotSek, cash, Suffix, sqlShopId = tonumber(choosenItem[1][1]),tonumber(choosenItem[1][2]),tonumber(choosenItem[1][3]),tonumber(choosenItem[1][4]),choosenItem[1][5],choosenItem[1][6],tonumber(choosenItem[1][7])
				if (sqlVnum~=itemVnum) or (sqlShopId~=shopId) then return end

				itemPrice = itemPrice * itemCount
				if (itemAngebotSek>=0 and itemRabatt>0) then
					itemPrice = itemPrice-math.floor(itemPrice*(itemRabatt/100))
				end
				
				if shopId == 1 then
					local money = mysql_query("SELECT cash FROM account.account WHERE id = "..pc.get_account_id()..";")[1][1]
					if money < itemPrice then 
						syschat("<Shop> Vous n'avez pas assez de "..Suffix.." pour cette article !") 
						cmdchat("AnyShop setmoney/"..shopId.."/"..money)
						return 
					end

					mysql_query("UPDATE account.account, anyshop.shopitems SET account.cash = account.cash-"..itemPrice..", shopitems.verkauft = shopitems.verkauft+1 WHERE account.id = "..pc.get_account_id().." AND (shopitems.vnum="..itemVnum.." AND shopitems.shop_id="..shopId..") ;")
					money = mysql_query("SELECT cash FROM account.account WHERE id = "..pc.get_account_id()..";")[1][1]
					cmdchat("AnyShop setmoney/"..shopId.."/"..money)
				--	mysql_query("INSERT INTO anyshop.islog (pseudo, id_compte, id_item, prix_item, quantite) VALUES('"..pc.get_name().."', '"..pc.get_account_id().."', '"..itemVnum.."', '"..itemPrice.."', '"..itemCount.."') ;")
					if itemVnum != 80014 and itemVnum != 80015 and itemVnum != 80016 then
						mysql_query("UPDATE account.account SET account.mileage = account.mileage+"..itemPrice.." WHERE account.id = "..pc.get_account_id()..";")
						money2 = mysql_query("SELECT mileage FROM account.account WHERE id = "..pc.get_account_id()..";")[1][1]
						local shopId2 = 2
						cmdchat("AnyShop setmoney/"..shopId2.."/"..money2)
					end

					pc.give_item2_select(itemVnum, 1)
					itemCount = itemCount - 1
					if item.has_flag(4) and itemCount>0 then
						for i=1, math.floor(itemCount/200), 1 do
							pc.give_item2(itemVnum, 200)
						end
						pc.give_item2(itemVnum, (itemCount - math.floor(itemCount/200)*200))
					else
						for i=1, itemCount, 1 do pc.give_item2(itemVnum) end
					end
				end
				if shopId == 2 then
					local money = mysql_query("SELECT mileage FROM account.account WHERE id = "..pc.get_account_id()..";")[1][1]
					if money < itemPrice then 
						syschat("<Shop> Vous n'avez pas assez de "..Suffix.." pour cette article !") 
						cmdchat("AnyShop setmoney/"..shopId.."/"..money)
						return 
					end

					mysql_query("UPDATE account.account, anyshop.shopitems SET account.mileage = account.mileage-"..itemPrice..", shopitems.verkauft = shopitems.verkauft+1 WHERE account.id = "..pc.get_account_id().." AND (shopitems.vnum="..itemVnum.." AND shopitems.shop_id="..shopId..") ;")
					money = mysql_query("SELECT mileage FROM account.account WHERE id = "..pc.get_account_id()..";")[1][1]
					cmdchat("AnyShop setmoney/"..shopId.."/"..money)
					mysql_query("INSERT INTO anyshop.islog (pseudo, id_compte, id_item, prix_item, quantite) VALUES('"..pc.get_name().."', '"..pc.get_account_id().."', '"..itemVnum.."', '"..itemPrice.."', '"..itemCount.."') ;")

					pc.give_item2_select(itemVnum, 1)
					itemCount = itemCount - 1
					if item.has_flag(4) and itemCount>0 then
						for i=1, math.floor(itemCount/200), 1 do
							pc.give_item2(itemVnum, 200)
						end
						pc.give_item2(itemVnum, (itemCount - math.floor(itemCount/200)*200))
					else
						for i=1, itemCount, 1 do pc.give_item2(itemVnum) end
					end
				end
				if shopId == 3 then
					item.select_cell(204)	
					local money = item.get_socket(0)
					if money < itemPrice then 
						syschat("<Shop> Vous n'avez pas assez de "..Suffix.." pour cette article !") 
						cmdchat("AnyShop setmoney/"..shopId.."/"..money)
						return 
					end

					item.set_socket(0, (item.get_socket(0)-itemPrice))	
					money = item.get_socket(0)
					cmdchat("AnyShop setmoney/"..shopId.."/"..money)
					mysql_query("INSERT INTO anyshop.islog (pseudo, id_compte, id_item, prix_item, quantite) VALUES('"..pc.get_name().."', '"..pc.get_account_id().."', '"..itemVnum.."', '"..itemPrice.."', '"..itemCount.."') ;")

					pc.give_item2_select(itemVnum, 1)
					itemCount = itemCount - 1
					if item.has_flag(4) and itemCount>0 then
						for i=1, math.floor(itemCount/200), 1 do
							pc.give_item2(itemVnum, 200)
						end
						pc.give_item2(itemVnum, (itemCount - math.floor(itemCount/200)*200))
					else
						for i=1, itemCount, 1 do pc.give_item2(itemVnum) end
					end
				end
			end
		end
		function stringSplit(str, sep)
			local sep, fields = sep or ",", {}
			local pattern = string.format("([^%s]+)", sep)
			string.gsub(str, pattern, function(c) table.insert(fields, c) end)
			return fields
		end
		function AntiFlood_(n, t)
			if pc.getqf("AntiFlood"..n)>get_time() then
				syschat(string.format("Veuillez patientez %d seconde avant de pouvoir effectuer un autre achat.", pc.getqf("AntiFlood"..n)-get_time()))
				return false
			end
			pc.setqf("AntiFlood"..n, get_time()+t)
			return true
		end
	end
end

Merci à tous pour vos réponses :)
 

 

En postant ma demande d'aide, j'affirme avoir lu et accepté le Règlement de Funky-Emulation.

Edited by thomasx3

Memento mei.

Link to comment
  • Answers 17
  • Created
  • Last Reply

Top Posters For This Question

Top Posters For This Question

17 answers to this question

Recommended Posts

  • 0

Oui je ne sais pas du tout d'ou vient ce probleme !

De l'execution de la query ?Donc de la fonction dans Questlib ?

 

mysql_query = function(query)
    if not pre then
        local rt = io.open('CONFIG','r'):read('*all')
        pre,_= string.gsub(rt,'.+PLAYER_SQL:%s(%S+)%s(%S+)%s(%S+)%s(%S+).+','-h%1 -u%2 -p%3 -D%4')
    end
    math.randomseed(os.time())
    local fi,t,out = 'mysql_data_'..math.random(10^9)+math.random(2^4,2^10),{},{}
    --os.execute('mysql '..pre..' --e='..string.format('%q',query)..' > '..fi) -- f? MySQL51
    os.execute('mysql '..pre..' -e'..string.format('%q',query)..' > '..fi) -- f? MySQL55
    for av in io.open(fi,'r'):lines() do table.insert(t,split(av,'\t')) end; os.remove(fi);
    for i = 2, table.getn(t) do table.foreach(t[i],function(a,b)
        out[i-1]               = out[i-1] or {}
        out[i-1][a]            = tonumber(b) or b or 'NULL'
        out[t[1][a]]           = out[t[1][a]] or {}
        out[t[1][a]][i-1]      = tonumber(b) or b or 'NULL'
    end) end
    return out
end


 

Memento mei.

Link to comment
  • 0

game/src: questlua_mysql.cpp,

à remplacer.

	// mysql_query(string) - 'returns a lua mysql table'
	int _mysql_query(lua_State* L)
	{
		string query = lua_tostring(L,1);
		SQLMsg* run = DBManager::instance().DirectQuery(query.c_str());
		MYSQL_RES* res = run->Get()->pSQLResult;
		
		//Error in the query
		if (!run) { 
			sys_err("MySQL query failed!");
			lua_pushnil(L);
			return 0;
		}
				
		if(!res) {
			lua_newtable(L);
			return 1;
		}
		
		lua_newtable(L);

		//Fetch field list
		unsigned long rowcount = 1;

		set<MYSQL_FIELD*> fieldList;
		while(MYSQL_FIELD *f = mysql_fetch_field(res)) {
			fieldList.insert(f);
		}
		
		MYSQL_ROW row;
		while (row = mysql_fetch_row(res))
		{
			lua_newtable(L);

			int i = 0;
			set<MYSQL_FIELD*>::iterator iter;
			for(iter = fieldList.begin(); iter != fieldList.end(); ++iter)
			{
				MYSQL_FIELD *f = *iter;
				lua_pushstring(L, f->name);
				lua_pushstring(L, row[i]);
				lua_settable(L, -3); //stack: [arg] table table2
				i++;
			}

			lua_pushnumber(L, rowcount);
			lua_insert(L, -2); //stack: [arg] table rowcount table2
			lua_settable(L, -3);
			rowcount++;
		}

		M2_DELETE(run);
		return 1;
	}

 

 

 

Link to comment
Guest
This topic is now closed to further replies.


  • Flux d'Activité

    1. 38

      Rodnia.net | PVM | International | The Great Conqueror |

    2. 0

      [JAVA] Starloco

    3. 0

      Recherche CMS arkalys 2021

    4. 0

      AresiaCMS

    5. 62

      [CMS] Acamar Cms

    6. 3

      Éditeur Item 2.43 à 2.53

  • Recently Browsing

    • No registered users viewing this page.

Important Information

Terms of Use / Privacy Policy / Guidelines / We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.