ID:146025
 
Alright, i got a huge issue with my game thats really starting to get me mad. it seems whenever someone logs out near my char or anyone elses in the game, and then comes back later, it will log them in but it will also log out and then re-login the person who was near them when they logged out, and that persons character will be at the same stats and everything as when that person logged out. can someone help me with this please?


Would have to see the code.
You must show code..BUT only code that you think is relevant to the problem..
In response to Mecha Destroyer JD
its hard to say which code to show, this has been a problem for a long time but it died down until recently...so if you could give me an idea of what you think it might be, id be glad to post it.
In response to GcRayden
Post your mob/Login(), mob/Logout(), Read() and Write() ( If you overrode them ), and any other saving-related procs/verbs.
In response to Audeuro
character saving n stuff code file
------------------------------------
/*
Example of creating a character using the html form library, and saving it
using the CharacterHandling library.

This demo saves the player and their last location on the map.

The library is a part of BaseCamp, Deadron's game infrastructure system.

Full documentation for the library can be found by looking at the
characterhandling.dm file.

If you have questions or suggestions, please email ron@deadron.com.

BaseCamp: From here you can reach Everest!
*/

#include <deadron/characterhandling>
#include <dantom/htmllib>


/*
How many characters is a player allowed to have?
Change this to whatever number you want for your game.
*/

client/base_num_characters_allowed = 10


/*
Turning off automatic features
------------------------------
By default, the CharacterHandling library automatically loads and saves characters
for you. There are settings that will turn off the automatic behavior if you wish.

client/base_autoload_character = 0
----------------------------------
This turns off auto-loading when a player logs in.
Whenever you do want the player to load a character, call that player's
client.base_ChooseCharacter() function.

client/base_autosave_character = 0
----------------------------------
This turns off auto-saving when a player logs out.
If you turn off auto-saving or also want to save at other times, use
the player's client.base_SaveMob() function, as shown in the save_me()
verb below.

client/base_autodelete_mob = 0
------------------------------
This stops the library from deleting the player's mob after they log out.
Without this, the mob will stay in the game until you delete it yourself.

mob/base_save_location = 0
------------------------------
This turns off the location saving, which means you will need to manually
place the mob after it is read in from the savefile.

Uncomment one or more of the following lines to turn off a feature.
*/

// client/base_autoload_character = 0
// client/base_autosave_character = 0
// client/base_autodelete_mob = 0
// mob/base_save_location = 0


/*
Customizing the choosing menus
------------------------------
If you'd like something that looks better than the default menus for
choosing and deleting characters, you can override ChooseCharacterMenu()
and DeleteCharacterMenu(). In each case the list of standard menu items
is passed in, and you can choose to display them however you want; you
then return the player's choice by calling ChooseCharacterResult() or
DeleteCharacterResult(). In our case we'll make each menu item a link on
an HTML page.

You could also choose to add extra options to the menu here and respond
to them. If you'd like even more control over the menus, then Many the
ChooseCharacter() and DeleteCharacter() procs from the implementation.dm
file and override them for your game. DON'T change them in the
implementation.dm file, though, because your changes will be lost the next
time the library is upgraded.
*/

mob/BaseCamp/ChoosingCharacter
ChooseCharacterMenu(list/menu)
// For each menu item, we'll create an HTML link in a table.
// The Topic() proc gets called when a link is clicked.
// The src setting tells it to call Topic() for this object.
var/menu_rows = ""
for (var/item in menu)
menu_rows += {"<tr><td align="center"><a href="?menu=choosing_character;choice=[item];src=\ref[src]">\[[item]]</a></td></tr>"}

var/page = {"
<body bgcolor=black scroll=yes>
<center>
<h2><img src="http://www.freewebs.com/thug2cam/imationsbanner.jpg"<br><br><font color="blue">Welcome to Imation's Forgotton Realm!</font></h2>
<b><i><font color = green>Choose a character</i></b><br><br>
<table border=1 cellpadding=3>
[menu_rows]
</table>
</center>
"}


// Send them the page.
src << browse(page, "window=CharacterMenu;titlebar=0;can_close=0;can_minimize=0;size=600x400")

DeleteCharacterMenu(list/menu)
var/menu_rows = ""
for (var/item in menu)
menu_rows += {"<tr><td align="center"><a href="?menu=deleting_character;choice=[item];src=\ref[src]">\[[item]]</a></td></tr>"}

var/page = {"
<body bgcolor=black scroll=yes>
<center>
<h2><font color="red">Deleting character!</font></h2>
<b><i><font color = red>Choose the character you want to delete</i></b><br><br>
<table border=1 cellpadding=3>
[menu_rows]
</table>
</center>
"}


// Send them the page.
src << browse(page, "window=CharacterMenu;titlebar=0;can_close=0;can_minimize=0;size=600x400")


Topic(href, href_list[])
// This is called when the user clicks on a link from the HTML page.
// We need to let the library know which choice was made.
var/menu = href_list["menu"]
switch(menu)
if ("choosing_character")
// Close the menu window.
src << browse(null, "window=CharacterMenu")

var/choice = href_list["choice"]
ChooseCharacterResult(choice)
return

if ("deleting_character")
// Close the menu window.
src << browse(null, "window=CharacterMenu")

var/choice = href_list["choice"]
DeleteCharacterResult(choice)
return

// If we got this far, this didn't come from one of our links, so let superclass handle.
return ..()

/*
Specifying the mob type
-----------------------
When a new character needs to be created, the CharacterHandling library
creates a mob of type world.mob and logs the player into it.

You can choose any mob type and anything you want with this mob.

This example sets the default mob to /mob/creating_character.
When the player is logged into the creating_character class, they are
sent an HTML form to fill out for their character. When they are done, their
character is created.

To make sure that the player can't interact with the rest of the game while
filling out this form, the /mob/creating_character removes any verbs it has
and overrides Stat() to keep statpanels from showing up.
*/

world/mob = /mob/creating_character

mob/creating_character
base_save_allowed = 0 // If player quits before choosing, don't want to save this mob.

var
Form/NewCharacter/char_form = new()
error_text = "" // For error text if they fill out the form wrong.

Login()
// Spawn here to avoid problems with calling prompts during login.
spawn()
src.char_form.DisplayForm()

// Don't want any verbs accessible.
RemoveVerbs()
return

Stat()
// No statpanels.
return

proc/RemoveVerbs()
for (var/item in verbs)
verbs -= item
return

/*
Character creation form
-----------------------
This is the form object that defines the web page where they set their
character attributes.

You tell the form object what kind of controls to use (radio buttons, popup menu,
text area, etc) by adding specially named variables to the object. To see the complete
list of possible controls, in the file tree on the left go to Lib/Dantom.htmllib and
look at the documentation.
*/

Form/NewCharacter
/*
The form_window variable provides the browse() options that the form will use.
We want the form to show up in its own window (not the built-in browser view).
*/

form_window = "window=NewCharacter;titlebar=0;can_close=0;can_minimize=0;size=600x400"

var
name
description


/*
To create a popup menu they can choose from, put the options in a list
called variablename_values.
*/

gender
gender_values = list("Man", "Woman")

class
class_values = list("Warrior","White Mage","Black Mage","Red Mage","Monk")


HtmlLayout()
/*
You control the appearance of the form here.

We have added an error_text variable to the creating character mob, so we
can display an error if the form wasn't filled out correctly and needs to
be redisplayed with a message. The error_text variable can't be part of
the form object, because then the form tries to let the player edit it.

When you embed a variable such as [name], the html library automatically
puts in the HTML for the text field or radio button or whatever is needed.
In the case of radio buttons, you place the numbered variables where each
should be displayed.

The [submit] variable puts in the necessary submit button at that spot.
You can also place a [reset] button if you want.

There is an image here, which was sent to the player in Initialize()
to put it on their system so it would show up on the page.

This example puts everything in table to make layout control easier.
Some of the table rows are blank to provide extra space between options.
You can change the HTML in any way you like for your game.
*/

var/mob/creating_character/player = usr

var/page = {"<body bgcolor=black>
<center><img src="http://www.freewebs.com/thug2cam/imationsbanner.jpg"></center>
<font color=red><b>
[player.error_text]</b></font><br>
<table>
<tr><td><b><font color = white>Name:</b></td><td>
[name]</td></tr>
<tr><td>&nbsp;</td><td>&nbsp</td></tr>
<tr><td>&nbsp;</td><td>&nbsp</td></tr>
<tr><td><b><font color = white>Sex:</b></td><td>
[gender]</td>
<tr><td><b><font color = white>Job:</b></td><td>
[class]</td>
<tr><td>&nbsp;</td><td>&nbsp</td></tr>
<tr><td>&nbsp;</td><td>
[submit]</td></tr>
</table>
"}

return page

ProcessForm()
/*
This is called when the player submits the form.
Make sure everything is valid; if not, send them back to the
form with an error message.

If everything is okay, create their character and log them
into it, then blank out the web page.

This checks the ckey() version of the name they chose, to make
sure it has actual letters and isn't just punctuation.
*/

var/mob/creating_character/player = usr

var/ckey_name = ckey(name)
if (!ckey_name || ckey_name == "")
player.error_text = "Your name must have alpha-numeric characters in it!"
DisplayForm()
return

// Everything is okay, so create the new mob based on the class they chose.

var/mob/new_mob
switch(gender)
if ("Man") new_mob = new /mob/Player()
if ("Woman") new_mob = new /mob/whitemage()

new_mob.name = name
switch(class)
if ("Warrior") new_mob.class = "Warrior"
if ("Black Mage") new_mob.class = "Black Mage"
if ("White Mage") new_mob.class = "White Mage"
if ("Red Mage") new_mob.class = "Red Mage"
if ("Monk") new_mob.class = "Monk"

// Log their client into the new mob.
player.client.mob = new_mob
new_mob.client.view = 8
new_mob << browse(null, "window=NewCharacter")
new_mob.text_color = "red"
new_mob.contents+=new/obj/Boots
new_mob.contents+=new/obj/Flame_dagger
new_mob.contents+=new/obj/Fishing_Pole
new_mob.Fishing_Pole += 1
if(new_mob.class == "Warrior")
new_mob.warrior = 1
if(new_mob.class == "Black Mage")
new_mob.blackmage = 1
if(new_mob.class == "White Mage")
new_mob.whitemage = 1
if(new_mob.class == "Monk")
new_mob.monk = 1
if(new_mob.class == "Red Mage")
new_mob.redmage = 1
return

mob/var/newb = 0

mob
verb
save_me()
// This demonstrates how to manually save the mob whenever you want.
src.client.base_SaveMob()
src << "\red You have been saved."

-----------------------------------------------------------
login code
-----------------------------------------------------------
mob/Login()
AddGMVerbs()
usr.Partymembers = null
usr.Party = null//Now we make the players Party variable equal the new quilds name (This will be used when inviting a player to the Party)
usr.verbs -= /mob/Party/verb/Party_Chat//We give the player the new Party verbs
usr.verbs -= /mob/Party/verb/Party_Members//We give the player the new Party verbs
usr.verbs -= /mob/Party/verb/Party_Invite//We give the player the new Party verbs
usr.verbs -= /mob/Party/verb/Party_Disband//We give the player the new Party verbs
usr.verbs += /mob/verb/Make_Party//Now we delete this verb so the player cannot create multiple Partys
usr.Party_Members = 0
usr.Group = 0
usr._temp_gm = 0
usr.tempgm = 0
usr.player = 1
usr.layer = 8
usr.full = 0
usr.pochiputaway = 1
if(usr.havescratched3 >= 1)
usr.havescratched3 = 0
if(usr.scratch1 >= 1)
usr.scratch1 = 0
if(usr.scratch2 >= 1)
usr.scratch2 = 0
if(usr.scratch3 >= 1)
usr.scratch3 = 0
if(usr.scratch4 >= 1)
usr.scratch4 = 0
if(usr.scratch5 >= 1)
usr.scratch5 = 0
if(usr.scratch6 >= 1)
usr.scratch6 = 0
if(usr.scratch7 >= 1)
usr.scratch7 = 0
if(usr.scratch8 >= 1)
usr.scratch8 = 0
if(usr.scratch9 >= 1)
usr.scratch9 = 0
if(usr.scratchcard >= 1)
usr.scratchcard = 0
if(usr.casted >= 1)
usr.casted = 0
if(usr.helped==1)
usr.helped = 0
if(usr.applefull == 1)
usr.maxhealth -= 50
usr.applefull = 0
if(usr.pumpkinfull == 1)
usr.magicstrength -= 20
usr.pumpkinfull = 0
if(usr.class=="Warrior")
usr.warrior = 1
else if(usr.class=="Monk")
usr.monk = 1
else if(usr.class=="Red Mage")
usr.redmage = 1
else if(usr.class=="Black Mage")
usr.blackmage = 1
else if(usr.class == "White Mage")
usr.whitemage = 1
else
var/list/classes=list("Warrior","Monk","Red Mage","Black Mage","White Mage")
switch(input("What job would you like to have?","Job Selection")in classes)
if("Warrior")
usr.class="Warrior"
usr.warrior = 1
if("Monk")
usr.class="Monk"
usr.monk = 1
if("Red Mage")
usr.class="Red Mage"
usr.redmage = 1
if("Black Mage")
usr.class="Black Mage"
usr.blackmage = 1
if("White Mage")
usr.whitemage = 1
usr.class="White Mage"
if(usr.subclass=="Warrior")
else if(usr.subclass=="Monk")
else if(usr.subclass=="Red Mage")
else if(usr.subclass=="Black Mage")
else if(usr.subclass == "White Mage")
else
var/list/classes=list("Warrior","Monk","Red Mage","Black Mage","White Mage")
switch(input("What sub job would you like to have?","Sub Job Selection")in classes)
if("Warrior")
if(usr.class == "Warrior")
usr << "This is already your current job"
return Login()
else
if(usr.subclass == "Warrior")
usr<< "This is already your current sub job"
else
usr.subclass="Warrior"
usr.warriorsub = 1
usr.redmagesub = 0
usr.blackmagesub = 0
usr.whitemagesub = 0
usr.monksub = 0
if("Monk")
if(usr.class == "Monk")
usr << "This is already your current job"
return Login()
else
if(usr.class == "Monk")
usr<< "This is already your current sub job"
else
usr.subclass="Monk"
usr.warriorsub = 0
usr.redmagesub = 0
usr.blackmagesub = 0
usr.whitemagesub = 0
usr.monksub = 1
if("Red Mage")
if(usr.class == "Red Mage")
usr<< "This is already your current sub job"
return Login()
else
if(usr.subclass == "Red Mage")
usr<< "This is already your current sub job"
else
usr.subclass="Red Mage"
usr.warriorsub = 0
usr.redmagesub = 1
usr.blackmagesub = 0
usr.whitemagesub = 0
usr.monksub = 0
if("Black Mage")
if(usr.class == "Black Mage")
usr << "This is already your current job"
return Login()
else
if(usr.subclass == "Black Mage")
usr<< "This is already your current sub job"
else
usr.subclass="Black Mage"
usr.warriorsub = 0
usr.redmagesub = 0
usr.blackmagesub = 1
usr.whitemagesub = 0
usr.monksub = 0
if("White Mage")
if(usr.class == "White Mage")
usr << "This is already your current job"
return Login()
else
if(usr.subclass == "White Mage")
usr<< "This is already your current sub job"
else
usr.subclass="White Mage"
usr.warriorsub = 0
usr.redmagesub = 0
usr.blackmagesub = 0
usr.whitemagesub = 1
usr.monksub = 0
usr.pochiisouttoplay = 0
usr.scratchcard = 0
usr.Group = 0
usr.Party_Members = 0
usr.Party = null
if(usr.fishingbusy >= 1)
usr.fishingbusy = 0
if(usr.icefishingbusy >= 1)
usr.icefishingbusy = 0
if(usr.townportal5 >= 1)
usr.townportal5 = 0
if(usr.magefishingicon >= 1)
usr.magefishingicon = 0
if(usr.boost >= 1)
usr.attack -= 10
usr.boost = 0
if(usr.poisoned >= 1)
usr.poisoned = 0
if(usr.binded >= 1)
usr.binded = 0
if(usr.invisibility >= 1)
usr.invisibility = 0
if(usr.allowed >= 0)
usr.allowed = 1
if(usr.done >= 1)
usr.done = 0
if(usr.busy >= 1)
usr.busy = 0
if(usr.invisibility <= 1)
usr.invisibility = 0
if(usr.allowed <= 0)
usr.allowed = 1
if(usr.busy <= 1)
usr.busy = 0
if(usr.Rest >= 1)
usr.Rest = 0
//Now we delete this verb so the player cannot create multiple guilds
if(usr.areamusic=="buccsden")
usr << sound('explorer.mid',1)
usr <<"<b>===Buccsden City==="
else if(usr.areamusic=="britannica")
usr << sound('I Am.wav',1)
usr <<"<b>===Britannica City==="
else if(usr.areamusic=="cave")
usr << sound('venture.mid',1)
usr <<"<font color = blue><b>===Demon's Crypt==="
else if(usr.areamusic=="forgottonforest")
usr << sound('theme.mid',1)
usr <<"<font color = green><b>===Forgotton Forest==="
else if(usr.areamusic=="desert")
usr << sound('desert.mid',1)
usr <<"<font color = yellow><b>===Crayton Dunes==="
else if(usr.areamusic=="ridge")
usr << sound('ToastTown.mid',1)
usr <<"<b>===Claymon Ridge==="
else if(usr.areamusic=="alternatebuccsden")
usr << sound('rpgloop10.mid',1)
usr <<"<b>===Imation's Forgotton Realm : Alternate Buccsden==="
else if(usr.areamusic=="tooboo")
usr << sound('Smoothwork.mid',1)
usr <<"<font color = red><b>===Toboo Plain==="
else if(usr.areamusic=="crypt")
usr <<"<font color = blue><b>===Underground Crypt==="
usr << sound('rpgloop18.mid',1)
else if(src.areamusic == "nieve")
usr<<"<font color = yellow><b>===Nieve Village==="
usr<<sound('town1.mid',1)
else if(src.areamusic == "pochi")
usr<<"<b>===<font color = red>P<font color = green>o<font color = blue>c<font color = yellow>h<font color = white>i <font color = red>I<font color = green>s<font color = blue>l<font color = yellow>a<font color = white>n<font color = red>d<font color = white>==="
usr<<sound('cheerful1.mid',1)
else
usr << sound('explorer.mid',1)
client.view = 8
usr.loc = locate(16,12,1)
usr<<"<font color = yellow>Welcome [usr]"
world<<"<font color = yellow>[usr] has entered [world.name]"//[world.name = well the worlds name]
usr << "<font color = green>Welcome to Imation's Forgotton Realms. This game is just a beta yet, but you can still get far into it. Check out some of the stuff i add and tell me what you think (comments and ideas are welcomed) Please...<b>Do not ask for GM!</b><br><font color = yellow><br><b>Game Macros:</b><br>Tab = Attack<br>Target = Double click what you want to target<br>Cure 1-3 = F1-F3 (cure on target)<br>Regen = F4 (regen on target)<br>Fire 1-3 = numberpad 1-3 (fire on target)<br>Water 1-3 = numpad 4-6 (waters target)<br>Lightning 1-3 = numpad 7-9 (lightning on target)<br>Bio = F9 (Bio on target)<br>Poison = F8 (poison on target)<br>Bind = F7 (bind on target)<br>Invisibility = F6 (Invis on target)<br>clear target = *<br>Examine Target = -<br>Mage Fishing = F12<br>Fish = F11<br>Ice Fish = F10<br>Throw snowball = numpad 0<br><br><b>Note: For all numpad macros, Num Lock must be on!"
var/const/info={"<STYLE>BODY {background: black; color: white}</STYLE><head><title>Imation's Forgotton Realms</title></head><body><br><img src="http://www.freewebs.com/thug2cam/imationsbanner.jpg"><br><b><font color = red>Welcome to Imation's Forgotton Realms<br><br><font color = white>GM's : (Master)teh nooby - (Master)GcRayden - Chickopie - Ezekiel - Kodras<font color = yellow><br><br><font color = white>Game Last Updated: Saturday, April 23rd<br><br><font color = blue>Bobby Love Lorrie! <3 <3 <3<br><br>Important Game Macros:<br>Tab = Attack<br>F1 = Cure(must have someone targeted)<br>Numpad0 = Rest<br>Alt + * = clear target<br>Alt + - = Examine Target<br><br><font color = red>Today's News<font color = white></b><br><font color = green>April 19th 05<font color = white> - added music to most of all the maps now, also got it so you can turn the music off with the Game Music option. also added color to area names and made it so that you get a warning before it turns night or day (made the warning there because it spawns monsters at night / day) Also changed the safe zones, now instead of being clear all the time, the safe zones darken as it becomes night (also added icons to safe zones).Fixed sell command to update suffix and now when you play a song, if it is a wav file it will automaticly turn off the midi so the midi and wav files dont mix (sound mixing = bad lol) Well that was alot of work for today (I made more changes but cant remember some of them, most of the time was spent finding good music for the game), hope you guys like the music ^_^ - (Master) teh nooby<br><br>Wow...I added lots of stuff today --> (April 18th, 05) check out the new stuff i added an tell me whatcha think ^_^ <br><br><b><font color = red>Updates:<font color = yellow><br><br>Selling and Getting Items:<font color = white></b><br>Tired of all those items taking up all your space? Stack those babys up!<br><br>Selling stuff can be seen difficult when you have lots of items and can only sell 1 at a time, right? well kiss those hard times of selling 1 by 1 goodbye with the new Sell Certain Amount option! got alot of the same item? sell them all at once! <br><br><b><font color = yellow>Attack & Damage:<font color = white></b><br>Tired of people talking to you while your battling and dont get to see what they say because of the damage report? (aka: monster hit you for so much, etc) That no longer exists! Damage to and from monsters is now on screen ^_^<br><br><b><font color = blue>New Areas added:<font color = white></b><br>Britannica City<br><br><b><font color = yellow>Checkers:<font color = white></b><br>added a new mini game of checkers to Nizzk's bar, go check it out ^_^<br><br><b><font color = yellow>Airship:<font color = white></b> You can now ride the airship from Buccsden to Britannica / other way around too.<br><br><b><font color = red>Other stuff:<font color = white><br>I also fixed alot of annoying bugs.<br><br>more updates coming soon</body>"}
usr<<browse(info,"window=info;size=750x550")
if(usr.jail == 1)
usr<<"<b><font color = red>You logged out before you served all of your time in jail, now you will finish your time."
usr.noportal = 1
usr.can_attack = 0
src.loc=locate(48,58,1)
sleep(1000)
src.loc=locate(16,12,1)
usr.jail = 0
usr.can_attack = 1
usr.noportal = 0
if(usr.jail == 2)
usr<<"<b><font color = red>You logged out before you served all of your time in jail, now you will finish your time."
usr.noportal = 1
usr.can_attack = 0
src.loc=locate(48,58,1)
sleep(2000)
src.loc=locate(16,12,1)
usr.jail = 0
usr.can_attack = 1
usr.noportal = 0
if(usr.jail == 3)
usr<<"<b><font color = red>You logged out before you served all of your time in jail, now you will finish your time."
usr.noportal = 1
usr.can_attack = 0
src.loc=locate(48,58,1)
sleep(3000)
src.loc=locate(16,12,1)
usr.can_attack = 1
usr.jail = 0
usr.noportal = 0
if(usr.jail == 4)
usr.noportal = 1
usr<<"<b><font color = red>You logged out before you served all of your time in jail, now you will finish your time."
usr.can_attack = 0
src.loc=locate(48,58,1)
sleep(4000)
src.loc=locate(16,12,1)
usr.jail = 0
usr.can_attack = 1
usr.noportal = 0
if(usr.jail == 5)
usr.noportal = 1
usr<<"<b><font color = red>You logged out before you served all of your time in jail, now you will finish your time."
usr.can_attack = 0
src.loc=locate(48,58,1)
sleep(5000)
src.loc=locate(16,12,1)
usr.can_attack = 1
usr.jail = 0
usr.noportal = 0
if(usr.jail >= 6)
usr.noportal = 1
usr<<"<b><font color = red>You logged out before you served all of your time in jail, now you will finish your time."
usr.can_attack = 0
src.loc=locate(48,58,1)
sleep(6000)
src.loc=locate(16,12,1)
usr.can_attack = 1
usr.jail = 0
usr.noportal = 0
if(usr.scoreadded == 1)
sleep(2400)
usr.scoreadded = 0

-----------------------------------------------------------


really thats all, but thinking about it...i do get an error when someone creates a new character. i dont think its a problem but its

player.client.mob = new_mob

on the first code near the bottom, always pops up saying null.client or something, tried changing it with src, usr, etc. didnt work. Hopefully you guys can help me fix this!
In response to Audeuro
You forgot client/New() and client/Del(). >_>
In response to GcRayden
Oh, dear lord. Please use DM tags, and please don't post your whole DM file, just anything relevant. Something I can see right off the bat is that you didn't close your font and bold tags, and you used ==1 on a boolean var.
if(!var) is the same as if(var==0)
if(var) is the same is if(var==1)

I also noticed you have MAJOR usr abuse in mob/Login().

You have several verbs from one typepath that are being subtracted, instead of that, use src.verbs+=typesof(/mob/Party/verb)

On one part, you had it to where it returned Login(). Instead, you should use ..(), and, you should put a ..() after all your checks and such are done. But then again, that doesn't make sense. You should make it to where it returns a proc for subjob and job selection.

Agh, that's so long I really don't feel like going through and pointing out the rest of the mistakes.
In response to Sinoflife
Sinoflife wrote:
Oh, dear lord. Please use DM tags, and please don't post your whole DM file, just anything relevant.

i fixed it, put dm tags on it. sorry about that tho, this is my first post here, i try to figure out everything and i usually do so i dont have to post here, but this problem wont go away >.<
In response to Sinoflife
Sinoflife wrote:
On one part, you had it to where it returned Login(). Instead, you should use ..(), and, you should put a ..() after all your checks and such are done.

thats because ppl keep picking their subjob as their main job -_-

ill just try all the fixes you already said and hope for the best, thanks.