Приветствую Вас Гость
Воскресенье
07.09.2025
12:06

SAMPL - Новое поколение в индустрии SAMP

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
[Мануал] Сис-ма трейлеров
Roma_BelovДата: Суббота, 18.04.2015, 01:12 | Сообщение # 1
Рядовой
Группа: Администраторы
Сообщений: 12
Репутация: 20013
Статус: Offline
Начнем. 
1.В вышку мода:


Код
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 


Код
2. в enum pInfo
 3. в public OnPlayerConnect 


Код
PlayerInfo[playerid] [pTrailer]= 255;
 

4. в public SetPlayerSpawn 


Код
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 

ниже добавим 


Код
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 


Код
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 


Код
format(var, 32, "Trailer=%d\n",PlayerInfo[playerid][pTrailer]);fwrite(hFile, var);
 
8. в public OnPlayerUpDate 


Код
format(var, 32, "Trailer=%d\n",PlayerInfo[playerid][pTrailer]);fwrite(hFile, var);
 
9.теперь в OnPlayerLogin добавим 

Код
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;  
}

в низ мода 


Код
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 

Код
forward IsATrailer(carid);
 
13. добавить public 


Код
public IsATrailer(carid)  
{  
if(carid >= truck[0] && carid <= truck[2])  
{  
return 1;  
}  
return 0;  
}

14. в начало мода 


Код
new truck[3];
 
  • Страница 1 из 1
  • 1
Поиск: