Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define FILTERSCRIPT
- #include <a_samp>
- #include <sort-inline> // by Slice - http://forum.sa-mp.com/showthread.php?t=602584
- #include <streamer> // by Incognito - http://forum.sa-mp.com/showthread.php?t=102865
- #define EVENT_MIN_PLAYERS (5) // how many players are needed for the event to begin (Default: 5)
- #define EVENT_INTERVAL (30) // time required to start the event again, in minutes (Default: 30)
- #define EVENT_TIME (10) // event time, in minutes (Default: 10)
- #define EVENT_REWARD (10000) // reward for the winners, will increase by tier(gold, silver, bronze) (Default: 10000)
- #define UPDATE_DELAY (150) // briefcase carrier icon update delay, in milliseconds (Default: 150)
- #define CASE_MODEL (1210) // briefcase pickup model, you can also use 19624 (Default: 1210)
- enum E_BRIEFCASE
- {
- bcPickup,
- bcIcon,
- bcTimer,
- bcTimeLeft,
- bcCarrier
- }
- enum E_BCLOCATION
- {
- locationName[32],
- Float: locationX,
- Float: locationY,
- Float: locationZ
- }
- new
- OnlinePlayers,
- BriefcaseData[E_BRIEFCASE];
- new
- Text: EventTitle,
- Text: EventPlaces[3],
- Text: EventTime;
- new
- bool: CarryingBriefcase[MAX_PLAYERS],
- BriefcaseTime[MAX_PLAYERS],
- PlayerText: EventTimePlayer[MAX_PLAYERS];
- new
- Float: RewardMultipliers[] = {1.5, 1.25, 1.0};
- // gold(50%), silver(25%), bronze(0%) increase
- new
- BriefcaseLocations[][E_BCLOCATION] = {
- {"Farm", 22.3, 17.4, 5.0},
- {"Area 51", 302.2160, 1955.8740, 17.6406},
- {"Flying School", 415.5471, 2503.8643, 16.9425},
- {"NSA HQ", -317.4946, 1523.1005, 75.3594}
- };
- ConvertToMinutes(time)
- {
- // http://forum.sa-mp.com/showpost.php?p=3223897&postcount=11
- new string[15];//-2000000000:00 could happen, so make the string 15 chars to avoid any errors
- format(string, sizeof(string), "%02d:%02d", time / 60, time % 60);
- return string;
- }
- Briefcase_InitPlayer(playerid)
- {
- CarryingBriefcase[playerid] = false;
- BriefcaseTime[playerid] = 0;
- EventTimePlayer[playerid] = CreatePlayerTextDraw(playerid, 146.000000, 398.000000, "Your Time: 00:00");
- PlayerTextDrawBackgroundColor(playerid, EventTimePlayer[playerid], 255);
- PlayerTextDrawFont(playerid, EventTimePlayer[playerid], 1);
- PlayerTextDrawLetterSize(playerid, EventTimePlayer[playerid], 0.200000, 1.000000);
- PlayerTextDrawColor(playerid, EventTimePlayer[playerid], -1);
- PlayerTextDrawSetOutline(playerid, EventTimePlayer[playerid], 1);
- PlayerTextDrawSetProportional(playerid, EventTimePlayer[playerid], 1);
- PlayerTextDrawSetSelectable(playerid, EventTimePlayer[playerid], 0);
- if(BriefcaseData[bcTimeLeft] > 0)
- {
- TextDrawShowForPlayer(playerid, EventTitle);
- for(new i; i < 3; i++) TextDrawShowForPlayer(playerid, EventPlaces[i]);
- TextDrawShowForPlayer(playerid, EventTime);
- }
- return 1;
- }
- Briefcase_Drop(playerid, reset_time = 0)
- {
- if(CarryingBriefcase[playerid])
- {
- CarryingBriefcase[playerid] = false;
- BriefcaseData[bcCarrier] = -1;
- new string[128], name[MAX_PLAYER_NAME];
- GetPlayerName(playerid, name, MAX_PLAYER_NAME);
- format(string, sizeof(string), "[HOT PROPERTY] {FFFFFF}%s(%d) dropped the briefcase.", name, playerid);
- SendClientMessageToAll(0x3498DBFF, string);
- new Float: x, Float: y, Float: z;
- GetPlayerPos(playerid, x, y, z);
- Streamer_SetFloatData(STREAMER_TYPE_MAP_ICON, BriefcaseData[bcIcon], E_STREAMER_X, x);
- Streamer_SetFloatData(STREAMER_TYPE_MAP_ICON, BriefcaseData[bcIcon], E_STREAMER_Y, y);
- Streamer_SetFloatData(STREAMER_TYPE_MAP_ICON, BriefcaseData[bcIcon], E_STREAMER_Z, z + 2.0);
- BriefcaseData[bcPickup] = CreateDynamicPickup(CASE_MODEL, 1, x, y, z);
- }
- if(reset_time) BriefcaseTime[playerid] = 0;
- return 1;
- }
- forward StartBriefcaseEvent();
- public StartBriefcaseEvent()
- {
- if(OnlinePlayers < EVENT_MIN_PLAYERS) {
- SendClientMessageToAll(0x3498DBFF, "[HOT PROPERTY] {FFFFFF}Not enough players on the server for the event to start.");
- }else{
- KillTimer(BriefcaseData[bcTimer]);
- new id = random(sizeof(BriefcaseLocations));
- BriefcaseData[bcPickup] = CreateDynamicPickup(CASE_MODEL, 1, BriefcaseLocations[id][locationX], BriefcaseLocations[id][locationY], BriefcaseLocations[id][locationZ]);
- BriefcaseData[bcIcon] = CreateDynamicMapIcon(BriefcaseLocations[id][locationX], BriefcaseLocations[id][locationY], BriefcaseLocations[id][locationZ], 52, 0, .streamdistance = 5000.0, .style = MAPICON_GLOBAL);
- BriefcaseData[bcTimeLeft] = EVENT_TIME * 60;
- BriefcaseData[bcTimer] = SetTimer("EndBriefcaseEvent", 1000, true);
- new string[128];
- format(string, sizeof(string), "[HOT PROPERTY] {FFFFFF}The briefcase spawned at {F1C40F}%s{FFFFFF}, go get it!", BriefcaseLocations[id][locationName]);
- SendClientMessageToAll(0x3498DBFF, string);
- TextDrawShowForAll(EventTitle);
- for(new x; x < 3; x++)
- {
- TextDrawSetString(EventPlaces[x], "_");
- TextDrawShowForAll(EventPlaces[x]);
- }
- for(new i, maxp = GetPlayerPoolSize(); i <= maxp; i++)
- {
- if(!IsPlayerConnected(i)) continue;
- PlayerTextDrawSetString(i, EventTimePlayer[i], "Your Time: 00:00");
- PlayerTextDrawShow(i, EventTimePlayer[i]);
- }
- TextDrawShowForAll(EventTime);
- }
- return 1;
- }
- forward EndBriefcaseEvent();
- public EndBriefcaseEvent()
- {
- new string[100], name[MAX_PLAYER_NAME], ranks[3][4] = {"1st", "2nd", "3rd"}, idx;
- if(BriefcaseData[bcTimeLeft] > 1) {
- BriefcaseData[bcTimeLeft]--;
- format(string, sizeof(string), "Event Time: %s%s", (BriefcaseData[bcTimeLeft] <= 10) ? ("~r~") : ("~w~"), ConvertToMinutes(BriefcaseData[bcTimeLeft]));
- TextDrawSetString(EventTime, string);
- if(IsPlayerConnected(BriefcaseData[bcCarrier]))
- {
- BriefcaseTime[ BriefcaseData[bcCarrier] ]++;
- format(string, sizeof(string), "Your Time: %s", ConvertToMinutes(BriefcaseTime[ BriefcaseData[bcCarrier] ]));
- PlayerTextDrawSetString(BriefcaseData[bcCarrier], EventTimePlayer[ BriefcaseData[bcCarrier] ], string);
- }
- for(new i; i < 3; i++) TextDrawSetString(EventPlaces[i], "_");
- new PlayerArray<compare_times>;
- sortPlayersInline compare_times => (R = l > r)
- {
- R = BriefcaseTime[l] > BriefcaseTime[r];
- }
- forPlayerArray (compare_times => playerid)
- {
- if(idx == 3) break;
- if(BriefcaseTime[playerid] == 0) break;
- GetPlayerName(playerid, name, 24);
- format(string, sizeof(string), "%s: %s (%s)", ranks[idx], name, ConvertToMinutes(BriefcaseTime[playerid]));
- TextDrawSetString(EventPlaces[idx], string);
- idx++;
- }
- }else if(BriefcaseData[bcTimeLeft] == 1) {
- if(OnlinePlayers >= EVENT_MIN_PLAYERS)
- {
- new PlayerArray<top_times>;
- sortPlayersInline top_times => (R = l > r)
- {
- R = BriefcaseTime[l] > BriefcaseTime[r];
- }
- new reward;
- forPlayerArray (top_times => playerid)
- {
- if(idx == 3) break;
- if(BriefcaseTime[playerid] == 0) break;
- reward = floatround(EVENT_REWARD * RewardMultipliers[idx], floatround_floor);
- format(string, sizeof(string), "[HOT PROPERTY] {FFFFFF}You completed the event in %s position, {2ECC71}$%d {FFFFFF}rewarded.", ranks[idx], reward);
- SendClientMessage(playerid, 0x3498DBFF, string);
- GivePlayerMoney(playerid, reward);
- idx++;
- }
- }
- for(new i, maxp = GetPlayerPoolSize(); i <= maxp; i++)
- {
- if(!IsPlayerConnected(i)) continue;
- CarryingBriefcase[i] = false;
- BriefcaseTime[i] = 0;
- PlayerTextDrawSetString(i, EventTimePlayer[i], "Your Time: 00:00");
- PlayerTextDrawHide(i, EventTimePlayer[i]);
- }
- TextDrawHideForAll(EventTitle);
- for(new x; x < 3; x++)
- {
- TextDrawSetString(EventPlaces[x], "_");
- TextDrawHideForAll(EventPlaces[x]);
- }
- TextDrawHideForAll(EventTime);
- DestroyDynamicPickup(BriefcaseData[bcPickup]);
- DestroyDynamicMapIcon(BriefcaseData[bcIcon]);
- BriefcaseData[bcPickup] = BriefcaseData[bcIcon] = BriefcaseData[bcCarrier] = -1;
- BriefcaseData[bcTimeLeft] = 0;
- BriefcaseData[bcTimer] = SetTimer("StartBriefcaseEvent", EVENT_INTERVAL * 60000, true);
- format(string, sizeof(string), "[HOT PROPERTY] {FFFFFF}Event over, next event will start in {F1C40F}%d {FFFFFF}minutes.", EVENT_INTERVAL);
- SendClientMessageToAll(0x3498DBFF, string);
- }
- return 1;
- }
- public OnFilterScriptInit()
- {
- EventTitle = TextDrawCreate(146.000000, 340.000000, "HOT PROPERTY");
- TextDrawBackgroundColor(EventTitle, 255);
- TextDrawFont(EventTitle, 2);
- TextDrawLetterSize(EventTitle, 0.260000, 1.400000);
- TextDrawColor(EventTitle, -1);
- TextDrawSetOutline(EventTitle, 1);
- TextDrawSetProportional(EventTitle, 1);
- TextDrawSetSelectable(EventTitle, 0);
- EventPlaces[0] = TextDrawCreate(146.000000, 362.000000, "_");
- TextDrawBackgroundColor(EventPlaces[0], 255);
- TextDrawFont(EventPlaces[0], 1);
- TextDrawLetterSize(EventPlaces[0], 0.200000, 1.000000);
- TextDrawColor(EventPlaces[0], -238809089);
- TextDrawSetOutline(EventPlaces[0], 1);
- TextDrawSetProportional(EventPlaces[0], 1);
- TextDrawSetSelectable(EventPlaces[0], 0);
- EventPlaces[1] = TextDrawCreate(146.000000, 374.000000, "_");
- TextDrawBackgroundColor(EventPlaces[1], 255);
- TextDrawFont(EventPlaces[1], 1);
- TextDrawLetterSize(EventPlaces[1], 0.200000, 1.000000);
- TextDrawColor(EventPlaces[1], -1465341697);
- TextDrawSetOutline(EventPlaces[1], 1);
- TextDrawSetProportional(EventPlaces[1], 1);
- TextDrawSetSelectable(EventPlaces[1], 0);
- EventPlaces[2] = TextDrawCreate(146.000000, 386.000000, "_");
- TextDrawBackgroundColor(EventPlaces[2], 255);
- TextDrawFont(EventPlaces[2], 1);
- TextDrawLetterSize(EventPlaces[2], 0.200000, 1.000000);
- TextDrawColor(EventPlaces[2], -1772472065);
- TextDrawSetOutline(EventPlaces[2], 1);
- TextDrawSetProportional(EventPlaces[2], 1);
- TextDrawSetSelectable(EventPlaces[2], 0);
- EventTime = TextDrawCreate(146.000000, 410.000000, "Event Time: 00:00");
- TextDrawBackgroundColor(EventTime, 255);
- TextDrawFont(EventTime, 1);
- TextDrawLetterSize(EventTime, 0.200000, 1.000000);
- TextDrawColor(EventTime, -1);
- TextDrawSetOutline(EventTime, 1);
- TextDrawSetProportional(EventTime, 1);
- TextDrawSetSelectable(EventTime, 0);
- for(new i, maxp = GetPlayerPoolSize(); i <= maxp; i++)
- {
- if(!IsPlayerConnected(i)) continue;
- Briefcase_InitPlayer(i);
- OnlinePlayers++;
- }
- BriefcaseData[bcPickup] = BriefcaseData[bcIcon] = BriefcaseData[bcCarrier] = -1;
- BriefcaseData[bcTimer] = SetTimer("StartBriefcaseEvent", EVENT_INTERVAL * 60000, true);
- return 1;
- }
- public OnFilterScriptExit()
- {
- TextDrawDestroy(EventTitle);
- for(new i; i < 3; i++) TextDrawDestroy(EventPlaces[i]);
- TextDrawDestroy(EventTime);
- for(new i, maxp = GetPlayerPoolSize(); i <= maxp; i++)
- {
- if(!IsPlayerConnected(i)) continue;
- PlayerTextDrawDestroy(i, EventTimePlayer[i]);
- }
- return 1;
- }
- public OnPlayerConnect(playerid)
- {
- Briefcase_InitPlayer(playerid);
- OnlinePlayers++;
- return 1;
- }
- public OnPlayerDisconnect(playerid, reason)
- {
- Briefcase_Drop(playerid, 1);
- OnlinePlayers--;
- PlayerTextDrawDestroy(playerid, EventTimePlayer[playerid]);
- return 1;
- }
- public OnPlayerDeath(playerid, killerid, reason)
- {
- Briefcase_Drop(playerid);
- return 1;
- }
- public OnPlayerUpdate(playerid)
- {
- // oh look it's that spooky callback
- if(BriefcaseData[bcCarrier] == playerid && CarryingBriefcase[playerid] && GetPVarInt(playerid, "briefcase_Update") < GetTickCount())
- {
- new Float: x, Float: y, Float: z;
- GetPlayerPos(playerid, x, y, z);
- Streamer_SetFloatData(STREAMER_TYPE_MAP_ICON, BriefcaseData[bcIcon], E_STREAMER_X, x);
- Streamer_SetFloatData(STREAMER_TYPE_MAP_ICON, BriefcaseData[bcIcon], E_STREAMER_Y, y);
- Streamer_SetFloatData(STREAMER_TYPE_MAP_ICON, BriefcaseData[bcIcon], E_STREAMER_Z, z + 2.0);
- SetPVarInt(playerid, "briefcase_Update", GetTickCount() + UPDATE_DELAY);
- }
- return 1;
- }
- public OnPlayerPickUpDynamicPickup(playerid, pickupid)
- {
- if(pickupid == BriefcaseData[bcPickup] && !CarryingBriefcase[playerid])
- {
- CarryingBriefcase[playerid] = true;
- BriefcaseData[bcCarrier] = playerid;
- new string[128], name[MAX_PLAYER_NAME];
- GetPlayerName(playerid, name, MAX_PLAYER_NAME);
- format(string, sizeof(string), "[HOT PROPERTY] {FFFFFF}%s(%d) obtained the briefcase.", name, playerid);
- SendClientMessageToAll(0x3498DBFF, string);
- DestroyDynamicPickup(BriefcaseData[bcPickup]);
- BriefcaseData[bcPickup] = -1;
- }
- return 1;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement