[SAMMELTHREAD] Kleine Scripting Fragen

Dein Problem konnte durch einen User gelöst werden? Bedank dich bei ihm indem du seinen Beitrag als Hilfreich markierst sowie einen Daumen oben dalässt
Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Nein, da arbeitest du ja über den Cache, und eine explizite Speicherung des Results ist nicht mehr notwendig.
    Vom Vorgehen:
    mysql_pquery(/*Query und Callback angeben*/);
    public deinCallback()
    {
    //Hier den Cache auslesen
    }


    Oder (nur bedingt nutzen)
    mysql_query(/*Query*/);
    //Hier direkt den Cache auslesen

  • Ich habs bis jetz so:



    [b]public[/b] OnQueryFinish(ThreadID, ExtraID) {
    [b]new[/b] rows;
    cache_get_row_count(rows);
    [b]switch[/b](ThreadID) {
    [b]case[/b] _SQL_LoadAllCars: {
    [b]if[/b](rows != 0) {
    [b]new[/b] lastid = 0,
    idx = 0;
    [b]while[/b](idx < rows) {
    }
    }
    }
    }
    [b]return[/b] 1;
    }


    will es so ungefähr machen:



    [b]public[/b] Dtdc_LoadAllCars(bool:spawn)
    {
    format(sql,sizeof(sql),"SELECT `Owner`, `SlotId` FROM `playercars` ORDER BY `id`");
    mysql_query_fix(sql);
    mysql_store_result();
    [b]new[/b] strFromFile2[200];
    [b]new[/b] rows = mysql_num_rows();
    [b]if[/b](rows != 0)
    {
    [b]#if[/b] [b]defined[/b] MYSQL_StrickenKid
    [b]new[/b] arrCoords[2][40];
    [b]while[/b] (mysql_fetch_row2(strFromFile2,","))
    {
    Dtdc_split(strFromFile2, arrCoords, ',');
    [b]new[/b] slot = strval(arrCoords[1]);
    [b]new[/b] Name[40];
    strmid(Name, arrCoords[0], 0, strlen(arrCoords[0]), 40);
    [b]new[/b] id = Dtdc_LoadVeh(Name,slot);
    [b]if[/b](id != -1 && spawn == true) {SetTimerEx("Dtdc_SpawnVeh",1000,0,"d",id);}
    }
    mysql_free_result();
    [b]#else[/b]
    [b]new[/b] arrCoords[3][40];
    [b]new[/b] lastid = 0;
    [b]new[/b] idx = 0;
    [b]while[/b] (idx < rows)
    {
    mysql_free_result();
    format(sql,sizeof(sql),"SELECT `Owner`, `SlotId`, `id` FROM `playercars` WHERE `id` > '%d' ORDER BY `id` LIMIT 1",lastid);
    mysql_query_fix(sql);
    mysql_store_result();
    mysql_fetch_row2(strFromFile2,",");
    Dtdc_split(strFromFile2, arrCoords, ',');
    [b]new[/b] slot = strval(arrCoords[1]);
    lastid = strval(arrCoords[2]);
    [b]new[/b] Name[40];
    strmid(Name, arrCoords[0], 0, strlen(arrCoords[0]), 40);
    [b]new[/b] id = Dtdc_LoadVeh(Name,slot);
    [b]if[/b](id != -1 && spawn == true) {SetTimerEx("Dtdc_SpawnVeh",1000,0,"d",id);}
    idx++;
    }
    [b]#endif[/b]
    }
    }

    Mit freundlichen Grüßen,


    Fabi.StaR :love::saint:


  • Hast du in deiner server.cfg maxnpc auch erhöht?


    Meine Frage:


    Wie lasse ich meinen Timer runterzählen anstatt hochzählen?



    forward UpdatePaintBallInfo();
    public UpdatePaintBallInfo()
    {
    static mi,se;
    if(paintballspieler < 1) //weniger als 1 Spieler
    {
    KillTimer(PaintBallEnde);
    timerstarted = false;
    RundeGestartet = false;
    mi = se = 0;
    }
    else if(paintballspieler > 0) //mehr als 1 Spieler
    {
    //PaintBallEnde = SetTimer("PaintballRundeVorbei", 15 * 60 * 1000, false);
    if(timerstarted == false)
    {
    PaintBallEnde = SetTimer("PaintballRundeVorbei", 5* 1000, false);
    }
    timerstarted = true;
    RundeGestartet = true;
    new tmp[11];
    if(++se == 60)
    {
    se = 0;
    mi++;
    }
    format(tmp,sizeof(tmp),"%02d:%02d",mi,se);
    for(new i=GetPlayerPoolSize(); i!=-1; i--)
    {
    if(!IsPlayerConnected(i) || IsPlayerNPC(i) || inRunde[i] == false) continue;
    TextDrawSetString(PBText2,tmp);
    }
    }
    return 1;
    }


    Mit freundlichen Grüßen
    JustMe.77 8)

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Send mal bitte dein Server log, da es ja geprintet wird und am besten alles was mit dem bot zu tun hat.

  • Hier die Log


    ----------
    Loaded log file: "server_log.txt".
    ----------
    SA-MP Dedicated Server
    ----------------------
    v0.3.7-R2, (C)2005-2015 SA-MP Team


    Server Plugins
    --------------
    Loading plugin: mysql
    >> plugin.mysql: R37 successfully loaded.
    Loaded.
    Loading plugin: streamer


    *** Streamer Plugin v2.7 by Incognito loaded ***
    Loaded.
    Loading plugin: sscanf


    ===============================
    sscanf plugin loaded.
    Version: 2.8.1
    (c) 2012 Alex "Y_Less" Cole
    ===============================
    Loaded.
    Loading plugin: MapAndreas
    Loaded.
    Loading plugin: crashdetect
    CrashDetect v4.13 is OK.
    Loaded.
    Loaded 5 plugins.


    Ban list
    --------
    Loaded: samp.ban


    Started server on port: 7777, with maxplayers: 500 lanmode is OFF.


    Filterscripts
    ---------------
    Loading filterscript 'ls_elevator.amx'...
    Loaded 1 filterscripts.
    [MYSQL]: Verbindung zur Datenbank hergestellt!
    Bot1
    Bot2
    Bot3
    Bot4
    Bot5
    Bot6
    Bot7
    Bot8
    Bot9
    Bot10

  • Code
    mi++;

    zu


    Code
    mi -= 1;


    Wenn ich nicht was übersehen habe ^^

  • Hier die Log
    ----------Loaded log file: "server_log.txt".----------SA-MP Dedicated Server----------------------v0.3.7-R2, (C)2005-2015 SA-MP TeamServer Plugins-------------- Loading plugin: mysql >> plugin.mysql: R37 successfully loaded. Loaded. Loading plugin: streamer*** Streamer Plugin v2.7 by Incognito loaded ***Loaded. Loading plugin: sscanf ===============================sscanf plugin loaded.Version: 2.8.1(c) 2012 Alex "Y_Less" Cole===============================Loaded. Loading plugin: MapAndreas Loaded. Loading plugin: crashdetect CrashDetect v4.13 is OK. Loaded. Loaded 5 plugins.Ban list-------- Loaded: samp.banStarted server on port: 7777, with maxplayers: 500 lanmode is OFF.Filterscripts--------------- Loading filterscript 'ls_elevator.amx'... Loaded 1 filterscripts.[MYSQL]: Verbindung zur Datenbank hergestellt!Bot1Bot2Bot3Bot4Bot5Bot6Bot7Bot8Bot9Bot10

    jetzt noch mal alles was mit dem bot zu tun hat, erstellen etc

  • Habe es jetzt mal so gemacht:
    Timer
    SetTimerEx("ConnectGehtEVTL", 700, 0, "i", 0);


    forward ConnectGehtEVTL(KeinSpielerSondernBot);
    public ConnectGehtEVTL(KeinSpielerSondernBot)
    {
    switch(KeinSpielerSondernBot)
    { case 0:
    {
    ConnectNPC("Bank1", "Bank1");print("Bot1");
    }
    case 1:
    {
    ConnectNPC("BankTante2", "BankTante2");print("Bot10");
    }
    }
    }
    return 1;
    }



    Der Timer ist unter OnGameModeInit

  • @N1co Nein, so wird das nicht funktionieren, hat sich aber sowieso erledigt, so funktionierts:



    forward UpdatePaintBallInfo();
    public UpdatePaintBallInfo()
    {
    if(paintballspieler < 1) //weniger als 1 Spieler
    {
    KillTimer(PaintBallEnde);
    timerstarted = false;
    RundeGestartet = false;
    //minutes = seconds = 0;
    roundTime = (15*60); // a.k.a 900sec / 15mins
    }
    else if(paintballspieler > 0) //mehr als 1 Spieler
    {
    //PaintBallEnde = SetTimer("PaintballRundeVorbei", 15 * 60 * 1000, false);
    if(timerstarted == false)
    {
    PaintBallEnde = SetTimer("PaintballRundeVorbei", 1* 60 * 1000, false);
    }
    timerstarted = true;
    RundeGestartet = true;



    new tmp[11];



    if (timerstarted)
    {
    roundTime --;



    new
    minutes = roundTime / 60,
    seconds = roundTime % 60
    ;

    format(tmp, sizeof(tmp), "%02d:%02d", minutes, seconds);
    }

    for(new i = GetPlayerPoolSize(); i != -1; i--)
    {
    if(!IsPlayerConnected(i) || IsPlayerNPC(i) || inRunde[i] == false) continue;
    TextDrawSetString(PBText2,tmp);
    }
    }
    return 1;
    }


    Mit freundlichen Grüßen
    JustMe.77 8)

  • @N1co Nein, so wird das nicht funktionieren, hat sich aber sowieso erledigt, so funktionierts:


    forward UpdatePaintBallInfo();public UpdatePaintBallInfo(){ if(paintballspieler < 1) //weniger als 1 Spieler { KillTimer(PaintBallEnde); timerstarted = false; RundeGestartet = false; //minutes = seconds = 0; roundTime = (15*60); // a.k.a 900sec / 15mins } else if(paintballspieler > 0) //mehr als 1 Spieler { //PaintBallEnde = SetTimer("PaintballRundeVorbei", 15 * 60 * 1000, false); if(timerstarted == false) { PaintBallEnde = SetTimer("PaintballRundeVorbei", 1* 60 * 1000, false); } timerstarted = true; RundeGestartet = true; new tmp[11]; if (timerstarted) { roundTime --; new minutes = roundTime / 60, seconds = roundTime % 60 ; format(tmp, sizeof(tmp), "%02d:%02d", minutes, seconds); } for(new i = GetPlayerPoolSize(); i != -1; i--) { if(!IsPlayerConnected(i) || IsPlayerNPC(i) || inRunde[i] == false) continue; TextDrawSetString(PBText2,tmp); } } return 1;}

    Tut mir leid, dass man dir versucht hat zu helfen ;)
    Komm meiner Meinung nach etwas "patzig" rüber, wie du hier antwortest wenn jemand dein Problem
    nicht lösen konnte.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen