• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

[Talkaction] Trade points per Talkaction

johny5608

johny
Joined
Oct 5, 2008
Messages
120
Reaction score
0
Location
Wien
Hello guys,
I search a talkaction script for Trading SMS points per talkaction.
I mean:
Player says:!points johny,15
Then there opens a Trade window with a label and on the label is this information; You see a label. 15 Sms Shop points!
Then when the player Traded a item or Money then the label is removed and the player recrive 15 points.!

!points <Player name to trade>,<How much points>
Please help.
:peace:
---Like on Elf's OTS [Wypas]---
 
Lua:
  function onSay(cid, words, param) 
        local t = string.explode(param, ",") 
        if t[1] ~= nil and t[2] ~= nil then 
                if(db.executeQuery("UPDATE `accounts`, `players` SET `accounts`.`premium_points` = `accounts`.`premium_points`+" .. t[2] .. " WHERE `players`.`name` = " .. db.escapeString(t[1]) .. " AND `players`.`account_id` = `accounts`.`id`;")) then 
                    doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, t[1] .. " has received "..t[2].." premium points.") 
                else 
                    doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Player with name " .. t[1] .. " doesn't exist.") 
                end 
        else 
                doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Command Requires Two Params (name,points).") 
        end 
        return TRUE 
end

In talkactions.xml put this:

Code:
	<talkaction log="yes" access="3" words="/addpoints" event="script" value="points.lua"/>
 
Doesnt !sellhouse open trade?
It does. However:
Code:
	<talkaction words="alana grav" filter="word-spaced" [B][COLOR="Red"]event="function" value="houseSell"[/COLOR][/B]/>
Notice the "function". That means it's scripted in sources (talkactions.cpp)
Code:
bool TalkAction::houseSell(Creature* creature, const std::string& cmd, const std::string& param)
{
	Player* player = creature->getPlayer();
	if(!player || !g_config.getBool(ConfigManager::HOUSE_BUY_AND_SELL))
		return false;

	House* house = Houses::getInstance()->getHouseByPlayerId(player->getGUID());
	if(!house && (!player->getGuildId() || !(house = Houses::getInstance()->getHouseByGuildId(player->getGuildId()))))
	{
		player->sendCancel("You do not rent any flat.");
		g_game.addMagicEffect(player->getPosition(), MAGIC_EFFECT_POFF);
		return false;
	}

	if(house->isGuild() && player->getGuildLevel() != GUILDLEVEL_LEADER)
	{
		player->sendCancel("You have to be at least a guild leader to sell this hall.");
		g_game.addMagicEffect(player->getPosition(), MAGIC_EFFECT_POFF);
		return false;
	}

	Player* tradePartner = NULL;
	ReturnValue ret = g_game.getPlayerByNameWildcard(param, tradePartner);
	if(ret != RET_NOERROR)
	{
		player->sendCancelMessage(ret);
		g_game.addMagicEffect(player->getPosition(), MAGIC_EFFECT_POFF);
		return false;
	}

	if(tradePartner == player)
	{
		player->sendCancel("You cannot trade with yourself.");
		g_game.addMagicEffect(player->getPosition(), MAGIC_EFFECT_POFF);
		return false;
	}

	if(!house->isGuild())
	{
		if(Houses::getInstance()->getHouseByPlayerId(tradePartner->getGUID()))
		{
			player->sendCancel("Trade player already rents another house.");
			g_game.addMagicEffect(player->getPosition(), MAGIC_EFFECT_POFF);
			return false;
		}

		uint16_t housesPerAccount = g_config.getNumber(ConfigManager::HOUSES_PER_ACCOUNT);
		if(housesPerAccount > 0 && Houses::getInstance()->getHousesCount(tradePartner->getAccount()) >= housesPerAccount)
		{
			char buffer[100];
			sprintf(buffer, "Trade player has reached limit of %d house%s per account.", housesPerAccount, (housesPerAccount != 1 ? "s" : ""));

			player->sendCancel(buffer);
			g_game.addMagicEffect(player->getPosition(), MAGIC_EFFECT_POFF);
			return false;
		}

		if(!tradePartner->isPremium() && !g_config.getBool(ConfigManager::HOUSE_NEED_PREMIUM))
		{
			player->sendCancel("Trade player does not have a premium account.");
			g_game.addMagicEffect(player->getPosition(), MAGIC_EFFECT_POFF);
			return false;
		}

		uint32_t levelToBuyHouse = g_config.getNumber(ConfigManager::LEVEL_TO_BUY_HOUSE);
		if(tradePartner->getLevel() < levelToBuyHouse)
		{
			char buffer[100];
			sprintf(buffer, "Trade player has to be at least Level %d to buy house.", levelToBuyHouse);

			player->sendCancel(buffer);
			g_game.addMagicEffect(player->getPosition(), MAGIC_EFFECT_POFF);
			return false;
		}
	}
	else
	{
		if(!tradePartner->getGuildId() || tradePartner->getGuildLevel() != GUILDLEVEL_LEADER)
		{
			player->sendCancel("Trade player has to be at least a guild leader to buy a hall.");
			g_game.addMagicEffect(player->getPosition(), MAGIC_EFFECT_POFF);
			return false;
		}

		if(Houses::getInstance()->getHouseByGuildId(tradePartner->getGuildId()))
		{
			player->sendCancel("Trade player's guild already rents another hall.");
			g_game.addMagicEffect(player->getPosition(), MAGIC_EFFECT_POFF);
			return false;
		}
	}

	if(!Position::areInRange<3,3,0>(tradePartner->getPosition(), player->getPosition()))
	{
		player->sendCancel("Trade player is too far away.");
		g_game.addMagicEffect(player->getPosition(), MAGIC_EFFECT_POFF);
		return false;
	}

	if(!Houses::getInstance()->payRent(player, house, 0))
	{
		player->sendCancel("You have to pay a pre-rent first.");
		g_game.addMagicEffect(player->getPosition(), MAGIC_EFFECT_POFF);
		return false;
	}

	Item* transferItem = TransferItem::createTransferItem(house);
	player->transferContainer.__addThing(NULL, transferItem);

	player->transferContainer.setParent(player);
	if(!g_game.internalStartTrade(player, tradePartner, transferItem))
		transferItem->onTradeEvent(ON_TRADE_CANCEL, player, NULL);

	g_game.addMagicEffect(player->getPosition(), MAGIC_EFFECT_WRAPS_BLUE);
	return false;
}
 
Lua:
  function onSay(cid, words, param) 
        local t = string.explode(param, ",") 
        if t[1] ~= nil and t[2] ~= nil then 
                if(db.executeQuery("UPDATE `accounts`, `players` SET `accounts`.`premium_points` = `accounts`.`premium_points`+" .. t[2] .. " WHERE `players`.`name` = " .. db.escapeString(t[1]) .. " AND `players`.`account_id` = `accounts`.`id`;")) then 
                    doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, t[1] .. " has received "..t[2].." premium points.") 
                else 
                    doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Player with name " .. t[1] .. " doesn't exist.") 
                end 
        else 
                doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Command Requires Two Params (name,points).") 
        end 
        return TRUE 
end

In talkactions.xml put this:

Code:
	<talkaction log="yes" access="3" words="/addpoints" event="script" value="points.lua"/>

I don't want a script that the GM or GOD give Points!
I need a script that the players sending points to other Players by Trade Window!

--Maby a C++ LUA Script/function that opens TradeWindow:
Example:
openTradeWindow
--
 
Back
Top