Ir para conteúdo

[Encerrado] Erro War System


goesraphael1

Posts Recomendados

Galer,a eu compilei um TFS 0.4 rev 3777 para linux

coloquei la no arquivo configure.ac o -D__WAR__SYSTEM__

 

AC_PREREQ([2.50])
AC_INIT([TheForgottenServer], [0.4])
AM_INIT_AUTOMAKE([1.10 foreign])
AC_CONFIG_SRCDIR([account.h])
AM_CONFIG_HEADER([config.h])

AC_PROG_CXX
AC_LANG(C++)
# add own flags in here
OPTIONAL_FLAGS="-D__WAR__SYSTEM__"

# check if we want server diag enabled
serverDiag=no
AC_ARG_ENABLE(server-diag, [  --enable-server-diag        enable server diagnostic],
   [OPTIONAL_FLAGS="$OPTIONAL_FLAGS -D__ENABLE_SERVER_DIAGNOSTIC__"]
   serverDiag=yes
)

# check if we want login server mode
AM_CONDITIONAL(LOGIN_SERVER, false)
loginServer=no
AC_ARG_ENABLE(login-server, [  --enable-login-server        enable login server mode],
   [OPTIONAL_FLAGS="$OPTIONAL_FLAGS -D__LOGIN_SERVER__"]
   AM_CONDITIONAL(LOGIN_SERVER, true)
   loginServer=yes
)

# check if we want OTAdmin protocol
AM_CONDITIONAL(OT_ADMIN, false)
otAdmin=no
AC_ARG_ENABLE(ot-admin, [  --enable-ot-admin        enable OTAdmin protocol],
   [OPTIONAL_FLAGS="$OPTIONAL_FLAGS -D__OTADMIN__"]
   AM_CONDITIONAL(OT_ADMIN, true)
   otAdmin=yes
)

# check if we want otserv allocator enabled
otservAllocator=no
AC_ARG_ENABLE(otserv-allocator, [  --enable-otserv-allocator    enable otserv custom allocator],
   [OPTIONAL_FLAGS="$OPTIONAL_FLAGS -D__OTSERV_ALLOCATOR__"]
   otservAllocator=yes
)

# check if we want homedir conf enabled
homedirConf=no
AC_ARG_ENABLE(homedir-conf, [  --enable-homedir-conf        enable home directory configuration],
   [OPTIONAL_FLAGS="$OPTIONAL_FLAGS -D__HOMEDIR_CONF__"]
   homedirConf=yes
)

# check do we want to allow running on root user
rootPermission=no
AC_ARG_ENABLE(root-permission, [  --enable-root-permission    enable running on root user],
   [OPTIONAL_FLAGS="$OPTIONAL_FLAGS -D__ROOT_PERMISSION__"]
   rootPermission=yes
)

# check do we want to be a login server for multiworld
loginServer=no
AC_ARG_ENABLE(login-server, [  --enable-login-server  enable running in a login server mode],
   [OPTIONAL_FLAGS="$OPTIONAL_FLAGS -D__LOGIN_SERVER__"]
   loginServer=yes
)

# check if we want to use luajit instead of lua
luaJIT=no
AC_ARG_ENABLE(luajit, [  --enable-luajit        enable luajit instead of lua],
   [OPTIONAL_FLAGS="$OPTIONAL_FLAGS -D__LUAJIT__"]
   luaJIT=yes
)
AC_SUBST(OPTIONAL_FLAGS)

# check if we want a debug build
debugBuild=no
AC_ARG_ENABLE(debug, [  --enable-debug        enable debuging],
   [DEBUG_FLAGS="-D__DEBUG__ -D__DEBUG_MOVESYS__ -D__DEBUG_CHAT__ -D__DEBUG_EXCEPTION_REPORT__ -D__DEBUG_HOUSES__ -D__DEBUG_LUASCRIPTS__ -D__DEBUG_MAILBOX__ -D__DEBUG_NET__ -D__DEBUG_NET_DETAIL__ -D__DEBUG_RAID__ -D__DEBUG_SCHEDULER__ -D__DEBUG_SPAWN__ -D__SQL_QUERY_DEBUG__ -O0 -g3"]
   debugBuild=yes
)
if test "$debugBuild" = "no" ; then
   DEBUG_FLAGS="-O2 -fomit-frame-pointer" # disable all kinds of debugging
fi

AC_SUBST(DEBUG_FLAGS)

AM_CONDITIONAL(USE_MYSQL, false)
useMySQL=no
AM_CONDITIONAL(USE_PGSQL, false)
usePostgreSQL=no
AM_CONDITIONAL(USE_SQLITE, false)
useSQLite=no

# check if we want mysql enabled
AC_ARG_ENABLE(mysql, [  --enable-mysql        enable MySQL support], [
   AM_CONDITIONAL(USE_MYSQL, true)
   MYSQL_FLAGS=-D__USE_MYSQL__
   AC_SUBST(MYSQL_FLAGS)
   useMySQL=yes
])

# check if we want postgresql enabled
AC_ARG_ENABLE(pgsql, [  --enable-pgsql        enable PostgreSQL support], [
   AM_CONDITIONAL(USE_PGSQL, true)
   PGSQL_FLAGS="-D__USE_PGSQL__ -I`pg_config --includedir`"
   AC_SUBST(PGSQL_FLAGS)
   usePostgreSQL=yes
])

# check if we want sqlite enabled
AC_ARG_ENABLE(sqlite, [  --enable-sqlite        enable SQLite support], [
   AM_CONDITIONAL(USE_SQLITE, true)
   SQLITE_FLAGS=-D__USE_SQLITE__
   AC_SUBST(SQLITE_FLAGS)
   useSQLite=yes
])

# check if we want the profiler
AC_ARG_ENABLE(profiler, [  --enable-profiler        enable profiler support], [PROFILER_FLAGS=-pg])
AC_SUBST(PROFILER_FLAGS)

# Checks for header files.
AC_HEADER_STDC
AC_CHECK_HEADERS([arpa/inet.h netdb.h netinet/in.h stddef.h stdint.h stdlib.h sys/socket.h sys/timeb.h])

# Checks for typedefs, structures, and compiler characteristics.
AC_HEADER_STDBOOL
AC_C_CONST
AC_C_INLINE
AC_TYPE_INT16_T
AC_TYPE_INT32_T
AC_TYPE_INT64_T
AC_TYPE_SIZE_T
AC_STRUCT_TM
AC_TYPE_UINT16_T
AC_TYPE_UINT32_T
AC_TYPE_UINT64_T
AC_TYPE_UINT8_T
AC_CHECK_TYPES([ptrdiff_t])

# Checks for library functions.
AC_FUNC_MALLOC
AC_FUNC_MEMCMP
AC_FUNC_REALLOC
AC_CHECK_FUNCS([ceil floor ftime gethostbyname gethostname memset pow sqrt strcasecmp strncasecmp strstr strtol])

# check for xml2
AM_PATH_XML2(2.6.5, , AC_MSG_ERROR([You need libxml2 >= 2.6.5 to compile theforgottenserver!]))
LIBS="$LIBS $XML_LIBS"

# check for gmp
AC_CHECK_HEADERS([gmp.h], ,[AC_MSG_ERROR("gmp header not found.")])
AC_CHECK_LIB(gmp, __gmpz_init2, ,[AC_MSG_ERROR("Linking against gmp library failed.")])

# check for zlib
AC_CHECK_HEADERS([zlib.h], ,[AC_MSG_ERROR("zlib header not found.")])
AC_CHECK_LIB(z, main, ,[AC_MSG_ERROR("Linking against zlib library failed.")])

# check for boost
AC_CHECK_LIB(boost_thread-gcc-mt, main, , [
   AC_CHECK_LIB(boost_thread-mt, main, , [
       AC_CHECK_LIB(boost_thread, main, , [
           AC_MSG_ERROR("Linking against boost::thread library failed.")
       ])
   ])
])

AC_CHECK_LIB(boost_regex-gcc-mt, main, , [
   AC_CHECK_LIB(boost_regex-mt, main, , [
       AC_CHECK_LIB(boost_regex, main, , [
           AC_MSG_ERROR("Linking against boost::regex library failed.")
       ])
   ])
])

AC_CHECK_LIB(boost_system-gcc-mt, main, , [
   AC_CHECK_LIB(boost_system-mt, main, , [
       AC_CHECK_LIB(boost_system, main, , [
           AC_MSG_ERROR("Linking against boost::system library failed.")
       ])
   ])
])

AC_CHECK_LIB(boost_date_time-gcc-mt, main, , [
   AC_CHECK_LIB(boost_date_time-mt, main, , [
       AC_CHECK_LIB(boost_date_time, main, , [
           AC_MSG_ERROR("Linking against boost::date-time library failed.")
       ])
   ])
])

AC_CHECK_LIB(boost_filesystem-gcc-mt, main, , [
   AC_CHECK_LIB(boost_filesystem-mt, main, , [
       AC_CHECK_LIB(boost_filesystem, main, , [
           AC_MSG_ERROR("Linking against boost::filesystem library failed.")
       ])
   ])
])

# check for boost::asio
AC_CHECK_HEADERS([boost/asio.hpp], , [AC_MSG_ERROR("boost::asio header not found.")])

# check for boost::unordered_set
AC_CHECK_HEADERS([boost/tr1/unordered_set.hpp], , [AC_MSG_ERROR("boost::unordered_set header not found.")])

# check for Crypto++
AC_CHECK_HEADERS([cryptopp/sha.h cryptopp/md5.h cryptopp/adler32.h cryptopp/hex.h cryptopp/base64.h cryptopp/hmac.h cryptopp/cryptlib.h], , [AC_MSG_ERROR("Required Crypto++ headers not found.")])
AC_CHECK_LIB(cryptopp, main, , [AC_MSG_ERROR("Linking against Crypto++ library failed")])

# check for Lua
PKG_CHECK_MODULES(LUA, lua5.1 >= 5.1, , [
   AC_CHECK_HEADERS([lua.hpp], , [AC_MSG_ERROR("Lua header not found.")])
   AC_CHECK_LIB(lua, main, , [AC_MSG_ERROR("Linking against Lua library failed.")])
])
AC_SUBST(LUA_CFLAGS)
AC_SUBST(LUA_LIBS)

# check for mysql if it is enabled
if test -n "$MYSQL_FLAGS"; then
   AC_CHECK_HEADERS([mysql/mysql.h],[MYSQL_LIBS=-lmysqlclient],[AC_MSG_ERROR("MySQL headers missing.")])
   AC_CHECK_LIB(mysqlclient, main,[],[AC_MSG_ERROR("Linking against mysql-client failed.")])
   AC_SUBST(MYSQL_LIBS)
fi

# check for postgresql if it is enabled
if test -n "$PGSQL_FLAGS"; then
   AC_CHECK_HEADERS([`pg_config --includedir`/libpq-fe.h],[PGSQL_LIBS=-lpg],[AC_MSG_ERROR("PostgreSQL headers missing.")])
   AC_CHECK_LIB(pq, main,[],[AC_MSG_ERROR("Linking against libpq failed.")])
   AC_SUBST(PGSQL_LIBS)
fi

# check for sqlite if it is enabled
if test -n "$SQLITE_FLAGS"; then
   AC_CHECK_HEADERS([sqlite3.h],[sqlITE_LIBS=-lsqlite3],[AC_MSG_ERROR("SQLite3 headers missing.")])
   AC_CHECK_LIB(sqlite3, main,[],[AC_MSG_ERROR("Linking against sqlite3 failed.")])
   AC_SUBST(SQLITE_LIBS)
fi

if test "$useMySQL" = "no" ; then
   if test "$useSQLite" = "no" ; then
       if test "$usePostgreSQL" = "no" ; then
           echo Error: no database driver was enabled! To enable a database driver, configure with --enable-\<dbdriver\> \(example: --enable-mysql\).
           echo
           exit 1
           return 1
       fi
   fi
fi
AC_CONFIG_FILES([Makefile])
AC_OUTPUT

echo
#echo The Forgotten Server 0.4
echo $PACKAGE $VERSION
echo
echo Server diagnostics.......... : $serverDiag
echo Login server mode........... : $loginServer
echo OTAdmin protocol............ : $otAdmin
echo Root run permission......... : $rootPermission
echo Login server mode........... : $loginServer
echo Home-directory configuration : $homedirConf
echo OTServ custom allocator..... : $otservAllocator
echo Debug build................. : $debugBuild
echo Using LuaJIT................ : $luaJIT
echo
echo Build with MySQL............ : $useMySQL
echo Build with SQLite........... : $useSQLite
echo Build with PostgreSQL....... : $usePostgreSQL
echo

echo Configure complete, now you may type \'./build.sh\'.

 

Eu consigo invitar uma guild para war, porém não consigo aceitar (/war accept, GUILDNAME) estou escrevendo no guildchat, aparece esse erro no console:

[12:56:47.732] [Error - TalkAction Interface]
[12:56:47.732] data/talkactions/scripts/war.lua:onSay
[12:56:47.732] Description:
[12:56:47.732] data/talkactions/scripts/war.lua:70: attempt to call global 'doGuildAddEnemy' (a nil value)
[12:56:47.732] stack traceback:
[12:56:47.732]  data/talkactions/scripts/war.lua:70: in function <data/talkactions/scripts/war.lua:1>

 

Caso precisem do arquivo war.lua:

function onSay(cid, words, param, channel)
    local guild = getPlayerGuildId(cid)
    if(not guild or getPlayerGuildLevel(cid) < GUILDLEVEL_LEADER) then
		    doPlayerSendChannelMessage(cid, "", "You cannot execute this talkaction.", TALKTYPE_CHANNEL_W, 0)
		    return true
    end

    local t = string.explode(param, ",")
    if(not t[2]) then
		    doPlayerSendChannelMessage(cid, "", "Not enough param(s).", TALKTYPE_CHANNEL_W, 0)
		    return true
    end

    local enemy = getGuildId(t[2])
    if(not enemy) then
		    doPlayerSendChannelMessage(cid, "", "Guild \"" .. t[2] .. "\" does not exists.", TALKTYPE_CHANNEL_W, 0)
		    return true
    end

    if(enemy == guild) then
		    doPlayerSendChannelMessage(cid, "", "You cannot perform war action on your own guild.", TALKTYPE_CHANNEL_W, 0)
		    return true
    end

    local enemyName, tmp = "", db.getResult("SELECT `name` FROM `guilds` WHERE `id` = " .. enemy)
    if(tmp:getID() ~= -1) then
		    enemyName = tmp:getDataString("name")
		    tmp:free()
    end

    if(isInArray({"accept", "reject", "cancel"}, t[1])) then
		    local query = "`guild_id` = " .. enemy .. " AND `enemy_id` = " .. guild
		    if(t[1] == "cancel") then
				    query = "`guild_id` = " .. guild .. " AND `enemy_id` = " .. enemy
		    end

		    tmp = db.getResult("SELECT `id`, `begin`, `end`, `payment` FROM `guild_wars` WHERE " .. query .. " AND `status` = 0")
		    if(tmp:getID() == -1) then
				    doPlayerSendChannelMessage(cid, "", "Currently there's no pending invitation for a war with " .. enemyName .. ".", TALKTYPE_CHANNEL_W, 0)
				    return true
		    end

		    if(t[1] == "accept") then
				    local _tmp = db.getResult("SELECT `balance` FROM `guilds` WHERE `id` = " .. guild)
				    local state = _tmp:getID() < 0 or _tmp:getDataInt("balance") < tmp:getDataInt("payment")

				    _tmp:free()
				    if(state) then
						    doPlayerSendChannelMessage(cid, "", "Your guild balance is too low to accept this invitation.", TALKTYPE_CHANNEL_W, 0)
						    return true
				    end

				    db.executeQuery("UPDATE `guilds` SET `balance` = `balance` - " .. tmp:getDataInt("payment") .. " WHERE `id` = " .. guild)
		    end

		    query = "UPDATE `guild_wars` SET "
		    local msg = "accepted " .. enemyName .. " invitation to war."
		    if(t[1] == "reject") then
				    query = query .. "`end` = " .. os.time() .. ", `status` = 2"
				    msg = "rejected " .. enemyName .. " invitation to war."
		    elseif(t[1] == "cancel") then
				    query = query .. "`end` = " .. os.time() .. ", `status` = 3"
				    msg = "canceled invitation to a war with " .. enemyName .. "."
		    else
				    query = query .. "`begin` = " .. os.time() .. ", `end` = " .. (tmp:getDataInt("end") > 0 and (os.time() + ((tmp:getDataInt("begin") - tmp:getDataInt("end")) / 86400)) or 0) .. ", `status` = 1"
		    end

		    query = query .. " WHERE `id` = " .. tmp:getDataInt("id")
		    if(t[1] == "accept") then
				    doGuildAddEnemy(guild, enemy, tmp:getDataInt("id"), WAR_GUILD)
				    doGuildAddEnemy(enemy, guild, tmp:getDataInt("id"), WAR_ENEMY)
		    end

		    tmp:free()
		    db.executeQuery(query)
		    doBroadcastMessage(getPlayerGuildName(cid) .. " has " .. msg, MESSAGE_EVENT_ADVANCE)
		    return true
    end

    if(t[1] == "invite") then
		    local str = ""
		    tmp = db.getResult("SELECT `guild_id`, `status` FROM `guild_wars` WHERE `guild_id` IN (" .. guild .. "," .. enemy .. ") AND `enemy_id` IN (" .. enemy .. "," .. guild .. ") AND `status` IN (0, 1)")
		    if(tmp:getID() ~= -1) then
				    if(tmp:getDataInt("status") == 0) then
						    if(tmp:getDataInt("guild_id") == guild) then
								    str = "You have already invited " .. enemyName .. " to war."
						    else
								    str = enemyName .. " have already invited you to war."
						    end
				    else
						    str = "You are already on a war with " .. enemyName .. "."
				    end

				    tmp:free()
		    end

		    if(str ~= "") then
				    doPlayerSendChannelMessage(cid, "", str, TALKTYPE_CHANNEL_W, 0)
				    return true
		    end

		    local frags = tonumber(t[3])
		    if(frags ~= nil) then
				    frags = math.max(10, math.min(1000, frags))
		    else
				    frags = 100
		    end

		    local payment = tonumber(t[4])
		    if(payment ~= nil) then
				    payment = math.max(100000, math.min(1000000000, payment))
				    tmp = db.getResult("SELECT `balance` FROM `guilds` WHERE `id` = " .. guild)

				    local state = tmp:getID() < 0 or tmp:getDataInt("balance") < payment
				    tmp:free()
				    if(state) then
						    doPlayerSendChannelMessage(cid, "", "Your guild balance is too low for such payment.", TALKTYPE_CHANNEL_W, 0)
						    return true
				    end

				    db.executeQuery("UPDATE `guilds` SET `balance` = `balance` - " .. payment .. " WHERE `id` = " .. guild)
		    else
				    payment = 0
		    end

		    local begining, ending = os.time(), tonumber(t[5])
		    if(ending ~= nil and ending ~= 0) then
				    ending = begining + (ending * 86400)
		    else
				    ending = 0
		    end

		    db.executeQuery("INSERT INTO `guild_wars` (`guild_id`, `enemy_id`, `begin`, `end`, `frags`, `payment`) VALUES (" .. guild .. ", " .. enemy .. ", " .. begining .. ", " .. ending .. ", " .. frags .. ", " .. payment .. ");")
		    doBroadcastMessage(getPlayerGuildName(cid) .. " has invited " .. enemyName .. " to war till " .. frags .. " frags.", MESSAGE_EVENT_ADVANCE)
		    return true
    end

    if(not isInArray({"end", "finish"}, t[1])) then
		    return false
    end

    local status = (t[1] == "end" and 1 or 4)
    tmp = db.getResult("SELECT `id` FROM `guild_wars` WHERE `guild_id` = " .. guild .. " AND `enemy_id` = " .. enemy .. " AND `status` = " .. status)
    if(tmp:getID() ~= -1) then
		    local query = "UPDATE `guild_wars` SET `end` = " .. os.time() .. ", `status` = 5 WHERE `id` = " .. tmp:getDataInt("id")
		    tmp:free()
		    doGuildRemoveEnemy(guild, enemy)
		    doGuildRemoveEnemy(enemy, guild)

		    db.executeQuery(query)
		    doBroadcastMessage(getPlayerGuildName(cid) .. " has " .. (status == 4 and "mend fences" or "ended up a war") .. " with " .. enemyName .. ".", MESSAGE_EVENT_ADVANCE)
		    return true
    end

    if(status == 4) then
		    doPlayerSendChannelMessage(cid, "", "Currently there's no pending war truce from " .. enemyName .. ".", TALKTYPE_CHANNEL_W, 0)
		    return true
    end

    tmp = db.getResult("SELECT `id`, `end` FROM `guild_wars` WHERE `guild_id` = " .. enemy .. " AND `enemy_id` = " .. guild .. " AND `status` = 1")
    if(tmp:getID() ~= -1) then
		    if(tmp:getDataInt("end") > 0) then
				    tmp:free()
				    doPlayerSendChannelMessage(cid, "", "You cannot request ending for war with " .. enemyName .. ".", TALKTYPE_CHANNEL_W, 0)
				    return true
		    end

		    local query = "UPDATE `guild_wars` SET `status` = 4, `end` = " .. os.time() .. " WHERE `id` = " .. tmp:getDataInt("id")
		    tmp:free()

		    db.executeQuery(query)
		    doBroadcastMessage(getPlayerGuildName(cid) .. " has signed an armstice declaration on a war with " .. enemyName .. ".", MESSAGE_EVENT_ADVANCE)
		    return true
    end

    doPlayerSendChannelMessage(cid, "", "Currently there's no active war with " .. enemyName .. ".", TALKTYPE_CHANNEL_W, 0)
    return true
end

 

 

Vale Rep+

 

#up

Link para o comentário
Compartilhar em outros sites

Olha ele diz que não esta reconhecendo esta função doguildaddenemy, confira nas libs se existe esta função ou se ela esta declarada mais acima..

de onde você pegou este sistema war? posso ajudar mais se souber qual é o war system que utilizou.

Link para o comentário
Compartilhar em outros sites

  • 5 years later...
A questão neste tópico de suporte foi encerrada por falta de respostas. Este tópico está fechado e foi movido para Suporte - Tópicos Sem Resposta.

+ Caso a dúvida não tenha sido resolvida você poderá criar outro tópico solicitando ajuda.
* Lembre-se que é permitido dar UP no tópico a cada 24 horas para assim o destacar e manter movimentado.
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.
×
×
  • Criar Novo...