Итак, зимой 2008 года я делал "супер навороченный" мод, с миллиардами возможностей... Одной из них были пончиковые. Сегодня я немного профиксил код, оформил его в отдельный фильтрскрипт и выкладываю. Теперь Вы можете покушать пончиков и попить молоко/чай/кофе в заведениях "Rusty Brown's Ring Donuts" по всему штату Сан-Андреас.
Команды (только для ркон-админа, делались для теста):
/d0 - дать себе $20;
/d1 - телепорт к первому заведению;
/d2 - ко второму;
/d3 - к третьему;
/d4 - установить себе здоровье на 80.
Автор: OKStyle
ЗЫ: В планах есть реализация на текстдравах, как в мобильных GTA, но не думаю, что будет релиз.
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
Команды (только для ркон-админа, делались для теста):
/d0 - дать себе $20;
/d1 - телепорт к первому заведению;
/d2 - ко второму;
/d3 - к третьему;
/d4 - установить себе здоровье на 80.
PHP:
#include <a_samp>
#define COLOR_INTERFACE_BODY 0xFDE39DAA
/*-------------------------*\
| Rusty Brown's Ring Donuts |
| 06/29/2010 by O.K.Style™ |
\*-------------------------*/
new PU_Donuts[7],Text3D:Confectioner[3],Menu:MENU_Donuts;
new bool:IsPlayerInDonut[MAX_PLAYERS];
public OnFilterScriptInit()
{
PU_Donuts[0] = CreatePickup(1318,23,1038.2194,-1340.2275,13.7389,0); // Вход в пончиковую Лос-Сантоса
PU_Donuts[1] = CreatePickup(1318,23,377.1268,-192.8557,1000.6401,1); // Выход из пончиковой Лос-Сантоса
PU_Donuts[2] = CreatePickup(1318,23,-2767.8708,788.8154,52.7813,0); // Вход в пончиковую Сан-Фиерро
PU_Donuts[3] = CreatePickup(1318,23,377.1268,-192.8557,1000.6401,2); // Выход из пончиковой Сан-Фиерро
PU_Donuts[4] = CreatePickup(1318,23,-144.0197,1224.4497,19.8992,0); // Вход в пончиковую Форта Карсон
PU_Donuts[5] = CreatePickup(1318,23,377.1268,-192.8557,1000.6401,3); // Выход из пончиковой Форта Карсон
PU_Donuts[6] = CreatePickup(1274,23,379.2723,-190.3757,1000.0,-1); // Меню пончиковой // Закоментируйте строку и будет чекпоинт как в аммо
ConnectNPC("Confectioner_1","blank");
ConnectNPC("Confectioner_2","blank");
ConnectNPC("Confectioner_3","blank");
MENU_Donuts = CreateMenu("Rusty's Donut",2,50.0,140.0,250.0,10.0);
SetMenuColumnHeader(MENU_Donuts,0,"Product");
SetMenuColumnHeader(MENU_Donuts,1,"Cost");
AddMenuItem(MENU_Donuts,0,"Donut with condensed milk");
AddMenuItem(MENU_Donuts,1,"$8");
AddMenuItem(MENU_Donuts,0,"Donut with powdered sugar");
AddMenuItem(MENU_Donuts,1,"$7");
AddMenuItem(MENU_Donuts,0,"Donut with chocolate");
AddMenuItem(MENU_Donuts,1,"$6");
AddMenuItem(MENU_Donuts,0,"Cup of milk");
AddMenuItem(MENU_Donuts,1,"$5");
AddMenuItem(MENU_Donuts,0,"Cup of tea");
AddMenuItem(MENU_Donuts,1,"$4");
AddMenuItem(MENU_Donuts,0,"Cup of coffee");
AddMenuItem(MENU_Donuts,1,"$3");
AddMenuItem(MENU_Donuts,0,"Exit");
return 1;
}
public OnPlayerSpawn(playerid)
{
if(IsPlayerNPC(playerid))
{
new NPCName[MAX_PLAYER_NAME];
GetPlayerName(playerid,NPCName,sizeof(NPCName));
if(!strcmp(NPCName,"Confectioner_1",true))
{
SetPlayerInterior(playerid,17);
SetPlayerVirtualWorld(playerid,1);
SetPlayerColor(playerid,COLOR_INTERFACE_BODY);
SetPlayerSkin(playerid,209);
SetPlayerPos(playerid,380.6690,-189.0937,1000.6328);
SetPlayerFacingAngle(playerid,145.4114);
Confectioner[0] = Create3DTextLabel("Продавец пончиков",0xFDE39DFF,0.0,0.0,0.0,10.0,1,0);
Attach3DTextLabelToPlayer(Confectioner[0],playerid,0.0,0.0,0.15);
}
else if(!strcmp(NPCName,"Confectioner_2",true))
{
SetPlayerInterior(playerid,17);
SetPlayerVirtualWorld(playerid,2);
SetPlayerColor(playerid,COLOR_INTERFACE_BODY);
SetPlayerSkin(playerid,209);
SetPlayerPos(playerid,380.6690,-189.0937,1000.6328);
SetPlayerFacingAngle(playerid,145.4114);
Confectioner[0] = Create3DTextLabel("Продавец пончиков",0xFDE39DFF,0.0,0.0,0.0,10.0,1,0);
Attach3DTextLabelToPlayer(Confectioner[0],playerid,0.0,0.0,0.15);
}
else if(!strcmp(NPCName,"Confectioner_3",true))
{
SetPlayerInterior(playerid,17);
SetPlayerVirtualWorld(playerid,3);
SetPlayerColor(playerid,COLOR_INTERFACE_BODY);
SetPlayerSkin(playerid,209);
SetPlayerPos(playerid,380.6690,-189.0937,1000.6328);
SetPlayerFacingAngle(playerid,145.4114);
Confectioner[0] = Create3DTextLabel("Продавец пончиков",0xFDE39DFF,0.0,0.0,0.0,10.0,1,0);
Attach3DTextLabelToPlayer(Confectioner[0],playerid,0.0,0.0,0.15);
}
}
SetPlayerMapIcon(playerid,0,1038.2194,-1340.2275,13.7389,40,-1);
SetPlayerMapIcon(playerid,1,-2767.8708,788.8154,52.7813,40,-1);
SetPlayerMapIcon(playerid,2,-144.0197,1224.4497,19.8992,40,-1);
IsPlayerInDonut[playerid] = false;
return 1;
}
public OnPlayerPickUpPickup(playerid,pickupid)
{
if(pickupid == PU_Donuts[0])
{
SetPlayerInterior(playerid,17);
SetPlayerVirtualWorld(playerid,1);
SetPlayerPos(playerid,377.8349,-191.2160,1000.6328);
SetPlayerFacingAngle(playerid,0.0);
SetCameraBehindPlayer(playerid);
GameTextForPlayer(playerid,"Rusty Brown's Ring Donuts",5000,1);
// SetPlayerCheckpoint(playerid,379.2723,-190.3757,1000.0,1.0); // Раскомментируйте сроки и будет чекпоинт как в аммо
}
if(pickupid == PU_Donuts[1])
{
SetPlayerInterior(playerid,0);
SetPlayerVirtualWorld(playerid,0);
SetCameraBehindPlayer(playerid);
SetPlayerPos(playerid,1038.6129,-1337.7944,13.7266);
SetPlayerFacingAngle(playerid,0.0);
// DisablePlayerCheckpoint(playerid);
}
if(pickupid == PU_Donuts[2])
{
SetPlayerInterior(playerid,17);
SetPlayerVirtualWorld(playerid,2);
SetPlayerPos(playerid,377.8349,-191.2160,1000.6328);
SetPlayerFacingAngle(playerid,0.0);
SetCameraBehindPlayer(playerid);
GameTextForPlayer(playerid,"Rusty Brown's Ring Donuts",5000,1);
// SetPlayerCheckpoint(playerid,379.2723,-190.3757,1000.0,1.0);
}
if(pickupid == PU_Donuts[3])
{
SetPlayerInterior(playerid,0);
SetPlayerVirtualWorld(playerid,0);
SetPlayerPos(playerid,-2765.8887,789.3812,52.7813);
SetPlayerFacingAngle(playerid,180.0);
SetCameraBehindPlayer(playerid);
// DisablePlayerCheckpoint(playerid);
}
if(pickupid == PU_Donuts[4])
{
SetPlayerInterior(playerid,17);
SetPlayerVirtualWorld(playerid,3);
SetPlayerPos(playerid,377.8349,-191.2160,1000.6328);
SetPlayerFacingAngle(playerid,0.0);
SetCameraBehindPlayer(playerid);
GameTextForPlayer(playerid,"Rusty Brown's Ring Donuts",5000,1);
// SetPlayerCheckpoint(playerid,379.2723,-190.3757,1000.0,1.0);
}
if(pickupid == PU_Donuts[5])
{
SetPlayerInterior(playerid,0);
SetPlayerVirtualWorld(playerid,0);
SetPlayerPos(playerid,-144.0139,1222.0508,19.8992);
SetPlayerFacingAngle(playerid,180.0);
SetCameraBehindPlayer(playerid);
// DisablePlayerCheckpoint(playerid);
}
if(pickupid == PU_Donuts[6])
{
if(IsPlayerInDonut[playerid] == false)
{
IsPlayerInDonut[playerid] = true;
TogglePlayerControllable(playerid,0);
SetPlayerPos(playerid,379.2723,-190.3757,1000.6328);
SetPlayerFacingAngle(playerid,311.3329);
ShowMenuForPlayer(MENU_Donuts,playerid);
SetCameraBehindPlayer(playerid);
}
}
}
/*
public OnPlayerEnterCheckpoint(playerid)
{
if(IsPlayerInDonut[playerid] == false)
{
IsPlayerInDonut[playerid] = true;
TogglePlayerControllable(playerid,0);
SetPlayerPos(playerid,379.2723,-190.3757,1000.6328);
SetPlayerFacingAngle(playerid,311.3329);
ShowMenuForPlayer(MENU_Donuts,playerid);
SetCameraBehindPlayer(playerid);
}
return 1;
}
*/
public OnPlayerCommandText(playerid,cmdtext[])
{
if(!strcmp(cmdtext,"/d0",true) && IsPlayerAdmin(playerid)) return GivePlayerMoney(playerid,20);
if(!strcmp(cmdtext,"/d1",true) && IsPlayerAdmin(playerid)) return SetPlayerPos(playerid,1038.6129,-1337.7944,13.7266);
if(!strcmp(cmdtext,"/d2",true) && IsPlayerAdmin(playerid)) return SetPlayerPos(playerid,-2765.8887,789.3812,52.7813);
if(!strcmp(cmdtext,"/d3",true) && IsPlayerAdmin(playerid)) return SetPlayerPos(playerid,-144.0139,1222.0508,19.8992);
if(!strcmp(cmdtext,"/d4",true) && IsPlayerAdmin(playerid)) return SetPlayerHealth(playerid,80.0);
if(!strcmp(cmdtext,"/about",true)) return SendClientMessage(playerid,COLOR_INTERFACE_BODY,"Скрипт от O.K.Style™ | ICQ: 402-747-399");
return 0;
}
public OnPlayerSelectedMenuRow(playerid,row)
{
if(GetPlayerMenu(playerid) == MENU_Donuts)
{
switch(row)
{
case 0:
{
if(GetPlayerMoney(playerid) < 8)
{
SendClientMessage(playerid,COLOR_INTERFACE_BODY,"К сожалению у Вас не хватает денег на это.");
ShowMenuForPlayer(MENU_Donuts,playerid);
}
else
{
GivePlayerMoney(playerid,-8);
new Float:HP;
GetPlayerHealth(playerid,HP);
if(HP < 100.0) SetPlayerHealth(playerid,HP+random(3)+2);
HideMenuForPlayer(MENU_Donuts,playerid);
TogglePlayerControllable(playerid,1);
SendClientMessage(playerid,COLOR_INTERFACE_BODY,"Вы купили пончик со сгущёнкой за $8. Кушайте на здоровье и приходите к нам снова!");
IsPlayerInDonut[playerid] = false;
}
}
case 1:
{
if(GetPlayerMoney(playerid) < 7)
{
SendClientMessage(playerid,COLOR_INTERFACE_BODY,"К сожалению у Вас не хватает денег на это.");
ShowMenuForPlayer(MENU_Donuts,playerid);
}
else
{
GivePlayerMoney(playerid,-7);
new Float:HP;
GetPlayerHealth(playerid,HP);
if(HP < 100.0) SetPlayerHealth(playerid,HP+random(3)+2);
HideMenuForPlayer(MENU_Donuts,playerid);
TogglePlayerControllable(playerid,1);
SendClientMessage(playerid,COLOR_INTERFACE_BODY,"Вы купили пончик с сахарной пудрой за $7. Кушайте на здоровье и приходите к нам снова!");
IsPlayerInDonut[playerid] = false;
}
}
case 2:
{
if(GetPlayerMoney(playerid) < 6)
{
SendClientMessage(playerid,COLOR_INTERFACE_BODY,"К сожалению у Вас не хватает денег на это.");
ShowMenuForPlayer(MENU_Donuts,playerid);
}
else
{
GivePlayerMoney(playerid,-6);
new Float:HP;
GetPlayerHealth(playerid,HP);
if(HP < 100.0) SetPlayerHealth(playerid,HP+random(3)+2);
HideMenuForPlayer(MENU_Donuts,playerid);
TogglePlayerControllable(playerid,1);
SendClientMessage(playerid,COLOR_INTERFACE_BODY,"Вы купили пончик с шоколадом за $6. Кушайте на здоровье и приходите к нам снова!");
IsPlayerInDonut[playerid] = false;
}
}
case 3:
{
if(GetPlayerMoney(playerid) < 5)
{
SendClientMessage(playerid,COLOR_INTERFACE_BODY,"К сожалению у Вас не хватает денег на это.");
ShowMenuForPlayer(MENU_Donuts,playerid);
}
else
{
GivePlayerMoney(playerid,-5);
new Float:HP;
GetPlayerHealth(playerid,HP);
if(HP < 100.0) SetPlayerHealth(playerid,HP+random(3)+2);
HideMenuForPlayer(MENU_Donuts,playerid);
TogglePlayerControllable(playerid,1);
SendClientMessage(playerid,COLOR_INTERFACE_BODY,"Вы купили чашку молока за $5. Пейте на здоровье и приходите к нам снова!");
IsPlayerInDonut[playerid] = false;
}
}
case 4:
{
if(GetPlayerMoney(playerid) < 4)
{
SendClientMessage(playerid,COLOR_INTERFACE_BODY,"К сожалению у Вас не хватает денег на это.");
ShowMenuForPlayer(MENU_Donuts,playerid);
}
else
{
GivePlayerMoney(playerid,-4);
new Float:HP;
GetPlayerHealth(playerid,HP);
if(HP < 100.0) SetPlayerHealth(playerid,HP+random(3)+2);
HideMenuForPlayer(MENU_Donuts,playerid);
TogglePlayerControllable(playerid,1);
SendClientMessage(playerid,COLOR_INTERFACE_BODY,"Вы купили чашку чая за $4. Пейте на здоровье и приходите к нам снова!");
IsPlayerInDonut[playerid] = false;
}
}
case 5:
{
if(GetPlayerMoney(playerid) < 3)
{
SendClientMessage(playerid,COLOR_INTERFACE_BODY,"К сожалению у Вас не хватает денег на это.");
ShowMenuForPlayer(MENU_Donuts,playerid);
}
else
{
GivePlayerMoney(playerid,-3);
new Float:HP;
GetPlayerHealth(playerid,HP);
if(HP < 100.0) SetPlayerHealth(playerid,HP+random(3)+2);
HideMenuForPlayer(MENU_Donuts,playerid);
TogglePlayerControllable(playerid,1);
SendClientMessage(playerid,COLOR_INTERFACE_BODY,"Вы купили чашку кофе за $3. Пейте на здоровье и приходите к нам снова!");
IsPlayerInDonut[playerid] = false;
}
}
case 6:
{
HideMenuForPlayer(MENU_Donuts,playerid);
TogglePlayerControllable(playerid,1);
IsPlayerInDonut[playerid] = false;
}
}
}
return 1;
}
public OnPlayerExitedMenu(playerid)
{
TogglePlayerControllable(playerid,1);
IsPlayerInDonut[playerid] = false;
return 1;
}
public OnPlayerDeath(playerid,killerid,reason)
{
#pragma unused killerid
#pragma unused reason
SetPlayerInterior(playerid,0);
SetPlayerVirtualWorld(playerid,0);
return 1;
}
public OnFilterScriptExit()
{
for(new i;i<sizeof(PU_Donuts);i++) DestroyPickup(PU_Donuts[i]);
for(new j;j<GetMaxPlayers();j++)
{
if(IsPlayerNPC(j)) Kick(j);
HideMenuForPlayer(MENU_Donuts,j);
if(IsPlayerInDonut[j] == true) TogglePlayerControllable(j,1);
}
for(new k;k<sizeof(Confectioner);k++) Delete3DTextLabel(Confectioner[k]);
DestroyMenu(MENU_Donuts);
return 1;
}
ЗЫ: В планах есть реализация на текстдравах, как в мобильных GTA, но не думаю, что будет релиз.