Jump to content

Littile help with Xml ;)


Blaawee

Recommended Posts

i'm trying to get vehicle id and name from the freeroam resource and inserted in table, but it seems not working

i'm not good in Xml :roll:

g_id = {} 
g_name = {} 
  
addEventHandler("onResourceStart", root, 
    function() 
        local index  = 0 
        xml = xmlLoadFile( ":Ws_freeroam/xml/vehicles.xml" ) 
        tag = xmlFindChild( xml, "group", index ) 
        cars = xmlFindChild( tag, "vehicle", index ) 
        while cars do  
            table.insert( g_id, tonumber( xmlNodeGetAttribute( cars, "id" ) ) ) 
            table.insert( g_name, xmlNodeGetAttribute( cars, "name" ) ) 
            index = index + 1 
        end 
    xmlUnloadFile( xml ) 
    end 
) 
  
addEventHandler ("onPlayerVehicleEnter", root, 
    function( vehicle ) 
        for id, name in ipairs( g_id ) do 
            if name == getElementModel( vehicle ) then 
                triggerClientEvent( source, "ShowCarName", root, g_name[id] ) 
            end 
        end 
    end 
) 

Link to comment

your error is here:

  
       -- first you execute it on the first element (index 0) 
        tag = xmlFindChild( xml, "group", index )      
        cars = xmlFindChild( tag, "vehicle", index )    
      -- then you go into a loop 
        while cars do                                               
            table.insert( g_id, tonumber( xmlNodeGetAttribute( cars, "id" ) ) ) 
            table.insert( g_name, xmlNodeGetAttribute( cars, "name" ) ) 
            -- index ups, but it has no effect since you need to redefine 'cars' 
            index = index + 1 
        end 
  

this isnt supposed to look like a half assed reply, I hope this budges you in the right direction since it's not really a XML skills related thing but more a logical error

edit: actually that double xmlFindChild doesn't make sense either, only if every has only one . you'll need to add a second loop

Link to comment

you mean like this ?!

g_id = {} 
g_name = {} 
  
addEventHandler("onResourceStart", root, 
    function() 
        local index  = 0 
        local xml = xmlLoadFile( ":Ws_freeroam/xml/vehicles.xml" ) 
        local tag = xmlFindChild( xml, "group", index ) 
        local idName = xmlNodeGetAttribute( tag, "name" ) 
         
        while idName do  
            tag = xmlFindChild( xml, "group", index ) 
            idName = xmlNodeGetAttribute( tag, "name" ) 
            index = index + 1 
        end 
         
        index = 0 
         
        local cars = xmlFindChild( tag, "vehicle", index ) 
  
        while cars do 
            table.insert( g_id, tonumber( xmlNodeGetAttribute( cars, "id" ) ) ) 
            table.insert( g_name, xmlNodeGetAttribute( cars, "name" ) ) 
            index = index + 1 
            cars = xmlFindChild( tag, "vehicle", index ) 
        end 
        xmlUnloadFile( xml ) 
    end 
) 
  
addEventHandler ("onPlayerVehicleEnter", root, 
    function( vehicle ) 
        for id, name in ipairs( g_id ) do 
            if name == getElementModel( vehicle ) then 
                triggerClientEvent( source, "ShowCarName", root, g_name[id] ) 
            end 
        end 
    end 
) 

that's what i did !

Edited by Guest
Link to comment

I was thinking of this:

(tested for syntax, but not for functionality)

  
g_id = {} 
g_name = {} 
  
addEventHandler("onResourceStart", root, 
    function() 
        local iG = 0 
        local iC = 0 
        local xml = xmlLoadFile( ":Ws_freeroam/xml/vehicles.xml" ) 
        local group 
  
        -- for every  in your xml file.... 
        group = xmlFindChild( xml, "group", iG ) 
        while group do  
  
            local cars 
            local idName = xmlNodeGetAttribute( group, "name" ) -- this is an unused variable btw 
  
            -- check every car element in that group... 
            cars = xmlFindChild( group, "vehicle", iC ) 
            while cars do 
             
                -- insert it into this table 
                table.insert( g_id, tonumber( xmlNodeGetAttribute( cars, "id" ) ) ) 
                table.insert( g_name, xmlNodeGetAttribute( cars, "name" ) ) 
     
                -- go to the next car in the group 
                iC = iC + 1 
                cars = xmlFindChild( group, "vehicle", iC ) 
            end 
     
            -- go to the next group in the xml file 
            iG = iG + 1 
            group = xmlFindChild( xml, "group", iG ) 
        end 
        xmlUnloadFile( xml ) 
    end 
) 
  
addEventHandler ("onPlayerVehicleEnter", root, 
    function( vehicle ) 
        for id, name in ipairs( g_id ) do 
            if name == getElementModel( vehicle ) then 
                triggerClientEvent( source, "ShowCarName", root, g_name[id] ) 
            end 
        end 
    end 
) 
  

Link to comment

it's seems loping for one group

when i try out pot the 'g_id' table it's give this :

Ambulance: 416 
Barracks: 433 
Enforcer: 427 
FBI rancher: 490 
FBI truck: 528 
Fire truck: 407 
Fire truck (ladder): 544 
Police car (LS): 596 
Police car (LV): 598 
Police car (SF): 597 
Police ranger: 599 
S.W.A.T.: 601 

here is the .xml

type="vehicle"> 
    "Modded Vehicles"> 
        "Vehicles"> 
            "507" name="1.   Camry [2005]" /> 
            "436" name="2.   Camry [2010]" /> 
            "426" name="3.   Camry [2002]" /> 
            "555" name="4.   Cheverlot Aveo" /> 
            "547" name="5.   Ford Crown Victoria" /> 
            "579" name="6.   GMC" /> 
            "492" name="7.   Panorama" /> 
            "550" name="8.   Lexus [550]" /> 
            "527" name="9.   BMW" /> 
            "445" name="10. Toyota Aiuron" /> 
            "479" name="11. Toyota Hilux" /> 
            "560" name="12. Hundai Ellentra" /> 
            "546" name="13. Nissan Detsun" /> 
            "529" name="14. Chevrlot Capris" /> 
        
    
    "Bikes"> 
        "Motorbikes"> 
            "581" name="BF-400" /> 
            "462" name="Faggio" /> 
            "521" name="FCR-900" /> 
            "463" name="Freeway" /> 
            "523" name="HPV1000" /> 
            "522" name="NRG-500" /> 
            "461" name="PCJ-600" /> 
            "448" name="Pizza Boy" /> 
            "468" name="Sanchez" /> 
            "586" name="Wayfarer" /> 
            "471" name="Quadbike" /> 
        
        "Bicycles"> 
            "509" name="Bike" /> 
            "481" name="BMX" /> 
            "510" name="Mountain bike" /> 
        
    
    "Cars"> 
        "Sports Cars"> 
            "602" name="Alpha" /> 
            "429" name="Banshee" /> 
            "541" name="Bullet" /> 
            "415" name="Cheetah" /> 
            "480" name="Comet" /> 
            "562" name="Elegy" /> 
            "587" name="Euros" /> 
            "565" name="Flash" /> 
            "411" name="Infernus" /> 
            "559" name="Jester" /> 
            "603" name="Phoenix" /> 
            "506" name="Super GT" /> 
            "451" name="Turismo" /> 
            "558" name="Uranus" /> 
            "555" name="Windsor" /> 
            "477" name="ZR-350" /> 
        
        "Lowriders"> 
            "536" name="Blade" /> 
            "575" name="Broadway" /> 
            "518" name="Buccaneer" /> 
            "419" name="Esperanto" /> 
            "534" name="Remington" /> 
            "567" name="Savanna" /> 
            "535" name="Slamvan" /> 
            "576" name="Tornado" /> 
            "412" name="Voodoo" /> 
        
        "2-Door"> 
            "496" name="Blista Compact" /> 
            "401" name="Bravura" /> 
            "527" name="Cadrona" /> 
            "542" name="Clover" /> 
            "533" name="Feltzer" /> 
            "526" name="Fortune" /> 
            "474" name="Hermes" /> 
            "545" name="Hustler" /> 
            "517" name="Majestic" /> 
            "410" name="Manana" /> 
            "436" name="Previon" /> 
            "475" name="Sabre" /> 
            "549" name="Tampa" /> 
            "491" name="Virgo" /> 
        
        "4-Door"> 
            "445" name="Admiral" /> 
            "438" name="Cabbie" /> 
            "585" name="Emperor" /> 
            "466" name="Glendale" /> 
            "492" name="Greenwood" /> 
            "546" name="Intruder" /> 
            "551" name="Merit" /> 
            "516" name="Nebula" /> 
            "467" name="Oceanic" /> 
            "426" name="Premier" /> 
            "405" name="Sentinel" /> 
            "409" name="Stretch" /> 
            "550" name="Sunrise" /> 
            "566" name="Tahoma" /> 
            "420" name="Taxi" /> 
            "540" name="Vincent" /> 
            "421" name="Washington" /> 
            "529" name="Willard" /> 
        
    
    "Emergency"> 
        "416" name="Ambulance" /> 
        "433" name="Barracks" /> 
        "427" name="Enforcer" /> 
        "490" name="FBI rancher" /> 
        "528" name="FBI truck" /> 
        "407" name="Fire truck" /> 
        "544" name="Fire truck (ladder)" /> 
        "596" name="Police car (LS)" /> 
        "598" name="Police car (LV)" /> 
        "597" name="Police car (SF)" /> 
        "599" name="Police ranger" /> 
        "601" name="S.W.A.T." /> 
    
    "Heavy Vehicles"> 
        "Industrial"> 
            "524" name="Cement truck" /> 
            "578" name="DFT-30" /> 
            "486" name="Dozer" /> 
            "406" name="Dumper" /> 
            "573" name="Dune" /> 
            "455" name="Flatbed" /> 
            "530" name="Forklift" /> 
            "403" name="Linerunner" /> 
            "443" name="Packer" /> 
            "515" name="Roadtrain" /> 
            "574" name="Sweeper" /> 
            "514" name="Tanker" /> 
            "525" name="Towtruck" /> 
            "408" name="Trashmaster" /> 
            "552" name="Utility van" /> 
        
        "Trailers"> 
            "606" name="Baggage trailer (covered)" /> 
            "607" name="Baggage trailer (Uncovered)" /> 
            "610" name="Farm trailer" /> 
            "537" name="Freight train" /> 
            "590" name="Freight train boxcar" /> 
            "569" name="Freight train flatbed" /> 
            "611" name="Street Clean trailer" /> 
            "584" name="Gas trailer" /> 
            "608" name="Trailer 1" /> 
            "435" name="Trailer 2" /> 
            "450" name="Trailer 3" /> 
            "591" name="Trailer 4" /> 
        
        "Trucks"> 
            "499" name="Benson" /> 
            "609" name="Black Boxville" /> 
            "422" name="Bobcat" /> 
            "498" name="Boxville" /> 
            "414" name="Mule" /> 
            "600" name="Picador" /> 
            "543" name="Sadler" /> 
            "428" name="Securicar" /> 
            "478" name="Walton" /> 
            "456" name="Yankee" /> 
            "554" name="Yosemite" /> 
        
        "Vans"> 
            "459" name="Berkley's RC van" /> 
            "482" name="Burrito" /> 
            "483" name="Camper" /> 
            "508" name="Journey" /> 
            "418" name="Moonbeam" /> 
            "582" name="News van" /> 
            "413" name="Pony" /> 
            "440" name="Rumpo" /> 
        
    
    "Misc"> 
        "Other"> 
            "485" name="Baggage" /> 
            "568" name="Bandito" /> 
            "424" name="BF Injection" /> 
            "504" name="Bloodring Banger" /> 
            "538" name="Brownstreak Engine" /> 
            "431" name="Bus" /> 
            "457" name="Caddy" /> 
            "437" name="Coach" /> 
            "532" name="Combine harvester" /> 
            "588" name="Hotdog" /> 
            "434" name="Hotknife" /> 
            "494" name="Hotring racer" /> 
            "502" name="Hotring racer 2" /> 
            "503" name="Hotring racer 3" /> 
            "444" name="Monster" /> 
            "556" name="Monster 2" /> 
            "557" name="Monster 3" /> 
            "572" name="Mower" /> 
            "423" name="Mr. Whoopee" /> 
            "570" name="Kart" /> 
            "531" name="Tractor" /> 
            "449" name="Trolly" /> 
            "583" name="Tug" /> 
            "539" name="Vortex" /> 
        
    
    "SUVs and Wagons"> 
        "589" name="Club" /> 
        "579" name="Huntley" /> 
        "400" name="Landstalker" /> 
        "500" name="Mesa" /> 
        "470" name="Patriot" /> 
        "489" name="Rancher" /> 
        "479" name="Regina" /> 
        "442" name="Romero" /> 
        "495" name="Sandking" /> 
        "458" name="Solair" /> 
        "561" name="Stratum" /> 
    

and it's only insert Emergency group :roll:

any Help ?

Link to comment
you mean like this ?!
g_id = {} 
g_name = {} 
  
addEventHandler("onResourceStart", root, 
    function() 
        local index  = 0 
        local xml = xmlLoadFile( ":Ws_freeroam/xml/vehicles.xml" ) 
        local tag = xmlFindChild( xml, "group", index ) 
        local idName = xmlNodeGetAttribute( tag, "name" ) 
         
        while idName do  
            tag = xmlFindChild( xml, "group", index ) 
            idName = xmlNodeGetAttribute( tag, "name" ) 
            index = index + 1 
        end 
         
        index = 0 
         
        local cars = xmlFindChild( tag, "vehicle", index ) 
  
        while cars do 
            table.insert( g_id, tonumber( xmlNodeGetAttribute( cars, "id" ) ) ) 
            table.insert( g_name, xmlNodeGetAttribute( cars, "name" ) ) 
            index = index + 1 
            cars = xmlFindChild( tag, "vehicle", index ) 
        end 
        xmlUnloadFile( xml ) 
    end 
) 
  
addEventHandler ("onPlayerVehicleEnter", root, 
    function( vehicle ) 
        for id, name in ipairs( g_id ) do 
            if name == getElementModel( vehicle ) then 
                triggerClientEvent( source, "ShowCarName", root, g_name[id] ) 
            end 
        end 
    end 
) 

that's what i did

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