niCe 131 Odesláno: 10. Duben, 2010 Share Odesláno: 10. Duben, 2010 Tahle funkce pouziva funkci od uzivatele RedShirt "DistanceCameraTargetToLocation" a modifikovanou funkci GetPlayerFacingAngleToPoint, kterou jsem si upravil na GetPointAngleToPoint. Protoze k detekci toho, kam hrac miri zamerovacim krizem nestaci pouze zjisteni polohy kamery a vektoru, nastavil jsem funkci IsPlayerAimingAt tak, aby reflektovala ruzne uhlove rozdily u jednotlivych typu zbrani. Float:DistanceCameraTargetToLocation(Float:CamX, Float:CamY, Float:CamZ, Float:ObjX, Float:ObjY, Float:ObjZ, Float:FrX, Float:FrY, Float:FrZ) { new Float:TGTDistance; TGTDistance = floatsqroot((CamX - ObjX) * (CamX - ObjX) + (CamY - ObjY) * (CamY - ObjY) + (CamZ - ObjZ) * (CamZ - ObjZ)); new Float:tmpX, Float:tmpY, Float:tmpZ; tmpX = FrX * TGTDistance + CamX; tmpY = FrY * TGTDistance + CamY; tmpZ = FrZ * TGTDistance + CamZ; return floatsqroot((tmpX - ObjX) * (tmpX - ObjX) + (tmpY - ObjY) * (tmpY - ObjY) + (tmpZ - ObjZ) * (tmpZ - ObjZ)); } stock Float:GetPointAngleToPoint(Float:x2, Float:y2, Float:X, Float:Y) { new Float:DX, Float:DY; new Float:angle; DX = floatabs(floatsub(x2,X)); DY = floatabs(floatsub(y2,Y)); if (DY == 0.0 || DX == 0.0) { if(DY == 0 && DX > 0) angle = 0.0; else if(DY == 0 && DX < 0) angle = 180.0; else if(DY > 0 && DX == 0) angle = 90.0; else if(DY < 0 && DX == 0) angle = 270.0; else if(DY == 0 && DX == 0) angle = 0.0; } else { angle = atan(DX/DY); if(X > x2 && Y <= y2) angle += 90.0; else if(X <= x2 && Y < y2) angle = floatsub(90.0, angle); else if(X < x2 && Y >= y2) angle -= 90.0; else if(X >= x2 && Y > y2) angle = floatsub(270.0, angle); } return floatadd(angle, 90.0); } stock GetXYInFrontOfPoint(&Float:x, &Float:y, Float:angle, Float:distance) { x += (distance * floatsin(-angle, degrees)); y += (distance * floatcos(-angle, degrees)); } stock IsPlayerAimingAt(playerid, Float:x, Float:y, Float:z, Float:radius) { new Float:camera_x,Float:camera_y,Float:camera_z,Float:vector_x,Float:vector_y,Float:vector_z; GetPlayerCameraPos(playerid, camera_x, camera_y, camera_z); GetPlayerCameraFrontVector(playerid, vector_x, vector_y, vector_z); new Float:vertical, Float:horizontal; switch (GetPlayerWeapon(playerid)) { case 34,35,36: { if (DistanceCameraTargetToLocation(camera_x, camera_y, camera_z, x, y, z, vector_x, vector_y, vector_z) < radius) return true; return false; } case 30,31: {vertical = 4.0; horizontal = -1.6;} case 33: {vertical = 2.7; horizontal = -1.0;} default: {vertical = 6.0; horizontal = -2.2;} } new Float:angle = GetPointAngleToPoint(0, 0, floatsqroot(vector_x*vector_x+vector_y*vector_y), vector_z) - 270.0; new Float:resize_x, Float:resize_y, Float:resize_z = floatsin(angle+vertical, degrees); GetXYInFrontOfPoint(resize_x, resize_y, GetPointAngleToPoint(0, 0, vector_x, vector_y)+horizontal, floatcos(angle+vertical, degrees)); if (DistanceCameraTargetToLocation(camera_x, camera_y, camera_z, x, y, z, resize_x, resize_y, resize_z) < radius) return true; return false; } Ve vysledku tedy staci implementovat vsechny tyhle funkce, a pak pouzijete funkci IsPlayerAimingAt ke zjisteni toho, kam hrac skutecne miri. stock IsPlayerAimingAtPlayer(playerid, targetplayerid) { new Float:x, Float:y, Float:z; GetPlayerPos(targetplayerid, x, y, z); return IsPlayerAimingAt(playerid, x, y, z, 1.1); } Tahle funkce treba spolehlive zjisti, jestli mirite na hrace. stock IsHeadshot(playerid, targetplayerid) { new Float:x, Float:y, Float:z; GetPlayerPos(targetplayerid, x, y, z); return IsPlayerAimingAt(playerid, x, y, z+0.8, 0.2); } A tahle zase zjisti, jestli mirite hraci na hlavu - headshot. Link to comment Share on other sites More sharing options...
Dennis 0 Odesláno: 10. Duben, 2010 Share Odesláno: 10. Duben, 2010 krása..toto je tut s velkým T .. 20/10 Link to comment Share on other sites More sharing options...
tbx 7 Odesláno: 10. Duben, 2010 Share Odesláno: 10. Duben, 2010 Nice a toto ty jsko ze scriptujes ?? To mas hlavu jako bednu ne ? :S nice tut 10/10 Link to comment Share on other sites More sharing options...
fugasjunior 1 Odesláno: 10. Duben, 2010 Share Odesláno: 10. Duben, 2010 Tak teď lituju že už nepawnim xD Link to comment Share on other sites More sharing options...
DON 1 Odesláno: 10. Duben, 2010 Share Odesláno: 10. Duben, 2010 Nice Nice Nice... je to Nice niCe Link to comment Share on other sites More sharing options...
Guest Smok3RS Odesláno: 10. Duben, 2010 Share Odesláno: 10. Duben, 2010 100/100 Link to comment Share on other sites More sharing options...
Guest ●̪•Đ3B!L●̪• Odesláno: 10. Duben, 2010 Share Odesláno: 10. Duben, 2010 Pekne 10/10 a mohol by si to dať Win_Man do módu lebo zatiaľ je o ničom ..... Good TUT Link to comment Share on other sites More sharing options...
Frajtr 8 Odesláno: 10. Duben, 2010 Share Odesláno: 10. Duben, 2010 Good sem vedel ze to bude slozitejsi sem to parkrat hledal "cheers" pouziju do MarsCity Link to comment Share on other sites More sharing options...
Om3n 78 Odesláno: 10. Duben, 2010 Share Odesláno: 10. Duben, 2010 resil sem to s niCem na ICQ...a rikal ze treba v mim pripade by to bylo hodne tezky to optimalizovat tak aby to nelagovalo server...jelikoz pri vetsim poctu hracu (20+) to hodne zatezuje...a dalsi nevyhoda je ze to dava headshoty i pres zdi...coz je nezadouci Link to comment Share on other sites More sharing options...
Exe_R 0 Odesláno: 10. Duben, 2010 Share Odesláno: 10. Duben, 2010 to se mi bude hodit do mého Afghanistan modu za Hedku 2 body xD Link to comment Share on other sites More sharing options...
Om3n 78 Odesláno: 10. Duben, 2010 Share Odesláno: 10. Duben, 2010 je pravda ze do nejakyho CS modu by to nebylo spatny...ale ty hedky pres zed sou fakt na pytel Link to comment Share on other sites More sharing options...
FreeWall 3 Odesláno: 10. Duben, 2010 Share Odesláno: 10. Duben, 2010 je pravda ze do nejakyho CS modu by to nebylo spatny...ale ty hedky pres zed sou fakt na pytel tjn, ... taky mohli udělat funkci, která by ti zjistila, jestli koukáš na určitý bod skrz ( neprůstřelnej ) objekt Link to comment Share on other sites More sharing options...
niCe 131 Odesláno: 10. Duben, 2010 Author Share Odesláno: 10. Duben, 2010 Jeste maly update, pro lepsi presnost zjisteni, jestli hrac miri na hrace doporucuju vytvoreni vicebodovejch zasahovejch zon, treba: stock IsPlayerAimingAtPlayer(playerid, targetid) { new Float:x, Float:y, Float:z; GetPlayerPos(target, x, y, z); if (IsPlayerAimingAt(playerid, x, y, z-0.75, 0.25)) return true; if (IsPlayerAimingAt(playerid, x, y, z-0.25, 0.25)) return true; if (IsPlayerAimingAt(playerid, x, y, z+0.25, 0.25)) return true; if (IsPlayerAimingAt(playerid, x, y, z+0.75, 0.25)) return true; return false; } Link to comment Share on other sites More sharing options...
Rayman 0 Odesláno: 11. Duben, 2010 Share Odesláno: 11. Duben, 2010 Určite túto funkciu použiem....niCe...very good Link to comment Share on other sites More sharing options...
hospoda96 31 Odesláno: 11. Duben, 2010 Share Odesláno: 11. Duben, 2010 dik to se mi zrovna hodí Link to comment Share on other sites More sharing options...
Lukman 0 Odesláno: 11. Duben, 2010 Share Odesláno: 11. Duben, 2010 no vida, první příspěvek co niCe napsal a neni o wtf jinak good tut, ale myslim si, že to nikdo nevyužije... Link to comment Share on other sites More sharing options...
hospoda96 31 Odesláno: 11. Duben, 2010 Share Odesláno: 11. Duben, 2010 to je pravda lukmane Link to comment Share on other sites More sharing options...
AvestX 5 Odesláno: 11. Duben, 2010 Share Odesláno: 11. Duben, 2010 Pokud jsem to dobře pochopil, (kod sem neštudoval ) by se to hodilo třeba i na zbrojní průkaz když musí trefit terč přesně do prostřed, nice tut. Určitě využiju Link to comment Share on other sites More sharing options...
niCe 131 Odesláno: 11. Duben, 2010 Author Share Odesláno: 11. Duben, 2010 Kompletne hotovou strelnici, kde mam tyhle funkce, najdete na WTSA, kde si muzete vyzkouset, jak to funguje. Link to comment Share on other sites More sharing options...
AvestX 5 Odesláno: 11. Duben, 2010 Share Odesláno: 11. Duben, 2010 Kompletne hotovou strelnici, kde mam tyhle funkce, najdete na WTSA, kde si muzete vyzkouset, jak to funguje. Furt mě zajímalo jak si to udělal :D ještě jednou dík... Link to comment Share on other sites More sharing options...
_Killer_ 1 Odesláno: 12. Duben, 2010 Share Odesláno: 12. Duben, 2010 nice tut 1000/1000 Link to comment Share on other sites More sharing options...
Majitel ffredyk 168 Odesláno: 2. Květen, 2010 Majitel Share Odesláno: 2. Květen, 2010 Ten headshot by se dal zalepit tak, ze nejdriv zjisti jestli hraci ubylo zdravi a pak funkce jestli dostal heda ne? Link to comment Share on other sites More sharing options...
Roox 1 Odesláno: 3. Květen, 2010 Share Odesláno: 3. Květen, 2010 J slo ja to tak mam Akorad je nevyhoda, kdyz spadne treba jen z malyho utesu a nekdo na nej miri a vystreli tak ho to klidne tky zabije.. Link to comment Share on other sites More sharing options...
Majitel ffredyk 168 Odesláno: 3. Květen, 2010 Majitel Share Odesláno: 3. Květen, 2010 J slo ja to tak mam Akorad je nevyhoda, kdyz spadne treba jen z malyho utesu a nekdo na nej miri a vystreli tak ho to klidne tky zabije.. Je hodne mala sance aby ho trefil do hlavy uprostred animace.. kazdej typek bude mirit presne na model a ne 0.8 m nad jeho dolni bod.. Link to comment Share on other sites More sharing options...
tbx 7 Odesláno: 3. Květen, 2010 Share Odesláno: 3. Květen, 2010 ovšem tato funkce nezná rozptyl a taky jesli hráč skutešne vystřelil .. takhle jsme to bugovaly s upilkama na WTLS 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