Advertisement
Loony04

Race

Feb 24th, 2012
48
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 24.39 KB | None | 0 0
  1. #define     LIMIT_WG                (30)
  2. #define     LIMIT_RACE              (20)
  3. #define     LIMIT_RACE_START_POS    (10)
  4. #define     LIMIT_RACE_CP           (30)
  5.  
  6. #define     TIME_TO_START_GAME      (8000)
  7.  
  8. #define     GAME_NONE               (0)
  9. #define     GAME_WG                 (1)
  10. #define     GAME_RACE               (2)
  11.  
  12. #define     COUNT_TO_START_WG       (2)
  13. #define     COUNT_TO_START_RACE     (2)
  14.  
  15. #define     COLOR_WG                "{CC1400}"
  16. #define     COLOR_RACE              "{119AFF}"
  17.  
  18. // Forwardy
  19. forward ZabawyInit();
  20. forward PlayerSignUpGame(playerid, gameid);
  21. forward CheckStart(gameid);
  22. forward Zabawy_OnPlayerDeath(playerid, killerid, reason);
  23. forward Zabawy_OnPlayerDisconnect(playerid);
  24. forward BeforeStartGame(playerid, gameid);
  25. forward StartGame(gameid);
  26. forward WGSetWorldBounds();
  27. forward WGCheckPos();
  28.  
  29. enum WorldBound { Float:wMinX, Float:wMaxX, Float:wMinY, Float:wMaxY }
  30.  
  31.  
  32. /* Spis funkcji
  33. - WGShowControl(playerid)   - Dialog ze scenariuszami WG. Mozna dodac nowy, zedytowac, usunac istniejacy
  34. - WGUpdateControlStr()      - Formatowanie stringu wykorzystywanego w powyzszej funkcji.
  35. - CMD:controlwg(playerid)   - Wywołuje funkcje WGShowControl(playerid)
  36. */
  37.  
  38.  
  39. // Globalne zmienne do zabaw
  40. new ZabawaTrwa, ZabawaStartuje, ZabawaZapisany[MAX_USERS], ZabawaUczestniczy[MAX_USERS];
  41.  
  42.  
  43.  
  44. // WG
  45. #define     WG_TEAM_RED             (0)
  46. #define     WG_TEAM_GREEN           (1)
  47.  
  48. new WGID[LIMIT_WG], WGName[LIMIT_WG][31], Float:WGSpawnA[LIMIT_WG][3], Float:WGSpawnB[LIMIT_WG][3],
  49.     WGWeapons[LIMIT_WG][8], WGInterior[LIMIT_WG], WGWorldBounds[LIMIT_WG][WorldBound], WGControlStr[1024],
  50.     WGTimer = -1,
  51.     WGZapisani, WGCountPlayersRed, WGCountPlayersGreen, WGCurrentIdx, WGNextScenario, Scores[2];
  52.  
  53.  
  54. // Race
  55. enum enumRInfo { rID, rName[31], rInterior, rModelid, Float:rStartAngle }
  56.  
  57.  
  58. new RInfo[LIMIT_RACE][enumRInfo], RCPID[LIMIT_RACE], RSpawnID[LIMIT_RACE], Float:RCP[LIMIT_RACE][LIMIT_RACE_CP][3],
  59.     Float:RSpawn[LIMIT_RACE][LIMIT_RACE_START_POS][3],
  60.     RaceNextScenario, RaceControlStr[1024],
  61.     RaceZapisani,
  62.     RaceSamochody[LIMIT_RACE_START_POS] = { -1, ... },
  63.     RaceCurrentIdx, RaceCurrentStartIdx, RaceCurrentCPIdx;
  64.  
  65.  
  66. // Funkcje
  67. stock CountZabawaZapisany(gameid) {
  68.     new count;
  69.     for(new i; i<MAX_USERS; i++) {
  70.         if(ZabawaZapisany[i] & gameid) count++;
  71.     }
  72.     return count;
  73. }
  74. public WGSetWorldBounds() {
  75.     for(new i; i<MAX_USERS; i++) if(ZabawaUczestniczy[i] == GAME_WG) {
  76.         SetPlayerWorldBounds(i, WGWorldBounds[WGCurrentIdx][wMaxX], WGWorldBounds[WGCurrentIdx][wMinX], WGWorldBounds[WGCurrentIdx][wMaxY], WGWorldBounds[WGCurrentIdx][wMinY]);
  77.         printf("Ustawiono WorldBound dla gracza %s", PlayerName(i));
  78.     }
  79.     if(WGTimer != -1) KillTimer(WGTimer);
  80.     WGTimer = SetTimer("WGCheckPos", 2000, true);
  81.  
  82.     printf("[WGSetWorldBounds] MaxX: %.1f; MinX: %.1f;   MaxY: %.1f; MinY: %.1f", WGWorldBounds[WGCurrentIdx][wMaxX], WGWorldBounds[WGCurrentIdx][wMinX], WGWorldBounds[WGCurrentIdx][wMaxY], WGWorldBounds[WGCurrentIdx][wMinY]);
  83.     return 1;
  84. }
  85. public WGCheckPos() {   //Generalnie warunek nie powinien się nigdy wykonać ponieważ jest WorldBound. No ale są boty, cheaty, airbrake - WG by się nie zakończyło..
  86.     for(new i; i<MAX_USERS; i++) if(ZabawaUczestniczy[i] == GAME_WG) {
  87.         if(!IsPlayerInArea(i, WGWorldBounds[WGCurrentIdx][wMinX]-10, WGWorldBounds[WGCurrentIdx][wMinY]-10, WGWorldBounds[WGCurrentIdx][wMaxX]+10, WGWorldBounds[WGCurrentIdx][wMaxY]+10)) {
  88.             KickPlayerFromWG(i);
  89.             SCM(i, 0xFF0000FF, "Zostałeś wyrzucony z WG z powodu wykroczenia poza strefę gry.");
  90.         }
  91.     }
  92.     return 1;
  93. }
  94.  
  95. KickPlayerFromWG(playerid) {    // Założenie: Gracz jest aktualnie na WG.
  96.     if(GPVI(playerid, "WG_Team") == WG_TEAM_RED) WGCountPlayersRed--;
  97.     else WGCountPlayersGreen--;
  98.  
  99.     DeletePVar(playerid, "WG_Team");
  100.     ZabawaUczestniczy[playerid] = GAME_NONE;
  101.     SetPlayerRandomColor(playerid);
  102.     ResetPlayerWeapons(playerid);
  103.     WGCheckFinish();
  104.     OnPlayerSpawn(playerid);
  105. }
  106. WGCheckFinish() {
  107.     if(WGCountPlayersGreen == 0 || WGCountPlayersRed == 0) WGFinish();
  108. }
  109. WGFinish() {
  110.     for(new i; i<MAX_USERS; i++) if(ZabawaUczestniczy[i] == GAME_WG) {
  111.         GivePlayerExp(i, EXP_FOR_WIN_WG);
  112.         ResetPlayerWeapons(i);
  113.         SetPlayerRandomColor(i);
  114.         ZabawaUczestniczy[i] = GAME_NONE;
  115.         OnPlayerSpawn(i);
  116.     }
  117.     ZabawaTrwa -= GAME_WG;
  118.     if(WGTimer != -1) KillTimer(WGTimer);
  119.     WGTimer = -1;
  120.  
  121.     new str[128];
  122.     if(Scores[WG_TEAM_RED] > Scores[WG_TEAM_GREEN]) {
  123.         format(str, 128, COLOR_WG"Wojnę Gangów {36C59A}wygrała drużyna {FF0000}czerwonych {36C59A}z wynikiem %d do %d!", Scores[WG_TEAM_RED], Scores[WG_TEAM_GREEN]);
  124.         SendClientMessageToAll(0x36C59AFF, str);
  125.         format(str, 128, "Zwycięzcy otrzymują %d punktów doświadczenia (exp)!", EXP_FOR_WIN_WG);
  126.         SendClientMessageToAll(0x36C59AFF, str);
  127.     } else if(Scores[WG_TEAM_RED] < Scores[WG_TEAM_GREEN]) {
  128.         format(str, 128, COLOR_WG"Wojnę Gangów {36C59A}wygrała drużyna {00FF00}zielonych {36C59A}z wynikiem %d do %d!", Scores[WG_TEAM_GREEN], Scores[WG_TEAM_RED]);
  129.         SendClientMessageToAll(0x36C59AFF, str);
  130.         format(str, 128, "Zwycięzcy otrzymują %d punktów doświadczenia (exp)!", EXP_FOR_WIN_WG);
  131.         SendClientMessageToAll(0x36C59AFF, str);
  132.     } else { // remis
  133.         format(str, 128, COLOR_WG"Wojnę Gangów {36C59A}została zremisowana wynikiem %d do %d!", Scores[WG_TEAM_RED], Scores[WG_TEAM_GREEN]);
  134.         SendClientMessageToAll(0x36C59AFF, str);
  135.     }
  136.  
  137.     UpdateZabawyTD();
  138.     CheckStart(GAME_WG);
  139. }
  140. WGGetRandomScenario() {
  141.     new Scenarios[LIMIT_WG], idx;
  142.     for(new i; i<LIMIT_WG; i++) if(WGID[i] != -1) Scenarios[idx++] = WGID[i];
  143.     if(!idx) return -1;
  144.     return Scenarios[random(idx)];
  145. }
  146. CMD:controlwg(playerid, params[]) {
  147.     WGShowControl(playerid);
  148.     return 1;
  149. }
  150. WGIndexID(scenario) {
  151.     for(new i; i<LIMIT_WG; i++) if(WGID[i] == scenario) return i;
  152.     return 0;
  153. }
  154. stock GiveWGWeapons(playerid, IdxScenario) {
  155.     for(new i; i<8; i++) if(WGWeapons[IdxScenario][i] != -1) {
  156.         GivePlayerWeapon(playerid, WGWeapons[IdxScenario][i], 3000);
  157.     }
  158. }
  159. stock WGShowControl(playerid) {
  160.     ShowPlayerDialogEx(playerid, DIALOG_WG_CONTROL, DIALOG_STYLE_LIST, "Zarządzanie scenariuszami WG", WGControlStr, "OK", "Anuluj");
  161. }
  162. stock WGUpdateControlStr() {
  163.     new size = sizeof(WGControlStr);
  164.     WGControlStr[0] = EOS;
  165.     format(WGControlStr, size, "Dodaj nowy scenariusz");
  166.     for(new i; i<LIMIT_WG; i++) if(WGID[i] != -1) {
  167.         format(WGControlStr, size, "%s\n%s", WGControlStr, WGName[i]);
  168.     }
  169. }
  170. CMD:wg(playerid, params[]) {
  171.     PlayerSignUpGame(playerid, GAME_WG);
  172.     return 1;
  173. }
  174.  
  175. RaceGetRandomScenario() {
  176.     new Scenarios[LIMIT_RACE], idx;
  177.     for(new i; i<LIMIT_RACE; i++) if(RInfo[i][rID] != -1) Scenarios[idx++] = RInfo[i][rID];
  178.     if(!idx) return -1;
  179.     return Scenarios[random(idx)];
  180. }
  181. stock RaceShowControl(playerid) {
  182.     ShowPlayerDialogEx(playerid, DIALOG_RACE_CONTROL, DIALOG_STYLE_LIST, "Zarządzanie scenariuszami Race", WGControlStr, "OK", "Anuluj");
  183. }
  184. stock RaceUpdateControlStr() {
  185.     new size = sizeof(RaceControlStr);
  186.     RaceControlStr[0] = EOS;
  187.     format(RaceControlStr, size, "Dodaj nowy scenariusz");
  188.     for(new i; i<LIMIT_RACE; i++) if(RInfo[i][rID] != -1) {
  189.         format(RaceControlStr, size, "%s\n%s", RaceControlStr, RInfo[i][rName]);
  190.     }
  191. }
  192. RaceIndexID(scenario) {
  193.     for(new i; i<LIMIT_RACE; i++) if(RInfo[i][rID] == scenario) return i;
  194.     return 0;
  195. }
  196. CMD:controlrace(playerid, params[]) {
  197.     RaceShowControl(playerid);
  198.     return 1;
  199. }
  200. CMD:race(playerid, params[]) {
  201.     PlayerSignUpGame(playerid, GAME_RACE);
  202.     return 1;
  203. }
  204. RaceIndexSpawn(scenario) {
  205.     for(new i; i<LIMIT_RACE; i++) if(RSpawnID[i] == scenario) return i;
  206.     return 0;
  207. }
  208. RaceIndexCP(scenario) {
  209.     for(new i; i<LIMIT_RACE; i++) if(RCPID[i] == scenario) return i;
  210.     return 0;
  211. }
  212.  
  213.  
  214.  
  215.  
  216.  
  217.  
  218. public PlayerSignUpGame(playerid, gameid) {
  219.     if(ZabawaUczestniczy[playerid] != GAME_NONE) {
  220.         SCM(playerid, C_GRAY, "Już uczestniczysz w jednej zabawie.");
  221.     } else {
  222.         switch(gameid) {
  223.             case GAME_WG: {
  224.                 if(WGNextScenario == -1) SCM(playerid, COLOR_WARNING, "Ups.. Nie ma załadowanego ani jednego scenariusza WG.");
  225.                 else if(ZabawaZapisany[playerid] & GAME_WG) {
  226.                     SCM(playerid, C_GRAY, "Jesteś już zapisany na WG.");
  227.                 } else {
  228.                     ZabawaZapisany[playerid] += GAME_WG;
  229.                     WGZapisani++;
  230.                     if(ZabawaTrwa & GAME_WG) SCM(playerid, 0x36C59AFF, "Zapisałeś się na następną kolejkę WG.");
  231.                     else SCM(playerid, 0x36C59AFF, "Zapisałeś się na WG.");
  232.                     printf("[PlayerSignUpGame(%s, GAME_WG) success. WGZapisani=%d", PlayerName(playerid), WGZapisani); //debug
  233.                     CheckStart(GAME_WG);
  234.                 }
  235.             }
  236.             case GAME_RACE: {
  237.                 if(RaceNextScenario == -1) SCM(playerid, COLOR_WARNING, "Ups.. Nie ma załadowanego ani jednego scenariusza Race.");
  238.                 else if(ZabawaZapisany[playerid] & GAME_RACE) {
  239.                     SCM(playerid, C_GRAY, "Jesteś już zapisany na WG.");
  240.                 }
  241.                 else if(RaceZapisani == 10) {
  242.                     SCM(playerid, C_GRAY, "Niestety, zapisała się już maksymalna liczba osób na wyścigi.");
  243.                 } else {
  244.                     ZabawaZapisany[playerid] += GAME_RACE;
  245.                     RaceZapisani++;
  246.                     if(ZabawaTrwa & GAME_RACE) SCM(playerid, 0x36C59AFF, "Zapisałeś się na następną kolejkę Race.");
  247.                     else SCM(playerid, 0x36C59AFF, "Zapisałeś się na Race.");
  248.                     printf("[PlayerSignUpGame(%s, GAME_RACE) success. RaceZapisani=%d", PlayerName(playerid), RaceZapisani); //debug
  249.                     CheckStart(GAME_RACE);
  250.                 }
  251.             }
  252.         }
  253.     }
  254.     UpdateZabawyTD();
  255.     return 1;
  256. }
  257.  
  258. public CheckStart(gameid) {
  259.     switch(gameid) {
  260.         case GAME_WG: {
  261.             if(WGZapisani == COUNT_TO_START_WG) {
  262.                 if(!(ZabawaTrwa & GAME_WG) && !(ZabawaStartuje & GAME_WG)) {
  263.                     ZabawaStartuje += GAME_WG;
  264.                     SetTimerEx("StartGame", TIME_TO_START_GAME, false, "d", GAME_WG);
  265.  
  266.                     new str[128];
  267.                     format(str, 128, "Za %d sekund rozpocznie się "COLOR_WG"Wojna Gangów! {36C59A}Wciąż można się dopisać - {FFFF00}/WG", TIME_TO_START_GAME/1000);
  268.                     SendClientMessageToAll(0x36C59AFF, str);
  269.                 }
  270.             }
  271.         }
  272.         case GAME_RACE: {
  273.             if(RaceZapisani == COUNT_TO_START_RACE) {
  274.                 if(!(ZabawaTrwa & GAME_RACE) && !(ZabawaStartuje & GAME_RACE)) {
  275.                     ZabawaStartuje += GAME_RACE;
  276.                     SetTimerEx("StartGame", TIME_TO_START_GAME, false, "d", GAME_RACE);
  277.  
  278.                     new str[128];
  279.                     format(str, 128, "Za %d sekund rozpoczną się "COLOR_RACE"Wyścigi! {36C59A}Wciąż można się dopisać - {FFFF00}/RACE", TIME_TO_START_GAME/1000);
  280.                     SendClientMessageToAll(0x36C59AFF, str);
  281.                 }
  282.             }
  283.         }
  284.     }
  285.     return 1;
  286. }
  287.  
  288. public BeforeStartGame(playerid, gameid) {
  289.     switch(gameid) {
  290.         case GAME_WG: {
  291.             if(ZabawaZapisany[playerid] & GAME_RACE) {
  292.                 ZabawaZapisany[playerid] -= GAME_RACE;
  293.                 RaceZapisani--;
  294.             }
  295.         }
  296.         case GAME_RACE: {
  297.             if(ZabawaZapisany[playerid] & GAME_WG) {
  298.                 ZabawaZapisany[playerid] -= GAME_WG;
  299.                 WGZapisani--;
  300.             }
  301.         }
  302.     }
  303.     return 1;
  304. }
  305.  
  306. public StartGame(gameid) { // C_RED ; C_GREEN2
  307.     switch(gameid) {
  308.         case GAME_WG: {
  309.             if(WGZapisani < COUNT_TO_START_WG) {
  310.                 SendClientMessageToAll(0x36C59AFF, COLOR_WG"Wojna Gangów {36C59A}się nie odbędzie ponieważ nie zapisała się wystarczająca liczba graczy.");
  311.                 ZabawaStartuje -= GAME_WG;
  312.                 for(new i; i<MAX_USERS; i++) if(ZabawaZapisany[i] & GAME_WG) {
  313.                     ZabawaZapisany[i] -= GAME_WG;
  314.                 }
  315.                 WGZapisani = 0;
  316.             } else {
  317.                 ZabawaStartuje -= GAME_WG;
  318.                 ZabawaTrwa += GAME_WG;
  319.                 Scores[WG_TEAM_RED] = 0, Scores[WG_TEAM_GREEN] = 0;
  320.                 WGCountPlayersRed = 0, WGCountPlayersGreen = 0;
  321.                 new bool:rnd = boolint(random(2));
  322.                 WGCurrentIdx = WGIndexID(WGNextScenario);
  323.                 printf("StartGame(GAME_WG) success. WGCurrentIdx Scenario=%d", WGCurrentIdx); //debug
  324.  
  325.                 for(new i; i<MAX_USERS; i++) if(ZabawaZapisany[i] & GAME_WG) {
  326.                     BeforeStartGame(i, GAME_WG);
  327.                     ZabawaUczestniczy[i] = GAME_WG;
  328.                     ZabawaZapisany[i] = GAME_NONE;
  329.  
  330.                     ResetPlayerWeapons(i);
  331.                     SetPlayerInterior(i, WGInterior[WGCurrentIdx]);
  332.                     SetPlayerVirtualWorld(i, VIRTUALWORLD_WG);
  333.                     GiveWGWeapons(i, WGCurrentIdx);
  334.                     SetPlayerHealth(i, 100.0);
  335.                     SetPlayerArmour(i, 100.0);
  336.  
  337.                     if(rnd) {
  338.                         SetPVarInt(i, "WG_Team", WG_TEAM_RED);
  339.                         SetPlayerTeam(i, WG_TEAM_RED);
  340.                         SetPlayerColorEx(i, C_RED);
  341.                         SetPlayerPosFreeze(i, WGSpawnA[WGCurrentIdx][0], WGSpawnA[WGCurrentIdx][1], WGSpawnA[WGCurrentIdx][2]);
  342.                         SCM(i, 0x36C59AFF, "Jesteś w drużynie: {FF0000}czerwonej!");
  343.                         WGCountPlayersRed++;
  344.                     } else {
  345.                         SetPVarInt(i, "WG_Team", WG_TEAM_GREEN);
  346.                         SetPlayerTeam(i, WG_TEAM_GREEN);
  347.                         SetPlayerColorEx(i, C_GREEN2);
  348.                         SetPlayerPosFreeze(i, WGSpawnB[WGCurrentIdx][0], WGSpawnB[WGCurrentIdx][1], WGSpawnB[WGCurrentIdx][2]);
  349.                         SCM(i, 0x36C59AFF, "Jesteś w drużynie: {00FF00}zielonej!");
  350.                         WGCountPlayersGreen++;
  351.                     }
  352.                     rnd = !rnd;
  353.                 }
  354.                 SetTimer("WGSetWorldBounds", 3000, false);
  355.                 WGNextScenario = WGGetRandomScenario();
  356.                 WGZapisani = 0;
  357.                 new str[160];
  358.                 format(str, 160, COLOR_WG"Wojna Gangów {36C59A}rozpoczęta! Scenariusz: \"%s\". Zapisy na następną kolejkę otwarte.", WGName[WGCurrentIdx]);
  359.                 SendClientMessageToAll(0x36C59AFF, str);
  360.             }
  361.         }
  362.         case GAME_RACE: {
  363.             if(RaceZapisani < COUNT_TO_START_RACE) {
  364.                 SendClientMessageToAll(0x36C59AFF, COLOR_RACE"Wyścigi {36C59A}się nie odbędą ponieważ nie zapisała się wystarczająca liczba graczy.");
  365.                 ZabawaStartuje -= GAME_RACE;
  366.                 for(new i; i<MAX_USERS; i++) if(ZabawaZapisany[i] & GAME_RACE) {
  367.                     ZabawaZapisany[i] -= GAME_RACE;
  368.                 }
  369.                 RaceZapisani = 0;
  370.             } else {
  371.                 ZabawaStartuje -= GAME_RACE;
  372.                 ZabawaTrwa += GAME_RACE;
  373.                 new Zapisani = CountZabawaZapisany(GAME_RACE);
  374.                 RaceCurrentStartIdx = RaceIndexSpawn(RaceNextScenario),
  375.                 RaceCurrentCPIdx = RaceIndexCP(RaceNextScenario);
  376.  
  377.                 RaceCurrentIdx = RaceIndexID(RaceNextScenario);
  378.                 printf("StartGame(GAME_RACE) success. RaceCurrentIdx Scenario=%d", RaceCurrentIdx); //debug
  379.                 //wroc tu
  380.                 for(new i; i<Zapisani; i++) {
  381.                     RaceSamochody[i] = CreateVehicle(RInfo[RaceCurrentIdx][rModelid], RSpawn[RaceCurrentStartIdx][i][0], RSpawn[RaceCurrentStartIdx][i][1], RSpawn[RaceCurrentStartIdx][i][2],
  382.                     RInfo[RaceCurrentIdx][rStartAngle], random(128), random(128), 99999999);
  383.                     LinkVehicleToInterior(RaceSamochody[i], RInfo[RaceCurrentIdx][rInterior]);
  384.                     SetVehicleVirtualWorld(RaceSamochody[i], VIRTUALWORLD_RACE);
  385.                 }
  386.  
  387.                 for(new i; i<MAX_USERS; i++) if(ZabawaZapisany[i] & GAME_RACE) {
  388.                     BeforeStartGame(i, GAME_RACE);
  389.                     ZabawaUczestniczy[i] = GAME_RACE;
  390.                     ZabawaZapisany[i] = GAME_NONE;
  391.  
  392.                     ResetPlayerWeapons(i);
  393.                     SetPlayerInterior(i, RInfo[RaceCurrentIdx][rInterior]);
  394.                     SetPlayerVirtualWorld(i, VIRTUALWORLD_RACE);
  395.                     SetPlayerHealth(i, 100.0);
  396.                 }
  397.                 RaceNextScenario = RaceGetRandomScenario();
  398.                 RaceZapisani = 0;
  399.                 new str[160];
  400.                 format(str, 160, COLOR_RACE"Wyścigi {36C59A}rozpoczęte! Scenariusz: \"%s\". Zapisy na następną kolejkę otwarte.", RInfo[RaceCurrentIdx][rName]);
  401.                 SendClientMessageToAll(0x36C59AFF, str);
  402.             }
  403.         }
  404.     }
  405.     UpdateZabawyTD();
  406.     return 1;
  407. }
  408.  
  409. public Zabawy_OnPlayerDeath(playerid, killerid, reason) {
  410.     if(ZabawaUczestniczy[playerid] & GAME_WG && ZabawaTrwa & GAME_WG) {
  411.  
  412.         if(killerid != INVALID_PLAYER_ID) { // jeżeli nie jest to samobójstwo
  413.             if(GPVI(playerid, "WG_Team") == WG_TEAM_RED) Scores[WG_TEAM_GREEN]++;
  414.             else Scores[WG_TEAM_RED]++;
  415.         }
  416.  
  417.         if(GPVI(playerid, "WG_Team") == WG_TEAM_RED) WGCountPlayersRed--;
  418.         else WGCountPlayersGreen--;
  419.         DeletePVar(playerid, "WG_Team");
  420.         ZabawaUczestniczy[playerid] = GAME_NONE;
  421.         SetPlayerRandomColor(playerid);
  422.         WGCheckFinish();
  423.     }
  424.  
  425.     UpdateZabawyTD();
  426.     return 1;
  427. }
  428.  
  429. public Zabawy_OnPlayerDisconnect(playerid) {
  430.     if(ZabawaZapisany[playerid] & GAME_WG) {
  431.         ZabawaZapisany[playerid] -= GAME_WG;
  432.         WGZapisani--;
  433.     } else if(ZabawaUczestniczy[playerid] & GAME_WG && ZabawaTrwa & GAME_WG) {
  434.  
  435.         if(GPVI(playerid, "WG_Team") == WG_TEAM_RED) WGCountPlayersRed--;
  436.         else WGCountPlayersGreen--;
  437.         DeletePVar(playerid, "WG_Team");
  438.         ZabawaUczestniczy[playerid] = GAME_NONE;
  439.         WGCheckFinish();
  440.     }
  441.  
  442.     UpdateZabawyTD();
  443.     return 1;
  444. }
  445.  
  446. public ZabawyInit() {
  447.     new result[300], count;
  448.     // WG
  449.     for(new i; i<LIMIT_WG; i++) WGID[i] = -1;
  450.  
  451.     if(sql_query("SELECT * FROM zabawy_wg")) {
  452.         mysql_store_result();
  453.         while(mysql_fetch_row_format(result)) {
  454.             sscanf(result, "p<|>ds[31]ffffffdddddddddffff", WGID[count], WGName[count], WGSpawnA[count][0], WGSpawnA[count][1], WGSpawnA[count][2],
  455.             WGSpawnB[count][0], WGSpawnB[count][1], WGSpawnB[count][2], WGInterior[count], WGWeapons[count][0], WGWeapons[count][1], WGWeapons[count][2],
  456.             WGWeapons[count][3], WGWeapons[count][4], WGWeapons[count][5], WGWeapons[count][6], WGWeapons[count][7], WGWorldBounds[count][wMinX], WGWorldBounds[count][wMaxX], WGWorldBounds[count][wMinY], WGWorldBounds[count][wMaxY]);
  457.             printf("DEBUG ROW: %s", result);
  458.             count++;
  459.         }
  460.         mysql_free_result();
  461.         WGUpdateControlStr();
  462.         WGNextScenario = WGGetRandomScenario();
  463.         printf("WG_Init: Zaladowano %d scenariuszy.", count);
  464.     } else {
  465.         print("ERROR: Nie udalo sie wyslac zapytania wczytujacego scenariusze WG.");
  466.     }
  467.  
  468.     // Race
  469.     for(new i; i<LIMIT_RACE; i++) RInfo[i][rID] = -1;
  470.     count = 0;
  471.     if(sql_query("SELECT * FROM zabawy_race")) {
  472.         mysql_store_result();
  473.         while(mysql_fetch_row_format(result)) {
  474.             sscanf(result, "p<|>e<ds[31]ddf>", RInfo[count++]);
  475.         }
  476.         mysql_free_result();
  477.         printf("Race_Init: Zaladowano %d scenariuszy.", count);
  478.  
  479.         // Race->Pozycje startowe
  480.         if(sql_query("SELECT rid, x, y, z FROM zabawy_race_start ORDER BY rid ASC, lp ASC")) {
  481.             mysql_store_result();
  482.             new lastRid = -1, cacheRid, currentIdx = -1, currentPos = -1, Float:cacheX, Float:cacheY, Float:cacheZ;
  483.             while(mysql_fetch_row_format(result)) {
  484.                 sscanf(result, "p<|>dfff", cacheRid, cacheX, cacheY, cacheZ);
  485.                 if(lastRid != cacheRid) {
  486.                     currentIdx++;
  487.                     currentPos = 0;
  488.                 }
  489.  
  490.                 RSpawn[currentIdx][currentPos][0] = cacheX;
  491.                 RSpawn[currentIdx][currentPos][1] = cacheY;
  492.                 RSpawn[currentIdx][currentPos][2] = cacheZ;
  493.                 RSpawnID[currentIdx] = cacheRid;
  494.  
  495.                 lastRid = cacheRid;
  496.                 currentPos++;
  497.             }
  498.             mysql_free_result();
  499.         } else print("ERROR: Nie udalo sie wyslac zapytania wczytujacego pozycje spawnu pojazdow na Race.");
  500.  
  501.         // Race->Pozycje race-checlpointów
  502.         if(sql_query("SELECT rid, x, y, z FROM zabawy_race_cp ORDER BY rid ASC, lp ASC")) {
  503.             mysql_store_result();
  504.             new lastRid = -1, cacheRid, currentIdx = -1, currentPos = -1, Float:cacheX, Float:cacheY, Float:cacheZ;
  505.             while(mysql_fetch_row_format(result)) {
  506.                 sscanf(result, "p<|>dfff", cacheRid, cacheX, cacheY, cacheZ);
  507.                 if(lastRid != cacheRid) {
  508.                     currentIdx++;
  509.                     currentPos = 0;
  510.                 }
  511.  
  512.                 RCP[currentIdx][currentPos][0] = cacheX;
  513.                 RCP[currentIdx][currentPos][1] = cacheY;
  514.                 RCP[currentIdx][currentPos][2] = cacheZ;
  515.                 RCPID[currentIdx] = cacheRid;
  516.  
  517.                 lastRid = cacheRid;
  518.                 currentPos++;
  519.             }
  520.             RaceUpdateControlStr();
  521.             RaceNextScenario = RaceGetRandomScenario();
  522.             mysql_free_result();
  523.         } else print("ERROR: Nie udalo sie wyslac zapytania wczytujacego pozycje race-checkpointow na Race.");
  524.     } else print("ERROR: Nie udalo sie wyslac zapytania wczytujacego scenariusze Race.");
  525.     print_array_race(); //debug
  526.  
  527.  
  528.     UpdateZabawyTD();
  529.     return 1;
  530. }
  531.  
  532. print_array_race() {
  533.     if(fexist("RACE.txt")) fremove("RACE.txt");
  534.  
  535.     new File:hndl = fopen("RACE.txt", io_append);
  536.     new str[200];
  537.  
  538.     for(new i; i<LIMIT_RACE; i++) if(RInfo[i][rID] != -1) {
  539.         format(str, 200, "RInfo[%d] = {%d, %s, %d, %d, %f}\r\n", i, RInfo[i][rID], RInfo[i][rName], RInfo[i][rInterior], RInfo[i][rModelid], RInfo[i][rStartAngle]);
  540.         fwrite(hndl, str);
  541.     }
  542.     fclose(hndl);
  543.  
  544.     if(fexist("RACE-SPAWN.txt")) fremove("RACE-SPAWN.txt");
  545.     hndl = fopen("RACE-SPAWN.txt", io_append);
  546.     fwrite(hndl, "RSpawn = {\r\n");
  547.     for(new i; i<LIMIT_RACE; i++) {
  548.         format(str, 200, "\t[%d] =>\r\n", i);
  549.         fwrite(hndl, str);
  550.         for(new a; a<LIMIT_RACE_START_POS; a++) {
  551.             format(str, 200, "\t\t{%.1f, %.1f, %.1f}\r\n", RSpawn[i][a][0], RSpawn[i][a][1], RSpawn[i][a][2]);
  552.             fwrite(hndl, str);
  553.         }
  554.     }
  555.     fwrite(hndl, "}");
  556.     fclose(hndl);
  557.  
  558.     if(fexist("RACE-CP.txt")) fremove("RACE-CP.txt");
  559.     hndl = fopen("RACE-CP.txt", io_append);
  560.     fwrite(hndl, "RCP = {\r\n");
  561.     for(new i; i<LIMIT_RACE; i++) {
  562.         format(str, 200, "\t[%d] =>\r\n", i);
  563.         fwrite(hndl, str);
  564.         for(new a; a<LIMIT_RACE_CP; a++) {
  565.             format(str, 200, "\t\t{%.1f, %.1f, %.1f}\r\n", RCP[i][a][0], RCP[i][a][1], RCP[i][a][2]);
  566.             fwrite(hndl, str);
  567.         }
  568.     }
  569.     fwrite(hndl, "}");
  570.     fclose(hndl);
  571. }
  572. /*
  573. enum enumRInfo { rID, rName[31], rInterior, rModelid, Float:rStartAngle }
  574.  
  575.  
  576. new RInfo[LIMIT_RACE][enumRInfo],
  577.     RCPID[LIMIT_RACE],
  578.     RSpawnID[LIMIT_RACE],
  579.     Float:RCP[LIMIT_RACE][LIMIT_RACE_CP][3],
  580.     Float:RSpawn[LIMIT_RACE][LIMIT_RACE_START_POS][3];
  581. */
  582.  
  583. UpdateZabawyTD() {
  584.     //"/wg~n~/race~n~/derby~n~/arena~n~/minigun~n~/wojsko"
  585.     //"~r~trwa~n~~w~0/3~n~0/3~n~2/5~n~~r~trwa~n~~y~5~n~~w~0"
  586.     //TextZabawa5
  587.     new str[128], wg[9], race[9];
  588.  
  589.     if(ZabawaTrwa & GAME_WG) format(wg, sizeof(wg), "~r~TRWA");
  590.     else if(ZabawaStartuje & GAME_WG) format(wg, sizeof(wg), "~p~%d", WGZapisani);
  591.     else format(wg, sizeof(wg), "~w~%d/%d", WGZapisani, COUNT_TO_START_WG);
  592.  
  593.     if(ZabawaTrwa & GAME_RACE) format(race, sizeof(race), "~r~TRWA");
  594.     else if(ZabawaStartuje & GAME_RACE) format(race, sizeof(race), "~p~%d", RaceZapisani);
  595.     else format(race, sizeof(race), "~w~%d/%d", RaceZapisani, COUNT_TO_START_RACE);
  596.  
  597.     format(str, 128, "%s~n~%s~n~~w~0/6~n~0/5~n~0~n~0", wg, race);
  598.     TextDrawSetString(TextZabawa5, str);
  599.     printf("ZabawyTD updated.");
  600. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement