Skip to content

Commit

Permalink
Merge pull request #63 from brewsterl/otxserv2
Browse files Browse the repository at this point in the history
Fix exhaust for 7x (error al compilar) & Added CastSystem and AntiDupeSystem for 7x
  • Loading branch information
mattyx14 committed May 30, 2016
2 parents f8dd83c + 1b6f6c4 commit 868098f
Show file tree
Hide file tree
Showing 23 changed files with 2,202 additions and 494 deletions.
1 change: 1 addition & 0 deletions CHANGELOG
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@
- Death container for 7.x
- Fix dont lose CONDITION_INFIGHT on PROTECTION_ZONE only 7x
- Fix Exhaust on protocol 7x
- Added CastSystem and AntiDupeSystem for 7x
]

[ OTX Server 2.X.S - 2 :: Version "Crying Damson"
Expand Down
251 changes: 251 additions & 0 deletions path_7_x/mods/mod_cast.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,251 @@
<?xml version="1.0" encoding="UTF-8"?>
<mod name="Mod Cast" version="1.0" author="Martyx" contact="[email protected]" enabled="yes">
<event type="logout" name="cast-log-out" event="script"><![CDATA[
function onLogout(cid, forceLogout)
db.executeQuery("UPDATE `players` SET `broadcasting` = 0, `viewers` = 0 WHERE `id` = " .. getPlayerGUID(cid) .. " LIMIT 1")
return true
end
]]></event>
<globalevent name="viewers" interval="10000" event="script"><![CDATA[
function onThink(interval)
local players = getPlayersOnline()
for _, pid in ipairs(players) do
local data = getPlayerSpectators(pid)
if(data.broadcast) then
db.executeQuery("UPDATE `players` set `viewers` = " .. table.maxn(data.names) .. " where `id` = " .. getPlayerGUID(pid) .. ";")
end
end
return true
end
]]></globalevent>
<talkaction words="/live" event="script"><![CDATA[
function onSay(cid, words, param, channelId)
local t, data = string.explode(param, " ", 1), getPlayerSpectators(cid)
if(isInArray({'off', 'no', 'disable'}, t[1])) then
data.mutes = {}
data.broadcast = false
doPlayerSetSpectators(cid, data)
db.executeQuery("UPDATE `players` SET `broadcasting` = 0, `viewers` = 0 WHERE `id` = " .. getPlayerGUID(cid))
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You have disabled your live stream.")
elseif(isInArray({'on', 'yes', 'enable'}, t[1])) then
data.broadcast = true
doPlayerSetSpectators(cid, data)
db.executeQuery("UPDATE `players` SET `broadcasting` = 1 WHERE `id` = " .. getPlayerGUID(cid))
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You have enabled your live stream.")
elseif(isInArray({'show', 'count', 'see'}, t[1])) then
if(data.broadcast) then
local count = table.maxn(data.names)
if(count > 0) then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You are currently watched by " .. count .. " people.")
local str = ""
for _, name in ipairs(data.names) do
str = str .. (str:len() > 0 and ", " or "") .. name
end
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, str .. ".")
else
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "None is watching your stream right now.")
end
else
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You are not streaming right now.")
end
elseif(isInArray({'kick', 'remove'}, t[1])) then
if(data.broadcast) then
if(t[2]) then
if(t[2] ~= "all") then
local found = false
for _, name in ipairs(data.names) do
if(t[2]:lower() == name:lower()) then
found = true
break
end
end
if(found) then
table.insert(data.kick, t[2])
doPlayerSetSpectators(cid, data)
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Spectator " .. t[2] .. " has been kicked.")
else
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Spectator " .. t[2] .. " not found.")
end
else
data.kick = data.names
doPlayerSetSpectators(cid, data)
end
else
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You need to type a name.")
end
else
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You are not streaming right now.")
end
elseif(isInArray({'ban', 'block'}, t[1])) then
if(data.broadcast) then
if(t[2]) then
local found = false
for _, name in ipairs(data.names) do
if(t[2]:lower() == name:lower()) then
found = true
break
end
end
if(found) then
table.insert(data.bans, t[2])
doPlayerSetSpectators(cid, data)
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Spectator " .. t[2] .. " has been banned.")
else
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Spectator " .. t[2] .. " not found.")
end
else
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You need to type a name.")
end
else
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You are not streaming right now.")
end
elseif(isInArray({'unban', 'unblock'}, t[1])) then
if(data.broadcast) then
if(t[2]) then
local found, i = 0, 1
for _, name in ipairs(data.bans) do
if(t[2]:lower() == name:lower()) then
found = i
break
end
i = i + 1
end
if(found > 0) then
table.remove(data.bans, found)
doPlayerSetSpectators(cid, data)
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Spectator " .. t[2] .. " has been unbanned.")
else
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Spectator " .. t[2] .. " not found.")
end
else
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You need to type a name.")
end
else
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You are not streaming right now.")
end
elseif(isInArray({'bans', 'banlist'}, t[1])) then
if(table.maxn(data.bans)) then
local str = ""
for _, name in ipairs(data.bans) do
str = str .. (str:len() > 0 and ", " or "") .. name
end
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Currently banned spectators: " .. str .. ".")
else
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Your ban list is empty.")
end
elseif(isInArray({'mute', 'squelch'}, t[1])) then
if(data.broadcast) then
if(t[2]) then
local found = false
for _, name in ipairs(data.names) do
if(t[2]:lower() == name:lower()) then
found = true
break
end
end
if(found) then
table.insert(data.mutes, t[2])
doPlayerSetSpectators(cid, data)
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Spectator " .. t[2] .. " has been muted.")
else
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Spectator " .. t[2] .. " not found.")
end
else
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You need to type a name.")
end
else
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You are not streaming right now.")
end
elseif(isInArray({'unmute', 'unsquelch'}, t[1])) then
if(data.broadcast) then
if(t[2]) then
local found, i = 0, 1
for _, name in ipairs(data.mutes) do
if(t[2]:lower() == name:lower()) then
found = i
break
end
i = i + 1
end
if(found > 0) then
table.remove(data.mutes, found)
doPlayerSetSpectators(cid, data)
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Spectator " .. t[2] .. " has been unmuted.")
else
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Spectator " .. t[2] .. " not found.")
end
else
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You need to type a name.")
end
else
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You are not streaming right now.")
end
elseif(isInArray({'mutes', 'mutelist'}, t[1])) then
if(table.maxn(data.mutes)) then
local str = ""
for _, name in ipairs(data.mutes) do
str = str .. (str:len() > 0 and ", " or "") .. name
end
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Currently muted spectators: " .. str .. ".")
else
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Your mute list is empty.")
end
elseif(isInArray({'auth', 'protect', 'protection', 'protected'}, t[1])) then
if(isInArray({'off', 'no', 'disable'}, t[2])) then
data.auth = false
doPlayerSetSpectators(cid, data)
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Your chat is now unprotected, all spectators can chat without authentication.")
elseif(isInArray({'on', 'yes', 'enable'}, t[2])) then
data.auth = true
doPlayerSetSpectators(cid, data)
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Your chat is now protected, all spectators have to authenticate before they can talk.")
else
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Your chat is currently " .. (data.auth and "protected" or "unprotected") .. " from guests.")
end
elseif(isInArray({'password', 'guard'}, t[1])) then
if(t[2]) then
if(isInArray({'off', 'no', 'disable'}, t[2])) then
if(data.password:len() ~= 0) then
db.executeQuery("UPDATE `players` SET `broadcasting` = `broadcasting` - 2 WHERE `id` = " .. getPlayerGUID(cid))
end
data.password = ""
doPlayerSetSpectators(cid, data)
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You have removed password for your stream.")
else
if(data.password:len() ~= 0) then
db.executeQuery("UPDATE `players` SET `broadcasting` = `broadcasting` + 2 WHERE `id` = " .. getPlayerGUID(cid))
end
data.password = string.trim(t[2])
doPlayerSetSpectators(cid, data)
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You have set new password for your stream.")
end
elseif(data.password ~= "") then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Your stream is currently protected with password: " .. data.password .. ".")
else
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Your stream is currently not protected.")
end
elseif(isInArray({'status', 'info'}, t[1])) then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Your stream is currently " .. (data.broadcast and "enabled" or "disabled") .. ".")
else
doShowTextDialog(cid, 1950, "Available commands:\n\n/live on - enables the stream\n/live off - disables the stream\n/live password {password} - sets a password on the stream\n/live password off - disables the password protection\n/live auth on - enables requirement of authentication on chat\n/live auth off - disables requirement of authentication on chat\n/live kick {name} - kick a spectator from your stream\n/live ban {name} - locks spectator IP from joining your stream\n/live unban {name} - removes banishment lock\n/live bans - shows banished spectators list\n/live mute {name} - mutes selected spectator from chat\n/live unmute {name} - removes mute\n/live mutes - shows muted spectators list\n/live show - displays the amount and nicknames of current spectators\n/live status - displays stream status")
end
return true
end
]]></talkaction>
</mod>
2 changes: 1 addition & 1 deletion path_7_x/sources/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ theotxserver_SOURCES = account.h actions.cpp actions.h baseevents.cpp baseevent
protocol.cpp protocol.h protocolgame.cpp protocolgame.h \
protocollogin.cpp protocollogin.h raids.cpp raids.h \
resources.h scheduler.cpp scheduler.h scriptmanager.cpp \
scriptmanager.h server.cpp server.h spawn.cpp spawn.h \
scriptmanager.h server.cpp server.h spawn.cpp spawn.h spectators.cpp spectators.h \
spells.cpp spells.h status.cpp status.h talkaction.cpp talkaction.h teleport.cpp \
teleport.h templates.h textlogger.cpp textlogger.h thing.cpp thing.h \
tile.cpp tile.h tools.cpp tools.h town.h trashholder.cpp trashholder.h \
Expand Down
37 changes: 37 additions & 0 deletions path_7_x/sources/databasemanager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -241,6 +241,43 @@ uint32_t DatabaseManager::updateDatabase()
return 2;
}

case 2:
{
std::clog << "> Updating database to version 3... (Cast & AntiDupe System)" << std::endl;
switch (db->getDatabaseEngine())
{
case DATABASE_ENGINE_MYSQL:
{
db->query("ALTER TABLE player_items ADD serial VARCHAR(255) NOT NULL DEFAULT '';");
db->query("ALTER TABLE player_depotitems ADD serial VARCHAR(255) NOT NULL DEFAULT '';");
db->query("ALTER TABLE tile_items ADD serial VARCHAR(255) NOT NULL DEFAULT '';");
db->query("ALTER TABLE tile_store ADD serial VARCHAR(255) NOT NULL DEFAULT '';");
db->query("ALTER TABLE house_data ADD serial VARCHAR(255) NOT NULL DEFAULT '';");
db->query("ALTER TABLE `players` ADD `broadcasting` tinyint(4) DEFAULT '0'");
db->query("ALTER TABLE `players` ADD `viewers` INT(1) DEFAULT '0'");
break;
}

case DATABASE_ENGINE_SQLITE:
{
db->query("ALTER TABLE player_items ADD serial VARCHAR(255) NOT NULL DEFAULT '';");
db->query("ALTER TABLE player_depotitems ADD serial VARCHAR(255) NOT NULL DEFAULT '';");
db->query("ALTER TABLE tile_items ADD serial VARCHAR(255) NOT NULL DEFAULT '';");
db->query("ALTER TABLE tile_store ADD serial VARCHAR(255) NOT NULL DEFAULT '';");
db->query("ALTER TABLE house_data ADD serial VARCHAR(255) NOT NULL DEFAULT '';");
db->query("ALTER TABLE `players` ADD `broadcasting` tinyint(4) NOT NULL DEFAULT 0;");
db->query("ALTER TABLE `players` ADD `viewers` BOOLEAN(1) NOT NULL DEFAULT 0;");
break;
}

default:
break;
}

registerDatabaseConfig("db_version", 3);
return 3;
}

default:
break;
}
Expand Down
1 change: 1 addition & 0 deletions path_7_x/sources/game.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2424,6 +2424,7 @@ bool Game::playerCloseChannel(uint32_t playerId, uint16_t channelId)
return false;

g_chat.removeUserFromChannel(player, channelId);
player->client->chat(channelId);
return true;
}

Expand Down
Loading

0 comments on commit 868098f

Please sign in to comment.