←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

[ROZWIĄZANE] Możliwość kupna rzeczy w skle...

Zablokowany

  • +
  • -
Fajled - zdjęcie Fajled 13.09.2012

Witam.

Mam pytanie - jak zrobić, aby możliwość kupna jakiejś rzeczy w sklepiku była tylko raz na mapę ?

Tutaj podaje szkielet przykładowego VIPa (skopiowałem z któregoś tematu od Nastyka :))

#include <amxmodx>
#include <amxmisc>
#include <fun>
#include <cstrike>
#define plugin "Sklep VIP"
#define autor "Na 5tyk"
#define wersja "1.0"
#define FLAGA ADMIN_LEVEL_H
public plugin_init() {
register_plugin(plugin, autor, wersja);
register_clcmd("say /sklep", "Menu");
}
public Menu(id)
{
if(get_user_flags(id) && FLAGA)
{
  new menu = menu_create("Sklep VIPa", "Menu_Handle");
  menu_additem(menu, "Mniejsza grawitacja [Koszt: 4000$]");
}
else
{
  client_print(id, print_chat, "Nie masz dostepu do menu");
 
}
}
public Menu_Handle(id, menu, item)
{
new kasa = cs_get_user_money(id)
switch(item)
{
  case 0:
  {
   if(kasa < 4000)
   {
    client_print(id, print_chat, "Nie masz wystarczajaco kasy!");
   }
   else
   {
    cs_set_user_money(id, kasa - 4000);
    set_user_gravity(id, 0.85);
   }
  }
}
}

Proszę o wskazanie jak zrobić to co opisałem na górze :)
Odpowiedz

  • +
  • -
K!113r - zdjęcie K!113r 13.09.2012


#include <amxmodx>
#include <amxmisc>
#include <fun>
#include <cstrike>
#define plugin "Sklep VIP"
#define autor "Na 5tyk"
#define wersja "1.0"
#define FLAGA ADMIN_LEVEL_H

new bool:sklep[33];

public plugin_init() {
register_plugin(plugin, autor, wersja);
register_clcmd("say /sklep", "Menu");
}
public client_disconnect(id)
sklep[id] = false
public Menu(id)
{
if((get_user_flags(id) & FLAGA) && !sklep[id])// poprawiłem tą flage, zamiast && powinno być &
{
new menu = menu_create("Sklep VIPa", "Menu_Handle");
menu_additem(menu, "Mniejsza grawitacja [Koszt: 4000$]");
menu_display(id, menu)
sklep[id] = true;
}
else
{
client_print(id, print_chat, "Nie masz dostepu do menu");

}
}
public Menu_Handle(id, menu, item)
{
new kasa = cs_get_user_money(id)
switch(item)
{
case 0:
{
if(kasa < 4000)
{
client_print(id, print_chat, "Nie masz wystarczajaco kasy!");
}
else
{
cs_set_user_money(id, kasa - 4000);
set_user_gravity(id, 0.85);
}
}
}
}

powinno działać
Odpowiedz

  • +
  • -
Droso - zdjęcie Droso 13.09.2012

Możesz to zrobić zmienna bool 33 elementową.
Przy connect'ie ustawiasz na false przy disconnectie tez.
I gdy ktos uzyje tej komendy to ustawia zmienna bool na true, i potem sprawdzasz if'em czy bool jest true jesli tak to return PLUGIN_HANDLED + kod powinien wyglądać tak [blokada dla gracza bez vipa], ale ma to wade, gracz zrobi reconnecta i moze to zrobic jeszcze raz. Mozesz to zrobic tez na ip [zapisujesz ip do tablicy i potem sprawdzasz], lub jakis zapis na mape, ale trzeba sie troszke pobawic ;)

#include <amxmodx>
#include <amxmisc>
#include <fun>
#include <cstrike>
#define plugin "Sklep VIP"
#define autor "Na 5tyk"
#define wersja "1.0"
#define FLAGA ADMIN_LEVEL_H

new bool:sklep[33];

public plugin_init() {
        register_plugin(plugin, autor, wersja);
        register_clcmd("say /sklep", "Menu");
}
public client_disconnect(id)
        sklep[id] = false
public Menu(id)
{
        if((get_user_flags(id) & FLAGA) && !sklep[id])// poprawiłem tą flage, zamiast && powinno być &
        {
                new menu = menu_create("Sklep VIPa", "Menu_Handle");
                menu_additem(menu, "Mniejsza grawitacja [Koszt: 4000$]");
                menu_display(id, menu)
                sklep[id] = true;
        }
        else
        {
                client_print(id, print_chat, "Nie masz dostepu do menu");
                return PLUGIN_HANDLED;
        }

       /* Przyklad */
        if(xxxx[id]){
            client_print(id, print_chat, "Raz na mape.");

        return PLUGIN_HANDLED
}
return PLUGIN_CONTINUE;
}
public Menu_Handle(id, menu, item)
{
        new kasa = cs_get_user_money(id)
        switch(item)
        {
        case 0:
                {
                        if(kasa < 4000)
                        {
                                client_print(id, print_chat, "Nie masz wystarczajaco kasy!");
                        }
                        else
                        {
                                cs_set_user_money(id, kasa - 4000);
                                set_user_gravity(id, 0.85);
                        }
                }
        }
}
Odpowiedz

  • +
  • -
Fajled - zdjęcie Fajled 13.09.2012

Ale co ty tutaj zmieniłeś ? Dodałeś zmienną i zrobiłeś, że ona się "uruchamia" podczas włączania menu. Nie widzę nigdzie blokady kupna tej jednej rzeczy.

@Edit:
Pisałem do Killera, zaraz zobaczę kod Torrenta :)
Użytkownik Fajled edytował ten post 13.09.2012 18:20
Odpowiedz

  • +
  • -
K!113r - zdjęcie K!113r 13.09.2012


if((get_user_flags(id) & FLAGA) && !sklep[id])// poprawiłem tą flage, zamiast && powinno być &

Jeżeli element tablicy sklep dla danego gracza jest false to może użyć sklepu, jeżeli true to nie może...
Odpowiedz

  • +
  • -
Fajled - zdjęcie Fajled 13.09.2012

Killer, ja nie miałem na myśli uniemożliwienia graczowi używania sklepu, tylko jednej konkretnej rzeczy ze sklepu - w tym wypadku tylko tej grawitacji.
Odpowiedz

  • +
  • -
K!113r - zdjęcie K!113r 13.09.2012


#include <amxmodx>
#include <amxmisc>
#include <fun>
#include <cstrike>
#define plugin "Sklep VIP"
#define autor "Na 5tyk"
#define wersja "1.0"
#define FLAGA ADMIN_LEVEL_H

new bool: sklep[4][33];

public plugin_init() {
register_plugin(plugin, autor, wersja);
register_clcmd("say /sklep", "Menu");
}
public client_disconnect(id)
for(new i;i<(sizeof(sklep)+1);i++)
{
sklep[i][id] = false
}
public Menu(id)
{
if(get_user_flags(id) & FLAGA)
{
new menu = menu_create("Sklep VIPa", "Menu_Handle");
menu_additem(menu, "Mniejsza grawitacja [Koszt: 4000$]");
menu_additem(menu, "tak dla [Koszt: 4000$]");
menu_additem(menu, "przykladu [Koszt: 4000$]");
menu_additem(menu, "dodam [Koszt: 4000$]");
menu_display(id, menu);

}
else
{
client_print(id, print_chat, "Nie masz dostepu do menu");

}
}
public Menu_Handle(id, menu, item)
{
new kasa = cs_get_user_money(id)
switch(item)
{
case 0:
{
if(!sklep[item][id])
{
sklep[item][id] = true;
if(kasa < 4000)
{
client_print(id, print_chat, "Nie masz wystarczajaco kasy!");
}
else
{
cs_set_user_money(id, kasa - 4000);
set_user_gravity(id, 0.85);
}
}
else
client_print(id, print_chat, "Uzyles juz tego elementu sklepu.")
}
case 1:
{
if(!sklep[item][id])
{
sklep[item][id] = true;
if(kasa < 4000)
{
client_print(id, print_chat, "Nie masz wystarczajaco kasy!");
}
else
{
cs_set_user_money(id, kasa - 4000);
set_user_gravity(id, 0.85);
}
}
else
client_print(id, print_chat, "Uzyles juz tego elementu sklepu.")
}
case 2:
{
if(!sklep[item][id])
{
sklep[item][id] = true;
if(kasa < 4000)
{
client_print(id, print_chat, "Nie masz wystarczajaco kasy!");
}
else
{
cs_set_user_money(id, kasa - 4000);
set_user_gravity(id, 0.85);
}
}
else
client_print(id, print_chat, "Uzyles juz tego elementu sklepu.")
}
case 3:
{
if(!sklep[item][id])
{
sklep[item][id] = true;
if(kasa < 4000)
{
client_print(id, print_chat, "Nie masz wystarczajaco kasy!");
}
else
{
cs_set_user_money(id, kasa - 4000);
set_user_gravity(id, 0.85);
}
}
else
client_print(id, print_chat, "Uzyles juz tego elementu sklepu.")
}
}
}

w tablicy sklep, pierwszy wymiar to liczba elementów sklepu, czyli podajesz tam ile jest additemów :D, a w switch'u dodajesz według zworu, powinno działać :P
Odpowiedz

  • +
  • -
Fajled - zdjęcie Fajled 14.09.2012

Dobra, oto mi chodziło, sprawdzę kod później :)
Odpowiedz

Gość_21977_* 16.10.2012

Wiadomość wygenerowana automatycznie


Ten temat został zamknięty przez moderatora.

Powód: Pomoc udzielona

Jeśli się z tym nie zgadzasz, Dołączona grafika raportuj ten post, a moderator lub administrator rozpatrzy go ponownie.


Z pozdrowieniami,
Zespół AMXX.PL
Odpowiedz
Zablokowany