Üdv, [profil]CrB[/profil] tutoriáljában bemutatott pontrendszerhez hasonlót fogunk irni sourcepawn-ban. Kezdjünk hozzá.
#include <sourcemod> //szükséges függvénykönyvtár new pont[64]; //egy tömb 64 elemmel, ugyanis 64 slotos lehet egy játékszerver szerver /* * Alapból 0 ponttal indul a player, későbbiekben egy mentés tutorial varhato ezzel kapcsolatban. */ public OnPluginStart() // Plugin kezdése { HookEvent("player_death", Event_PlayerDeath); // Halál event, pontokhoz kell. RegConsoleCmd("sm_bolt",dd,""); // Egy konzol parancs a bolt eléréséhez. }
Halál event:
public Event_PlayerDeath(Handle:event, const String:name[], bool:dontBroadcast) //Halál event kifejtése { new attacker = GetClientOfUserId(GetEventInt(event, "attacker")); //gyilkos lekérése pont[attacker] += 5; // öt pont hozzáadása a gyilkosnak. }
Bolt:
/* * * Menü készitésről már volt tutorialom, ajánlott elolvasni! */ public Action:dd(client, args) { new Handle:menu_handle = CreateMenu(Menu_CallBack); SetMenuTitle(menu_handle, "Szerver bolt!"); AddMenuItem(menu_handle, "func1", "200HP ( 30 pont )"); //példa menüpont AddMenuItem(menu_handle, "func2", "16000$ ( 20 pont )"); //példa menüpont SetMenuPagination(menu_handle, 7); SetMenuExitButton(menu_handle, true); DisplayMenu(menu_handle, client, 200); }
Menü kifejtése:
public Menu_CallBack(Handle:menu_handle, MenuAction:action, Client, Position) { if(action == MenuAction_Select) { decl String:Item[20]; GetMenuItem(menu_handle, Position, Item, sizeof(Item)); if(StrEqual(Item, "func1")) //első menüpont { if(pont[Client] >= 30) // ha van 30 pontja a Client-nek { PrintToChat(Client, "200HP-d lett!"); //Kiirás SetEntityHealth(Client, 200); //200hp megadása pont[Client] -= 30; //30 pont levétele. } else PrintToChat(Client, "Nincs elég pontod!"); //Ha nincs 30 pontja a Clientnek, illetve kiirás. } else if(StrEqual(Item, "func2")) //... { if(pont[Client] >= 20) //Ha van 20 pontja { PrintToChat(Client, "16000$-od lett!"); //kiirás SetEntProp(Client, Prop_Send, "m_iAccount", 16000); //16000$ megadása pont[Client] -= 20; //20 pont levétele. } else PrintToChat(Client, "Nincs elég pontod!"); //Ha nincs 20pontja a Clientnek, illetve kiirás. } } else if(action == MenuAction_End) { CloseHandle(menu_handle); } }
Egész plugin egybe:
/* HLmod.hu */ #include <sourcemod> new pont[64]; public OnPluginStart() { RegConsoleCmd("sm_bolt",dd,""); HookEvent("player_death", Event_PlayerDeath); } public Event_PlayerDeath(Handle:event, const String:name[], bool:dontBroadcast) { new attacker = GetClientOfUserId(GetEventInt(event, "attacker")); pont[attacker] += 5; } public Action:dd(client, args) { new Handle:menu_handle = CreateMenu(Menu_CallBack); SetMenuTitle(menu_handle, "Szerver bolt!"); AddMenuItem(menu_handle, "func1", "200HP ( 30 pont )"); AddMenuItem(menu_handle, "func2", "16000$ ( 20 pont )"); SetMenuPagination(menu_handle, 7); SetMenuExitButton(menu_handle, true); DisplayMenu(menu_handle, client, 200); } public Menu_CallBack(Handle:menu_handle, MenuAction:action, Client, Position) { if(action == MenuAction_Select) { decl String:Item[20]; GetMenuItem(menu_handle, Position, Item, sizeof(Item)); if(StrEqual(Item, "func1")) { if(pont[Client] >= 30) { PrintToChat(Client, "200HP-d lett!"); SetEntityHealth(Client, 200); pont[Client] -= 30; } else PrintToChat(Client, "Nincs elég pontod!"); } else if(StrEqual(Item, "func2")) //... { if(pont[Client] >= 20) { PrintToChat(Client, "16000$-od lett!"); SetEntProp(Client, Prop_Send, "m_iAccount", 16000); pont[Client] -= 20; } else PrintToChat(Client, "Nincs elég pontod!"); } } else if(action == MenuAction_End) { CloseHandle(menu_handle); } }
Remélem hasznotokra vált.
maxi.
Off Topic Changelog: - Egyenlőre nincs
|