• 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!

[c++] Creature Script >>onCreateMonster(cid)<<

Dominik ms

Member
Joined
Jan 20, 2010
Messages
424
Reaction score
6
I am searching for new code CreatureScript onCreateMonster(cid) {like onLogin, but for monsters}
This must be run when new monster was spawned.
For Ex:
PHP:
function onCreateMonster(cid)
local name = getCreatureName(cid)
if name == "test" then
print("monster with name ["..name.."] join to game")
end
return true
end
 
@up thx!! (work with function onAttack)
i have problem, i must add new creaturescript, but i always go error

PHP:
[Error - CreatureEvent::configureEvent] No valid type for creature event.createThing
[Warning - BaseEvents::loadFromXml] Cannot configure an event

this is my code
under:
PHP:
	else if(tmpStr == "attack")
		m_type = CREATURE_EVENT_ATTACK;
This:
PHP:
	else if(tmpStr == "createThing")
		m_type = CREATURE_EVENT_CREATE;
under:
PHP:
		case CREATURE_EVENT_ATTACK:
			return "onAttack";
This:
PHP:
		case CREATURE_EVENT_CREATE:
			return "onCreate";
under:
PHP:
		case CREATURE_EVENT_ATTACK:
This:
PHP:
		case CREATURE_EVENT_CREATE:
             return "cid";

before:
PHP:
uint32_t CreatureEvent::executeAttack(Creature* creature, Creature* target)
This:
PHP:
uint32_t CreatureEvent::executeCreateThing(Creature* creature)
{
	//onAttack(cid, target)
	if(m_interface->reserveEnv())
	{
		ScriptEnviroment* env = m_interface->getEnv();
		if(m_scripted == EVENT_SCRIPT_BUFFER)
		{
			env->setRealPos(creature->getPosition());
			std::stringstream scriptstream;

			scriptstream << "local cid = " << env->addThing(creature) << std::endl;

			scriptstream << m_scriptData;
			bool result = true;
			if(m_interface->loadBuffer(scriptstream.str()))
			{
				lua_State* L = m_interface->getState();
				result = m_interface->getGlobalBool(L, "_result", true);
			}

			m_interface->releaseEnv();
			return result;
		}
		else
		{
			#ifdef __DEBUG_LUASCRIPTS__
			std::stringstream desc;
			desc << creature->getName();
			env->setEventDesc(desc.str());
			#endif

			env->setScriptId(m_scriptId, m_interface);
			env->setRealPos(creature->getPosition());

			lua_State* L = m_interface->getState();
			m_interface->pushFunction(m_scriptId);

			lua_pushnumber(L, env->addThing(creature));

			bool result = m_interface->callFunction(2);
			m_interface->releaseEnv();
			return result;
		}
	}
	else
	{
		std::cout << "[Error - CreatureEvent::executeCreateThing] Call stack overflow." << std::endl;
		return 0;
	}
}
In creatureeventt.h
under:
PHP:
		uint32_t executeAttack(Creature* creature, Creature* target);
This:
PHP:
		uint32_t executeCreateThing(Creature* creature);

and game.cpp
under:
PHP:
creature->getParent()->postAddNotification(NULL, creature, NULL, creature->getParent()->__getIndexOfThing(creature));
	addCreatureCheck(creature);
This:
PHP:
	bool deny = false;
	CreatureEventList createThing = creature->getCreatureEvents(CREATURE_EVENT_CREATE);
	for(CreatureEventList::iterator it = createThing.begin(); it != createThing.end(); ++it)
	{
		if(!(*it)->executeCreateThing(creature) && !deny)
			deny = true;
	}
 
Last edited:
:/
PHP:
[Error - CreatureEvent::configureEvent] No valid type for creature event.createThing
[Warning - BaseEvents::loadFromXml] Cannot configure an event
 
PHP:
	<event type="createThing" name="create" event="script" value="create.lua"/>

and

PHP:
function onCreate(cid)
say(cid, "I am Creating!")
	return true
end
 
Looks ok, try to rebuild sources. Win -> full rebuild, linux -> make clean && make

EDIT:
You forgot about getScriptEventParams() in creaturevent.cpp. Need to define args for event.
 
I have in this code, but now edit to:
PHP:
		case CREATURE_EVENT_CREATE:
             return "cid";
And creatureScript not found ;(


@edit
I transfer function onLogin from player to creature and it work for monsters too :)
 
Last edited:
Back
Top