So to personally mod my server to make it how I want it to be I have begun making or revitalizing some mods to have the desired functions I want....
buuuuuuuuut I suck I am very new to this modding thing and so I really could use help with some one looking over these scripts and tell me what is wrong!!!
First
buuuuuuuuut I suck I am very new to this modding thing and so I really could use help with some one looking over these scripts and tell me what is wrong!!!
First
JavaScript:
var PLUGIN_ALLOW_JOIN_WITHOUT_LEAVING_FIRST = false;
var PLUGIN_SHOULD_LOG_ROOMS = true;
var PLUGIN_REMOVE_EMPTY_ROOMS = true;
var PLUGIN_DISPLAY_JOIN_LEAVE_MESSAGES = true;
var PLUGIN_NOT_ALLOWED_ROOMNAMES = ["Admin", "Admin-Chat", "Admin Chat", "ALL", "ALL-Chat", "ALL Chat"];
var chatrooms_tbl = "com.eightd.chatrooms.rooms";
var chatrooms_owner_tbl = "com.eightd.chatrooms.owner";
var chatrooms_player_to_room_tbl = "com.eightd.chatrooms.playertoroom";
var CURRENT_PLAYER_REMOVED_CHATROOM = 0;
var OTHER_PLAYER_REMOVED_CHATROOM = 1;
var CURRENT_PLAYER_LEFT_CHATROOM_BY_COMMAND = 2;
var CURRENT_PLAYER_LEFT_CHATROOM_BY_DISCONNECT = 3;
function On_Chat(Player, ChatString) {
var sendtoall = false;
var text = ChatString.Substring(1, ChatString.NewText.Length - 2);
if(dataStoreContainsKey(chatrooms_player_to_room_tbl, Player.SteamID)) {
var roomname = Datastore.Get(chatrooms_player_to_room_tbl, Player.SteamID);
roomname = Data.ToLower(roomname);
if(dataStoreContainsKey(chatrooms_tbl, roomname)) {
var Room = castBackToObject(Datastore.Get(chatrooms_tbl, roomname));
if(Data.StrLen(text) > 0) {
sendChatroomMessage(Player, Room, text);
Player.MessageFrom("[" + Room.Name + "]", Player.Name + ":" + text);
}
sendtoall = false;
}
else {
Datastore.Remove(chatrooms_player_to_room_tbl, Player.SteamID);
Datastore.Save();
Player.Message("[ERROR]: Chatroom not found, you are back in the all-chat!");
sendtoall = false;
}
}
else {
sendtoall = true;
}
if(sendtoall) {
Server.BroadcastFrom("[ALL - " + Player.Name + "]", text);
}
ChatString.NewText = ""; // disable normal chat
}
function On_Command(Player, cmd, args) {
if(cmd == "createroom") {
var string = "";
for(var str in args) {
string += str + " ";
}
var myargs = Data.SplitQuoteStrings(string);
if(myargs.Length != 3) {
Player.Message("Useage: /createroom \"name\" \"password\" maxplayers");
return;
}
var Room = {};
Room.Name = myargs[0];
Room.Owner = Player.SteamID;
Room.Password = myargs[1];
Room.Players = 0;
Room.MaxPlayers = parseInt(myargs[2]);
CreateChatRoomForPlayer(Player, Room);
}
else if(cmd == "removeroom") {
if(!dataStoreContainsKey(chatrooms_player_to_room_tbl, Player.SteamID)) {
Player.Message("Chatroom removed!");
}
RemovePlayerChatRoom(Player);
}
else if(cmd == "leaveroom") {
if(!dataStoreContainsKey(chatrooms_player_to_room_tbl, Player.SteamID)) {
Player.Message("You aren't in a chatroom! Join one! /joinroom \"name\” \"password\"");
return;
}
var roomname = Datastore.Get(chatrooms_player_to_room_tbl, Player.SteamID);
roomname = Data.ToLower(roomname);
if(!dataStoreContainsKey(chatrooms_tbl, roomname)) {
Player.Message("[ERROR]: Chatroom not found");
Datastore.Remove(chatrooms_player_to_room_tbl, Player.SteamID);
Datastore.Save();
return;
}
var Room = castBackToObject(Datastore.Get(chatrooms_tbl, roomname));
RemovePlayerFromChatRoom(Player, Room, CURRENT_PLAYER_LEFT_CHATROOM_BY_COMMAND);
}
else if(cmd == "joinroom") {
var string = "";
for(var str in args) {
string += str + " ";
}
var myargs = Data.SplitQuoteStrings(string);
if(myargs.Length != 2) {
Player.Message("Useage: /joinroom \"name\" \"password\"");
return;
}
if(!dataStoreContainsKey(chatrooms_tbl, Data.ToLower(myargs[0]))) {
Player.Message("Chatroom: " + myargs[0] + " not found! Check your spelling again!");
return;
}
if(dataStoreContainsKey(chatrooms_player_to_room_tbl, Player.SteamID)) { // Already in a chatroom
if(!PLUGIN_ALLOW_JOIN_WITHOUT_LEAVING_FIRST) {
Player.Message("You are already in a chatroom! Leave it first! /leaveroom");
return;
}
var roomname = Datastore.Get(chatrooms_player_to_room_tbl, Player.SteamID);
roomname = Data.ToLower(roomname);
if(!dataStoreContainsKey(chatrooms_tbl, roomname)) {
Datastore.Remove(chatrooms_player_to_room_tbl, Player.SteamID);
Datastore.Save();
}
else {
var Room = castBackToObject(Datastore.Get(chatrooms_tbl, roomname));
RemovePlayerFromChatRoom(Player, Room, CURRENT_PLAYER_LEFT_CHATROOM_BY_COMMAND);
}
}
var Room = castBackToObject(Datastore.Get(chatrooms_tbl, Data.ToLower(myargs[0])));
AddPlayerToChatroom(Player, Room, myargs[1]);
}
else if(cmd == "publicrooms") {
displayPublicChatroomsToPlayer(Player);
}
else if(cmd == "all") {
var string = getstringofargs(args, 0, 0);
Server.BroadcastFrom("[ALL - " + Player.Name + "]", string);
}
}
function On_PlayerDisconnected(Player) {
if(!dataStoreContainsKey(chatrooms_player_to_room_tbl, Player.SteamID)) return;
var roomname = Datastore.Get(chatrooms_player_to_room_tbl, Player.SteamID);
roomname = Data.ToLower(roomname);
if(!dataStoreContainsKey(chatrooms_tbl, roomname)) {
Datastore.Remove(chatrooms_player_to_room_tbl, Player.SteamID);
Datastore.Save();
return;
}
var Room = castBackToObject(Datastore.Get(chatrooms_tbl, roomname));
RemovePlayerFromChatRoom(Player, Room, CURRENT_PLAYER_LEFT_CHATROOM_BY_DISCONNECT);
}
function On_ServerInit() {
Datastore.Load();
}
function On_ServerShutdown() {
Datastore.Flush(chatrooms_player_to_room_tbl);
Datastore.Flush(chatrooms_tbl);
Datastore.Flush(chatrooms_owner_tbl);
Datastore.Save();
}
function CreateChatRoomForPlayer(Player, Room) {
if(arrayContainsValue(PLUGIN_NOT_ALLOWED_ROOMNAMES, Room.Name)) {
Player.Message("A chatroom with this name is not allowed. Choose another one!");
return;
}
if(dataStoreContainsKey(chatrooms_tbl, Data.ToLower(Room.Name))) {
Player.Message("A chatroom with this name already exists. Choose another one!");
return;
}
if(dataStoreContainsKey(chatrooms_owner_tbl, Player.SteamID)) {
Player.Message("You can't open a second chatroom. Remove your chatroom first! /removeroom");
return;
}
var ostr = serializeObject(Room);
Datastore.Add(chatrooms_tbl, Data.ToLower(Room.Name), ostr);
Datastore.Add(chatrooms_owner_tbl, Room.Owner, ostr);
Datastore.Save();
Player.Message("Room: " + Room.Name + " created! (Password: " + Room.Password + " - MaxPlayers: " + Room.MaxPlayers + ")");
Player.Message("Type /joinroom \"" + Room.Name + "\” \"" + Room.Password + "\" to join it!");
}
function RemovePlayerChatRoom(Player) {
if(!dataStoreContainsKey(chatrooms_owner_tbl, Player.SteamID)) {
Player.Message("You don't own a chatroom! Create one! /createroom \”name\" \"password\" maxplayers");
return;
}
var Room = castBackToObject(Datastore.Get(chatrooms_owner_tbl, Player.SteamID));
RemovePlayerFromChatRoom(Player, Room, CURRENT_PLAYER_REMOVED_CHATROOM);
for(var MyPlayer in Server.Players) {
RemovePlayerFromChatRoom(MyPlayer, Room, OTHER_PLAYER_REMOVED_CHATROOM);
}
Datastore.Remove(chatrooms_owner_tbl, Player.SteamID);
Datastore.Remove(chatrooms_tbl, Data.ToLower(Room.Name));
Datastore.Save();
}
function RemovePlayerFromChatRoom(Player, Room, reason) {
if(!dataStoreContainsKey(chatrooms_tbl, Data.ToLower(Room.Name))) {
Datastore.Remove(chatrooms_player_to_room_tbl, Player.SteamID);
Datastore.Save();
return;
}
if(!dataStoreContainsKey(chatrooms_player_to_room_tbl, Player.SteamID)) return;
if(Datastore.Get(chatrooms_player_to_room_tbl, Player.SteamID) != Room.Name) return;
if(reason == CURRENT_PLAYER_REMOVED_CHATROOM) {
Player.Message("You removed your chatroom! You are back in the all-chat!");
}
else if(reason == OTHER_PLAYER_REMOVED_CHATROOM) {
Player.Message("This chatroom has been removed! You are back in the all-chat!");
}
else if(reason == CURRENT_PLAYER_LEFT_CHATROOM_BY_COMMAND || reason == CURRENT_PLAYER_LEFT_CHATROOM_BY_DISCONNECT) {
Room.Players = parseInt(Room.Players) - 1;
Datastore.Add(chatrooms_tbl, Data.ToLower(Room.Name), serializeObject(Room));
if(PLUGIN_DISPLAY_JOIN_LEAVE_MESSAGES) {
var message = Player.Name + " left the chatroom!";
sendChatroomMessage(null, Room, message);
}
if(reason == CURRENT_PLAYER_LEFT_CHATROOM_BY_COMMAND) {
Player.Message("You left the chatroom. You are back in the all-chat!");
}
if(Room.Players == 0) {
if(PLUGIN_REMOVE_EMPTY_ROOMS) Datastore.Remove(chatrooms_tbl, Data.ToLower(Room.Name));
}
}
Datastore.Remove(chatrooms_player_to_room_tbl, Player.SteamID);
Datastore.Save();
}
function AddPlayerToChatroom(Player, Room, password) {
if(Room.Password != password) {
Player.Message("Wrong password for Chatroom: " + Room.Name + "!");
return;
}
Room.MaxPlayers = parseInt(Room.MaxPlayers);
Room.Players = parseInt(Room.Players);
if(Room.Players + 1 > Room.MaxPlayers) {
Player.Message("Chatroom: " + Room.Name + " is full!");
return;
}
Room.Players += 1;
Datastore.Add(chatrooms_player_to_room_tbl, Player.SteamID, Room.Name);
Player.Message("You joined the chatroom: " + Room.Name);
if(PLUGIN_DISPLAY_JOIN_LEAVE_MESSAGES) {
var message = Player.Name + " joined the chatroom!";
sendChatroomMessage(null, Room, message);
}
Datastore.Add(chatrooms_tbl, Data.ToLower(Room.Name), serializeObject(Room));
Datastore.Save();
}
function displayPublicChatroomsToPlayer(Player) {
var counter = 0;
for(var roomstr in Datastore.Values(chatrooms_tbl)) {
var Room = castBackToObject(roomstr);
if(Room.Password == "") {
Player.Message("Chatroom: " + Room.Name);
counter++;
}
}
if(counter == 0) {
Player.Message("No public chatrooms found!");
}
}
function sendChatroomMessage(Player, Room, Message) {
for(var MyPlayer in Server.Players) {
if(!dataStoreContainsKey(chatrooms_player_to_room_tbl, MyPlayer.SteamID)) continue;
if(Datastore.Get(chatrooms_player_to_room_tbl, MyPlayer.SteamID) != Room.Name) continue;
if(MyPlayer.SteamID == Player.SteamID) continue;
if(Player == null) MyPlayer.MessageFrom("[" + Room.Name + "]", Message);
else MyPlayer.MessageFrom("[" + Room.Name + "]", Player.Name + ":" + Message);
}
}
function castBackToObject(serializedstring) {
var MyObject = {};
var s1 = serializedstring.split(",");
for(var i = 0; i < s1.length; i++) {
var s2 = s1[i].split("=");
MyObject[s2[0]] = s2[1];
}
return MyObject;
}
function serializeObject(MyObject) {
var string = "";
for(var key in MyObject) {
if(MyObject.hasOwnProperty(key)) {
string += key + "=" + MyObject[key] + ",";
}
}
string = Data.Substring(string, 0 , Data.StrLen(string) -1);
return string;
}
function dataStoreContainsKey(tbl, pkey) {
for(var key in Datastore.Keys(tbl)) {
if(Data.ToLower(key) == Data.ToLower(pkey)) return true;
}
return false;
}
function arrayContainsValue(array, value) {
for(var i = 0; i < array.length; i++) {
if(Data.ToLower(array[i]) == Data.ToLower(value)) {
return true;
}
}
return false;
}
function getstringofargs(args, start, followingargs){
var string = "";
for(var i = start; i < args.Length - followingargs; i++) {
string += args[i] + " ";
}
string = Data.Substring(string, 0, Data.StrLen(string) - 1);
return string;
}
Last edited: