←  Pluginy

AMXX.pl: Support AMX Mod X i SourceMod

»

[Nvault] Nie zapisuje/odczytuje danych z p...

  • +
  • -
AmD - zdjęcie AmD 30.09.2010

Witam!

mam Problem z Zapisem/Odczytem Pliku vault...
Robiąc Xp Moda coś zepsułem i nie zapisuje mnie danych...

Oto mój Zapis, odczyt oraz stock...


public SaveXp(id) {

new vaultkey[64], vaultdata[256];
new name[64];

if(!is_user_steam(id)){
get_user_name(id,name,charsmax(name));
}
else
{
get_user_authid(id,name,charsmax(name));
}


format(vaultkey, 63, "%s-mod", name);
format(vaultdata, 255, "%i#%i#%i#%i#%i#", PlayerXP[id], PlayerLevel[id],SkillPoints[id], PtkGraw[id], PtkSpeed[id]);
nvault_set(g_Vault, vaultkey, vaultdata);
return PLUGIN_CONTINUE;
}

public LoadXp(id) {

new vaultkey[64], vaultdata[256];

new name[64];
if(!is_user_steam(id)){
get_user_name(id,name,charsmax(name));
}
else
{
get_user_authid(id,name,charsmax(name));
}

format(vaultkey, 63, "%s-mod", name);
format(vaultdata, 255, "%i#%i#%i#%i#%i#", PlayerXP[id], PlayerLevel[id],SkillPoints[id], PtkGraw[id], PtkSpeed[id]);
nvault_get(g_Vault, vaultkey, vaultdata,255);

replace_all(vaultdata, 255, "#", " ");

new playerxp[32], playerlevel[32], skillpoints[32], ptkgraw[32], ptkspeed[32];

parse(vaultdata, playerxp, 31, playerlevel, 31, skillpoints, 31, ptkgraw, 31, ptkspeed, 32);

PlayerXP[id] = str_to_num(playerxp);
PlayerLevel[id] = str_to_num(playerlevel);
SkillPoints[id] = str_to_num(skillpoints);
PtkGraw[id] = str_to_num(ptkgraw);
PtkSpeed[id] = str_to_num(ptkspeed);
return PLUGIN_CONTINUE;
}

Stock:

stock bool: is_user_steam(id)
{
static pcv_dp_r_id_provider;
pcv_dp_r_id_provider = get_cvar_pointer("dp_r_id_provider");
server_cmd("dp_clientinfo %d", id);
server_exec();

static uClient;
uClient = get_pcvar_num(pcv_dp_r_id_provider);

if ( uClient == 2)
return true;

return false;
}

Co tu jest źle?

Nie wiem czy to wina że sprawdzam to na lanie lub dla tego że na NS, a może po prostu coś zrąbałem nie wiem :) [nie sprawdzam na steam bo zanim on się włączy to zdążę 3 razy sprawdzić, nie testuje na serwerach bo mam tylko 1 i nie chce by gracze chwilowo wiedzieli że robię takie coś jak XP mod.]

Pozdrawiam ! :)
Użytkownik AmD edytował ten post 30.09.2010 11:45
Odpowiedz

  • +
  • -
kyku - zdjęcie kyku 30.09.2010

sa jakies bledy w logach? wszystko wydaje sie byc dobre (poza optymalnością :P )
Odpowiedz

  • +
  • -
AmD - zdjęcie AmD 30.09.2010

właśnie nic nie ma :/
ps. czemu nie optymalny? :)

// a i chyba pomyliłem działy... przyzwyczaiłem się że zazwyczaj tutaj pisze i tym razem też :)
Użytkownik AmD edytował ten post 30.09.2010 11:49
Odpowiedz

  • +
  • -
kyku - zdjęcie kyku 30.09.2010

moze blad zrobiles podczas wywolania tych funkcji ?
w client_putinserver (lub connect / aut..) powinno byc LoadXp(id);
i przy disconnect SaveXp(id);

Dodano 30 wrzesień 2010 - 12:52:
sprobuj tak
public SaveXp(id) {
        
        new vaultkey[35], vaultdata[256]; 
       
        
        if(!is_user_steam(id)){
                get_user_name(id,vaultkey,charsmax(vaultkey));
        }
        else
        {
                get_user_authid(id,vaultkey,charsmax(vaultkey));
        }
   
    
    format(vaultdata, 255, "%i %i %i %i %i", PlayerXP[id], PlayerLevel[id],SkillPoints[id], PtkGraw[id], PtkSpeed[id]); 
    nvault_set(g_Vault, vaultkey, vaultdata); 
    return PLUGIN_CONTINUE; 
}

public LoadXp(id) {
        
        new vaultkey[35], vaultdata[256]; 

        if(!is_user_steam(id)){
                get_user_name(id,vaultkey,charsmax(vaultkey));
        }
        else
        {
                get_user_authid(id,vaultkey,charsmax(vaultkey));
        }
   
    nvault_get(g_Vault, vaultkey, vaultdata,255); 

    new playerxp[32], playerlevel[32], skillpoints[32], ptkgraw[32], ptkspeed[32];
    parse(vaultdata, playerxp, 31, playerlevel, 31, skillpoints, 31, ptkgraw, 31, ptkspeed, 31); 
    
    PlayerXP[id] = str_to_num(playerxp); 
    PlayerLevel[id] = str_to_num(playerlevel); 
    SkillPoints[id] = str_to_num(skillpoints);
    PtkGraw[id] = str_to_num(ptkgraw);
    PtkSpeed[id] = str_to_num(ptkspeed);
    return PLUGIN_CONTINUE; 
}
Odpowiedz

  • +
  • -
AmD - zdjęcie AmD 30.09.2010

jest :) problem wystąpił gdy chciałem zrobić zapis na Nick albo tak jak teraz sid/nick

@edit
nie działa :/
Użytkownik AmD edytował ten post 30.09.2010 11:55
Odpowiedz

  • +
  • -
kyku - zdjęcie kyku 30.09.2010

tylko bedzie reset wszystkiego bo zmieniony jest vaultkey
Odpowiedz

  • +
  • -
AmD - zdjęcie AmD 30.09.2010

podczas wchodzenia na serwer i tak mam wszystko na 0...
Odpowiedz

  • +
  • -
kyku - zdjęcie kyku 30.09.2010

poza tym nie wiem czy az tablica 31 znakowa jest potrzebna podczas odczytu tych statystyk :P chyba ze punkty beda mialy tyle znakow
100000000000000000000000000000

Dodano 30 wrzesień 2010 - 12:58:
moze to
stock bool: is_user_steam(id)
{
        static pcv_dp_r_id_provider;
        pcv_dp_r_id_provider = get_cvar_pointer("dp_r_id_provider");
        server_cmd("dp_clientinfo %d", id);
        server_exec();
        
        static uClient;
        uClient = get_pcvar_num(pcv_dp_r_id_provider);
        
        if ( uClient == 2)
                return true;
        
        return false;
}
zamien na
stock bool: is_user_steam(id)
{
        new auth[34];get_user_authid(id, auth, 33);if(contain(auth, ":") != -1) return true;
        return false;
}
Odpowiedz

  • +
  • -
AmD - zdjęcie AmD 30.09.2010

o patrz działa!
dzięki :)
jeszcze sprawdzę coś bo jak dobrze pamiętam bo mi się te 2 ostatnie tablice nie wczytywały ale zaraz sprawdzę ;)

@edit ok działa wszystko pięknie :)
dziękuje!

@edit a jeszcze mam problem :)

zrobiłem 2 skille ale nie działają (w sumie to grawitacja zamiast się zmniejszać to się zwiększa...)
kod:

public logevent_start(id) {
new graw = get_user_gravity(id)
new speed = get_user_maxspeed(id)
for (new id=0; id < 32; id++) {
if(PtkGraw[id] > 0){
switch(PtkGraw[id]){
case 1: set_user_gravity(id, graw +0.1)
case 2: set_user_gravity(id, graw +0.12)
case 3: set_user_gravity(id, graw +0.14)
case 4: set_user_gravity(id, graw +0.16)
case 5: set_user_gravity(id, graw +0.17)
case 6: set_user_gravity(id, graw +0.18)
case 7: set_user_gravity(id, graw +0.20)
case 8: set_user_gravity(id, graw +0.27)
case 9: set_user_gravity(id, graw +0.29)
case 10: set_user_gravity(id, graw +0.35)
}
}
if(PtkSpeed[id] > 0){
switch(PtkSpeed[id]){
case 1: set_user_maxspeed(id, speed +0.1)
case 2: set_user_maxspeed(id, speed +0.12)
case 3: set_user_maxspeed(id, speed +0.14)
case 4: set_user_maxspeed(id, speed +0.15)
case 5: set_user_maxspeed(id, speed +0.16)
case 6: set_user_maxspeed(id, speed +0.17)
case 7: set_user_maxspeed(id, speed +0.18)
case 8: set_user_maxspeed(id, speed +0.20)
case 9: set_user_maxspeed(id, speed +0.29)
case 10: set_user_maxspeed(id, speed +0.35)
}
}
}
hud_prethink(id)
set_task(5.0, "logevent_start", id)
}

co tu jest źle?
(dałem taska ponieważ u mnie na serwie nie ma rund a jakoś muszę ustawić dla gracza skilla)

Dodano 01 październik 2010 - 11:54:
@odśwież.
Użytkownik AmD edytował ten post 30.09.2010 14:44
Odpowiedz

  • +
  • -
G[o]Q - zdjęcie G[o]Q 01.10.2010

case 1: set_user_gravity(id, graw +0.1)

case 1: set_user_gravity(id, graw -0.1)


wybierz sobie poprawna wersje
Odpowiedz

  • +
  • -
AmD - zdjęcie AmD 01.10.2010

próbowałem...

sprawdzałem także w ifie,
próbowałem zrobić coś takiego:

set_user_maxspeed( id, speed + ( PtkSpeed[ id ] * 10.0 ) );
[podobnie zrobiłem z grawitacją]
i tak:


set_user_maxspeed( id, PtkSpeed[id] * 0.3 + speed)


ale grawitacja nadal zamiast być mniejsza jest ciągle większa...


[uwaga to są tylko przykłady! floaty zostały inaczej zapisane!]
Odpowiedz

  • +
  • -
DarkGL - zdjęcie DarkGL 01.10.2010

pieknie to wymyśliłeś
1.
public logevent_start(id) {
na
public logevent_start() {

2.
new graw = get_user_gravity(id)
new speed = get_user_maxspeed(id)

wrzucamy do petli

3. new graw = get_user_gravity(id)
new speed = get_user_maxspeed(id)
na
new Float:graw = get_user_gravity(id)
new Float:speed = get_user_maxspeed(id)

set_task(5.0, "logevent_start", id)
wywal to
Odpowiedz

  • +
  • -
AmD - zdjęcie AmD 02.10.2010

pieknie to wymyśliłeś

dzięki :^D

i tak nie działa...


public logevent_start() {
for (new id=0; id < 32; id++) {
new Float:graw = get_user_gravity(id)
new Float:speed = get_user_maxspeed(id)

if(PtkGraw[id] > 0){
switch(PtkGraw[id]){
case 1: set_user_gravity(id, graw -0.1)
case 2: set_user_gravity(id, graw -0.12)
case 3: set_user_gravity(id, graw -0.14)
case 4: set_user_gravity(id, graw -0.16)
case 5: set_user_gravity(id, graw -0.17)
case 6: set_user_gravity(id, graw -0.18)
case 7: set_user_gravity(id, graw -0.20)
case 8: set_user_gravity(id, graw -0.27)
case 9: set_user_gravity(id, graw -0.29)
case 10: set_user_gravity(id, graw -0.35)
}
}
if(PtkSpeed[id] > 0){
switch(PtkSpeed[id]){
case 1: set_user_maxspeed(id, speed +0.1)
case 2: set_user_maxspeed(id, speed +0.12)
case 3: set_user_maxspeed(id, speed +0.14)
case 4: set_user_maxspeed(id, speed +0.15)
case 5: set_user_maxspeed(id, speed +0.16)
case 6: set_user_maxspeed(id, speed +0.17)
case 7: set_user_maxspeed(id, speed +0.18)
case 8: set_user_maxspeed(id, speed +0.20)
case 9: set_user_maxspeed(id, speed +0.29)
case 10: set_user_maxspeed(id, speed +0.35)
}
}
}
}

coś źle?
Odpowiedz

  • +
  • -
DarkGL - zdjęcie DarkGL 02.10.2010

for (new id=0; id < 32; id++)
na
for (new id=1; id < 32; id++)

jeżeli graw nie działą
to warunek
if(PtkGraw[id] > 0){

nie jest spełniony
a maxspeed nie zauważysz różnicy
bo standardowo na nozu jest 250.0 więc jak dodasz te np,. 0.35 nie zauważysz zęby biegł szybciej musisz dodać np 35.0
Odpowiedz

  • +
  • -
AmD - zdjęcie AmD 02.10.2010

ok grawitacja działa :)
speed dalej nie chodź dałem 35.0... (nadal 250.0 z cisnę na nożu...)
muszę tą funkcje wywołać podczas spawnu gracza (najlepiej) więc dałem:

RegisterHam( Ham_Spawn, "player" , "logevent_start" , 1 );

czy to będzie działało prawidłowo jeśli gracz będzie się spawnił ponownie dzięki pluginowi? (np. by nie miał podwójnej grawitacji)
Odpowiedz

  • +
  • -
DarkGL - zdjęcie DarkGL 02.10.2010

RegisterHam( Ham_Spawn, "player" , "spawned" , 1 );

public spawned(id) {
                new Float:graw = get_user_gravity(id)
                new Float:speed = get_user_maxspeed(id)
        
                if(PtkGraw[id] > 0){
                        switch(PtkGraw[id]){
                                case 1: set_user_gravity(id, graw -0.1)
                                case 2: set_user_gravity(id, graw -0.12)
                                case 3: set_user_gravity(id, graw -0.14)
                                case 4: set_user_gravity(id, graw -0.16)
                                case 5: set_user_gravity(id, graw -0.17)
                                case 6: set_user_gravity(id, graw -0.18)
                                case 7: set_user_gravity(id, graw -0.20)
                                case 8: set_user_gravity(id, graw -0.27)
                                case 9: set_user_gravity(id, graw -0.29)
                                case 10: set_user_gravity(id, graw -0.35)
                        }
                }
                if(PtkSpeed[id] > 0){
                        switch(PtkSpeed[id]){
                                case 1: set_user_maxspeed(id, speed +0.1)
                                case 2: set_user_maxspeed(id, speed +0.12)
                                case 3: set_user_maxspeed(id, speed +0.14)
                                case 4: set_user_maxspeed(id, speed +0.15)
                                case 5: set_user_maxspeed(id, speed +0.16)
                                case 6: set_user_maxspeed(id, speed +0.17)
                                case 7: set_user_maxspeed(id, speed +0.18)
                                case 8: set_user_maxspeed(id, speed +0.20)
                                case 9: set_user_maxspeed(id, speed +0.29)
                                case 10: set_user_maxspeed(id, speed +0.35)
                        }
        }
}

speed jest resetowany co zmianę broni czyli gdy zmienisz broń powraca do normal
Odpowiedz

  • +
  • -
AmD - zdjęcie AmD 02.10.2010

nadal to samo :/
Odpowiedz

  • +
  • -
DarkGL - zdjęcie DarkGL 02.10.2010

ja ci dałem łądniejszy kod to że speed się resetuje to musisz użyć eventu zmiany broni i w nim ustawiać
Odpowiedz

  • +
  • -
AmD - zdjęcie AmD 02.10.2010

znając życie chodzi o:

register_event("CurWeapon","Funkcja_Publiczna","be")

całego spawna nie mogę pod to podpiąć bo wtedy gravity = -X ( zamiast mieć mniejszą nie mamy wcale )
zrobiłem funkcje z samym skillem prędkości ale nadal to samo :/
Odpowiedz

  • +
  • -
DarkGL - zdjęcie DarkGL 02.10.2010

grrr w curweapon dajesz
new Float:speed = get_user_maxspeed(id)

if(PtkSpeed[id] > 0){
switch(PtkSpeed[id]){
case 1: set_user_maxspeed(id, speed +0.1)
case 2: set_user_maxspeed(id, speed +0.12)
case 3: set_user_maxspeed(id, speed +0.14)
case 4: set_user_maxspeed(id, speed +0.15)
case 5: set_user_maxspeed(id, speed +0.16)
case 6: set_user_maxspeed(id, speed +0.17)
case 7: set_user_maxspeed(id, speed +0.18)
case 8: set_user_maxspeed(id, speed +0.20)
case 9: set_user_maxspeed(id, speed +0.29)
case 10: set_user_maxspeed(id, speed +0.35)
}
}

a z spawned usuwasz to co ci podałem powyżej
Odpowiedz