ATomas 291 Odesláno: 23. Říjen, 2012 Share Odesláno: 23. Říjen, 2012 Zdravím, určité, když jste objevili nové objekty, které je možné připnout na vozidla (například taxi označení). Určitě jste si všimli, že velikosti vozidel nejsou stejné a tak se stávalo, že když objekt na jednom vozidle krásně drží, na jiném levituje nebo je zapuštěn ve střeše. Určité jste přišli nato, že je potřeba pro každé vozidlo zvlášť naukládat tyto pozice (offset). Jistě Vás napadla funkce GetVehicleModelInfo s indexem 0, tedy pro rozměry, ale při jejím použitím jste zjistili, že funkce vrací maximální rozměry vozidla, a tedy objekt v některých případech opět levituje. Tento skript jsem používal ještě před vytvoření funkce GetVehicleModelInfo. Jde o zjednodušení vytvoření seznamu těchto offsetů. V praxi stačí prostě nastoupit do vozidla, a příkazem nastavit správné offsety, u každého vozidla se pamatuje poslední nastavení, až takto budou nastaveny všechny offsety, stačí si seznam nechat vypsat do souboru, a rovnou to bude v pawno zápise pro proměnu, a stačí jen skopírovat. new Float:OffsetX[212],Float:OffsetY[212],Float:OffsetZ[212];//modely vozidel jsou od 400 do 611 proto 212 dcmd_setoff(playerid,params[]) { new vehicleid = GetPlayerVehicleID(playerid);//protoze id vozidla budeme pouzivat vicekrat, ulozime si ho do promene new model = GetVehicleModel(vehicleid);//to same v modelem new pos = chrfind(' ',params)+1;//najdeme prvni mezeru v textu new pos2 = chrfind(' ',params,pos)+1;//najdemte treti mezeru v textu if(!params[0] || pos == 0 || pos2 == 0) return SendClientMessage(playerid,0xFF0000FF,"Použití: /setoff x y z");//pokud nejsou zadany vsechny 3 offset hodnoty OffsetX[model-400] = floatstr(params);//prvni je x a zacina ihned, takze funkci floatstr prevedeme text na desetine cislo OffsetY[model-400] = floatstr(params[pos]);//druhe je y. pos je startovni znak prvni mezery, tedy druheho parametru. OffsetZ[model-400] = floatstr(params[pos2]);//a treti z if(GetPVarInt(playerid,"TestObj1") > 0)//pokud prikaz jsme uz pouzili, urcite existuje objekt ktery neni na svem miste, aby nam neprekazel, znicime ho { DestroyObject(GetPVarInt(playerid,"TestObj1")); } new obj1 = CreateObject(19482,0,0,0,0,0,0);//vytvorime objekt, id si je potreba zde doplnit AttachObjectToVehicle(obj1,vehicleid,OffsetX[model-400],OffsetY[model-400],OffsetZ[model-400],0,0,0);//upneme objekt k vozidlu s nami zadanymi parametry SetPVarInt(playerid,"TestObj1",obj1);//ulozime si ID objektu, pro jeho pripadne smazani return 1; } dcmd_saveoff(playerid,params[]) { #pragma unused params SendClientMessage(playerid,-1,"Ukladam"); new File:SaveFile = fopen("OffSety.txt",io_write);//Nazev souboru kam budeme obsah ukladat for(new i;i<212;i++) { new var[64]; format(var,sizeof(var),"{%.f,%.f,%.f},//%d\r\n",OffsetX[i],OffsetY[i],OffsetZ[i],400+i);//zde je samotny kod, ktery pouzimeje v pawnu, obsahuje vsechny 3 offsety a pro informaci i id modelu vozidla. fwrite(SaveFile,var);//zapiseme dosazeny text } fclose(SaveFile);//dulezite je soubor uzavrit, aby nedoslo k padu serveru SendClientMessage(playerid,-1,"Ulozeno"); return 1; } Tak a nyní jen stačí skopirovat txt ze souboru a udělat z toho proměnou, příklad: new Float:OffSety[212][3] = {//modelu vozidel je 212 a offsety jsou 3 (x y z) //sem vlozite obsah souboru }; A hurá mate seznam offsetu pro každé vozidlo a můžete ho použit. Příklad pro vozidlo buffalo (402): AttachObjectToVehicle(obj,vehicleid,OffSety[402-400][3],OffSety[402-400][3],OffSety[402-400][3],0,0,0); //402-400, umyslne jsem to takto zapsal, aby bylo jasne, ze je potreba od modelid odecist 400, protoze promena zacina od cisla 0, ale modely zacinaji od 400. Pokud je potřeba, dají se tam přidat i rotace. K čemu je to dobré? Takto si lze naukládat offsety pro označení taxi, nebo objektu, které následně využijete jako text. Link to comment Share on other sites More sharing options...
niCe 131 Odesláno: 23. Říjen, 2012 Share Odesláno: 23. Říjen, 2012 Zrejme tu funkci GetVehicleModelInfo neumis spravne pouzit. Vystupni data z teto funkce jsou naprosto presna, jsou prevzata z map editoru od Jerneje. Takze nevidim duvod, proc by nekdo mel ztracet cas rucnim ukladanim souradnic pro kazdy model. Link to comment Share on other sites More sharing options...
Globální moderátor Hip 191 Odesláno: 23. Říjen, 2012 Globální moderátor Share Odesláno: 23. Říjen, 2012 pěkné velmi jinak nemá být u: new pos = chrfind(' ',params)+1;//najdeme prvni mezeru v textu druhá mezera? ta první je definována dcmd ne? Link to comment Share on other sites More sharing options...
ATomas 291 Odesláno: 23. Říjen, 2012 Author Share Odesláno: 23. Říjen, 2012 pěkné velmi jinak nemá být u: new pos = chrfind(' ',params)+1;//najdeme prvni mezeru v textu druhá mezera? ta první je definována dcmd ne? Podle toho jak to beres, ja mnel na mysli prvni mezeru v params, kterou odesila dcmd, tedy uz bez mezery Zrejme tu funkci GetVehicleModelInfo neumis spravne pouzit. Vystupni data z teto funkce jsou naprosto presna, jsou prevzata z map editoru od Jerneje. Takze nevidim duvod, proc by nekdo mel ztracet cas rucnim ukladanim souradnic pro kazdy model. Pouzil jsem ji takto: new Float:x,Float:y,Float:z; GetVehicleModelInfo(model,VEHICLE_MODEL_INFO_SIZE,x,y,z); U vozidla remington mi to odeslalo spravny rozmer, ale u vozidla Rumpo,stretch,burrito mi to zvetsilo rozmer o 0.2. U Landstalker o 0.15. Tak by mne zajimalo, kde jsem udelal chybu. na příkladu: prikaz:texttest(playerid,params[]) { new Float:x,Float:y,Float:z,vehicleid = GetPlayerVehicleID(playerid); GetVehicleModelInfo(GetVehicleModel(vehicleid),VEHICLE_MODEL_INFO_SIZE,x,y,z); new obj1 = CreateObject(19482,0,0,0,0,0,0); new obj2 = CreateObject(19482,0,0,0,0,0,0); SetObjectMaterialText(obj1,params,0,OBJECT_MATERIAL_SIZE_512x512,"Arial",32,1,0xFF000000,0,OBJECT_MATERIAL_TEXT_ALIGN_CENTER); SetObjectMaterialText(obj2,params,0,OBJECT_MATERIAL_SIZE_512x512,"Arial",32,1,0xFF000000,0,OBJECT_MATERIAL_TEXT_ALIGN_CENTER); AttachObjectToVehicle(obj1,vehicleid,floatdiv(x,2),0,0,0,0,0); AttachObjectToVehicle(obj2,vehicleid,-floatdiv(x,2),0,0,0,0,180); return 1; } to u zminovaneho remingtonu objekt prilepi presne na bok vozidla, ale u te dodavky ti to ten objekt da 0.1 od boku vozidla dal, z toho jsem usoudil ze jsou souradnice nepresne. Není to moje první zkušenost, kdy jsem objevil chybu funkce, další chyba je u GetVehicleComponentType kde u componentu 1100,1123,1125 to misto slotu světel odesíla nárazníky. Link to comment Share on other sites More sharing options...
niCe 131 Odesláno: 23. Říjen, 2012 Share Odesláno: 23. Říjen, 2012 U vozidla remington mi to odeslalo spravny rozmer, ale u vozidla Rumpo,stretch,burrito mi to zvetsilo rozmer o 0.2. U Landstalker o 0.15. Tak by mne zajimalo, kde jsem udelal chybu. Musis si uvedomit, ze nektere modely vozidel nejsou porad stejne, ale maji vice variant (napr. NRG, FCR, Burrito, Rumpo apod.). Takze ta funkce vraci souradnice dle aktualni varianty modelu. Není to moje první zkušenost, kdy jsem objevil chybu funkce, další chyba je u GetVehicleComponentType kde u componentu 1100,1123,1125 to misto slotu světel odesíla nárazníky. Jenze to neni zadna chyba funkce. V datovych souborech jsou objekty rozliseny dle typu, mezi svetla patri pouze objekty 1013 (lgt_b_rspt) a 1024 (lgt_b_sspt), tebou zminovane objekty 1100 (misc_c_lr_rem1), 1123 (misc_c_lr_rem2) a 1125 (misc_c_lr_rem3) zkratka zadny typ prirazen nemaji a GTA je detekuje jako narazniky. Link to comment Share on other sites More sharing options...
ATomas 291 Odesláno: 23. Říjen, 2012 Author Share Odesláno: 23. Říjen, 2012 Musis si uvedomit, ze nektere modely vozidel nejsou porad stejne, ale maji vice variant (napr. NRG, FCR, Burrito, Rumpo apod.). Takze ta funkce vraci souradnice dle aktualni varianty modelu. Jenze to neni zadna chyba funkce. V datovych souborech jsou objekty rozliseny dle typu, mezi svetla patri pouze objekty 1013 (lgt_b_rspt) a 1024 (lgt_b_sspt), tebou zminovane objekty 1100 (misc_c_lr_rem1), 1123 (misc_c_lr_rem2) a 1125 (misc_c_lr_rem3) zkratka zadny typ prirazen nemaji a GTA je detekuje jako narazniky. V praxi ovsem jsou vyuzity pro slot svetel (viz tunirny v singleplayeru) i kdyz ve sve podstate jsou narazniky, pro spravnou pouzitelnost, musi byt na svetlech. Potom se to pri zjisotvani tuningu na slotu krizi. Tedy pri ukladani tuningu vozidla remingron je potreba funkci "upravit", aby to ukladalo narazniky a zaroven i svetla. Musis si uvedomit, ze nektere modely vozidel nejsou porad stejne, ale maji vice variant (napr. NRG, FCR, Burrito, Rumpo apod.). Takze ta funkce vraci souradnice dle aktualni varianty modelu. To sice ano, ale šířka vozidel jako burrito, rumpo, a ani NRG se nemeni. U burrita se nekdy objevi kridlo a svetla nekdy ne, proto u offset Z bych to pochopil , ale X se preci nemeni. Link to comment Share on other sites More sharing options...
ATomas 291 Odesláno: 24. Říjen, 2012 Author Share Odesláno: 24. Říjen, 2012 Opet tlacitko upravit zmizelo... Mne zajima, jak by jsi toto vyresil pomoci te fukce GetVehicleModelInfo, aby to nebylo u kazdeho vozidla v jinak daleko, nez je jeho skutecny rozmer, kdyz tvrdis ze neni poreba delat rucne seznam. Link to comment Share on other sites More sharing options...
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