Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- 888888888888 ,ad8888ba, I8, 8 ,8I 88888888888 88888888ba
- 88 d8"' `"8b `8b d8b d8' 88 88 "8b
- 88 d8' `8b "8, ,8"8, ,8" 88 88 ,8P
- 88 88 88 Y8 8P Y8 8P 88aaaaa 88aaaaaa8P'
- 88 88 88 `8b d8' `8b d8' 88""""" 88""""88'
- 88 Y8, ,8P `8a a8' `8a a8' 88 88 `8b
- 88 Y8a. .a8P `8a8' `8a8' 88 88 `8b
- 88 `"Y8888Y"' `8' `8' 88888888888 88 `8b
- */
- #include "YSI\y_hooks"
- //-----------------------------
- //-------------------------------------------------
- //-----------------------------
- stock static GAMEID;
- //-----------------------------
- static
- bool:finish[MAX_LINKS_PER_GAME char],
- object_towers[MAX_LINKS_PER_GAME][2],
- Text3D:text3d_health_towers[MAX_LINKS_PER_GAME][2],
- int_health_towers[MAX_LINKS_PER_GAME][2],
- timer_bomb[MAX_LINKS_PER_GAME],
- object_bomb[MAX_LINKS_PER_GAME],
- Text3D:text3d_bomb[MAX_LINKS_PER_GAME];
- static const Float:pos_towers[2][3] =
- {
- {-972.296020, 1022.695556, 1345.796508},
- {-1133.212890, 1096.327270, 1345.796508}
- };
- //-----------------------------
- //-------------------------------------------------
- //-----------------------------
- enum e_PLAYERS_TOWER
- {
- pTowKills,
- pTowDeaths,
- pTowDamagesTower,
- pTowBombsExp,
- bool:pTowHasBomb
- }
- static
- P_TOW[MAX_PLAYERS][e_PLAYERS_TOWER];
- //-----------------------------
- //-------------------------------------------------
- //-----------------------------
- static GivePlayerPoints(playerid, points, bool:won)
- {
- new
- clone[e_PLAYERS_TOWER];
- clone = P_TOW[playerid];
- static
- query[512];
- mysql_format(mysql, query, sizeof(query), "\
- UPDATE TowerGameStats SET \
- Points = Points + %d,\
- Games = Games + 1,\
- GamesWon = GamesWon + %d,\
- GamesLost = GamesLost + %d,\
- GameTime = GameTime + %d,\
- Kills = Kills + %d,\
- Deaths = Deaths + %d,\
- DamagesTower = DamagesTower + %d,\
- BombsExplosed = BombsExplosed + %d \
- WHERE ID = %d",
- points,
- _:won,
- _:!won,
- GetGameTimeByLinkID(PLAYERS[playerid][pLink]),
- clone[pTowKills],
- clone[pTowDeaths],
- clone[pTowDamagesTower],
- clone[pTowBombsExp],
- PLAYERS[playerid][pIDSql]);
- //mysql_tquery(mysql, query);
- Scm(playerid, Color.GOLD, "Tu remportes "GRAY"%d "GOLD"points !", points);
- Scm(playerid, Color.AQUA, "Tu remportes "GRAY"%d "AQUA"dollars !", GivePlayerDollars(playerid, points));
- return true;
- }
- //-----------------------------
- static DropBomb(playerid, linkid)
- {
- foreach(new i : LinkPlayer[linkid])
- {
- GTFP(i, "~b~La bombe est au sol.", 3000, 4);
- }
- P_TOW[playerid][pTowHasBomb] = false;
- new
- cell = GetCellLink(LINKS[linkid][lGame], linkid),
- Float:x,
- Float:y,
- Float:z;
- GetPlayerPos(playerid, x, y, z);
- object_bomb[cell] = CreateDynamicObject(2891, x, y, z - 1.0, 0.000000, 0.000000, 0.000000, LINKS[linkid][lWorldID], 10, -1, 400.0, 0.0);
- text3d_bomb[cell] = CreateDynamic3DTextLabel("Pour prendre la bombe\nAppuie sur N et clique sur la bombe.", Color.AQUA, x, y, z - 1.0, 250.0, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 0, LINKS[linkid][lWorldID], 10, -1, 10.0);
- RemovePlayerAttachedObject(playerid, 0);
- return true;
- }
- //-----------------------------
- //-------------------------------------------------
- //-----------------------------
- static OnTowerTakeDamage(linkid, cell, teamid_tower);
- static Timer_Bomb(linkid, cell);
- //-----------------------------
- //-------------------------------------------------
- //-----------------------------
- GameMode::Init()
- {
- new
- links[][2] =
- {
- {2, 2}, // 4 players
- {2, 4}, // 8 players
- {2, 6}, // 12 players
- {2, 8} // 16 players
- };
- GAMEID = CreateGame("Tower", links, 11461);
- //-----------------------------
- new
- clone[e_GAMES];
- clone = GAMES[GAMEID];
- for(new l = 0; l < clone[gaNbrLinks]; l++)
- {
- new
- worldid = LINKS[ clone[gaLinks][l] ][lWorldID];
- object_towers[l][0] = CreateDynamicObject(11461, pos_towers[0][0], pos_towers[0][1], pos_towers[0][2] - 14.0, 0.000000, 0.000000, 12.500000, worldid, 10, -1, 200.0, 0.0);
- text3d_health_towers[l][0] = CreateDynamic3DTextLabel("", -1, pos_towers[0][0], pos_towers[0][1], pos_towers[0][2], 250.0, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 0, worldid, 10, -1, 100.0);
- object_towers[l][1] = CreateDynamicObject(11461, pos_towers[1][0], pos_towers[1][1], pos_towers[1][2] - 14.0, 0.000000, 0.000000, 12.500000, worldid, 10, -1, 200.0, 0.0);
- text3d_health_towers[l][1] = CreateDynamic3DTextLabel("", -1, pos_towers[1][0], pos_towers[1][1], pos_towers[1][2], 250.0, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 0, worldid, 10, -1, 100.0);
- #include "tower_map.pwn"
- }
- }
- //-----------------------------
- //-------------------------------------------------
- //-----------------------------
- GAME::This->Start(gameid, linkid)
- {
- new
- cell = GetCellLink(gameid, linkid);
- UpdateDynamic3DTextLabelText(text3d_health_towers[cell][0], GetTeamColorString(0), "1000/1000");
- int_health_towers[cell][0] = 1000;
- UpdateDynamic3DTextLabelText(text3d_health_towers[cell][1], GetTeamColorString(1), "1000/1000");
- int_health_towers[cell][1] = 1000;
- //-----------------------------
- timer_bomb[cell] = SetTimerEx("Timer_Bomb", 120000, false, "dd", linkid, cell);
- finish{cell} = false;
- return true;
- }
- //-----------------------------
- GAME::This->Finish(gameid, linkid)
- {
- new
- cell = GetCellLink(gameid, linkid);
- KillTimer(timer_bomb[cell]);
- return true;
- }
- //-----------------------------
- GAME::Player->Join(gameid, linkid, playerid)
- {
- RemoveBuildingForPlayer(playerid, 3935, -1097.7422, 1037.8750, 1343.0781, 0.25);
- RemoveBuildingForPlayer(playerid, 3936, -974.5547, 1059.4609, 1344.7734, 0.25);
- RemoveBuildingForPlayer(playerid, 3937, -1130.9219, 1059.4609, 1345.4688, 0.25);
- //-----------------------------
- static
- query[128];
- mysql_format(mysql, query, sizeof(query), "INSERT INTO TowerGameStats (ID) VALUES (%d) ON DUPLICATE KEY UPDATE ID = %d", PLAYERS[playerid][pIDSql], PLAYERS[playerid][pIDSql]);
- //mysql_tquery(mysql, query);
- //-----------------------------
- SetPlayerColor(playerid, RemoveColorAlpha(TEAMS[ PLAYERS[playerid][pTeamDG] ][tColor]));
- return true;
- }
- //-----------------------------
- GAME::Player->Quit(gameid, linkid, playerid, teamid)
- {
- if(GetNumberPlayersInTeam(linkid, teamid) == 0)
- {
- new
- cell = GetCellLink(gameid, linkid),
- team_enemy = _:!teamid,
- points_bonus = floatround(float(GetGameTimeByLinkID(linkid)) * 0.03125);
- ScmToLink(linkid, Color.WHITE, "L'équipe {%x}%s "WHITE"gagne la partie !", TEAMS[team_enemy][tColor] >>> 8, TEAMS[team_enemy][tName]);
- foreach(new i : LinkPlayer[linkid])
- {
- if(team_enemy == PLAYERS[i][pTeamDG])
- {
- new
- points = 0;
- points += P_TOW[i][pTowDamagesTower] / 50;
- points += P_TOW[i][pTowBombsExp] * 5;
- points += floatround(float(P_TOW[i][pTowKills]) * 1.5);
- points += points_bonus;
- GivePlayerPoints(i, points, true);
- }
- }
- EndGame(linkid);
- finish{cell} = true;
- }
- static const
- eBlank[e_PLAYERS_TOWER];
- P_TOW[playerid] = eBlank;
- return true;
- }
- //-----------------------------
- GAME::Player->Spawn(gameid, linkid, playerid)
- {
- static const
- Float:spawns[][][] =
- {
- {
- {-976.590820, 1092.075683, 1344.968994, 167.189147},
- {-974.331054, 1091.783691, 1344.977539, 182.229415},
- {-972.614746, 1090.735961, 1344.990112, 87.915122},
- {-972.616577, 1088.796875, 1344.991577, 85.408508},
- {-974.064819, 1087.205200, 1344.982788, 353.287658},
- {-976.501831, 1087.189941, 1344.965942, 359.554565}
- },
- {
- {-1130.423461, 1026.689697, 1345.723999, 2.107750},
- {-1133.388183, 1026.707275, 1345.739990, 358.011108},
- {-1134.376220, 1028.029052, 1345.745239, 272.493530},
- {-1134.375854, 1030.457885, 1345.745239, 263.406768},
- {-1133.348754, 1031.585083, 1345.734863, 169.719161},
- {-1130.280639, 1031.601318, 1345.718872, 183.819366}
- }
- };
- new
- teamid = PLAYERS[playerid][pTeamDG],
- rand = random(sizeof(spawns[]));
- SetPlayerInterior(playerid, 10);
- SetPlayerPos(playerid, spawns[teamid][rand][0], spawns[teamid][rand][1], spawns[teamid][rand][2]);
- SetPlayerFacingAngle(playerid, spawns[teamid][rand][3]);
- //-----------------------------
- GivePlayerWeapon(playerid, 24, cellmax);
- GivePlayerWeapon(playerid, 27, cellmax);
- GivePlayerWeapon(playerid, 29, cellmax);
- //-----------------------------
- SetPlayerSkin(playerid, teamid ? 287 : 285);
- SetPlayerHealth(playerid, 100.0);
- return true;
- }
- //-----------------------------
- GAME::Player->KillPlayer(gameid, linkid, playerid, deathid)
- {
- P_TOW[playerid][pTowKills]++;
- return true;
- }
- //-----------------------------
- GAME::Player->Death(gameid, linkid, playerid)
- {
- P_TOW[playerid][pTowDeaths]++;
- if(P_TOW[playerid][pTowHasBomb])
- DropBomb(playerid, linkid);
- return true;
- }
- //-----------------------------
- GAME::Player->ShotObject(gameid, linkid, playerid, weaponid, objectid)
- {
- new
- cell = GetCellLink(gameid, linkid),
- teamid_enemy = !PLAYERS[playerid][pTeamDG],
- tower_object = object_towers[cell][teamid_enemy];
- if(tower_object == objectid)
- {
- static
- Float:x,
- Float:y,
- Float:z;
- GetDynamicObjectPos(tower_object, x, y, z);
- if(!IsPlayerInRangeOfPoint(playerid, 20.0, x, y, z))
- return GTFP(playerid, "~r~Tu es trop loin de la tourelle.", 1000, 4);
- switch(weaponid)
- {
- case WEAPON_DEAGLE: int_health_towers[cell][teamid_enemy] -= 10, P_TOW[playerid][pTowDamagesTower] += 10;
- case WEAPON_SHOTGSPA: int_health_towers[cell][teamid_enemy] -= 4, P_TOW[playerid][pTowDamagesTower] += 4;
- default: int_health_towers[cell][teamid_enemy]--, P_TOW[playerid][pTowDamagesTower]++;
- }
- OnTowerTakeDamage(linkid, cell, teamid_enemy);
- }
- return true;
- }
- //-----------------------------
- GAME::Player->KeyChange(gameid, linkid, playerid, newkeys, oldkeys)
- {
- if(HOLDING(KEY_NO))
- {
- if(P_TOW[playerid][pTowHasBomb])
- {
- DropBomb(playerid, linkid);
- }
- else
- {
- new
- cell = GetCellLink(gameid, linkid),
- Float:x,
- Float:y,
- Float:z;
- GetDynamicObjectPos(object_bomb[cell], x, y, z);
- if(GetPlayerDistanceFromPoint(playerid, x, y, z) > 5.0)
- return GameTextForPlayer(playerid, "~r~Tu es trop loin de la bombe.", 1000, 4);
- P_TOW[playerid][pTowHasBomb] = true;
- SetPlayerAttachedObject(playerid, 0, 2891, 1, 0.127000, -0.053999, -0.011000, 92.000007, 0.000000, 90.199974);
- DestroyDynamicObject(object_bomb[cell]);
- DestroyDynamic3DTextLabel(text3d_bomb[cell]);
- GTFP(playerid, "~g~Tu viens de ramasser la bombe~n~~b~Fais-toi sauter avec la tourelle adverse.", 1000, 4);
- Scm(playerid, Color.GRAY, "Pour te faire sauter avec la bombe, appuyez sur la touche H.");
- }
- return true;
- }
- if(HOLDING(KEY_CTRL_BACK))
- {
- if(P_TOW[playerid][pTowHasBomb])
- {
- new
- cell = GetCellLink(gameid, linkid),
- teamid_enemy = !PLAYERS[playerid][pTeamDG];
- if(!IsPlayerInRangeOfPoint(playerid, 5.0, pos_towers[teamid_enemy][0], pos_towers[teamid_enemy][1], pos_towers[teamid_enemy][2]))
- return GameTextForPlayer(playerid, "~r~Tu es trop loin de la tourelle.", 1000, 4);
- P_TOW[playerid][pTowBombsExp]++;
- P_TOW[playerid][pTowHasBomb] = false;
- RemovePlayerAttachedObject(playerid, 0);
- new
- Float:x,
- Float:y,
- Float:z;
- GetPlayerPos(playerid, x, y, z);
- SetPlayerHealth(playerid, 0.0);
- CreateExplosion(x, y, z, 6, 15.0);
- int_health_towers[cell][teamid_enemy] -= 200;
- foreach(new i : LinkPlayer[linkid])
- {
- GTFP(i, "~g~La bombe apparaitra~n~~y~dans 2 minutes.", 5000, 4);
- if(teamid_enemy == PLAYERS[playerid][pTeamDG])
- Scm(i, Color.RED, "La bombe vient d'endommager votre tourelle.");
- else
- Scm(i, Color.GREEN, "La bombe vient d'endommager la tourelle adverse.");
- }
- timer_bomb[cell] = SetTimerEx("Timer_Bomb", 120000, false, "dd", linkid, cell);
- OnTowerTakeDamage(linkid, cell, teamid_enemy);
- }
- return true;
- }
- return true;
- }
- //-----------------------------
- //-------------------------------------------------
- //-----------------------------
- public OnTowerTakeDamage(linkid, cell, teamid_tower)
- {
- if(int_health_towers[cell][teamid_tower] < 0)
- int_health_towers[cell][teamid_tower] = 0;
- static
- string[10];
- format(string, sizeof(string), "%d/1000", int_health_towers[cell][teamid_tower]);
- UpdateDynamic3DTextLabelText(text3d_health_towers[cell][teamid_tower], COLOR_RED, string);
- //-----------------------------
- if(int_health_towers[cell][teamid_tower] <= 0)
- {
- new
- teamid = _:!teamid_tower,
- points_bonus = floatround(float(GetGameTimeByLinkID(linkid)) * 0.03125);
- ScmToLink(linkid, Color.WHITE, "L'équipe {%x}%s "WHITE"gagne la partie !", GetTeamColorString(teamid), TEAMS[teamid][tName]);
- foreach(new i : LinkPlayer[linkid])
- {
- if(teamid == PLAYERS[i][pTeamDG])
- {
- new
- points = 0;
- points += P_TOW[i][pTowDamagesTower] / 50;
- points += P_TOW[i][pTowBombsExp] * 5;
- points += floatround(float(P_TOW[i][pTowKills]) * 1.5);
- points += points_bonus;
- GivePlayerPoints(i, points, true);
- }
- else
- {
- new
- points = 0;
- points += P_TOW[i][pTowDamagesTower] / 100;
- points += P_TOW[i][pTowBombsExp] * 5;
- points += P_TOW[i][pTowKills];
- points += points_bonus;
- GivePlayerPoints(i, points, false);
- }
- }
- EndGame(linkid);
- finish{cell} = true;
- }
- }
- //-----------------------------
- public Timer_Bomb(linkid, cell)
- {
- if(finish{cell})
- return true;
- foreach(new i : LinkPlayer[linkid])
- {
- GTFP(i, "~g~La bombe est apparue au~n~~g~milieu de la map.", 5000, 4);
- }
- object_bomb[cell] = CreateDynamicObject(2891, -1054.687622, 1063.608764, 1343.958740, 0.000000, 0.000000, 0.000000, LINKS[linkid][lWorldID], 10, -1, 400.0, 0.0);
- text3d_bomb[cell] = CreateDynamic3DTextLabel("Pour prendre la bombe :\nAppuie sur N !", Color.AQUA, -1054.687622, 1063.608764, 1343.958740, 250.0, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 0, LINKS[linkid][lWorldID], 10, -1, 10.0);
- return true;
- }
- /*
- 888888888888 ,ad8888ba, I8, 8 ,8I 88888888888 88888888ba
- 88 d8"' `"8b `8b d8b d8' 88 88 "8b
- 88 d8' `8b "8, ,8"8, ,8" 88 88 ,8P
- 88 88 88 Y8 8P Y8 8P 88aaaaa 88aaaaaa8P'
- 88 88 88 `8b d8' `8b d8' 88""""" 88""""88'
- 88 Y8, ,8P `8a a8' `8a a8' 88 88 `8b
- 88 Y8a. .a8P `8a8' `8a8' 88 88 `8b
- 88 `"Y8888Y"' `8' `8' 88888888888 88 `8b
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement