PapikSVK52 2 Odesláno: 14. Červenec, 2015 Share Odesláno: 14. Červenec, 2015 ahojte ako spravim aby 2 krat rychlejse by som bezal? viem že sa tam použiva SetPlayerVelocity ale neviem to spraviť vopred dík a ešte niečo chcem aby server poznal moj Nick ked sa spawnem až my dal specialny bonus ako spravim aby ma poznal? pri spawne? Link to comment Share on other sites More sharing options...
PapikSVK52 2 Odesláno: 14. Červenec, 2015 Author Share Odesláno: 14. Červenec, 2015 a jako to spravim? Link to comment Share on other sites More sharing options...
PapikSVK52 2 Odesláno: 14. Červenec, 2015 Author Share Odesláno: 14. Červenec, 2015 (upraveno) velice ty dakujem a to stim speed som skusil toto: public OnPlayerKeyStateChange(playerid, newkeys, oldkeys){ if (HOLDING(KEY_SPRINT)){ if (!IsPlayerInAnyVehicle(playerid)) { new Float:runx,Float:runy,Float:runz;GetPlayerVelocity(playerid,runx,runy,runz);SetPlayerVelocity(playerid,runx*2,runy*2,runz*2); } return 1; } return 1; } a chyba je taka funguje to iba ked som vo vzduchu na zemi nie aj ked som odtial vymazal if (!IsPlayerInAnyVehicle(playerid)) { tak nič stale to iste Edited 14. Červenec, 2015 by PapikSVK52 Link to comment Share on other sites More sharing options...
arci224 11 Odesláno: 14. Červenec, 2015 Share Odesláno: 14. Červenec, 2015 velice ty dakujem a to stim speed som skusil toto: public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) { if (HOLDING(KEY_SPRINT)) { if (!IsPlayerInAnyVehicle(playerid)) { new Float:runx,Float:runy,Float:runz; GetPlayerVelocity(playerid,runx,runy,runz); SetPlayerVelocity(playerid,runx*2,runy*2,runz*2); } return 1; } return 1; } a chyba je taka funguje to iba ked som vo vzduchu na zemi nie aj ked som odtial vymazal if (!IsPlayerInAnyVehicle(playerid)) { tak nič stale to iste nevím teď která ale jedna je výška. tak tu smaž Link to comment Share on other sites More sharing options...
PapikSVK52 2 Odesláno: 14. Červenec, 2015 Author Share Odesláno: 14. Červenec, 2015 ~> A dostane varování. Ne "smazat", ale vepsat jen nulu. Aby se to nezvyšovalo spolu s tím. ~> A předešlé (defautlní) velocity je 0. A 0*2 ti to opravdu nezvýší. Nic nezjišťuj a zvyšuj to rovnou: SetPlayerVelocity(playerid, 0.2, 0.2, 0.0); len toto tam vložit? Link to comment Share on other sites More sharing options...
PapikSVK52 2 Odesláno: 14. Červenec, 2015 Author Share Odesláno: 14. Červenec, 2015 (upraveno) jj tak skusel som to funguje ale taha ma to iba na sever(North) ked dam sprint Edited 14. Červenec, 2015 by PapikSVK52 Link to comment Share on other sites More sharing options...
Lukasz 336 Odesláno: 14. Červenec, 2015 Share Odesláno: 14. Červenec, 2015 (upraveno) Dáme si trochu teorie, protože vaše řešení jsou špatná. new Float:runx,Float:runy,Float:runz; GetPlayerVelocity(playerid,runx,runy,runz); SetPlayerVelocity(playerid,runx*2,runy*2,runz*2); Pěkné.. hráč běží rychlostí například 10km/h, po aplikování tvého kódu se rychlost zvýší na 20km/h, poté na 40km/h atd. Takže toto nebude nejšťastnější řešení. (Toto by mělo být stejné jako moje řešení, akorát mé má fixní rychlost, ale tu bude problém vysvětlen na konci) - nevím teď která ale jedna je výška. tak tu smaž Pokud by "smazal" (berme to jako nastavil na 0) rychlost na ose z, jak by hráč běhal do kopce a z kopce? - SetPlayerVelocity(playerid, 0.2, 0.2, 0.0); Zde to stejné co výše. Plus by rychlost nebyla dvojnásobek rychlosti hráče při sprintu + by byl hráč nucen se pohybovat pouze na severovýchod. (hráč na pozici 0,0,0 s rychlostí 0.2, 0.2, 0 se pohne na 0.2, 0.2, 0, pak na 0.4, 0.4, 0 atd. to znamená pouze jedním směrem). Musíme si tedy určit fixní velikost rychlosti (Testoval jsem to, a takto mi to přibližně vyšlo (na rovince, styl běhaní Cj)) #define DEFAULT_PLAYER_VELOCITY 0.19 // 0.17 až 0.2, nejčastěji 0.19 - Pokud tedy chceme dvojnásobek této rychlost bude to (překvapivě) #define DEFAULT_PLAYER_VELOCITY 0.19 * 2 pozn. Není to roznásobené, kvůli lehké úpravě defaultní rychlosti a násobku rychlosti, kterého chceme dosáhnout. Toto je tedy naše fixní rychlost, které hráč za každých okolností (pokud se pohybuje a my to tak chceme) musí dosáhnout. Zjistíme jeho rychlosti na všech osách. new Float:x, Float:y, Float:z; GetPlayerVelocity(playerid, x, y, z); - Použijeme pomocnou proměnnou pro velikost rychlosti (u know, vektory..) new Float:pom = VectorSize(x, y, z); - A zjistíme zda není nula if(pom != 0) { // zbytek } nebo if(pom == 0) return 1; - Toto zjišťujeme, protože v následujícím kroku budeme dělit (a nulou dělit nechceme). Pro úsporu paměti hodíme výsledek zase do naší pomocné proměnné. pom = DEFAULT_PLAYER_VELOCITY / pom; - Nyní když naší proměnnou 'pom' vynásobíme rychlosti na osách, zachováme směr výsledného vektoru, ale změníme délku na DEFAULT_PLAYER_VELOCITY, tudíž zhruba dvojnásobek sprintu. V následujícím kroku to rovnou i nastavím. SetPlayerVelocity(playerid, x*pom, y*pom, z*pom); - Nyní pokud si printneme velikost vektoru rychlosti získáme zhruba dvojnásobek rychlosti hráče při sprintu a máme zachovaný směr. Pro nevěřící: printf("%f", VectorSize(x*pom, y*pom, z*pom)); - Výsledný kód bude vypadat nějak takto new Float:x, Float:y, Float:z; GetPlayerVelocity(playerid, x, y, z); new Float:pom = VectorSize(x, y, z); if(pom != 0) { pom = DEFAULT_PLAYER_VELOCITY / pom; SetPlayerVelocity(playerid, x*pom, y*pom, z*pom); // printf("%f", VectorSize(x*pom, y*pom, z*pom)); pokud jste hnidopich } - Bohužel tu nastává problém. OnPlayerKeyStateChange(..) se volá pokud hráč stiskl klávesu. Tudíž aby hráč dostal boost musí neustále mačkat KEY_SPRINT (při použití výše uvedených řešení). Autorovi to ale nejspíš nevadilo ani u předešlých řešení. Další problém je, že hráč nedokáže mačkat neustále klávesu KEY_SPRINT proto není naboostovaný pořád, rychlost tedy kolísá. Testoval jsem to i v OnPlayerUpdate(..), ale tam zas nebyl prostor pro změnu směru běhu, rychlost ale byla zachována na naší fixní a směr byl zachován. Takže tu máte výpočet správné rychlosti a aplikování je na vás. GL. (Asi bude nutno zjistit kam hráč kouká, zrotovat vektor, pak zde ale bude problém s rychlostí na ose z, takže hráče držet nějak při zemi atd..) Edited 15. Červenec, 2015 by Lukasz 1 Link to comment Share on other sites More sharing options...
PapikSVK52 2 Odesláno: 16. Červenec, 2015 Author Share Odesláno: 16. Červenec, 2015 takže toto všetko mam dat do PWN ? a malo by to zhruba ist? takže su tam 2 tie iste errory: error 017: undefined symbol "VectorSize" error 017: undefined symbol "VectorSize" ako ich definovat? asi to chce novšiu verziu *Lock Link to comment Share on other sites More sharing options...
Recommended Posts