ZeCo Posted December 24, 2018 Share Posted December 24, 2018 Accest sistem poate ajuta pe cineva care vrea un server mai RolePlay si vrea sa fie ca in realitate, atunci cand cineva moare, sa ramana armele juctorului mort pe jos si un alt jucator sa le poate lua. ```Daca aveti probleme cu implementarea accestui script in GameMode-ul dvs., astept un mesaj in privat si va voi ajuta.``` In primul rand adaugam la inceputul GM-ului: #include <a_samp.inc> #define MAX_DROPPED_WEAPONS 250 // maximul de arme care pot fi pe jos (pe tot server-ul) #define WEAPONS_INFO_TYPE 2 // 0 = Gametext, 1 = 3DText, 2 = Both (atunci cand este langa o arma sau mai multe) Dupa adaugam: enum wData { wSlotOccupied, // = daca slotul este deja ocupat cu o alta arma. wID, wAmmo, Float:wX, Float:wY, Float:wZ, }; new weaponData[MAX_DROPPED_WEAPONS][wData]; new weaponPickup[MAX_DROPPED_WEAPONS]; #if WEAPONS_INFO_TYPE == 1 || WEAPONS_INFO_TYPE == 2 new Text3D:weapon3DText[MAX_DROPPED_WEAPONS]; new Float:positionOffsets[13][2] = { {0.75, 0.0}, {-0.75, 0.0}, {0.0, 0.75}, {0.0, -0.75}, {0.75, 0.75}, {0.75, -0.75}, {-0.75, 0.75}, {-0.75, -0.75}, {1.50, 0.0}, {-1.50, 0.0}, {0.0, 1.50}, {0.0, -1.50}, {0.0, 0.0} }; Acum mergem la `OnPlayerKeyStateChange` si adaugam: if((newkeys & KEY_SECONDARY_ATTACK) && !(oldkeys & KEY_SECONDARY_ATTACK)) { for(new weaponID = 0; weaponID < sizeof(weaponData); weaponID ++) { if(IsPlayerInRangeOfPoint(playerid, 0.5, weaponData[weaponID][wX], weaponData[weaponID][wY], weaponData[weaponID][wZ])) { if(GetPlayerState(playerid) == PLAYER_STATE_ONFOOT) { if(weaponData[weaponID][wSlotOccupied] == 1) { GivePlayerWeapon(playerid, weaponData[weaponID][wID], weaponData[weaponID][wAmmo]); weaponData[weaponID][wSlotOccupied] = 0; weaponData[weaponID][wID] = 0; weaponData[weaponID][wAmmo] = 0; weaponData[weaponID][wX] = 0.0000; weaponData[weaponID][wY] = 0.0000; weaponData[weaponID][wZ] = 0.0000; DestroyPickup(weaponPickup[weaponID]); #if WEAPONS_INFO_TYPE == 1 || WEAPONS_INFO_TYPE == 2 Delete3DTextLabel(weapon3DText[weaponID]); } } } } } Dupa Mergem la `OnPlayerPickUpPickup` si adaugam: new weaponName[27]; for(new weaponID = 0; weaponID < sizeof(weaponData); weaponID ++) { if(pickupid == weaponPickup[weaponID]) { if(weaponData[weaponID][wSlotOccupied] == 1) { GetWeaponName(weaponData[weaponID][wID], weaponName, sizeof(weaponName)); #if WEAPONS_INFO_TYPE == 0 || WEAPONS_INFO_TYPE == 2 new stringGameText[256]; format(stringGameText, sizeof(stringGameText), "~b~%s ~n~~y~Gloante: ~w~%d ~n~~y~Apasa ~n~~w~~k~~VEHICLE_ENTER_EXIT~ ~y~pentru a ridica arma", weaponName, weaponData[weaponID][wAmmo]); GameTextForPlayer(playerid, stringGameText, 3000, 4); } } } Si la sfarsit adaugam: stock DropPlayerWeapons(playerid) { new Float:playerPos[3], playerVirtualWorld, playerWeapons[13][2], weaponID, string[256]; GetPlayerPos(playerid, playerPos[0], playerPos[1], playerPos[2]); playerVirtualWorld = GetPlayerVirtualWorld(playerid); for(new playerWeaponSlot = 0; playerWeaponSlot < 12; playerWeaponSlot++) //13 slot = detonater { weaponID = GetEmptyWeaponIDSlot(); GetPlayerWeaponData(playerid, playerWeaponSlot, playerWeapons[playerWeaponSlot][0], playerWeapons[playerWeaponSlot][1]); if(playerWeapons[playerWeaponSlot][0] != 0) { weaponData[weaponID][wSlotOccupied] = 1; weaponData[weaponID][wID] = playerWeapons[playerWeaponSlot][0]; weaponData[weaponID][wAmmo] = playerWeapons[playerWeaponSlot][1]; weaponData[weaponID][wX] = playerPos[0] + positionOffsets[playerWeaponSlot][0]; weaponData[weaponID][wY] = playerPos[1] + positionOffsets[playerWeaponSlot][1]; weaponData[weaponID][wZ] = playerPos[2]; weaponPickup[weaponID] = CreatePickup ( GetWeaponModelByID(playerWeapons[playerWeaponSlot][0]), 1, weaponData[weaponID][wX], weaponData[weaponID][wY], weaponData[weaponID][wZ], playerVirtualWorld ); #if WEAPONS_INFO_TYPE == 1 || WEAPONS_INFO_TYPE == 2 format(string, sizeof(string), "{0049FF}%s \n{F3FF02}Gloante: {FFFFFF}%d \n{F3FF02}Apasa \n{FFFFFF}Enter sau F {F3FF02}pentru a ridica arma", weaponName, weaponData[weaponID][wAmmo]); weapon3DText[weaponID] = Create3DTextLabel(string, weaponData[weaponID][wX], weaponData[weaponID][wY], weaponData[weaponID][wZ], 20.0, 0, playerVirtualWorld; } } ResetPlayerWeapons(playerid); return 1; } stock GetEmptyWeaponIDSlot() { for(new weaponID = 0; weaponID < sizeof(weaponData); weaponID ++) { if(weaponData[weaponID][wSlotOccupied] == 0) { return weaponID; } } return 0; } stock GetWeaponModelByID(WeaponID) { if(WeaponID == 1) return 331; if(WeaponID == 2) return 333; if(WeaponID == 3) return 334; if(WeaponID == 4) return 335; if(WeaponID == 5) return 336; if(WeaponID == 6) return 337; if(WeaponID == 7) return 338; if(WeaponID == 8) return 339; if(WeaponID == 9) return 341; if(WeaponID == 10) return 321; if(WeaponID == 11) return 322; if(WeaponID == 12) return 323; if(WeaponID == 13) return 324; if(WeaponID == 14) return 325; if(WeaponID == 15) return 326; if(WeaponID == 16) return 342; if(WeaponID == 17) return 343; if(WeaponID == 18) return 344; if(WeaponID == 22) return 346; if(WeaponID == 23) return 347; if(WeaponID == 24) return 348; if(WeaponID == 25) return 349; if(WeaponID == 26) return 350; if(WeaponID == 27) return 351; if(WeaponID == 28) return 352; if(WeaponID == 29) return 353; if(WeaponID == 30) return 355; if(WeaponID == 31) return 356; if(WeaponID == 32) return 372; if(WeaponID == 33) return 357; if(WeaponID == 34) return 358; if(WeaponID == 35) return 359; if(WeaponID == 36) return 360; if(WeaponID == 37) return 361; if(WeaponID == 38) return 362; if(WeaponID == 39) return 363; if(WeaponID == 41) return 365; if(WeaponID == 42) return 366; if(WeaponID == 43) return 367; if(WeaponID == 46) return 371; else return -1; } Link to comment Share on other sites More sharing options...
TLG Ratonescu Posted December 26, 2018 Share Posted December 26, 2018 Pare super ok sistemul tau... dar se poate face foarte mult abuz dupa parerea mea.. de exemplu: un hitman moare cu sniper si un civil il ia intelegi? Felicitari pentru munca depusa oricum. 1 Link to comment Share on other sites More sharing options...
ZeCo Posted December 26, 2018 Author Share Posted December 26, 2018 Just now, AT RatoN said: Pare super ok sistemul tau... dar se poate face foarte mult abuz dupa parerea mea.. de exemplu: un hitman moare cu sniper si un civil il ia intelegi? Felicitari pentru munca depusa oricum. Da se pot face doar la armele gen Knife, Baseball, etc.. armele albe. Link to comment Share on other sites More sharing options...
ZeCo Posted January 13, 2019 Author Share Posted January 13, 2019 Topic Closed. Link to comment Share on other sites More sharing options...
Recommended Posts