PDA

Просмотр полной версии : [Мануал] Система рыбалки



bredvix
31.01.2014, 20:03
Ко всем new добавляем:


#define FISHING_ROD_ATTACHID 0 // если данный ID уже используется, смените на свой
#define DLG_FISH_MARKET 4095 // изменить на свой значение, если ID диалога уже используется

new fishing_market_pickup;
new fishing_info_pickup;
new fishing_rod_state[MAX_PLAYERS];
new fishing_busy[MAX_PLAYERS];
new fishing_bait[MAX_PLAYERS];
new fishing_line[MAX_PLAYERS];
new fishing_timer[MAX_PLAYERS];

После добавляем в OnGameModeInit:


Create3DTextLabel("{FFA500}Информация: {00BFFF}Рыбалка",0x00FFFFDD,382.4216,-2080.1860,7.8359,20.0,0,1);
fishing_info_pickup = CreatePickup(1239, 2, 382.4216,-2080.1860,7.8359, -1);
Create3DTextLabel("{FFA500}Магазин: {00BFFF}Рыбный рынок",0x00FFFFDD,359.3295,-2032.0739,7.8359,20.0,0,1);
fishing_market_pickup = CreatePickup(1318, 2, 359.3295,-2032.0739,7.8359, -1);
CreateDynamicMapIcon(377.1194, -2121.7058, -0.5328, 9, -1);


Далее идём в OnPlayerCommandText и добавляем:


if(strcmp("/fishinfo", cmdtext, true) == 0)
return ShowFishingInfo(playerid);
if(strcmp("/rod", cmdtext, true) == 0)
{
if(fishing_rod_state[playerid] == 0)
return SendClientMessage(playerid, -1, "У Вас нет удочки!");
if(fishing_rod_state[playerid] == 1)
{
fishing_rod_state[playerid] = 2;
return SetPlayerAttachedObject(playerid, FISHING_ROD_ATTACHID, 18632,6,0.079376,0.037070,0.007706,181.482910,0.000000,0.000000,1.000000,1.000000,1.000000);
}
if(fishing_busy[playerid])
return SendClientMessage(playerid, -1, "Вы ловите рыбу. Чтобы завершить рыбалку, используйте /fish");
fishing_rod_state[playerid] = 1;
return RemovePlayerAttachedObject(playerid, FISHING_ROD_ATTACHID);
}
if(strcmp("/fish", cmdtext, true) == 0)
{
if(fishing_busy[playerid])
{
KillTimer(fishing_timer[playerid]);
fishing_busy[playerid] = 0;
TogglePlayerControllable(playerid, 1);
ApplyAnimation(playerid, "CARRY", "crry_prtial", 2.0, 0, 0, 0, 0, 0);
GameTextForPlayer(playerid, "~w~Fishing ~r~stopped", 3000, 3);
return SendClientMessage(playerid, -1, "Рыбалка остановлена");
}
if(!VaildFishingPlace(playerid) || IsPlayerInAnyVehicle(playerid))
return SendClientMessage(playerid, -1, "В этом месте запрещена рыбалка!");
if(fishing_bait[playerid] < 1)
return SendClientMessage(playerid, -1, "У Вас нет приманок в запасе!");
if(fishing_line[playerid] < 1)
return SendClientMessage(playerid, -1, "У Вас нет лесок в запасе!");
if(fishing_rod_state[playerid] != 2)
return SendClientMessage(playerid, -1, "Возмите удочку в руки! (/rod)");
TogglePlayerControllable(playerid, 0);
ApplyAnimation(playerid, "SWORD", "sword_block", 50.0, 0, 1, 0, 1, 1);
fishing_busy[playerid] = 1;
KillTimer(fishing_timer[playerid]);
fishing_timer[playerid] = SetTimerEx("FishTimer", 50000, false, "i", playerid);
SendClientMessage(playerid, -1, "Вы начали рыбачить!");
GameTextForPlayer(playerid,"~w~Fishing ~g~started", 49000, 3);
}


После ищем OnPlayerPickUpPickup(playerid, pickupid) и вставляем:


if(pickupid == fishing_market_pickup)
return ShowPlayerDialog(playerid, DLG_FISH_MARKET, DIALOG_STYLE_LIST, "Рыбный рынок", "Удочка (50$)\nПриманка (35$)\nЛеска (15$)\nПолный комплект (100$)", "Купить", "Отмена");
if(pickupid == fishing_info_pickup)
return ShowFishingInfo(playerid);


Далее в OnDialogResponse:


if(dialogid == DLG_FISH_MARKET)
{
if(response == 0)
return 1;
if(IsPlayerInRangeOfPoint(playerid, 2, 359.3295,-2032.0739,7.8359) == 0)
return SendClientMessage(playerid, -1, "Вы не у рыбного рынка.");
switch(listitem)
{
case 0:
{
if(GetPlayerMoney(playerid) < 50)
return SendClientMessage(playerid, -1, "Недостаточно денег.");
if(fishing_rod_state[playerid])
return SendClientMessage(playerid, -1, "Вы уже купили удочку!");
fishing_rod_state[playerid] = 1;
SendClientMessage(playerid, -1, "Удочка куплена!");
GameTextForPlayer(playerid, "~r~-50$", 1200, 1);
return GivePlayerMoney(playerid, -50);
}
case 1:
{
if(GetPlayerMoney(playerid) < 35)
return SendClientMessage(playerid, -1, "Недостаточно денег.");
if(fishing_bait[playerid])
return SendClientMessage(playerid, -1, "Вы уже купили приманку!");
fishing_bait[playerid] = 1;
SendClientMessage(playerid, -1, "Приманка куплена!");
GameTextForPlayer(playerid, "~r~-35$", 1200, 1);
return GivePlayerMoney(playerid, -35);
}
case 2:
{
if(GetPlayerMoney(playerid) < 15)
return SendClientMessage(playerid, -1, "Недостаточно денег.");
if(fishing_line[playerid])
return SendClientMessage(playerid, -1, "Вы уже купили леску!");
fishing_line[playerid] = 1;
SendClientMessage(playerid, -1, "Леска куплена!");
GameTextForPlayer(playerid, "~r~-15$", 1200, 1);
return GivePlayerMoney(playerid, -15);
}
default: //case 3:
{
if(GetPlayerMoney(playerid) < 100)
return SendClientMessage(playerid, -1, "Недостаточно денег.");
if(fishing_line[playerid])
return SendClientMessage(playerid, -1, "Вы уже купили леску!");
if(fishing_bait[playerid])
return SendClientMessage(playerid, -1, "Вы уже купили приманку!");
if(fishing_rod_state[playerid] != 0)
return SendClientMessage(playerid, -1, "Вы уже купили удочку, приманку и леску!");
fishing_line[playerid] = 1;
fishing_bait[playerid] = 1;
fishing_rod_state[playerid] = 1;
GameTextForPlayer(playerid, "~r~-100$", 1200, 1);
GivePlayerMoney(playerid, -100);
return SendClientMessage(playerid, -1, "{00FF00}x{FFFFFF} Удочка, приманка и леска куплены!");
}
}
}


В самом конце мы вставляем это:


ShowFishingInfo(playerid)
{
SendClientMessage(playerid, 0xC0C0C0FF, "=================[ {FFFFFF}Рыбалка{C0C0C0} ]================");
SendClientMessage(playerid, 0xC0C0C0FF, "/rod {FFFFFF}- взять/убрать удочку");
return SendClientMessage(playerid, 0xC0C0C0FF, "/fish {FFFFFF}- начать/остановить рыбалку");
}

VaildFishingPlace(playerid)
{
if(!IsPlayerConnected(playerid))
return 0;
if(IsPlayerInRangeOfPoint(playerid, 4,403.8266,-2088.7598,7.8359) || IsPlayerInRangeOfPoint(playerid, 4,398.7553,-2088.7490,7.8359))
return 1;
if(IsPlayerInRangeOfPoint(playerid, 4,396.2197,-2088.6692,7.8359) || IsPlayerInRangeOfPoint(playerid, 4,391.1094,-2088.7976,7.8359))
return 1;
if(IsPlayerInRangeOfPoint(playerid, 4,383.4157,-2088.7849,7.8359) || IsPlayerInRangeOfPoint(playerid, 4,374.9598,-2088.7979,7.8359))
return 1;
if(IsPlayerInRangeOfPoint(playerid, 4,369.8107,-2088.7927,7.8359) || IsPlayerInRangeOfPoint(playerid, 4,367.3637,-2088.7925,7.8359))
return 1;
if(IsPlayerInRangeOfPoint(playerid, 4,362.2244,-2088.7981,7.8359) || IsPlayerInRangeOfPoint(playerid, 4,354.5382,-2088.7979,7.8359))
return 1;
return 0;
}

forward FishTimer(playerid);
public FishTimer(playerid)
{
if(!VaildFishingPlace(playerid))
{
fishing_busy[playerid] = 0;
SetCameraBehindPlayer(playerid);
return ApplyAnimation(playerid, "CARRY", "crry_prtial", 2.0, 0, 0, 0, 0, 0);
}
static const FishNames[][8] =
{
{"Ерша"},
{"Окуня"},
{"Карася"},
{"Щуку"},
{"Белугу"},
{"Кету"},
{"Горбушу"},
{"Семгу"},
{"Нерку"},
{"Лосося"}
};
TogglePlayerControllable(playerid, 1);
fishing_busy[playerid] = 0;
new fish = random(sizeof(FishNames)+1)-1;
if(fish == -1)
return fishing_line[playerid] = 0, SendClientMessage(playerid, -1, "Рыба сорвалась и порвала леску!");
static const fmt_str[] = "{00FF00}х {FFFFFF}Вы поймали {88AA88}%s {FFFFFF}и продали на рынке за {88AA88}%d${FFFFFF}!";
new string[sizeof(fmt_str)-2+sizeof(FishNames[])-2+11];
new money = fish*3+1;
GivePlayerMoney(playerid, money);
format(string, sizeof(string), "~g~+%d$", money);
GameTextForPlayer(playerid, string, 1200, 1);
format(string, sizeof(string), fmt_str, FishNames[fish], money);
return SendClientMessage(playerid, -1, string);
}

Вот и всё.


http://i.imgur.com/8aq9ox1h.jpg
http://i.imgur.com/avGlhcvh.jpg
http://i.imgur.com/PukWWo8h.png
http://i.imgur.com/HxmpZ8qh.jpg
Автор: Pro-Pawn Team

RedFox
04.05.2014, 23:50
Спасибо + твой

gangzone.ini
11.01.2015, 16:07
Класс)