По многочисленным просьбам решил написать F.A.Q. по созданию виртуальных миров для домов и бизнесов.
Для начала распишу для домов :
В конец enum hInfo добавляем : [pwn]hWorld,[/pwn]
В public SetPlayerSpawn находим следующее : [pwn]if(house !=255) { if(SpawnChange[playerid]) { SetPlayerToTeamColor(playerid); SetPlayerInterior(playerid,HouseInfo[house][hInt]); SetPlayerPos(playerid, HouseInfo[house][hExitx], HouseInfo[house][hExity],HouseInfo[house][hExitz]); PlayerInfo[playerid][pLocal] = house; PlayerInfo[playerid][pInt] = HouseInfo[house][hInt]; return 1; } }[/pwn] и после SetPlayerToTeamColor(playerid); вставляем : [pwn]SetPlayerVirtualWorld(playerid, HouseInfo[house][hWorld]);[/pwn]
В public LoadProperty находим : [pwn]new arrCoords[29][64];[/pwn] и 29 меняет на 30.
Далее после HouseInfo[idx][hLevel] = strval(arrCoords[28]); вставляем : [pwn]HouseInfo[idx][hWorld] = strval(arrCoords[29]);[/pwn]
Теперь в public OnPropUpdate находим следующее : [pwn]format(coordsstring, sizeof(coordsstring), "%f,%f,%f,%f,%f,%f,%d,%d,%d,%d,%d,%d,%s,%s,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\n",[/pwn] и перед \n" добавляем ,%d т.е. у вас должно получиться так : [pwn]format(coordsstring, sizeof(coordsstring), "%f,%f,%f,%f,%f,%f,%d,%d,%d,%d,%d,%d,%s,%s,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\n",[/pwn] Далее спускаемся чуть ниже и заменяем это : [pwn]HouseInfo[idx][hLevel]);[/pwn] на это : [pwn]HouseInfo[idx][hLevel],[/pwn] и ниже добавляем : [pwn]HouseInfo[idx][hWorld]);[/pwn] Далее находим команду "/buyhouse", а именно это : [pwn]if(GetPlayerMoney(playerid) > HouseInfo[h][hValue]) { PlayerInfo[playerid][pPhousekey] = h; HouseInfo[h][hOwned] = 1; GetPlayerName(playerid, sendername, sizeof(sendername)); strmid(HouseInfo[h][hOwner], sendername, 0, strlen(sendername), 255); GivePlayerMoney(playerid,-HouseInfo[h][hValue]); PlayerPlayMusic(playerid); SetPlayerInterior(playerid,HouseInfo[h][hInt]); SetPlayerPos(playerid,HouseInfo[h][hExitx],HouseInfo[h][hExity],HouseInfo[h][hExitz]);[/pwn] и перед SetPlayerInterior(playerid,HouseInfo[h][hInt]); вставляем следующее : [pwn]SetPlayerVirtualWorld(playerid, HouseInfo[h][hWorld]);[/pwn]
Далее находим команду "/rentroom", а именно это : [pwn]if(GetPlayerMoney(playerid) > HouseInfo[h][hRent]) { PlayerInfo[playerid][pPhousekey] = h; GivePlayerMoney(playerid,-HouseInfo[h][hRent]); HouseInfo[h][hTakings] = HouseInfo[h][hTakings]+HouseInfo[h][hRent]; PlayerPlayMusic(playerid); SetPlayerInterior(playerid,HouseInfo[h][hInt]);[/pwn] и перед SetPlayerInterior(playerid,HouseInfo[h][hInt]); вставляем следующее : [pwn]SetPlayerVirtualWorld(playerid,HouseInfo[h][hWorld]);[/pwn]
Теперь в команде "/house" находим : [pwn]new housenum = strval(tmp); SetPlayerInterior(playerid,HouseInfo[housenum][hInt]); SetPlayerPos(playerid,HouseInfo[housenum][hExitx],HouseInfo[housenum][hExity],HouseInfo[housenum][hExitz]);[/pwn] и перед SetPlayerInterior(playerid,HouseInfo[housenum][hInt]); вставляем следующее : [pwn]SetPlayerVirtualWorld(playerid,HouseInfo[housenum][hWorld]);[/pwn]
Далее в команде "/enter" находим : [pwn]if(PlayerInfo[playerid][pPhousekey] == i || HouseInfo[i][hLock] == 0) { SetPlayerInterior(playerid,HouseInfo[i][hInt]); SetPlayerPos(playerid,HouseInfo[i][hExitx],HouseInfo[i][hExity],HouseInfo[i][hExitz]);[/pwn] и перед SetPlayerInterior(playerid,HouseInfo[i][hInt]); вставляем следующее : [pwn]SetPlayerVirtualWorld(playerid, HouseInfo[i][hWorld]);[/pwn]
Далее в команде "/exit" находим : [pwn]if (PlayerToPoint(3, playerid,HouseInfo[i][hExitx], HouseInfo[i][hExity], HouseInfo[i][hExitz])) { SetPlayerInterior(playerid,0); SetPlayerPos(playerid,HouseInfo[i][hEntrancex],HouseInfo[i][hEntrancey],HouseInfo[i][hEntrancez]); PlayerInfo[playerid][pInt] = 0; PlayerInfo[playerid][pLocal] = 255;[/pwn] и изменяем на это : [pwn]if (GetPlayerVirtualWorld(playerid) == HouseInfo[i][hWorld] && IsPlayerInRangeOfPoint(playerid,3.0,HouseInfo[i][hExitx], HouseInfo[i][hExity], HouseInfo[i][hExitz])) { SetPlayerVirtualWorld(playerid,0); SetPlayerInterior(playerid,0); SetPlayerPos(playerid,HouseInfo[i][hEntrancex],HouseInfo[i][hEntrancey],HouseInfo[i][hEntrancez]); PlayerInfo[playerid][pInt] = 0; PlayerInfo[playerid][pLocal] = 255;[/pwn]
Далее находим команду "/ram", а именно : [pwn]SetPlayerInterior(playerid,HouseInfo[i][hInt]); SetPlayerPos(playerid,HouseInfo[i][hExitx],HouseInfo[i][hExity],HouseInfo[i][hExitz]);[/pwn] и перед SetPlayerInterior(playerid,HouseInfo[i][hInt]); вставляем следующее : [pwn]SetPlayerVirtualWorld(playerid, HouseInfo[i][hWorld]);[/pwn]
Готово, мы сделали виртуальные миры для домов.
Теперь сделаем виртуальные миры для бизнесов :
В конец enum bInfo добавляем : [pwn]bWorld,[/pwn]
В public LoadBizz находим : [pwn]new arrCoords[19][64];[/pwn] и 19 меняет на 20.
Далее после BizzInfo[idx][bPriceProd] = strval(arrCoords[18]); вставляем : [pwn]BizzInfo[idx][bWorld] = strval(arrCoords[19]);[/pwn]
Теперь в public OnPropUpdate находим следующее : [pwn]format(coordsstring, sizeof(coordsstring), "%d|%s|%s|%s|%f|%f|%f|%f|%f|%f|%d|%d|%d|%d|%d|%d|%d|%d|%d\n",[/pwn] и перед \n" добавляем |%d т.е. у вас должно получиться так : [pwn]format(coordsstring, sizeof(coordsstring), "%d|%s|%s|%s|%f|%f|%f|%f|%f|%f|%d|%d|%d|%d|%d|%d|%d|%d|%d|%d\n",[/pwn] Далее спускаемся чуть ниже и заменяем это : [pwn]BizzInfo[idx][bPriceProd];[/pwn] на это : [pwn]BizzInfo[idx][bPriceProd],[/pwn] и ниже добавляем : [pwn]BizzInfo[idx][bWorld]);[/pwn]
Далее находим команду "/buybiz", а именно это : [pwn]if(GetPlayerMoney(playerid) > BizzInfo[bBuyPrice]) { SetPlayerVirtualWorld(playerid,BizzInfo[b][bWorld]); PlayerInfo[playerid][pPbiskey] = b; BizzInfo[b][bOwned] = 1; GetPlayerName(playerid, sendername, sizeof(sendername)); strmid(BizzInfo[b][bOwner], sendername, 0, strlen(sendername), 255); GivePlayerMoney(playerid,-BizzInfo[b][bBuyPrice]); PlayerPlayMusic(playerid); SetPlayerInterior(playerid,BizzInfo[b][bInterior]); PlayerInfo[playerid][pInt] = BizzInfo[b][bInterior];[/pwn] и перед [b]SetPlayerInterior(playerid,BizzInfo[b][bInterior]); вставляем следующее : [pwn]SetPlayerVirtualWorld(playerid,BizzInfo[bWorld]);[/pwn]
Теперь в команде [b]"/biz" находим : [pwn]new housenum = strval(tmp); SetPlayerInterior(playerid,BizzInfo[housenum][bInterior]); SetPlayerPos(playerid,BizzInfo[housenum][bExitX],BizzInfo[housenum][bExitY],BizzInfo[housenum][bExitZ]);[/pwn] и перед SetPlayerInterior(playerid,BizzInfo[housenum][bInterior]); вставляем следующее : [pwn]SetPlayerVirtualWorld(playerid, BizzInfo[housenum][bWorld]);[/pwn]
Далее в команде "/enter" находим : [pwn]SetPlayerInterior(playerid,BizzInfo[i][bInterior]); SetPlayerPos(playerid,BizzInfo[i][bExitX],BizzInfo[i][bExitY],BizzInfo[i][bExitZ]); PlayerInfo[playerid][pInt] = BizzInfo[i][bInterior];[/pwn] и перед SetPlayerInterior(playerid,BizzInfo[i][bInterior]); вставляем следующее : [pwn]SetPlayerVirtualWorld(playerid, BizzInfo[i][bWorld]);[/pwn]
Далее в команде "/exit" находим : [pwn]if (PlayerToPoint(3, playerid,HouseInfo[i][hExitx], HouseInfo[i][hExity], HouseInfo[i][hExitz])) { SetPlayerInterior(playerid,0); SetPlayerPos(playerid,HouseInfo[i][hEntrancex],HouseInfo[i][hEntrancey],HouseInfo[i][hEntrancez]); PlayerInfo[playerid][pInt] = 0; PlayerInfo[playerid][pLocal] = 255;[/pwn]
и изменяем на это : [pwn]if (GetPlayerVirtualWorld(playerid) == BizzInfo[i][bWorld] && IsPlayerInRangeOfPoint(playerid,3.0,BizzInfo[i][bExitX], BizzInfo[i][bExitY], BizzInfo[i][bExitZ])) { SetPlayerVirtualWorld(playerid,0); SetPlayerInterior(playerid,0); PlayerInfo[playerid][pInt] = 0; SetPlayerPos(playerid,BizzInfo[i][bEntranceX],BizzInfo[i][bEntranceY],BizzInfo[i][bEntranceZ]); PlayerInfo[playerid][pLocal] = 255;[/pwn]
Готово, мы сделали виртуальные миры для бизнесов.
Если у вас покупка дома/бизнеса через диалог окна, то там тоже нужно слегка подредактировать код. Для этого смотрите команды "/buyhouse" и "/buybiz" и сравнивайте с кодом в диалогах.
а я в /enter встовлял SetPlayerVirtualWorld(playerid,i+50); в /exit SetPlayerVirtualWorld(playerid,0); так можно ? Не в возрасте дело,а в культуре общения и уровне интеллектуального развития
Если вам лижут жопу, не обольщайтесь, возможно это для смазки.