Jump to content

návod Přetransformování vozidla v jiné běhěm pohybu vozidla


tejpek

Recommended Posts

Zdravím, mám v módu pěknou vychytávku a rozhodl jsem se s vámi o ni podělit :)
 

o co jde?

  • Transformace vozidla během pohybu

k čemu to je?

  • k ničemu
  • k rychlé změně vozidla

jak na to?

 

 

  1. pokud nemáme, nadefinujeme si DCMD
    #define dcmd(%1,%2,%3) if((strcmp((%3)[1],#%1,true,(%2))==0)&&((((%3)[(%2)+1]==0)&&(dcmd_%1(playerid,"")))||(((%3)[(%2)+1]==32)&&(dcmd_%1(playerid,(%3)[(%2)+2]))))) return 1
    

    a vytvoříme proměnné s názvy aut

    new VehiclesModels[212][] =
    {
    	{"Landstalker"},
    	{"Bravura"},
    	{"Buffalo"},
    	{"Linerunner"},
    	{"Perrenial"},
    	{"Sentinel"},
    	{"Dumper"},
    	{"Firetruck"},
    	{"Trashmaster"},
    	{"Stretch"},
    	{"Manana"},
    	{"Infernus"},
    	{"Voodoo"},
    	{"Pony"},
    	{"Mule"},
    	{"Cheetah"},
    	{"Ambulance"},
    	{"Leviathan"},
    	{"Moonbeam"},
    	{"Esperanto"},
    	{"Taxi"},
    	{"Washington"},
    	{"Bobcat"},
    	{"Mr Whoopee"},
    	{"BF Injection"},
    	{"Hunter"},
    	{"Premier"},
    	{"Enforcer"},
    	{"Securicar"},
    	{"Banshee"},
    	{"Predator"},
    	{"Bus"},
    	{"Rhino"},
    	{"Barracks"},
    	{"Hotknife"},
    	{"Trailer 1"},
    	{"Previon"},
    	{"Coach"},
    	{"Cabbie"},
    	{"Stallion"},
    	{"Rumpo"},
    	{"RC Bandit"},
    	{"Romero"},
    	{"Packer"},
    	{"Monster"},
    	{"Admiral"},
    	{"Squalo"},
    	{"Seasparrow"},
    	{"Pizzaboy"},
    	{"Tram"},
    	{"Trailer 2"},
    	{"Turismo"},
    	{"Speeder"},
    	{"Reefer"},
    	{"Tropic"},
    	{"Flatbed"},
    	{"Yankee"},
    	{"Caddy"},
    	{"Solair"},
    	{"Berkley's RC Van"},
    	{"Skimmer"},
    	{"PCJ-600"},
    	{"Faggio"},
    	{"Freeway"},
    	{"RC Baron"},
    	{"RC Raider"},
    	{"Glendale"},
    	{"Oceanic"},
    	{"Sanchez"},
    	{"Sparrow"},
    	{"Patriot"},
    	{"Quad"},
    	{"Coastguard"},
    	{"Dinghy"},
    	{"Hermes"},
    	{"Sabre"},
    	{"Rustler"},
    	{"ZR-350"},
    	{"Walton"},
    	{"Regina"},
    	{"Comet"},
    	{"BMX"},
    	{"Burrito"},
    	{"Camper"},
    	{"Marquis"},
    	{"Baggage"},
    	{"Dozer"},
    	{"Maverick"},
    	{"News Chopper"},
    	{"Rancher"},
    	{"FBI Rancher"},
    	{"Virgo"},
    	{"Greenwood"},
    	{"Jetmax"},
    	{"Hotring"},
    	{"Sandking"},
    	{"Blista Compact"},
    	{"Police Maverick"},
    	{"Boxville"},
    	{"Benson"},
    	{"Mesa"},
    	{"RC Goblin"},
    	{"Hotring Racer A"},
    	{"Hotring Racer B"},
    	{"Bloodring Banger"},
    	{"Rancher"},
    	{"Super GT"},
    	{"Elegant"},
    	{"Journey"},
    	{"Bike"},
    	{"Mountain Bike"},
    	{"Beagle"},
    	{"Cropdust"},
    	{"Stunt"},
    	{"Tanker"},
    	{"Roadtrain"},
    	{"Nebula"},
    	{"Majestic"},
    	{"Buccaneer"},
    	{"Shamal"},
    	{"Hydra"},
    	{"FCR-900"},
    	{"NRG-500"},
    	{"HPV1000"},
    	{"Cement Truck"},
    	{"Tow Truck"},
    	{"Fortune"},
    	{"Cadrona"},
    	{"FBI Truck"},
    	{"Willard"},
    	{"Forklift"},
    	{"Tractor"},
    	{"Combine"},
    	{"Feltzer"},
    	{"Remington"},
    	{"Slamvan"},
    	{"Blade"},
    	{"Freight"},
    	{"Streak"},
    	{"Vortex"},
    	{"Vincent"},
    	{"Bullet"},
    	{"Clover"},
    	{"Sadler"},
    	{"Firetruck LA"},
    	{"Hustler"},
    	{"Intruder"},
    	{"Primo"},
    	{"Cargobob"},
    	{"Tampa"},
    	{"Sunrise"},
    	{"Merit"},
    	{"Utility"},
    	{"Nevada"},
    	{"Yosemite"},
    	{"Windsor"},
    	{"Monster A"},
    	{"Monster B"},
    	{"Uranus"},
    	{"Jester"},
    	{"Sultan"},
    	{"Stratum"},
    	{"Elegy"},
    	{"Raindance"},
    	{"RC Tiger"},
    	{"Flash"},
    	{"Tahoma"},
    	{"Savanna"},
    	{"Bandito"},
    	{"Freight Flat"},
    	{"Streak Carriage"},
    	{"Kart"},
    	{"Mower"},
    	{"Duneride"},
    	{"Sweeper"},
    	{"Broadway"},
    	{"Tornado"},
    	{"AT-400"},
    	{"DFT-30"},
    	{"Huntley"},
    	{"Stafford"},
    	{"BF-400"},
    	{"Newsvan"},
    	{"Tug"},
    	{"Trailer 3"},
    	{"Emperor"},
    	{"Wayfarer"},
    	{"Euros"},
    	{"Hotdog"},
    	{"Club"},
    	{"Freight Carriage"},
    	{"Trailer 3"},
    	{"Andromada"},
    	{"Dodo"},
    	{"RC Cam"},
    	{"Launch"},
    	{"Police Car (LSPD)"},
    	{"Police Car (SFPD)"},
    	{"Police Car (LVPD)"},
    	{"Police Ranger"},
    	{"Picador"},
    	{"S.W.A.T. Van"},
    	{"Alpha"},
    	{"Phoenix"},
    	{"Glendale"},
    	{"Sadler"},
    	{"Luggage Trailer A"},
    	{"Luggage Trailer B"},
    	{"Stair Trailer"},
    	{"Boxville"},
    	{"Farm Plow"},
    	{"Utility Trailer"}
    };
    
  2. vytvoříme příkaz a začneme do něho přidávat následující kód
    dcmd_transform(playerid,params[])
    {
    return 1
    }
  3. zjistíme v čem hráč sedí, pozici vozidla, úhly a rychlost
    new veh = GetPlayerVehicleID(playerid); //zjistíme ID vozidla
    new Float:X,Float:Y,Float:Z; //určíme proměnné pro pozici
    new Float:VX,Float:VY,Float:VZ; //určíme proměnné pro rychlost 
    new Float:RX,Float:RY,Float:RZ; //určíme proměnné pro rotaci
    GetVehiclePos(veh,X,Y,Z); //zjistíme pozici
    GetVehicleVelocity(veh,VX,VY,VZ); //zjisítme rychlost
    GetVehicleRotation(veh, RX, RY, RZ); //zjistíme rotaci
    
  4. zajistíme params v příkazu (v tomto případě funguje na jméno vozidla)
    new car = -1; //zadáme proměnnou ID vozidla
        for(new i=0;i<212;i++) //cyklus (celkem 212 vozidel)
    	{
    		if(strfind(params,VehiclesModels[i],true) != -1) //pokud v hodnotě params najde název vozidla
    		{
    			car= 400 + i; //vozidla začínají ID 400
    			break; //stopneme cyklus
    		}
    	}
    
    	if(car == -1) //pokud ID zůstalo -1
    	{
    		car = strval(params); //proměnná se nastavila na hodnotu params (id vozidla)
    		if(car < 400 || car > 611) return SendClientMessage(playerid,0xaaaaaaFF, "Špatné ID. ID Aut: 400-611"); //pokud není hodnota v rozmezí
    	}
    
  5. vytvoříme hráčovi auto
    for(new i=0;i<MAX_PLAYERS_EX;i++) //cyklus
    	{
    	    new iseat[MAX_PLAYERS_EX]; //nastavíme proměnnou pro sedadlo
    	    if(IsPlayerInVehicle(i,veh)) //pokud je hráč v autě
    	    {
    			iseat[i] = GetPlayerVehicleSeat(i); //zjistíme kdo kde sedí
    			RemovePlayerFromVehicle(i); //vyhodíme hráče z auta
    			DestroyVehicle(veh); //zničíme auto
    			new kara = CreateVehicle(car,X,Y,Z,-RX,1,1,9999); //vytvoříme nové auto (námi zadané)
    			PutPlayerInVehicle(i, kara, iseat[i]); //posadíme všechny hráče na jejich místa
    
    //následující 4 řádky jsem přidal jelikož neznámou záhadou řádek výše nefungoval a prazatím jsem ho nevyřešil, kdyby se to někomu povedlo, dejte vědět, díky 
    			if(iseat[i] == 0) PutPlayerInVehicle(i, kara, 0);
    			if(iseat[i] == 1) PutPlayerInVehicle(i, kara, 1);
    			if(iseat[i] == 2) PutPlayerInVehicle(i, kara, 2);
    			if(iseat[i] == 3) PutPlayerInVehicle(i, kara, 3);
    
    			SetVehicleVelocity(kara,VX,VY,VZ); //nastavíme rychlost auta
    		}
    	}
    
  6. Přidáme příkaz do OnPlayerCommand...

A to je celé :) děkuji za pozornost, třeba se to někomu i hodí :d


Pokud někomu nebude fungovat > špatně kopíroval > zkuste zapojit mozek a trošku "programovat" :) mě funguje nádherně a při transformaci auto sebou ani necukne :)

  • Líbí se mi to! (+1) 3
Link to comment
Share on other sites

Prozraď mi, jak by si podobný návod popsal bez ukázkového scriptu :)

ukazkovej kod může být. ale nesmí být uplně přímo na CTRL + C a CTRL + V. návod má být takový aby člověk pochopil fakt jak to funguje proč se to to tam dělá atd.

new Float:X,Float:Y,Float:Z; //určíme proměnné pro pozici
new Float:VX,Float:VY,Float:VZ; //určíme proměnné pro rychlost 
new Float:RX,Float:RY,Float:RZ; //určíme proměnné pro rotaci

a toto za návod nepovažuju...

Link to comment
Share on other sites

tim ze popsal vsechny funkce co ktera dela tak se to za navod da povazovat. kdyby to tam nebylo tak uz by to navod nebyl.

 když už někdo dělá návod. at vysvětlí uplně všě.....

Link to comment
Share on other sites

Éčko, to jako má pospat, co dělá třeba "new", co to znamená a tak, ja si myslím, že to docela popsaný má, jo sice ano, má tam celý script pro Ctrl+C/V, ale je to návod se sciptem, podle mého..

Link to comment
Share on other sites

  • 11 months later...

Můj názor je takový že tohle je pokročilejší pawno tudíž daný člověk by již měl vedet co dělá new atd... Jelikož to by tam pak musel vysvětlovat každy a myslím že tu je spousty návodu kde se vysvětluje co co dělá. Takže myslím ťže to je OK.

Link to comment
Share on other sites

~> Návod (syn. tutoriál), bych dle mého názoru považoval cokoliv, co je jen ukázkou pro pochopení, aby si v tom dokázal už sám bez problémů pracovat. Je pravda, že jisté části se prostě musí ukázat celé, a vysvětlit do naprostých podrobností, aby to uživatel(čtenář) pochopil.

 

~> K tomuhle tutoriálů. Není to vůbec špatné. Je to celkem přehledné, bez odrážek, neobsahuje to příliš textu. Graficky je taky pěkný, neobsahuje 11 různých sakra světlých barev apod. (všichni víme, co myslím), ale vylepšit by rozhodně nebylo na škodu :d.

~> V code to je taky dobře vysvětlené, není to příliš složité. Jen bych místo určímě spíše použil založíme nebo přidáme. Zní to trochu jako, že mu určujeme nějakou hodnotu :d.

 

~> Ne, že by bylo dcmd špatné, ale není ani dobré a někteří ho tu nemají rádi. Uznávám, je super, že je to jen jednořádkový preprocesor, takže nováčci s jeho "nahráním" nebudou mít problém, ale zase se takhle nenaučí nahrávat jiné includy, které se jim zalíbí. A ještě ty, které jsou lepší.

~> Kontroluješ vůbec, jestli je v nějakém vozidle (IsPlayerInAnyVehicle())? Raději se ptám, nebo jestli to bereš jako samozřejmost, že si to tam už každý individuálně přidá? :d.

~> Pro cyklus na ty hráče můžeš využít tu novou funkci, která byla přidaná.

~> Ne, že by to bylo špatně, ale neuvažoval jsi někdy, že bys místo strfind() použil strcmp()?

~> A k těm několika funkcím PutPlayerInVehicle()... zkoušel jsi to v autobuse s více hráči :d?

 

Za mě rozhodně rep. Je vidět, že se vyznáš v tom, o čem mluvíš :v:

 

(forum.sa-mp.com/showthread.php?t=576114) | (wiki/GetPlayerPoolSize) | (wiki/Strcmp)

Link to comment
Share on other sites

Podle mě je to spíše script, ale OK, vysvětlivky k tomu jsou (někde až zbytečně :d). Jinak by mě zajímalo proč všichni hodnotíte skoro 1 rok starý topic? :d

~> Protože prostě můžem :d

Link to comment
Share on other sites

Podle mě je to spíše script, ale OK, vysvětlivky k tomu jsou (někde až zbytečně :d). Jinak by mě zajímalo proč všichni hodnotíte skoro 1 rok starý topic? :d

Se ptej jakera ten otevřel rok starou temu..

Link to comment
Share on other sites

  • 4 weeks later...

Když už je to otevřené, tak se ještě zeptám:

GetVehicleRotation(veh, RX, RY, RZ);

Nic mi nenašlo na googlu, akorát:

GetVehicleRotationQuat

Když tam mám GetVehicleRotation, tak mi to hodí že to nemám nadefinované, což je pravda - nevím jak to mám nadefinovat

A ještě mi to hodí Warningy - Že jsem nikdy nepoužil RX RY RZ.

 

Když tam mám GetVehicleRotationQuat(veh, RX, RY, RZ);

tak mi to napíše:

warning 202: number of arguments does not match definition

 

Díky, Pajdalf.

Edited by Pajdalf
Link to comment
Share on other sites

No tak příště si na to můžeš vytvořit help. No co už... takto módík když tak odstraní a zamkne...

 

Problém je v tom, že fce GetVehicleRotationQuad(...), má 4 parametry (ty zadáváš pouze 3).

Každopádně na zjištění rotace vozidla můžeš použít fci GetVehicleZAngle(...) - využívá se častěji, která má pouze 2 parametry. Následně doplníš do CreateVehicle(model, pos X, pos Y, pos Z, úhel (tedy ten angle), barva 1, barva 2,  siréna (od 0.3.7)). Snad jsi to pochopil v případě nějakých nejasností PM nebo si vytvoř vlastní help topic... ;)

Edited by GaRGoyLeS
Link to comment
Share on other sites

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
×
×
  • Create New...