UlkiorraJeezy Дата: Суббота, 14.07.2012, 19:00 | Сообщение # 1
Лейтенант
Группа: Администраторы
Сообщений: 71
Статус: Offline
Начнем. 1.В вышку мода: Code
forward LoadTrailer(); forward SaveTrailer(); enum TrailerInfo { tOwned, tOwner[64], Float:tPosX, Float:tPosY, Float:tPosZ, Float:tPosA, tCol, tLvl, tExit, tCost, tLock, }; new Trailer[27][TrailerInfo]; new buytrailer[sizeof(Trailer)]; new Text3D:TrailerLabel[sizeof(Trailer)]; new trailercheck[MAX_PLAYERS];// forward IsATrailer(carid);
2. в enum pInfo 3. в public OnPlayerConnect Code
PlayerInfo[playerid][pTrailer] = 255;
4. в public SetPlayerSpawn Code
new newveh=GetPlayerVehicleID(playerid); new trailer = PlayerInfo[playerid][pTrailer]; for(new i;i<sizeof(Trailer);++i) { if(newstate==2&&newveh==buytrailer[i]) { if(Trailer[i][tOwned]==0) { TogglePlayerControllable(playerid,0); format(string, sizeof(string), "{FFFFFF}Вы действительно собираетесь приобрести данный {FFA500}трейлер{FFFFFF} за ${FFA500}%d?",Trailer[i][tCost]); ShowPlayerDialog(playerid,817,DIALOG_STYLE_MSGBOX,"{FFA500}Покупка трейлера",string," [Да] "," [Нет] "); } if(Trailer[i][tOwned]==1) { if(trailer != i ) { RemovePlayerFromVehicle(playerid),SendClientMessage(playerid,COLOR_GREY,"{FFA500}*{FFFFFF} У вас нет ключей от этого трейлера"); } } }
5. ищем public OnPlayerStateChange(playerid, newstate, oldstate) там будет вот такая функция PLAYER_STATE_DRIVER ниже добавим Code
new newveh=GetPlayerVehicleID(playerid); new trailer = PlayerInfo[playerid][pTrailer]; for(new i;i<sizeof(Trailer);++i) { if(newstate==2&&newveh==buytrailer[i]) { if(Trailer[i][tOwned]==0) { TogglePlayerControllable(playerid,0); format(string, sizeof(string), "{FFFFFF}Вы действительно собираетесь приобрести данный {FFA500}трейлер{FFFFFF} за ${FFA500}%d?",Trailer[i][tCost]); ShowPlayerDialog(playerid,817,DIALOG_STYLE_MSGBOX,"{FFA500}Покупка трейлера",string," [Да] "," [Нет] "); } if(Trailer[i][tOwned]==1) { if(trailer != i ) { RemovePlayerFromVehicle(playerid),SendClientMessage(playerid,COLOR_GREY,"{FFA500}*{FFFFFF} У вас нет ключей от этого трейлера"); } } }
6. в public OnGameModeInit Code
LoadTrailer(); for(new h = 0; h < sizeof(Trailer); h++) { buytrailer[h] = CreateVehicle(508, Trailer[h][tPosX], Trailer[h][tPosY], Trailer[h][tPosZ], Trailer[h][tPosA], Trailer[h][tCol], 1, -1); } for(new h = 0; h < sizeof(Trailer); h++) { if(Trailer[h][tOwned] == 1) { new temp[MAX_STRING]; format(temp, sizeof(temp), "{FFA500}Владелей трейлера: {ffffff}%s ", Trailer[h][tOwner]); TrailerLabel[h] = Create3DTextLabel(temp,0xFF0000FF,Trailer[h][tPosX], Trailer[h][tPosY], Trailer[h][tPosZ]+1.5,40.0,0,1); Attach3DTextLabelToVehicle(TrailerLabel[h] , buytrailer[h] , 0.0, 0.0, 1.5); } if(Trailer[h][tOwned] == 0) { new temp[MAX_STRING]; format(temp, sizeof(temp), "{FFA500}Трейлер: {ffffff}продается{FFA500} \n{FFA500}Цена: %d", Trailer[h][tCost]); TrailerLabel[h] = Create3DTextLabel(temp,0xFF0000FF,Trailer[h][tPosX], Trailer[h][tPosY], Trailer[h][tPosZ]+1.5,40.0,0,1); Attach3DTextLabelToVehicle(TrailerLabel[h] , buytrailer[h] , 0.0, 0.0, 1.5); } }
7.В public OnPlayerRegister Code
format(var, 32, "Trailer=%d\n",PlayerInfo[playerid][pTrailer]);fwrite(hFile, var);
8. в public OnPlayerUpDate Code
format(var, 32, "Trailer=%d\n",PlayerInfo[playerid][pTrailer]);fwrite(hFile, var);
9.теперь в OnPlayerLogin добавим Code
if( strcmp( key , "Trailer" , true ) == 0 ) { val = ini_GetValue( Data ); PlayerInfo[playerid][pTrailer] = strval( val ); }
10. в public OnPlayerCommandText
if(strcmp(cmd,"/t",true)==0) { new temp[256]; new house = PlayerInfo[playerid][pTrailer]; temp = strtok(cmdtext, idx); if(!strlen(temp)) { SendClientMessage(playerid,COLOR_WHITE," Используйте: /t (sell buy park lock color gps) "); return 1; } if(strcmp(temp,"sell",true)==0) { if(strcmp(playername, Trailer[house][tOwner], true) == 0) { PlayerInfo[playerid][pTrailer] = 255; Trailer[house][tOwned] = 0; Trailer[house][tLock] = 0; GetPlayerName(playerid, sendername, sizeof(sendername)); strmid(Trailer[house][tOwner], "The State", 0, strlen("The State"), 255); GivePlayerMoney(playerid,Trailer[house][tCost]); SendClientMessage(playerid,COLOR_WHITE,"Поздравляю, Вы продали трейлер "); RemovePlayerFromVehicle(playerid); SaveTrailer(); OnPlayerUpdate(playerid); TrailerUpdate(); return 1; } else { SendClientMessage(playerid, COLOR_WHITE, " Вы не владеете трейлером. "); return 1; } } if(strcmp(temp,"buy",true)==0) { for(new b;b<sizeof(Trailer);b++) { if(IsPlayerInVehicle(playerid,buytrailer[b])) { if(Trailer[b][tOwned]!=0) return SendClientMessage(playerid,COLOR_WHITE," Этот трейлер уже куплен! "); if(PlayerInfo[playerid][pTrailer]!= 255 || PlayerInfo[playerid][pPhousekey] != 255) { SendClientMessage(playerid,COLOR_WHITE," У вас уже есть дом/трейлер "); RemovePlayerFromVehicle(playerid); TogglePlayerControllable(playerid, 1); return 1; } if(Trailer[b][tLvl] > PlayerInfo[playerid][pLevel]) { SendClientMessage(playerid, COLOR_WHITE, "У вас нехватает уровня."); RemovePlayerFromVehicle(playerid); TogglePlayerControllable(playerid, 1); return 1; } if(GetPlayerMoney(playerid) > Trailer[b][tCost]) { PlayerInfo[playerid][pTrailer] = b; Trailer[b][tOwned] = 1; Trailer[b][tLock] = 1; GetPlayerName(playerid, sendername, sizeof(sendername)); strmid(Trailer[b][tOwner], sendername, 0, strlen(sendername), 255); SendClientMessage(playerid, COLOR_WHITE, "Поздравляем с покупкой трейлера."); GivePlayerMoney(playerid,-Trailer[b][tCost]); // PlayerPlaySound(playerid, 1052, 0.0, 0.0, 0.0); TogglePlayerControllable(playerid, 1); SaveTrailer(); OnPlayerUpdate(playerid); TrailerUpdate(); return 1; } else { // strmid(Trailer[b][tOwner], sendername, 0, strlen(sendername), 255); SendClientMessage(playerid, COLOR_WHITE, "У вас не хватает денег ."); RemovePlayerFromVehicle(playerid); TogglePlayerControllable(playerid, 1); } } } } if(strcmp(temp,"gps",true)==0) { if(house==255)return SendClientMessage(playerid,COLOR_WHITE,"У Вас нету техники "); new Float:vx,Float:vy,Float:vz; GetVehiclePos(buytrailer[house],vx,vy,vz); SetPlayerCheckpoint(playerid,vx,vy,vz,5.0); trailercheck[playerid]=1; SendClientMessage(playerid,COLOR_WHITE,"Ваш трейлер отмечен маркером на карте"); return 1; } if(strcmp(temp,"lock",true)==0) { for(new u;u<sizeof(Trailer);u++) { if(house==255)return SendClientMessage(playerid,COLOR_WHITE," У Вас нету машины! "); if(Trailer[u][tLock] == 0) { if(house==u) { Trailer[u][tLock]=1; SendClientMessage(playerid,COLOR_WHITE,"Трейлер закрыт "); SaveTrailer(); LockCar(buytrailer[u]); return 1; } } else if(Trailer[u][tLock] == 1) { if(house==u) { Trailer[u][tLock]=0; UnLockCar(buytrailer[u]); SendClientMessage(playerid,COLOR_WHITE,"Трейлер открыт "); SaveTrailer(); return 1; } } } } if(strcmp(temp,"park",true)==0) { if(house==255)return SendClientMessage(playerid,COLOR_WHITE,"У вас нету трейлера"); for(new u;u<sizeof(Trailer);u++) { if(IsPlayerInVehicle(playerid,buytrailer[u])) { new Float:vx,Float:vy,Float:vz,Float:vfa; // CarInfo[house][vehmodel]=GetVehicleModel(buytrailer[u]); GetVehiclePos(buytrailer[u],vx,vy,vz); GetVehicleZAngle(buytrailer[u],vfa); Trailer[u][tPosX]=vx; Trailer[u][tPosY]=vy; Trailer[u][tPosZ]=vz; Trailer[u][tPosA]=vfa; SendClientMessage(playerid,COLOR_WHITE,"Вы припарковали свою технику "); DestroyVehicle(buytrailer[u]); buytrailer[u] = CreateVehicle(508, Trailer[u][tPosX], Trailer[u][tPosY], Trailer[u][tPosZ], Trailer[u][tPosA], Trailer[u][tCol], 1, -1); // Attach3DTextLabelToVehicle(CarLabel[u] , buyveh[u] , 0.0, 0.0, 1.0); SaveTrailer(); return 1; } } } if(strcmp(temp,"color",true)==0) { // new house = PlayerInfo[playerid][pVeh]; GetPlayerName(playerid, playername, sizeof(playername)); if (house != 255 && strcmp(playername, Trailer[PlayerInfo[playerid][pTrailer]][tOwner], true) == 0) { tmp = strtok(cmdtext, idx); if(!strlen(tmp)) { SendClientMessage(playerid, COLOR_GRAD3," ИСПОЛЬЗУЙТЕ: /t color [color number]"); } new color = strval(tmp); if(color > 800) { SendClientMessage(playerid, COLOR_GRAD3," Максимум 126"); return 1; } if (GetPlayerMoney(playerid) < SBizzInfo[5][sbEntranceCost]) { SendClientMessage(playerid, COLOR_GRAD3," Вы не можете позволить себе это"); } Trailer[house][tCol] = color; format(string, sizeof(string), " Цвет установлен %d -$%d",color,SBizzInfo[5][sbEntranceCost]); SendClientMessage(playerid, COLOR_GRAD3,string); DestroyVehicle(buytrailer[house]); buytrailer[house] = CreateVehicle(508, Trailer[house][tPosX], Trailer[house][tPosY], Trailer[house][tPosZ], Trailer[house][tPosA], Trailer[house][tCol], 1, -1); SendClientMessage(playerid, COLOR_GRAD6, " Покрасочные работы заказаны"); GivePlayerMoney(playerid,-SBizzInfo[5][sbEntranceCost]); SBizzInfo[5][sbTill] += SBizzInfo[5][sbEntranceCost]; SBizzInfo[5][sbProducts] -= 1; ExtortionSBiz(5, 5000); new Float:X,Float:Y,Float:Z;GetPlayerPos(playerid, X,Y,Z);//координаты и угол поворота игрока PlayerPlaySound(giveplayerid, 1134, 0.0, 0.0, 0.0); OnPropUpdate(); SaveTrailer(); } else { SendClientMessage(playerid, COLOR_GRAD2, "Вы не владеете трейлером"); return 1; } } return 1; } теперь добавим stock IsVehicleAttachedToTrailer(vehicleid) { //получить ID тачки прицепленной к чему либо for(new car = 1; car<(MAX_VEHICLES-1); car++) { if(IsTrailerAttachedToVehicle(car)) { //работает правильно толко тогда когда в тягаче сидит человек if( vehicleid == GetVehicleTrailer(car) ) { //ИНФОРМИРОВАНИЕ //new string[MAX_STRING]; //format(string, sizeof(string), "IsVehicleAttachedToTrailer(%d) - %d", vehicleid, car); //ABroadCast(COLOR_MAROON, string, 9); return car;//если данная тачка к чему то прицеплена то вернуть верно } } } return 0; }
11. в низ мода
public LoadTrailer() { new arrCoords[11][64]; new strFromFile2[256]; new File: file = fopen("trailer.cfg", io_read); if (file) { new idx; while (idx < sizeof(Trailer)) { fread(file, strFromFile2); split(strFromFile2, arrCoords, '|'); Trailer[idx][tOwned] = strval(arrCoords[0]); strmid(Trailer[idx][tOwner], arrCoords[1], 0, strlen(arrCoords[1]), 255); Trailer[idx][tPosX] = floatstr(arrCoords[2]); Trailer[idx][tPosY] = floatstr(arrCoords[3]); Trailer[idx][tPosZ] = floatstr(arrCoords[4]); Trailer[idx][tPosA] = floatstr(arrCoords[5]); Trailer[idx][tCol] = strval(arrCoords[6]); Trailer[idx][tLvl] = strval(arrCoords[7]); Trailer[idx][tExit] = strval(arrCoords[8]); Trailer[idx][tCost] = strval(arrCoords[9]); Trailer[idx][tLock] = strval(arrCoords[10]); idx++; } fclose(file); } return 1; } public SaveTrailer() { new idx; new File: file2; while (idx < sizeof(Trailer)) { new coordsstring[256]; format(coordsstring, sizeof(coordsstring), "%d|%s|%f|%f|%f|%f|%d|%d|%d|%d|%d\n", Trailer[idx][tOwned], Trailer[idx][tOwner], Trailer[idx][tPosX], Trailer[idx][tPosY], Trailer[idx][tPosZ], Trailer[idx][tPosA], Trailer[idx][tCol], Trailer[idx][tLvl], Trailer[idx][tExit], Trailer[idx][tCost], Trailer[idx][tLock]); if(idx == 0) { file2 = fopen("trailer.cfg", io_write); } else { file2 = fopen("trailer.cfg", io_append); } fwrite(file2, coordsstring); idx++; fclose(file2); } return 1; } stock TrailerUpdate() { for(new h = 0; h < sizeof(Trailer); h++) { if(Trailer[h][tOwned] == 1) { Delete3DTextLabel(TrailerLabel[h]); new temp[MAX_STRING]; format(temp, sizeof(temp), "{FFA500}Трейлер:{FFFFFF} %s ", Trailer[h][tOwner]); TrailerLabel[h] = Create3DTextLabel(temp,0xFF0000FF,Trailer[h][tPosX], Trailer[h][tPosY], Trailer[h][tPosZ]+1.5,40.0,0,1); Attach3DTextLabelToVehicle(TrailerLabel[h] , buytrailer[h] , 0.0, 0.0, 3.0); } if(Trailer[h][tOwned] == 0) { Delete3DTextLabel(TrailerLabel[h]); new temp[MAX_STRING]; format(temp, sizeof(temp), "{FFA500}Трейлер: {FFFFFF}%s{FFA500} \nЦена: %d", Trailer[h][tOwner], Trailer[h][tCost]); TrailerLabel[h] = Create3DTextLabel(temp,0xFF0000FF,Trailer[h][tPosX], Trailer[h][tPosY], Trailer[h][tPosZ]+1.5,40.0,0,1); Attach3DTextLabelToVehicle(TrailerLabel[h] , buytrailer[h] , 0.0, 0.0, 3.0); } } }
12. ко всем forward Code
forward IsATrailer(carid);
13. добавить public Code
public IsATrailer(carid) { if(carid >= truck[0] && carid <= truck[2]) { return 1; } return 0; }
14. в начало мода FS с трейлерами http://rghost.ru/32573301