Offline |
|
|
Csatlakozott: 2012.10.18. 15:58 Hozzászólások: 2486
Megköszönt másnak: 28 alkalommal Megköszönték neki: 132 alkalommal
|
Ü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
_________________ www.akosvagyok.hu
|
|