Szerző Téma: Felfedezhető területek - Pedró (2014)  (Megtekintve 1921 alkalommal)

Nem elérhető Pedró

  • 3341
  • 2014 © Az év Szkriptere
    • Profil megtekintése
Felfedezhető területek - Pedró (2014)
« Dátum: 2014. december 22. - 12:25:18 »
+9 Show voters

 Felfedezhető területek, gangzone-k felhasználásával.


 Copyright © 2014; Pedró;


 Ez a filterscript szabad kód; terjeszthető illetve módosítható a


 Free Software Foundation által kiadott GNU General Public License


 dokumentumában leírtak; akár a licenc 2-es, akár (tetszőleges) későbbi


 változata szerint.



Sziasztok!

Ezt a kódot már publikáltam, a Proline játékmódom publikálásakor, amely már eltűnt a fórumról, viszont szerintem kevesen fedezték fel benne ezt a frankó kis funkciót! :)


Természetesen én írtam a kódot, az ötlet a singleplayeres megoldásból merült. :)


Feltételek a kód futtatásához:


- Streamer plugin, illetve függvénykönyvtár alkalmazása


- 0.3+ szerver oldali kliens biztosítása



A kód:
 
#define FILTERSCRIPT
#include <a_samp>
#include <streamer>
#define pName(%1) PlayerName[%1]
forward CheckIntactZones();
enum E_IGZ { Float:gzPosX1, Float:gzPosY1, Float:gzPosX2, Float:gzPosY2, gzID, gzArea }
new   IntactGangZones[100][E_IGZ], IntactZoneTimer;
new bool:IsIntactGZ[MAX_PLAYERS][100];
new PlayerName[MAX_PLAYERS][MAX_PLAYER_NAME];
public OnFilterScriptInit() {
new count = 0;
for(new i1; i1 < 10; i1++) {
for(new i2; i2 < 10; i2++) {
   IntactGangZones[count][gzPosX1] = -3000.0 + (i1 * 600.0);
   IntactGangZones[count][gzPosY1] = -3000.0 + (i2 * 600.0);
   IntactGangZones[count][gzPosX2] = (IntactGangZones[count][gzPosX1] + 600.0);
   IntactGangZones[count][gzPosY2] = (IntactGangZones[count][gzPosY1] + 600.0);
   IntactGangZones[count][gzID] = GangZoneCreate(IntactGangZones[count][gzPosX1], IntactGangZones[count][gzPosY1], IntactGangZones[count][gzPosX2], IntactGangZones[count][gzPosY2]);
   IntactGangZones[count][gzArea] = CreateDynamicRectangle(IntactGangZones[count][gzPosX1], IntactGangZones[count][gzPosY1], IntactGangZones[count][gzPosX2], IntactGangZones[count][gzPosY2], 0, 0);
   count++;
}
}
IntactZoneTimer = SetTimer(\"CheckIntactZones\", 1000, true);
return 1;
}
public OnFilterScriptExit() {
KillTimer(IntactZoneTimer);
return 1;
}
public OnPlayerConnect(playerid) {
GetPlayerName(playerid, PlayerName[playerid], MAX_PLAYER_NAME);
for(new x; x < 100; x++) IsIntactGZ[playerid]
  • = true; // Az összes terület felfedezetlen még.

return 1;
}
public OnPlayerDisconnect(playerid, reason) {
PlayerName[playerid][0] = EOS;
return 1;
}
public OnPlayerSpawn(playerid) {
SetPVarInt(playerid, \"Spawned\", 1);
    for(new x; x < sizeof(IntactGangZones); x++) if(IsIntactGZ[playerid]
  • ) GangZoneShowForPlayer(playerid, IntactGangZones
  • [gzID], 0x8AE2FF65);

return 1;
}
public OnPlayerDeath(playerid, killerid, reason) {
SetPVarInt(playerid, \"Spawned\", 0);
return 1;
}
public CheckIntactZones() {
new string[144];
for(new playerid; playerid < GetMaxPlayers(); playerid++) {
if(GetPVarInt(playerid, \"Spawned\") && GetPlayerInterior(playerid) == 0 && GetPlayerVirtualWorld(playerid) == 0) {
   if(IsPlayerInAnyDynamicArea(playerid)) {
      for(new x; x < 100; x++) {
          if(IsIntactGZ[playerid]
  • == false) continue;

         if(IsPlayerInDynamicArea(playerid, IntactGangZones
  • [gzArea])) {

               IsIntactGZ[playerid]
  • = false;

               SetPlayerScore(playerid, GetPlayerScore(playerid) + 1);
               GangZoneHideForPlayer(playerid, IntactGangZones
  • [gzID]);

               TogglePlayerDynamicArea(playerid, IntactGangZones
  • [gzArea], false);

             new count;
             for(new y; y < 100; y++) if(IsIntactGZ[playerid][y] == false) count++;
            format(string, sizeof(string), \"Egy ismeretlen rész felfedezve! {FFFF00}+1 {80FF80}Pont {FFFFFF}(%i/100)\", count);
               SendClientMessage(playerid, 0x9C9C9CFF, string);
             if(count == 50) {
               format(string, sizeof(string), \"Felfedezte %s(%i) a fél San Andreas térképet. {FFFFFF}+50{FFFF00}Pont\", pName(playerid), playerid);
               SendClientMessageToAll(0xFF88F9FF, string);
               SetPlayerScore(playerid, GetPlayerScore(playerid) + 50);
            }
            if(count == 100) {
               format(string, sizeof(string), \"Felfedezte %s(%i) az egész San Andreas térképet. {FFFFFF}+200{FFFF00}Pont\", pName(playerid), playerid);
               SendClientMessageToAll(0xFF88F9FF, string);
               SetPlayerScore(playerid, GetPlayerScore(playerid) + 200);
            }
         }
      }
   }
}
}
return 1;
}

 
A kód letölthető itt: http://www.solidfiles.com/d/9f95200b58/zones.pwn
Vagy megtekinthető itt: http://pastebin.com/v958TLn6


Mentést nem írtam bele, de itt van egy tippem, hogy kell menteni. :)
Elősször is mentsük stringbe az értékeket, amikor a játékos lelép a szerverről példuál, vagy timerrel...
 
new IGZ[256];
for(new x; x < 100; x++) strcat(IGZ, (IsIntactGZ[playerid]
  • == true) ? (\" 1\") : (\" 0\"));

 
Mentsük el a(z) IGZ karakterláncot, vagy fájlba, vagy MySQL-be egy oszlopba.
Betöltéshez ötlet:
A karakterláncot beolvassuk az IGZ karakterlánc változóba..
Ha ez megvan, utána csak darabolni kell.. :)
 
sscanf(IGZ, \"a<i>[100]\", IsIntactGZ[playerid]);

 
És kész is a betöltés, meg minden.
Csak figyeljetek oda arra, hogy az OnPlayerConnectnél én beírtam, hogy minden felfedezetlen legyen, ha használtok ilyen mentés-betöltést, akkor töröljétek azt.
[/quote]


Képek
\"f2MwLVJ.gif\" \"C4BSS7y.gif\"
A képek a 2014-es XMas szerveren készültek. /A szerver a képeken látott formában még nincs kész./


Használjátok egészséggel.
 
Kellemes ünnepeket kívánok mindenkinek! Pedró

Felfedezhető területek - Pedró (2014)
« Válasz #1 Dátum: 2014. december 23. - 17:29:59 »
0 Show voters
Régebben én is csináltam hasonlót, annyi kivétellel, hogy több zóna volt (100 yardonként), és hogy teljesen fekete volt a map, így \"nehezebb\" volt felfedezni
A gond, ami szerintem ennél is jelentkezni fog, hogy sok embernél a timer le fogja terhelni a szervert.. De lehet, hogy az én gépem volt gyenge..
Mindenesetre, szép munka. :D Még annyi, hogy menthetné, hogy melyik zónákat fedezte fel az illető.

Nem elérhető Pedró

  • 3341
  • 2014 © Az év Szkriptere
    • Profil megtekintése
Felfedezhető területek - Pedró (2014)
« Válasz #2 Dátum: 2014. december 23. - 17:31:40 »
+1 Show voters
El kellene olvasni az egész témát, kedves Uram.. :P Le van írva egy tipp arra, hogyan kell lementeni a felfedezett területeket.. :)

Felfedezhető területek - Pedró (2014)
« Válasz #3 Dátum: 2014. december 24. - 13:33:00 »
0 Show voters
e\'nézést.. csak magát a pastebin kódot néztem :D

Nem elérhető Flash

  • 5726
  • (っ◕‿◕)っ
    • Profil megtekintése
Felfedezhető területek - Pedró (2014)
« Válasz #4 Dátum: 2014. december 25. - 21:09:55 »
0 Show voters
Szerintem ez egy megszokott igényes Pedró munka. :D

Felfedezhető területek - Pedró (2014)
« Válasz #5 Dátum: 2014. december 31. - 20:55:16 »
0 Show voters
Érdekes de szerintem is inkább feketének kellene lennie és nem szürkének.

Nem elérhető Thomas_Jonson

  • 560
  • Thomas_Jonson
    • Profil megtekintése
Felfedezhető területek - Pedró (2014)
« Válasz #6 Dátum: 2014. december 31. - 21:00:36 »
0 Show voters
Elég szép munka. Grt! :)

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal