View difference between Paste ID: CJtK9Gnt and NEmpGhXg
SHOW: | | - or go back to the newest paste.
1
Pentru a implementa aceste noi funcționalități în pluginul tău, poți modifica codul existent astfel:
2
3
pawn
4
Copy code
5
#pragma semicolon 1
6
7
new g_MySQLHandle
8
9
const KILL_SCORE = 1
10
const DEATH_PENALTY = 1
11
const TEAM_KILL_PENALTY = 3
12
const ROUND_WIN_BONUS = 2
13
const ROUND_LOSS_PENALTY = 2
14
const TEAM_WIN_BONUS = 15
15
16
new g_PlayerScores[MAX_CLIENTS]
17
new g_TeamScores[2]
18
19
public plugin_init()
20
{
21
    register_event("player_death", "OnPlayerDeath", "a", "1=0", "2=0")
22
    register_event("round_end", "OnRoundEnd")
23
    register_event("client_disconnected", "OnClientDisconnected", "ed", "1=0", "2=0")
24
    register_event("client_connected", "OnClientConnected", "ed", "1=0", "2=0")
25
26
    g_MySQLHandle = mysql_connect("hostname", "username", "password", "database")
27
    if (g_MySQLHandle == SQL_INVALID_HANDLE)
28
    {
29
        log_amx("Eroare la conectarea la baza de date MySQL!")
30
    }
31
}
32
33
public OnPlayerDeath(victim, killer, weapon)
34
{
35
    new victimId = read_data(victim, "userid")
36
    new killerId = read_data(killer, "userid")
37
    new victimTeam = get_user_team(victimId)
38
    new killerTeam = get_user_team(killerId)
39
40
    if (victimId != 0 && killerId != 0 && !is_user_bot(victimId) && !is_user_bot(killerId))
41
    {
42
        // Verifică dacă jucătorul a omorât membrii echipei adverse
43
        if (victimTeam != killerTeam && victimTeam != 0 && killerTeam != 0)
44
        {
45
            new enemyPlayersKilled = 0
46
            for (new i = 1; i <= MaxClients; i++)
47
            {
48
                if (i == killerId)
49
                    continue
50
51
                new playerTeam = get_user_team(i)
52
                if (playerTeam != killerTeam && playerTeam != 0)
53
                    enemyPlayersKilled++
54
            }
55
56
            if (enemyPlayersKilled >= 3 && enemyPlayersKilled <= 5)
57
            {
58
                g_PlayerScores[killerId] += enemyPlayersKilled
59
                client_print(killerId, print_chat, "Ai primit %d puncte bonus pentru omorârea a %d inamici!", enemyPlayersKilled, enemyPlayersKilled)
60
            }
61
        }
62
63
        // Verifică dacă jucătorul a omorât un coechipier
64
        if (victimTeam == killerTeam && victimTeam != 0 && killerTeam != 0)
65
        {
66
            g_PlayerScores[killerId] -= TEAM_KILL_PENALTY
67
            client_print(killerId, print_chat, "Ai fost penalizat cu %d puncte pentru omorârea unui coechipier!", TEAM_KILL_PENALTY)
68
        }
69
70
        // Adaugă/decrease punctajul în funcție de tipul de kill și rezultatul rundei
71
        new isHeadshot = (weapon == CSW_AK47 || weapon == CSW_AUG || weapon == CSW_AWP || weapon == CSW_DEAGLE || weapon == CSW_FAMAS || weapon == CSW_G3SG1 || weapon == CSW_GLOCK18 || weapon == CSW_M4A1 || weapon == CSW_M249 || weapon == CSW_MAC10 || weapon == CSW_P90 || weapon == CSW_P228 || weapon == CSW_SCOUT || weapon == CSW_TMP || weapon == CSW_UMP45 || weapon == CSW_USP45 || weapon == CSW_XM1014)
72
73
        if (isHeadshot)
74
        {
75
            g_PlayerScores[killerId] += KILL_SCORE + 1
76
            client_print(killerId, print_chat, "Ai primit %d puncte pentru un kill cu headshot!", KILL_SCORE + 1)
77
        }
78
        else
79
        {
80
            g_PlayerScores[killerId] += KILL_SCORE
81
            client_print(killerId, print_chat, "Ai primit %d puncte pentru un kill normal!", KILL_SCORE)
82
        }
83
84
        // Penalizare pentru jucătorul ucis
85
        g_PlayerScores[victimId] -= DEATH_PENALTY
86
        client_print(victimId, print_chat, "Ai fost penalizat cu %d puncte pentru moartea ta!", DEATH_PENALTY)
87
88
        // Actualizează punctajele în baza de date
89
        mysql_tquery(g_MySQLHandle, "UPDATE player_scores SET score = score + %d WHERE player_id = %d", g_PlayerScores[killerId], killerId)
90
        mysql_tquery(g_MySQLHandle, "UPDATE player_scores SET score = score - %d WHERE player_id = %d", DEATH_PENALTY, victimId)
91
    }
92
}
93
94
public OnRoundEnd(winner)
95
{
96
    for (new i = 1; i <= MaxClients; i++)
97
    {
98
        new playerTeam = get_user_team(i)
99
100
        if (playerTeam == winner)
101
        {
102
            g_PlayerScores[i] += ROUND_WIN_BONUS
103
            client_print(i, print_chat, "Ai primit %d puncte bonus pentru câștigarea runde!", ROUND_WIN_BONUS)
104
        }
105
        else
106
        {
107
            g_PlayerScores[i] -= ROUND_LOSS_PENALTY
108
            client_print(i, print_chat, "Ai fost penalizat cu %d puncte pentru pierderea runde!", ROUND_LOSS_PENALTY)
109
        }
110
111
        // Actualizează punctajele în baza de date
112
        mysql_tquery(g_MySQLHandle, "UPDATE player_scores SET score = score + %d WHERE player_id = %d", g_PlayerScores[i], i)
113
    }
114
115
    new winningTeam = winner - 2
116
    g_TeamScores[winningTeam] += 1
117
118
    if (g_TeamScores[winningTeam] >= 16)
119
    {
120
        for (new i = 1; i <= MaxClients; i++)
121
        {
122
            new playerTeam = get_user_team(i)
123
124
            if (playerTeam == winner)
125
            {
126
                g_PlayerScores[i] += TEAM_WIN_BONUS
127
                client_print(i, print_chat, "Ai primit %d puncte bonus pentru câștigarea a 16 runde!", TEAM_WIN_BONUS)
128
            }
129
130
            // Actualizează punctajele în baza de date
131
            mysql_tquery(g_MySQLHandle, "UPDATE player_scores SET score = score + %d WHERE player_id = %d", g_PlayerScores[i], i)
132
        }
133
    }
134
}
135
136
public OnClientDisconnected(client)
137
{
138
    mysql_tquery(g_MySQLHandle, "UPDATE player_scores SET score = %d WHERE player_id = %d", g_PlayerScores[client], client)
139
}
140
141
public OnClientConnected(client)
142
{
143
    new query[128]
144
    format(query, sizeof(query), "SELECT score FROM player_scores WHERE player_id = %d", client)
145
    new result = mysql_query(g_MySQLHandle, query)
146
    if (mysql_num_rows(result) > 0)
147
    {
148
        mysql_fetch_row(result)
149
        g_PlayerScores[client] = mysql_get_int(result, "score")
150
    }
151
    mysql_free_result(result)
152
}
153
În acest exemplu modificat, am adăugat următoarele funcționalități:
154
155
Verificarea numărului de inamici uciși pentru acordarea punctelor bonus.
156
Penalizarea pentru omorul coechipierilor.
157
Acordarea de puncte bonus sau penalizare pentru câștigarea/pierderea rundei.
158
Verificarea numărului de runde câștigate de echipă și acordarea unui bonus pentru atingerea numărului de 16 runde câștigate.
159
Asigură-te că ai înlocuit valorile "hostname", "username", "password" și "database" cu informațiile corespunzătoare pentru conectarea la baza de date MySQL.
160
161
162
163
164
165
User
166
Cum trebuie sa fac baza de date MySQL?
167
ChatGPT
168
Pentru a crea baza de date MySQL și tabela corespunzătoare pentru stocarea scorurilor jucătorilor, urmează acești pași:
169
170
Asigură-te că ai instalat și configurat serverul MySQL pe serverul tău.
171
172
Conectează-te la serverul MySQL utilizând un client de gestionare a bazelor de date, cum ar fi phpMyAdmin sau MySQL Workbench.
173
174
Creează o bază de date pentru pluginul tău CS 1.6. De exemplu, poți utiliza următoarea comandă SQL pentru a crea o bază de date numită cs16_scores:
175
176
sql
177
Copy code
178
CREATE DATABASE cs16_scores;
179
Selectează baza de date cs16_scores pentru a lucra cu ea:
180
181
sql
182
Copy code
183
USE cs16_scores;
184
Creează tabela player_scores pentru a stoca scorurile jucătorilor. Aceasta va conține următoarele câmpuri: player_id (identificatorul jucătorului) și score (scorul jucătorului). Poți folosi următoarea comandă SQL pentru a crea tabela:
185
186
sql
187
Copy code
188
CREATE TABLE player_scores (
189
    player_id INT PRIMARY KEY,
190
    score INT
191
);
192
Acestă comandă creează tabela player_scores cu două coloane: player_id și score.
193
194
Acum, baza de date și tabela pentru stocarea scorurilor jucătorilor au fost create cu succes. Puteți utiliza această bază de date în pluginul tău CS 1.6 pentru a stoca și actualiza scorurile jucătorilor.
195
196
Asigură-te că ai configurat corespunzător informațiile de conectare la baza de date MySQL în codul pluginului, în locurile marcate cu "hostname", "username", "password" și "database".