←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

Zapisywanie messagemode

  • +
  • -
Blondyna - zdjęcie Blondyna 22.07.2013

Siemka :D

Stworzyłem menu + messagemode, wszystko działa lecz teraz chcę aby zablokować kolejny wybór z menu "Stworzenia bohatera" oraz zapisanie go.

 

"zablokować kolejny wybór z menu" - mam na myśli aby gracz mógł tylko raz stworzyć bohatera.

 

To kod:

/* Plugin generated by AMXX-Studio */

#include <amxmodx>
#include <amxmisc>
#include <colorchat>
#include <engine>

#define PLUGIN "New Plug-In"
#define VERSION "1.0"
#define AUTHOR "BO"

new menuChoice[33];

public plugin_init()
{
    register_plugin(PLUGIN, VERSION, AUTHOR)
    
    register_clcmd("say /menu", "mymenu");
    
    register_clcmd("nazwa_bohatera", "nazwa_bohatera");
}

public client_PreThink(id)
{
    new nazwa[64];
    
    if(is_user_alive(id))
    {
        set_hudmessage(255, 0, 0, 0.02, 0.20);
        ShowSyncHudMsg(id, CreateHudSyncObj(), "%s^nhaha", nazwa);
    }
    else
    {
        set_hudmessage(255, 0, 0, 0.02, 0.20);
        ShowSyncHudMsg(id, CreateHudSyncObj(), "Nie zyjesz!");
    }
    return true;

}

public mymenu(id)
{
    new MyMenu=menu_create("Jak sie przywitasz?","cbMyMenu");
    
    menu_additem(MyMenu,"\dStworz \rBohatera");
    menu_additem(MyMenu,"Czesc");//item=1
    
    menu_display(id, MyMenu,0);
    return PLUGIN_HANDLED;
}

public cbMyMenu(id, menu, item)
{
    switch(item)
    {
        case 0:
        {
            client_cmd(id, "messagemode nazwa_bohatera");
        }
        case 1:
        {
            client_cmd(id, "say Czesc");
        }
    }
    menu_destroy(menu);
    return PLUGIN_HANDLED;
}

public nazwa_bohatera(id)
{
    new nazwa[64];

    read_args(nazwa, charsmax(nazwa));

    remove_quotes(nazwa);

    switch(menuChoice[id])
    {

        case 0:
        {

            ColorChat(id, RED, "^x04[B-Mod]^x01 Gratuluje! Stworzyles swego ^x04 Bohatera^x01 o nazwie ^x03%s^x01!", nazwa);

        }
        case 1:
        {
            
                 ColorChat(id, RED, "^x04[B-Mod]^x01 Gratuluje!! Stworzyles swa ^x04Bohaterke^x01 o nazwie ^x03%s^x01!", nazwa);
        }
    }
}

Użytkownik Vesfper edytował ten post 22.07.2013 20:33
Odpowiedz

  • +
  • -
MarWit - zdjęcie MarWit 22.07.2013

Hmm...
Spoiler

Użytkownik MarWit edytował ten post 22.07.2013 22:43
Odpowiedz

  • +
  • -
Blondyna - zdjęcie Blondyna 23.07.2013

Dzięki działa, a jak zrobić gdy w hud gdy gracz nie stworzy pisało:

"Bohater: Brak" a jak już stworzy tego bohatera to "Bohater: Nazwa" ?

Odpowiedz

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

Zapisz sobie gdzieś co wpisał i to mu pokazuj?
Odpowiedz

  • +
  • -
Blondyna - zdjęcie Blondyna 23.07.2013

Właśnie mam problem z tym.

Odpowiedz

  • +
  • -
speedkill - zdjęcie speedkill 23.07.2013

gszCharacterName[id][0] ? gszCharacterName[id] : "Brak";
Odpowiedz

  • +
  • -
Blondyna - zdjęcie Blondyna 25.07.2013

a jak pobrać to co gracz wpisze, chodzi mi dokładnie nazwę bohatera.


Użytkownik Vesfper edytował ten post 25.07.2013 10:05
Odpowiedz

  • +
  • -
radim - zdjęcie radim 25.07.2013

Marwit Ci przecież podał kod.

Odpowiedz

  • +
  • -
Blondyna - zdjęcie Blondyna 25.07.2013

Ale jak daje w hud to nie działa.

Odpowiedz

  • +
  • -
radim - zdjęcie radim 25.07.2013

Pokaż jak to robisz.

Odpowiedz

  • +
  • -
Blondyna - zdjęcie Blondyna 26.07.2013

public client_PreThink(id)
{
    new nazwa[64];
    
    if(is_user_alive(id))
    {
        set_hudmessage(255, 0, 0, 0.02, 0.20);
        ShowSyncHudMsg(id, CreateHudSyncObj(), "Nazwa %s", gszCharacterName[id]);
    }
    else
    {
        set_hudmessage(255, 0, 0, 0.02, 0.20);
        ShowSyncHudMsg(id, CreateHudSyncObj(), "Nie zyjesz!");
    }
    return true;

}
Odpowiedz

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

public client_PreThink(id)
{
    new nazwa[64];
    
    if(is_user_alive(id))
    {
        set_hudmessage(255, 0, 0, 0.02, 0.20);
        ShowSyncHudMsg(id, CreateHudSyncObj(), "Nazwa %s", gszCharacterName[id][0] ? gszCharacterName[id] : "Brak");
    }
    else
    {
        set_hudmessage(255, 0, 0, 0.02, 0.20);
        ShowSyncHudMsg(id, CreateHudSyncObj(), "Nie zyjesz!");
    }
    return PLUGIN_CONTINUE;

}
Odpowiedz

  • +
  • -
Blondyna - zdjęcie Blondyna 26.07.2013

Dzięki działa lecz gdy nastąpi zmiana mapy znowu trzeba tworzyć bohatera, jak zrobić aby się zapisywało .?

Odpowiedz

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

Poczytaj sobie o zapisach nVault, MySQL, do pliku i inne, i wybierz najbardziej odpowiedni do twoich celów.

Odpowiedz

  • +
  • -
Blondyna - zdjęcie Blondyna 27.07.2013

Wybrałem zapis nVault lecz mam problem, daje przykład jaki był w poradniku :

public load_frags(id)
{
    new name[48]
    get_user_name(id,name,47)
    new vaultkey[64],vaultdata[128]
    formatex(vaultkey,63,"%s-fragi",name)
    
    if(nvault_get(plik_vault,vaultkey,vaultdata,127)) { // pobieramy dane
        new fragitemp[16], deadstemp[16], nametemp[48];
        parse(vaultdata, fragitemp, 15, deadstemp, 15, nametemp, 47) // wydobywamy z ciagu vaultdata nasze dane
        
        fragi[id]=str_to_num(fragitemp) // przypisujemy danym ich wartosci wczytane
        deads[id]=str_to_num(deadstemp)
        
        set_user_frags(id,fragi[id])
        cs_set_user_deaths ( id, deads[id] )
        copy(g_name[id], 47, nametemp);
    }
    
    return PLUGIN_CONTINUE
} 

public save_frags(id) {
    fragi[id]+=get_user_frags(id) // zwiekszamy liczbe fragow i deadow o stan bierzacy
    deads[id]+=get_user_deaths(id)
    
    new name[48]
    get_user_name(id,name,47)
    new vaultkey[64],vaultdata[128] // 2 zmienne na klucz i dane ktore bedziemy zapisywac
    formatex(vaultkey,63,"%s-fragi",name) //formatujemy klucz czyli nasz identyfikator dostepu najlepiej zeby roznil sie on 1 czlonem od pozostalych
    formatex(vaultdata,127,"%d %d ^"%s^"", fragi[id], deads[id], name) // formatujemy dane
    nvault_set(plik_vault,vaultkey,vaultdata) // zapisujemy dane "pod" danym kluczem w pliku
    
    return PLUGIN_CONTINUE
}

Lecz nie mam pojęcia jak przerobić go aby działał w mojej sytuacji.

Odpowiedz

  • +
  • -
Droso - zdjęcie Droso 27.07.2013

Możesz też użyć setinfo jak chcesz tylko nazwę bohatera zapamiętywać

 

set_user_info

oraz 

get_user_info

 

 

Odpowiedz

  • +
  • -
Blondyna - zdjęcie Blondyna 27.07.2013

Możesz też użyć setinfo jak chcesz tylko nazwę bohatera zapamiętywać

 

set_user_info

oraz 

get_user_info

A może napisać jak użyć tego .?

Odpowiedz

  • +
  • -
Blondyna - zdjęcie Blondyna 27.07.2013

Hubert ale ja bym wolał zapis nVault.

Odpowiedz

  • +
  • -
Blondyna - zdjęcie Blondyna 28.07.2013

Szukałem poradników i myślałem jak to zrobić, przypomniała mi się, że w diablo mod by stachu, został użyty zapis nazwy gildi,

Przerobiłem kod i wygląda on tak:

public ZapiszDane(id)
{
    new vaultkey[64],vaultdata[256];
    format(vaultkey,63,"%s-bohater", gszCharacterName[id]);
    nvault_set(g_vault,vaultkey,vaultdata);
}
 
public WczytajDane(id)
{
    new vaultkey[64],vaultdata[256];
    format(vaultkey,63,"%s-bohater", gszCharacterName[id]);
    nvault_get(g_vault,vaultkey,vaultdata,255);
 
    replace_all(vaultdata, 255, "#", " ");
}

A oryginalny:

kod

public zapis_gildia(id,mode)
{
    if(mode == 1){
        get_user_name(id,nazwa_zalozycial[id],32)
        ilosc_czlonkow[id]=1
        gildia_lvl[id]=1
    }    
    
    new vaultkey[64],vaultdata[256];
    format(vaultkey,63,"%s-GTB",nazwa_gildi[id]);
    format(vaultdata,255,"%i %i %i ^"%s^" %i %i %i %i %i %i %i %i",gildia_lvl[id],gildia_exp[id],ilosc_czlonkow[id],nazwa_zalozycial[id],g_dmg[id],g_def[id],g_hp[id],g_spid[id],g_pkt[id],g_kam[id],g_drop[id],g_woj[id])
    nvault_set(g_gildia,vaultkey,vaultdata);
}

public wczytaj_gildia(id)
{
    new vaultkey[64],vaultdata[256];
    format(vaultkey,63,"%s-GTB",nazwa_gildi[id]);
    nvault_get(g_gildia,vaultkey,vaultdata,255)
    
    new nz[32],gl[32],ge[32],ic[32],gd[32],gde[32],gh[32],gs[32],pkt[32],gh1[32],gs1[32],pkt1[32]
    
    parse(vaultdata, gl, 31, ge ,31, ic ,31, nz ,31, gd ,31, gde ,31, gh ,31, gs ,31, pkt ,31, gh1 ,31, gs1 ,31, pkt1 ,31)
    
    gildia_lvl[id] = str_to_num(gl);
    gildia_exp[id] = str_to_num(ge);
    ilosc_czlonkow[id] = str_to_num(ic);
    g_dmg[id] = str_to_num(gd);
    g_def[id] = str_to_num(gde);
    g_hp[id] = str_to_num(gh);
    g_spid[id] = str_to_num(gs);
    g_pkt[id] = str_to_num(pkt);
    g_kam[id] = str_to_num(gh1);
    g_drop[id] = str_to_num(gs1);
    g_woj[id] = str_to_num(pkt1);
    
    switch(g_spid[id]){
        case 20 :g_spid[id]=35
            case 40:g_spid[id]=70
            case 60:g_spid[id]=105
            case 80:g_spid[id]=140
        }
    copy(nazwa_zalozycial[id], 31, nz);
}

Lecz nie działa.

 

Odpowiedz

  • +
  • -
Blondyna - zdjęcie Blondyna 29.07.2013

ref

Odpowiedz