Jump to content
  • 0

pomoc Detektování připojení a odpojení


GT222

Dotaz

Popis problému:


Ahoj měl bych menší prosbu.
Dalo by se udělat že když na serveru nejsou žadné hráči tak to smaže všesky vozidla , a když to detektuje že jsou hráči připojeni tak to ty vozidla načte?

Mám na mysli že když se připojí hráč tak to ty vozidla načte (že to detektuje) a pak když se připojí další hráči tak to už nevytvoří , zkoušel jsem použít IsPlayerConnected ale jakmile se připojí další hráč tak to ty vozidla vytvoří znovu

Potřeboval bych aby to ty vozdila vytvořilo jen tehdy kdy je hráč připojen a pak už to nebude vyvolávat po připojení dalších hráčů.
Pak když na serveru nebudou žadný hráči tak to teprve smaže.

Předem děkuji.

Edited by GT222
  • Líbí se mi to! (+1) 1
Link to comment
Share on other sites

17 odpovědí na tuto otázku

Recommended Posts

  • 0

no lze

public OnPlayerConnect(playerid)
{
	if(GetPlayerPoolSize() == 1) //vytvor vozidla
	return 1;
}

public OnPlayerDisconnect(playerid,reason)
{
	if(GetPlayerPoolSize() == 0) //smaz vozidla
	return 1;
}
Link to comment
Share on other sites

  • 0

První ID je ale 0, takže by se vozidla načetla až při druhém hráči (id 1), který se připojí na server. Stejně tak to odstraní vozidla, když je ještě jeden hráč na serveru.

Edited by Lukasz
Link to comment
Share on other sites

  • 0
  • Administrátor

Spíš bych tu první connectovou podmínku updavil z == 1 na > 0


A u té druhé si nejsem jistý funkčností. Protože na prázném serveru i na serveru kde bude jen jeden hráč bude GPS rovno nule ne ?


Když o tom přemýšlím tu to funkci bych k tomu asi vůbec nepoužíval..

 

Udělal bych to uplně jednoduše bez Kalcorových hovadin

new online = -1;
public OPC(playerid)
{
    online++;
    if( online > -1 ) CreateVehicles();
}

public OPD(playerid,reason)
{
    online--;
    if( online  == -1 ) DestroyVehicles();
}
Link to comment
Share on other sites

  • 0

A poolsize vrací nejvyšší používané id.

@Kalcor - radsej uz nepomenovavaj funkcie prosimta

mg ani si neviem predstavit jak to implementovali ked to vracia najvyššie ID :d ako im to prost enapadlo :d

jn ptm v cykle musiš použivať <= poolsize

@Kalcor - just.... what

Link to comment
Share on other sites

  • 0

co treba do OnPlayerConnect

 

if( GetPlayerPoolSize() == 0 ) CreateVehicles();
a OnPlayerDisconnect

 

if( GetPlayerPoolSize() == 0 && !IsPlayerConnected(0))  DestroyVehicles();
Edited by Lukasz
Link to comment
Share on other sites

  • 0
  • Administrátor

co treba do OnPlayerConnect

 

if( GetPlayerPoolSize() == 0 ) CreateVehicles();
a OnPlayerDisconnect

 

if( GetPlayerPoolSize() == 0 && !IsPlayerConnected(0))  DestroyVehicles();

 

Ale GPS ti vrátí 0 i když na serveru někdo bude a i když na něm nebude ne ?

Link to comment
Share on other sites

  • 0
  • Hlavní moderátor
Ale GPS ti vrátí 0 i když na serveru někdo bude a i když na něm nebude ne ?

Proto je tam ta část s IsPlayerConnected.

  • Líbí se mi to! (+1) 1
Link to comment
Share on other sites

  • 0

@Kalcor - radsej uz nepomenovavaj funkcie prosimta

mg ani si neviem predstavit jak to implementovali ked to vracia najvyššie ID icon_e_biggrin.gif ako im to prost enapadlo icon_e_biggrin.gif

jn ptm v cykle musiš použivať <= poolsize

@Kalcor - just.... what

Protoze se trochu zabejva optimaliazci a kdyz pouzijes PoolSize tak nemusis provadet x zbytecnych operaci pri cyklu s IsPlayerConnected. I kdyz pravdou je ze by efektivnejsi bylo nejake pole, ktere by obsahovalo pouze idcka pripojenych hracu. A kdyz uz jsme u toho, uplne nej by bylo udelat sa-mp multithread, to by vyresilo drtivou vetsinu problemu icon_e_biggrin.gif

Edited by ATomas
Link to comment
Share on other sites

  • 0

Protoze se trochu zabejva optimaliazci a kdyz pouzijes PoolSize tak nemusis provadet x zbytecnych operaci pri cyklu s IsPlayerConnected

nemusis hejtovat kazdy moj prispevok mg icon_e_biggrin.gif

je mi to uplne jedno nejake samp aj to ci vobec co vravis ma nejaky realny zaklad icon_e_biggrin.gif

Edit: sry za Off topic

Edited by Tanga
Link to comment
Share on other sites

  • 0

Děkuji vám všem , vyřesil jsem to svým způsobem do OnPlayerConnect jsem dal

if(detected == 0){
 if(GetPlayerPoolSize() == 0){ //Co poradil ATomas
    detected = 1;

    DestroyVeh..
    printf("Vozdila smazany");

    CreateVeh..

    printf("Vozdila nacteny");

 

GameModeInit

detected = 0;

 

Potom Disconnect

if(GetPlayerPoolSize() == 0){ detected = 0;}

 

a funguje jak ma nebere to žádné ID jen když zjistí že na serveru není nikdo tak se po připojení nového hráče vyvolá opět funkce a nastaví hodnotu na 1 tudiž nespustí 0 dokud nebude server bez lidí a on se nepřipojí jako první hráč :) .

Link to comment
Share on other sites

  • 0
new detect = 0;
public OnPlayerConnect(playerid){
     detect++;
     if(detect >= 1){
          CreateVeh
     }
     return 1;
}

public OnPlayerDisconnect(playerid){
     new detect;
     detect--;
     if(detect == 0){
        DelVeh
     }
     return 1;
}

A takto by to nemohlo byť ? icon_e_biggrin.gif

Edited by eXpresS
Link to comment
Share on other sites

  • 0

Wtf? o čom tu zas polemizujete? 

 

Toto je najjednoduchšie riešenie - žiadna zbytočná premenná... icon_e_biggrin.gif

co treba do OnPlayerConnect
 

if( GetPlayerPoolSize() == 0 ) CreateVehicles();
a OnPlayerDisconnect

if( GetPlayerPoolSize() == 0 && !IsPlayerConnected(0))  DestroyVehicles();

 

Len bych ešte otestoval či GetPlayerPoolSize skutočne vracia 0 keď na serveri nie je žiaden hráč, ale to je už na autorovi icon_e_biggrin.gif

 

Jop, pokiaľ používaš NPC, nebude to takto fungovať....

Edited by Quiter
Link to comment
Share on other sites

  • 0
stock GetOnlinePlayers()
{
	new count,g=GetMaxPlayers();
	for(new d; d<g; d++) if(IsPlayerConnected(d) && !IsPlayerNPC(d)) pocet++;
	return pocet;
}

Tohle jsem používal, když jsem dělal Total players online, myslím, že by jsi to mohl použit taky, když bude počet 0 tak destroy vehicles a když bude > 1 tak mužeš dat create .. Myslím, že by to mohlo taky fungovat .. 

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...