System cmdName

Darthfett

Aerospace/Cybersecurity Software Engineer
Reaction score
615
cmdName
Created by Darthfett

Description:
A command that gives name changing functionality. Players can change their name using this system, using the in-game command "-name " along with the desired name. Using this name changing system will prevent players from choosing the name of the map creator.

Requirements:
stringFind
stringFilter
stringColor
Event

The rest of the documentation can be found in the system code, below:

JASS:
library cmdName initializer Init uses Event,stringFilter,stringFind,stringColor
/*
__________________________________________________________________________________

        cmdName library, created by Darthfett - version 1.0
        http://www.thehelper.net/forums/showthread.php?t=144463
        
                                Requirements
                                
-vJass compiler (such as JASSHelper, this version compiled for version 0.A.2.7)
    
+stringFind library - http://www.thehelper.net/forums/showthread.php?t=143591

+stringFilter library - http://www.thehelper.net/forums/showthread.php?t=143589

+stringColor library - http://www.thehelper.net/forums/showthread.php?t=143593

+Event library (this version compiled for version 1.04) - http://www.thehelper.net/forums/showthread.php?t=126846

                                Documentation

-Credit for this library is not necessary.  Feel free to use it in your map.
If you feel obligated to credit me, I won't object.  I only ask that you do 
not simply copy and paste the library as your own.

                                    API

<CONFIG>
    
private constant string cmd
    Set this string to the command to be used to change a player's name.
    Using a space at the end will require a space in-between the command
    and the selected name.
    
private constant string creator
    Set this string to your in-game name, to prevent other players from using your name in-game.
        
private constant string ATTEMPT_SELECT_CREATORS_NAME
    This will be displayed to the player when he attempts to select the map creator's name.
    
<END CONFIG>
    
string In-Game Command "-name "
    This command (by default) allows a player to change color by typing "-name " followed
    by a name, such as "Darthfett" or "BillyJoeBob"
    
    Due to restrictions in the game, the max length of a player's name is 26.

Event EVENT_PLAYER_CHANGES_NAME
    This Event is fired just before a player changes name.
    Invalid name commands will not trigger this Event.
    
global string PlayerSelectedName
    OR
function GetPlayerSelectedName takes nothing returns string
    When a player selects a name, just before he changes name, the
    EVENT_PLAYER_CHANGES_NAME Event is fired.  You can refer to the name
    selected by the player with this function
        
global player PlayerSelectingName
    OR
function GetPlayerSelectingName takes nothing returns player
    When a player selects a name, just before he changes name, the
    EVENT_PLAYER_CHANGES_NAME Event is fired.  You can refer to the player
    selecting a new name with this function
    
public boolean ENABLED <cmdName_ENABLED>
    Set this to true/false to enable/disable the in-game command.
    
__________________________________________________________________________________
*/

globals
    //CONFIG
        private constant string cmd = "-name "
        private constant string creator = "Darthfett"   
        
        private constant string ATTEMPT_SELECT_CREATORS_NAME = RED + "Invalid name.  You cannot select the name of the map creator." + END
    //END CONFIG
    
    public boolean ENABLED = true
        
    Event EVENT_PLAYER_CHANGES_NAME
    string PlayerSelectedName
    player PlayerSelectingName
    
    private player creatorPlayer = null
endglobals

function GetPlayerSelectedName takes nothing returns string
    return PlayerSelectedName
endfunction

function GetPlayerSelectingName takes nothing returns player
    return PlayerSelectingName
endfunction

private function Conditions takes nothing returns boolean
    return StartsWith(GetEventPlayerChatString(),cmd,false) and ENABLED
endfunction

private function Actions takes nothing returns nothing
    set PlayerSelectedName = Strip(SubString(GetEventPlayerChatString(),StringLength(cmd),StringLength(GetEventPlayerChatString())))
    set PlayerSelectingName = GetTriggerPlayer()
    if StringCase(PlayerSelectedName,false) == StringCase(creator,false) and PlayerSelectingName != creatorPlayer then
        call DisplayTextToPlayer(PlayerSelectingName,0,0,ATTEMPT_SELECT_CREATORS_NAME)
        return
    endif
    call EVENT_PLAYER_CHANGES_NAME.fire()
    call SetPlayerName(PlayerSelectingName,PlayerSelectedName)
endfunction

private function Init takes nothing returns nothing
    local trigger t = CreateTrigger()
    local integer i = 0
    loop
        exitwhen i >= 12
        call TriggerRegisterPlayerChatEvent(t,Player(i),"",false)
        set i = i + 1
    endloop
    call TriggerAddCondition(t,Condition(function Conditions))
    call TriggerAddAction(t,function Actions)
    set EVENT_PLAYER_CHANGES_NAME = Event.create()
    set i = 0
    loop
        exitwhen i >= 12
        if StringCase(GetPlayerName(Player(i)),false) == StringCase(creator,false) then
            set creatorPlayer = Player(i)
        endif
        set i = i + 1
    endloop
endfunction

endlibrary
 

tooltiperror

Super Moderator
Reaction score
231
Why not the simple GUI Trigger and an if/then/else?

Why not put it in a scope instead of a library?

[ljass]library cmdName initializer Init uses Event,stringFilter,stringFind,stringColor[/ljass] - You should add stringColor into the list at the top of the post.
[ljass] public boolean ENABLED = true[/ljass] - Shouldn`t this be in the config box?
 

Darthfett

Aerospace/Cybersecurity Software Engineer
Reaction score
615
Why not the simple GUI Trigger and an if/then/else?

1. This is configurable
2. This uses Event, which allows it to play nice with other systems.
3. Prevents use of the map creator's name.

Why not put it in a scope instead of a library?

So that people get correct errors if they do not have the requirements, and so that players can use the included event on Init. Is there any real purpose to scopes? All they do is leave out the requirements which ends up causing problems later on.

[ljass]library cmdName initializer Init uses Event,stringFilter,stringFind,stringColor[/ljass] - You should add stringColor into the list at the top of the post.

Good point, I'll add it in, thanks. :)

[ljass] public boolean ENABLED = true[/ljass] - Shouldn`t this be in the config box?

If you notice, it's not constant. This can be enabled/disabled in-game, for whatever reasons you may have. While it works as a configuration for enabling/disabling it, it can be changed in-game, unlike the other configurables.
 

tooltiperror

Super Moderator
Reaction score
231
>>1. This is configurable
2. This uses Event, which allows it to play nice with other systems.
3. Prevents use of the map creator's name.

Again, if..then..else can do this easily, and configurability is pointless in something so simple.


>>So that people get correct errors if they do not have the requirements, and so that players can use the included event on Init. Is there any real purpose to scopes? All they do is leave out the requirements which ends up causing problems later on.
Makes sense.

>>If you notice, it's not constant. This can be enabled/disabled in-game, for whatever reasons you may have. While it works as a configuration for enabling/disabling it, it can be changed in-game, unlike the other configurables.
I would personally put it in there anyway, just for the sake of flow.

I recommend merging this with another library.
 

Darthfett

Aerospace/Cybersecurity Software Engineer
Reaction score
615
>>1. This is configurable
2. This uses Event, which allows it to play nice with other systems.
3. Prevents use of the map creator's name.

Again, if..then..else can do this easily, and configurability is pointless in something so simple.

If-then-else can do what, exactly?

Configurability is NOT pointless for those who don't know (v)JASS, and it's actually quite useful to not have to go through someone else's code.

I recommend merging this with another library.

Which one, exactly? The other command libraries are not related, as they let players change different things. The stringPlayer library should not require event or have an initially enabled name-changing command for someone who just wants to use the library for something simple, like this.
 

Narks

Vastly intelligent whale-like being from the stars
Reaction score
90
In the time it takes to search up this system, someone could have written their own -name command.

In GUI.
 

tooltiperror

Super Moderator
Reaction score
231
If-then-else can do what, exactly?
You can just make an if that makes sure that the substring is not the name of the creator.

Configurability is NOT pointless for those who don't know (v)JASS, and it's actually quite useful to not have to go through someone else's code.
You should be able to configure your own triggers if you make them yourself.


Which one, exactly? The other command libraries are not related, as they let players change different things. The stringPlayer library should not require event or have an initially enabled name-changing command for someone who just wants to use the library for something simple, like this.

I wouldn't know, they're your libraries > >
 

Darthfett

Aerospace/Cybersecurity Software Engineer
Reaction score
615
You can just make an if that makes sure that the substring is not the name of the creator.

An if-then-else is almost exactly what this does. This, however, will also prevent people from using the name "darthfett" (while a 'simple' if-then-else will only prevent use of the name "Darthfett", unless you use the StringCase function like this library does). It will also allow the map creator to change his name at will, while allowing him to change it back.

I wouldn't know, they're your libraries > >

If you don't even know what my other libraries do, why are you telling me (the person who knows what's in all the libraries) that some of them need to be merged? At the very least, give a reason BESIDES the fact that I have submitted many resources. Last time I checked, there was no limit to the amount of resources that can be submitted by any one person, nor any precedent for merging multiple unrelated resources because they have a similar name.
 

Narks

Vastly intelligent whale-like being from the stars
Reaction score
90
i've found it best to just ignore all of tooltip's posts

lol


but seriously, this system is just so pointless

maybe it it allowed you to put colors in your name, or prevented you from mimicking other people with same / similar names, and functionality to retrieve player original names then it might be useful.

also ugly interface
 

Darthfett

Aerospace/Cybersecurity Software Engineer
Reaction score
615
but seriously, this system is just so pointless

I think what you mean is simple, which is not necessarily a bad thing. I prefer having a simple resource all made and ready, to having to code it myself in all of my maps.

>Put colors in your name

.. and what sort of interface would you propose for that? I personally think this makes it confusing for users.

>Prevented you from mimicking other players' names

I may consider supporting this, good idea. :D

>functionality to retrieve player original names

Ehh, I don't consider this to be very useful. It would be simple to set an array on map initialization. I might consider a "-reset name" command, but I don't find it to be too useful. Most people already know their name.

also ugly interface

Which part, specifically? I happen to like the interface, as it mimics the default Warcraft III event system.

JASS:
library DisplayNameChange initializer Init uses cmdName,stringPlayer

    private function Actions takes nothing returns nothing
        call DisplayTextToPlayer(GetLocalPlayer(),0,0,GetPlayerName(P2CN(GetPlayerSelectingName()) + " has changed names to " + P2CS(GetPlayerSelectingName()) + GetPlayerSelectedName() + END)
    endfunction

    private function Init takes nothing returns nothing
        local trigger t = CreateTrigger()
        call TriggerRegisterEvent(t,EVENT_PLAYER_CHANGES_NAME)
        call TriggerAddAction(t,function Actions)
    endfunction

endlibrary
 

tooltiperror

Super Moderator
Reaction score
231
This is just such a simple, pointless, easy system, that there is no reason for it to be approved.

I said plenty of times that you could do this with one simple trigger, without any JASS.
 
General chit-chat
Help Users
  • No one is chatting at the moment.

      The Helper Discord

      Members online

      No members online now.

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top