11.02.2017, 07:05
Estou querendo criar uma arma falsa, de enfeite para um actor, como essa:
Eu tentei fazer com esses cуdigos:
Pra pegar o valor do ator e o valor da arma ajeitada na mгo do ator como mostra nessa imagem:
Depois com os dois valores eu tentei fazer a matematica pra poder se auto ajeitar todas as armas e fiz essa conta
Ficando assim depois de criar os npcs:
Mas nгo estб funcionando direito, a arma fica no meio da perna do jogador, em outro actor ficou ao contrario
Fora que toda vez que eu chego perto desses actores meu GTA crasha
Alguйm tem alguma ideia?
Eu tentei fazer com esses cуdigos:
Код:
public OnPlayerEditObject(playerid, playerobject, objectid, response, Float:fX, Float:fY, Float:fZ, Float:fRotX, Float:fRotY, Float:fRotZ) { new Float:oldX, Float:oldY, Float:oldZ, Float:oldRotX, Float:oldRotY, Float:oldRotZ; GetObjectPos(objectid, oldX, oldY, oldZ); GetObjectRot(objectid, oldRotX, oldRotY, oldRotZ); if(!playerobject) // If this is a global object, sync the position for other players { if(!IsValidObject(objectid)) return 1; SetObjectPos(objectid, fX, fY, fZ); SetObjectRot(objectid, fRotX, fRotY, fRotZ); } if(response == EDIT_RESPONSE_FINAL) { // The player clicked on the save icon // Do anything here to save the updated object position (and rotation) new string[128]; format(string, sizeof(string), "fX[%f] fY[%f] fZ[%f] fRotX[%f] fRotY[%f] fRotZ[%f]", fX, fY, fZ, fRotX, fRotY, fRotZ ); SendClientMessage(playerid, COLOR_GREY, string); } if(response == EDIT_RESPONSE_CANCEL) { //The player cancelled, so put the object back to it's old position if(!playerobject) //Object is not a playerobject { SetObjectPos(objectid, oldX, oldY, oldZ); SetObjectRot(objectid, oldRotX, oldRotY, oldRotZ); } else { SetPlayerObjectPos(playerid, objectid, oldX, oldY, oldZ); SetPlayerObjectRot(playerid, objectid, oldRotX, oldRotY, oldRotZ); } } return 1; }
Код:
CMD:actorweapon(playerid, params[]) { // https://sampwiki.blast.hk/wiki/EditAttachedObject ~ https://sampwiki.blast.hk/wiki/EditObjec...5.84992309 if(admin[playerid] < 1337) return 0; new actorid; if(sscanf(params,"i", actorid)) return SendClientMessage(playerid, -1, "Use: /actorweapon [actorid]"); if(IsValidActor(actorid)) { new Float:x, Float:y, Float:z; GetActorPos(actorid, x, y, z); new string[128]; format(string, sizeof(string), "[ACTOR POS] x[%f] y[%f] z[%f] RotX[0] RotY[0] RotZ[0]", x, y, z); SendClientMessage(playerid, COLOR_GREY, string); new weaponobj = CreateObject(GetGunObjectID(25), x, y, z, 0.0, 0.0, 0.0); EditObject(playerid, weaponobj); } return 1; }
Depois com os dois valores eu tentei fazer a matematica pra poder se auto ajeitar todas as armas e fiz essa conta
Код:
[ACTOR POS] x[207.732498] y[-98.704498] z[1005.257812] RotX[0] RotY[0] RotZ[0] [WEAPO POS] X[207.578094] Y[-98.815635] Z[1005.568115] RotX[1.599998] RotY[-0.400000] RotZ[-66.699996] [NEW POS] X[-0.154404] Y[-0.111137] Z[+-0.310303] RotX[+1.599998] RotY[-0.400000] RotZ[-66.699996]
Код:
CreateActor(142, -28.9448,-186.8204,1003.5469, 0.0); CreateActor(142, 1.9909,-30.7009,1003.5494, 357.6201); CreateActor(223, 207.7325,-98.7045,1005.2578, 178.9347); CreateActor(29, 203.6479,-40.7589,1001.8047, 181.8473); CreateActor(141, 161.4051,-80.0589,1001.8047, 180.1522); CreateActor(205, 375.6144,-65.7069,1001.5078, 140.8397); CreateActor(85, 501.8527,-21.4871,1000.6797, 90.2779); CreateActor(155, 373.9646,-117.2686,1001.4995, 180.2793); new actstring[128]; for(new a; a< GetActorPoolSize()+1; ++a) { if(IsValidActor(a)) { SetActorVirtualWorld(a, 0); SetActorInvulnerable(a, false); SetActorHealth(a, 10); new Float:x, Float:y, Float:z; GetActorPos(a, x, y, z); CreateObject(GetGunObjectID(25), x-0.154404, y-0.111137, z-0.310303, 1.599998, -0.400000, -66.699996); } }
Fora que toda vez que eu chego perto desses actores meu GTA crasha
Alguйm tem alguma ideia?