|
IIPO100_HY6
|
Дата: Пятница, 03.01.2014, 09:38:07 | Сообщение # 6 |
|
Сообщений: 10
Репутация: 1 [ +/- ]
|
|
Я брал кой чё из примера на сайте чёто из вики по этой теме в итоге получилось это:
Код #include <sourcemod> #include <sdktools>
#define PLUGIN_VERSION "0.1"
new points[MAXPLAYERS+1]; new Handle:kv; new String:g_SteamID[MAXPLAYERS+1];
public Plugin:myinfo = {
name = "Special Modification", author = "IIpo100 Hy6", description = "Make specmodifications for server", version = PLUGIN_VERSION, url = ""
}
public OnPluginStart() { RegConsoleCmd("sm_bm_menu",CMD_showmenu);
kv = CreateKeyValues("wS_Group"); FileToKeyValues(kv, "stats.txt");
HookEvent("player_death", player_death); }
public OnClientConnected(client) { GetClientAuthString(client, g_SteamID[client], 30); if (KvJumpToKey(kv, g_SteamID[client], false)) { points[client] = KvGetNum(kv, "points"); PrintToChatAll("Игрок:{red} %N[=%s=] присоединился к игре с %d поинтами.", client, g_SteamID[client], points[client]) } else { points[client] = 0;
KvJumpToKey(kv, g_SteamID[client], true); KvSetNum(kv, "points", 0); PrintToChatAll("Новый игрок:{red} %N[=%s=] присоединился к игре с 0 поинтами.", client, g_SteamID[client]) } KvRewind(kv);
}
public Action:CMD_showmenu(client, args) { if (client > 0 && args < 1) ShowMyPanel(client); return Plugin_Handled; }
public player_death(Handle:event, const String:name[], bool:dontBroadcast) { new killer = GetClientOfUserId(GetEventInt(event, "attacker")); if (killer < 1 || IsFakeClient(killer)) return;
new victim = GetClientOfUserId(GetEventInt(event, "userid")); if (GetClientTeam(killer) == GetClientTeam(victim)) return;
points[killer]++; PrintToChatAll("Игрок:{red} %N получил поинт.Теперь количество его поинтов: %d.", killer, points[killer])
}
ShowMyPanel(client) { new Handle:menu_panel = CreatePanel(); SetPanelTitle(menu_panel, "Покупка:\n \n"); DrawPanelItem(menu_panel, "Помповый дробовик"); DrawPanelItem(menu_panel, "Граната"); DrawPanelItem(menu_panel, "Молотов"); DrawPanelItem(menu_panel, "Охотничье ружьё"); DrawPanelItem(menu_panel, "Автомат \n \n"); DrawPanelItem(menu_panel, "Выход"); SendPanelToClient(menu_panel, client, Select_Panel, 0); CloseHandle(menu_panel); }
public Select_Panel(Handle:menu_panel, MenuAction:action, client, menu_option) { if (action == MenuAction_Select) { new flags1; flags1 = GetCommandFlags("give"); SetCommandFlags("give", flags1 & ~FCVAR_CHEAT); switch (menu_option) { case 1: { FakeClientCommand(client, "give pumpshotgun"); } case 2: { FakeClientCommand(client, "give pipe_bomb"); } case 3: { FakeClientCommand(client, "give molotov"); } case 4: { FakeClientCommand(client, "give hunting_rifle"); } case 5: { FakeClientCommand(client, "give rifle"); } } } }
public OnMapEnd() { SaveStats(); }
public OnPluginEnd() { SaveStats(); }
public OnClientDisconnect(client) { GetClientAuthString(client, g_SteamID[client], 30); KvJumpToKey(kv, g_SteamID[client], true); KvSetNum(kv, "points", points[client]); KvRewind(kv); SaveStats()
}
SaveStats() { KeyValuesToFile(kv, "stats.txt"); }
НО! Одна проблема: при смене карты поинты сбрасываются чтоли, а при выключении сервера stats.txt становится пустым. В чём проблема?
Добавлено (02.01.2014, 15:38:16) --------------------------------------------- Ага я выяснил что если скопировать файл и перед запуском серва переименовать в нужный то счёт не собьётся но когда зайдёт игрок и убьёт кого нибудь ему напишет что у него 1 поинт хотя в файле было 3 (
Добавлено (02.01.2014, 17:36:10) --------------------------------------------- Понял в чём проблема: когда случайный игрок зашёл на сервер было написано Игрок ник[=bbot=] присоединился к игре с 0 поинтами то есть его не смогло инициализировать...и как быть?
Добавлено (02.01.2014, 18:57:53) --------------------------------------------- Ага вот как сделал:
Код #include <sourcemod> #include <sdktools>
#define PLUGIN_VERSION "0.1"
new String:points[MAXPLAYERS+1]; new Handle:kv; new String:g_SteamID[MAXPLAYERS+1];
public Plugin:myinfo = {
name = "Special Modification", author = "IIpo100 Hy6", description = "Make specmodifications for server", version = PLUGIN_VERSION, url = ""
}
public OnPluginStart() { RegConsoleCmd("sm_bm_menu",CMD_showmenu);
RegConsoleCmd("sm_bm_points",CMD_showpoints);
kv = CreateKeyValues("wS_Group");
FileToKeyValues(kv, "stats.txt");
HookEvent("player_death", player_death); HookEvent("player_spawn", player_spawn); HookEvent("server_shutdown", server_shutdown); }
public Action: player_spawn(Handle:event, const String:name[], bool:dontBroadcast) { new client = GetClientOfUserId(GetEventInt(event, "userid")); GetClientAuthString(client, g_SteamID[client], 30); if (KvJumpToKey(kv, g_SteamID[client], false)) { points[client] = KvGetNum(kv, "points"); PrintToChatAll("Игрок: %N[=%s=] присоединился к игре с %d поинтами.", client, g_SteamID[client], points[client]); } else { points[client] = 0; KvJumpToKey(kv, g_SteamID[client], true); KvSetNum(kv, "points", 0); PrintToChatAll("Новый игрок: %N[=%s=] присоединился к игре.", client, g_SteamID[client]); } KvRewind(kv);
}
public Action:CMD_showmenu(client, args) { if (client > 0 && args < 1) ShowMyPanel(client); return Plugin_Handled; }
public Action:CMD_showpoints(client, args) { if (client > 0 && args < 1) PrintToChat(client,"У вас %d поинтов.", points[client]); return Plugin_Handled; }
public player_death(Handle:event, const String:name[], bool:dontBroadcast) {
new killer = GetClientOfUserId(GetEventInt(event, "attacker")); if (killer < 1 || IsFakeClient(killer)) return;
new victim = GetClientOfUserId(GetEventInt(event, "userid")); if (GetClientTeam(killer) == GetClientTeam(victim)) return;
points[killer]++; PrintToChatAll("Игрок: %N получил поинт.Теперь количество его поинтов: %d.", killer, points[killer]); }
ShowMyPanel(client) { new Handle:menu_panel = CreatePanel(); SetPanelTitle(menu_panel, "Покупка:\n \n"); DrawPanelItem(menu_panel, "Помповый дробовик"); DrawPanelItem(menu_panel, "Граната"); DrawPanelItem(menu_panel, "Молотов"); DrawPanelItem(menu_panel, "Охотничье ружьё"); DrawPanelItem(menu_panel, "Автомат \n \n"); DrawPanelItem(menu_panel, "Выход"); SendPanelToClient(menu_panel, client, Select_Panel, 0); CloseHandle(menu_panel); }
public Select_Panel(Handle:menu_panel, MenuAction:action, client, menu_option) { if (action == MenuAction_Select) { new flags1; flags1 = GetCommandFlags("give"); SetCommandFlags("give", flags1 & ~FCVAR_CHEAT); switch (menu_option) { case 1: { FakeClientCommand(client, "give pumpshotgun"); } case 2: { FakeClientCommand(client, "give pipe_bomb"); } case 3: { FakeClientCommand(client, "give molotov"); } case 4: { FakeClientCommand(client, "give hunting_rifle"); } case 5: { FakeClientCommand(client, "give rifle"); } } } }
public OnMapEnd() { SaveStats(); }
public OnPluginEnd() { SaveStats(); }
public Action: server_shutdown(Handle:event, const String:name[], bool:dontBroadcast) { CloseHandle(kv); }
public OnClientDisconnect(client) { GetClientAuthString(client, g_SteamID[client], 30); KvJumpToKey(kv, g_SteamID[client], true); KvSetNum(kv, "points", points[client]); KvRewind(kv); SaveStats();
}
SaveStats() { KeyValuesToFile(kv, "stats.txt"); } но осталась одна проблема: при смене карты и перезаходе игрока всё нормально, но при выключении сервера файл stats.txt становится пустым (
Добавлено (03.01.2014, 09:38:07) --------------------------------------------- Как говорится сам спросил сам ответил) Переделал сохранение файла в cfg/ и погуглил была тема про баны которые очищаются после выключения сервера:
Цитата Everytime when server shutdown, "memory" is cleared, all bans disappear. writeid & writeip commands save all current permanent bans from server "memory" to config files banned_user.cfg & banned_ip.cfg If you use these commands first when launch server, it will wipe out ban files B E C A U S E there are no bans in server "memory" ! So always, execute config files first, fill "memory" with bans, before write them back. Код // Right ORDER!!! exec banned_user.cfg exec banned_ip.cfg writeid writeip
то есть всё хранится в памяти сервера а после выключения очищается. Чтобы сохранить нужно добавить exec файл. Я дописал в server.cfg: exec stats.txt и теперь всё в порядке ) тема закрыта!
Сообщение отредактировал IIPO100_HY6 - Пятница, 03.01.2014, 09:38:52 |
|
| |