Solved Function Player.Find (Bug ?)

remove.tk

Member
Trusted Member
Member
Jan 27, 2015
43
10
8
26
Parts Unknown
Function Player.Find Bug ?
Test on jsPlugin & Magma

JavaScript:
function On_Command(Player, cmd, args){
    if(cmd == "test")
    {
            var GetPlayer_share = Player.Find("TESTNAMEAAZNASUAJHZUAHUSAI");
            if(GetPlayer_share)
            {
                // Online
                Player.MessageFrom("Door Share", "Name : " +  GetPlayer_share.Name);
            }
            else
            {
                // Offline
                Player.MessageFrom("Door Share", "Player Offline");
            }
    }
}
Result : Online (Player Name = I am )

 

DreTaX

Probably knows the answer...
Administrator
Jun 29, 2014
4,093
4,784
113
At your house.
github.com
Function Player.Find Bug ?
Test on jsPlugin & Magma

JavaScript:
function On_Command(Player, cmd, args){
    if(cmd == "test")
    {
            var GetPlayer_share = Player.Find("TESTNAMEAAZNASUAJHZUAHUSAI");
            if(GetPlayer_share)
            {
                // Online
                Player.MessageFrom("Door Share", "Name : " +  GetPlayer_share.Name);
            }
            else
            {
                // Offline
                Player.MessageFrom("Door Share", "Player Offline");
            }
    }
}
Result : Online (Player Name = I am )

You are sorta right.

https://github.com/Notulp/Fougerite/blob/master/Fougerite/Fougerite/Server.cs#L233

Fougerite uses a Query to make sure that the search can be fast as possible.

By that query, It will always return the first or default player from the list.

I will see if i can modify this.
 

DreTaX

Probably knows the answer...
Administrator
Jun 29, 2014
4,093
4,784
113
At your house.
github.com
Function Player.Find Bug ?
Test on jsPlugin & Magma

JavaScript:
function On_Command(Player, cmd, args){
    if(cmd == "test")
    {
            var GetPlayer_share = Player.Find("TESTNAMEAAZNASUAJHZUAHUSAI");
            if(GetPlayer_share)
            {
                // Online
                Player.MessageFrom("Door Share", "Name : " +  GetPlayer_share.Name);
            }
            else
            {
                // Offline
                Player.MessageFrom("Door Share", "Player Offline");
            }
    }
}
Result : Online (Player Name = I am )

Here is my Python CheckV code converted (Untested)

JavaScript:
    /*
        CheckV method based on Spock's method.
        Upgraded by DreTaX
        Can Handle Single argument and Array args.
        ~~~ JavaScript Version ~~~
        V4.1
    */

    function GetPlayerName(namee)
    {
        try
        {
            var name = namee.ToLower();
            for (var pl in Server.Players)
            {
                if (pl.Name.ToLower() == name)
                {
                    return pl;
                }
            }
            return null;
        }
        catch(Exception) {
            return null;
        }
    }

    function CheckV(Player, args) {
        var sysname = "ThisIsMyPlugin";
        var count = 0;
        if (typeof args === 'string') {
            var nargs = args.ToLower();
            var p = GetPlayerName(nargs);
            if (p != null) {
                return p;
            }
            for (var pl in Server.Players) {
                if (Util.ContainsString(pl.Name.ToLower(), nargs)) {
                    p = pl;
                    count += 1;
                }
            }
        }
        else {
            var p = GetPlayerName(args.join(" "));
            if (p != null) {
                return p
            }
            for (var pl in Server.Players) {
                for (var namePart in args) {
                    if (Util.ContainsString(pl.Name.ToLower(), namePart.ToLower())) {
                        p = pl;
                        count += 1;
                    }
                }
            }
        }
        if (count == 0) {
            if (Player != null) {
                Player.MessageFrom(sysname, "Couldn't find [color#00FF00]" + args.join(" ") + "[/color]!");
            }
            return null;
        }
        else if (count == 1 && p != null) {
            return p;
        }
        else {
            if (Player != null) {
                Player.MessageFrom(sysname, "Found [color#FF0000]" + count
                    + "[/color] player with similar name. [color#FF0000] Use more correct name!");
            }
            return null;
        }
    }
Usage:

JavaScript:
var pl = CheckV(PlayerWhoExecutedTheSearch, "PlayerNameIsLOL");
if (pl == null) {
    return;
}

var pl = CheckV(PlayerWhoExecutedTheSearch, args);
if (pl == null) {
    return;
}
 

DreTaX

Probably knows the answer...
Administrator
Jun 29, 2014
4,093
4,784
113
At your house.
github.com
Function Player.Find Bug ?
Test on jsPlugin & Magma

JavaScript:
function On_Command(Player, cmd, args){
    if(cmd == "test")
    {
            var GetPlayer_share = Player.Find("TESTNAMEAAZNASUAJHZUAHUSAI");
            if(GetPlayer_share)
            {
                // Online
                Player.MessageFrom("Door Share", "Name : " +  GetPlayer_share.Name);
            }
            else
            {
                // Offline
                Player.MessageFrom("Door Share", "Player Offline");
            }
    }
}
Result : Online (Player Name = I am )

The method will now return null if it cant find a player.
 

BogdanWDK

Administrator
Administrator
Jul 31, 2014
109
285
63
29
United Kingdom
JavaScript:
var player = Server.FindPlayer(name);
  if (player != null) {
  Player.MessageFrom("[FindPlayer]", "Found: " + player.Name);
  }