Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie

[ROZWIĄZANE] użycie callfunc


  • Zamknięty Temat jest zamknięty
8 odpowiedzi w tym temacie

#1 Jak się nazwać

    Wszechmogący

  • Power User

Reputacja: 169
Profesjonalista

  • Postów:617
  • Imię:a
  • Lokalizacja:a
Offline

Napisano 26.01.2012 14:26

Siema mam pytanie dotyczące callfunc tzn chodzi czy dobrze rozumuję:
np:

callfunc_begin("ZapiszDane", "ZapisSql.amxx")
callfunc_push_int(misja[id])
callfunc_push_int(postep[id])
callfunc_push_int(done[id])
callfunc_end()

czyli funkcja w pluginie ZapisSql ma wyglądać tak?

public ZapiszDane(misja, postep, done)
{
}


oraz czy w callfuncbegin do nazwy pluginu dodać .amxx?
  • +
  • -
  • 0
Pisze na zamówienie statystyki pod nvault. GG: 15600964

#2 DarkGL

    Nie oddam ciasteczka !

  • Administrator

Reputacja: 6 555
Godlike

  • Postów:11 981
  • GG:
  • Steam:steam
  • Imię:Rafał
  • Lokalizacja:Warszawa
Offline

Napisano 26.01.2012 14:34

czyli funkcja w pluginie ZapisSql ma wyglądać tak?

tak

oraz czy w callfuncbegin do nazwy pluginu dodać .amxx?

tak
  • +
  • -
  • 1

#3 MarWit

    The Chosen One

  • Przyjaciel

Reputacja: 843
Czempion

  • Postów:1 485
  • GG:
  • Steam:steam
  • Imię:Marcin
  • Lokalizacja:Bystrzyca
Offline

Napisano 26.01.2012 14:36

np:


callfunc_begin("ZapiszDane", "ZapisSql.amxx")
callfunc_push_int(misja[id])
callfunc_push_int(postep[id])
callfunc_push_int(done[id])
callfunc_end()

czyli funkcja w pluginie ZapisSql ma wyglądać tak?

public ZapiszDane(misja, postep, done)
{
}


Powinno być dobrze, chociaz ja bym zrobił to tak by plugin sie nie wysypał:


if(callfunc_begin("ZapiszDane", "ZapisSql.amxx") < 0)
return -1;

callfunc_push_int(misja[id])
callfunc_push_int(postep[id])
callfunc_push_int(done[id])
callfunc_end()


oraz czy w callfuncbegin do nazwy pluginu dodać .amxx?


Tak
  • +
  • -
  • 1

marwit-0.png


#4 Jak się nazwać

    Wszechmogący

  • Autor tematu
  • Power User

Reputacja: 169
Profesjonalista

  • Postów:617
  • Imię:a
  • Lokalizacja:a
Offline

Napisano 26.01.2012 14:44

ok dzięki. Ale teraz pytanie jak z wczytywaniem danych. tzn jak przypisać te dane do zmiennych z innego pluginu chodzi mi o takie coś że np kod zapisu dodaje te rekordy do sqlite a jak później je wyciągnąć (dodam że natywy nie wchodzą w grę, próbowałem też zwracać natywem z głównego pluginu uchwyt bazy danych ale nie działało)
tak wyglądał ten natyw

public _sql_get_handle()
    return _:g_SqlTuple

tak więc chodzi o takie coś mniej więcej

callfunc_begin("WczytajDane", "ZapisSql.amxx")
callfunc_push_int(misja[id])
callfunc_push_int(postep[id])
callfunc_push_int(done[id])
callfunc_end()


i do tych zmiennych przypisywałyby się wartości wczytane z sql
wczytywanie danych wygląda tak:

public WczytajMisje(id)
{
    new Data[1]
    Data[0] = id
    formatex(gQuery, charsmax(gQuery), "SELECT * FROM `CodMisje` WHERE `nick` = ^"%s^"", nazwa_gracza[id])
    SQL_ThreadQuery(gTuple, "WczytajMisjeHandler", gQuery, Data)
}

public WczytajMisjeHandler(FailState,Handle:Query,Error[],Errcode,Data[],DataSize)
{
    if(FailState == TQUERY_CONNECT_FAILED)
    {
        log_amx("Load - Could not connect to SQL database.  [%d] %s", Errcode, Error)
    }
    else if(FailState == TQUERY_QUERY_FAILED)
    {
        log_amx("Load Query failed. [%d] %s", Errcode, Error)
    }
    
    new id = Data[0]
    
    if(SQL_NumResults(Query) < 1)
    {
        formatex(gQuery, charsmax(gQuery), "INSERT INTO `CodMisje` VALUES (^"%s^")", nazwa_gracza[id])
        SQL_ThreadQuery(gTuple, "QueryHandleStandard", gQuery)
    }
    else
    {
        zadanie_gracza[id]                = SQL_ReadResult(Query, 1)
        postep[id][zadanie_gracza[id]]    = SQL_ReadResult(Query, 2)
        done[id]                        = SQL_ReadResult(Query, 3)
    }
}

  • +
  • -
  • 0
Pisze na zamówienie statystyki pod nvault. GG: 15600964

#5 MarWit

    The Chosen One

  • Przyjaciel

Reputacja: 843
Czempion

  • Postów:1 485
  • GG:
  • Steam:steam
  • Imię:Marcin
  • Lokalizacja:Bystrzyca
Offline

Napisano 26.01.2012 14:48

Int - callfunc_push_intrf
Float - callfunc_push_floatrf
String - callfunc_push_intrf z drugim argumentem ustawionym na true
Tablica - callfunc_push_array z trzecim argumentem ustawionym na true
callfunc_end - zwraca return funkcji
  • +
  • -
  • 1

marwit-0.png


#6 Jak się nazwać

    Wszechmogący

  • Autor tematu
  • Power User

Reputacja: 169
Profesjonalista

  • Postów:617
  • Imię:a
  • Lokalizacja:a
Offline

Napisano 26.01.2012 15:00

ok. zobaczę co mi wyjdzie jak co to edytuję posta@@ Ok next pytanie w sumie chcę się upewnić że jeżeli funkcja zwróci 0 to wywoła się task
if(!callfunc_end())        set_task(1.0, "WczytajMisje")


ok tak to ma wyglądać?
1 plugin

public WczytajMisje(id)
{
    callfunc_begin("WczytajMisje", "QTM_CodMod.amxx")
    callfunc_push_int(id)
    callfunc_push_intrf(zadanie_gracza[id])
    callfunc_push_intrf(postep[id][zadanie_gracza[id]])
    callfunc_push_intrf(done[id])
    if(!callfunc_end())
        set_task(1.0, "WczytajMisje")
}

2 plugin


public WczytajMisje(id, misja, postep, done)
{
    if(!zaladowal) return 0
    misja = wczytana_misja[id]
    postep = wczytany_postep[id]
    done = wczytany_done[id]
    return 1
}

Użytkownik Jak się nazwać edytował ten post 26.01.2012 15:01

  • +
  • -
  • 0
Pisze na zamówienie statystyki pod nvault. GG: 15600964

#7 MarWit

    The Chosen One

  • Przyjaciel

Reputacja: 843
Czempion

  • Postów:1 485
  • GG:
  • Steam:steam
  • Imię:Marcin
  • Lokalizacja:Bystrzyca
Offline

Napisano 26.01.2012 15:06

Tak
  • +
  • -
  • 1

marwit-0.png


#8 Jak się nazwać

    Wszechmogący

  • Autor tematu
  • Power User

Reputacja: 169
Profesjonalista

  • Postów:617
  • Imię:a
  • Lokalizacja:a
Offline

Napisano 26.01.2012 15:19

Ok do zamknięcia jednak wolę kombinować z zwracaniem tuple natyvem (mniej kombinowania niż tu ;P)
  • +
  • -
  • 0
Pisze na zamówienie statystyki pod nvault. GG: 15600964

#9 MarWit

    The Chosen One

  • Przyjaciel

Reputacja: 843
Czempion

  • Postów:1 485
  • GG:
  • Steam:steam
  • Imię:Marcin
  • Lokalizacja:Bystrzyca
Offline

Napisano 26.01.2012 15:21

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
  • +
  • -
  • 0

marwit-0.png





Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych